forked from loafle/openapi-generator-original
first draft of CodegenConfigurator
This commit is contained in:
@@ -0,0 +1,340 @@
|
||||
package io.swagger.codegen.config;
|
||||
|
||||
import io.swagger.codegen.ClientOptInput;
|
||||
import io.swagger.codegen.ClientOpts;
|
||||
import io.swagger.codegen.CodegenConfig;
|
||||
import io.swagger.codegen.CodegenConfigLoader;
|
||||
import io.swagger.codegen.CodegenConstants;
|
||||
import io.swagger.models.Swagger;
|
||||
import io.swagger.parser.SwaggerParser;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.isNotEmpty;
|
||||
|
||||
/**
|
||||
* A class that contains all configuration properties you would want to manipulate.
|
||||
* An instance could be created by deserializing a JSON file or being populated from CLI or Maven plugin parameters.
|
||||
* It also has a convenience method for creating a ClientOptInput class which is THE object DefaultGenerator.java needs
|
||||
* to generate code.
|
||||
*/
|
||||
public class CodegenConfigurator {
|
||||
|
||||
public static final Logger LOG = LoggerFactory.getLogger(CodegenConfigurator.class);
|
||||
|
||||
//required config values
|
||||
private final String lang;
|
||||
private final String inputSpec;
|
||||
|
||||
private String outputDir;
|
||||
private boolean verbose = false;
|
||||
private boolean skipOverwrite;
|
||||
private String templateDir;
|
||||
private String auth;
|
||||
private String apiPackage;
|
||||
private String modelPackage;
|
||||
private String invokerPackage;
|
||||
private String groupId;
|
||||
private String artifactId;
|
||||
private String artifactVersion;
|
||||
private Map<String, String> systemProperties = new HashMap<String, String>();
|
||||
private Map<String, String> instantiationTypes = new HashMap<String, String>();
|
||||
private Map<String, String> typeMappings = new HashMap<String, String>();
|
||||
private Map<String, String> additionalProperties = new HashMap<String, String>();
|
||||
private Map<String, String> importMappings = new HashMap<String, String>();
|
||||
private Set<String> languageSpecificPrimitives = new HashSet<String>();
|
||||
|
||||
public CodegenConfigurator(String lang, String inputSpec) {
|
||||
|
||||
Validate.notEmpty(lang, "language must be specified");
|
||||
Validate.notEmpty(lang, "input spec must be specified");
|
||||
|
||||
this.lang = lang;
|
||||
this.inputSpec = inputSpec;
|
||||
|
||||
this.setOutputDir(".");
|
||||
}
|
||||
|
||||
public String getInputSpec() {
|
||||
return inputSpec;
|
||||
}
|
||||
|
||||
public String getOutputDir() {
|
||||
return outputDir;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setOutputDir(String outputDir) {
|
||||
this.outputDir = toAbsolutePathStr(outputDir);
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getModelPackage() {
|
||||
return modelPackage;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setModelPackage(String modelPackage) {
|
||||
this.modelPackage = modelPackage;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isVerbose() {
|
||||
return verbose;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setVerbose(boolean verbose) {
|
||||
this.verbose = verbose;
|
||||
return this;
|
||||
}
|
||||
|
||||
public boolean isSkipOverwrite() {
|
||||
return skipOverwrite;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setSkipOverwrite(boolean skipOverwrite) {
|
||||
this.skipOverwrite = skipOverwrite;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getLang() {
|
||||
return lang;
|
||||
}
|
||||
|
||||
public String getTemplateDir() {
|
||||
return templateDir;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setTemplateDir(String templateDir) {
|
||||
this.templateDir = new File(templateDir).getAbsolutePath();
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getAuth() {
|
||||
return auth;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setAuth(String auth) {
|
||||
this.auth = auth;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getApiPackage() {
|
||||
return apiPackage;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setApiPackage(String apiPackage) {
|
||||
this.apiPackage = apiPackage;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getInvokerPackage() {
|
||||
return invokerPackage;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setInvokerPackage(String invokerPackage) {
|
||||
this.invokerPackage = invokerPackage;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getGroupId() {
|
||||
return groupId;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setGroupId(String groupId) {
|
||||
this.groupId = groupId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getArtifactId() {
|
||||
return artifactId;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setArtifactId(String artifactId) {
|
||||
this.artifactId = artifactId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public String getArtifactVersion() {
|
||||
return artifactVersion;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setArtifactVersion(String artifactVersion) {
|
||||
this.artifactVersion = artifactVersion;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Map<String, String> getSystemProperties() {
|
||||
return systemProperties;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setSystemProperties(Map<String, String> systemProperties) {
|
||||
this.systemProperties = systemProperties;
|
||||
return this;
|
||||
}
|
||||
|
||||
public CodegenConfigurator addSystemProperty(String key, String value) {
|
||||
this.systemProperties.put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Map<String, String> getInstantiationTypes() {
|
||||
return instantiationTypes;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setInstantiationTypes(Map<String, String> instantiationTypes) {
|
||||
this.instantiationTypes = instantiationTypes;
|
||||
return this;
|
||||
}
|
||||
|
||||
public CodegenConfigurator addInstantiationType(String key, String value) {
|
||||
this.instantiationTypes.put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Map<String, String> getTypeMappings() {
|
||||
return typeMappings;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setTypeMappings(Map<String, String> typeMappings) {
|
||||
this.typeMappings = typeMappings;
|
||||
return this;
|
||||
}
|
||||
|
||||
public CodegenConfigurator addTypeMapping(String key, String value) {
|
||||
this.typeMappings.put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Map<String, String> getAdditionalProperties() {
|
||||
return additionalProperties;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setAdditionalProperties(Map<String, String> additionalProperties) {
|
||||
this.additionalProperties = additionalProperties;
|
||||
return this;
|
||||
}
|
||||
|
||||
public CodegenConfigurator addAdditionalProperty(String key, String value) {
|
||||
this.additionalProperties.put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Map<String, String> getImportMappings() {
|
||||
return importMappings;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setImportMappings(Map<String, String> importMappings) {
|
||||
this.importMappings = importMappings;
|
||||
return this;
|
||||
}
|
||||
|
||||
public CodegenConfigurator addImportMapping(String key, String value) {
|
||||
this.importMappings.put(key, value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public Set<String> getLanguageSpecificPrimitives() {
|
||||
return languageSpecificPrimitives;
|
||||
}
|
||||
|
||||
public CodegenConfigurator setLanguageSpecificPrimitives(Set<String> languageSpecificPrimitives) {
|
||||
this.languageSpecificPrimitives = languageSpecificPrimitives;
|
||||
return this;
|
||||
}
|
||||
|
||||
public CodegenConfigurator addLanguageSpecificPrimitive(String value) {
|
||||
this.languageSpecificPrimitives.add(value);
|
||||
return this;
|
||||
}
|
||||
|
||||
public ClientOptInput toClientOptInput() {
|
||||
setVerboseFlags();
|
||||
setSystemProperties();
|
||||
|
||||
CodegenConfig config = CodegenConfigLoader.forName(lang);
|
||||
|
||||
config.setOutputDir(outputDir);
|
||||
config.setSkipOverwrite(skipOverwrite);
|
||||
|
||||
config.instantiationTypes().putAll(instantiationTypes);
|
||||
config.typeMapping().putAll(typeMappings);
|
||||
config.importMapping().putAll(importMappings);
|
||||
config.languageSpecificPrimitives().addAll(languageSpecificPrimitives);
|
||||
|
||||
checkAndSetAdditionalProperty(apiPackage, CodegenConstants.API_PACKAGE);
|
||||
checkAndSetAdditionalProperty(modelPackage, CodegenConstants.MODEL_PACKAGE);
|
||||
checkAndSetAdditionalProperty(invokerPackage, CodegenConstants.INVOKER_PACKAGE);
|
||||
checkAndSetAdditionalProperty(groupId, CodegenConstants.GROUP_ID);
|
||||
checkAndSetAdditionalProperty(artifactId, CodegenConstants.ARTIFACT_ID);
|
||||
checkAndSetAdditionalProperty(artifactVersion, CodegenConstants.ARTIFACT_VERSION);
|
||||
checkAndSetAdditionalProperty(templateDir, toAbsolutePathStr(templateDir), CodegenConstants.TEMPLATE_DIR);
|
||||
|
||||
final String library = additionalProperties.remove(CodegenConstants.LIBRARY);
|
||||
if (isNotEmpty(library)) {
|
||||
config.setLibrary(library);
|
||||
}
|
||||
|
||||
config.additionalProperties().putAll(additionalProperties);
|
||||
|
||||
ClientOptInput input = new ClientOptInput()
|
||||
.config(config)
|
||||
.auth(auth);
|
||||
|
||||
Swagger swagger = new SwaggerParser().read(inputSpec, input.getAuthorizationValues(), true);
|
||||
|
||||
input.opts(new ClientOpts())
|
||||
.swagger(swagger);
|
||||
|
||||
return input;
|
||||
|
||||
}
|
||||
|
||||
private void setVerboseFlags() {
|
||||
if (!verbose) {
|
||||
return;
|
||||
}
|
||||
LOG.info("\nVERBOSE MODE: ON. Additional debug options are injected" +
|
||||
"\n - [debugSwagger] prints the swagger specification as interpreted by the codegen" +
|
||||
"\n - [debugModels] prints models passed to the template engine" +
|
||||
"\n - [debugOperations] prints operations passed to the template engine" +
|
||||
"\n - [debugSupportingFiles] prints additional data passed to the template engine");
|
||||
|
||||
System.setProperty("debugSwagger", "");
|
||||
System.setProperty("debugModels", "");
|
||||
System.setProperty("debugOperations", "");
|
||||
System.setProperty("debugSupportingFiles", "");
|
||||
}
|
||||
|
||||
private void setSystemProperties() {
|
||||
for (Map.Entry<String, String> entry : systemProperties.entrySet()) {
|
||||
System.setProperty(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
private static String toAbsolutePathStr(String path) {
|
||||
if (isNotEmpty(path)) {
|
||||
return Paths.get(path).toAbsolutePath().toString();
|
||||
}
|
||||
|
||||
return path;
|
||||
|
||||
}
|
||||
|
||||
private void checkAndSetAdditionalProperty(String property, String propertyKey) {
|
||||
checkAndSetAdditionalProperty(property, property, propertyKey);
|
||||
}
|
||||
|
||||
private void checkAndSetAdditionalProperty(String property, String valueToSet, String propertyKey) {
|
||||
if (isNotEmpty(property)) {
|
||||
additionalProperties.put(propertyKey, valueToSet);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user