io.swagger.codegen.languages.JavaPKMSTServerCodegen Maven / Gradle / Ivy
package io.swagger.codegen.languages;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.swagger.codegen.CliOption;
import io.swagger.codegen.CodegenConstants;
import io.swagger.codegen.CodegenModel;
import io.swagger.codegen.CodegenOperation;
import io.swagger.codegen.CodegenParameter;
import io.swagger.codegen.CodegenProperty;
import io.swagger.codegen.CodegenResponse;
import io.swagger.codegen.CodegenType;
import io.swagger.codegen.SupportingFile;
import io.swagger.models.Operation;
import io.swagger.models.Path;
import io.swagger.models.Swagger;
import io.swagger.models.Tag;
import io.swagger.models.parameters.FormParameter;
import io.swagger.models.parameters.Parameter;
/**
* Created by prokarma on 04/09/17.
*/
public class JavaPKMSTServerCodegen extends AbstractJavaCodegen {
public static final String FULL_JAVA_UTIL = "fullJavaUtil";
public static final String SUPPORT_JAVA6 = "supportJava6";
public static final String CONFIG_PACKAGE = "configPackage";
public static final String BASE_PACKAGE = "basePackage";
public static final String TITLE = "title";
public static final String WITH_XML = "withXml";
public static final String EUREKA_URI = "eurekaUri";
public static final String ZIPKIN_URI = "zipkinUri";
public static final String SPRINGADMIN_URI = "springBootAdminUri";
protected String projectFolder;
protected String projectTestFolder;
protected String sourceFolder;
protected String testFolder;
protected String basePackage = "com.prokarma.pkmst";
protected String serviceName = "Pkmst";
protected String configPackage = "com.prokarma.pkmst.config";
protected boolean implicitHeaders = false;
protected boolean serializeBigDecimalAsString = false;
protected boolean withXml = false;
protected boolean fullJavaUtil;
protected String javaUtilPrefix = "";
protected Boolean serializableModel = false;
protected String invokerPackage;
protected String title;
protected String eurekaUri;
protected String zipkinUri;
protected String springBootAdminUri;
public JavaPKMSTServerCodegen() {
super();
this.projectFolder = "src" + File.separator + "main";
this.projectTestFolder = "src" + File.separator + "test";
this.sourceFolder = this.projectFolder + File.separator + "java";
this.testFolder = this.projectTestFolder + File.separator + "java";
groupId = "com.prokarma";
artifactId = "pkmst-microservice";
artifactVersion = "1.0.0";
embeddedTemplateDir = templateDir = "java-pkmst";
apiPackage = "com.prokarma.pkmst.controller";
modelPackage = "com.prokarma.pkmst.model";
invokerPackage = "com.prokarma.pkmst.controller";
additionalProperties.put("jackson", "true");
this.cliOptions.add(new CliOption("groupId", "groupId in generated pom.xml"));
this.cliOptions.add(new CliOption("artifactId", "artifactId in generated pom.xml"));
this.cliOptions.add(new CliOption("artifactVersion", "artifact version in generated pom.xml"));
this.cliOptions.add(new CliOption("basePackage", "base package for java source code"));
this.cliOptions.add(new CliOption("serviceName", "Service Name"));
this.cliOptions.add(new CliOption(TITLE, "server title name or client service name"));
this.cliOptions.add(new CliOption("eurekaUri", "Eureka URI"));
this.cliOptions.add(new CliOption("zipkinUri", "Zipkin URI"));
this.cliOptions.add(new CliOption("springBootAdminUri", "Spring-Boot URI"));
// Middleware config
this.cliOptions.add(new CliOption("pkmstInterceptor", "PKMST Interceptor"));
this.apiTestTemplateFiles.put("api_test.mustache", ".java");
if (".md".equals(this.modelDocTemplateFiles.get("model_doc.mustache"))) {
this.modelDocTemplateFiles.remove("model_doc.mustache");
}
if (".md".equals(this.apiDocTemplateFiles.get("api_doc.mustache"))) {
this.apiDocTemplateFiles.remove("api_doc.mustache");
}
}
private static String getAccept(Operation operation) {
String accepts = null;
String defaultContentType = "application/json";
if (operation.getProduces() != null && !operation.getProduces().isEmpty()) {
StringBuilder sb = new StringBuilder();
for (String produces : operation.getProduces()) {
if (defaultContentType.equalsIgnoreCase(produces)) {
accepts = defaultContentType;
break;
} else {
if (sb.length() > 0) {
sb.append(",");
}
sb.append(produces);
}
}
if (accepts == null) {
accepts = sb.toString();
}
} else {
accepts = defaultContentType;
}
return accepts;
}
public CodegenType getTag() {
return CodegenType.SERVER;
}
public String getName() {
return "java-pkmst";
}
public String getHelp() {
return "Generates a PKMST SpringBoot Server application using the SpringFox integration."
+ " Also enables EurekaServerClient / Zipkin / Spring-Boot admin";
}
public void processOpts() {
super.processOpts();
if (this.additionalProperties.containsKey("basePackage")) {
this.setBasePackage((String) this.additionalProperties.get("basePackage"));
this.setInvokerPackage(this.getBasePackage());
this.apiPackage = this.getBasePackage() + ".controller";
this.modelPackage = this.getBasePackage() + ".model";
this.setConfigPackage(this.getBasePackage() + ".config");
} else {
this.additionalProperties.put(BASE_PACKAGE, basePackage);
this.additionalProperties.put(CONFIG_PACKAGE, this.getConfigPackage());
this.additionalProperties.put(CodegenConstants.API_PACKAGE, apiPackage);
this.additionalProperties.put(CodegenConstants.MODEL_PACKAGE, modelPackage);
this.additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, invokerPackage);
}
if (this.additionalProperties.containsKey("groupId")) {
this.setGroupId((String) this.additionalProperties.get("groupId"));
} else {
// not set, use to be passed to template
additionalProperties.put(CodegenConstants.GROUP_ID, groupId);
}
if (this.additionalProperties.containsKey("artifactId")) {
this.setArtifactId((String) this.additionalProperties.get("artifactId"));
} else {
// not set, use to be passed to template
additionalProperties.put(CodegenConstants.ARTIFACT_ID, artifactId);
}
if (this.additionalProperties.containsKey("artifactVersion")) {
this.setArtifactVersion((String) this.additionalProperties.get("artifactVersion"));
} else {
// not set, use to be passed to template
additionalProperties.put(CodegenConstants.ARTIFACT_VERSION, artifactVersion);
}
if (this.additionalProperties.containsKey("serviceName")) {
this.setServiceName((String) this.additionalProperties.get("serviceName"));
} else {
// not set, use to be passed to template
additionalProperties.put("serviceName", serviceName);
}
if (this.additionalProperties.containsKey(CodegenConstants.SERIALIZE_BIG_DECIMAL_AS_STRING)) {
this.setSerializeBigDecimalAsString(Boolean.valueOf(
this.additionalProperties.get(CodegenConstants.SERIALIZE_BIG_DECIMAL_AS_STRING).toString()));
}
if (this.additionalProperties.containsKey(CodegenConstants.SERIALIZABLE_MODEL)) {
this.setSerializableModel(
Boolean.valueOf(this.additionalProperties.get(CodegenConstants.SERIALIZABLE_MODEL).toString()));
}
if (this.additionalProperties.containsKey(TITLE)) {
this.setTitle((String) this.additionalProperties.get(TITLE));
}
this.additionalProperties.put(CodegenConstants.SERIALIZABLE_MODEL, serializableModel);
if (this.additionalProperties.containsKey(FULL_JAVA_UTIL)) {
this.setFullJavaUtil(Boolean.valueOf(this.additionalProperties.get(FULL_JAVA_UTIL).toString()));
}
if (this.additionalProperties.containsKey(EUREKA_URI)) {
this.setEurekaUri((String) this.additionalProperties.get(EUREKA_URI));
}
if (this.additionalProperties.containsKey(ZIPKIN_URI)) {
this.setZipkinUri((String) this.additionalProperties.get(ZIPKIN_URI));
}
if (this.additionalProperties.containsKey(SPRINGADMIN_URI)) {
this.setSpringBootAdminUri((String) this.additionalProperties.get(SPRINGADMIN_URI));
}
if (fullJavaUtil) {
javaUtilPrefix = "java.util.";
}
this.additionalProperties.put(FULL_JAVA_UTIL, fullJavaUtil);
this.additionalProperties.put("javaUtilPrefix", javaUtilPrefix);
this.additionalProperties.put(SUPPORT_JAVA6, false);
this.additionalProperties.put("java8", true);
if (this.additionalProperties.containsKey(WITH_XML)) {
this.setWithXml(Boolean.valueOf(additionalProperties.get(WITH_XML).toString()));
}
this.additionalProperties.put(WITH_XML, withXml);
this.apiTemplateFiles.put("api.mustache", ".java");
this.apiTemplateFiles.put("apiController.mustache", "Controller.java");
this.modelTemplateFiles.put("model.mustache", ".java");
this.supportingFiles.add(new SupportingFile("SpringBootApplication.mustache",
(this.getSourceFolder() + File.separator + this.getBasePackage()).replace(".", File.separator),
this.getServiceName() + "Application" + ".java"));
this.supportingFiles
.add(new SupportingFile("config" + File.separator + "swaggerDocumentationConfig.mustache",
(this.sourceFolder + File.separator + this.getConfigPackage()).replace(".",
java.io.File.separator) + File.separator + "swagger",
"SwaggerDocumentationConfig.java"));
this.supportingFiles.add(new SupportingFile("config" + File.separator + "pkmstproperties.mustache",
(this.sourceFolder + File.separator + this.getConfigPackage()).replace(".", java.io.File.separator)
+ File.separator + "swagger",
"PkmstProperties.java"));
this.supportingFiles.add(new SupportingFile("config" + File.separator + "appconfig.mustache",
(this.sourceFolder + File.separator + this.getConfigPackage()).replace(".", java.io.File.separator)
+ File.separator,
"AppConfig.java"));
// Security
this.supportingFiles
.add(new SupportingFile("security" + File.separator + "authorizationServerConfiguration.mustache",
(this.sourceFolder + File.separator + this.basePackage).replace(".", File.separator)
+ File.separator + "security",
"AuthorizationServerConfiguration.java"));
this.supportingFiles
.add(new SupportingFile("security" + File.separator + "oAuth2SecurityConfiguration.mustache",
(this.sourceFolder + File.separator + this.basePackage).replace(".", File.separator)
+ File.separator + "security",
"OAuth2SecurityConfiguration.java"));
this.supportingFiles
.add(new SupportingFile("security" + File.separator + "resourceServerConfiguration.mustache",
(this.sourceFolder + File.separator + this.basePackage).replace(".", File.separator)
+ File.separator + "security",
"ResourceServerConfiguration.java"));
// logging
this.supportingFiles.add(new SupportingFile("logging" + File.separator + "httpLoggingFilter.mustache",
(this.sourceFolder + File.separator + this.basePackage).replace(".", File.separator) + File.separator
+ "logging",
"HttpLoggingFilter.java"));
// Resources
this.supportingFiles.add(new SupportingFile("resources" + File.separator + "application-local.mustache",
("src.main.resources").replace(".", java.io.File.separator), "application-local.yml"));
this.supportingFiles.add(new SupportingFile("resources" + File.separator + "application-dev.mustache",
("src.main.resources").replace(".", java.io.File.separator), "application-dev.yml"));
this.supportingFiles.add(new SupportingFile("resources" + File.separator + "application-dev-config.mustache",
("src.main.resources").replace(".", java.io.File.separator), "application-dev-config.yml"));
this.supportingFiles.add(new SupportingFile("resources" + File.separator + "bootstrap.mustache",
("src.main.resources").replace(".", java.io.File.separator), "bootstrap.yml"));
// POM
this.supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml"));
// Readme
this.supportingFiles.add(new SupportingFile("readme.mustache", "", "Readme.md"));
// manifest
this.supportingFiles.add(new SupportingFile("manifest.mustache", "", "manifest.yml"));
// docker
this.supportingFiles.add(new SupportingFile("docker.mustache", "", "Dockerfile"));
// logstash
this.supportingFiles.add(new SupportingFile("logstash.mustache", "", "logstash.conf"));
// Cucumber
this.supportingFiles.add(new SupportingFile("cucumber" + File.separator + "executeReport.mustache",
this.testFolder + File.separator + this.basePackage.replace(".", File.separator) + File.separator
+ "cucumber" + File.separator + "report",
"ExecuteReport.java"));
this.supportingFiles.add(new SupportingFile(
"cucumber" + File.separator + "cucumberTest.mustache", this.testFolder + File.separator
+ this.basePackage.replace(".", File.separator) + File.separator + "cucumber",
serviceName + "Test.java"));
this.supportingFiles.add(new SupportingFile(
"cucumber" + File.separator + "cucumberSteps.mustache", this.testFolder + File.separator
+ this.basePackage.replace(".", File.separator) + File.separator + "cucumber",
serviceName + "Steps.java"));
this.supportingFiles.add(new SupportingFile(
"cucumber" + File.separator + "package.mustache", this.testFolder + File.separator
+ this.basePackage.replace(".", File.separator) + File.separator + "cucumber",
serviceName + "package-info.java"));
// test resources
this.supportingFiles.add(new SupportingFile("cucumber" + File.separator + "cucumber.mustache",
(("src.test.resources") + File.separator + this.basePackage).replace(".", File.separator)
+ File.separator + "cucumber",
serviceName + ".feature"));
this.supportingFiles.add(new SupportingFile("testresources" + File.separator + "bootstrap.mustache",
("src.test.resources").replace(".", java.io.File.separator), "bootstrap.yml"));
this.supportingFiles.add(new SupportingFile("testresources" + File.separator + "application.mustache",
("src.test.resources").replace(".", java.io.File.separator), "application.properties"));
this.supportingFiles.add(new SupportingFile("testresources" + File.separator + "application-test.mustache",
("src.test.resources").replace(".", java.io.File.separator), "application-test.properties"));
// Gatling
this.supportingFiles.add(new SupportingFile("gatling" + File.separator + "gatling.mustache",
("src.test.resources").replace(".", java.io.File.separator), "gatling.conf"));
this.supportingFiles.add(new SupportingFile("gatling" + File.separator + "application.mustache",
("src.test.resources").replace(".", java.io.File.separator), "application.conf"));
this.supportingFiles.add(new SupportingFile(
"gatling" + File.separator + "testapi.mustache", ("src") + File.separator + ("test") + File.separator
+ ("scala") + File.separator + ("scalaFiles").replace(".", java.io.File.separator),
"testapi.scala"));
// adding class for integration test
this.supportingFiles.add(new SupportingFile(
"integration" + File.separator + "integrationtest.mustache", this.testFolder + File.separator
+ this.basePackage.replace(".", File.separator) + File.separator + "controller",
serviceName + "IT.java"));
}
@SuppressWarnings("unchecked")
@Override
public Map postProcessOperations(Map objs) {
Map operations = (Map) objs.get("operations");
if (operations != null) {
List ops = (List) operations.get("operation");
for (final CodegenOperation operation : ops) {
List responses = operation.responses;
if (responses != null) {
for (final CodegenResponse resp : responses) {
if ("0".equals(resp.code)) {
resp.code = "200";
}
doDataTypeAssignment(resp.dataType, new DataTypeAssigner() {
public void setReturnType(final String returnType) {
resp.dataType = returnType;
}
public void setReturnContainer(final String returnContainer) {
resp.containerType = returnContainer;
}
});
}
}
doDataTypeAssignment(operation.returnType, new DataTypeAssigner() {
public void setReturnType(final String returnType) {
operation.returnType = returnType;
}
public void setReturnContainer(final String returnContainer) {
operation.returnContainer = returnContainer;
}
});
if (implicitHeaders) {
removeHeadersFromAllParams(operation.allParams);
}
}
}
return objs;
}
/**
* This method removes header parameters from the list of parameters and
* also corrects last allParams hasMore state.
*
* @param allParams
* list of all parameters
*/
private void removeHeadersFromAllParams(List allParams) {
if (allParams.isEmpty()) {
return;
}
final ArrayList copy = new ArrayList<>(allParams);
allParams.clear();
for (CodegenParameter p : copy) {
if (!p.isHeaderParam) {
allParams.add(p);
}
}
allParams.get(allParams.size() - 1).hasMore = false;
}
/**
* @param returnType
* The return type that needs to be converted
* @param dataTypeAssigner
* An object that will assign the data to the respective fields
* in the model.
*/
private void doDataTypeAssignment(String returnType, DataTypeAssigner dataTypeAssigner) {
final String rt = returnType;
if (rt == null) {
dataTypeAssigner.setReturnType("Void");
} else if (rt.startsWith("List")) {
int end = rt.lastIndexOf(">");
if (end > 0) {
dataTypeAssigner.setReturnType(rt.substring("List<".length(), end).trim());
dataTypeAssigner.setReturnContainer("List");
}
} else if (rt.startsWith("Map")) {
int end = rt.lastIndexOf(">");
if (end > 0) {
dataTypeAssigner.setReturnType(rt.substring("Map<".length(), end).split(",")[1].trim());
dataTypeAssigner.setReturnContainer("Map");
}
} else if (rt.startsWith("Set")) {
int end = rt.lastIndexOf(">");
if (end > 0) {
dataTypeAssigner.setReturnType(rt.substring("Set<".length(), end).trim());
dataTypeAssigner.setReturnContainer("Set");
}
}
}
@Override
public void postProcessModelProperty(CodegenModel model, CodegenProperty property) {
super.postProcessModelProperty(model, property);
if ("null".equals(property.example)) {
property.example = null;
}
// Add imports for Jackson
if (!Boolean.TRUE.equals(model.isEnum)) {
model.imports.add("JsonProperty");
if (Boolean.TRUE.equals(model.hasEnums)) {
model.imports.add("JsonValue");
}
} else { // enum class
// Needed imports for Jackson's JsonCreator
if (this.additionalProperties.containsKey("jackson")) {
model.imports.add("JsonCreator");
}
}
}
@SuppressWarnings("unchecked")
@Override
public Map postProcessModelsEnum(Map objs) {
objs = super.postProcessModelsEnum(objs);
// Add imports for Jackson
List
© 2015 - 2024 Weber Informatics LLC | Privacy Policy