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

com.amazonaws.codegen.model.config.templates.CodeGenTemplatesConfig Maven / Gradle / Ivy

/*
 * Copyright (c) 2016. Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 * http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */

package com.amazonaws.codegen.model.config.templates;

import com.amazonaws.codegen.internal.ClassLoaderHelper;
import com.amazonaws.codegen.internal.Jackson;
import com.amazonaws.codegen.model.intermediate.Protocol;

import java.io.InputStream;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

import static com.amazonaws.codegen.internal.Constants.PROTOCOL_CONFIG_LOCATION;

public class CodeGenTemplatesConfig {


    private TopLevelTemplate syncClientBuilder = new TopLevelTemplate("/templates/common/SyncClientBuilder.ftl", null);
    private TopLevelTemplate asyncClientBuilder = new TopLevelTemplate("/templates/common/AsyncClientBuilder.ftl", null);
    private TopLevelTemplate sdkFunctionClass = new TopLevelTemplate("/templates/waiter/SdkFunction.ftl", null);
    private TopLevelTemplate acceptorClass = new TopLevelTemplate("/templates/waiter/Acceptor.ftl", null);
    private TopLevelTemplate waiterClass = new TopLevelTemplate("/templates/waiter/Waiter.ftl", null);
    private TopLevelTemplate syncClient;
    private TopLevelTemplate asyncClient;
    private TopLevelTemplate syncAbstractClass;
    private TopLevelTemplate asyncAbstractClass;
    private TopLevelTemplate syncInterface;
    private TopLevelTemplate asyncInterface;
    private TopLevelTemplate requestClass;
    private TopLevelTemplate responseClass;
    private TopLevelTemplate modelClass;
    private TopLevelTemplate modelEnum;
    private TopLevelTemplate modelUnmarshaller;
    private TopLevelTemplate modelMarshaller;
    private TopLevelTemplate requestMarshaller;
    private TopLevelTemplate baseExceptionClass;
    private TopLevelTemplate exceptionClass;
    private TopLevelTemplate exceptionUnmarshaller;
    private TopLevelTemplate policyActionClass;
    private TopLevelTemplate packageInfo;
    private TopLevelTemplate customRequestSignerClass;
    private TopLevelTemplate cucumberModuleInjector = new TopLevelTemplate("/templates/cucumber/ModuleInjector.ftl", null);
    private TopLevelTemplate cucumberTest = new TopLevelTemplate("/templates/cucumber/RunCucumberTest.ftl", null);
    private TopLevelTemplate cucumberPropertiesFile = new TopLevelTemplate("/templates/cucumber/cucumberProperties.ftl", null);
    private TopLevelTemplate apiGatewayPomTemplate = new TopLevelTemplate("/templates/api-gateway/maven/pom.xml.ftl", null);
    private TopLevelTemplate apiGatewayGradleBuildTemplate = new TopLevelTemplate("/templates/api-gateway/gradle/build.gradle.ftl", null);
    private TopLevelTemplate apiGatewayGradleSettingsTemplate = new TopLevelTemplate("/templates/api-gateway/gradle/settings.gradle.ftl", null);
    private TopLevelTemplate apiGatewayReadmeTemplate =
            new TopLevelTemplate("/templates/api-gateway/README.md.ftl", Collections.singletonList(
                    new ChildTemplate("/templates/api-gateway/README_Dependencies.ftl", "README_Dependencies")));

    private List commonChildTemplates;

    public static CodeGenTemplatesConfig load(Protocol protocol) {

        final String protocolConfigFilePath = String.format(
                PROTOCOL_CONFIG_LOCATION, protocol.getValue());

        InputStream input = ClassLoaderHelper.getResourceAsStream(
                protocolConfigFilePath, CodeGenTemplatesConfig.class);
        if (input == null) {
            input = ClassLoaderHelper.getResourceAsStream("/"
                    + protocolConfigFilePath, CodeGenTemplatesConfig.class);
        }

        try {
            return Jackson.load(CodeGenTemplatesConfig.class,
                    input);
        } catch (Exception e) {
            throw new RuntimeException(
                    "Unable to load the protocol specific config file from the location "
                            + protocolConfigFilePath, e);
        }
    }

    public static CodeGenTemplatesConfig merge(CodeGenTemplatesConfig config,
                                               CodeGenTemplatesConfig override) {

        CodeGenTemplatesConfig merged = new CodeGenTemplatesConfig();

        merged.setSyncClient(TopLevelTemplate.merge(
                config.getSyncClient(), override.getSyncClient()));
        merged.setAsyncClient(TopLevelTemplate.merge(
                config.getAsyncClient(), override.getAsyncClient()));

        merged.setSyncAbstractClass(TopLevelTemplate.merge(
                config.getSyncAbstractClass(),
                override.getSyncAbstractClass()));
        merged.setAsyncAbstractClass(TopLevelTemplate.merge(
                config.getAsyncAbstractClass(),
                override.getAsyncAbstractClass()));

        merged.setSyncInterface(TopLevelTemplate.merge(
                config.getSyncInterface(), override.getSyncInterface()));
        merged.setAsyncInterface(TopLevelTemplate.merge(
                config.getAsyncInterface(), override.getAsyncInterface()));

        merged.setRequestClass(TopLevelTemplate.merge(
                config.getRequestClass(), override.getRequestClass()));
        merged.setResponseClass(TopLevelTemplate.merge(
                config.getResponseClass(), override.getResponseClass()));

        merged.setModelClass(TopLevelTemplate.merge(
                config.getModelClass(), override.getModelClass()));
        merged.setModelEnum(TopLevelTemplate.merge(config.getModelEnum(),
                override.getModelEnum()));

        merged.setModelUnmarshaller(TopLevelTemplate.merge(
                config.getModelUnmarshaller(), override.getModelUnmarshaller()));
        merged.setModelMarshaller(TopLevelTemplate.merge(
                config.getModelMarshaller(), override.getModelMarshaller()));
        merged.setRequestMarshaller(TopLevelTemplate.merge(
                config.getRequestMarshaller(), override.getRequestMarshaller()));

        merged.setBaseExceptionClass(TopLevelTemplate.merge(
                config.getBaseExceptionClass(), override.getBaseExceptionClass()));
        merged.setExceptionClass(TopLevelTemplate.merge(
                config.getExceptionClass(), override.getExceptionClass()));
        merged.setExceptionUnmarshaller(TopLevelTemplate.merge(
                config.getExceptionUnmarshaller(),
                override.getExceptionUnmarshaller()));

        merged.setPolicyActionClass(TopLevelTemplate.merge(
                config.getPolicyActionClass(),
                override.getPolicyActionClass()));

        merged.setPackageInfo(TopLevelTemplate.merge(
                config.getPackageInfo(), override.getPackageInfo()));

        merged.setCustomRequestSignerClass(TopLevelTemplate.merge(
                config.getCustomRequestSignerClass(), override.getCustomRequestSignerClass()));

        List commonChildTemplates = new LinkedList();
        if (config.getCommonChildTemplates() != null) {
            commonChildTemplates.addAll(config.getCommonChildTemplates());
        }
        if (override.getCommonChildTemplates() != null) {
            commonChildTemplates.addAll(override.getCommonChildTemplates());
        }
        merged.setCommonChildTemplates(commonChildTemplates);


        return merged;
    }

    public TopLevelTemplate getSyncClientBuilder() {
        return syncClientBuilder;
    }

    public void setSyncClientBuilder(TopLevelTemplate syncClientBuilder) {
        this.syncClientBuilder = syncClientBuilder;
    }

    public TopLevelTemplate getAsyncClientBuilder() {
        return asyncClientBuilder;
    }

    public void setAsyncClientBuilder(TopLevelTemplate syncClientBuilder) {
        this.asyncClientBuilder = syncClientBuilder;
    }

    public TopLevelTemplate getWaiterClass() {
        return waiterClass;
    }

    public void setWaiterClass(TopLevelTemplate waiterClass) {
        this.waiterClass = waiterClass;
    }

    public TopLevelTemplate getAcceptorClass() {
        return acceptorClass;
    }

    public void setAcceptorClass(TopLevelTemplate acceptorClass) {
        this.acceptorClass = acceptorClass;
    }

    public TopLevelTemplate getSdkFunctionClass() {
        return sdkFunctionClass;
    }

    public void setSdkFunctionClass(TopLevelTemplate sdkFunctionClass) {
        this.sdkFunctionClass = sdkFunctionClass;
    }

    public TopLevelTemplate getSyncClient() {
        return syncClient;
    }

    public void setSyncClient(TopLevelTemplate syncClient) {
        this.syncClient = syncClient;
    }

    public TopLevelTemplate getAsyncClient() {
        return asyncClient;
    }

    public void setAsyncClient(TopLevelTemplate asyncClient) {
        this.asyncClient = asyncClient;
    }

    public TopLevelTemplate getSyncAbstractClass() {
        return syncAbstractClass;
    }

    public void setSyncAbstractClass(TopLevelTemplate syncAbstractClass) {
        this.syncAbstractClass = syncAbstractClass;
    }

    public TopLevelTemplate getAsyncAbstractClass() {
        return asyncAbstractClass;
    }

    public void setAsyncAbstractClass(TopLevelTemplate asyncAbstractClass) {
        this.asyncAbstractClass = asyncAbstractClass;
    }

    public TopLevelTemplate getSyncInterface() {
        return syncInterface;
    }

    public void setSyncInterface(TopLevelTemplate syncInterface) {
        this.syncInterface = syncInterface;
    }

    public TopLevelTemplate getAsyncInterface() {
        return asyncInterface;
    }

    public void setAsyncInterface(TopLevelTemplate asyncInterface) {
        this.asyncInterface = asyncInterface;
    }

    public TopLevelTemplate getRequestClass() {
        return requestClass;
    }

    public void setRequestClass(TopLevelTemplate requestClass) {
        this.requestClass = requestClass;
    }

    public TopLevelTemplate getResponseClass() {
        return responseClass;
    }

    public void setResponseClass(TopLevelTemplate responseClass) {
        this.responseClass = responseClass;
    }

    public TopLevelTemplate getModelClass() {
        return modelClass;
    }

    public void setModelClass(TopLevelTemplate modelClass) {
        this.modelClass = modelClass;
    }

    public TopLevelTemplate getModelEnum() {
        return modelEnum;
    }

    public void setModelEnum(TopLevelTemplate modelEnum) {
        this.modelEnum = modelEnum;
    }

    public TopLevelTemplate getModelUnmarshaller() {
        return modelUnmarshaller;
    }

    public void setModelUnmarshaller(TopLevelTemplate modelUnmarshaller) {
        this.modelUnmarshaller = modelUnmarshaller;
    }

    public TopLevelTemplate getModelMarshaller() {
        return modelMarshaller;
    }

    public TopLevelTemplate getRequestMarshaller() {
        return requestMarshaller;
    }

    public void setModelMarshaller(TopLevelTemplate modelMarshaller) {
        this.modelMarshaller = modelMarshaller;
    }

    public void setRequestMarshaller(TopLevelTemplate requestMarshaller) {
        this.requestMarshaller = requestMarshaller;
    }

    public TopLevelTemplate getExceptionClass() {
        return exceptionClass;
    }

    public void setExceptionClass(TopLevelTemplate exceptionClass) {
        this.exceptionClass = exceptionClass;
    }

    public TopLevelTemplate getExceptionUnmarshaller() {
        return exceptionUnmarshaller;
    }

    public void setExceptionUnmarshaller(
                                         TopLevelTemplate exceptionUnmarshaller) {
        this.exceptionUnmarshaller = exceptionUnmarshaller;
    }

    public List getCommonChildTemplates() {
        return commonChildTemplates;
    }

    public void setCommonChildTemplates(
                                        List commonChildTemplates) {
        this.commonChildTemplates = commonChildTemplates;
    }

    public TopLevelTemplate getPolicyActionClass() {
        return policyActionClass;
    }

    public void setPolicyActionClass(TopLevelTemplate policyActionClass) {
        this.policyActionClass = policyActionClass;
    }

    public TopLevelTemplate getPackageInfo() {
        return packageInfo;
    }

    public void setPackageInfo(TopLevelTemplate packageInfo) {
        this.packageInfo = packageInfo;
    }

    public TopLevelTemplate getBaseExceptionClass() {
        return baseExceptionClass;
    }

    public void setBaseExceptionClass(TopLevelTemplate baseExceptionClass) {
        this.baseExceptionClass = baseExceptionClass;
    }

    public TopLevelTemplate getCucumberModuleInjector() {
        return cucumberModuleInjector;
    }

    public TopLevelTemplate getCucumberTest() {
        return cucumberTest;
    }

    public TopLevelTemplate getCucumberPropertiesFile() {
        return cucumberPropertiesFile;
    }

    public TopLevelTemplate getCustomRequestSignerClass() {
        return customRequestSignerClass;
    }

    public void setCustomRequestSignerClass(TopLevelTemplate customRequestSignerClass) {
        this.customRequestSignerClass = customRequestSignerClass;
    }

    public TopLevelTemplate getApiGatewayPomTemplate() {
        return apiGatewayPomTemplate;
    }

    public TopLevelTemplate getApiGatewayGradleBuildTemplate() {
        return apiGatewayGradleBuildTemplate;
    }

    public TopLevelTemplate getApiGatewayGradleSettingsTemplate() {
        return apiGatewayGradleSettingsTemplate;
    }

    public TopLevelTemplate getApiGatewayReadmeTemplate() {
        return apiGatewayReadmeTemplate;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy