All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xcase.intapp.advanced.AdvancedApplication Maven / Gradle / Ivy

package com.xcase.intapp.advanced;

import com.google.gson.JsonObject;
import com.xcase.common.impl.simple.core.CommonHTTPManager;
import com.xcase.common.impl.simple.core.CommonHttpResponse;
import com.xcase.common.utils.ConverterUtils;
import com.xcase.intapp.advanced.AdvancedExternalAPI;
import com.xcase.intapp.advanced.SimpleAdvancedImpl;
import com.xcase.intapp.advanced.constant.AdvancedConstant;
import com.xcase.intapp.advanced.factories.AdvancedRequestFactory;
import com.xcase.intapp.advanced.impl.simple.core.AdvancedConfigurationManager;
import com.xcase.intapp.advanced.transputs.*;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class AdvancedApplication {

    /**
     * log4j object.
     */
    protected static final Logger LOGGER = LogManager.getLogger(MethodHandles.lookup().lookupClass());

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        LOGGER.debug("starting main()");
        String clientID = AdvancedConfigurationManager.getConfigurationManager().getLocalConfig().getProperty(AdvancedConstant.CONFIG_CLIENT_ID);
        String clientSecret = AdvancedConfigurationManager.getConfigurationManager().getLocalConfig().getProperty(AdvancedConstant.CONFIG_CLIENT_SECRET);
        String swaggerAPIURL = AdvancedConfigurationManager.getConfigurationManager().getLocalConfig().getProperty(AdvancedConstant.CONFIG_SWAGGER_API_URL);
        String tokenURL = AdvancedConfigurationManager.getConfigurationManager().getLocalConfig().getProperty(AdvancedConstant.CONFIG_TOKEN_URL);
        AdvancedExternalAPI advancedExternalAPI = new SimpleAdvancedImpl(clientID, clientSecret, swaggerAPIURL, tokenURL);
        LOGGER.debug("created advancedExternalAPI");
        try {
        	advancedExternalAPI.generateTokenPair();
            String accessToken = advancedExternalAPI.getAccessToken();
            LOGGER.debug("about to invoke operation");
            InvokeOperationRequest invokeOperationRequest = AdvancedRequestFactory.createInvokeOperationRequest();
            LOGGER.debug("created invokeOperationRequest");
            invokeOperationRequest.setAccessToken(accessToken);
            invokeOperationRequest.setAPIURL(advancedExternalAPI.getApiURL());
            invokeOperationRequest.setMethod("POST");
            invokeOperationRequest.setOperationPath("api/v1/clients/");
            invokeOperationRequest.setSuccessResponseCode(201);
            String clientId = "55555";
            invokeOperationRequest.setEntityString("{\"clientId\":\"{clientId}\",\"name\":\"Underture Science\",\"status\":\"ACT\",\"description\":\"\",\"closedOn\":\"\",\"dunsNumber\":\"\",\"rounding\":null,\"timeNote\":\"\",\"billableStatus\":\"\",\"industry\":\"\",\"clientPersons\":[],\"externalIdentifiers\":[],\"lcidDictionary\":\"\",\"ebillinghubValidation\":\"\",\"timelinks\":{},\"openedOn\":\"\",\"_pricingAppData\":{\"isBillableExampleField\":null,\"shortDescriptionExampleField\":\"\"},\"_experienceAppData\":{\"isBillableExampleField\":null,\"shortDescriptionExampleField\":\"\"},\"_timeAppData\":{\"isBillableExampleField\":null,\"shortDescriptionExampleField\":\"\"},\"security\":{\"defaultAccess\":255,\"users\":[]}}".replace("{clientId}", clientId));
            InvokeOperationResponse invokeOperationResponse = advancedExternalAPI.invokeOperation(invokeOperationRequest);            
            LOGGER.debug("invoked operation");
            invokeOperationRequest.setMethod("GET");
            invokeOperationRequest.setOperationPath("api/v1/clients/_count");
            invokeOperationRequest.setEntityString(null);
            invokeOperationRequest.setSuccessResponseCode(200);
            invokeOperationResponse = advancedExternalAPI.invokeOperation(invokeOperationRequest);            
            LOGGER.debug("invoked operation");
            invokeOperationRequest.setMethod("PUT");
            invokeOperationRequest.setOperationPath("api/v1/clients/55555/security");
            invokeOperationRequest.setEntityString("{\"defaultAccess\":255,\"users\":[{\"userId\":\"ADMIN\",\"access\":255}]}");
            invokeOperationRequest.setSuccessResponseCode(200);
            invokeOperationResponse = advancedExternalAPI.invokeOperation(invokeOperationRequest);            
            LOGGER.debug("invoked operation");
            invokeOperationRequest.setMethod("GET");
            invokeOperationRequest.setOperationPath("api/v1/clients/55555/security");
            invokeOperationRequest.setEntityString(null);
            invokeOperationRequest.setSuccessResponseCode(200);
            invokeOperationResponse = advancedExternalAPI.invokeOperation(invokeOperationRequest);
            LOGGER.debug("invoked operation");
            invokeOperationRequest.setMethod("POST");
            invokeOperationRequest.setOperationPath("api/v1/clients/55555/matters");
            String matterId = "0001";
            invokeOperationRequest.setEntityString("{\"matterId\":\"{matterId}\",\"name\":\"The soup is a lie\",\"status\":\"ACT\",\"description\":\"\",\"closedOn\":\"\",\"dunsNumber\":\"\",\"rounding\":null,\"timeNote\":\"\",\"billableStatus\":\"\",\"industry\":\"\",\"clientPersons\":[],\"externalIdentifiers\":[],\"lcidDictionary\":\"\",\"ebillinghubValidation\":\"\",\"timelinks\":{},\"openedOn\":\"\",\"_pricingAppData\":{\"isBillableExampleField\":null,\"shortDescriptionExampleField\":\"\"},\"_experienceAppData\":{\"isBillableExampleField\":null,\"shortDescriptionExampleField\":\"\"},\"_timeAppData\":{\"isBillableExampleField\":null,\"shortDescriptionExampleField\":\"\"},\"security\":{\"defaultAccess\":255,\"users\":[]}}".replace("{matterId}", matterId));
            invokeOperationRequest.setSuccessResponseCode(201);
            invokeOperationResponse = advancedExternalAPI.invokeOperation(invokeOperationRequest);            
            LOGGER.debug("invoked operation");
            invokeOperationRequest.setMethod("GET");
            invokeOperationRequest.setOperationPath("api/v1/clients/55555/matters");
            invokeOperationRequest.setEntityString(null);
            invokeOperationRequest.setSuccessResponseCode(200);
            invokeOperationResponse = advancedExternalAPI.invokeOperation(invokeOperationRequest);
            LOGGER.debug("invoked operation");
            invokeOperationRequest.setMethod("GET");
            invokeOperationRequest.setOperationPath("api/v1/clients/55555/matters/_count");
            invokeOperationRequest.setEntityString(null);
            invokeOperationRequest.setSuccessResponseCode(200);
            invokeOperationResponse = advancedExternalAPI.invokeOperation(invokeOperationRequest);
            LOGGER.debug("invoked operation");
            invokeOperationRequest.setMethod("DELETE");
            invokeOperationRequest.setOperationPath("api/v1/clients/55555/matters/0001");
            invokeOperationRequest.setEntityString(null);
            invokeOperationRequest.setSuccessResponseCode(200);
            invokeOperationResponse = advancedExternalAPI.invokeOperation(invokeOperationRequest);            
            LOGGER.debug("invoked operation");
            invokeOperationRequest.setMethod("DELETE");
            invokeOperationRequest.setOperationPath("api/v1/clients/55555");
            invokeOperationRequest.setEntityString(null);
            invokeOperationRequest.setSuccessResponseCode(200);
            invokeOperationResponse = advancedExternalAPI.invokeOperation(invokeOperationRequest);            
            LOGGER.debug("invoked operation");
            /* Use parameters to get tokens and document through methods */
            LOGGER.debug("about to generate tokens");
            GenerateTokensRequest generateTokensRequest = AdvancedRequestFactory.createGenerateTokensRequest();
            LOGGER.debug("created generateTokensRequest");
            generateTokensRequest.setClientId(clientID);
            generateTokensRequest.setClientSecret(clientSecret);
            generateTokensRequest.setTokenURL(tokenURL);
            GenerateTokensResponse generateTokensResponse = advancedExternalAPI.generateTokens(generateTokensRequest);
            LOGGER.debug("generated tokens");
            LOGGER.debug("about to get Swagger document");
            GetSwaggerDocumentRequest getSwaggerDocumentRequest = AdvancedRequestFactory.createGetSwaggerDocumentRequest();
            LOGGER.debug("created getSwaggerDocument");
            getSwaggerDocumentRequest.setAccessToken(generateTokensResponse.getAccessToken());
            getSwaggerDocumentRequest.setSwaggerAPIURL(swaggerAPIURL);
            GetSwaggerDocumentResponse getSwaggerDocumentResponse = advancedExternalAPI.getSwaggerDocument(getSwaggerDocumentRequest);
            LOGGER.debug("got Swagger document");
            if (getSwaggerDocumentResponse.getSwaggerDocument() != null) {
            	JsonObject swaggerEntityJsonObject = (JsonObject) ConverterUtils.parseStringToJson(getSwaggerDocumentResponse.getSwaggerDocument());
                String host = swaggerEntityJsonObject.get("host").getAsString();
                LOGGER.debug("host is " + host);
                String basePath = swaggerEntityJsonObject.get("basePath").getAsString();
                LOGGER.debug("basePath is " + basePath);
                String apiURL = "https://" + host + basePath;
                LOGGER.debug("apiURL is " + apiURL);
            }
        } catch (Exception e) {
            LOGGER.warn("exception executing methods: " + e.getMessage());
        }
    }

    private static void generateTokenPair() throws Exception, IOException {
        String clientID = AdvancedConfigurationManager.getConfigurationManager().getLocalConfig().getProperty(AdvancedConstant.CONFIG_CLIENT_ID);
        String clientSecret = AdvancedConfigurationManager.getConfigurationManager().getLocalConfig().getProperty(AdvancedConstant.CONFIG_CLIENT_SECRET);
        String swaggerAPIURL = AdvancedConfigurationManager.getConfigurationManager().getLocalConfig().getProperty(AdvancedConstant.CONFIG_SWAGGER_API_URL);
        String tokenURL = AdvancedConfigurationManager.getConfigurationManager().getLocalConfig().getProperty(AdvancedConstant.CONFIG_TOKEN_URL);
        CommonHTTPManager httpManager = CommonHTTPManager.refreshCommonHTTPManager();
        List parameters = new ArrayList();
        parameters.add(new BasicNameValuePair("grant_type", "client_credentials"));
        parameters.add(new BasicNameValuePair("client_id", clientID));
        parameters.add(new BasicNameValuePair("client_secret", clientSecret));
        parameters.add(new BasicNameValuePair("scope", "openid offline_access"));
        CommonHttpResponse commonHttpResponse = httpManager.doCommonHttpResponseMethod("POST", tokenURL, null, parameters, null, null);
        LOGGER.debug("got response status code " + commonHttpResponse.getResponseCode());
        String responseEntityString = commonHttpResponse.getResponseEntityString();
        LOGGER.debug("responseEntityString is " + responseEntityString);
        JsonObject responseEntityJsonObject = (JsonObject) ConverterUtils.parseStringToJson(responseEntityString);
        String accessToken = responseEntityJsonObject.get("access_token").getAsString();
        LOGGER.debug("accessToken is " + accessToken);
        AdvancedConfigurationManager.getConfigurationManager().getLocalConfig().setProperty(AdvancedConstant.ACCESS_TOKEN, accessToken);
        AdvancedConfigurationManager.getConfigurationManager().storeLocalConfigProperties();
        Header authorizationHeader = createAdvancedAuthenticationTokenHeader(accessToken);
        LOGGER.debug("created Authorization header");
        Header acceptHeader = createAcceptHeader();
        Header contentTypeHeader = createContentTypeHeader();
        Header[] headers = {acceptHeader, authorizationHeader, contentTypeHeader};
        CommonHttpResponse swaggerHttpResponse = httpManager.doCommonHttpResponseMethod("GET", swaggerAPIURL, null, parameters, null, null);
        LOGGER.debug("got response status code " + swaggerHttpResponse.getResponseCode());
        String swaggerResponseEntityString = swaggerHttpResponse.getResponseEntityString();
        LOGGER.debug("swaggerResponseEntityString is " + swaggerResponseEntityString);
        JsonObject swaggerEntityJsonObject = (JsonObject) ConverterUtils.parseStringToJson(swaggerResponseEntityString);
        String host = swaggerEntityJsonObject.get("host").getAsString();
        LOGGER.debug("host is " + host);
        String basePath = swaggerEntityJsonObject.get("basePath").getAsString();
        LOGGER.debug("basePath is " + basePath);
        AdvancedConfigurationManager.getConfigurationManager().getLocalConfig().setProperty(AdvancedConstant.API_VERSION_URL, "https://" + host + basePath);
        AdvancedConfigurationManager.getConfigurationManager().storeLocalConfigProperties();
    }

    public static Header createAcceptHeader() {
        String acceptHeader = "application/json";
        LOGGER.debug("acceptHeader is " + acceptHeader);
        return new BasicHeader("Accept", acceptHeader);
    }

    public static Header createContentTypeHeader() {
        String contentTypeHeader = "application/json";
        LOGGER.debug("contentTypeHeader is " + contentTypeHeader);
        return new BasicHeader("Content-Type", contentTypeHeader);
    }

    public static Header createAdvancedAuthenticationTokenHeader(String accessToken) {
        return new BasicHeader(AdvancedConfigurationManager.getConfigurationManager().getConfig().getProperty(AdvancedConstant.CONFIG_API_AUTHENTICATION_HEADER), accessToken);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy