You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zb...@apache.org on 2021/05/11 23:59:15 UTC

[camel-quarkus] 17/24: Adapt to latest Camel API changes

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

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

commit 29ad7937f119e912190ff27bb89ed503aaa0653d
Author: James Netherton <ja...@gmail.com>
AuthorDate: Thu May 6 11:53:25 2021 +0100

    Adapt to latest Camel API changes
---
 .../reference/components/azure-cosmosdb.adoc       |  1 +
 .../partials/reference/components/spring-jdbc.adoc |  1 +
 .../org/apache/camel/quarkus/core/BaseModel.java   | 36 +++++++++++++++++++---
 .../camel/quarkus/core/FastCamelContext.java       |  6 ++++
 4 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/docs/modules/ROOT/partials/reference/components/azure-cosmosdb.adoc b/docs/modules/ROOT/partials/reference/components/azure-cosmosdb.adoc
new file mode 100644
index 0000000..a509c1d
--- /dev/null
+++ b/docs/modules/ROOT/partials/reference/components/azure-cosmosdb.adoc
@@ -0,0 +1 @@
+// Empty partial for a Camel bit unsupported by Camel Quarkus to avoid warnings when this file is included from a Camel page
diff --git a/docs/modules/ROOT/partials/reference/components/spring-jdbc.adoc b/docs/modules/ROOT/partials/reference/components/spring-jdbc.adoc
new file mode 100644
index 0000000..a509c1d
--- /dev/null
+++ b/docs/modules/ROOT/partials/reference/components/spring-jdbc.adoc
@@ -0,0 +1 @@
+// Empty partial for a Camel bit unsupported by Camel Quarkus to avoid warnings when this file is included from a Camel page
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java
index ddb0d15..c75c809 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/BaseModel.java
@@ -29,8 +29,11 @@ import java.util.function.Function;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.FailedToCreateRouteFromTemplateException;
+import org.apache.camel.RouteTemplateContext;
 import org.apache.camel.impl.DefaultModelReifierFactory;
 import org.apache.camel.model.DataFormatDefinition;
+import org.apache.camel.model.DefaultRouteTemplateContext;
 import org.apache.camel.model.FaultToleranceConfigurationDefinition;
 import org.apache.camel.model.HystrixConfigurationDefinition;
 import org.apache.camel.model.Model;
@@ -40,6 +43,7 @@ import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ProcessorDefinitionHelper;
 import org.apache.camel.model.Resilience4jConfigurationDefinition;
 import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.RouteDefinitionHelper;
 import org.apache.camel.model.RouteFilters;
 import org.apache.camel.model.RouteTemplateDefinition;
 import org.apache.camel.model.RouteTemplateParameterDefinition;
@@ -191,8 +195,16 @@ public abstract class BaseModel implements Model {
     }
 
     @Override
-    public String addRouteFromTemplate(final String routeId, final String routeTemplateId, final Map<String, Object> parameters)
-            throws Exception {
+    public String addRouteFromTemplate(final String routeId, final String routeTemplateId, final Map<String, Object> parameters) throws Exception {
+        RouteTemplateContext rtc = new DefaultRouteTemplateContext(camelContext);
+        if (parameters != null) {
+            parameters.forEach(rtc::setParameter);
+        }
+        return addRouteFromTemplate(routeId, routeTemplateId, rtc);
+    }
+
+    @Override
+    public String addRouteFromTemplate(String routeId, String routeTemplateId, RouteTemplateContext routeTemplateContext) throws Exception {
         RouteTemplateDefinition target = null;
         for (RouteTemplateDefinition def : routeTemplateDefinitions) {
             if (routeTemplateId.equals(def.getId())) {
@@ -204,6 +216,11 @@ public abstract class BaseModel implements Model {
             throw new IllegalArgumentException("Cannot find RouteTemplate with id " + routeTemplateId);
         }
 
+        // apply configurer if any present
+        if (target.getConfigurer() != null) {
+            target.getConfigurer().accept(routeTemplateContext);
+        }
+
         final Map<String, Object> prop = new HashMap<>();
         // include default values first from the template (and validate that we have inputs for all required parameters)
         if (target.getTemplateParameters() != null) {
@@ -214,7 +231,7 @@ public abstract class BaseModel implements Model {
                     prop.put(temp.getName(), temp.getDefaultValue());
                 } else {
                     // this is a required parameter do we have that as input
-                    if (!parameters.containsKey(temp.getName())) {
+                    if (!routeTemplateContext.getParameters().containsKey(temp.getName())) {
                         templatesBuilder.add(temp.getName());
                     }
                 }
@@ -227,8 +244,8 @@ public abstract class BaseModel implements Model {
         }
 
         // then override with user parameters
-        if (parameters != null) {
-            prop.putAll(parameters);
+        if (routeTemplateContext.getParameters() != null) {
+            prop.putAll(routeTemplateContext.getParameters());
         }
 
         RouteTemplateDefinition.Converter converter = RouteTemplateDefinition.Converter.DEFAULT_CONVERTER;
@@ -254,6 +271,15 @@ public abstract class BaseModel implements Model {
             def.setId(routeId);
         }
         def.setTemplateParameters(prop);
+        def.setRouteTemplateContext(routeTemplateContext);
+
+        // assign ids to the routes and validate that the id's are all unique
+        String duplicate = RouteDefinitionHelper.validateUniqueIds(def, routeDefinitions);
+        if (duplicate != null) {
+            throw new FailedToCreateRouteFromTemplateException(
+                    routeId, routeTemplateId,
+                    "duplicate id detected: " + duplicate + ". Please correct ids to be unique among all your routes.");
+        }
         addRouteDefinition(def);
         return def.getId();
     }
diff --git a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
index a7ba15d..04e5ad7 100644
--- a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
+++ b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/FastCamelContext.java
@@ -34,6 +34,7 @@ import org.apache.camel.FailedToStartRouteException;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
+import org.apache.camel.RouteTemplateContext;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.ValueHolder;
 import org.apache.camel.builder.AdviceWith;
@@ -223,6 +224,11 @@ public class FastCamelContext extends AbstractCamelContext implements CatalogCam
     }
 
     @Override
+    public String addRouteFromTemplate(String routeId, String routeTemplateId, RouteTemplateContext routeTemplateContext) throws Exception {
+        return model.addRouteFromTemplate(routeId, routeTemplateId, routeTemplateContext);
+    }
+
+    @Override
     protected Registry createRegistry() {
         throw new UnsupportedOperationException();
     }