/*
 * 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;

import org.wso2.am.integration.clients.publisher.api.ApiCallback;
import org.wso2.am.integration.clients.publisher.api.ApiClient;
import org.wso2.am.integration.clients.publisher.api.ApiException;
import org.wso2.am.integration.clients.publisher.api.ApiResponse;
import org.wso2.am.integration.clients.publisher.api.Configuration;
import org.wso2.am.integration.clients.publisher.api.Pair;
import org.wso2.am.integration.clients.publisher.api.ProgressRequestBody;
import org.wso2.am.integration.clients.publisher.api.ProgressResponseBody;

import com.google.gson.reflect.TypeToken;

import java.io.IOException;


import org.wso2.am.integration.clients.publisher.api.v1.dto.ErrorDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.GatewayPolicyDeploymentDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.GatewayPolicyMappingDataListDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.GatewayPolicyMappingInfoDTO;
import org.wso2.am.integration.clients.publisher.api.v1.dto.GatewayPolicyMappingsDTO;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class GatewayPoliciesApi {
    private ApiClient localVarApiClient;

    public GatewayPoliciesApi() {
        this(Configuration.getDefaultApiClient());
    }

    public GatewayPoliciesApi(ApiClient apiClient) {
        this.localVarApiClient = apiClient;
    }

    public ApiClient getApiClient() {
        return localVarApiClient;
    }

    public void setApiClient(ApiClient apiClient) {
        this.localVarApiClient = apiClient;
    }

    /**
     * Build call for addGatewayPoliciesToFlows
     * @param gatewayPolicyMappingsDTO Policy details object that needs to be added. (required)
     * @param _callback Callback for upload/download progress
     * @return Call to execute
     * @throws ApiException If fail to serialize the request body object
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 201 </td><td> OK. Policy mapping created successfully.  </td><td>  * Location - The URL of the created gateway policy mapping.  <br>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 400 </td><td> Bad Request. Invalid request or validation error. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public okhttp3.Call addGatewayPoliciesToFlowsCall(GatewayPolicyMappingsDTO gatewayPolicyMappingsDTO, final ApiCallback _callback) throws ApiException {
        Object localVarPostBody = gatewayPolicyMappingsDTO;

        // create path and map variables
        String localVarPath = "/gateway-policies";

        List<Pair> localVarQueryParams = new ArrayList<Pair>();
        List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
        Map<String, String> localVarHeaderParams = new HashMap<String, String>();
        Map<String, String> localVarCookieParams = new HashMap<String, String>();
        Map<String, Object> localVarFormParams = new HashMap<String, Object>();
        final String[] localVarAccepts = {
            "application/json"
        };
        final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
        if (localVarAccept != null) {
            localVarHeaderParams.put("Accept", localVarAccept);
        }

        final String[] localVarContentTypes = {
            "application/json"
        };
        final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
        localVarHeaderParams.put("Content-Type", localVarContentType);

        String[] localVarAuthNames = new String[] { "OAuth2Security" };
        return localVarApiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
    }

    @SuppressWarnings("rawtypes")
    private okhttp3.Call addGatewayPoliciesToFlowsValidateBeforeCall(GatewayPolicyMappingsDTO gatewayPolicyMappingsDTO, final ApiCallback _callback) throws ApiException {
        
        // verify the required parameter 'gatewayPolicyMappingsDTO' is set
        if (gatewayPolicyMappingsDTO == null) {
            throw new ApiException("Missing the required parameter 'gatewayPolicyMappingsDTO' when calling addGatewayPoliciesToFlows(Async)");
        }
        

        okhttp3.Call localVarCall = addGatewayPoliciesToFlowsCall(gatewayPolicyMappingsDTO, _callback);
        return localVarCall;

    }

    /**
     * Engage gateway policies to the request, response, fault flows
     * This operation can be used to apply gateway policies to the request, response, fault flows. 
     * @param gatewayPolicyMappingsDTO Policy details object that needs to be added. (required)
     * @return GatewayPolicyMappingInfoDTO
     * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 201 </td><td> OK. Policy mapping created successfully.  </td><td>  * Location - The URL of the created gateway policy mapping.  <br>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 400 </td><td> Bad Request. Invalid request or validation error. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public GatewayPolicyMappingInfoDTO addGatewayPoliciesToFlows(GatewayPolicyMappingsDTO gatewayPolicyMappingsDTO) throws ApiException {
        ApiResponse<GatewayPolicyMappingInfoDTO> localVarResp = addGatewayPoliciesToFlowsWithHttpInfo(gatewayPolicyMappingsDTO);
        return localVarResp.getData();
    }

    /**
     * Engage gateway policies to the request, response, fault flows
     * This operation can be used to apply gateway policies to the request, response, fault flows. 
     * @param gatewayPolicyMappingsDTO Policy details object that needs to be added. (required)
     * @return ApiResponse&lt;GatewayPolicyMappingInfoDTO&gt;
     * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 201 </td><td> OK. Policy mapping created successfully.  </td><td>  * Location - The URL of the created gateway policy mapping.  <br>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 400 </td><td> Bad Request. Invalid request or validation error. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public ApiResponse<GatewayPolicyMappingInfoDTO> addGatewayPoliciesToFlowsWithHttpInfo(GatewayPolicyMappingsDTO gatewayPolicyMappingsDTO) throws ApiException {
        okhttp3.Call localVarCall = addGatewayPoliciesToFlowsValidateBeforeCall(gatewayPolicyMappingsDTO, null);
        Type localVarReturnType = new TypeToken<GatewayPolicyMappingInfoDTO>(){}.getType();
        return localVarApiClient.execute(localVarCall, localVarReturnType);
    }

    /**
     * Engage gateway policies to the request, response, fault flows (asynchronously)
     * This operation can be used to apply gateway policies to the request, response, fault flows. 
     * @param gatewayPolicyMappingsDTO Policy details object that needs to be added. (required)
     * @param _callback The callback to be executed when the API call finishes
     * @return The request call
     * @throws ApiException If fail to process the API call, e.g. serializing the request body object
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 201 </td><td> OK. Policy mapping created successfully.  </td><td>  * Location - The URL of the created gateway policy mapping.  <br>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 400 </td><td> Bad Request. Invalid request or validation error. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public okhttp3.Call addGatewayPoliciesToFlowsAsync(GatewayPolicyMappingsDTO gatewayPolicyMappingsDTO, final ApiCallback<GatewayPolicyMappingInfoDTO> _callback) throws ApiException {

        okhttp3.Call localVarCall = addGatewayPoliciesToFlowsValidateBeforeCall(gatewayPolicyMappingsDTO, _callback);
        Type localVarReturnType = new TypeToken<GatewayPolicyMappingInfoDTO>(){}.getType();
        localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback);
        return localVarCall;
    }
    /**
     * Build call for deleteGatewayPolicyByPolicyId
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @param _callback Callback for upload/download progress
     * @return Call to execute
     * @throws ApiException If fail to serialize the request body object
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Resource successfully deleted.  </td><td>  -  </td></tr>
        <tr><td> 403 </td><td> Forbidden. The request must be conditional but no condition has been specified. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 412 </td><td> Precondition Failed. The request has not been performed because one of the preconditions is not met. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public okhttp3.Call deleteGatewayPolicyByPolicyIdCall(String gatewayPolicyMappingId, final ApiCallback _callback) throws ApiException {
        Object localVarPostBody = null;

        // create path and map variables
        String localVarPath = "/gateway-policies/{gatewayPolicyMappingId}"
            .replaceAll("\\{" + "gatewayPolicyMappingId" + "\\}", localVarApiClient.escapeString(gatewayPolicyMappingId.toString()));

        List<Pair> localVarQueryParams = new ArrayList<Pair>();
        List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
        Map<String, String> localVarHeaderParams = new HashMap<String, String>();
        Map<String, String> localVarCookieParams = new HashMap<String, String>();
        Map<String, Object> localVarFormParams = new HashMap<String, Object>();
        final String[] localVarAccepts = {
            "application/json"
        };
        final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
        if (localVarAccept != null) {
            localVarHeaderParams.put("Accept", localVarAccept);
        }

        final String[] localVarContentTypes = {
            
        };
        final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
        localVarHeaderParams.put("Content-Type", localVarContentType);

        String[] localVarAuthNames = new String[] { "OAuth2Security" };
        return localVarApiClient.buildCall(localVarPath, "DELETE", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
    }

    @SuppressWarnings("rawtypes")
    private okhttp3.Call deleteGatewayPolicyByPolicyIdValidateBeforeCall(String gatewayPolicyMappingId, final ApiCallback _callback) throws ApiException {
        
        // verify the required parameter 'gatewayPolicyMappingId' is set
        if (gatewayPolicyMappingId == null) {
            throw new ApiException("Missing the required parameter 'gatewayPolicyMappingId' when calling deleteGatewayPolicyByPolicyId(Async)");
        }
        

        okhttp3.Call localVarCall = deleteGatewayPolicyByPolicyIdCall(gatewayPolicyMappingId, _callback);
        return localVarCall;

    }

    /**
     * Delete a gateway policy mapping
     * This operation can be used to delete an existing gateway policy mapping by providing the Id of the policy mapping. 
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Resource successfully deleted.  </td><td>  -  </td></tr>
        <tr><td> 403 </td><td> Forbidden. The request must be conditional but no condition has been specified. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 412 </td><td> Precondition Failed. The request has not been performed because one of the preconditions is not met. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public void deleteGatewayPolicyByPolicyId(String gatewayPolicyMappingId) throws ApiException {
        deleteGatewayPolicyByPolicyIdWithHttpInfo(gatewayPolicyMappingId);
    }

    /**
     * Delete a gateway policy mapping
     * This operation can be used to delete an existing gateway policy mapping by providing the Id of the policy mapping. 
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @return ApiResponse&lt;Void&gt;
     * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Resource successfully deleted.  </td><td>  -  </td></tr>
        <tr><td> 403 </td><td> Forbidden. The request must be conditional but no condition has been specified. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 412 </td><td> Precondition Failed. The request has not been performed because one of the preconditions is not met. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public ApiResponse<Void> deleteGatewayPolicyByPolicyIdWithHttpInfo(String gatewayPolicyMappingId) throws ApiException {
        okhttp3.Call localVarCall = deleteGatewayPolicyByPolicyIdValidateBeforeCall(gatewayPolicyMappingId, null);
        return localVarApiClient.execute(localVarCall);
    }

    /**
     * Delete a gateway policy mapping (asynchronously)
     * This operation can be used to delete an existing gateway policy mapping by providing the Id of the policy mapping. 
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @param _callback The callback to be executed when the API call finishes
     * @return The request call
     * @throws ApiException If fail to process the API call, e.g. serializing the request body object
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Resource successfully deleted.  </td><td>  -  </td></tr>
        <tr><td> 403 </td><td> Forbidden. The request must be conditional but no condition has been specified. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 412 </td><td> Precondition Failed. The request has not been performed because one of the preconditions is not met. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public okhttp3.Call deleteGatewayPolicyByPolicyIdAsync(String gatewayPolicyMappingId, final ApiCallback<Void> _callback) throws ApiException {

        okhttp3.Call localVarCall = deleteGatewayPolicyByPolicyIdValidateBeforeCall(gatewayPolicyMappingId, _callback);
        localVarApiClient.executeAsync(localVarCall, _callback);
        return localVarCall;
    }
    /**
     * Build call for engageGlobalPolicy
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @param gatewayPolicyDeploymentDTO Policy details object that needs to be added. (required)
     * @param _callback Callback for upload/download progress
     * @return Call to execute
     * @throws ApiException If fail to serialize the request body object
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Gateway policy mapping engaged successfully.  </td><td>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 400 </td><td> Bad Request. Invalid request or validation error. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public okhttp3.Call engageGlobalPolicyCall(String gatewayPolicyMappingId, List<GatewayPolicyDeploymentDTO> gatewayPolicyDeploymentDTO, final ApiCallback _callback) throws ApiException {
        Object localVarPostBody = gatewayPolicyDeploymentDTO;

        // create path and map variables
        String localVarPath = "/gateway-policies/{gatewayPolicyMappingId}/deploy"
            .replaceAll("\\{" + "gatewayPolicyMappingId" + "\\}", localVarApiClient.escapeString(gatewayPolicyMappingId.toString()));

        List<Pair> localVarQueryParams = new ArrayList<Pair>();
        List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
        Map<String, String> localVarHeaderParams = new HashMap<String, String>();
        Map<String, String> localVarCookieParams = new HashMap<String, String>();
        Map<String, Object> localVarFormParams = new HashMap<String, Object>();
        final String[] localVarAccepts = {
            "application/json"
        };
        final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
        if (localVarAccept != null) {
            localVarHeaderParams.put("Accept", localVarAccept);
        }

        final String[] localVarContentTypes = {
            "application/json"
        };
        final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
        localVarHeaderParams.put("Content-Type", localVarContentType);

        String[] localVarAuthNames = new String[] { "OAuth2Security" };
        return localVarApiClient.buildCall(localVarPath, "POST", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
    }

    @SuppressWarnings("rawtypes")
    private okhttp3.Call engageGlobalPolicyValidateBeforeCall(String gatewayPolicyMappingId, List<GatewayPolicyDeploymentDTO> gatewayPolicyDeploymentDTO, final ApiCallback _callback) throws ApiException {
        
        // verify the required parameter 'gatewayPolicyMappingId' is set
        if (gatewayPolicyMappingId == null) {
            throw new ApiException("Missing the required parameter 'gatewayPolicyMappingId' when calling engageGlobalPolicy(Async)");
        }
        
        // verify the required parameter 'gatewayPolicyDeploymentDTO' is set
        if (gatewayPolicyDeploymentDTO == null) {
            throw new ApiException("Missing the required parameter 'gatewayPolicyDeploymentDTO' when calling engageGlobalPolicy(Async)");
        }
        

        okhttp3.Call localVarCall = engageGlobalPolicyCall(gatewayPolicyMappingId, gatewayPolicyDeploymentDTO, _callback);
        return localVarCall;

    }

    /**
     * Engage gateway policy mapping to the gateways
     * This operation can be used to engage gateway policy mapping to the gateway/s. 
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @param gatewayPolicyDeploymentDTO Policy details object that needs to be added. (required)
     * @return List&lt;GatewayPolicyDeploymentDTO&gt;
     * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Gateway policy mapping engaged successfully.  </td><td>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 400 </td><td> Bad Request. Invalid request or validation error. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public List<GatewayPolicyDeploymentDTO> engageGlobalPolicy(String gatewayPolicyMappingId, List<GatewayPolicyDeploymentDTO> gatewayPolicyDeploymentDTO) throws ApiException {
        ApiResponse<List<GatewayPolicyDeploymentDTO>> localVarResp = engageGlobalPolicyWithHttpInfo(gatewayPolicyMappingId, gatewayPolicyDeploymentDTO);
        return localVarResp.getData();
    }

    /**
     * Engage gateway policy mapping to the gateways
     * This operation can be used to engage gateway policy mapping to the gateway/s. 
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @param gatewayPolicyDeploymentDTO Policy details object that needs to be added. (required)
     * @return ApiResponse&lt;List&lt;GatewayPolicyDeploymentDTO&gt;&gt;
     * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Gateway policy mapping engaged successfully.  </td><td>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 400 </td><td> Bad Request. Invalid request or validation error. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public ApiResponse<List<GatewayPolicyDeploymentDTO>> engageGlobalPolicyWithHttpInfo(String gatewayPolicyMappingId, List<GatewayPolicyDeploymentDTO> gatewayPolicyDeploymentDTO) throws ApiException {
        okhttp3.Call localVarCall = engageGlobalPolicyValidateBeforeCall(gatewayPolicyMappingId, gatewayPolicyDeploymentDTO, null);
        Type localVarReturnType = new TypeToken<List<GatewayPolicyDeploymentDTO>>(){}.getType();
        return localVarApiClient.execute(localVarCall, localVarReturnType);
    }

    /**
     * Engage gateway policy mapping to the gateways (asynchronously)
     * This operation can be used to engage gateway policy mapping to the gateway/s. 
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @param gatewayPolicyDeploymentDTO Policy details object that needs to be added. (required)
     * @param _callback The callback to be executed when the API call finishes
     * @return The request call
     * @throws ApiException If fail to process the API call, e.g. serializing the request body object
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Gateway policy mapping engaged successfully.  </td><td>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 400 </td><td> Bad Request. Invalid request or validation error. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public okhttp3.Call engageGlobalPolicyAsync(String gatewayPolicyMappingId, List<GatewayPolicyDeploymentDTO> gatewayPolicyDeploymentDTO, final ApiCallback<List<GatewayPolicyDeploymentDTO>> _callback) throws ApiException {

        okhttp3.Call localVarCall = engageGlobalPolicyValidateBeforeCall(gatewayPolicyMappingId, gatewayPolicyDeploymentDTO, _callback);
        Type localVarReturnType = new TypeToken<List<GatewayPolicyDeploymentDTO>>(){}.getType();
        localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback);
        return localVarCall;
    }
    /**
     * Build call for getAllGatewayPolicies
     * @param limit Maximum size of policy array to return.  (optional)
     * @param offset Starting point within the complete list of items qualified.  (optional, default to 0)
     * @param query **Search condition**.  You can search in attributes by using an **\&quot;gatewayLabel:\&quot;** modifier.  Eg. The entry \&quot;gatewayLabel:gateway1\&quot; will result in a match with a Gateway Policy Mapping only if the policy mapping is deployed on \&quot;gateway1\&quot;.  If query attribute is provided, this returns the Gateway policy Mapping available under the given limit.  Please note that you need to use encoded URL (URL encoding) if you are using a client which does not support URL encoding (such as curl)  (optional)
     * @param _callback Callback for upload/download progress
     * @return Call to execute
     * @throws ApiException If fail to serialize the request body object
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. List of gateway policies is returned.  </td><td>  * Content-Type - The content type of the body. <br>  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public okhttp3.Call getAllGatewayPoliciesCall(Integer limit, Integer offset, String query, final ApiCallback _callback) throws ApiException {
        Object localVarPostBody = null;

        // create path and map variables
        String localVarPath = "/gateway-policies";

        List<Pair> localVarQueryParams = new ArrayList<Pair>();
        List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
        if (limit != null) {
            localVarQueryParams.addAll(localVarApiClient.parameterToPair("limit", limit));
        }

        if (offset != null) {
            localVarQueryParams.addAll(localVarApiClient.parameterToPair("offset", offset));
        }

        if (query != null) {
            localVarQueryParams.addAll(localVarApiClient.parameterToPair("query", query));
        }

        Map<String, String> localVarHeaderParams = new HashMap<String, String>();
        Map<String, String> localVarCookieParams = new HashMap<String, String>();
        Map<String, Object> localVarFormParams = new HashMap<String, Object>();
        final String[] localVarAccepts = {
            "application/json"
        };
        final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
        if (localVarAccept != null) {
            localVarHeaderParams.put("Accept", localVarAccept);
        }

        final String[] localVarContentTypes = {
            
        };
        final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
        localVarHeaderParams.put("Content-Type", localVarContentType);

        String[] localVarAuthNames = new String[] { "OAuth2Security" };
        return localVarApiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
    }

    @SuppressWarnings("rawtypes")
    private okhttp3.Call getAllGatewayPoliciesValidateBeforeCall(Integer limit, Integer offset, String query, final ApiCallback _callback) throws ApiException {
        

        okhttp3.Call localVarCall = getAllGatewayPoliciesCall(limit, offset, query, _callback);
        return localVarCall;

    }

    /**
     * Get all gateway policies mapping information 
     * This operation provides you a list of all gateway policies mapping information. 
     * @param limit Maximum size of policy array to return.  (optional)
     * @param offset Starting point within the complete list of items qualified.  (optional, default to 0)
     * @param query **Search condition**.  You can search in attributes by using an **\&quot;gatewayLabel:\&quot;** modifier.  Eg. The entry \&quot;gatewayLabel:gateway1\&quot; will result in a match with a Gateway Policy Mapping only if the policy mapping is deployed on \&quot;gateway1\&quot;.  If query attribute is provided, this returns the Gateway policy Mapping available under the given limit.  Please note that you need to use encoded URL (URL encoding) if you are using a client which does not support URL encoding (such as curl)  (optional)
     * @return GatewayPolicyMappingDataListDTO
     * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. List of gateway policies is returned.  </td><td>  * Content-Type - The content type of the body. <br>  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public GatewayPolicyMappingDataListDTO getAllGatewayPolicies(Integer limit, Integer offset, String query) throws ApiException {
        ApiResponse<GatewayPolicyMappingDataListDTO> localVarResp = getAllGatewayPoliciesWithHttpInfo(limit, offset, query);
        return localVarResp.getData();
    }

    /**
     * Get all gateway policies mapping information 
     * This operation provides you a list of all gateway policies mapping information. 
     * @param limit Maximum size of policy array to return.  (optional)
     * @param offset Starting point within the complete list of items qualified.  (optional, default to 0)
     * @param query **Search condition**.  You can search in attributes by using an **\&quot;gatewayLabel:\&quot;** modifier.  Eg. The entry \&quot;gatewayLabel:gateway1\&quot; will result in a match with a Gateway Policy Mapping only if the policy mapping is deployed on \&quot;gateway1\&quot;.  If query attribute is provided, this returns the Gateway policy Mapping available under the given limit.  Please note that you need to use encoded URL (URL encoding) if you are using a client which does not support URL encoding (such as curl)  (optional)
     * @return ApiResponse&lt;GatewayPolicyMappingDataListDTO&gt;
     * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. List of gateway policies is returned.  </td><td>  * Content-Type - The content type of the body. <br>  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public ApiResponse<GatewayPolicyMappingDataListDTO> getAllGatewayPoliciesWithHttpInfo(Integer limit, Integer offset, String query) throws ApiException {
        okhttp3.Call localVarCall = getAllGatewayPoliciesValidateBeforeCall(limit, offset, query, null);
        Type localVarReturnType = new TypeToken<GatewayPolicyMappingDataListDTO>(){}.getType();
        return localVarApiClient.execute(localVarCall, localVarReturnType);
    }

    /**
     * Get all gateway policies mapping information  (asynchronously)
     * This operation provides you a list of all gateway policies mapping information. 
     * @param limit Maximum size of policy array to return.  (optional)
     * @param offset Starting point within the complete list of items qualified.  (optional, default to 0)
     * @param query **Search condition**.  You can search in attributes by using an **\&quot;gatewayLabel:\&quot;** modifier.  Eg. The entry \&quot;gatewayLabel:gateway1\&quot; will result in a match with a Gateway Policy Mapping only if the policy mapping is deployed on \&quot;gateway1\&quot;.  If query attribute is provided, this returns the Gateway policy Mapping available under the given limit.  Please note that you need to use encoded URL (URL encoding) if you are using a client which does not support URL encoding (such as curl)  (optional)
     * @param _callback The callback to be executed when the API call finishes
     * @return The request call
     * @throws ApiException If fail to process the API call, e.g. serializing the request body object
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. List of gateway policies is returned.  </td><td>  * Content-Type - The content type of the body. <br>  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public okhttp3.Call getAllGatewayPoliciesAsync(Integer limit, Integer offset, String query, final ApiCallback<GatewayPolicyMappingDataListDTO> _callback) throws ApiException {

        okhttp3.Call localVarCall = getAllGatewayPoliciesValidateBeforeCall(limit, offset, query, _callback);
        Type localVarReturnType = new TypeToken<GatewayPolicyMappingDataListDTO>(){}.getType();
        localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback);
        return localVarCall;
    }
    /**
     * Build call for getGatewayPolicyMappingContentByPolicyMappingId
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @param _callback Callback for upload/download progress
     * @return Call to execute
     * @throws ApiException If fail to serialize the request body object
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Gateway policy mapping information returned.  </td><td>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public okhttp3.Call getGatewayPolicyMappingContentByPolicyMappingIdCall(String gatewayPolicyMappingId, final ApiCallback _callback) throws ApiException {
        Object localVarPostBody = null;

        // create path and map variables
        String localVarPath = "/gateway-policies/{gatewayPolicyMappingId}"
            .replaceAll("\\{" + "gatewayPolicyMappingId" + "\\}", localVarApiClient.escapeString(gatewayPolicyMappingId.toString()));

        List<Pair> localVarQueryParams = new ArrayList<Pair>();
        List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
        Map<String, String> localVarHeaderParams = new HashMap<String, String>();
        Map<String, String> localVarCookieParams = new HashMap<String, String>();
        Map<String, Object> localVarFormParams = new HashMap<String, Object>();
        final String[] localVarAccepts = {
            "application/json"
        };
        final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
        if (localVarAccept != null) {
            localVarHeaderParams.put("Accept", localVarAccept);
        }

        final String[] localVarContentTypes = {
            
        };
        final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
        localVarHeaderParams.put("Content-Type", localVarContentType);

        String[] localVarAuthNames = new String[] { "OAuth2Security" };
        return localVarApiClient.buildCall(localVarPath, "GET", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
    }

    @SuppressWarnings("rawtypes")
    private okhttp3.Call getGatewayPolicyMappingContentByPolicyMappingIdValidateBeforeCall(String gatewayPolicyMappingId, final ApiCallback _callback) throws ApiException {
        
        // verify the required parameter 'gatewayPolicyMappingId' is set
        if (gatewayPolicyMappingId == null) {
            throw new ApiException("Missing the required parameter 'gatewayPolicyMappingId' when calling getGatewayPolicyMappingContentByPolicyMappingId(Async)");
        }
        

        okhttp3.Call localVarCall = getGatewayPolicyMappingContentByPolicyMappingIdCall(gatewayPolicyMappingId, _callback);
        return localVarCall;

    }

    /**
     * Retrieve information of a selected gateway policy mapping
     * This operation can be used to retrieve information of a selected gateway policy mapping. 
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @return GatewayPolicyMappingsDTO
     * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Gateway policy mapping information returned.  </td><td>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public GatewayPolicyMappingsDTO getGatewayPolicyMappingContentByPolicyMappingId(String gatewayPolicyMappingId) throws ApiException {
        ApiResponse<GatewayPolicyMappingsDTO> localVarResp = getGatewayPolicyMappingContentByPolicyMappingIdWithHttpInfo(gatewayPolicyMappingId);
        return localVarResp.getData();
    }

    /**
     * Retrieve information of a selected gateway policy mapping
     * This operation can be used to retrieve information of a selected gateway policy mapping. 
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @return ApiResponse&lt;GatewayPolicyMappingsDTO&gt;
     * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Gateway policy mapping information returned.  </td><td>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public ApiResponse<GatewayPolicyMappingsDTO> getGatewayPolicyMappingContentByPolicyMappingIdWithHttpInfo(String gatewayPolicyMappingId) throws ApiException {
        okhttp3.Call localVarCall = getGatewayPolicyMappingContentByPolicyMappingIdValidateBeforeCall(gatewayPolicyMappingId, null);
        Type localVarReturnType = new TypeToken<GatewayPolicyMappingsDTO>(){}.getType();
        return localVarApiClient.execute(localVarCall, localVarReturnType);
    }

    /**
     * Retrieve information of a selected gateway policy mapping (asynchronously)
     * This operation can be used to retrieve information of a selected gateway policy mapping. 
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @param _callback The callback to be executed when the API call finishes
     * @return The request call
     * @throws ApiException If fail to process the API call, e.g. serializing the request body object
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Gateway policy mapping information returned.  </td><td>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public okhttp3.Call getGatewayPolicyMappingContentByPolicyMappingIdAsync(String gatewayPolicyMappingId, final ApiCallback<GatewayPolicyMappingsDTO> _callback) throws ApiException {

        okhttp3.Call localVarCall = getGatewayPolicyMappingContentByPolicyMappingIdValidateBeforeCall(gatewayPolicyMappingId, _callback);
        Type localVarReturnType = new TypeToken<GatewayPolicyMappingsDTO>(){}.getType();
        localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback);
        return localVarCall;
    }
    /**
     * Build call for updateGatewayPoliciesToFlows
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @param gatewayPolicyMappingsDTO Policy details object that needs to be updated. (required)
     * @param _callback Callback for upload/download progress
     * @return Call to execute
     * @throws ApiException If fail to serialize the request body object
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Policy mapping updated successfully.  </td><td>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 400 </td><td> Bad Request. Invalid request or validation error. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public okhttp3.Call updateGatewayPoliciesToFlowsCall(String gatewayPolicyMappingId, GatewayPolicyMappingsDTO gatewayPolicyMappingsDTO, final ApiCallback _callback) throws ApiException {
        Object localVarPostBody = gatewayPolicyMappingsDTO;

        // create path and map variables
        String localVarPath = "/gateway-policies/{gatewayPolicyMappingId}"
            .replaceAll("\\{" + "gatewayPolicyMappingId" + "\\}", localVarApiClient.escapeString(gatewayPolicyMappingId.toString()));

        List<Pair> localVarQueryParams = new ArrayList<Pair>();
        List<Pair> localVarCollectionQueryParams = new ArrayList<Pair>();
        Map<String, String> localVarHeaderParams = new HashMap<String, String>();
        Map<String, String> localVarCookieParams = new HashMap<String, String>();
        Map<String, Object> localVarFormParams = new HashMap<String, Object>();
        final String[] localVarAccepts = {
            "application/json"
        };
        final String localVarAccept = localVarApiClient.selectHeaderAccept(localVarAccepts);
        if (localVarAccept != null) {
            localVarHeaderParams.put("Accept", localVarAccept);
        }

        final String[] localVarContentTypes = {
            "application/json"
        };
        final String localVarContentType = localVarApiClient.selectHeaderContentType(localVarContentTypes);
        localVarHeaderParams.put("Content-Type", localVarContentType);

        String[] localVarAuthNames = new String[] { "OAuth2Security" };
        return localVarApiClient.buildCall(localVarPath, "PUT", localVarQueryParams, localVarCollectionQueryParams, localVarPostBody, localVarHeaderParams, localVarCookieParams, localVarFormParams, localVarAuthNames, _callback);
    }

    @SuppressWarnings("rawtypes")
    private okhttp3.Call updateGatewayPoliciesToFlowsValidateBeforeCall(String gatewayPolicyMappingId, GatewayPolicyMappingsDTO gatewayPolicyMappingsDTO, final ApiCallback _callback) throws ApiException {
        
        // verify the required parameter 'gatewayPolicyMappingId' is set
        if (gatewayPolicyMappingId == null) {
            throw new ApiException("Missing the required parameter 'gatewayPolicyMappingId' when calling updateGatewayPoliciesToFlows(Async)");
        }
        
        // verify the required parameter 'gatewayPolicyMappingsDTO' is set
        if (gatewayPolicyMappingsDTO == null) {
            throw new ApiException("Missing the required parameter 'gatewayPolicyMappingsDTO' when calling updateGatewayPoliciesToFlows(Async)");
        }
        

        okhttp3.Call localVarCall = updateGatewayPoliciesToFlowsCall(gatewayPolicyMappingId, gatewayPolicyMappingsDTO, _callback);
        return localVarCall;

    }

    /**
     * Update gateway policies added to the request, response, fault flows
     * This operation can be used to update already added gateway policies to the request, response, fault flows. 
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @param gatewayPolicyMappingsDTO Policy details object that needs to be updated. (required)
     * @return GatewayPolicyMappingsDTO
     * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Policy mapping updated successfully.  </td><td>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 400 </td><td> Bad Request. Invalid request or validation error. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public GatewayPolicyMappingsDTO updateGatewayPoliciesToFlows(String gatewayPolicyMappingId, GatewayPolicyMappingsDTO gatewayPolicyMappingsDTO) throws ApiException {
        ApiResponse<GatewayPolicyMappingsDTO> localVarResp = updateGatewayPoliciesToFlowsWithHttpInfo(gatewayPolicyMappingId, gatewayPolicyMappingsDTO);
        return localVarResp.getData();
    }

    /**
     * Update gateway policies added to the request, response, fault flows
     * This operation can be used to update already added gateway policies to the request, response, fault flows. 
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @param gatewayPolicyMappingsDTO Policy details object that needs to be updated. (required)
     * @return ApiResponse&lt;GatewayPolicyMappingsDTO&gt;
     * @throws ApiException If fail to call the API, e.g. server error or cannot deserialize the response body
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Policy mapping updated successfully.  </td><td>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 400 </td><td> Bad Request. Invalid request or validation error. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public ApiResponse<GatewayPolicyMappingsDTO> updateGatewayPoliciesToFlowsWithHttpInfo(String gatewayPolicyMappingId, GatewayPolicyMappingsDTO gatewayPolicyMappingsDTO) throws ApiException {
        okhttp3.Call localVarCall = updateGatewayPoliciesToFlowsValidateBeforeCall(gatewayPolicyMappingId, gatewayPolicyMappingsDTO, null);
        Type localVarReturnType = new TypeToken<GatewayPolicyMappingsDTO>(){}.getType();
        return localVarApiClient.execute(localVarCall, localVarReturnType);
    }

    /**
     * Update gateway policies added to the request, response, fault flows (asynchronously)
     * This operation can be used to update already added gateway policies to the request, response, fault flows. 
     * @param gatewayPolicyMappingId Gateway policy mapping Id  (required)
     * @param gatewayPolicyMappingsDTO Policy details object that needs to be updated. (required)
     * @param _callback The callback to be executed when the API call finishes
     * @return The request call
     * @throws ApiException If fail to process the API call, e.g. serializing the request body object
     * @http.response.details
     <table summary="Response Details" border="1">
        <tr><td> Status Code </td><td> Description </td><td> Response Headers </td></tr>
        <tr><td> 200 </td><td> OK. Policy mapping updated successfully.  </td><td>  * Content-Type - The content type of the body.  <br>  </td></tr>
        <tr><td> 400 </td><td> Bad Request. Invalid request or validation error. </td><td>  -  </td></tr>
        <tr><td> 404 </td><td> Not Found. The specified resource does not exist. </td><td>  -  </td></tr>
        <tr><td> 500 </td><td> Internal Server Error. </td><td>  -  </td></tr>
     </table>
     */
    public okhttp3.Call updateGatewayPoliciesToFlowsAsync(String gatewayPolicyMappingId, GatewayPolicyMappingsDTO gatewayPolicyMappingsDTO, final ApiCallback<GatewayPolicyMappingsDTO> _callback) throws ApiException {

        okhttp3.Call localVarCall = updateGatewayPoliciesToFlowsValidateBeforeCall(gatewayPolicyMappingId, gatewayPolicyMappingsDTO, _callback);
        Type localVarReturnType = new TypeToken<GatewayPolicyMappingsDTO>(){}.getType();
        localVarApiClient.executeAsync(localVarCall, localVarReturnType, _callback);
        return localVarCall;
    }
}
