diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java index 07f38793d039..2242ed2dd41a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaJAXRSSpecServerCodegen.java @@ -18,7 +18,6 @@ package org.openapitools.codegen.languages; import io.swagger.v3.oas.models.Operation; - import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.CliOption; import org.openapitools.codegen.CodegenConstants; @@ -42,7 +41,9 @@ public class JavaJAXRSSpecServerCodegen extends AbstractJavaJAXRSServerCodegen { private boolean interfaceOnly = false; private boolean returnResponse = false; private boolean generatePom = true; - + + private String primaryResourceName; + public JavaJAXRSSpecServerCodegen() { super(); invokerPackage = "org.openapitools.api"; @@ -147,19 +148,26 @@ public void addOperationToGroup(String tag, String resourcePath, Operation opera if (pos > 0) { basePath = basePath.substring(0, pos); } - + + String operationKey = basePath; if (StringUtils.isEmpty(basePath)) { - basePath = "default"; + basePath = tag; + operationKey = ""; + primaryResourceName = tag; + } else if (basePath.matches("\\{.*\\}")) { + basePath = tag; + operationKey = ""; + co.subresourceOperation = true; } else { if (co.path.startsWith("/" + basePath)) { co.path = co.path.substring(("/" + basePath).length()); } co.subresourceOperation = !co.path.isEmpty(); } - List opList = operations.get(basePath); + List opList = operations.get(operationKey); if (opList == null || opList.isEmpty()) { opList = new ArrayList(); - operations.put(basePath, opList); + operations.put(operationKey, opList); } opList.add(co); co.baseName = basePath; @@ -186,4 +194,14 @@ public Map postProcessSupportingFileData(Map obj public String getHelp() { return "Generates a Java JAXRS Server according to JAXRS 2.0 specification."; } + + @Override + public String toApiName(final String name) { + String computed = name; + if (computed.length() == 0) { + return primaryResourceName + "Api"; + } + computed = sanitizeName(computed); + return camelize(computed) + "Api"; + } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJAXRSSpecServerCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJAXRSSpecServerCodegenTest.java new file mode 100644 index 000000000000..1ccafa1e48fe --- /dev/null +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/jaxrs/JavaJAXRSSpecServerCodegenTest.java @@ -0,0 +1,108 @@ +package org.openapitools.codegen.java.jaxrs; + +import io.swagger.v3.oas.models.Operation; +import org.junit.Before; +import org.junit.Test; +import org.openapitools.codegen.CodegenOperation; +import org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +/** + * Unit-Test for {@link org.openapitools.codegen.languages.JavaJAXRSSpecServerCodegen}. + * + * @author attrobit + */ +public class JavaJAXRSSpecServerCodegenTest { + + private JavaJAXRSSpecServerCodegen instance; + + @Before + public void before() { + instance = new JavaJAXRSSpecServerCodegen(); + } + + /** + * Test + * {@link JavaJAXRSSpecServerCodegen#addOperationToGroup(String, String, Operation, CodegenOperation, Map)} for Resource with path "/" and set tag. + */ + @Test + public void testAddOperationToGroupForRootResource() { + CodegenOperation codegenOperation = new CodegenOperation(); + codegenOperation.operationId = "findPrimaryresource"; + Operation operation = new Operation(); + Map> operationList = new HashMap<>(); + + instance.addOperationToGroup("Primaryresource", "/", operation, codegenOperation, operationList); + + assertThat(operationList.size(), is(1)); + assertThat(operationList.containsKey(""), is(true)); + assertThat(codegenOperation.baseName, is("Primaryresource")); + } + + /** + * Test + * {@link JavaJAXRSSpecServerCodegen#addOperationToGroup(String, String, Operation, CodegenOperation, Map)} for Resource with path param. + */ + @Test + public void testAddOperationToGroupForRootResourcePathParam() { + CodegenOperation codegenOperation = new CodegenOperation(); + codegenOperation.operationId = "getPrimaryresource"; + Operation operation = new Operation(); + Map> operationList = new HashMap<>(); + + instance.addOperationToGroup("Primaryresource", "/{uuid}", operation, codegenOperation, operationList); + + assertThat(operationList.size(), is(1)); + assertThat(operationList.containsKey(""), is(true)); + assertThat(codegenOperation.baseName, is("Primaryresource")); + } + + /** + * Test + * {@link JavaJAXRSSpecServerCodegen#addOperationToGroup(String, String, + * Operation, CodegenOperation, Map)} for Resource with path "/subresource". + */ + @Test + public void testAddOperationToGroupForSubresource() { + CodegenOperation codegenOperation = new CodegenOperation(); + codegenOperation.path = "/subresource"; + Operation operation = new Operation(); + Map> operationList = new HashMap<>(); + + instance.addOperationToGroup("Default", "/subresource", operation, codegenOperation, operationList); + + assertThat(codegenOperation.baseName, is("subresource")); + assertThat(operationList.size(), is(1)); + assertThat(operationList.containsKey("subresource"), is(true)); + } + + /** + * Test {@link JavaJAXRSSpecServerCodegen#toApiName(String)} with subresource. + */ + @Test + public void testToApiNameForSubresource() { + final String subresource = instance.toApiName("subresource"); + assertThat(subresource, is("SubresourceApi")); + } + + /** + * Test {@link JavaJAXRSSpecServerCodegen#toApiName(String)} with primary resource. + */ + @Test + public void testToApiNameForPrimaryResource() { + CodegenOperation codegenOperation = new CodegenOperation(); + codegenOperation.operationId = "findPrimaryresource"; + Operation operation = new Operation(); + Map> operationList = new HashMap<>(); + instance.addOperationToGroup("Primaryresource", "/", operation, codegenOperation, operationList); + + final String subresource = instance.toApiName(""); + assertThat(subresource, is("PrimaryresourceApi")); + } +}