package com.l7tech.gateway.api;

import com.l7tech.gateway.api.impl.AttributeExtensibleType;
import com.l7tech.gateway.api.impl.ElementExtensionSupport;
import com.l7tech.gateway.api.impl.PropertiesMapType;
import com.l7tech.util.Functions;
import jakarta.xml.bind.annotation.XmlAnyAttribute;
import jakarta.xml.bind.annotation.XmlAnyElement;
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlElementRef;
import jakarta.xml.bind.annotation.XmlElementWrapper;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlSeeAlso;
import jakarta.xml.bind.annotation.XmlType;
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;

@XmlType(name = "ServiceDetailType", propOrder = {"nameValue", "enabledValue", "serviceMappings", "properties", "extension", "extensions"})
@XmlSeeAlso({ServiceDetail.HttpMapping.class, ServiceDetail.SoapMapping.class})
public class ServiceDetail extends ElementExtensionSupport {
   private String d;
   private String e;
   private Integer f;
   private AttributeExtensibleType.AttributeExtensibleString g;
   private AttributeExtensibleType.AttributeExtensibleBoolean h = new AttributeExtensibleType.AttributeExtensibleBoolean(false);
   private List<? extends ServiceDetail.ServiceMapping> i;
   private Map<String, Object> j;

   @XmlAttribute(name = "id")
   public String getId() {
      return this.d;
   }

   public void setId(String var1) {
      this.d = var1;
   }

   @XmlAttribute(name = "version")
   public Integer getVersion() {
      return this.f;
   }

   public void setVersion(Integer var1) {
      this.f = var1;
   }

   @XmlAttribute(name = "folderId")
   public String getFolderId() {
      return this.e;
   }

   public void setFolderId(String var1) {
      this.e = var1;
   }

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

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

   public boolean getEnabled() {
      return AttributeExtensibleType.get(this.h, false);
   }

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

   @XmlElementWrapper(name = "ServiceMappings")
   @XmlElementRef
   public List<? extends ServiceDetail.ServiceMapping> getServiceMappings() {
      return this.i;
   }

   public void setServiceMappings(List<? extends ServiceDetail.ServiceMapping> var1) {
      this.i = var1;
   }

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

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

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

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

   @XmlElement(name = "Enabled", required = true)
   protected AttributeExtensibleType.AttributeExtensibleBoolean getEnabledValue() {
      return this.h;
   }

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

   ServiceDetail() {
   }

   @XmlRootElement(name = "HttpMapping")
   @XmlType(name = "HttpServiceMappingType", propOrder = {"urlPatternValue", "verbsValue", "extensions"})
   public static class HttpMapping extends ServiceDetail.ServiceMapping {
      private AttributeExtensibleType.AttributeExtensibleString a;
      private List<AttributeExtensibleType.AttributeExtensibleString> b;
      private List<Object> c;
      private Map<QName, Object> d;

      HttpMapping() {
      }

      public String getUrlPattern() {
         return AttributeExtensibleType.get(this.a);
      }

      public void setUrlPattern(String var1) {
         this.a = AttributeExtensibleType.set(this.a, var1);
      }

      public List<String> getVerbs() {
         return this.b == null ? null : Functions.map(this.b, new l(this));
      }

      public void setVerbs(List<String> var1) {
         this.b = var1 == null ? null : Functions.map(var1, new m(this));
      }

      @XmlElement(name = "UrlPattern")
      protected AttributeExtensibleType.AttributeExtensibleString getUrlPatternValue() {
         return this.a;
      }

      protected void setUrlPatternValue(AttributeExtensibleType.AttributeExtensibleString var1) {
         this.a = var1;
      }

      @XmlElementWrapper(name = "Verbs")
      @XmlElement(name = "Verb")
      protected List<AttributeExtensibleType.AttributeExtensibleString> getVerbsValue() {
         return this.b;
      }

      protected void setVerbsValue(List<AttributeExtensibleType.AttributeExtensibleString> var1) {
         this.b = var1;
      }

      @XmlAnyAttribute
      protected Map<QName, Object> getAttributeExtensions() {
         return this.d;
      }

      protected void setAttributeExtensions(Map<QName, Object> var1) {
         this.d = var1;
      }

      @XmlAnyElement(lax = true)
      protected List<Object> getExtensions() {
         return this.c;
      }

      protected void setExtensions(List<Object> var1) {
         this.c = var1;
      }
   }

   @XmlType(name = "ServiceMappingType")
   public abstract static class ServiceMapping {
   }

   @XmlRootElement(name = "SoapMapping")
   @XmlType(name = "SoapServiceMappingType", propOrder = {"laxValue", "extensions"})
   public static class SoapMapping extends ServiceDetail.ServiceMapping {
      private AttributeExtensibleType.AttributeExtensibleBoolean a = new AttributeExtensibleType.AttributeExtensibleBoolean(false);
      private List<Object> b;
      private Map<QName, Object> c;

      SoapMapping() {
      }

      public boolean isLax() {
         return AttributeExtensibleType.get(this.a, false);
      }

      public void setLax(boolean var1) {
         this.a = AttributeExtensibleType.set(this.a, var1);
      }

      @XmlElement(name = "Lax", required = true)
      protected AttributeExtensibleType.AttributeExtensibleBoolean getLaxValue() {
         return this.a;
      }

      protected void setLaxValue(AttributeExtensibleType.AttributeExtensibleBoolean var1) {
         this.a = var1;
      }

      @XmlAnyAttribute
      protected Map<QName, Object> getAttributeExtensions() {
         return this.c;
      }

      protected void setAttributeExtensions(Map<QName, Object> var1) {
         this.c = var1;
      }

      @XmlAnyElement(lax = true)
      protected List<Object> getExtensions() {
         return this.b;
      }

      protected void setExtensions(List<Object> var1) {
         this.b = var1;
      }
   }
}
