From 596354ec1770239d84113c5969eed490a061fff2 Mon Sep 17 00:00:00 2001 From: Olivier Guyot Date: Fri, 5 Apr 2019 00:59:20 +0200 Subject: [PATCH] Fix handling of --model-name-prefix|suffix in typescript-angular (#2590) These will be removed as well when generating import path & model file names. Previously only the language-specific `modelSuffix` was removed. --- .../TypeScriptAngularClientCodegen.java | 23 ++++++++++++----- .../TypeScriptAngularClientCodegenTest.java | 25 +++++++++++++++++++ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptAngularClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptAngularClientCodegen.java index 108f71aba5d3..474a889eeb2e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptAngularClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/TypeScriptAngularClientCodegen.java @@ -29,6 +29,7 @@ import org.slf4j.LoggerFactory; import java.io.File; import java.util.*; +import static org.apache.commons.lang3.StringUtils.capitalize; import static org.openapitools.codegen.utils.StringUtils.*; public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCodegen { @@ -501,7 +502,7 @@ public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCode HashMap tsImport = new HashMap<>(); // TVG: This is used as class name in the import statements of the model file tsImport.put("classname", im); - tsImport.put("filename", toModelFilename(removeModelSuffixIfNecessary(im))); + tsImport.put("filename", toModelFilename(removeModelPrefixSuffix(im))); tsImports.add(tsImport); } } @@ -590,11 +591,21 @@ public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCode return modelName + modelSuffix; } - private String removeModelSuffixIfNecessary(String name) { - if (modelSuffix.length() == 0 || !name.endsWith(modelSuffix)) { - return name; + public String removeModelPrefixSuffix(String name) { + String result = name; + if (modelSuffix.length() > 0 && result.endsWith(modelSuffix)) { + result = result.substring(0, result.length() - modelSuffix.length()); } - return name.substring(0, name.length() - modelSuffix.length()); + String prefix = capitalize(this.modelNamePrefix); + String suffix = capitalize(this.modelNameSuffix); + if (prefix.length() > 0 && result.startsWith(prefix)) { + result = result.substring(prefix.length()); + } + if (suffix.length() > 0 && result.endsWith(suffix)) { + result = result.substring(0, result.length() - suffix.length()); + } + + return result; } /** @@ -648,7 +659,7 @@ public class TypeScriptAngularClientCodegen extends AbstractTypeScriptClientCode * @return the transformed name */ private String convertUsingFileNamingConvention(String originalName) { - String name = this.removeModelSuffixIfNecessary(originalName); + String name = this.removeModelPrefixSuffix(originalName); if ("kebab-case".equals(fileNaming)) { name = dashize(underscore(name)); } else { diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptangular/TypeScriptAngularClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptangular/TypeScriptAngularClientCodegenTest.java index 6fd1e9822b2c..1ecba89b00e7 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptangular/TypeScriptAngularClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/typescript/typescriptangular/TypeScriptAngularClientCodegenTest.java @@ -76,4 +76,29 @@ public class TypeScriptAngularClientCodegenTest { } + @Test + public void testRemovePrefixSuffix() { + TypeScriptAngularClientCodegen codegen = new TypeScriptAngularClientCodegen(); + + // simple noop test + Assert.assertEquals("TestName", codegen.removeModelPrefixSuffix("TestName")); + + codegen.setModelNamePrefix("abc"); + codegen.setModelNameSuffix("def"); + codegen.additionalProperties().put("modelSuffix", "Ghi"); + codegen.processOpts(); + + Assert.assertEquals("TestName", codegen.removeModelPrefixSuffix("TestName")); + Assert.assertEquals("TestName", codegen.removeModelPrefixSuffix("TestNameGhi")); + Assert.assertEquals("TestNameghi", codegen.removeModelPrefixSuffix("TestNameghi")); + Assert.assertEquals("abcTestName", codegen.removeModelPrefixSuffix("abcTestName")); + Assert.assertEquals("TestName", codegen.removeModelPrefixSuffix("AbcTestName")); + Assert.assertEquals("AbcTestName", codegen.removeModelPrefixSuffix("AbcAbcTestName")); + Assert.assertEquals("TestName", codegen.removeModelPrefixSuffix("TestNameDef")); + Assert.assertEquals("TestNamedef", codegen.removeModelPrefixSuffix("TestNamedef")); + Assert.assertEquals("TestNamedefghi", codegen.removeModelPrefixSuffix("TestNamedefghi")); + Assert.assertEquals("TestNameDefghi", codegen.removeModelPrefixSuffix("TestNameDefghi")); + Assert.assertEquals("TestName", codegen.removeModelPrefixSuffix("TestNameDefGhi")); + } + }