diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java index b2e5424c8da9..8750031094c9 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java @@ -626,6 +626,22 @@ private String calculateModelKey(String type, String ref) { } } + /** + * this method splits the specified property by commas, trims any results for spaces and + * newlines, and returns them as a Set of Strings. the method will return an empty + * set if the specified property has not been set or is an empty string. + */ + private Set getPropertyAsSet(String propertyName) { + String propertyRaw = GlobalSettings.getProperty(propertyName); + if (propertyRaw == null || propertyRaw.isEmpty()) { + return Collections.emptySet(); + } + + return Arrays.stream(propertyRaw.split(",")) + .map(String::trim) + .collect(Collectors.toSet()); + } + private Set modelKeys() { final Map schemas = ModelUtils.getSchemas(this.openAPI); if (schemas == null) { @@ -633,12 +649,7 @@ private Set modelKeys() { return Collections.emptySet(); } - String modelNames = GlobalSettings.getProperty("models"); - Set modelsToGenerate = null; - if (modelNames != null && !modelNames.isEmpty()) { - modelsToGenerate = new HashSet<>(Arrays.asList(modelNames.split(","))); - } - + Set modelsToGenerate = getPropertyAsSet(CodegenConstants.MODELS); Set modelKeys = schemas.keySet(); if (modelsToGenerate != null && !modelsToGenerate.isEmpty()) { Set updatedKeys = new HashSet<>(); @@ -661,11 +672,7 @@ void generateApis(List files, List allOperations, List> paths = processPaths(this.openAPI.getPaths()); - Set apisToGenerate = null; - String apiNames = GlobalSettings.getProperty(CodegenConstants.APIS); - if (apiNames != null && !apiNames.isEmpty()) { - apisToGenerate = new HashSet<>(Arrays.asList(apiNames.split(","))); - } + Set apisToGenerate = getPropertyAsSet(CodegenConstants.APIS); if (apisToGenerate != null && !apisToGenerate.isEmpty()) { Map> updatedPaths = new TreeMap<>(); for (String m : paths.keySet()) { @@ -827,11 +834,7 @@ void generateWebhooks(List files, List allWebhooks, List> webhooks = processWebhooks(this.openAPI.getWebhooks()); - Set webhooksToGenerate = null; - String webhookNames = GlobalSettings.getProperty(CodegenConstants.WEBHOOKS); - if (webhookNames != null && !webhookNames.isEmpty()) { - webhooksToGenerate = new HashSet<>(Arrays.asList(webhookNames.split(","))); - } + Set webhooksToGenerate = getPropertyAsSet(CodegenConstants.WEBHOOKS); if (webhooksToGenerate != null && !webhooksToGenerate.isEmpty()) { Map> Webhooks = new TreeMap<>(); for (String m : webhooks.keySet()) { @@ -1064,12 +1067,7 @@ private void generateSupportingFiles(List files, Map bundl return; } - Set supportingFilesToGenerate = null; - String supportingFiles = GlobalSettings.getProperty(CodegenConstants.SUPPORTING_FILES); - if (supportingFiles != null && !supportingFiles.isEmpty()) { - supportingFilesToGenerate = new HashSet<>(Arrays.asList(supportingFiles.split(","))); - } - + Set supportingFilesToGenerate = getPropertyAsSet(CodegenConstants.SUPPORTING_FILES); for (SupportingFile support : config.supportingFiles()) { try { String outputFolder = config.outputFolder(); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java index 273ea24217b7..42672541cffb 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultGeneratorTest.java @@ -809,11 +809,11 @@ private ClientOptInput createOptInputIssue(String issueNumber, Path target) { public void testGenerateRecursiveDependentModelsBackwardCompatibilityIssue18444() throws IOException { Path target = Files.createTempDirectory("test"); File output = target.toFile(); - String oldModelsProp = GlobalSettings.getProperty("models"); + String oldModelsProp = GlobalSettings.getProperty(CodegenConstants.MODELS); try { DefaultGenerator generator = generatorGenerateRecursiveDependentModelsBackwardCompatibility("false"); - GlobalSettings.setProperty("models", "RQ1,RS1"); + GlobalSettings.setProperty(CodegenConstants.MODELS, "RQ1,RS1"); ClientOptInput clientOptInput = createOptInputIssue18444(target); List files = generator.opts(clientOptInput).generate(); Assert.assertEquals(files.size(), 17); @@ -853,9 +853,9 @@ public void testGenerateRecursiveDependentModelsBackwardCompatibilityIssue18444( } finally { output.deleteOnExit(); if (oldModelsProp != null) { - GlobalSettings.setProperty("models", oldModelsProp); + GlobalSettings.setProperty(CodegenConstants.MODELS, oldModelsProp); } else { - GlobalSettings.clearProperty("models"); + GlobalSettings.clearProperty(CodegenConstants.MODELS); } } } @@ -864,11 +864,11 @@ public void testGenerateRecursiveDependentModelsBackwardCompatibilityIssue18444( public void testGenerateRecursiveDependentModelsIssue18444() throws IOException { Path target = Files.createTempDirectory("test"); File output = target.toFile(); - String oldModelsProp = GlobalSettings.getProperty("models"); + String oldModelsProp = GlobalSettings.getProperty(CodegenConstants.MODELS); try { DefaultGenerator generator = generatorGenerateRecursiveDependentModelsBackwardCompatibility("true"); - GlobalSettings.setProperty("models", "RQ1,RS1"); + GlobalSettings.setProperty(CodegenConstants.MODELS, "RQ1,RS1"); ClientOptInput clientOptInput = createOptInputIssue18444(target); List files = generator.opts(clientOptInput).generate(); Assert.assertEquals(files.size(), 21); @@ -908,9 +908,9 @@ public void testGenerateRecursiveDependentModelsIssue18444() throws IOException } finally { output.deleteOnExit(); if (oldModelsProp != null) { - GlobalSettings.setProperty("models", oldModelsProp); + GlobalSettings.setProperty(CodegenConstants.MODELS, oldModelsProp); } else { - GlobalSettings.clearProperty("models"); + GlobalSettings.clearProperty(CodegenConstants.MODELS); } } } @@ -919,11 +919,11 @@ public void testGenerateRecursiveDependentModelsIssue18444() throws IOException public void testGenerateRecursiveDependentModelsIssue19220() throws IOException { Path target = Files.createTempDirectory("test"); File output = target.toFile(); - String oldModelsProp = GlobalSettings.getProperty("models"); + String oldModelsProp = GlobalSettings.getProperty(CodegenConstants.MODELS); try { DefaultGenerator generator = generatorGenerateRecursiveDependentModelsBackwardCompatibility("true"); - GlobalSettings.setProperty("models", "RQ1,RS1"); + GlobalSettings.setProperty(CodegenConstants.MODELS, "RQ1,RS1"); ClientOptInput clientOptInput = createOptInputIssue19220(target); List files = generator.opts(clientOptInput).generate(); Assert.assertEquals(files.size(), 21); @@ -963,11 +963,84 @@ public void testGenerateRecursiveDependentModelsIssue19220() throws IOException } finally { output.deleteOnExit(); if (oldModelsProp != null) { - GlobalSettings.setProperty("models", oldModelsProp); + GlobalSettings.setProperty(CodegenConstants.MODELS, oldModelsProp); } else { - GlobalSettings.clearProperty("models"); + GlobalSettings.clearProperty(CodegenConstants.MODELS); } } } + @Test + public void testGenerateMultiLinePropertiesIssue19628() throws IOException { + Path target = Files.createTempDirectory("test"); + File output = target.toFile(); + String multiLineSeparator = ",\n "; + try { + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("java") + .setInputSpec("src/test/resources/3_1/java/petstore.yaml") + .setOutputDir(target.toAbsolutePath().toString()); + + final ClientOptInput clientOptInput = configurator.toClientOptInput(); + DefaultGenerator generator = new DefaultGenerator(true); + + generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true"); + generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "true"); + generator.setGeneratorPropertyDefault(CodegenConstants.API_DOCS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false"); + generator.setGeneratorPropertyDefault(CodegenConstants.API_TESTS, "false"); + + List supportingFilesToGenerate = Arrays.asList( + "pom.xml", + ".travis.yml", + ".gitignore", + "git_push.sh" + ); + GlobalSettings.setProperty(CodegenConstants.SUPPORTING_FILES, String.join(multiLineSeparator, supportingFilesToGenerate)); + + List apisToGenerate = Arrays.asList( + "Pet", + "User" + ); + GlobalSettings.setProperty(CodegenConstants.APIS, String.join(multiLineSeparator, apisToGenerate)); + + List modelsToGenerate = Arrays.asList( + "Category", + "Pet", + "Tag", + "User" + ); + GlobalSettings.setProperty(CodegenConstants.MODELS, String.join(multiLineSeparator, modelsToGenerate)); + + List files = generator.opts(clientOptInput).generate(); + + Assert.assertEquals( + files.size(), + // version file + files specified by properties + 1 + supportingFilesToGenerate.size() + modelsToGenerate.size() + apisToGenerate.size() + ); + + TestUtils.ensureContainsFile(files, output, ".openapi-generator/VERSION"); + for(String supportingFile : supportingFilesToGenerate) { + TestUtils.ensureContainsFile(files, output, supportingFile); + } + + for(String apiFile : apisToGenerate) { + String filename = "src/main/java/org/openapitools/client/api/" + apiFile + "Api.java"; + TestUtils.ensureContainsFile(files, output, filename); + } + + for(String modelFile : modelsToGenerate) { + String filename = "src/main/java/org/openapitools/client/model/" + modelFile + ".java"; + TestUtils.ensureContainsFile(files, output, filename); + } + } finally { + GlobalSettings.reset(); + output.deleteOnExit(); + } + + } }