You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2020/03/17 08:18:35 UTC

[camel-quarkus] 02/03: Use the cq-maven-plugin instead of quarkus-maven-plugin for generating new extensions

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

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

commit 93a002d54b1ac4a668b1d71fca45030f2387020d
Author: Peter Palaga <pp...@redhat.com>
AuthorDate: Mon Mar 16 16:42:21 2020 +0100

    Use the cq-maven-plugin instead of quarkus-maven-plugin for generating new extensions
---
 docs/modules/ROOT/pages/contributor-guide.adoc     | 29 +++++---------
 extensions/pom.xml                                 | 29 --------------
 pom.xml                                            | 23 +++++++++++
 tooling/create-extension-templates/IT.java         |  2 +-
 tooling/create-extension-templates/Processor.java  |  2 +-
 tooling/create-extension-templates/Test.java       | 29 ++++++++++----
 .../create-extension-templates/TestResource.java   | 45 +++++++++++++++++++++-
 .../integration-test-pom.xml                       |  8 ++--
 .../quarkus-extension.yaml                         | 35 +++++++++++++++++
 tooling/create-extension-templates/runtime-pom.xml |  1 +
 10 files changed, 140 insertions(+), 63 deletions(-)

diff --git a/docs/modules/ROOT/pages/contributor-guide.adoc b/docs/modules/ROOT/pages/contributor-guide.adoc
index a0f5ebb..8e61d00 100644
--- a/docs/modules/ROOT/pages/contributor-guide.adoc
+++ b/docs/modules/ROOT/pages/contributor-guide.adoc
@@ -65,21 +65,12 @@ $ mvn clean install -Pnative
 [source,shell]
 ----
 $ cd camel-quarkus
-$ cd extensions
-$ mvn quarkus:create-extension -N \
-    -Dquarkus.artifactIdBase=foo-abc \
-    -Dquarkus.nameBase="Foo ABC" \
-    -Dquarkus.additionalRuntimeDependencies="org.apache.camel:camel-@{quarkus.artifactIdBase}:@{$}{camel.version}"
+$ mvn cq:create -N -Dcq.artifactIdBase=foo-abc
 ----
 +
 where:
 +
 * `foo-abc` is the unique part of the new extension's `artifactId` without the `camel-quarkus-` prefix
-* `Foo ABC` is the unique part of the artifact name without the `Camel Quarkus :: ` prefix
-* `additionalRuntimeDependencies` adds the `org.apache.camel:camel-foo-abc` dependency to the runtime
-  BOM (Bill of Materials) and to the runtime module.
-+
-The `artifactId` and artifact `name` prefixes and suffixes are added automatically by the plugin.
 +
 The above sequence of commands does the following:
 * It creates three new Maven modules under the `extensions` directory: `camel-quarkus-foo-abc-parent`, `camel-quarkus-foo-abc`
@@ -93,16 +84,14 @@ The above sequence of commands does the following:
 +
 A compilation performed immediately after generating the modules should pass flawlessly but running the tests will fail
 because the test project needs to get finished. You need to build `poms/bom` and `poms/bom-deployment` one time first.
-+
-TIP: The `nameBase` parameter of the mojo is optional. If you do not specify it on the command line, the plugin will
-derive it from `artifactIdBase` by replacing dashes with spaces and capitalizing the first letter of each token. So you
-may consider omitting explicit `nameBase` in some cases.
-
-6. Create `extensions/foo-abc/runtime/src/main/resources/META-INF/quarkus-extension.yaml`. Consult other existing
-   extensions for the content of the file.
 
-7. Complete the extension by adding dependencies to the runtime module. You probably want to add a dependency on
-   on the given Camel component - in our case `org.apache.camel:camel-foo-abc`.
+6. Review the generated
+   `extensions/foo-abc/runtime/src/main/resources/META-INF/quarkus-extension.yaml` file. If you
+   see improper description or keyword,
+   https://issues.apache.org/jira/secure/CreateIssue!default.jspa[file a new Camel issue] and ask to fix the metadata
+   for the given Camel component.
+7. Review the dependencies in the generate runtime and deployment modules. In case the given library is supported by
+   Quarkus, you may want to add a dependency on the corresponding Quarkus extension.
 
 8. Complete the integration test module under `integration-tests/foo-abc`. Make sure you test both the consumer and the
    producer of the component (if the component supports both). Make sure the tests are passing both in the JVM mode
@@ -113,7 +102,7 @@ may consider omitting explicit `nameBase` in some cases.
 
 10. If the usage of your new extension differs from the usage of the given Camel component, please add an AsciiDoc page
    under `docs/modules/ROOT/pages/extensions` and document the differences and Quarkus specific configuration options
-   there. For our imaginary Camel component `foo-abc` the complete path of the page would be
+   there. For our imaginary Camel component `foo-abc` the path of the page would be
    `docs/modules/ROOT/pages/extensions/foo-abc.adoc`. After completing the page, run `mvn clean install -DskipTests`
    from the root of the source tree to add your extension to the autogenerated list of extensions.
 
diff --git a/extensions/pom.xml b/extensions/pom.xml
index f3f3aec..a42483d 100644
--- a/extensions/pom.xml
+++ b/extensions/pom.xml
@@ -127,33 +127,4 @@
         <module>zipfile</module>
     </modules>
 
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>io.quarkus</groupId>
-                <artifactId>quarkus-maven-plugin</artifactId>
-                <inherited>false</inherited>
-                <!-- Settings for stubbing new extensions. E.g. to add a new extension to support an imaginary
-                     Camel Foo ABC component, you would run
-
-                       mvn quarkus:create-extension -N -Dquarkus.artifactIdBase=foo-abc -Dquarkus.nameBase="Foo ABC" -Dquarkus.additionalRuntimeDependencies="org.apache.camel:camel-@{quarkus.artifactIdBase}:@{$}{camel.version}"
-
-                     -Dquarkus.nameBase is optional. If you do not specify it, the plugin will derive it from
-                     artifactIdBase by replacing dashes with spaces and capitalizing the first letter of each token.
-                -->
-                <configuration>
-                    <artifactIdPrefix>camel-quarkus-</artifactIdPrefix>
-                    <namePrefix xml:space="preserve">Camel Quarkus :: </namePrefix>
-                    <nameSegmentDelimiter xml:space="preserve"> :: </nameSegmentDelimiter>
-                    <javaPackageInfix>component</javaPackageInfix>
-                    <templatesUriBase>file:///${project.basedir}/../tooling/create-extension-templates</templatesUriBase>
-                    <runtimeBomPath>../poms/bom/pom.xml</runtimeBomPath>
-                    <deploymentBomPath>../poms/bom-deployment/pom.xml</deploymentBomPath>
-                    <bomEntryVersion>@{camel-quarkus.version}</bomEntryVersion>
-                    <itestParentPath>../integration-tests/pom.xml</itestParentPath>
-                </configuration>
-            </plugin>
-        </plugins>
-    </build>
-
 </project>
diff --git a/pom.xml b/pom.xml
index 84cdb6f..8d48ddc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -86,6 +86,7 @@
         <maven-dependency-plugin.version>3.1.1</maven-dependency-plugin.version>
         <!-- NOTE: We pin to this version due to https://github.com/apache/camel-quarkus/issues/723 -->
         <maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
+        <cq-plugin.version>0.0.1</cq-plugin.version>
 
         <!-- maven-release-plugin -->
         <tagNameFormat>@{project.version}</tagNameFormat>
@@ -228,6 +229,11 @@
                     <artifactId>quarkus-maven-plugin</artifactId>
                     <version>${quarkus.version}</version>
                 </plugin>
+                <plugin>
+                    <groupId>org.l2x6.cq</groupId>
+                    <artifactId>cq-maven-plugin</artifactId>
+                    <version>${cq-plugin.version}</version>
+                </plugin>
 
                 <plugin>
                     <groupId>org.codehaus.gmaven</groupId>
@@ -303,6 +309,23 @@
             </plugins>
         </pluginManagement>
 
+        <plugins>
+            <plugin>
+                <groupId>org.l2x6.cq</groupId>
+                <artifactId>cq-maven-plugin</artifactId>
+                <inherited>false</inherited>
+                <!-- Settings for stubbing new extensions. E.g. to add a new extension to support an imaginary
+                     Camel Foo ABC component, you would run
+
+                       mvn cq:create -N -Dcq.artifactIdBase=foo-abc
+
+                -->
+                <configuration>
+                    <templatesUriBase>file:///${project.basedir}/tooling/create-extension-templates</templatesUriBase>
+                </configuration>
+            </plugin>
+        </plugins>
+
     </build>
 
     <profiles>
diff --git a/tooling/create-extension-templates/IT.java b/tooling/create-extension-templates/IT.java
index 9012813..e8ebb7b 100644
--- a/tooling/create-extension-templates/IT.java
+++ b/tooling/create-extension-templates/IT.java
@@ -19,6 +19,6 @@ package [=javaPackageBase].it;
 import io.quarkus.test.junit.NativeImageTest;
 
 @NativeImageTest
-class [=artifactIdBaseCamelCase]IT extends [=artifactIdBaseCamelCase]Test {
+class [=toCapCamelCase(artifactIdBase)]IT extends [=toCapCamelCase(artifactIdBase)]Test {
 
 }
diff --git a/tooling/create-extension-templates/Processor.java b/tooling/create-extension-templates/Processor.java
index 06e13a3..03753fc 100644
--- a/tooling/create-extension-templates/Processor.java
+++ b/tooling/create-extension-templates/Processor.java
@@ -19,7 +19,7 @@ package [=javaPackageBase].deployment;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
 
-class [=artifactIdBaseCamelCase]Processor {
+class [=toCapCamelCase(artifactIdBase)]Processor {
 
     private static final String FEATURE = "camel-[=artifactIdBase]";
 
diff --git a/tooling/create-extension-templates/Test.java b/tooling/create-extension-templates/Test.java
index 0f5494f..fabd474 100644
--- a/tooling/create-extension-templates/Test.java
+++ b/tooling/create-extension-templates/Test.java
@@ -16,8 +16,6 @@
  */
 package [=javaPackageBase].it;
 
-import java.util.UUID;
-
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import io.restassured.http.ContentType;
@@ -26,18 +24,35 @@ import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
 @QuarkusTest
-class [=artifactIdBaseCamelCase]Test {
+class [=toCapCamelCase(artifactIdBase)]Test {
 
+[#if nativeSupported ]
     @Test
     public void test() {
-        final String msg = UUID.randomUUID().toString().replace("-", "");
+        final String msg = java.util.UUID.randomUUID().toString().replace("-", "");
         RestAssured.given() //
-            .contentType(ContentType.TEXT).body(msg).post("/[=artifactIdBase]/post") //
-            .then().statusCode(201);
+                .contentType(ContentType.TEXT)
+                .body(msg)
+                .post("/[=artifactIdBase]/post") //
+                .then()
+                .statusCode(201);
 
         Assertions.fail("Add some assertions to " + getClass().getName());
 
-        RestAssured.get("/[=artifactIdBase]/get").then().statusCode(200);
+        RestAssured.get("/[=artifactIdBase]/get")
+                .then()
+                .statusCode(200);
+    }
+[#else]
+[#list models as model]
+    @Test
+    public void load[=toCapCamelCase(model.kind)][=toCapCamelCase(model.scheme)]() {
+        /* A simple autogenerated test */
+        RestAssured.get("/[=artifactIdBase]/load/[=model.kind]/[=model.scheme]")
+                .then()
+                .statusCode(200);
     }
+[/#list]
+[/#if]
 
 }
diff --git a/tooling/create-extension-templates/TestResource.java b/tooling/create-extension-templates/TestResource.java
index e7ad910..0ddba52 100644
--- a/tooling/create-extension-templates/TestResource.java
+++ b/tooling/create-extension-templates/TestResource.java
@@ -28,16 +28,21 @@ import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+[#if nativeSupported ]
 import org.apache.camel.ConsumerTemplate;
 import org.apache.camel.ProducerTemplate;
+[#else]
+import org.apache.camel.CamelContext;
+[/#if]
 import org.jboss.logging.Logger;
 
 @Path("/[=artifactIdBase]")
 @ApplicationScoped
-public class [=artifactIdBaseCamelCase]Resource {
+public class [=toCapCamelCase(artifactIdBase)]Resource {
 
-    private static final Logger LOG = Logger.getLogger([=artifactIdBaseCamelCase]Resource.class);
+    private static final Logger LOG = Logger.getLogger([=toCapCamelCase(artifactIdBase)]Resource.class);
 
+[#if nativeSupported ]
     @Inject
     ProducerTemplate producerTemplate;
 
@@ -66,4 +71,40 @@ public class [=artifactIdBaseCamelCase]Resource {
                 .entity(response)
                 .build();
     }
+[#else]
+[#list models as m]
+    private static final String [=toSnakeCase(m.kind)?upper_case]_[=toSnakeCase(m.scheme)?upper_case] = "[=m.scheme]";
+[/#list]
+    @Inject
+    CamelContext context;
+
+[#list models as model]
+    @Path("/load/[=model.kind]/[=model.scheme]")
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public Response load[=toCapCamelCase(model.kind)][=toCapCamelCase(model.scheme)]() throws Exception {
+        /* This is an autogenerated test */
+[#if kind == "other" ]
+        /* No way to test a Camel artifact of kind "other" */
+        return Response.ok().build();
+[#else]
+[#if kind == "component" ]
+[#assign contextMethod = "getComponent"]
+[#elseif kind == "language" ]
+[#assign contextMethod = "resolveLanguage"]
+[#elseif kind == "dataformat" ]
+[#assign contextMethod = "createDataFormat"]
+[#else]
+[#stop "Unexpected Camel artifact kind " + kind ]
+[/#if]
+[#assign schemeVarName = "[=toSnakeCase(model.kind)?upper_case]_[=toSnakeCase(model.scheme)?upper_case]"]
+        if (context.[=contextMethod]([=schemeVarName]) != null) {
+            return Response.ok().build();
+        }
+        LOG.warnf("Could not load [%s] from the Camel context", [=schemeVarName]);
+        return Response.status(500, [=schemeVarName] + " could not be loaded from the Camel context").build();
+[/#if]
+    }
+[/#list]
+[/#if]
 }
diff --git a/tooling/create-extension-templates/integration-test-pom.xml b/tooling/create-extension-templates/integration-test-pom.xml
index 56b3006..b7bce74 100644
--- a/tooling/create-extension-templates/integration-test-pom.xml
+++ b/tooling/create-extension-templates/integration-test-pom.xml
@@ -23,12 +23,12 @@
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.apache.camel.quarkus</groupId>
-        <artifactId>camel-quarkus-integration-tests</artifactId>
+        <artifactId>[=itestParentArtifactId]</artifactId>
         <version>[=version]</version>
     </parent>
 
-    <artifactId>camel-quarkus-integration-test-[=artifactIdBase]</artifactId>
-    <name>Camel Quarkus :: Integration Tests :: [=nameBase]</name>
+    <artifactId>camel-quarkus-[#if nativeSupported]integration-test-[=artifactIdBase][#else][=artifactIdBase]-integration-test[/#if]</artifactId>
+    <name>Camel Quarkus :: [#if nativeSupported]Integration Tests :: [=nameBase][#else][=nameBase] :: Integration Test[/#if]</name>
     <description>Integration tests for Camel Quarkus [=nameBase] extension</description>
 
     <dependencies>
@@ -69,6 +69,7 @@
             </plugin>
         </plugins>
     </build>
+[#if nativeSupported ]
 
     <profiles>
         <profile>
@@ -100,4 +101,5 @@
         </profile>
     </profiles>
 
+[/#if]
 </project>
diff --git a/tooling/create-extension-templates/quarkus-extension.yaml b/tooling/create-extension-templates/quarkus-extension.yaml
new file mode 100644
index 0000000..c0c67f2
--- /dev/null
+++ b/tooling/create-extension-templates/quarkus-extension.yaml
@@ -0,0 +1,35 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+---
+name: "[=nameBase]"
+description: "[=description]"
+metadata:
+[#if !nativeSupported ]  unlisted: true
+[/#if]
+[#if keywords?size > 0 ]  keywords:
+[#list keywords as keyword]
+  - "[=keyword]"
+[/#list]
+[/#if]
+  guide: "[=guideUrl]"
+[#if categories?size > 0 ]  categories:
+[#list categories as category]
+  - "[=category]"
+[/#list]
+[/#if]
+  status: "[=nativeSupported?then('stable', 'preview')]"
diff --git a/tooling/create-extension-templates/runtime-pom.xml b/tooling/create-extension-templates/runtime-pom.xml
index 1c28b30..dcb11e7 100644
--- a/tooling/create-extension-templates/runtime-pom.xml
+++ b/tooling/create-extension-templates/runtime-pom.xml
@@ -30,6 +30,7 @@
 
     <artifactId>[=artifactId]</artifactId>
     <name>[=namePrefix][=nameBase][=nameSegmentDelimiter]Runtime</name>
+    <description>[=description]</description>
 
     <properties>
         <firstVersion>1.0.0-M6</firstVersion>