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;