This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new 078cc56  CAMEL-16502: add optional basepath parameter to 
restdsl-generator and depending maven plugins (#5362)
078cc56 is described below

commit 078cc5695d90b92ae574f1abf285a39ebff6ee69
Author: Christian Sanabria <[email protected]>
AuthorDate: Wed Apr 14 15:12:34 2021 +0200

    CAMEL-16502: add optional basepath parameter to restdsl-generator and 
depending maven plugins (#5362)
---
 .../main/docs/camel-restdsl-openapi-plugin.adoc    |  6 ++-
 .../generator/openapi/AbstractGenerateMojo.java    |  3 ++
 .../maven/generator/openapi/GenerateMojo.java      |  4 ++
 .../maven/generator/openapi/GenerateXmlMojo.java   |  4 ++
 .../openapi/RestDslDefinitionGenerator.java        |  3 +-
 .../camel/generator/openapi/RestDslGenerator.java  | 57 ++++++++++++++++------
 .../openapi/RestDslSourceCodeGenerator.java        |  2 +-
 .../generator/openapi/RestDslXmlGenerator.java     |  2 +-
 .../generator/openapi/RestDslGeneratorTest.java    | 33 +++++++++++++
 9 files changed, 92 insertions(+), 22 deletions(-)

diff --git 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/docs/camel-restdsl-openapi-plugin.adoc
 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/docs/camel-restdsl-openapi-plugin.adoc
index 775e5d1..5a44b15 100644
--- 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/docs/camel-restdsl-openapi-plugin.adoc
+++ 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/docs/camel-restdsl-openapi-plugin.adoc
@@ -68,7 +68,8 @@ in the `<configuration>` tag.
 | `outputDirectory` | `generated-sources/restdsl-openapi` | Where to place the 
generated source file, by default `generated-sources/restdsl-openapi` within 
the project directory
 | `destinationGenerator` | | Fully qualified class name of the class that 
implements `org.apache.camel.generator.openapi.DestinationGenerator` interface 
for customizing destination endpoint
 | `restConfiguration` | `true` | Whether to include generation of the rest 
configuration with detected rest component to be used. 
-| `apiContextPath` | | Define openapi endpoint path if `restConfiguration` is 
set to `true`. |
+| `apiContextPath` | | Define openapi endpoint path if `restConfiguration` is 
set to `true`.
+| `basePath` | | Overrides the api base path as defined in the OpenAPI 
specification. |
 |========================================
 
 === Spring Boot Project with Servlet component
@@ -143,7 +144,8 @@ in the `<configuration>` tag.
 | `blueprint` | `false` | If enabled generates OSGi Blueprint XML instead of 
Spring XML.
 | `destinationGenerator` | | Fully qualified class name of the class that 
implements `org.apache.camel.generator.openapi.DestinationGenerator` interface 
for customizing destination endpoint
 | `restConfiguration` | `true` | Whether to include generation of the rest 
configuration with detected rest component to be used.
-| `apiContextPath` | | Define openapi endpoint path if `restConfiguration` is 
set to `true`. |
+| `apiContextPath` | | Define openapi endpoint path if `restConfiguration` is 
set to `true`.
+| `basePath` | | Overrides the api base path as defined in the OpenAPI 
specification. |
 |========================================
 
 == camel-restdsl-openapi:generate-xml-with-dto
diff --git 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/AbstractGenerateMojo.java
 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/AbstractGenerateMojo.java
index 4781bb8..df25d91 100644
--- 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/AbstractGenerateMojo.java
+++ 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/AbstractGenerateMojo.java
@@ -114,6 +114,9 @@ abstract class AbstractGenerateMojo extends AbstractMojo {
     @Parameter(name = "auth")
     String auth;
 
+    @Parameter
+    String basePath;
+
     @Parameter(defaultValue = "3.0.19")
     String swaggerCodegenMavenPluginVersion;
 
diff --git 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateMojo.java
 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateMojo.java
index b78e3e6..b4e598d 100644
--- 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateMojo.java
+++ 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateMojo.java
@@ -70,6 +70,10 @@ public class GenerateMojo extends AbstractGenerateMojo {
 
         final RestDslSourceCodeGenerator<Path> generator = 
RestDslGenerator.toPath(openapi);
 
+        if (ObjectHelper.isNotEmpty(basePath)) {
+            generator.withBasePath(basePath);
+        }
+
         if (ObjectHelper.isNotEmpty(filterOperation)) {
             generator.withOperationFilter(filterOperation);
         }
diff --git 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateXmlMojo.java
 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateXmlMojo.java
index 9157882..1835642 100644
--- 
a/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateXmlMojo.java
+++ 
b/tooling/maven/camel-restdsl-openapi-plugin/src/main/java/org/apache/camel/maven/generator/openapi/GenerateXmlMojo.java
@@ -71,6 +71,10 @@ public class GenerateXmlMojo extends AbstractGenerateMojo {
             generator.withBlueprint();
         }
 
+        if (ObjectHelper.isNotEmpty(basePath)) {
+            generator.withBasePath(basePath);
+        }
+
         if (ObjectHelper.isNotEmpty(filterOperation)) {
             generator.withOperationFilter(filterOperation);
         }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslDefinitionGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslDefinitionGenerator.java
index 57528ce..27d714d 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslDefinitionGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslDefinitionGenerator.java
@@ -28,7 +28,7 @@ public final class RestDslDefinitionGenerator extends 
RestDslGenerator<RestDslDe
 
     public RestsDefinition generate(final CamelContext context) {
         final RestDefinitionEmitter emitter = new 
RestDefinitionEmitter(context);
-        final String basePath = 
RestDslGenerator.determineBasePathFrom(document);
+        final String basePath = 
RestDslGenerator.determineBasePathFrom(this.basePath, document);
         final PathVisitor<RestsDefinition> restDslStatement
                 = new PathVisitor<>(basePath, emitter, filter, 
destinationGenerator());
 
@@ -36,5 +36,4 @@ public final class RestDslDefinitionGenerator extends 
RestDslGenerator<RestDslDe
 
         return emitter.result();
     }
-
 }
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
index d32ea2c..a1c8cbe 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslGenerator.java
@@ -55,6 +55,8 @@ public abstract class RestDslGenerator<G> {
 
     boolean springComponent;
 
+    String basePath;
+
     RestDslGenerator(final OasDocument document) {
         this.document = notNull(document, "document");
     }
@@ -86,6 +88,15 @@ public abstract class RestDslGenerator<G> {
         return that;
     }
 
+    public G withBasePath(final String basePath) {
+        this.basePath = basePath;
+
+        @SuppressWarnings("unchecked")
+        final G that = (G) this;
+
+        return that;
+    }
+
     public G withDestinationGenerator(final DestinationGenerator 
directRouteGenerator) {
         notNull(directRouteGenerator, "directRouteGenerator");
         this.destinationGenerator = directRouteGenerator;
@@ -136,6 +147,17 @@ public abstract class RestDslGenerator<G> {
         return destinationGenerator;
     }
 
+    public static String determineBasePathFrom(final String parameter, final 
OasDocument document) {
+        return parameter != null
+                ? determineBasePathFrom(parameter) : 
determineBasePathFrom(document);
+    }
+
+    public static String determineBasePathFrom(final String parameter) {
+        Objects.requireNonNull(parameter, "parameter");
+
+        return prepareBasePath(parameter.trim());
+    }
+
     public static String determineBasePathFrom(final OasDocument document) {
         Objects.requireNonNull(document, "document");
 
@@ -151,28 +173,31 @@ public abstract class RestDslGenerator<G> {
 
             final Oas30Server firstServer = (Oas30Server) servers.get(0);
             final URI serverUrl = 
URI.create(resolveVariablesIn(firstServer.url, firstServer));
-            String basePath = serverUrl.getPath();
-            if (basePath == null || basePath.length() == 0) {
-                return "";
-            }
+            return prepareBasePath(serverUrl.getPath());
+        }
 
-            if (basePath.charAt(0) != '/') {
-                basePath = "/" + basePath;
-            }
+        throw new IllegalArgumentException("Unsupported document type: " + 
document.getClass().getName());
+    }
 
-            if (basePath.indexOf("//") == 0) {
-                // strip off the first "/" if double "/" exists
-                basePath = basePath.substring(1);
-            }
+    private static String prepareBasePath(String basePath) {
+        if (basePath == null || basePath.length() == 0) {
+            return "";
+        }
 
-            if ("/".equals(basePath)) {
-                basePath = "";
-            }
+        if (basePath.charAt(0) != '/') {
+            basePath = "/" + basePath;
+        }
 
-            return basePath;
+        if (basePath.indexOf("//") == 0) {
+            // strip off the first "/" if double "/" exists
+            basePath = basePath.substring(1);
         }
 
-        throw new IllegalArgumentException("Unsupported document type: " + 
document.getClass().getName());
+        if ("/".equals(basePath)) {
+            basePath = "";
+        }
+
+        return basePath;
     }
 
     public static String determineHostFrom(final OasDocument document) {
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslSourceCodeGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslSourceCodeGenerator.java
index 0ddc68d..2bf76b1 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslSourceCodeGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslSourceCodeGenerator.java
@@ -112,7 +112,7 @@ public abstract class RestDslSourceCodeGenerator<T> extends 
RestDslGenerator<Res
             configure.addCode(";\n\n");
         }
 
-        final String basePath = 
RestDslGenerator.determineBasePathFrom(document);
+        final String basePath = 
RestDslGenerator.determineBasePathFrom(this.basePath, document);
 
         final PathVisitor<MethodSpec> restDslStatement = new 
PathVisitor<>(basePath, emitter, filter, destinationGenerator());
         document.paths.getItems().forEach(restDslStatement::visit);
diff --git 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
index b1fc3d0..3336724 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
@@ -49,7 +49,7 @@ public class RestDslXmlGenerator extends 
RestDslGenerator<RestDslXmlGenerator> {
 
     public String generate(final CamelContext context) throws Exception {
         final RestDefinitionEmitter emitter = new 
RestDefinitionEmitter(context);
-        final String basePath = 
RestDslGenerator.determineBasePathFrom(document);
+        final String basePath = 
RestDslGenerator.determineBasePathFrom(this.basePath, document);
         final PathVisitor<RestsDefinition> restDslStatement = new 
PathVisitor<>(
                 basePath, emitter, filter,
                 destinationGenerator());
diff --git 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorTest.java
 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorTest.java
index 37d11d3..56581bc 100644
--- 
a/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorTest.java
+++ 
b/tooling/openapi-rest-dsl-generator/src/test/java/org/apache/camel/generator/openapi/RestDslGeneratorTest.java
@@ -106,6 +106,39 @@ public class RestDslGeneratorTest {
     }
 
     @Test
+    public void shouldDetermineBasePathFromParameterOverDocument() {
+        final Oas30Document oas30Document = new Oas30Document();
+        final Oas30Server server = new Oas30Server();
+        server.url = "/api/v3";
+
+        oas30Document.servers = Collections.singletonList(server);
+        assertThat(RestDslGenerator.determineBasePathFrom("/api/v4", 
oas30Document)).isEqualTo("/api/v4");
+    }
+
+    @Test
+    public void 
shouldDetermineBasePathFromParameterOverDocumentWithoutStartingSlash() {
+        final Oas30Document oas30Document = new Oas30Document();
+        final Oas30Server server = new Oas30Server();
+        server.url = "api/v3";
+
+        oas30Document.servers = Collections.singletonList(server);
+        assertThat(RestDslGenerator.determineBasePathFrom("api/v4", 
oas30Document)).isEqualTo("/api/v4");
+    }
+
+    @Test
+    public void 
shouldDetermineBasePathFromParameterOverDocumentWithEmptyParameter() {
+        final Oas30Document oas30Document = new Oas30Document();
+        final Oas30Server server = new Oas30Server();
+        server.url = "/api/v3";
+
+        oas30Document.servers = Collections.singletonList(server);
+        assertThat(RestDslGenerator.determineBasePathFrom(null, 
oas30Document)).isEqualTo("/api/v3");
+        assertThat(RestDslGenerator.determineBasePathFrom("/", 
oas30Document)).isEqualTo("");
+        assertThat(RestDslGenerator.determineBasePathFrom("", 
oas30Document)).isEqualTo("");
+        assertThat(RestDslGenerator.determineBasePathFrom("   ", 
oas30Document)).isEqualTo("");
+    }
+
+    @Test
     public void shouldGenerateSourceCodeWithDefaults() throws Exception {
         final StringBuilder code = new StringBuilder();
 

Reply via email to