/*
 * WSO2 API Manager - Publisher API
 * This document specifies a **RESTful API** for WSO2 **API Manager** - **Publisher**.  # Authentication The Publisher REST API is protected using OAuth2 and access control is achieved through scopes. Before you start invoking the the API you need to obtain an access token with the required scopes. This guide will walk you through the steps that you will need to follow to obtain an access token. First you need to obtain the consumer key/secret key pair by calling the dynamic client registration (DCR) endpoint. You can add your preferred grant types in the payload. A Sample payload is shown below. ```   {   \"callbackUrl\":\"www.google.lk\",   \"clientName\":\"rest_api_publisher\",   \"owner\":\"admin\",   \"grantType\":\"client_credentials password refresh_token\",   \"saasApp\":true   } ``` Create a file (payload.json) with the above sample payload, and use the cURL shown bellow to invoke the DCR endpoint. Authorization header of this should contain the base64 encoded admin username and password. **Format of the request** ```   curl -X POST -H \"Authorization: Basic Base64(admin_username:admin_password)\" -H \"Content-Type: application/json\"   \\ -d @payload.json https://<host>:<servlet_port>/client-registration/v0.17/register ``` **Sample request** ```   curl -X POST -H \"Authorization: Basic YWRtaW46YWRtaW4=\" -H \"Content-Type: application/json\"   \\ -d @payload.json https://localhost:9443/client-registration/v0.17/register ``` Following is a sample response after invoking the above curl. ``` { \"clientId\": \"fOCi4vNJ59PpHucC2CAYfYuADdMa\", \"clientName\": \"rest_api_publisher\", \"callBackURL\": \"www.google.lk\", \"clientSecret\": \"a4FwHlq0iCIKVs2MPIIDnepZnYMa\", \"isSaasApplication\": true, \"appOwner\": \"admin\", \"jsonString\": \"{\\\"grant_types\\\":\\\"client_credentials password refresh_token\\\",\\\"redirect_uris\\\":\\\"www.google.lk\\\",\\\"client_name\\\":\\\"rest_api123\\\"}\", \"jsonAppAttribute\": \"{}\", \"tokenType\": null } ``` Next you must use the above client id and secret to obtain the access token. We will be using the password grant type for this, you can use any grant type you desire. You also need to add the proper **scope** when getting the access token. All possible scopes for publisher REST API can be viewed in **OAuth2 Security** section of this document and scope for each resource is given in **authorization** section of resource documentation. Following is the format of the request if you are using the password grant type. ``` curl -k -d \"grant_type=password&username=<admin_username>&password=<admin_passowrd&scope=<scopes seperated by space>\" \\ -H \"Authorization: Basic base64(cliet_id:client_secret)\" \\ https://<host>:<servlet_port>/oauth2/token ``` **Sample request** ``` curl https://localhost:9443/oauth2/token -k \\ -H \"Authorization: Basic Zk9DaTR2Tko1OVBwSHVjQzJDQVlmWXVBRGRNYTphNEZ3SGxxMGlDSUtWczJNUElJRG5lcFpuWU1h\" \\ -d \"grant_type=password&username=admin&password=admin&scope=apim:api_view apim:api_create\" ``` Shown below is a sample response to the above request. ``` { \"access_token\": \"e79bda48-3406-3178-acce-f6e4dbdcbb12\", \"refresh_token\": \"a757795d-e69f-38b8-bd85-9aded677a97c\", \"scope\": \"apim:api_create apim:api_view\", \"token_type\": \"Bearer\", \"expires_in\": 3600 } ``` Now you have a valid access token, which you can use to invoke an API. Navigate through the API descriptions to find the required API, obtain an access token as described above and invoke the API with the authentication header. If you use a different authentication mechanism, this process may change.  # Try out in Postman If you want to try-out the embedded postman collection with \"Run in Postman\" option, please follow the guidelines listed below. * All of the OAuth2 secured endpoints have been configured with an Authorization Bearer header with a parameterized access token. Before invoking any REST API resource make sure you run the `Register DCR Application` and `Generate Access Token` requests to fetch an access token with all required scopes. * Make sure you have an API Manager instance up and running. * Update the `basepath` parameter to match the hostname and port of the APIM instance.  [![Run in Postman](https://run.pstmn.io/button.svg)](https://app.getpostman.com/run-collection/a09044034b5c3c1b01a9) 
 *
 * The version of the OpenAPI document: v3
 * Contact: architecture@wso2.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


package org.wso2.am.integration.clients.publisher.api.v1.dto;

import java.util.Objects;
import java.util.Arrays;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.wso2.am.integration.clients.publisher.api.v1.dto.APIBusinessInformationDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.APICorsConfigurationDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.APIInfoAdditionalPropertiesDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.APIInfoAdditionalPropertiesMapDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.APIMaxTpsDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.APIMonetizationInfoDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.APIOperationsDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.APIScopeDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.APIServiceInfoDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.APIThreatProtectionPoliciesDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.AdvertiseInfoDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.MediationPolicyDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.WSDLInfoDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.WebsubSubscriptionConfigurationDTO;
import com.fasterxml.jackson.annotation.JsonCreator;
/**
* APIDTO
*/

public class APIDTO {
        public static final String SERIALIZED_NAME_ID = "id";
        @SerializedName(SERIALIZED_NAME_ID)
            private String id;

        public static final String SERIALIZED_NAME_NAME = "name";
        @SerializedName(SERIALIZED_NAME_NAME)
            private String name;

        public static final String SERIALIZED_NAME_DESCRIPTION = "description";
        @SerializedName(SERIALIZED_NAME_DESCRIPTION)
            private String description;

        public static final String SERIALIZED_NAME_CONTEXT = "context";
        @SerializedName(SERIALIZED_NAME_CONTEXT)
            private String context;

        public static final String SERIALIZED_NAME_VERSION = "version";
        @SerializedName(SERIALIZED_NAME_VERSION)
            private String version;

        public static final String SERIALIZED_NAME_PROVIDER = "provider";
        @SerializedName(SERIALIZED_NAME_PROVIDER)
            private String provider;

        public static final String SERIALIZED_NAME_LIFE_CYCLE_STATUS = "lifeCycleStatus";
        @SerializedName(SERIALIZED_NAME_LIFE_CYCLE_STATUS)
            private String lifeCycleStatus;

        public static final String SERIALIZED_NAME_WSDL_INFO = "wsdlInfo";
        @SerializedName(SERIALIZED_NAME_WSDL_INFO)
            private WSDLInfoDTO wsdlInfo;

        public static final String SERIALIZED_NAME_WSDL_URL = "wsdlUrl";
        @SerializedName(SERIALIZED_NAME_WSDL_URL)
            private String wsdlUrl;

        public static final String SERIALIZED_NAME_RESPONSE_CACHING_ENABLED = "responseCachingEnabled";
        @SerializedName(SERIALIZED_NAME_RESPONSE_CACHING_ENABLED)
            private Boolean responseCachingEnabled;

        public static final String SERIALIZED_NAME_CACHE_TIMEOUT = "cacheTimeout";
        @SerializedName(SERIALIZED_NAME_CACHE_TIMEOUT)
            private Integer cacheTimeout;

        public static final String SERIALIZED_NAME_HAS_THUMBNAIL = "hasThumbnail";
        @SerializedName(SERIALIZED_NAME_HAS_THUMBNAIL)
            private Boolean hasThumbnail;

        public static final String SERIALIZED_NAME_IS_DEFAULT_VERSION = "isDefaultVersion";
        @SerializedName(SERIALIZED_NAME_IS_DEFAULT_VERSION)
            private Boolean isDefaultVersion;

        public static final String SERIALIZED_NAME_IS_REVISION = "isRevision";
        @SerializedName(SERIALIZED_NAME_IS_REVISION)
            private Boolean isRevision;

        public static final String SERIALIZED_NAME_REVISIONED_API_ID = "revisionedApiId";
        @SerializedName(SERIALIZED_NAME_REVISIONED_API_ID)
            private String revisionedApiId;

        public static final String SERIALIZED_NAME_REVISION_ID = "revisionId";
        @SerializedName(SERIALIZED_NAME_REVISION_ID)
            private Integer revisionId;

        public static final String SERIALIZED_NAME_ENABLE_SCHEMA_VALIDATION = "enableSchemaValidation";
        @SerializedName(SERIALIZED_NAME_ENABLE_SCHEMA_VALIDATION)
            private Boolean enableSchemaValidation;

            /**
* The api creation type to be used. Accepted values are HTTP, WS, SOAPTOREST, GRAPHQL, WEBSUB, SSE, WEBHOOK, ASYNC
*/
    @JsonAdapter(TypeEnum.Adapter.class)
public enum TypeEnum {
        HTTP("HTTP"),
        
        WS("WS"),
        
        SOAPTOREST("SOAPTOREST"),
        
        SOAP("SOAP"),
        
        GRAPHQL("GRAPHQL"),
        
        WEBSUB("WEBSUB"),
        
        SSE("SSE"),
        
        WEBHOOK("WEBHOOK"),
        
        ASYNC("ASYNC");

private String value;

TypeEnum(String value) {
this.value = value;
}

public String getValue() {
return value;
}

@Override
public String toString() {
return String.valueOf(value);
}

public static TypeEnum fromValue(String value) {
    for (TypeEnum b : TypeEnum.values()) {
    if (b.name().equals(value)) {
        return b;
    }
}
    throw new IllegalArgumentException("Unexpected value '" + value + "'");
}

    public static class Adapter extends TypeAdapter<TypeEnum> {
    @Override
    public void write(final JsonWriter jsonWriter, final TypeEnum enumeration) throws IOException {
    jsonWriter.value(enumeration.getValue());
    }

    @Override
    public TypeEnum read(final JsonReader jsonReader) throws IOException {
    String value =  jsonReader.nextString();
    return TypeEnum.fromValue(value);
    }
    }
}

        public static final String SERIALIZED_NAME_TYPE = "type";
        @SerializedName(SERIALIZED_NAME_TYPE)
            private TypeEnum type = TypeEnum.HTTP;

            /**
* The audience of the API. Accepted values are PUBLIC, SINGLE
*/
    @JsonAdapter(AudienceEnum.Adapter.class)
public enum AudienceEnum {
        PUBLIC("PUBLIC"),
        
        SINGLE("SINGLE");

private String value;

AudienceEnum(String value) {
this.value = value;
}

public String getValue() {
return value;
}

@Override
public String toString() {
return String.valueOf(value);
}

public static AudienceEnum fromValue(String value) {
    for (AudienceEnum b : AudienceEnum.values()) {
    if (b.name().equals(value)) {
        return b;
    }
}
    throw new IllegalArgumentException("Unexpected value '" + value + "'");
}

    public static class Adapter extends TypeAdapter<AudienceEnum> {
    @Override
    public void write(final JsonWriter jsonWriter, final AudienceEnum enumeration) throws IOException {
    jsonWriter.value(enumeration.getValue());
    }

    @Override
    public AudienceEnum read(final JsonReader jsonReader) throws IOException {
    String value =  jsonReader.nextString();
    return AudienceEnum.fromValue(value);
    }
    }
}

        public static final String SERIALIZED_NAME_AUDIENCE = "audience";
        @SerializedName(SERIALIZED_NAME_AUDIENCE)
            private AudienceEnum audience;

        public static final String SERIALIZED_NAME_TRANSPORT = "transport";
        @SerializedName(SERIALIZED_NAME_TRANSPORT)
            private List<String> transport = null;

        public static final String SERIALIZED_NAME_TAGS = "tags";
        @SerializedName(SERIALIZED_NAME_TAGS)
            private List<String> tags = null;

        public static final String SERIALIZED_NAME_POLICIES = "policies";
        @SerializedName(SERIALIZED_NAME_POLICIES)
            private List<String> policies = null;

        public static final String SERIALIZED_NAME_API_THROTTLING_POLICY = "apiThrottlingPolicy";
        @SerializedName(SERIALIZED_NAME_API_THROTTLING_POLICY)
            private String apiThrottlingPolicy;

        public static final String SERIALIZED_NAME_AUTHORIZATION_HEADER = "authorizationHeader";
        @SerializedName(SERIALIZED_NAME_AUTHORIZATION_HEADER)
            private String authorizationHeader;

        public static final String SERIALIZED_NAME_SECURITY_SCHEME = "securityScheme";
        @SerializedName(SERIALIZED_NAME_SECURITY_SCHEME)
            private List<String> securityScheme = null;

        public static final String SERIALIZED_NAME_MAX_TPS = "maxTps";
        @SerializedName(SERIALIZED_NAME_MAX_TPS)
            private APIMaxTpsDTO maxTps;

            /**
* The visibility level of the API. Accepts one of the following. PUBLIC, PRIVATE, RESTRICTED.
*/
    @JsonAdapter(VisibilityEnum.Adapter.class)
public enum VisibilityEnum {
        PUBLIC("PUBLIC"),
        
        PRIVATE("PRIVATE"),
        
        RESTRICTED("RESTRICTED");

private String value;

VisibilityEnum(String value) {
this.value = value;
}

public String getValue() {
return value;
}

@Override
public String toString() {
return String.valueOf(value);
}

public static VisibilityEnum fromValue(String value) {
    for (VisibilityEnum b : VisibilityEnum.values()) {
    if (b.name().equals(value)) {
        return b;
    }
}
    throw new IllegalArgumentException("Unexpected value '" + value + "'");
}

    public static class Adapter extends TypeAdapter<VisibilityEnum> {
    @Override
    public void write(final JsonWriter jsonWriter, final VisibilityEnum enumeration) throws IOException {
    jsonWriter.value(enumeration.getValue());
    }

    @Override
    public VisibilityEnum read(final JsonReader jsonReader) throws IOException {
    String value =  jsonReader.nextString();
    return VisibilityEnum.fromValue(value);
    }
    }
}

        public static final String SERIALIZED_NAME_VISIBILITY = "visibility";
        @SerializedName(SERIALIZED_NAME_VISIBILITY)
            private VisibilityEnum visibility = VisibilityEnum.PUBLIC;

        public static final String SERIALIZED_NAME_VISIBLE_ROLES = "visibleRoles";
        @SerializedName(SERIALIZED_NAME_VISIBLE_ROLES)
            private List<String> visibleRoles = null;

        public static final String SERIALIZED_NAME_VISIBLE_TENANTS = "visibleTenants";
        @SerializedName(SERIALIZED_NAME_VISIBLE_TENANTS)
            private List<String> visibleTenants = null;

        public static final String SERIALIZED_NAME_MEDIATION_POLICIES = "mediationPolicies";
        @SerializedName(SERIALIZED_NAME_MEDIATION_POLICIES)
            private List<MediationPolicyDTO> mediationPolicies = null;

            /**
* The subscription availability. Accepts one of the following. CURRENT_TENANT, ALL_TENANTS or SPECIFIC_TENANTS.
*/
    @JsonAdapter(SubscriptionAvailabilityEnum.Adapter.class)
public enum SubscriptionAvailabilityEnum {
        CURRENT_TENANT("CURRENT_TENANT"),
        
        ALL_TENANTS("ALL_TENANTS"),
        
        SPECIFIC_TENANTS("SPECIFIC_TENANTS");

private String value;

SubscriptionAvailabilityEnum(String value) {
this.value = value;
}

public String getValue() {
return value;
}

@Override
public String toString() {
return String.valueOf(value);
}

public static SubscriptionAvailabilityEnum fromValue(String value) {
    for (SubscriptionAvailabilityEnum b : SubscriptionAvailabilityEnum.values()) {
    if (b.name().equals(value)) {
        return b;
    }
}
    throw new IllegalArgumentException("Unexpected value '" + value + "'");
}

    public static class Adapter extends TypeAdapter<SubscriptionAvailabilityEnum> {
    @Override
    public void write(final JsonWriter jsonWriter, final SubscriptionAvailabilityEnum enumeration) throws IOException {
    jsonWriter.value(enumeration.getValue());
    }

    @Override
    public SubscriptionAvailabilityEnum read(final JsonReader jsonReader) throws IOException {
    String value =  jsonReader.nextString();
    return SubscriptionAvailabilityEnum.fromValue(value);
    }
    }
}

        public static final String SERIALIZED_NAME_SUBSCRIPTION_AVAILABILITY = "subscriptionAvailability";
        @SerializedName(SERIALIZED_NAME_SUBSCRIPTION_AVAILABILITY)
            private SubscriptionAvailabilityEnum subscriptionAvailability = SubscriptionAvailabilityEnum.CURRENT_TENANT;

        public static final String SERIALIZED_NAME_SUBSCRIPTION_AVAILABLE_TENANTS = "subscriptionAvailableTenants";
        @SerializedName(SERIALIZED_NAME_SUBSCRIPTION_AVAILABLE_TENANTS)
            private List<String> subscriptionAvailableTenants = null;

        public static final String SERIALIZED_NAME_ADDITIONAL_PROPERTIES = "additionalProperties";
        @SerializedName(SERIALIZED_NAME_ADDITIONAL_PROPERTIES)
            private List<APIInfoAdditionalPropertiesDTO> additionalProperties = null;

        public static final String SERIALIZED_NAME_ADDITIONAL_PROPERTIES_MAP = "additionalPropertiesMap";
        @SerializedName(SERIALIZED_NAME_ADDITIONAL_PROPERTIES_MAP)
            private Map<String, APIInfoAdditionalPropertiesMapDTO> additionalPropertiesMap = null;

        public static final String SERIALIZED_NAME_MONETIZATION = "monetization";
        @SerializedName(SERIALIZED_NAME_MONETIZATION)
            private APIMonetizationInfoDTO monetization;

            /**
* Is the API is restricted to certain set of publishers or creators or is it visible to all the publishers and creators. If the accessControl restriction is none, this API can be modified by all the publishers and creators, if not it can only be viewable/modifiable by certain set of publishers and creators,  based on the restriction. 
*/
    @JsonAdapter(AccessControlEnum.Adapter.class)
public enum AccessControlEnum {
        NONE("NONE"),
        
        RESTRICTED("RESTRICTED");

private String value;

AccessControlEnum(String value) {
this.value = value;
}

public String getValue() {
return value;
}

@Override
public String toString() {
return String.valueOf(value);
}

public static AccessControlEnum fromValue(String value) {
    for (AccessControlEnum b : AccessControlEnum.values()) {
    if (b.name().equals(value)) {
        return b;
    }
}
    throw new IllegalArgumentException("Unexpected value '" + value + "'");
}

    public static class Adapter extends TypeAdapter<AccessControlEnum> {
    @Override
    public void write(final JsonWriter jsonWriter, final AccessControlEnum enumeration) throws IOException {
    jsonWriter.value(enumeration.getValue());
    }

    @Override
    public AccessControlEnum read(final JsonReader jsonReader) throws IOException {
    String value =  jsonReader.nextString();
    return AccessControlEnum.fromValue(value);
    }
    }
}

        public static final String SERIALIZED_NAME_ACCESS_CONTROL = "accessControl";
        @SerializedName(SERIALIZED_NAME_ACCESS_CONTROL)
            private AccessControlEnum accessControl = AccessControlEnum.NONE;

        public static final String SERIALIZED_NAME_ACCESS_CONTROL_ROLES = "accessControlRoles";
        @SerializedName(SERIALIZED_NAME_ACCESS_CONTROL_ROLES)
            private List<String> accessControlRoles = null;

        public static final String SERIALIZED_NAME_BUSINESS_INFORMATION = "businessInformation";
        @SerializedName(SERIALIZED_NAME_BUSINESS_INFORMATION)
            private APIBusinessInformationDTO businessInformation = null;

        public static final String SERIALIZED_NAME_CORS_CONFIGURATION = "corsConfiguration";
        @SerializedName(SERIALIZED_NAME_CORS_CONFIGURATION)
            private APICorsConfigurationDTO corsConfiguration;

        public static final String SERIALIZED_NAME_WEBSUB_SUBSCRIPTION_CONFIGURATION = "websubSubscriptionConfiguration";
        @SerializedName(SERIALIZED_NAME_WEBSUB_SUBSCRIPTION_CONFIGURATION)
            private WebsubSubscriptionConfigurationDTO websubSubscriptionConfiguration;

        public static final String SERIALIZED_NAME_WORKFLOW_STATUS = "workflowStatus";
        @SerializedName(SERIALIZED_NAME_WORKFLOW_STATUS)
            private String workflowStatus;

        public static final String SERIALIZED_NAME_CREATED_TIME = "createdTime";
        @SerializedName(SERIALIZED_NAME_CREATED_TIME)
            private String createdTime;

        public static final String SERIALIZED_NAME_LAST_UPDATED_TIME = "lastUpdatedTime";
        @SerializedName(SERIALIZED_NAME_LAST_UPDATED_TIME)
            private String lastUpdatedTime;

        public static final String SERIALIZED_NAME_ENDPOINT_CONFIG = "endpointConfig";
        @SerializedName(SERIALIZED_NAME_ENDPOINT_CONFIG)
            private Object endpointConfig;

            /**
* Gets or Sets endpointImplementationType
*/
    @JsonAdapter(EndpointImplementationTypeEnum.Adapter.class)
public enum EndpointImplementationTypeEnum {
        INLINE("INLINE"),
        
        ENDPOINT("ENDPOINT"),
        
        MOCKED_OAS("MOCKED_OAS");

private String value;

EndpointImplementationTypeEnum(String value) {
this.value = value;
}

public String getValue() {
return value;
}

@Override
public String toString() {
return String.valueOf(value);
}

public static EndpointImplementationTypeEnum fromValue(String value) {
    for (EndpointImplementationTypeEnum b : EndpointImplementationTypeEnum.values()) {
    if (b.name().equals(value)) {
        return b;
    }
}
    throw new IllegalArgumentException("Unexpected value '" + value + "'");
}

    public static class Adapter extends TypeAdapter<EndpointImplementationTypeEnum> {
    @Override
    public void write(final JsonWriter jsonWriter, final EndpointImplementationTypeEnum enumeration) throws IOException {
    jsonWriter.value(enumeration.getValue());
    }

    @Override
    public EndpointImplementationTypeEnum read(final JsonReader jsonReader) throws IOException {
    String value =  jsonReader.nextString();
    return EndpointImplementationTypeEnum.fromValue(value);
    }
    }
}

        public static final String SERIALIZED_NAME_ENDPOINT_IMPLEMENTATION_TYPE = "endpointImplementationType";
        @SerializedName(SERIALIZED_NAME_ENDPOINT_IMPLEMENTATION_TYPE)
            private EndpointImplementationTypeEnum endpointImplementationType = EndpointImplementationTypeEnum.ENDPOINT;

        public static final String SERIALIZED_NAME_SCOPES = "scopes";
        @SerializedName(SERIALIZED_NAME_SCOPES)
            private List<APIScopeDTO> scopes = null;

        public static final String SERIALIZED_NAME_OPERATIONS = "operations";
        @SerializedName(SERIALIZED_NAME_OPERATIONS)
            private List<APIOperationsDTO> operations = null;

        public static final String SERIALIZED_NAME_THREAT_PROTECTION_POLICIES = "threatProtectionPolicies";
        @SerializedName(SERIALIZED_NAME_THREAT_PROTECTION_POLICIES)
            private APIThreatProtectionPoliciesDTO threatProtectionPolicies;

        public static final String SERIALIZED_NAME_CATEGORIES = "categories";
        @SerializedName(SERIALIZED_NAME_CATEGORIES)
            private List<String> categories = null;

        public static final String SERIALIZED_NAME_KEY_MANAGERS = "keyManagers";
        @SerializedName(SERIALIZED_NAME_KEY_MANAGERS)
            private Object keyManagers;

        public static final String SERIALIZED_NAME_SERVICE_INFO = "serviceInfo";
        @SerializedName(SERIALIZED_NAME_SERVICE_INFO)
            private APIServiceInfoDTO serviceInfo;

        public static final String SERIALIZED_NAME_ADVERTISE_INFO = "advertiseInfo";
        @SerializedName(SERIALIZED_NAME_ADVERTISE_INFO)
            private AdvertiseInfoDTO advertiseInfo;

        public static final String SERIALIZED_NAME_GATEWAY_VENDOR = "gatewayVendor";
        @SerializedName(SERIALIZED_NAME_GATEWAY_VENDOR)
            private String gatewayVendor;

        public static final String SERIALIZED_NAME_ASYNC_TRANSPORT_PROTOCOLS = "asyncTransportProtocols";
        @SerializedName(SERIALIZED_NAME_ASYNC_TRANSPORT_PROTOCOLS)
            private List<String> asyncTransportProtocols = null;


        public APIDTO id(String id) {
        
        this.id = id;
        return this;
        }

    /**
        * UUID of the api registry artifact 
    * @return id
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "01234567-0123-0123-0123-012345678901", value = "UUID of the api registry artifact ")
    
    public String getId() {
        return id;
    }


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


        public APIDTO name(String name) {
        
        this.name = name;
        return this;
        }

    /**
        * Get name
    * @return name
    **/
      @ApiModelProperty(example = "PizzaShackAPI", required = true, value = "")
    
    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }


        public APIDTO description(String description) {
        
        this.description = description;
        return this;
        }

    /**
        * Get description
    * @return description
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "This is a simple API for Pizza Shack online pizza delivery store.", value = "")
    
    public String getDescription() {
        return description;
    }


    public void setDescription(String description) {
        this.description = description;
    }


        public APIDTO context(String context) {
        
        this.context = context;
        return this;
        }

    /**
        * Get context
    * @return context
    **/
      @ApiModelProperty(example = "pizza", required = true, value = "")
    
    public String getContext() {
        return context;
    }


    public void setContext(String context) {
        this.context = context;
    }


        public APIDTO version(String version) {
        
        this.version = version;
        return this;
        }

    /**
        * Get version
    * @return version
    **/
      @ApiModelProperty(example = "1.0.0", required = true, value = "")
    
    public String getVersion() {
        return version;
    }


    public void setVersion(String version) {
        this.version = version;
    }


        public APIDTO provider(String provider) {
        
        this.provider = provider;
        return this;
        }

    /**
        * If the provider value is not given user invoking the api will be used as the provider. 
    * @return provider
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "admin", value = "If the provider value is not given user invoking the api will be used as the provider. ")
    
    public String getProvider() {
        return provider;
    }


    public void setProvider(String provider) {
        this.provider = provider;
    }


        public APIDTO lifeCycleStatus(String lifeCycleStatus) {
        
        this.lifeCycleStatus = lifeCycleStatus;
        return this;
        }

    /**
        * Get lifeCycleStatus
    * @return lifeCycleStatus
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "CREATED", value = "")
    
    public String getLifeCycleStatus() {
        return lifeCycleStatus;
    }


    public void setLifeCycleStatus(String lifeCycleStatus) {
        this.lifeCycleStatus = lifeCycleStatus;
    }


        public APIDTO wsdlInfo(WSDLInfoDTO wsdlInfo) {
        
        this.wsdlInfo = wsdlInfo;
        return this;
        }

    /**
        * Get wsdlInfo
    * @return wsdlInfo
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public WSDLInfoDTO getWsdlInfo() {
        return wsdlInfo;
    }


    public void setWsdlInfo(WSDLInfoDTO wsdlInfo) {
        this.wsdlInfo = wsdlInfo;
    }


        public APIDTO wsdlUrl(String wsdlUrl) {
        
        this.wsdlUrl = wsdlUrl;
        return this;
        }

    /**
        * Get wsdlUrl
    * @return wsdlUrl
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "/apimgt/applicationdata/wsdls/admin--soap1.wsdl", value = "")
    
    public String getWsdlUrl() {
        return wsdlUrl;
    }


    public void setWsdlUrl(String wsdlUrl) {
        this.wsdlUrl = wsdlUrl;
    }


        public APIDTO responseCachingEnabled(Boolean responseCachingEnabled) {
        
        this.responseCachingEnabled = responseCachingEnabled;
        return this;
        }

    /**
        * Get responseCachingEnabled
    * @return responseCachingEnabled
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "true", value = "")
    
    public Boolean isResponseCachingEnabled() {
        return responseCachingEnabled;
    }


    public void setResponseCachingEnabled(Boolean responseCachingEnabled) {
        this.responseCachingEnabled = responseCachingEnabled;
    }


        public APIDTO cacheTimeout(Integer cacheTimeout) {
        
        this.cacheTimeout = cacheTimeout;
        return this;
        }

    /**
        * Get cacheTimeout
    * @return cacheTimeout
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "300", value = "")
    
    public Integer getCacheTimeout() {
        return cacheTimeout;
    }


    public void setCacheTimeout(Integer cacheTimeout) {
        this.cacheTimeout = cacheTimeout;
    }


        public APIDTO hasThumbnail(Boolean hasThumbnail) {
        
        this.hasThumbnail = hasThumbnail;
        return this;
        }

    /**
        * Get hasThumbnail
    * @return hasThumbnail
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "false", value = "")
    
    public Boolean isHasThumbnail() {
        return hasThumbnail;
    }


    public void setHasThumbnail(Boolean hasThumbnail) {
        this.hasThumbnail = hasThumbnail;
    }


        public APIDTO isDefaultVersion(Boolean isDefaultVersion) {
        
        this.isDefaultVersion = isDefaultVersion;
        return this;
        }

    /**
        * Get isDefaultVersion
    * @return isDefaultVersion
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "false", value = "")
    
    public Boolean isIsDefaultVersion() {
        return isDefaultVersion;
    }


    public void setIsDefaultVersion(Boolean isDefaultVersion) {
        this.isDefaultVersion = isDefaultVersion;
    }


        public APIDTO isRevision(Boolean isRevision) {
        
        this.isRevision = isRevision;
        return this;
        }

    /**
        * Get isRevision
    * @return isRevision
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "false", value = "")
    
    public Boolean isIsRevision() {
        return isRevision;
    }


    public void setIsRevision(Boolean isRevision) {
        this.isRevision = isRevision;
    }


        public APIDTO revisionedApiId(String revisionedApiId) {
        
        this.revisionedApiId = revisionedApiId;
        return this;
        }

    /**
        * UUID of the api registry artifact 
    * @return revisionedApiId
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "01234567-0123-0123-0123-012345678901", value = "UUID of the api registry artifact ")
    
    public String getRevisionedApiId() {
        return revisionedApiId;
    }


    public void setRevisionedApiId(String revisionedApiId) {
        this.revisionedApiId = revisionedApiId;
    }


        public APIDTO revisionId(Integer revisionId) {
        
        this.revisionId = revisionId;
        return this;
        }

    /**
        * Get revisionId
    * @return revisionId
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "1", value = "")
    
    public Integer getRevisionId() {
        return revisionId;
    }


    public void setRevisionId(Integer revisionId) {
        this.revisionId = revisionId;
    }


        public APIDTO enableSchemaValidation(Boolean enableSchemaValidation) {
        
        this.enableSchemaValidation = enableSchemaValidation;
        return this;
        }

    /**
        * Get enableSchemaValidation
    * @return enableSchemaValidation
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "false", value = "")
    
    public Boolean isEnableSchemaValidation() {
        return enableSchemaValidation;
    }


    public void setEnableSchemaValidation(Boolean enableSchemaValidation) {
        this.enableSchemaValidation = enableSchemaValidation;
    }


        public APIDTO type(TypeEnum type) {
        
        this.type = type;
        return this;
        }

    /**
        * The api creation type to be used. Accepted values are HTTP, WS, SOAPTOREST, GRAPHQL, WEBSUB, SSE, WEBHOOK, ASYNC
    * @return type
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "HTTP", value = "The api creation type to be used. Accepted values are HTTP, WS, SOAPTOREST, GRAPHQL, WEBSUB, SSE, WEBHOOK, ASYNC")
    
    public TypeEnum getType() {
        return type;
    }


    public void setType(TypeEnum type) {
        this.type = type;
    }


        public APIDTO audience(AudienceEnum audience) {
        
        this.audience = audience;
        return this;
        }

    /**
        * The audience of the API. Accepted values are PUBLIC, SINGLE
    * @return audience
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "PUBLIC", value = "The audience of the API. Accepted values are PUBLIC, SINGLE")
    
    public AudienceEnum getAudience() {
        return audience;
    }


    public void setAudience(AudienceEnum audience) {
        this.audience = audience;
    }


        public APIDTO transport(List<String> transport) {
        
        this.transport = transport;
        return this;
        }

    /**
        * Supported transports for the API (http and/or https). 
    * @return transport
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "[\"http\",\"https\"]", value = "Supported transports for the API (http and/or https). ")
    
    public List<String> getTransport() {
        return transport;
    }


    public void setTransport(List<String> transport) {
        this.transport = transport;
    }


        public APIDTO tags(List<String> tags) {
        
        this.tags = tags;
        return this;
        }

    /**
        * Get tags
    * @return tags
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "[\"pizza\",\"food\"]", value = "")
    
    public List<String> getTags() {
        return tags;
    }


    public void setTags(List<String> tags) {
        this.tags = tags;
    }


        public APIDTO policies(List<String> policies) {
        
        this.policies = policies;
        return this;
        }

    /**
        * Get policies
    * @return policies
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "[\"Unlimited\"]", value = "")
    
    public List<String> getPolicies() {
        return policies;
    }


    public void setPolicies(List<String> policies) {
        this.policies = policies;
    }


        public APIDTO apiThrottlingPolicy(String apiThrottlingPolicy) {
        
        this.apiThrottlingPolicy = apiThrottlingPolicy;
        return this;
        }

    /**
        * The API level throttling policy selected for the particular API
    * @return apiThrottlingPolicy
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "Unlimited", value = "The API level throttling policy selected for the particular API")
    
    public String getApiThrottlingPolicy() {
        return apiThrottlingPolicy;
    }


    public void setApiThrottlingPolicy(String apiThrottlingPolicy) {
        this.apiThrottlingPolicy = apiThrottlingPolicy;
    }


        public APIDTO authorizationHeader(String authorizationHeader) {
        
        this.authorizationHeader = authorizationHeader;
        return this;
        }

    /**
        * Name of the Authorization header used for invoking the API. If it is not set, Authorization header name specified in tenant or system level will be used. 
    * @return authorizationHeader
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "Authorization", value = "Name of the Authorization header used for invoking the API. If it is not set, Authorization header name specified in tenant or system level will be used. ")
    
    public String getAuthorizationHeader() {
        return authorizationHeader;
    }


    public void setAuthorizationHeader(String authorizationHeader) {
        this.authorizationHeader = authorizationHeader;
    }


        public APIDTO securityScheme(List<String> securityScheme) {
        
        this.securityScheme = securityScheme;
        return this;
        }

    /**
        * Types of API security, the current API secured with. It can be either OAuth2 or mutual SSL or both. If it is not set OAuth2 will be set as the security for the current API. 
    * @return securityScheme
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "[\"oauth2\"]", value = "Types of API security, the current API secured with. It can be either OAuth2 or mutual SSL or both. If it is not set OAuth2 will be set as the security for the current API. ")
    
    public List<String> getSecurityScheme() {
        return securityScheme;
    }


    public void setSecurityScheme(List<String> securityScheme) {
        this.securityScheme = securityScheme;
    }


        public APIDTO maxTps(APIMaxTpsDTO maxTps) {
        
        this.maxTps = maxTps;
        return this;
        }

    /**
        * Get maxTps
    * @return maxTps
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public APIMaxTpsDTO getMaxTps() {
        return maxTps;
    }


    public void setMaxTps(APIMaxTpsDTO maxTps) {
        this.maxTps = maxTps;
    }


        public APIDTO visibility(VisibilityEnum visibility) {
        
        this.visibility = visibility;
        return this;
        }

    /**
        * The visibility level of the API. Accepts one of the following. PUBLIC, PRIVATE, RESTRICTED.
    * @return visibility
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "PUBLIC", value = "The visibility level of the API. Accepts one of the following. PUBLIC, PRIVATE, RESTRICTED.")
    
    public VisibilityEnum getVisibility() {
        return visibility;
    }


    public void setVisibility(VisibilityEnum visibility) {
        this.visibility = visibility;
    }


        public APIDTO visibleRoles(List<String> visibleRoles) {
        
        this.visibleRoles = visibleRoles;
        return this;
        }

    /**
        * The user roles that are able to access the API in Developer Portal
    * @return visibleRoles
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "[]", value = "The user roles that are able to access the API in Developer Portal")
    
    public List<String> getVisibleRoles() {
        return visibleRoles;
    }


    public void setVisibleRoles(List<String> visibleRoles) {
        this.visibleRoles = visibleRoles;
    }


        public APIDTO visibleTenants(List<String> visibleTenants) {
        
        this.visibleTenants = visibleTenants;
        return this;
        }

    /**
        * Get visibleTenants
    * @return visibleTenants
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "[]", value = "")
    
    public List<String> getVisibleTenants() {
        return visibleTenants;
    }


    public void setVisibleTenants(List<String> visibleTenants) {
        this.visibleTenants = visibleTenants;
    }


        public APIDTO mediationPolicies(List<MediationPolicyDTO> mediationPolicies) {
        
        this.mediationPolicies = mediationPolicies;
        return this;
        }

    /**
        * Get mediationPolicies
    * @return mediationPolicies
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "[{\"name\":\"json_to_xml_in_message\",\"type\":\"in\"},{\"name\":\"xml_to_json_out_message\",\"type\":\"out\"},{\"name\":\"json_fault\",\"type\":\"fault\"}]", value = "")
    
    public List<MediationPolicyDTO> getMediationPolicies() {
        return mediationPolicies;
    }


    public void setMediationPolicies(List<MediationPolicyDTO> mediationPolicies) {
        this.mediationPolicies = mediationPolicies;
    }


        public APIDTO subscriptionAvailability(SubscriptionAvailabilityEnum subscriptionAvailability) {
        
        this.subscriptionAvailability = subscriptionAvailability;
        return this;
        }

    /**
        * The subscription availability. Accepts one of the following. CURRENT_TENANT, ALL_TENANTS or SPECIFIC_TENANTS.
    * @return subscriptionAvailability
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "CURRENT_TENANT", value = "The subscription availability. Accepts one of the following. CURRENT_TENANT, ALL_TENANTS or SPECIFIC_TENANTS.")
    
    public SubscriptionAvailabilityEnum getSubscriptionAvailability() {
        return subscriptionAvailability;
    }


    public void setSubscriptionAvailability(SubscriptionAvailabilityEnum subscriptionAvailability) {
        this.subscriptionAvailability = subscriptionAvailability;
    }


        public APIDTO subscriptionAvailableTenants(List<String> subscriptionAvailableTenants) {
        
        this.subscriptionAvailableTenants = subscriptionAvailableTenants;
        return this;
        }

    /**
        * Get subscriptionAvailableTenants
    * @return subscriptionAvailableTenants
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "[]", value = "")
    
    public List<String> getSubscriptionAvailableTenants() {
        return subscriptionAvailableTenants;
    }


    public void setSubscriptionAvailableTenants(List<String> subscriptionAvailableTenants) {
        this.subscriptionAvailableTenants = subscriptionAvailableTenants;
    }


        public APIDTO additionalProperties(List<APIInfoAdditionalPropertiesDTO> additionalProperties) {
        
        this.additionalProperties = additionalProperties;
        return this;
        }

    /**
        * Map of custom properties of API
    * @return additionalProperties
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "Map of custom properties of API")
    
    public List<APIInfoAdditionalPropertiesDTO> getAdditionalProperties() {
        return additionalProperties;
    }


    public void setAdditionalProperties(List<APIInfoAdditionalPropertiesDTO> additionalProperties) {
        this.additionalProperties = additionalProperties;
    }


        public APIDTO additionalPropertiesMap(Map<String, APIInfoAdditionalPropertiesMapDTO> additionalPropertiesMap) {
        
        this.additionalPropertiesMap = additionalPropertiesMap;
        return this;
        }

    /**
        * Get additionalPropertiesMap
    * @return additionalPropertiesMap
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public Map<String, APIInfoAdditionalPropertiesMapDTO> getAdditionalPropertiesMap() {
        return additionalPropertiesMap;
    }


    public void setAdditionalPropertiesMap(Map<String, APIInfoAdditionalPropertiesMapDTO> additionalPropertiesMap) {
        this.additionalPropertiesMap = additionalPropertiesMap;
    }


        public APIDTO monetization(APIMonetizationInfoDTO monetization) {
        
        this.monetization = monetization;
        return this;
        }

    /**
        * Get monetization
    * @return monetization
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public APIMonetizationInfoDTO getMonetization() {
        return monetization;
    }


    public void setMonetization(APIMonetizationInfoDTO monetization) {
        this.monetization = monetization;
    }


        public APIDTO accessControl(AccessControlEnum accessControl) {
        
        this.accessControl = accessControl;
        return this;
        }

    /**
        * Is the API is restricted to certain set of publishers or creators or is it visible to all the publishers and creators. If the accessControl restriction is none, this API can be modified by all the publishers and creators, if not it can only be viewable/modifiable by certain set of publishers and creators,  based on the restriction. 
    * @return accessControl
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "Is the API is restricted to certain set of publishers or creators or is it visible to all the publishers and creators. If the accessControl restriction is none, this API can be modified by all the publishers and creators, if not it can only be viewable/modifiable by certain set of publishers and creators,  based on the restriction. ")
    
    public AccessControlEnum getAccessControl() {
        return accessControl;
    }


    public void setAccessControl(AccessControlEnum accessControl) {
        this.accessControl = accessControl;
    }


        public APIDTO accessControlRoles(List<String> accessControlRoles) {
        
        this.accessControlRoles = accessControlRoles;
        return this;
        }

    /**
        * The user roles that are able to view/modify as API publisher or creator.
    * @return accessControlRoles
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "[]", value = "The user roles that are able to view/modify as API publisher or creator.")
    
    public List<String> getAccessControlRoles() {
        return accessControlRoles;
    }


    public void setAccessControlRoles(List<String> accessControlRoles) {
        this.accessControlRoles = accessControlRoles;
    }


        public APIDTO businessInformation(APIBusinessInformationDTO businessInformation) {
        
        this.businessInformation = businessInformation;
        return this;
        }

    /**
        * Get businessInformation
    * @return businessInformation
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public APIBusinessInformationDTO getBusinessInformation() {
        return businessInformation;
    }


    public void setBusinessInformation(APIBusinessInformationDTO businessInformation) {
        this.businessInformation = businessInformation;
    }


        public APIDTO corsConfiguration(APICorsConfigurationDTO corsConfiguration) {
        
        this.corsConfiguration = corsConfiguration;
        return this;
        }

    /**
        * Get corsConfiguration
    * @return corsConfiguration
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public APICorsConfigurationDTO getCorsConfiguration() {
        return corsConfiguration;
    }


    public void setCorsConfiguration(APICorsConfigurationDTO corsConfiguration) {
        this.corsConfiguration = corsConfiguration;
    }


        public APIDTO websubSubscriptionConfiguration(WebsubSubscriptionConfigurationDTO websubSubscriptionConfiguration) {
        
        this.websubSubscriptionConfiguration = websubSubscriptionConfiguration;
        return this;
        }

    /**
        * Get websubSubscriptionConfiguration
    * @return websubSubscriptionConfiguration
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public WebsubSubscriptionConfigurationDTO getWebsubSubscriptionConfiguration() {
        return websubSubscriptionConfiguration;
    }


    public void setWebsubSubscriptionConfiguration(WebsubSubscriptionConfigurationDTO websubSubscriptionConfiguration) {
        this.websubSubscriptionConfiguration = websubSubscriptionConfiguration;
    }


        public APIDTO workflowStatus(String workflowStatus) {
        
        this.workflowStatus = workflowStatus;
        return this;
        }

    /**
        * Get workflowStatus
    * @return workflowStatus
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "APPROVED", value = "")
    
    public String getWorkflowStatus() {
        return workflowStatus;
    }


    public void setWorkflowStatus(String workflowStatus) {
        this.workflowStatus = workflowStatus;
    }


        public APIDTO createdTime(String createdTime) {
        
        this.createdTime = createdTime;
        return this;
        }

    /**
        * Get createdTime
    * @return createdTime
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public String getCreatedTime() {
        return createdTime;
    }


    public void setCreatedTime(String createdTime) {
        this.createdTime = createdTime;
    }


        public APIDTO lastUpdatedTime(String lastUpdatedTime) {
        
        this.lastUpdatedTime = lastUpdatedTime;
        return this;
        }

    /**
        * Get lastUpdatedTime
    * @return lastUpdatedTime
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public String getLastUpdatedTime() {
        return lastUpdatedTime;
    }


    public void setLastUpdatedTime(String lastUpdatedTime) {
        this.lastUpdatedTime = lastUpdatedTime;
    }


        public APIDTO endpointConfig(Object endpointConfig) {
        
        this.endpointConfig = endpointConfig;
        return this;
        }

    /**
        * Endpoint configuration of the API. This can be used to provide different types of endpoints including Simple REST Endpoints, Loadbalanced and Failover.  &#x60;Simple REST Endpoint&#x60;   {     \&quot;endpoint_type\&quot;: \&quot;http\&quot;,     \&quot;sandbox_endpoints\&quot;:       {        \&quot;url\&quot;: \&quot;https://localhost:9443/am/sample/pizzashack/v1/api/\&quot;     },     \&quot;production_endpoints\&quot;:       {        \&quot;url\&quot;: \&quot;https://localhost:9443/am/sample/pizzashack/v1/api/\&quot;     }   }  &#x60;Loadbalanced Endpoint&#x60;    {     \&quot;endpoint_type\&quot;: \&quot;load_balance\&quot;,     \&quot;algoCombo\&quot;: \&quot;org.apache.synapse.endpoints.algorithms.RoundRobin\&quot;,     \&quot;sessionManagement\&quot;: \&quot;\&quot;,     \&quot;sandbox_endpoints\&quot;:       [                 {           \&quot;url\&quot;: \&quot;https://localhost:9443/am/sample/pizzashack/v1/api/1\&quot;        },                 {           \&quot;endpoint_type\&quot;: \&quot;http\&quot;,           \&quot;template_not_supported\&quot;: false,           \&quot;url\&quot;: \&quot;https://localhost:9443/am/sample/pizzashack/v1/api/2\&quot;        }     ],     \&quot;production_endpoints\&quot;:       [                 {           \&quot;url\&quot;: \&quot;https://localhost:9443/am/sample/pizzashack/v1/api/3\&quot;        },                 {           \&quot;endpoint_type\&quot;: \&quot;http\&quot;,           \&quot;template_not_supported\&quot;: false,           \&quot;url\&quot;: \&quot;https://localhost:9443/am/sample/pizzashack/v1/api/4\&quot;        }     ],     \&quot;sessionTimeOut\&quot;: \&quot;\&quot;,     \&quot;algoClassName\&quot;: \&quot;org.apache.synapse.endpoints.algorithms.RoundRobin\&quot;   }  &#x60;Failover Endpoint&#x60;    {     \&quot;production_failovers\&quot;:[        {           \&quot;endpoint_type\&quot;:\&quot;http\&quot;,           \&quot;template_not_supported\&quot;:false,           \&quot;url\&quot;:\&quot;https://localhost:9443/am/sample/pizzashack/v1/api/1\&quot;        }     ],     \&quot;endpoint_type\&quot;:\&quot;failover\&quot;,     \&quot;sandbox_endpoints\&quot;:{        \&quot;url\&quot;:\&quot;https://localhost:9443/am/sample/pizzashack/v1/api/2\&quot;     },     \&quot;production_endpoints\&quot;:{        \&quot;url\&quot;:\&quot;https://localhost:9443/am/sample/pizzashack/v1/api/3\&quot;     },     \&quot;sandbox_failovers\&quot;:[        {           \&quot;endpoint_type\&quot;:\&quot;http\&quot;,           \&quot;template_not_supported\&quot;:false,           \&quot;url\&quot;:\&quot;https://localhost:9443/am/sample/pizzashack/v1/api/4\&quot;        }     ]   }  &#x60;Default Endpoint&#x60;    {     \&quot;endpoint_type\&quot;:\&quot;default\&quot;,     \&quot;sandbox_endpoints\&quot;:{        \&quot;url\&quot;:\&quot;default\&quot;     },     \&quot;production_endpoints\&quot;:{        \&quot;url\&quot;:\&quot;default\&quot;     }   }  &#x60;Endpoint from Endpoint Registry&#x60;   {     \&quot;endpoint_type\&quot;: \&quot;Registry\&quot;,     \&quot;endpoint_id\&quot;: \&quot;{registry-name:entry-name:version}\&quot;,   } 
    * @return endpointConfig
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "{\"endpoint_type\":\"http\",\"sandbox_endpoints\":{\"url\":\"https://localhost:9443/am/sample/pizzashack/v1/api/\"},\"production_endpoints\":{\"url\":\"https://localhost:9443/am/sample/pizzashack/v1/api/\"}}", value = "Endpoint configuration of the API. This can be used to provide different types of endpoints including Simple REST Endpoints, Loadbalanced and Failover.  `Simple REST Endpoint`   {     \"endpoint_type\": \"http\",     \"sandbox_endpoints\":       {        \"url\": \"https://localhost:9443/am/sample/pizzashack/v1/api/\"     },     \"production_endpoints\":       {        \"url\": \"https://localhost:9443/am/sample/pizzashack/v1/api/\"     }   }  `Loadbalanced Endpoint`    {     \"endpoint_type\": \"load_balance\",     \"algoCombo\": \"org.apache.synapse.endpoints.algorithms.RoundRobin\",     \"sessionManagement\": \"\",     \"sandbox_endpoints\":       [                 {           \"url\": \"https://localhost:9443/am/sample/pizzashack/v1/api/1\"        },                 {           \"endpoint_type\": \"http\",           \"template_not_supported\": false,           \"url\": \"https://localhost:9443/am/sample/pizzashack/v1/api/2\"        }     ],     \"production_endpoints\":       [                 {           \"url\": \"https://localhost:9443/am/sample/pizzashack/v1/api/3\"        },                 {           \"endpoint_type\": \"http\",           \"template_not_supported\": false,           \"url\": \"https://localhost:9443/am/sample/pizzashack/v1/api/4\"        }     ],     \"sessionTimeOut\": \"\",     \"algoClassName\": \"org.apache.synapse.endpoints.algorithms.RoundRobin\"   }  `Failover Endpoint`    {     \"production_failovers\":[        {           \"endpoint_type\":\"http\",           \"template_not_supported\":false,           \"url\":\"https://localhost:9443/am/sample/pizzashack/v1/api/1\"        }     ],     \"endpoint_type\":\"failover\",     \"sandbox_endpoints\":{        \"url\":\"https://localhost:9443/am/sample/pizzashack/v1/api/2\"     },     \"production_endpoints\":{        \"url\":\"https://localhost:9443/am/sample/pizzashack/v1/api/3\"     },     \"sandbox_failovers\":[        {           \"endpoint_type\":\"http\",           \"template_not_supported\":false,           \"url\":\"https://localhost:9443/am/sample/pizzashack/v1/api/4\"        }     ]   }  `Default Endpoint`    {     \"endpoint_type\":\"default\",     \"sandbox_endpoints\":{        \"url\":\"default\"     },     \"production_endpoints\":{        \"url\":\"default\"     }   }  `Endpoint from Endpoint Registry`   {     \"endpoint_type\": \"Registry\",     \"endpoint_id\": \"{registry-name:entry-name:version}\",   } ")
    
    public Object getEndpointConfig() {
        return endpointConfig;
    }


    public void setEndpointConfig(Object endpointConfig) {
        this.endpointConfig = endpointConfig;
    }


        public APIDTO endpointImplementationType(EndpointImplementationTypeEnum endpointImplementationType) {
        
        this.endpointImplementationType = endpointImplementationType;
        return this;
        }

    /**
        * Get endpointImplementationType
    * @return endpointImplementationType
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "INLINE", value = "")
    
    public EndpointImplementationTypeEnum getEndpointImplementationType() {
        return endpointImplementationType;
    }


    public void setEndpointImplementationType(EndpointImplementationTypeEnum endpointImplementationType) {
        this.endpointImplementationType = endpointImplementationType;
    }


        public APIDTO scopes(List<APIScopeDTO> scopes) {
        
        this.scopes = scopes;
        return this;
        }

    /**
        * Get scopes
    * @return scopes
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public List<APIScopeDTO> getScopes() {
        return scopes;
    }


    public void setScopes(List<APIScopeDTO> scopes) {
        this.scopes = scopes;
    }


        public APIDTO operations(List<APIOperationsDTO> operations) {
        
        this.operations = operations;
        return this;
        }

    /**
        * Get operations
    * @return operations
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "[{\"target\":\"/order/{orderId}\",\"verb\":\"POST\",\"authType\":\"Application & Application User\",\"throttlingPolicy\":\"Unlimited\"},{\"target\":\"/menu\",\"verb\":\"GET\",\"authType\":\"Application & Application User\",\"throttlingPolicy\":\"Unlimited\"}]", value = "")
    
    public List<APIOperationsDTO> getOperations() {
        return operations;
    }


    public void setOperations(List<APIOperationsDTO> operations) {
        this.operations = operations;
    }


        public APIDTO threatProtectionPolicies(APIThreatProtectionPoliciesDTO threatProtectionPolicies) {
        
        this.threatProtectionPolicies = threatProtectionPolicies;
        return this;
        }

    /**
        * Get threatProtectionPolicies
    * @return threatProtectionPolicies
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public APIThreatProtectionPoliciesDTO getThreatProtectionPolicies() {
        return threatProtectionPolicies;
    }


    public void setThreatProtectionPolicies(APIThreatProtectionPoliciesDTO threatProtectionPolicies) {
        this.threatProtectionPolicies = threatProtectionPolicies;
    }


        public APIDTO categories(List<String> categories) {
        
        this.categories = categories;
        return this;
        }

    /**
        * API categories 
    * @return categories
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "API categories ")
    
    public List<String> getCategories() {
        return categories;
    }


    public void setCategories(List<String> categories) {
        this.categories = categories;
    }


        public APIDTO keyManagers(Object keyManagers) {
        
        this.keyManagers = keyManagers;
        return this;
        }

    /**
        * API Key Managers 
    * @return keyManagers
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "API Key Managers ")
    
    public Object getKeyManagers() {
        return keyManagers;
    }


    public void setKeyManagers(Object keyManagers) {
        this.keyManagers = keyManagers;
    }


        public APIDTO serviceInfo(APIServiceInfoDTO serviceInfo) {
        
        this.serviceInfo = serviceInfo;
        return this;
        }

    /**
        * Get serviceInfo
    * @return serviceInfo
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public APIServiceInfoDTO getServiceInfo() {
        return serviceInfo;
    }


    public void setServiceInfo(APIServiceInfoDTO serviceInfo) {
        this.serviceInfo = serviceInfo;
    }


        public APIDTO advertiseInfo(AdvertiseInfoDTO advertiseInfo) {
        
        this.advertiseInfo = advertiseInfo;
        return this;
        }

    /**
        * Get advertiseInfo
    * @return advertiseInfo
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(value = "")
    
    public AdvertiseInfoDTO getAdvertiseInfo() {
        return advertiseInfo;
    }


    public void setAdvertiseInfo(AdvertiseInfoDTO advertiseInfo) {
        this.advertiseInfo = advertiseInfo;
    }


        public APIDTO gatewayVendor(String gatewayVendor) {
        
        this.gatewayVendor = gatewayVendor;
        return this;
        }

    /**
        * Get gatewayVendor
    * @return gatewayVendor
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "wso2", value = "")
    
    public String getGatewayVendor() {
        return gatewayVendor;
    }


    public void setGatewayVendor(String gatewayVendor) {
        this.gatewayVendor = gatewayVendor;
    }


        public APIDTO asyncTransportProtocols(List<String> asyncTransportProtocols) {
        
        this.asyncTransportProtocols = asyncTransportProtocols;
        return this;
        }

    /**
        * Supported transports for the async API (http and/or https). 
    * @return asyncTransportProtocols
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "[\"http\",\"https\"]", value = "Supported transports for the async API (http and/or https). ")
    
    public List<String> getAsyncTransportProtocols() {
        return asyncTransportProtocols;
    }


    public void setAsyncTransportProtocols(List<String> asyncTransportProtocols) {
        this.asyncTransportProtocols = asyncTransportProtocols;
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) {
        return true;
        }
        if (o == null || getClass() != o.getClass()) {
        return false;
        }
            APIDTO API = (APIDTO) o;
            return Objects.equals(this.id, API.id) &&
            Objects.equals(this.name, API.name) &&
            Objects.equals(this.description, API.description) &&
            Objects.equals(this.context, API.context) &&
            Objects.equals(this.version, API.version) &&
            Objects.equals(this.provider, API.provider) &&
            Objects.equals(this.lifeCycleStatus, API.lifeCycleStatus) &&
            Objects.equals(this.wsdlInfo, API.wsdlInfo) &&
            Objects.equals(this.wsdlUrl, API.wsdlUrl) &&
            Objects.equals(this.responseCachingEnabled, API.responseCachingEnabled) &&
            Objects.equals(this.cacheTimeout, API.cacheTimeout) &&
            Objects.equals(this.hasThumbnail, API.hasThumbnail) &&
            Objects.equals(this.isDefaultVersion, API.isDefaultVersion) &&
            Objects.equals(this.isRevision, API.isRevision) &&
            Objects.equals(this.revisionedApiId, API.revisionedApiId) &&
            Objects.equals(this.revisionId, API.revisionId) &&
            Objects.equals(this.enableSchemaValidation, API.enableSchemaValidation) &&
            Objects.equals(this.type, API.type) &&
            Objects.equals(this.audience, API.audience) &&
            Objects.equals(this.transport, API.transport) &&
            Objects.equals(this.tags, API.tags) &&
            Objects.equals(this.policies, API.policies) &&
            Objects.equals(this.apiThrottlingPolicy, API.apiThrottlingPolicy) &&
            Objects.equals(this.authorizationHeader, API.authorizationHeader) &&
            Objects.equals(this.securityScheme, API.securityScheme) &&
            Objects.equals(this.maxTps, API.maxTps) &&
            Objects.equals(this.visibility, API.visibility) &&
            Objects.equals(this.visibleRoles, API.visibleRoles) &&
            Objects.equals(this.visibleTenants, API.visibleTenants) &&
            Objects.equals(this.mediationPolicies, API.mediationPolicies) &&
            Objects.equals(this.subscriptionAvailability, API.subscriptionAvailability) &&
            Objects.equals(this.subscriptionAvailableTenants, API.subscriptionAvailableTenants) &&
            Objects.equals(this.additionalProperties, API.additionalProperties) &&
            Objects.equals(this.additionalPropertiesMap, API.additionalPropertiesMap) &&
            Objects.equals(this.monetization, API.monetization) &&
            Objects.equals(this.accessControl, API.accessControl) &&
            Objects.equals(this.accessControlRoles, API.accessControlRoles) &&
            Objects.equals(this.businessInformation, API.businessInformation) &&
            Objects.equals(this.corsConfiguration, API.corsConfiguration) &&
            Objects.equals(this.websubSubscriptionConfiguration, API.websubSubscriptionConfiguration) &&
            Objects.equals(this.workflowStatus, API.workflowStatus) &&
            Objects.equals(this.createdTime, API.createdTime) &&
            Objects.equals(this.lastUpdatedTime, API.lastUpdatedTime) &&
            Objects.equals(this.endpointConfig, API.endpointConfig) &&
            Objects.equals(this.endpointImplementationType, API.endpointImplementationType) &&
            Objects.equals(this.scopes, API.scopes) &&
            Objects.equals(this.operations, API.operations) &&
            Objects.equals(this.threatProtectionPolicies, API.threatProtectionPolicies) &&
            Objects.equals(this.categories, API.categories) &&
            Objects.equals(this.keyManagers, API.keyManagers) &&
            Objects.equals(this.serviceInfo, API.serviceInfo) &&
            Objects.equals(this.advertiseInfo, API.advertiseInfo) &&
            Objects.equals(this.gatewayVendor, API.gatewayVendor) &&
            Objects.equals(this.asyncTransportProtocols, API.asyncTransportProtocols);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, description, context, version, provider, lifeCycleStatus, wsdlInfo, wsdlUrl, responseCachingEnabled, cacheTimeout, hasThumbnail, isDefaultVersion, isRevision, revisionedApiId, revisionId, enableSchemaValidation, type, audience, transport, tags, policies, apiThrottlingPolicy, authorizationHeader, securityScheme, maxTps, visibility, visibleRoles, visibleTenants, mediationPolicies, subscriptionAvailability, subscriptionAvailableTenants, additionalProperties, additionalPropertiesMap, monetization, accessControl, accessControlRoles, businessInformation, corsConfiguration, websubSubscriptionConfiguration, workflowStatus, createdTime, lastUpdatedTime, endpointConfig, endpointImplementationType, scopes, operations, threatProtectionPolicies, categories, keyManagers, serviceInfo, advertiseInfo, gatewayVendor, asyncTransportProtocols);
    }


@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class APIDTO {\n");
    sb.append("    id: ").append(toIndentedString(id)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    description: ").append(toIndentedString(description)).append("\n");
    sb.append("    context: ").append(toIndentedString(context)).append("\n");
    sb.append("    version: ").append(toIndentedString(version)).append("\n");
    sb.append("    provider: ").append(toIndentedString(provider)).append("\n");
    sb.append("    lifeCycleStatus: ").append(toIndentedString(lifeCycleStatus)).append("\n");
    sb.append("    wsdlInfo: ").append(toIndentedString(wsdlInfo)).append("\n");
    sb.append("    wsdlUrl: ").append(toIndentedString(wsdlUrl)).append("\n");
    sb.append("    responseCachingEnabled: ").append(toIndentedString(responseCachingEnabled)).append("\n");
    sb.append("    cacheTimeout: ").append(toIndentedString(cacheTimeout)).append("\n");
    sb.append("    hasThumbnail: ").append(toIndentedString(hasThumbnail)).append("\n");
    sb.append("    isDefaultVersion: ").append(toIndentedString(isDefaultVersion)).append("\n");
    sb.append("    isRevision: ").append(toIndentedString(isRevision)).append("\n");
    sb.append("    revisionedApiId: ").append(toIndentedString(revisionedApiId)).append("\n");
    sb.append("    revisionId: ").append(toIndentedString(revisionId)).append("\n");
    sb.append("    enableSchemaValidation: ").append(toIndentedString(enableSchemaValidation)).append("\n");
    sb.append("    type: ").append(toIndentedString(type)).append("\n");
    sb.append("    audience: ").append(toIndentedString(audience)).append("\n");
    sb.append("    transport: ").append(toIndentedString(transport)).append("\n");
    sb.append("    tags: ").append(toIndentedString(tags)).append("\n");
    sb.append("    policies: ").append(toIndentedString(policies)).append("\n");
    sb.append("    apiThrottlingPolicy: ").append(toIndentedString(apiThrottlingPolicy)).append("\n");
    sb.append("    authorizationHeader: ").append(toIndentedString(authorizationHeader)).append("\n");
    sb.append("    securityScheme: ").append(toIndentedString(securityScheme)).append("\n");
    sb.append("    maxTps: ").append(toIndentedString(maxTps)).append("\n");
    sb.append("    visibility: ").append(toIndentedString(visibility)).append("\n");
    sb.append("    visibleRoles: ").append(toIndentedString(visibleRoles)).append("\n");
    sb.append("    visibleTenants: ").append(toIndentedString(visibleTenants)).append("\n");
    sb.append("    mediationPolicies: ").append(toIndentedString(mediationPolicies)).append("\n");
    sb.append("    subscriptionAvailability: ").append(toIndentedString(subscriptionAvailability)).append("\n");
    sb.append("    subscriptionAvailableTenants: ").append(toIndentedString(subscriptionAvailableTenants)).append("\n");
    sb.append("    additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
    sb.append("    additionalPropertiesMap: ").append(toIndentedString(additionalPropertiesMap)).append("\n");
    sb.append("    monetization: ").append(toIndentedString(monetization)).append("\n");
    sb.append("    accessControl: ").append(toIndentedString(accessControl)).append("\n");
    sb.append("    accessControlRoles: ").append(toIndentedString(accessControlRoles)).append("\n");
    sb.append("    businessInformation: ").append(toIndentedString(businessInformation)).append("\n");
    sb.append("    corsConfiguration: ").append(toIndentedString(corsConfiguration)).append("\n");
    sb.append("    websubSubscriptionConfiguration: ").append(toIndentedString(websubSubscriptionConfiguration)).append("\n");
    sb.append("    workflowStatus: ").append(toIndentedString(workflowStatus)).append("\n");
    sb.append("    createdTime: ").append(toIndentedString(createdTime)).append("\n");
    sb.append("    lastUpdatedTime: ").append(toIndentedString(lastUpdatedTime)).append("\n");
    sb.append("    endpointConfig: ").append(toIndentedString(endpointConfig)).append("\n");
    sb.append("    endpointImplementationType: ").append(toIndentedString(endpointImplementationType)).append("\n");
    sb.append("    scopes: ").append(toIndentedString(scopes)).append("\n");
    sb.append("    operations: ").append(toIndentedString(operations)).append("\n");
    sb.append("    threatProtectionPolicies: ").append(toIndentedString(threatProtectionPolicies)).append("\n");
    sb.append("    categories: ").append(toIndentedString(categories)).append("\n");
    sb.append("    keyManagers: ").append(toIndentedString(keyManagers)).append("\n");
    sb.append("    serviceInfo: ").append(toIndentedString(serviceInfo)).append("\n");
    sb.append("    advertiseInfo: ").append(toIndentedString(advertiseInfo)).append("\n");
    sb.append("    gatewayVendor: ").append(toIndentedString(gatewayVendor)).append("\n");
    sb.append("    asyncTransportProtocols: ").append(toIndentedString(asyncTransportProtocols)).append("\n");
sb.append("}");
return sb.toString();
}

/**
* Convert the given object to string with each line indented by 4 spaces
* (except the first line).
*/
private String toIndentedString(Object o) {
if (o == null) {
return "null";
}
return o.toString().replace("\n", "\n    ");
}

}

