/*
* 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<ChildTemplate> 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<ChildTemplate> commonChildTemplates = new LinkedList<ChildTemplate>();
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<ChildTemplate> getCommonChildTemplates() {
return commonChildTemplates;
}
public void setCommonChildTemplates(
List<ChildTemplate> 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;
}
}