package com.l7tech.gateway.api;

import com.l7tech.gateway.api.impl.AccessorSupport;
import com.l7tech.gateway.api.impl.AttributeExtensibleType;
import com.l7tech.gateway.api.impl.ElementExtendableAccessibleObject;
import com.l7tech.gateway.api.impl.ElementExtensionSupport;
import com.l7tech.gateway.api.impl.ManagedObjectReference;
import com.l7tech.gateway.api.impl.PropertiesMapType;
import com.l7tech.util.Functions.Nullary;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlElementWrapper;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlType;
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@XmlRootElement(name = "EncapsulatedAssertion")
@XmlType(
   name = "EncapsulatedAssertionType",
   propOrder = {
         "nameValue",
         "guidValue",
         "policyReference",
         "encapsulatedArgumentsValues",
         "encapsulatedResultsValues",
         "properties",
         "resourceSets",
         "extension",
         "extensions"
   }
)
@AccessorSupport.AccessibleResource(name = "encapsulatedAssertions")
public class EncapsulatedAssertionMO extends ElementExtendableAccessibleObject {
   private AttributeExtensibleType.AttributeExtensibleString h;
   private AttributeExtensibleType.AttributeExtensibleString i;
   private ManagedObjectReference j;
   private EncapsulatedAssertionMO.AttributeExtensibleEncapsulatedArgumentList k;
   private EncapsulatedAssertionMO.AttributeExtensibleEncapsulatedResultList l;
   private Map<String, String> m;
   private List<ResourceSet> n;

   public String getName() {
      return AttributeExtensibleType.get(this.h);
   }

   public void setName(String var1) {
      this.h = AttributeExtensibleType.set(this.h, var1);
   }

   public String getGuid() {
      return AttributeExtensibleType.get(this.i);
   }

   public void setGuid(String var1) {
      this.i = AttributeExtensibleType.set(this.i, var1);
   }

   @XmlElement(name = "PolicyReference")
   public ManagedObjectReference getPolicyReference() {
      return this.j;
   }

   public void setPolicyReference(ManagedObjectReference var1) {
      this.j = var1;
   }

   public List<EncapsulatedAssertionMO.EncapsulatedArgument> getEncapsulatedArguments() {
      return AttributeExtensibleType.get(this.k, new ArrayList<>());
   }

   public void setEncapsulatedArguments(List<EncapsulatedAssertionMO.EncapsulatedArgument> var1) {
      this.k = AttributeExtensibleType.set(this.k, var1, EncapsulatedAssertionMO.AttributeExtensibleEncapsulatedArgumentList.c);
   }

   public List<EncapsulatedAssertionMO.EncapsulatedResult> getEncapsulatedResults() {
      return AttributeExtensibleType.get(this.l, new ArrayList<>());
   }

   public void setEncapsulatedResults(List<EncapsulatedAssertionMO.EncapsulatedResult> var1) {
      this.l = AttributeExtensibleType.set(this.l, var1, EncapsulatedAssertionMO.AttributeExtensibleEncapsulatedResultList.c);
   }

   @XmlElement(name = "Properties")
   @XmlJavaTypeAdapter(PropertiesMapType.PropertiesMapTypeAdapter.class)
   public Map<String, String> getProperties() {
      return this.m;
   }

   public void setProperties(Map<String, String> var1) {
      this.m = var1;
   }

   @XmlElement(name = "Name", required = true)
   protected AttributeExtensibleType.AttributeExtensibleString getNameValue() {
      return this.h;
   }

   protected void setNameValue(AttributeExtensibleType.AttributeExtensibleString var1) {
      this.h = var1;
   }

   @XmlElement(name = "Guid")
   protected AttributeExtensibleType.AttributeExtensibleString getGuidValue() {
      return this.i;
   }

   protected void setGuidValue(AttributeExtensibleType.AttributeExtensibleString var1) {
      this.i = var1;
   }

   @XmlElement(name = "EncapsulatedArguments")
   protected EncapsulatedAssertionMO.AttributeExtensibleEncapsulatedArgumentList getEncapsulatedArgumentsValues() {
      return this.k;
   }

   protected void setEncapsulatedArgumentsValues(EncapsulatedAssertionMO.AttributeExtensibleEncapsulatedArgumentList var1) {
      this.k = var1;
   }

   @XmlElement(name = "EncapsulatedResults")
   protected EncapsulatedAssertionMO.AttributeExtensibleEncapsulatedResultList getEncapsulatedResultsValues() {
      return this.l;
   }

   protected void setEncapsulatedResultsValues(EncapsulatedAssertionMO.AttributeExtensibleEncapsulatedResultList var1) {
      this.l = var1;
   }

   @XmlElementWrapper(name = "Resources", required = false)
   @XmlElement(name = "ResourceSet", required = false)
   public List<ResourceSet> getResourceSets() {
      return this.n;
   }

   public void setResourceSets(List<ResourceSet> var1) {
      this.n = var1;
   }

   EncapsulatedAssertionMO() {
   }

   @XmlType(name = "EncapsulatedArgumentListPropertyType", propOrder = "value")
   protected static class AttributeExtensibleEncapsulatedArgumentList
      extends AttributeExtensibleType.AttributeExtensible<List<EncapsulatedAssertionMO.EncapsulatedArgument>> {
      private List<EncapsulatedAssertionMO.EncapsulatedArgument> b;
      private static final Nullary<EncapsulatedAssertionMO.AttributeExtensibleEncapsulatedArgumentList> c = new e();

      @XmlElement(name = "EncapsulatedAssertionArgument")
      public List<EncapsulatedAssertionMO.EncapsulatedArgument> getValue() {
         return this.b;
      }

      public void setValue(List<EncapsulatedAssertionMO.EncapsulatedArgument> var1) {
         this.b = var1;
      }
   }

   @XmlType(name = "EncapsulatedResultListPropertyType", propOrder = "value")
   protected static class AttributeExtensibleEncapsulatedResultList
      extends AttributeExtensibleType.AttributeExtensible<List<EncapsulatedAssertionMO.EncapsulatedResult>> {
      private List<EncapsulatedAssertionMO.EncapsulatedResult> b;
      private static final Nullary<EncapsulatedAssertionMO.AttributeExtensibleEncapsulatedResultList> c = new f();

      @XmlElement(name = "EncapsulatedAssertionResult")
      public List<EncapsulatedAssertionMO.EncapsulatedResult> getValue() {
         return this.b;
      }

      public void setValue(List<EncapsulatedAssertionMO.EncapsulatedResult> var1) {
         this.b = var1;
      }
   }

   @XmlRootElement(name = "EncapsulatedArgument")
   @XmlType(
      name = "EncapsulatedAssertionArgumentType",
      propOrder = {"ordinalValue", "argumentNameValue", "argumentTypeValue", "guiLabelValue", "guiPromptValue", "extension", "extensions"}
   )
   public static class EncapsulatedArgument extends ElementExtensionSupport {
      private AttributeExtensibleType.AttributeExtensibleInteger d;
      private AttributeExtensibleType.AttributeExtensibleString e;
      private AttributeExtensibleType.AttributeExtensibleString f;
      private AttributeExtensibleType.AttributeExtensibleString g;
      private AttributeExtensibleType.AttributeExtensibleBoolean h;

      public int getOrdinal() {
         return AttributeExtensibleType.get(this.d);
      }

      public void setOrdinal(int var1) {
         this.d = AttributeExtensibleType.set(this.d, var1);
      }

      public String getArgumentName() {
         return AttributeExtensibleType.get(this.e);
      }

      public void setArgumentName(String var1) {
         this.e = AttributeExtensibleType.set(this.e, var1);
      }

      public String getArgumentType() {
         return AttributeExtensibleType.get(this.f);
      }

      public void setArgumentType(String var1) {
         this.f = AttributeExtensibleType.set(this.f, var1);
      }

      public String getGuiLabel() {
         return AttributeExtensibleType.get(this.g);
      }

      public void setGuiLabel(String var1) {
         this.g = AttributeExtensibleType.set(this.g, var1);
      }

      public boolean isGuiPrompt() {
         return AttributeExtensibleType.get(this.h);
      }

      public void setGuiPrompt(boolean var1) {
         this.h = AttributeExtensibleType.set(this.h, var1);
      }

      @XmlElement(name = "Ordinal")
      protected AttributeExtensibleType.AttributeExtensibleInteger getOrdinalValue() {
         return this.d;
      }

      protected void setOrdinalValue(AttributeExtensibleType.AttributeExtensibleInteger var1) {
         this.d = var1;
      }

      @XmlElement(name = "ArgumentName")
      protected AttributeExtensibleType.AttributeExtensibleString getArgumentNameValue() {
         return this.e;
      }

      protected void setArgumentNameValue(AttributeExtensibleType.AttributeExtensibleString var1) {
         this.e = var1;
      }

      @XmlElement(name = "ArgumentType")
      protected AttributeExtensibleType.AttributeExtensibleString getArgumentTypeValue() {
         return this.f;
      }

      protected void setArgumentTypeValue(AttributeExtensibleType.AttributeExtensibleString var1) {
         this.f = var1;
      }

      @XmlElement(name = "GuiLabel")
      protected AttributeExtensibleType.AttributeExtensibleString getGuiLabelValue() {
         return this.g;
      }

      protected void setGuiLabelValue(AttributeExtensibleType.AttributeExtensibleString var1) {
         this.g = var1;
      }

      @XmlElement(name = "GuiPrompt")
      protected AttributeExtensibleType.AttributeExtensibleBoolean getGuiPromptValue() {
         return this.h;
      }

      protected void setGuiPromptValue(AttributeExtensibleType.AttributeExtensibleBoolean var1) {
         this.h = var1;
      }
   }

   @XmlRootElement(name = "EncapsulatedResult")
   @XmlType(name = "EncapsulatedResultType", propOrder = {"resultNameValue", "resultTypeValue", "extension", "extensions"})
   public static class EncapsulatedResult extends ElementExtensionSupport {
      private AttributeExtensibleType.AttributeExtensibleString d;
      private AttributeExtensibleType.AttributeExtensibleString e;

      public String getResultName() {
         return AttributeExtensibleType.get(this.d);
      }

      public void setResultName(String var1) {
         this.d = AttributeExtensibleType.set(this.d, var1);
      }

      public String getResultType() {
         return AttributeExtensibleType.get(this.e);
      }

      public void setResultType(String var1) {
         this.e = AttributeExtensibleType.set(this.e, var1);
      }

      @XmlElement(name = "ResultName")
      protected AttributeExtensibleType.AttributeExtensibleString getResultNameValue() {
         return this.d;
      }

      protected void setResultNameValue(AttributeExtensibleType.AttributeExtensibleString var1) {
         this.d = var1;
      }

      @XmlElement(name = "ResultType")
      protected AttributeExtensibleType.AttributeExtensibleString getResultTypeValue() {
         return this.e;
      }

      protected void setResultTypeValue(AttributeExtensibleType.AttributeExtensibleString var1) {
         this.e = var1;
      }
   }
}
