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();