Skip to content

Commit

Permalink
Merge pull request #520 from swagger-api/resolved-spec-not-flatten
Browse files Browse the repository at this point in the history
[openapi, openapi-yaml] - option not to flatten resolved spec, refactor
  • Loading branch information
frantuma authored Oct 30, 2019
2 parents ed4cf61 + 77b597f commit 5544880
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ public abstract class DefaultCodegenConfig implements CodegenConfig {
public static final String DEFAULT_TEMPLATE_DIR = "handlebars";

protected OpenAPI openAPI;
protected OpenAPI unflattenedOpenAPI;
protected String inputSpec;
protected String inputURL;
protected String outputFolder = StringUtils.EMPTY;
Expand Down Expand Up @@ -236,7 +237,7 @@ public void processOpts() {
// not set in additionalProperties, add value from CodegenConfig in order to use it in templates
additionalProperties.put(CodegenConstants.HIDE_GENERATION_TIMESTAMP, hideGenerationTimestamp);
}

if (additionalProperties.containsKey(CodegenConstants.USE_OAS2)) {
this.setUseOas2(Boolean.valueOf(additionalProperties.get(CodegenConstants.USE_OAS2).toString()));
}
Expand Down Expand Up @@ -3852,7 +3853,7 @@ public String getIgnoreFilePathOverride() {
public void setIgnoreFilePathOverride(final String ignoreFileOverride) {
this.ignoreFilePathOverride = ignoreFileOverride;
}

public void setUseOas2(boolean useOas2) {
this.useOas2 = useOas2;
}
Expand Down Expand Up @@ -4222,4 +4223,14 @@ private void addParemeters(CodegenContent codegenContent, List<CodegenParameter>
protected void setParameterNullable(CodegenParameter parameter, CodegenProperty property) {
parameter.nullable = property.nullable;
}

//@Override TODO temporarily commented to overcome cross building issue
public boolean needsUnflattenedSpec() {
return false;
}

//@Override TODO temporarily commented to overcome cross building issue
public void setUnflattenedOpenAPI(OpenAPI unflattenedOpenAPI) {
this.unflattenedOpenAPI = unflattenedOpenAPI;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.swagger.codegen.v3.generators.openapi;

import io.swagger.codegen.v3.CliOption;
import io.swagger.codegen.v3.CodegenConstants;
import io.swagger.codegen.v3.CodegenType;
import io.swagger.codegen.v3.SupportingFile;
import io.swagger.codegen.v3.generators.DefaultCodegenConfig;
Expand All @@ -20,21 +19,34 @@ public class OpenAPIGenerator extends DefaultCodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(OpenAPIGenerator.class);

public static final String OUTPUT_NAME = "outputFile";
public static final String FLATTEN_SPEC = "flattenSpec";

public static final String OPENAPI_FILENAME_DEFAULT_JSON = "openapi.json";

protected String outputFile = OPENAPI_FILENAME_DEFAULT_JSON;
private String outputFile = OPENAPI_FILENAME_DEFAULT_JSON;

protected boolean flattenSpec = true;

public OpenAPIGenerator() {
super();
outputFolder = "generated-code/openapi";

cliOptions.add(new CliOption(OUTPUT_NAME,
"output filename")
.defaultValue(OPENAPI_FILENAME_DEFAULT_JSON));
.defaultValue(getOutputFile()));

cliOptions.add(new CliOption(FLATTEN_SPEC,
"flatten the spec by moving all inline complex schema to components, and add a ref in element",
"boolean")
.defaultValue(Boolean.TRUE.toString()));

supportingFiles.add(new SupportingFile("README.md", "", "README.md"));
}

protected String getOutputFile() {
return outputFile;
}

@Override
public CodegenType getTag() {
return CodegenType.DOCUMENTATION;
Expand All @@ -53,7 +65,12 @@ public String getHelp() {
@Override
public void preprocessOpenAPI(OpenAPI openAPI) {
super.preprocessOpenAPI(openAPI);
String outputString = Json.pretty(openAPI);
final String outputString;
if (flattenSpec) {
outputString = Json.pretty(openAPI);
} else {
outputString = Json.pretty(this.unflattenedOpenAPI);
}

try {
String outputFile = outputFolder + File.separator + this.outputFile;
Expand All @@ -73,6 +90,16 @@ public void processOpts() {
if (additionalProperties.containsKey(OUTPUT_NAME) && !StringUtils.isBlank((String) additionalProperties.get(OUTPUT_NAME))) {
setOutputFile((String) additionalProperties.get(OUTPUT_NAME));
}

if (additionalProperties
.containsKey(FLATTEN_SPEC) &&
(
!(additionalProperties.get(FLATTEN_SPEC) instanceof String) ||
!StringUtils.isBlank((String) additionalProperties.get(FLATTEN_SPEC))
)
) {
this.flattenSpec = Boolean.valueOf(additionalProperties.get(FLATTEN_SPEC).toString());
}
}

public void setOutputFile(String outputFile) {
Expand Down Expand Up @@ -105,4 +132,9 @@ public String escapeUnsafeCharacters(String input) {
protected void setTemplateEngine() {
templateEngine = new HandlebarTemplateEngine(this);
}

@Override
public boolean needsUnflattenedSpec() {
return true;
}
}
Original file line number Diff line number Diff line change
@@ -1,43 +1,19 @@
package io.swagger.codegen.v3.generators.openapi;

import io.swagger.codegen.v3.CliOption;
import io.swagger.codegen.v3.CodegenType;
import io.swagger.codegen.v3.SupportingFile;
import io.swagger.codegen.v3.generators.DefaultCodegenConfig;
import io.swagger.v3.core.util.Yaml;
import io.swagger.v3.oas.models.OpenAPI;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;

public class OpenAPIYamlGenerator extends DefaultCodegenConfig {
public class OpenAPIYamlGenerator extends OpenAPIGenerator {
private static final Logger LOGGER = LoggerFactory.getLogger(OpenAPIYamlGenerator.class);

public static final String OUTPUT_NAME = "outputFile";
public static final String OPENAPI_FILENAME_DEFAULT_YAML = "openapi.yaml";

public static final String SWAGGER_FILENAME_DEFAULT_YAML = "openapi.yaml";

protected String outputFile = SWAGGER_FILENAME_DEFAULT_YAML;


public OpenAPIYamlGenerator() {
super();
outputFolder = "generated-code/openapi";

cliOptions.add(new CliOption(OUTPUT_NAME,
"output filename")
.defaultValue(SWAGGER_FILENAME_DEFAULT_YAML));

supportingFiles.add(new SupportingFile("README.md", "", "README.md"));
}

@Override
public CodegenType getTag() {
return CodegenType.DOCUMENTATION;
}
private String outputFile = OPENAPI_FILENAME_DEFAULT_YAML;

@Override
public String getName() {
Expand All @@ -50,19 +26,8 @@ public String getHelp() {
}

@Override
public void processOpts() {
super.processOpts();

embeddedTemplateDir = templateDir = getTemplateDir();

if (additionalProperties.containsKey(OUTPUT_NAME) && !StringUtils.isBlank((String) additionalProperties.get(OUTPUT_NAME))) {
setOutputFile((String) additionalProperties.get(OUTPUT_NAME));
}
}

@Override
public String getDefaultTemplateDir() {
return "openapi";
protected String getOutputFile() {
return outputFile;
}

public void setOutputFile(String outputFile) {
Expand All @@ -73,24 +38,18 @@ public void setOutputFile(String outputFile) {
public void preprocessOpenAPI(OpenAPI openAPI) {
super.preprocessOpenAPI(openAPI);
try {
String valueAsString = Yaml.pretty(openAPI);
final String outputString;
if (flattenSpec) {
outputString = Yaml.pretty(openAPI);
} else {
outputString = Yaml.pretty(this.unflattenedOpenAPI);
}

String outputFile = outputFolder + File.separator + this.outputFile;
FileUtils.writeStringToFile(new File(outputFile), valueAsString);
FileUtils.writeStringToFile(new File(outputFile), outputString);
LOGGER.debug("wrote file to " + outputFile);
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
}

@Override
public String escapeQuotationMark(String input) {
// just return the original string
return input;
}

@Override
public String escapeUnsafeCharacters(String input) {
// just return the original string
return input;
}
}

0 comments on commit 5544880

Please sign in to comment.