You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2018/09/30 15:23:46 UTC

[camel] branch master updated (591e21a -> e84bbdd)

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

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


    from 591e21a  CAMEL-12842: Fixed CS issues
     new cc00df4  CAMEL-12841: Typo
     new 4589114  CAMEL-12841: camel-restdsl-swagger:generate - Add restConfiguration with common defaults
     new 42a877d  CAMEL-12841: camel-restdsl-swagger:generate - Add restConfiguration with common defaults
     new a75b8dd  CAMEL-12841: camel-restdsl-swagger:generate - Add restConfiguration with common defaults
     new e84bbdd  CAMEL-12841: camel-restdsl-swagger:generate - Add restConfiguration with common defaults

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../src/it/simple-dto/pom.xml                      |  5 ++++
 .../src/it/simple-dto/verify.groovy                |  4 +++
 .../src/it/simple-xml-dto/pom.xml                  |  5 ++++
 .../src/it/simple-xml-dto/verify.groovy            |  4 +++
 .../main/docs/camel-restdsl-swagger-plugin.adoc    | 30 +++++++++++++++++++
 .../generator/swagger/AbstractGenerateMojo.java    | 34 ++++++++++++++++++++--
 .../maven/generator/swagger/GenerateMojo.java      | 33 +++++++++++++++++++++
 .../maven/generator/swagger/GenerateXmlMojo.java   | 28 ++++++++++++++++++
 .../camel/generator/swagger/RestDslGenerator.java  | 20 +++++++++++++
 .../swagger/RestDslSourceCodeGenerator.java        | 18 +++++++++---
 .../generator/swagger/RestDslXmlGenerator.java     |  6 ++++
 .../generator/swagger/RestDslGeneratorTest.java    | 12 ++++++++
 .../generator/swagger/RestDslXmlGeneratorTest.java | 12 ++++++++
 ...re.txt => SwaggerPetstoreWithRestComponent.txt} |  3 ++
 ...txt => SwaggerPetstoreWithRestComponentXml.txt} |  1 +
 15 files changed, 209 insertions(+), 6 deletions(-)
 copy tooling/swagger-rest-dsl-generator/src/test/resources/{SwaggerPetstore.txt => SwaggerPetstoreWithRestComponent.txt} (99%)
 copy tooling/swagger-rest-dsl-generator/src/test/resources/{SwaggerPetstoreXml.txt => SwaggerPetstoreWithRestComponentXml.txt} (99%)


[camel] 02/05: CAMEL-12841: camel-restdsl-swagger:generate - Add restConfiguration with common defaults

Posted by da...@apache.org.
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

commit 4589114f0e2ac95185a064b179869fd37d12e7d1
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Sep 30 09:24:59 2018 +0200

    CAMEL-12841: camel-restdsl-swagger:generate - Add restConfiguration with common defaults
---
 .../src/it/simple-dto/pom.xml                      |   5 +
 .../src/it/simple-dto/verify.groovy                |   4 +
 .../generator/swagger/AbstractGenerateMojo.java    |  20 +-
 .../maven/generator/swagger/GenerateMojo.java      |   5 +
 .../maven/generator/swagger/GenerateXmlMojo.java   |   5 +
 .../camel/generator/swagger/RestDslGenerator.java  |  10 +
 .../swagger/RestDslSourceCodeGenerator.java        |   5 +
 .../generator/swagger/RestDslXmlGenerator.java     |   6 +
 .../generator/swagger/RestDslGeneratorTest.java    |  12 +
 .../generator/swagger/RestDslXmlGeneratorTest.java |  12 +
 .../resources/SwaggerPetstoreWithRestComponent.txt | 294 +++++++++++++++++++++
 .../SwaggerPetstoreWithRestComponentXml.txt        | 101 +++++++
 12 files changed, 477 insertions(+), 2 deletions(-)

diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-dto/pom.xml b/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-dto/pom.xml
index 7ebd095..f30dfe0 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-dto/pom.xml
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-dto/pom.xml
@@ -45,6 +45,11 @@
       <version>@project.version@</version>
     </dependency>
     <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-servlet</artifactId>
+      <version>@project.version@</version>
+    </dependency>
+    <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
       <version>2.8.5</version>
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-dto/verify.groovy b/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-dto/verify.groovy
index 87d52d1..8c3fafb 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-dto/verify.groovy
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-dto/verify.groovy
@@ -19,6 +19,10 @@ def File restdsl = new File(basedir, "target/generated-sources/restdsl-swagger/i
 
 assert restdsl.exists()
 
+def String data = restdsl.text
+
+assert data.contains('restConfiguration().component("servlet");')
+
 def File restdto = new File(basedir, "target/generated-sources/swagger/src/main/java/com/foo/Order.java")
 
 assert restdto.exists()
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/AbstractGenerateMojo.java b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/AbstractGenerateMojo.java
index bf4f63d..cb3384d 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/AbstractGenerateMojo.java
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/AbstractGenerateMojo.java
@@ -22,10 +22,13 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 
 import org.apache.camel.generator.swagger.DestinationGenerator;
 import org.apache.maven.execution.MavenSession;
+import org.apache.maven.model.Dependency;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.BuildPluginManager;
 import org.apache.maven.plugin.MojoExecutionException;
@@ -36,17 +39,17 @@ import org.twdata.maven.mojoexecutor.MojoExecutor;
 
 import static org.twdata.maven.mojoexecutor.MojoExecutor.artifactId;
 import static org.twdata.maven.mojoexecutor.MojoExecutor.configuration;
-import static org.twdata.maven.mojoexecutor.MojoExecutor.element;
 import static org.twdata.maven.mojoexecutor.MojoExecutor.executeMojo;
 import static org.twdata.maven.mojoexecutor.MojoExecutor.executionEnvironment;
 import static org.twdata.maven.mojoexecutor.MojoExecutor.goal;
 import static org.twdata.maven.mojoexecutor.MojoExecutor.groupId;
-import static org.twdata.maven.mojoexecutor.MojoExecutor.name;
 import static org.twdata.maven.mojoexecutor.MojoExecutor.plugin;
 import static org.twdata.maven.mojoexecutor.MojoExecutor.version;
 
 abstract class AbstractGenerateMojo extends AbstractMojo {
 
+    public static final String[] DEFAULT_REST_CONSUMER_COMPONENTS = new String[]{"coap", "netty-http", "netty4-http", "jetty", "restlet", "servlet", "spark-java", "undertow"};
+
     @Parameter
     String destinationGenerator;
 
@@ -178,4 +181,17 @@ abstract class AbstractGenerateMojo extends AbstractMojo {
 
     }
 
+    protected String detectRestComponentFromClasspath() {
+        for (Dependency dep : mavenProject.getDependencies()) {
+            if ("org.apache.camel".equals(dep.getGroupId())) {
+                String aid = dep.getArtifactId();
+                Optional<String> comp = Arrays.asList(DEFAULT_REST_CONSUMER_COMPONENTS).stream().filter(c -> aid.startsWith("camel-" + c)).findFirst();
+                if (comp.isPresent()) {
+                    return comp.get();
+                }
+            }
+        }
+        return null;
+    }
+
 }
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java
index 1a15f98..f0ffcec 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java
@@ -87,6 +87,11 @@ public class GenerateMojo extends AbstractGenerateMojo {
             generator.withDestinationGenerator(destinationGeneratorObject);
         }
 
+        String comp = detectRestComponentFromClasspath();
+        if (comp != null) {
+            generator.withRestComponent(comp);
+        }
+
         final Path outputPath = new File(outputDirectory).toPath();
 
         try {
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java
index 67f74ac..eca0d0e 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java
@@ -77,6 +77,11 @@ public class GenerateXmlMojo extends AbstractGenerateMojo {
             generator.withDestinationGenerator(destinationGeneratorObject);
         }
 
+        String comp = detectRestComponentFromClasspath();
+        if (comp != null) {
+            generator.withRestComponent(comp);
+        }
+
         try {
             CamelContext camel = new DefaultCamelContext();
             String xml = generator.generate(camel);
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslGenerator.java
index a0c35c2..df32d5f 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslGenerator.java
@@ -34,6 +34,7 @@ public abstract class RestDslGenerator<G> {
 
     DestinationGenerator destinationGenerator = new DirectToOperationId();
     OperationFilter filter = new OperationFilter();
+    String restComponent;
 
     RestDslGenerator(final Swagger swagger) {
         this.swagger = notNull(swagger, "swagger");
@@ -71,6 +72,15 @@ public abstract class RestDslGenerator<G> {
         return that;
     }
 
+    public G withRestComponent(String restComponent) {
+        this.restComponent = restComponent;
+
+        @SuppressWarnings("unchecked")
+        final G that = (G) this;
+
+        return that;
+    }
+
     public static RestDslSourceCodeGenerator<Appendable> toAppendable(final Swagger swagger) {
         return new AppendableGenerator(swagger);
     }
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
index bb38871..67150a2 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
@@ -101,6 +101,11 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
 
         final MethodBodySourceCodeEmitter emitter = new MethodBodySourceCodeEmitter(configure);
 
+        if (restComponent != null) {
+            configure.addCode("\n");
+            configure.addCode("restConfiguration().component(\"" + restComponent + "\");\n\n");
+        }
+
         final PathVisitor<MethodSpec> restDslStatement = new PathVisitor<>(emitter, filter, destinationGenerator());
         swagger.getPaths().forEach(restDslStatement::visit);
 
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java
index b9aab84..50d6188 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java
@@ -49,6 +49,12 @@ public class RestDslXmlGenerator extends RestDslGenerator<RestDslXmlGenerator> {
         // remove all customId attributes as we do not want them in the output
         xml = xml.replaceAll(" customId=\"true\"", "");
         xml = xml.replaceAll(" customId=\"false\"", "");
+
+        if (restComponent != null) {
+            String extra = "<restConfiguration component=\"" + restComponent + "\"/>";
+            xml = xml.replaceFirst("<rest>", extra + "\n<rest>");
+        }
+
         return xml;
     }
 }
diff --git a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslGeneratorTest.java b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslGeneratorTest.java
index e7bfa3a..c8dcc09 100644
--- a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslGeneratorTest.java
+++ b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslGeneratorTest.java
@@ -62,6 +62,18 @@ public class RestDslGeneratorTest {
     }
 
     @Test
+    public void shouldGenerateSourceCodeWithRestComponent() throws IOException, URISyntaxException {
+        final StringBuilder code = new StringBuilder();
+
+        RestDslGenerator.toAppendable(swagger).withGeneratedTime(generated).withRestComponent("servlet").generate(code);
+
+        final URI file = RestDslGeneratorTest.class.getResource("/SwaggerPetstoreWithRestComponent.txt").toURI();
+        final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
+
+        assertThat(code.toString()).isEqualTo(expectedContent);
+    }
+
+    @Test
     public void shouldGenerateSourceCodeWithOptions() throws IOException, URISyntaxException {
         final StringBuilder code = new StringBuilder();
 
diff --git a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslXmlGeneratorTest.java b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslXmlGeneratorTest.java
index b29fd8f..2e45203 100644
--- a/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslXmlGeneratorTest.java
+++ b/tooling/swagger-rest-dsl-generator/src/test/java/org/apache/camel/generator/swagger/RestDslXmlGeneratorTest.java
@@ -63,5 +63,17 @@ public class RestDslXmlGeneratorTest {
         assertThat(xml).isEqualToIgnoringWhitespace(expectedContent);
     }
 
+    @Test
+    public void shouldGenerateXmlWithRestComponent() throws Exception {
+        final CamelContext context = new DefaultCamelContext();
+
+        final String xml = RestDslGenerator.toXml(swagger).withRestComponent("servlet").generate(context);
+
+        final URI file = RestDslGeneratorTest.class.getResource("/SwaggerPetstoreWithRestComponentXml.txt").toURI();
+        final String expectedContent = new String(Files.readAllBytes(Paths.get(file)), StandardCharsets.UTF_8);
+
+        assertThat(xml).isEqualToIgnoringWhitespace(expectedContent);
+    }
+
 
 }
diff --git a/tooling/swagger-rest-dsl-generator/src/test/resources/SwaggerPetstoreWithRestComponent.txt b/tooling/swagger-rest-dsl-generator/src/test/resources/SwaggerPetstoreWithRestComponent.txt
new file mode 100644
index 0000000..6ccda76
--- /dev/null
+++ b/tooling/swagger-rest-dsl-generator/src/test/resources/SwaggerPetstoreWithRestComponent.txt
@@ -0,0 +1,294 @@
+package io.swagger.petstore;
+
+import javax.annotation.Generated;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.model.rest.CollectionFormat;
+import org.apache.camel.model.rest.RestParamType;
+
+/**
+ * Generated from Swagger specification by Camel REST DSL generator.
+ */
+@Generated("org.apache.camel.generator.swagger.AppendableGenerator")
+public final class SwaggerPetstore extends RouteBuilder {
+    /**
+     * Defines Apache Camel routes using REST DSL fluent API.
+     */
+    public void configure() {
+
+        restConfiguration().component("servlet");
+
+        rest()
+            .put("/pet")
+                .id("updatePet")
+                .consumes("application/json,application/xml")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("body")
+                    .type(RestParamType.body)
+                    .required(true)
+                    .description("Pet object that needs to be added to the store")
+                .endParam()
+                .to("direct:updatePet")
+            .post("/pet")
+                .id("addPet")
+                .consumes("application/json,application/xml")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("body")
+                    .type(RestParamType.body)
+                    .required(true)
+                    .description("Pet object that needs to be added to the store")
+                .endParam()
+                .param()
+                    .name("verbose")
+                    .type(RestParamType.query)
+                    .dataType("boolean")
+                    .defaultValue("false")
+                    .required(false)
+                    .description("Verbose data")
+                .endParam()
+                .to("direct:addPet")
+            .get("/pet/findByStatus")
+                .id("findPetsByStatus")
+                .description("Multiple status values can be provided with comma separated strings")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("status")
+                    .type(RestParamType.query)
+                    .dataType("array")
+                    .collectionFormat(CollectionFormat.multi)
+                    .arrayType("string")
+                    .required(true)
+                    .description("Status values that need to be considered for filter")
+                .endParam()
+                .to("direct:findPetsByStatus")
+            .get("/pet/findByTags")
+                .id("findPetsByTags")
+                .description("Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("tags")
+                    .type(RestParamType.query)
+                    .dataType("array")
+                    .collectionFormat(CollectionFormat.multi)
+                    .arrayType("string")
+                    .required(true)
+                    .description("Tags to filter by")
+                .endParam()
+                .to("direct:findPetsByTags")
+            .get("/pet/{petId}")
+                .id("getPetById")
+                .description("Returns a single pet")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("petId")
+                    .type(RestParamType.path)
+                    .dataType("integer")
+                    .required(true)
+                    .description("ID of pet to return")
+                .endParam()
+                .to("direct:getPetById")
+            .post("/pet/{petId}")
+                .id("updatePetWithForm")
+                .consumes("application/x-www-form-urlencoded")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("petId")
+                    .type(RestParamType.path)
+                    .dataType("integer")
+                    .required(true)
+                    .description("ID of pet that needs to be updated")
+                .endParam()
+                .param()
+                    .name("name")
+                    .type(RestParamType.formData)
+                    .dataType("string")
+                    .required(false)
+                    .description("Updated name of the pet")
+                .endParam()
+                .param()
+                    .name("status")
+                    .type(RestParamType.formData)
+                    .dataType("string")
+                    .required(false)
+                    .description("Updated status of the pet")
+                .endParam()
+                .to("direct:updatePetWithForm")
+            .delete("/pet/{petId}")
+                .id("deletePet")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("api_key")
+                    .type(RestParamType.header)
+                    .dataType("string")
+                    .required(false)
+                .endParam()
+                .param()
+                    .name("petId")
+                    .type(RestParamType.path)
+                    .dataType("integer")
+                    .required(true)
+                    .description("Pet id to delete")
+                .endParam()
+                .to("direct:deletePet")
+            .post("/pet/{petId}/uploadImage")
+                .id("uploadFile")
+                .consumes("multipart/form-data")
+                .produces("application/json")
+                .param()
+                    .name("petId")
+                    .type(RestParamType.path)
+                    .dataType("integer")
+                    .required(true)
+                    .description("ID of pet to update")
+                .endParam()
+                .param()
+                    .name("additionalMetadata")
+                    .type(RestParamType.formData)
+                    .dataType("string")
+                    .required(false)
+                    .description("Additional data to pass to server")
+                .endParam()
+                .param()
+                    .name("file")
+                    .type(RestParamType.formData)
+                    .dataType("file")
+                    .required(false)
+                    .description("file to upload")
+                .endParam()
+                .to("direct:uploadFile")
+            .get("/store/inventory")
+                .id("getInventory")
+                .description("Returns a map of status codes to quantities")
+                .produces("application/json")
+                .to("direct:getInventory")
+            .post("/store/order")
+                .id("placeOrder")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("body")
+                    .type(RestParamType.body)
+                    .required(true)
+                    .description("order placed for purchasing the pet")
+                .endParam()
+                .to("direct:placeOrder")
+            .get("/store/order/{orderId}")
+                .id("getOrderById")
+                .description("For valid response try integer IDs with value >= 1 and <= 10. Other values will generated exceptions")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("orderId")
+                    .type(RestParamType.path)
+                    .dataType("integer")
+                    .required(true)
+                    .description("ID of pet that needs to be fetched")
+                .endParam()
+                .to("direct:getOrderById")
+            .delete("/store/order/{orderId}")
+                .id("deleteOrder")
+                .description("For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("orderId")
+                    .type(RestParamType.path)
+                    .dataType("integer")
+                    .required(true)
+                    .description("ID of the order that needs to be deleted")
+                .endParam()
+                .to("direct:deleteOrder")
+            .post("/user")
+                .id("createUser")
+                .description("This can only be done by the logged in user.")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("body")
+                    .type(RestParamType.body)
+                    .required(true)
+                    .description("Created user object")
+                .endParam()
+                .to("direct:createUser")
+            .post("/user/createWithArray")
+                .id("createUsersWithArrayInput")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("body")
+                    .type(RestParamType.body)
+                    .required(true)
+                    .description("List of user object")
+                .endParam()
+                .to("direct:createUsersWithArrayInput")
+            .post("/user/createWithList")
+                .id("createUsersWithListInput")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("body")
+                    .type(RestParamType.body)
+                    .required(true)
+                    .description("List of user object")
+                .endParam()
+                .to("direct:createUsersWithListInput")
+            .get("/user/login")
+                .id("loginUser")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("username")
+                    .type(RestParamType.query)
+                    .dataType("string")
+                    .required(true)
+                    .description("The user name for login")
+                .endParam()
+                .param()
+                    .name("password")
+                    .type(RestParamType.query)
+                    .dataType("string")
+                    .required(true)
+                    .description("The password for login in clear text")
+                .endParam()
+                .to("direct:loginUser")
+            .get("/user/logout")
+                .id("logoutUser")
+                .produces("application/xml,application/json")
+                .to("direct:logoutUser")
+            .get("/user/{username}")
+                .id("getUserByName")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("username")
+                    .type(RestParamType.path)
+                    .dataType("string")
+                    .required(true)
+                    .description("The name that needs to be fetched. Use user1 for testing. ")
+                .endParam()
+                .to("direct:getUserByName")
+            .put("/user/{username}")
+                .id("updateUser")
+                .description("This can only be done by the logged in user.")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("username")
+                    .type(RestParamType.path)
+                    .dataType("string")
+                    .required(true)
+                    .description("name that need to be updated")
+                .endParam()
+                .param()
+                    .name("body")
+                    .type(RestParamType.body)
+                    .required(true)
+                    .description("Updated user object")
+                .endParam()
+                .to("direct:updateUser")
+            .delete("/user/{username}")
+                .id("deleteUser")
+                .description("This can only be done by the logged in user.")
+                .produces("application/xml,application/json")
+                .param()
+                    .name("username")
+                    .type(RestParamType.path)
+                    .dataType("string")
+                    .required(true)
+                    .description("The name that needs to be deleted")
+                .endParam()
+                .to("direct:deleteUser");
+    }
+}
diff --git a/tooling/swagger-rest-dsl-generator/src/test/resources/SwaggerPetstoreWithRestComponentXml.txt b/tooling/swagger-rest-dsl-generator/src/test/resources/SwaggerPetstoreWithRestComponentXml.txt
new file mode 100644
index 0000000..bcc5cd5
--- /dev/null
+++ b/tooling/swagger-rest-dsl-generator/src/test/resources/SwaggerPetstoreWithRestComponentXml.txt
@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<rests xmlns="http://camel.apache.org/schema/spring">
+    <restConfiguration component="servlet"/>
+    <rest>
+        <put consumes="application/json,application/xml" id="updatePet" produces="application/xml,application/json" uri="/pet">
+            <param description="Pet object that needs to be added to the store" name="body" required="true" type="body"/>
+            <to uri="direct:updatePet"/>
+        </put>
+        <post consumes="application/json,application/xml" id="addPet" produces="application/xml,application/json" uri="/pet">
+            <param description="Pet object that needs to be added to the store" name="body" required="true" type="body"/>
+            <param dataType="boolean" defaultValue="false" description="Verbose data" name="verbose" required="false" type="query"/>
+            <to uri="direct:addPet"/>
+        </post>
+        <get id="findPetsByStatus" produces="application/xml,application/json" uri="/pet/findByStatus">
+            <description>Multiple status values can be provided with comma separated strings</description>
+            <param arrayType="string" collectionFormat="multi" dataType="array" description="Status values that need to be considered for filter" name="status" required="true" type="query"/>
+            <to uri="direct:findPetsByStatus"/>
+        </get>
+        <get id="findPetsByTags" produces="application/xml,application/json" uri="/pet/findByTags">
+            <description>Muliple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.</description>
+            <param arrayType="string" collectionFormat="multi" dataType="array" description="Tags to filter by" name="tags" required="true" type="query"/>
+            <to uri="direct:findPetsByTags"/>
+        </get>
+        <get id="getPetById" produces="application/xml,application/json" uri="/pet/{petId}">
+            <description>Returns a single pet</description>
+            <param dataType="integer" description="ID of pet to return" name="petId" required="true" type="path"/>
+            <to uri="direct:getPetById"/>
+        </get>
+        <post consumes="application/x-www-form-urlencoded" id="updatePetWithForm" produces="application/xml,application/json" uri="/pet/{petId}">
+            <param dataType="integer" description="ID of pet that needs to be updated" name="petId" required="true" type="path"/>
+            <param dataType="string" description="Updated name of the pet" name="name" required="false" type="formData"/>
+            <param dataType="string" description="Updated status of the pet" name="status" required="false" type="formData"/>
+            <to uri="direct:updatePetWithForm"/>
+        </post>
+        <delete id="deletePet" produces="application/xml,application/json" uri="/pet/{petId}">
+            <param dataType="string" name="api_key" required="false" type="header"/>
+            <param dataType="integer" description="Pet id to delete" name="petId" required="true" type="path"/>
+            <to uri="direct:deletePet"/>
+        </delete>
+        <post consumes="multipart/form-data" id="uploadFile" produces="application/json" uri="/pet/{petId}/uploadImage">
+            <param dataType="integer" description="ID of pet to update" name="petId" required="true" type="path"/>
+            <param dataType="string" description="Additional data to pass to server" name="additionalMetadata" required="false" type="formData"/>
+            <param dataType="file" description="file to upload" name="file" required="false" type="formData"/>
+            <to uri="direct:uploadFile"/>
+        </post>
+        <get id="getInventory" produces="application/json" uri="/store/inventory">
+            <description>Returns a map of status codes to quantities</description>
+            <to uri="direct:getInventory"/>
+        </get>
+        <post id="placeOrder" produces="application/xml,application/json" uri="/store/order">
+            <param description="order placed for purchasing the pet" name="body" required="true" type="body"/>
+            <to uri="direct:placeOrder"/>
+        </post>
+        <get id="getOrderById" produces="application/xml,application/json" uri="/store/order/{orderId}">
+            <description>For valid response try integer IDs with value &gt;= 1 and &lt;= 10. Other values will generated exceptions</description>
+            <param dataType="integer" description="ID of pet that needs to be fetched" name="orderId" required="true" type="path"/>
+            <to uri="direct:getOrderById"/>
+        </get>
+        <delete id="deleteOrder" produces="application/xml,application/json" uri="/store/order/{orderId}">
+            <description>For valid response try integer IDs with positive integer value. Negative or non-integer values will generate API errors</description>
+            <param dataType="integer" description="ID of the order that needs to be deleted" name="orderId" required="true" type="path"/>
+            <to uri="direct:deleteOrder"/>
+        </delete>
+        <post id="createUser" produces="application/xml,application/json" uri="/user">
+            <description>This can only be done by the logged in user.</description>
+            <param description="Created user object" name="body" required="true" type="body"/>
+            <to uri="direct:createUser"/>
+        </post>
+        <post id="createUsersWithArrayInput" produces="application/xml,application/json" uri="/user/createWithArray">
+            <param description="List of user object" name="body" required="true" type="body"/>
+            <to uri="direct:createUsersWithArrayInput"/>
+        </post>
+        <post id="createUsersWithListInput" produces="application/xml,application/json" uri="/user/createWithList">
+            <param description="List of user object" name="body" required="true" type="body"/>
+            <to uri="direct:createUsersWithListInput"/>
+        </post>
+        <get id="loginUser" produces="application/xml,application/json" uri="/user/login">
+            <param dataType="string" description="The user name for login" name="username" required="true" type="query"/>
+            <param dataType="string" description="The password for login in clear text" name="password" required="true" type="query"/>
+            <to uri="direct:loginUser"/>
+        </get>
+        <get id="logoutUser" produces="application/xml,application/json" uri="/user/logout">
+            <to uri="direct:logoutUser"/>
+        </get>
+        <get id="getUserByName" produces="application/xml,application/json" uri="/user/{username}">
+            <param dataType="string" description="The name that needs to be fetched. Use user1 for testing. " name="username" required="true" type="path"/>
+            <to uri="direct:getUserByName"/>
+        </get>
+        <put id="updateUser" produces="application/xml,application/json" uri="/user/{username}">
+            <description>This can only be done by the logged in user.</description>
+            <param dataType="string" description="name that need to be updated" name="username" required="true" type="path"/>
+            <param description="Updated user object" name="body" required="true" type="body"/>
+            <to uri="direct:updateUser"/>
+        </put>
+        <delete id="deleteUser" produces="application/xml,application/json" uri="/user/{username}">
+            <description>This can only be done by the logged in user.</description>
+            <param dataType="string" description="The name that needs to be deleted" name="username" required="true" type="path"/>
+            <to uri="direct:deleteUser"/>
+        </delete>
+    </rest>
+</rests>


[camel] 03/05: CAMEL-12841: camel-restdsl-swagger:generate - Add restConfiguration with common defaults

Posted by da...@apache.org.
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

commit 42a877d10541a1e02f099d7f3c7bb876fb8776c9
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Sep 30 09:34:45 2018 +0200

    CAMEL-12841: camel-restdsl-swagger:generate - Add restConfiguration with common defaults
---
 .../maven/camel-restdsl-swagger-plugin/src/it/simple-xml-dto/pom.xml | 5 +++++
 .../camel-restdsl-swagger-plugin/src/it/simple-xml-dto/verify.groovy | 4 ++++
 .../apache/camel/maven/generator/swagger/AbstractGenerateMojo.java   | 3 ++-
 .../java/org/apache/camel/maven/generator/swagger/GenerateMojo.java  | 1 +
 .../org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java    | 1 +
 .../java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java | 2 +-
 6 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-xml-dto/pom.xml b/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-xml-dto/pom.xml
index 9b4b5a3..a564b6a 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-xml-dto/pom.xml
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-xml-dto/pom.xml
@@ -45,6 +45,11 @@
       <version>@project.version@</version>
     </dependency>
     <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-jetty9</artifactId>
+      <version>@project.version@</version>
+    </dependency>
+    <dependency>
       <groupId>com.google.code.gson</groupId>
       <artifactId>gson</artifactId>
       <version>2.8.5</version>
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-xml-dto/verify.groovy b/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-xml-dto/verify.groovy
index 0efda6a..2144ea7 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-xml-dto/verify.groovy
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/it/simple-xml-dto/verify.groovy
@@ -19,6 +19,10 @@ def File restdsl = new File(basedir, "target/generated-sources/restdsl-swagger/c
 
 assert restdsl.exists()
 
+def String data = restdsl.text
+
+assert data.contains('<restConfiguration component="jetty"/>')
+
 def File restdto = new File(basedir, "target/generated-sources/swagger/src/main/java/io/swagger/client/model/Order.java")
 
 assert restdto.exists()
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/AbstractGenerateMojo.java b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/AbstractGenerateMojo.java
index cb3384d..73e74ca 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/AbstractGenerateMojo.java
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/AbstractGenerateMojo.java
@@ -48,7 +48,8 @@ import static org.twdata.maven.mojoexecutor.MojoExecutor.version;
 
 abstract class AbstractGenerateMojo extends AbstractMojo {
 
-    public static final String[] DEFAULT_REST_CONSUMER_COMPONENTS = new String[]{"coap", "netty-http", "netty4-http", "jetty", "restlet", "servlet", "spark-java", "undertow"};
+    // this list should be in priority order
+    public static final String[] DEFAULT_REST_CONSUMER_COMPONENTS = new String[]{"servlet", "undertow", "jetty", "restlet", "netty-http", "netty4-http", "spark-java", "coap"};
 
     @Parameter
     String destinationGenerator;
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java
index f0ffcec..bdafbbd 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java
@@ -89,6 +89,7 @@ public class GenerateMojo extends AbstractGenerateMojo {
 
         String comp = detectRestComponentFromClasspath();
         if (comp != null) {
+            getLog().info("Detected Camel Rest component: " + comp);
             generator.withRestComponent(comp);
         }
 
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java
index eca0d0e..f01d81d 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java
@@ -79,6 +79,7 @@ public class GenerateXmlMojo extends AbstractGenerateMojo {
 
         String comp = detectRestComponentFromClasspath();
         if (comp != null) {
+            getLog().info("Detected Camel Rest component: " + comp);
             generator.withRestComponent(comp);
         }
 
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java
index 50d6188..d57d340 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java
@@ -52,7 +52,7 @@ public class RestDslXmlGenerator extends RestDslGenerator<RestDslXmlGenerator> {
 
         if (restComponent != null) {
             String extra = "<restConfiguration component=\"" + restComponent + "\"/>";
-            xml = xml.replaceFirst("<rest>", extra + "\n<rest>");
+            xml = xml.replaceFirst("<rest>", extra + "\n    <rest>");
         }
 
         return xml;


[camel] 01/05: CAMEL-12841: Typo

Posted by da...@apache.org.
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

commit cc00df433fe3e6306c440ae0dd8540d76da632f6
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Sep 28 11:05:55 2018 +0200

    CAMEL-12841: Typo
---
 .../apache/camel/generator/swagger/RestDslSourceCodeGenerator.java    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
index 93559c6..bb38871 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
@@ -123,14 +123,14 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
             generatedAnnotation.addMember("date", "$S", generated());
         }
 
-        final TypeSpec generatedRouteBulder = TypeSpec.classBuilder(classNameToUse).superclass(RouteBuilder.class)
+        final TypeSpec generatedRouteBuilder = TypeSpec.classBuilder(classNameToUse).superclass(RouteBuilder.class)
             .addModifiers(Modifier.PUBLIC, Modifier.FINAL).addMethod(methodSpec)
             .addAnnotation(generatedAnnotation.build())
             .addJavadoc("Generated from Swagger specification by Camel REST DSL generator.\n").build();
 
         final String packageNameToUse = packageNameGenerator.apply(swagger);
 
-        return JavaFile.builder(packageNameToUse, generatedRouteBulder).indent(indent).build();
+        return JavaFile.builder(packageNameToUse, generatedRouteBuilder).indent(indent).build();
     }
 
     RestDslSourceCodeGenerator<T> withGeneratedTime(final Instant generated) {


[camel] 04/05: CAMEL-12841: camel-restdsl-swagger:generate - Add restConfiguration with common defaults

Posted by da...@apache.org.
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

commit a75b8ddbf6f926d13b41a538506c44c3bd50121d
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Sep 30 10:06:00 2018 +0200

    CAMEL-12841: camel-restdsl-swagger:generate - Add restConfiguration with common defaults
---
 .../main/docs/camel-restdsl-swagger-plugin.adoc    |  2 ++
 .../generator/swagger/AbstractGenerateMojo.java    | 15 ++++++++++-
 .../maven/generator/swagger/GenerateMojo.java      | 31 +++++++++++++++++++---
 .../maven/generator/swagger/GenerateXmlMojo.java   | 30 ++++++++++++++++++---
 4 files changed, 69 insertions(+), 9 deletions(-)

diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/docs/camel-restdsl-swagger-plugin.adoc b/tooling/maven/camel-restdsl-swagger-plugin/src/main/docs/camel-restdsl-swagger-plugin.adoc
index e7b5c0d..30f691a 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/docs/camel-restdsl-swagger-plugin.adoc
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/docs/camel-restdsl-swagger-plugin.adoc
@@ -38,6 +38,7 @@ in the `<configuration>` tag.
 | `indent` | `"&nbsp;&nbsp;&nbsp;&nbsp;"` | What identing character(s) to use, by default four spaces, you can use `\t` to signify tab character
 | `outputDirectory` | `generated-sources/restdsl-swagger` | Where to place the generated source file, by default `generated-sources/restdsl-swagger` within the project directory
 | `destinationGenerator` | | Fully qualified class name of the class that implements `org.apache.camel.generator.swagger.DestinationGenerator` interface for customizing destination endpoint
+| `restConfiguration` | `true` | Whether to include generation of the rest configuration with detected rest component to be used. |
 |========================================
 
 == camel-restdsl-swagger:generate-with-dto
@@ -102,6 +103,7 @@ in the `<configuration>` tag.
 | `fileName` | `camel-rest.xml` | The name of the XML file as output.
 | `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.swagger.DestinationGenerator` interface for customizing destination endpoint
+| `restConfiguration` | `true` | Whether to include generation of the rest configuration with detected rest component to be used. |
 |========================================
 
 == camel-restdsl-swagger:generate-xml-with-dto
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/AbstractGenerateMojo.java b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/AbstractGenerateMojo.java
index 73e74ca..bde21a3 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/AbstractGenerateMojo.java
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/AbstractGenerateMojo.java
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.Optional;
 
 import org.apache.camel.generator.swagger.DestinationGenerator;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.plugin.AbstractMojo;
@@ -66,6 +67,9 @@ abstract class AbstractGenerateMojo extends AbstractMojo {
     @Parameter(defaultValue = "${project.basedir}/src/spec/swagger.json", required = true)
     String specificationUri;
 
+    @Parameter(defaultValue = "true")
+    boolean restConfiguration;
+
     @Parameter(defaultValue = "2.3.1")
     String swaggerCodegenMavenPluginVersion;
 
@@ -179,7 +183,6 @@ abstract class AbstractGenerateMojo extends AbstractMojo {
                 pluginManager
             )
         );
-
     }
 
     protected String detectRestComponentFromClasspath() {
@@ -195,4 +198,14 @@ abstract class AbstractGenerateMojo extends AbstractMojo {
         return null;
     }
 
+    protected boolean detectSpringBootFromClasspath() {
+        return mavenProject.getDependencies().stream().anyMatch(d -> "org.springframework.boot".equals(d.getGroupId()));
+    }
+
+    protected String detectCamelVersionFromClasspath() {
+        return mavenProject.getDependencies().stream().filter(
+                d -> "org.apache.camel".equals(d.getGroupId()) && ObjectHelper.isNotEmpty(d.getVersion()))
+            .findFirst().map(Dependency::getVersion).orElse(null);
+    }
+
 }
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java
index bdafbbd..ef363fc 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java
@@ -87,10 +87,32 @@ public class GenerateMojo extends AbstractGenerateMojo {
             generator.withDestinationGenerator(destinationGeneratorObject);
         }
 
-        String comp = detectRestComponentFromClasspath();
-        if (comp != null) {
-            getLog().info("Detected Camel Rest component: " + comp);
-            generator.withRestComponent(comp);
+        if (restConfiguration) {
+            String comp = detectRestComponentFromClasspath();
+            if (comp != null) {
+                getLog().info("Detected Camel Rest component from classpath: " + comp);
+                generator.withRestComponent(comp);
+            } else {
+                // is it spring boot?
+                String aid = "camel-servlet";
+                if (detectSpringBootFromClasspath()) {
+                    aid = "camel-servlet-starter";
+                }
+
+                String dep = "\n\t\t<dependency>"
+                    + "\n\t\t\t<groupId>org.apache.camel</groupId>"
+                    + "\n\t\t\t<artifactId>" + aid + "</artifactId>";
+                String ver = detectCamelVersionFromClasspath();
+                if (ver != null) {
+                    dep += "\n\t\t\t<version>" + ver + "</version>";
+                }
+                dep += "\n\t\t</dependency>\n";
+
+                getLog().info("Cannot detect Rest component from classpath. Will use servlet as Rest component.");
+                getLog().info("Add the following dependency in the Maven pom.xml file:\n" + dep + "\n");
+
+                generator.withRestComponent("servlet");
+            }
         }
 
         final Path outputPath = new File(outputDirectory).toPath();
@@ -104,4 +126,5 @@ public class GenerateMojo extends AbstractGenerateMojo {
         }
     }
 
+
 }
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java
index f01d81d..3c7953c 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateXmlMojo.java
@@ -77,10 +77,32 @@ public class GenerateXmlMojo extends AbstractGenerateMojo {
             generator.withDestinationGenerator(destinationGeneratorObject);
         }
 
-        String comp = detectRestComponentFromClasspath();
-        if (comp != null) {
-            getLog().info("Detected Camel Rest component: " + comp);
-            generator.withRestComponent(comp);
+        if (restConfiguration) {
+            String comp = detectRestComponentFromClasspath();
+            if (comp != null) {
+                getLog().info("Detected Camel Rest component from classpath: " + comp);
+                generator.withRestComponent(comp);
+            } else {
+                // is it spring boot?
+                String aid = "camel-servlet";
+                if (detectSpringBootFromClasspath()) {
+                    aid = "camel-servlet-starter";
+                }
+
+                String dep = "\n\t\t<dependency>"
+                    + "\n\t\t\t<groupId>org.apache.camel</groupId>"
+                    + "\n\t\t\t<artifactId>" + aid + "</artifactId>";
+                String ver = detectCamelVersionFromClasspath();
+                if (ver != null) {
+                    dep += "\n\t\t\t<version>" + ver + "</version>";
+                }
+                dep += "\n\t\t</dependency>\n";
+
+                getLog().info("Cannot detect Rest component from classpath. Will use servlet as Rest component.");
+                getLog().info("Add the following dependency in the Maven pom.xml file:\n" + dep + "\n");
+
+                generator.withRestComponent("servlet");
+            }
         }
 
         try {


[camel] 05/05: CAMEL-12841: camel-restdsl-swagger:generate - Add restConfiguration with common defaults

Posted by da...@apache.org.
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

commit e84bbddaf77856d5f2cbe356464320052d37e01b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Sep 30 17:19:48 2018 +0200

    CAMEL-12841: camel-restdsl-swagger:generate - Add restConfiguration with common defaults
---
 .../main/docs/camel-restdsl-swagger-plugin.adoc    | 28 ++++++++++++++++++++++
 .../maven/generator/swagger/GenerateMojo.java      |  4 ++++
 .../camel/generator/swagger/RestDslGenerator.java  | 10 ++++++++
 .../swagger/RestDslSourceCodeGenerator.java        | 11 ++++++---
 4 files changed, 50 insertions(+), 3 deletions(-)

diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/docs/camel-restdsl-swagger-plugin.adoc b/tooling/maven/camel-restdsl-swagger-plugin/src/main/docs/camel-restdsl-swagger-plugin.adoc
index 30f691a..f8f3ded 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/docs/camel-restdsl-swagger-plugin.adoc
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/docs/camel-restdsl-swagger-plugin.adoc
@@ -16,6 +16,34 @@ The Camel REST DSL Swagger Maven Plugin supports the following goals
  XML source code from Swagger specification  and with DTO model
  classes generated via the swagger-codegen-maven-plugin.
 
+== Adding plugin to Maven pom.xml
+
+This plugin can be added to your Maven pom.xml file by adding it to the `<plugins>` section,
+for example in a Spring Boot application:
+
+[source,xml]
+----
+<build>
+  <plugins>
+    <plugin>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-maven-plugin</artifactId>
+    </plugin>
+
+    <plugin>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-restdsl-swagger-plugin</artifactId>
+      <version>2.23.0</version>
+    </plugin>
+
+  </plugins>
+</build>
+----
+
+The plugin can then be executed via its prefix `camel-restdsl-swagger` as shown
+
+    $mvn camel-restdsl-swagger generate
+
 == camel-restdsl-swagger:generate
 
 The `camel-restdsl-swagger:generate` goal of the Camel REST DSL
diff --git a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java
index ef363fc..d8e62ed 100644
--- a/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java
+++ b/tooling/maven/camel-restdsl-swagger-plugin/src/main/java/org/apache/camel/maven/generator/swagger/GenerateMojo.java
@@ -115,6 +115,10 @@ public class GenerateMojo extends AbstractGenerateMojo {
             }
         }
 
+        if (detectSpringBootFromClasspath()) {
+            generator.asSpringComponent();
+        }
+
         final Path outputPath = new File(outputDirectory).toPath();
 
         try {
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslGenerator.java
index df32d5f..cc21ec6 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslGenerator.java
@@ -35,6 +35,7 @@ public abstract class RestDslGenerator<G> {
     DestinationGenerator destinationGenerator = new DirectToOperationId();
     OperationFilter filter = new OperationFilter();
     String restComponent;
+    boolean springComponent;
 
     RestDslGenerator(final Swagger swagger) {
         this.swagger = notNull(swagger, "swagger");
@@ -81,6 +82,15 @@ public abstract class RestDslGenerator<G> {
         return that;
     }
 
+    public G asSpringComponent() {
+        this.springComponent = true;
+
+        @SuppressWarnings("unchecked")
+        final G that = (G) this;
+
+        return that;
+    }
+
     public static RestDslSourceCodeGenerator<Appendable> toAppendable(final Swagger swagger) {
         return new AppendableGenerator(swagger);
     }
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
index 67150a2..c534e66 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslSourceCodeGenerator.java
@@ -25,6 +25,7 @@ import javax.annotation.Generated;
 import javax.lang.model.element.Modifier;
 
 import com.squareup.javapoet.AnnotationSpec;
+import com.squareup.javapoet.ClassName;
 import com.squareup.javapoet.JavaFile;
 import com.squareup.javapoet.MethodSpec;
 import com.squareup.javapoet.TypeSpec;
@@ -123,15 +124,19 @@ public abstract class RestDslSourceCodeGenerator<T> extends RestDslGenerator<Res
 
         final AnnotationSpec.Builder generatedAnnotation = AnnotationSpec.builder(Generated.class).addMember("value",
             "$S", getClass().getName());
-
         if (sourceCodeTimestamps) {
             generatedAnnotation.addMember("date", "$S", generated());
         }
 
-        final TypeSpec generatedRouteBuilder = TypeSpec.classBuilder(classNameToUse).superclass(RouteBuilder.class)
+        TypeSpec.Builder builder = TypeSpec.classBuilder(classNameToUse).superclass(RouteBuilder.class)
             .addModifiers(Modifier.PUBLIC, Modifier.FINAL).addMethod(methodSpec)
             .addAnnotation(generatedAnnotation.build())
-            .addJavadoc("Generated from Swagger specification by Camel REST DSL generator.\n").build();
+            .addJavadoc("Generated from Swagger specification by Camel REST DSL generator.\n");
+        if (springComponent) {
+            final AnnotationSpec.Builder springAnnotation = AnnotationSpec.builder(ClassName.bestGuess("org.springframework.stereotype.Component"));
+            builder.addAnnotation(springAnnotation.build());
+        }
+        TypeSpec generatedRouteBuilder = builder.build();
 
         final String packageNameToUse = packageNameGenerator.apply(swagger);