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

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

commit dfae5bb564373e2c2b2783144c0b24fcb201bd36
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Tue Dec 7 11:55:03 2021 +0100

    CAMEL-17261: camel-yaml-dsl - Add support for loading Camel K 
KameletBinding file. WIP.
---
 .../errorhandler/RedeliveryPolicyConfigurer.java   | 187 +++++++++++++++++++++
 ...e.camel.processor.errorhandler.RedeliveryPolicy |   2 +
 .../processor/errorhandler/RedeliveryPolicy.java   |   2 +
 .../dsl/yaml/deserializers/ModelDeserializers.java |  37 ++++
 .../deserializers/ModelDeserializersResolver.java  |   3 +
 .../src/generated/resources/camel-yaml-dsl.json    |   9 +
 .../camel/dsl/yaml/YamlRoutesBuilderLoader.java    |  13 +-
 7 files changed, 248 insertions(+), 5 deletions(-)

diff --git 
a/core/camel-core-processor/src/generated/java/org/apache/camel/processor/errorhandler/RedeliveryPolicyConfigurer.java
 
b/core/camel-core-processor/src/generated/java/org/apache/camel/processor/errorhandler/RedeliveryPolicyConfigurer.java
new file mode 100644
index 0000000..830bf4d
--- /dev/null
+++ 
b/core/camel-core-processor/src/generated/java/org/apache/camel/processor/errorhandler/RedeliveryPolicyConfigurer.java
@@ -0,0 +1,187 @@
+/* Generated by camel build tools - do NOT edit this file! */
+package org.apache.camel.processor.errorhandler;
+
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.spi.ConfigurerStrategy;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.util.CaseInsensitiveMap;
+import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
+
+/**
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@SuppressWarnings("unchecked")
+public class RedeliveryPolicyConfigurer extends 
org.apache.camel.support.component.PropertyConfigurerSupport implements 
GeneratedPropertyConfigurer, PropertyConfigurerGetter {
+
+    @Override
+    public boolean configure(CamelContext camelContext, Object obj, String 
name, Object value, boolean ignoreCase) {
+        org.apache.camel.processor.errorhandler.RedeliveryPolicy target = 
(org.apache.camel.processor.errorhandler.RedeliveryPolicy) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "allowredeliverywhilestopping":
+        case "AllowRedeliveryWhileStopping": 
target.setAllowRedeliveryWhileStopping(property(camelContext, boolean.class, 
value)); return true;
+        case "asyncdelayedredelivery":
+        case "AsyncDelayedRedelivery": 
target.setAsyncDelayedRedelivery(property(camelContext, boolean.class, value)); 
return true;
+        case "backoffmultiplier":
+        case "BackOffMultiplier": 
target.setBackOffMultiplier(property(camelContext, double.class, value)); 
return true;
+        case "collisionavoidancefactor":
+        case "CollisionAvoidanceFactor": 
target.setCollisionAvoidanceFactor(property(camelContext, double.class, 
value)); return true;
+        case "collisionavoidancepercent":
+        case "CollisionAvoidancePercent": 
target.setCollisionAvoidancePercent(property(camelContext, double.class, 
value)); return true;
+        case "delaypattern":
+        case "DelayPattern": target.setDelayPattern(property(camelContext, 
java.lang.String.class, value)); return true;
+        case "exchangeformatterref":
+        case "ExchangeFormatterRef": 
target.setExchangeFormatterRef(property(camelContext, java.lang.String.class, 
value)); return true;
+        case "logcontinued":
+        case "LogContinued": target.setLogContinued(property(camelContext, 
boolean.class, value)); return true;
+        case "logexhausted":
+        case "LogExhausted": target.setLogExhausted(property(camelContext, 
boolean.class, value)); return true;
+        case "logexhaustedmessagebody":
+        case "LogExhaustedMessageBody": 
target.setLogExhaustedMessageBody(property(camelContext, 
java.lang.Boolean.class, value)); return true;
+        case "logexhaustedmessagehistory":
+        case "LogExhaustedMessageHistory": 
target.setLogExhaustedMessageHistory(property(camelContext, boolean.class, 
value)); return true;
+        case "loghandled":
+        case "LogHandled": target.setLogHandled(property(camelContext, 
boolean.class, value)); return true;
+        case "lognewexception":
+        case "LogNewException": 
target.setLogNewException(property(camelContext, boolean.class, value)); return 
true;
+        case "logretryattempted":
+        case "LogRetryAttempted": 
target.setLogRetryAttempted(property(camelContext, boolean.class, value)); 
return true;
+        case "logretrystacktrace":
+        case "LogRetryStackTrace": 
target.setLogRetryStackTrace(property(camelContext, boolean.class, value)); 
return true;
+        case "logstacktrace":
+        case "LogStackTrace": target.setLogStackTrace(property(camelContext, 
boolean.class, value)); return true;
+        case "maximumredeliveries":
+        case "MaximumRedeliveries": 
target.setMaximumRedeliveries(property(camelContext, int.class, value)); return 
true;
+        case "maximumredeliverydelay":
+        case "MaximumRedeliveryDelay": 
target.setMaximumRedeliveryDelay(property(camelContext, long.class, value)); 
return true;
+        case "redeliverydelay":
+        case "RedeliveryDelay": 
target.setRedeliveryDelay(property(camelContext, long.class, value)); return 
true;
+        case "retriesexhaustedloglevel":
+        case "RetriesExhaustedLogLevel": 
target.setRetriesExhaustedLogLevel(property(camelContext, 
org.apache.camel.LoggingLevel.class, value)); return true;
+        case "retryattemptedloginterval":
+        case "RetryAttemptedLogInterval": 
target.setRetryAttemptedLogInterval(property(camelContext, int.class, value)); 
return true;
+        case "retryattemptedloglevel":
+        case "RetryAttemptedLogLevel": 
target.setRetryAttemptedLogLevel(property(camelContext, 
org.apache.camel.LoggingLevel.class, value)); return true;
+        case "usecollisionavoidance":
+        case "UseCollisionAvoidance": 
target.setUseCollisionAvoidance(property(camelContext, boolean.class, value)); 
return true;
+        case "useexponentialbackoff":
+        case "UseExponentialBackOff": 
target.setUseExponentialBackOff(property(camelContext, boolean.class, value)); 
return true;
+        default: return false;
+        }
+    }
+
+    @Override
+    public Class<?> getOptionType(String name, boolean ignoreCase) {
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "allowredeliverywhilestopping":
+        case "AllowRedeliveryWhileStopping": return boolean.class;
+        case "asyncdelayedredelivery":
+        case "AsyncDelayedRedelivery": return boolean.class;
+        case "backoffmultiplier":
+        case "BackOffMultiplier": return double.class;
+        case "collisionavoidancefactor":
+        case "CollisionAvoidanceFactor": return double.class;
+        case "collisionavoidancepercent":
+        case "CollisionAvoidancePercent": return double.class;
+        case "delaypattern":
+        case "DelayPattern": return java.lang.String.class;
+        case "exchangeformatterref":
+        case "ExchangeFormatterRef": return java.lang.String.class;
+        case "logcontinued":
+        case "LogContinued": return boolean.class;
+        case "logexhausted":
+        case "LogExhausted": return boolean.class;
+        case "logexhaustedmessagebody":
+        case "LogExhaustedMessageBody": return java.lang.Boolean.class;
+        case "logexhaustedmessagehistory":
+        case "LogExhaustedMessageHistory": return boolean.class;
+        case "loghandled":
+        case "LogHandled": return boolean.class;
+        case "lognewexception":
+        case "LogNewException": return boolean.class;
+        case "logretryattempted":
+        case "LogRetryAttempted": return boolean.class;
+        case "logretrystacktrace":
+        case "LogRetryStackTrace": return boolean.class;
+        case "logstacktrace":
+        case "LogStackTrace": return boolean.class;
+        case "maximumredeliveries":
+        case "MaximumRedeliveries": return int.class;
+        case "maximumredeliverydelay":
+        case "MaximumRedeliveryDelay": return long.class;
+        case "redeliverydelay":
+        case "RedeliveryDelay": return long.class;
+        case "retriesexhaustedloglevel":
+        case "RetriesExhaustedLogLevel": return 
org.apache.camel.LoggingLevel.class;
+        case "retryattemptedloginterval":
+        case "RetryAttemptedLogInterval": return int.class;
+        case "retryattemptedloglevel":
+        case "RetryAttemptedLogLevel": return 
org.apache.camel.LoggingLevel.class;
+        case "usecollisionavoidance":
+        case "UseCollisionAvoidance": return boolean.class;
+        case "useexponentialbackoff":
+        case "UseExponentialBackOff": return boolean.class;
+        default: return null;
+        }
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        org.apache.camel.processor.errorhandler.RedeliveryPolicy target = 
(org.apache.camel.processor.errorhandler.RedeliveryPolicy) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "allowredeliverywhilestopping":
+        case "AllowRedeliveryWhileStopping": return 
target.isAllowRedeliveryWhileStopping();
+        case "asyncdelayedredelivery":
+        case "AsyncDelayedRedelivery": return 
target.isAsyncDelayedRedelivery();
+        case "backoffmultiplier":
+        case "BackOffMultiplier": return target.getBackOffMultiplier();
+        case "collisionavoidancefactor":
+        case "CollisionAvoidanceFactor": return 
target.getCollisionAvoidanceFactor();
+        case "collisionavoidancepercent":
+        case "CollisionAvoidancePercent": return 
target.getCollisionAvoidancePercent();
+        case "delaypattern":
+        case "DelayPattern": return target.getDelayPattern();
+        case "exchangeformatterref":
+        case "ExchangeFormatterRef": return target.getExchangeFormatterRef();
+        case "logcontinued":
+        case "LogContinued": return target.isLogContinued();
+        case "logexhausted":
+        case "LogExhausted": return target.isLogExhausted();
+        case "logexhaustedmessagebody":
+        case "LogExhaustedMessageBody": return 
target.isLogExhaustedMessageBody();
+        case "logexhaustedmessagehistory":
+        case "LogExhaustedMessageHistory": return 
target.isLogExhaustedMessageHistory();
+        case "loghandled":
+        case "LogHandled": return target.isLogHandled();
+        case "lognewexception":
+        case "LogNewException": return target.isLogNewException();
+        case "logretryattempted":
+        case "LogRetryAttempted": return target.isLogRetryAttempted();
+        case "logretrystacktrace":
+        case "LogRetryStackTrace": return target.isLogRetryStackTrace();
+        case "logstacktrace":
+        case "LogStackTrace": return target.isLogStackTrace();
+        case "maximumredeliveries":
+        case "MaximumRedeliveries": return target.getMaximumRedeliveries();
+        case "maximumredeliverydelay":
+        case "MaximumRedeliveryDelay": return 
target.getMaximumRedeliveryDelay();
+        case "redeliverydelay":
+        case "RedeliveryDelay": return target.getRedeliveryDelay();
+        case "retriesexhaustedloglevel":
+        case "RetriesExhaustedLogLevel": return 
target.getRetriesExhaustedLogLevel();
+        case "retryattemptedloginterval":
+        case "RetryAttemptedLogInterval": return 
target.getRetryAttemptedLogInterval();
+        case "retryattemptedloglevel":
+        case "RetryAttemptedLogLevel": return 
target.getRetryAttemptedLogLevel();
+        case "usecollisionavoidance":
+        case "UseCollisionAvoidance": return target.isUseCollisionAvoidance();
+        case "useexponentialbackoff":
+        case "UseExponentialBackOff": return target.isUseExponentialBackOff();
+        default: return null;
+        }
+    }
+}
+
diff --git 
a/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.processor.errorhandler.RedeliveryPolicy
 
b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.processor.errorhandler.RedeliveryPolicy
new file mode 100644
index 0000000..41037d1
--- /dev/null
+++ 
b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/configurer/org.apache.camel.processor.errorhandler.RedeliveryPolicy
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.processor.errorhandler.RedeliveryPolicyConfigurer
diff --git 
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryPolicy.java
 
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryPolicy.java
index 7f6a6a9..87e5ffe 100644
--- 
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryPolicy.java
+++ 
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryPolicy.java
@@ -22,6 +22,7 @@ import java.util.Random;
 import org.apache.camel.Exchange;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.Predicate;
+import org.apache.camel.spi.Configurer;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
 import org.slf4j.Logger;
@@ -78,6 +79,7 @@ import org.slf4j.LoggerFactory;
  * If you want to set a starting delay, then use 0 as the first limit, eg: 
<tt>0:1000;5:5000</tt> will use 1 sec delay
  * until attempt number 5 where it will use 5 seconds going forward.
  */
+@Configurer
 public class RedeliveryPolicy implements Cloneable, Serializable {
     // default policy using out of the box settings which can be shared
     public static final RedeliveryPolicy DEFAULT_POLICY = new 
RedeliveryPolicy();
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
index a6eb0f8..1804ce1 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
@@ -69,6 +69,7 @@ import 
org.apache.camel.model.Resilience4jConfigurationDefinition;
 import org.apache.camel.model.RestContextRefDefinition;
 import org.apache.camel.model.RollbackDefinition;
 import org.apache.camel.model.RouteBuilderDefinition;
+import org.apache.camel.model.RouteConfigurationContextRefDefinition;
 import org.apache.camel.model.RouteContextRefDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RouteTemplateParameterDefinition;
@@ -12918,6 +12919,42 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
     }
 
     @YamlType(
+            types = 
org.apache.camel.model.RouteConfigurationContextRefDefinition.class,
+            order = 
org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
+            nodes = {
+                    "route-configuration-context-ref",
+                    "routeConfigurationContextRef"
+            },
+            properties = @YamlProperty(name = "ref", type = "string", required 
= true)
+    )
+    public static class RouteConfigurationContextRefDefinitionDeserializer 
extends YamlDeserializerBase<RouteConfigurationContextRefDefinition> {
+        public RouteConfigurationContextRefDefinitionDeserializer() {
+            super(RouteConfigurationContextRefDefinition.class);
+        }
+
+        @Override
+        protected RouteConfigurationContextRefDefinition newInstance() {
+            return new RouteConfigurationContextRefDefinition();
+        }
+
+        @Override
+        protected boolean setProperty(RouteConfigurationContextRefDefinition 
target,
+                String propertyKey, String propertyName, Node node) {
+            switch(propertyKey) {
+                case "ref": {
+                    String val = asText(node);
+                    target.setRef(val);
+                    break;
+                }
+                default: {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+
+    @YamlType(
             types = org.apache.camel.model.RouteContextRefDefinition.class,
             order = 
org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
             nodes = {
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
index f5837a5..f0629b1 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
@@ -363,6 +363,9 @@ public final class ModelDeserializersResolver implements 
YamlDeserializerResolve
             case "route-builder": return new 
ModelDeserializers.RouteBuilderDefinitionDeserializer();
             case "routeBuilder": return new 
ModelDeserializers.RouteBuilderDefinitionDeserializer();
             case "org.apache.camel.model.RouteBuilderDefinition": return new 
ModelDeserializers.RouteBuilderDefinitionDeserializer();
+            case "route-configuration-context-ref": return new 
ModelDeserializers.RouteConfigurationContextRefDefinitionDeserializer();
+            case "routeConfigurationContextRef": return new 
ModelDeserializers.RouteConfigurationContextRefDefinitionDeserializer();
+            case 
"org.apache.camel.model.RouteConfigurationContextRefDefinition": return new 
ModelDeserializers.RouteConfigurationContextRefDefinitionDeserializer();
             case "route-context-ref": return new 
ModelDeserializers.RouteContextRefDefinitionDeserializer();
             case "routeContextRef": return new 
ModelDeserializers.RouteContextRefDefinitionDeserializer();
             case "org.apache.camel.model.RouteContextRefDefinition": return 
new ModelDeserializers.RouteContextRefDefinitionDeserializer();
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camel-yaml-dsl.json 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camel-yaml-dsl.json
index 89dfbf3..62e992b 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camel-yaml-dsl.json
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/camel-yaml-dsl.json
@@ -2131,6 +2131,15 @@
         } ],
         "required" : [ "ref" ]
       },
+      "org.apache.camel.model.RouteConfigurationContextRefDefinition" : {
+        "type" : "object",
+        "properties" : {
+          "ref" : {
+            "type" : "string"
+          }
+        },
+        "required" : [ "ref" ]
+      },
       "org.apache.camel.model.RouteConfigurationDefinition" : {
         "oneOf" : [ {
           "type" : "string"
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
index 030d971..2d44291 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
@@ -34,9 +34,10 @@ import org.apache.camel.model.RouteTemplateDefinition;
 import org.apache.camel.model.rest.RestConfigurationDefinition;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.VerbDefinition;
+import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
 import org.apache.camel.spi.CamelContextCustomizer;
 import org.apache.camel.spi.annotations.RoutesLoader;
-import org.apache.camel.support.IntrospectionSupport;
+import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.util.URISupport;
 import org.snakeyaml.engine.v2.nodes.MappingNode;
 import org.snakeyaml.engine.v2.nodes.Node;
@@ -244,15 +245,17 @@ public class YamlRoutesBuilderLoader extends 
YamlRoutesBuilderLoaderSupport {
                     String dlq = extractCamelEndpointUri(endpoint);
                     dlcb.setDeadLetterUri(dlq);
 
-                    // properties (TODO: via reflection - need builder)
-                    // TODO: route templates store user parameters in cameCase 
(eg convert dash to camel case) (like camel-main)
+                    // properties
                     MappingNode prop = asMappingNode(nodeAt(nt.getValueNode(), 
"/parameters"));
                     Map<String, Object> params = asMap(prop);
                     if (params != null) {
-                        IntrospectionSupport.setProperties(getCamelContext(), 
getCamelContext().getTypeConverter(), dlcb, params);
+                        // the parameters are for redelivery policy
+                        RedeliveryPolicy rp = new RedeliveryPolicy();
+                        dlcb.setRedeliveryPolicy(rp);
+                        
PropertyBindingSupport.build().withIgnoreCase(true).bind(getCamelContext(), rp, 
params);
                     }
                     route.errorHandler(dlcb);
-               }
+                }
             }
 
             target = route;

Reply via email to