/*
 * 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: v4
 * 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 com.fasterxml.jackson.annotation.JsonCreator;
/**
* APIRevisionDeploymentDTO
*/

public class APIRevisionDeploymentDTO {
        public static final String SERIALIZED_NAME_REVISION_UUID = "revisionUuid";
        @SerializedName(SERIALIZED_NAME_REVISION_UUID)
            private String revisionUuid;

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

            /**
* Gets or Sets status
*/
    @JsonAdapter(StatusEnum.Adapter.class)
public enum StatusEnum {
        CREATED("CREATED"),
        
        APPROVED("APPROVED"),
        
        REJECTED("REJECTED");

private String value;

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

public String getValue() {
return value;
}

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

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

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

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

        public static final String SERIALIZED_NAME_STATUS = "status";
        @SerializedName(SERIALIZED_NAME_STATUS)
            private StatusEnum status = StatusEnum.CREATED;

        public static final String SERIALIZED_NAME_VHOST = "vhost";
        @SerializedName(SERIALIZED_NAME_VHOST)
            private String vhost;

        public static final String SERIALIZED_NAME_DISPLAY_ON_DEVPORTAL = "displayOnDevportal";
        @SerializedName(SERIALIZED_NAME_DISPLAY_ON_DEVPORTAL)
            private Boolean displayOnDevportal;

        public static final String SERIALIZED_NAME_DEPLOYED_TIME = "deployedTime";
        @SerializedName(SERIALIZED_NAME_DEPLOYED_TIME)
            private String deployedTime;

        public static final String SERIALIZED_NAME_SUCCESS_DEPLOYED_TIME = "successDeployedTime";
        @SerializedName(SERIALIZED_NAME_SUCCESS_DEPLOYED_TIME)
            private String successDeployedTime;

        public static final String SERIALIZED_NAME_LIVE_GATEWAY_COUNT = "liveGatewayCount";
        @SerializedName(SERIALIZED_NAME_LIVE_GATEWAY_COUNT)
            private Integer liveGatewayCount;

        public static final String SERIALIZED_NAME_DEPLOYED_GATEWAY_COUNT = "deployedGatewayCount";
        @SerializedName(SERIALIZED_NAME_DEPLOYED_GATEWAY_COUNT)
            private Integer deployedGatewayCount;

        public static final String SERIALIZED_NAME_FAILED_GATEWAY_COUNT = "failedGatewayCount";
        @SerializedName(SERIALIZED_NAME_FAILED_GATEWAY_COUNT)
            private Integer failedGatewayCount;


        public APIRevisionDeploymentDTO revisionUuid(String revisionUuid) {
        
        this.revisionUuid = revisionUuid;
        return this;
        }

    /**
        * Get revisionUuid
    * @return revisionUuid
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "c26b2b9b-4632-4ca4-b6f3-521c8863990c", value = "")
    
    public String getRevisionUuid() {
        return revisionUuid;
    }


    public void setRevisionUuid(String revisionUuid) {
        this.revisionUuid = revisionUuid;
    }


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

    /**
        * Get name
    * @return name
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "default", value = "")
    
    public String getName() {
        return name;
    }


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


        public APIRevisionDeploymentDTO status(StatusEnum status) {
        
        this.status = status;
        return this;
        }

    /**
        * Get status
    * @return status
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "CREATED", value = "")
    
    public StatusEnum getStatus() {
        return status;
    }


    public void setStatus(StatusEnum status) {
        this.status = status;
    }


        public APIRevisionDeploymentDTO vhost(String vhost) {
        
        this.vhost = vhost;
        return this;
        }

    /**
        * Get vhost
    * @return vhost
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "mg.wso2.com", value = "")
    
    public String getVhost() {
        return vhost;
    }


    public void setVhost(String vhost) {
        this.vhost = vhost;
    }


        public APIRevisionDeploymentDTO displayOnDevportal(Boolean displayOnDevportal) {
        
        this.displayOnDevportal = displayOnDevportal;
        return this;
        }

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


    public void setDisplayOnDevportal(Boolean displayOnDevportal) {
        this.displayOnDevportal = displayOnDevportal;
    }


        public APIRevisionDeploymentDTO deployedTime(String deployedTime) {
        
        this.deployedTime = deployedTime;
        return this;
        }

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


    public void setDeployedTime(String deployedTime) {
        this.deployedTime = deployedTime;
    }


        public APIRevisionDeploymentDTO successDeployedTime(String successDeployedTime) {
        
        this.successDeployedTime = successDeployedTime;
        return this;
        }

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


    public void setSuccessDeployedTime(String successDeployedTime) {
        this.successDeployedTime = successDeployedTime;
    }


        public APIRevisionDeploymentDTO liveGatewayCount(Integer liveGatewayCount) {
        
        this.liveGatewayCount = liveGatewayCount;
        return this;
        }

    /**
        * The number of gateways that are currently live in the gateway environment 
    * @return liveGatewayCount
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "1", value = "The number of gateways that are currently live in the gateway environment ")
    
    public Integer getLiveGatewayCount() {
        return liveGatewayCount;
    }


    public void setLiveGatewayCount(Integer liveGatewayCount) {
        this.liveGatewayCount = liveGatewayCount;
    }


        public APIRevisionDeploymentDTO deployedGatewayCount(Integer deployedGatewayCount) {
        
        this.deployedGatewayCount = deployedGatewayCount;
        return this;
        }

    /**
        * The number of gateways in which the API revision is deployed successfully 
    * @return deployedGatewayCount
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "1", value = "The number of gateways in which the API revision is deployed successfully ")
    
    public Integer getDeployedGatewayCount() {
        return deployedGatewayCount;
    }


    public void setDeployedGatewayCount(Integer deployedGatewayCount) {
        this.deployedGatewayCount = deployedGatewayCount;
    }


        public APIRevisionDeploymentDTO failedGatewayCount(Integer failedGatewayCount) {
        
        this.failedGatewayCount = failedGatewayCount;
        return this;
        }

    /**
        * The number of gateways where the API revision deployment has failed 
    * @return failedGatewayCount
    **/
        @javax.annotation.Nullable
      @ApiModelProperty(example = "1", value = "The number of gateways where the API revision deployment has failed ")
    
    public Integer getFailedGatewayCount() {
        return failedGatewayCount;
    }


    public void setFailedGatewayCount(Integer failedGatewayCount) {
        this.failedGatewayCount = failedGatewayCount;
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) {
        return true;
        }
        if (o == null || getClass() != o.getClass()) {
        return false;
        }
            APIRevisionDeploymentDTO apIRevisionDeployment = (APIRevisionDeploymentDTO) o;
            return Objects.equals(this.revisionUuid, apIRevisionDeployment.revisionUuid) &&
            Objects.equals(this.name, apIRevisionDeployment.name) &&
            Objects.equals(this.status, apIRevisionDeployment.status) &&
            Objects.equals(this.vhost, apIRevisionDeployment.vhost) &&
            Objects.equals(this.displayOnDevportal, apIRevisionDeployment.displayOnDevportal) &&
            Objects.equals(this.deployedTime, apIRevisionDeployment.deployedTime) &&
            Objects.equals(this.successDeployedTime, apIRevisionDeployment.successDeployedTime) &&
            Objects.equals(this.liveGatewayCount, apIRevisionDeployment.liveGatewayCount) &&
            Objects.equals(this.deployedGatewayCount, apIRevisionDeployment.deployedGatewayCount) &&
            Objects.equals(this.failedGatewayCount, apIRevisionDeployment.failedGatewayCount);
    }

    @Override
    public int hashCode() {
        return Objects.hash(revisionUuid, name, status, vhost, displayOnDevportal, deployedTime, successDeployedTime, liveGatewayCount, deployedGatewayCount, failedGatewayCount);
    }


@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("class APIRevisionDeploymentDTO {\n");
    sb.append("    revisionUuid: ").append(toIndentedString(revisionUuid)).append("\n");
    sb.append("    name: ").append(toIndentedString(name)).append("\n");
    sb.append("    status: ").append(toIndentedString(status)).append("\n");
    sb.append("    vhost: ").append(toIndentedString(vhost)).append("\n");
    sb.append("    displayOnDevportal: ").append(toIndentedString(displayOnDevportal)).append("\n");
    sb.append("    deployedTime: ").append(toIndentedString(deployedTime)).append("\n");
    sb.append("    successDeployedTime: ").append(toIndentedString(successDeployedTime)).append("\n");
    sb.append("    liveGatewayCount: ").append(toIndentedString(liveGatewayCount)).append("\n");
    sb.append("    deployedGatewayCount: ").append(toIndentedString(deployedGatewayCount)).append("\n");
    sb.append("    failedGatewayCount: ").append(toIndentedString(failedGatewayCount)).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    ");
}

}

