This is an automated email from the ASF dual-hosted git repository. lburgazzoli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new 0ec4545 CAMEL-16424: yaml dsl: re-introduce support for parameters in endpoint definitions 0ec4545 is described below commit 0ec45455525f69899d8965430380d054c92cee92 Author: Luca Burgazzoli <lburgazz...@gmail.com> AuthorDate: Mon Mar 29 18:54:59 2021 +0200 CAMEL-16424: yaml dsl: re-introduce support for parameters in endpoint definitions --- .../apache/camel/dsl/yaml/common/YamlSupport.java | 12 ++-- .../dsl/yaml/deserializers/ModelDeserializers.java | 84 +++++++++++++++------- .../deserializers/FromDefinitionDeserializer.java | 2 +- .../RouteFromDefinitionDeserializer.java | 4 +- .../dsl/yaml/GenerateYamlDeserializersMojo.java | 12 ++-- .../maven/dsl/yaml/GenerateYamlSupportMojo.java | 3 + .../src/generated/resources/camel-yaml-dsl.json | 22 +++--- .../org/apache/camel/dsl/yaml/RoutesTest.groovy | 49 ++++++++++++- .../groovy/org/apache/camel/dsl/yaml/ToTest.groovy | 2 +- 9 files changed, 139 insertions(+), 51 deletions(-) diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlSupport.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlSupport.java index 032251b..a596677 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlSupport.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlSupport.java @@ -211,7 +211,7 @@ public final class YamlSupport { final YamlDeserializationContext dc = getDeserializationContext(node); String uri = null; - Map<String, Object> properties = null; + Map<String, Object> parameters = null; for (NodeTuple tuple : mn.getValue()) { final String key = asText(tuple.getKeyNode()); @@ -228,20 +228,20 @@ public final class YamlSupport { uri = asText(val); break; - case "properties": + case "parameters": if (answer != null) { throw new IllegalArgumentException( "uri and properties are not supported when using Endpoint DSL "); } - properties = asScalarMap(tuple.getValueNode()); + parameters = asScalarMap(tuple.getValueNode()); break; default: String endpointUri = endpointResolver.apply(key, val); if (endpointUri != null) { - if (uri != null || properties != null) { + if (uri != null || parameters != null) { throw new IllegalArgumentException( - "uri and properties are not supported when using Endpoint DSL "); + "uri and parameters are not supported when using Endpoint DSL "); } answer = endpointUri; } else { @@ -252,7 +252,7 @@ public final class YamlSupport { if (answer == null) { ObjectHelper.notNull(uri, "The uri must set"); - answer = YamlSupport.createEndpointUri(dc.getCamelContext(), uri, properties); + answer = YamlSupport.createEndpointUri(dc.getCamelContext(), uri, parameters); } } 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 3a3f325..7080892 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 @@ -5872,7 +5872,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { properties = { @YamlProperty(name = "inherit-error-handler", type = "boolean"), @YamlProperty(name = "uri", type = "string", required = true), - @YamlProperty(name = "properties", type = "object") + @YamlProperty(name = "parameters", type = "object") } ) public static class InOnlyDefinitionDeserializer extends YamlDeserializerBase<InOnlyDefinition> { @@ -5904,13 +5904,13 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setUri(val); break; } - case "properties": { + case "parameters": { if (target.getUri() == null) { - throw new IllegalStateException("url must be set before setting properties"); + throw new IllegalStateException("url must be set before setting parameters"); } - java.util.Map<String, Object> properties = asScalarMap(asMappingNode(node)); + java.util.Map<String, Object> parameters = asScalarMap(asMappingNode(node)); YamlDeserializationContext dc = getDeserializationContext(node); - String uri = YamlSupport.createEndpointUri(dc.getCamelContext(), target.getUri(), properties); + String uri = YamlSupport.createEndpointUri(dc.getCamelContext(), target.getUri(), parameters); target.setUri(uri); break; } @@ -5937,7 +5937,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { properties = { @YamlProperty(name = "inherit-error-handler", type = "boolean"), @YamlProperty(name = "uri", type = "string", required = true), - @YamlProperty(name = "properties", type = "object") + @YamlProperty(name = "parameters", type = "object") } ) public static class InOutDefinitionDeserializer extends YamlDeserializerBase<InOutDefinition> { @@ -5969,13 +5969,13 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setUri(val); break; } - case "properties": { + case "parameters": { if (target.getUri() == null) { - throw new IllegalStateException("url must be set before setting properties"); + throw new IllegalStateException("url must be set before setting parameters"); } - java.util.Map<String, Object> properties = asScalarMap(asMappingNode(node)); + java.util.Map<String, Object> parameters = asScalarMap(asMappingNode(node)); YamlDeserializationContext dc = getDeserializationContext(node); - String uri = YamlSupport.createEndpointUri(dc.getCamelContext(), target.getUri(), properties); + String uri = YamlSupport.createEndpointUri(dc.getCamelContext(), target.getUri(), parameters); target.setUri(uri); break; } @@ -11817,7 +11817,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { properties = { @YamlProperty(name = "inherit-error-handler", type = "boolean"), @YamlProperty(name = "uri", type = "string", required = true), - @YamlProperty(name = "properties", type = "object") + @YamlProperty(name = "parameters", type = "object") } ) public static class SagaActionUriDefinitionDeserializer extends YamlDeserializerBase<SagaActionUriDefinition> { @@ -11849,13 +11849,13 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setUri(val); break; } - case "properties": { + case "parameters": { if (target.getUri() == null) { - throw new IllegalStateException("url must be set before setting properties"); + throw new IllegalStateException("url must be set before setting parameters"); } - java.util.Map<String, Object> properties = asScalarMap(asMappingNode(node)); + java.util.Map<String, Object> parameters = asScalarMap(asMappingNode(node)); YamlDeserializationContext dc = getDeserializationContext(node); - String uri = YamlSupport.createEndpointUri(dc.getCamelContext(), target.getUri(), properties); + String uri = YamlSupport.createEndpointUri(dc.getCamelContext(), target.getUri(), parameters); target.setUri(uri); break; } @@ -14147,7 +14147,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport { @YamlProperty(name = "inherit-error-handler", type = "boolean"), @YamlProperty(name = "pattern", type = "string"), @YamlProperty(name = "uri", type = "string", required = true), - @YamlProperty(name = "properties", type = "object") + @YamlProperty(name = "parameters", type = "object") } ) public static class ToDefinitionDeserializer extends YamlDeserializerBase<ToDefinition> { @@ -14184,13 +14184,13 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setUri(val); break; } - case "properties": { + case "parameters": { if (target.getUri() == null) { - throw new IllegalStateException("url must be set before setting properties"); + throw new IllegalStateException("url must be set before setting parameters"); } - java.util.Map<String, Object> properties = asScalarMap(asMappingNode(node)); + java.util.Map<String, Object> parameters = asScalarMap(asMappingNode(node)); YamlDeserializationContext dc = getDeserializationContext(node); - String uri = YamlSupport.createEndpointUri(dc.getCamelContext(), target.getUri(), properties); + String uri = YamlSupport.createEndpointUri(dc.getCamelContext(), target.getUri(), parameters); target.setUri(uri); break; } @@ -14221,7 +14221,8 @@ public final class ModelDeserializers extends YamlDeserializerSupport { @YamlProperty(name = "ignore-invalid-endpoint", type = "boolean"), @YamlProperty(name = "inherit-error-handler", type = "boolean"), @YamlProperty(name = "pattern", type = "string"), - @YamlProperty(name = "uri", type = "string", required = true) + @YamlProperty(name = "uri", type = "string", required = true), + @YamlProperty(name = "parameters", type = "object") } ) public static class ToDynamicDefinitionDeserializer extends YamlDeserializerBase<ToDynamicDefinition> { @@ -14278,8 +14279,25 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setUri(val); break; } + case "parameters": { + if (target.getUri() == null) { + throw new IllegalStateException("url must be set before setting parameters"); + } + java.util.Map<String, Object> parameters = asScalarMap(asMappingNode(node)); + YamlDeserializationContext dc = getDeserializationContext(node); + String uri = YamlSupport.createEndpointUri(dc.getCamelContext(), target.getUri(), parameters); + target.setUri(uri); + break; + } default: { - return false; + String uri = EndpointProducerDeserializersResolver.resolveEndpointUri(propertyKey, node); + if (uri == null) { + return false; + } + if (target.getUri() != null) { + throw new IllegalStateException("url must not be set when using Endpoint DSL"); + } + target.setUri(uri); } } return true; @@ -15847,7 +15865,8 @@ public final class ModelDeserializers extends YamlDeserializerSupport { @YamlProperty(name = "processor-ref", type = "string"), @YamlProperty(name = "on-prepare-ref", type = "string"), @YamlProperty(name = "pattern", type = "string"), - @YamlProperty(name = "uri", type = "string", required = true) + @YamlProperty(name = "uri", type = "string", required = true), + @YamlProperty(name = "parameters", type = "object") } ) public static class WireTapDefinitionDeserializer extends YamlDeserializerBase<WireTapDefinition> { @@ -15934,8 +15953,25 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setUri(val); break; } + case "parameters": { + if (target.getUri() == null) { + throw new IllegalStateException("url must be set before setting parameters"); + } + java.util.Map<String, Object> parameters = asScalarMap(asMappingNode(node)); + YamlDeserializationContext dc = getDeserializationContext(node); + String uri = YamlSupport.createEndpointUri(dc.getCamelContext(), target.getUri(), parameters); + target.setUri(uri); + break; + } default: { - return false; + String uri = EndpointProducerDeserializersResolver.resolveEndpointUri(propertyKey, node); + if (uri == null) { + return false; + } + if (target.getUri() != null) { + throw new IllegalStateException("url must not be set when using Endpoint DSL"); + } + target.setUri(uri); } } return true; diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java index 11be5f5..4df8ddf 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java @@ -30,7 +30,7 @@ import org.snakeyaml.engine.v2.nodes.Node; order = YamlDeserializerResolver.ORDER_DEFAULT, properties = { @YamlProperty(name = "uri", type = "string", required = true), - @YamlProperty(name = "properties", type = "object") + @YamlProperty(name = "parameters", type = "object") }) public class FromDefinitionDeserializer implements ConstructNode { @Override diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteFromDefinitionDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteFromDefinitionDeserializer.java index 74e0633..16aee6d 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteFromDefinitionDeserializer.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteFromDefinitionDeserializer.java @@ -40,7 +40,7 @@ import org.snakeyaml.engine.v2.nodes.NodeTuple; order = YamlDeserializerResolver.ORDER_DEFAULT, properties = { @YamlProperty(name = "uri", type = "string", required = true), - @YamlProperty(name = "properties", type = "object"), + @YamlProperty(name = "parameters", type = "object"), @YamlProperty(name = "steps", type = "array:org.apache.camel.model.ProcessorDefinition", required = true) }) public class RouteFromDefinitionDeserializer extends YamlDeserializerBase<OutputAwareFromDefinition> { @@ -80,7 +80,7 @@ public class RouteFromDefinitionDeserializer extends YamlDeserializerBase<Output case "uri": uri = asText(val); break; - case "properties": + case "parameters": properties = asScalarMap(tuple.getValueNode()); break; default: diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java index ff755a0..bad935b 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java @@ -500,14 +500,14 @@ public class GenerateYamlDeserializersMojo extends GenerateYamlSupportMojo { ); } - if (extendsType(info, SEND_DEFINITION_CLASS)) { - setProperty.beginControlFlow("case $S:", "properties"); + if (extendsType(info, SEND_DEFINITION_CLASS) || extendsType(info, TO_DYNAMIC_DEFINITION_CLASS)) { + setProperty.beginControlFlow("case $S:", "parameters"); setProperty.beginControlFlow("if (target.getUri() == null)"); - setProperty.addStatement("throw new IllegalStateException(\"url must be set before setting properties\")"); + setProperty.addStatement("throw new IllegalStateException(\"url must be set before setting parameters\")"); setProperty.endControlFlow(); - setProperty.addStatement("java.util.Map<String, Object> properties = asScalarMap(asMappingNode(node))"); + setProperty.addStatement("java.util.Map<String, Object> parameters = asScalarMap(asMappingNode(node))"); setProperty.addStatement("$T dc = getDeserializationContext(node)", CN_DESERIALIZATION_CONTEXT); - setProperty.addStatement("String uri = $T.createEndpointUri(dc.getCamelContext(), target.getUri(), properties)", CN_YAML_SUPPORT); + setProperty.addStatement("String uri = $T.createEndpointUri(dc.getCamelContext(), target.getUri(), parameters)", CN_YAML_SUPPORT); setProperty.addStatement("target.setUri(uri)"); setProperty.addStatement("break"); setProperty.endControlFlow(); @@ -525,7 +525,7 @@ public class GenerateYamlDeserializersMojo extends GenerateYamlSupportMojo { properties.add( yamlProperty( - "properties", + "parameters", "object") ); } else if (implementType(info, HAS_EXPRESSION_TYPE_CLASS)) { diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSupportMojo.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSupportMojo.java index 5b16c1e..3be1a50 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSupportMojo.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSupportMojo.java @@ -95,6 +95,9 @@ public abstract class GenerateYamlSupportMojo extends AbstractMojo { = DotName.createSimple("org.apache.camel.model.ProcessorDefinition"); public static final DotName SEND_DEFINITION_CLASS = DotName.createSimple("org.apache.camel.model.SendDefinition"); + public static final DotName TO_DYNAMIC_DEFINITION_CLASS + = DotName.createSimple("org.apache.camel.model.ToDynamicDefinition"); + public static final DotName YAML_TYPE_ANNOTATION = DotName.createSimple("org.apache.camel.spi.annotations.YamlType"); 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 f3c79b6..5fe6593 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 @@ -213,7 +213,7 @@ "org.apache.camel.dsl.yaml.deserializers.model.OutputAwareFromDefinition" : { "type" : "object", "properties" : { - "properties" : { + "parameters" : { "type" : "object" }, "steps" : { @@ -743,7 +743,7 @@ }, { "type" : "object", "properties" : { - "properties" : { + "parameters" : { "type" : "object" }, "uri" : { @@ -922,7 +922,7 @@ "inherit-error-handler" : { "type" : "boolean" }, - "properties" : { + "parameters" : { "type" : "object" }, "uri" : { @@ -941,7 +941,7 @@ "inherit-error-handler" : { "type" : "boolean" }, - "properties" : { + "parameters" : { "type" : "object" }, "uri" : { @@ -2032,7 +2032,7 @@ "inherit-error-handler" : { "type" : "boolean" }, - "properties" : { + "parameters" : { "type" : "object" }, "uri" : { @@ -2418,12 +2418,12 @@ "inherit-error-handler" : { "type" : "boolean" }, + "parameters" : { + "type" : "object" + }, "pattern" : { "type" : "string" }, - "properties" : { - "type" : "object" - }, "uri" : { "type" : "string" } @@ -2452,6 +2452,9 @@ "inherit-error-handler" : { "type" : "boolean" }, + "parameters" : { + "type" : "object" + }, "pattern" : { "type" : "string" }, @@ -2734,6 +2737,9 @@ "on-prepare-ref" : { "type" : "string" }, + "parameters" : { + "type" : "object" + }, "pattern" : { "type" : "string" }, diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RoutesTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RoutesTest.groovy index c6f45b6..d3baef1 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RoutesTest.groovy +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RoutesTest.groovy @@ -19,11 +19,9 @@ package org.apache.camel.dsl.yaml import org.apache.camel.dsl.yaml.support.YamlTestSupport import org.apache.camel.model.LogDefinition import org.apache.camel.model.RouteDefinition -import spock.lang.Ignore class RoutesTest extends YamlTestSupport { - @Ignore def "load from"() { when: loadRoutes ''' @@ -43,7 +41,29 @@ class RoutesTest extends YamlTestSupport { } } } - @Ignore + + def "load from with parameters"() { + when: + loadRoutes ''' + - from: + uri: "direct:info" + parameters: + timeout: 1234 + steps: + - log: "message" + ''' + then: + context.routeDefinitions.size() == 1 + + with(context.routeDefinitions[0], RouteDefinition) { + input.endpointUri == 'direct:info?timeout=1234' + + with (outputs[0], LogDefinition) { + message == 'message' + } + } + } + def "load multi from "() { when: loadRoutes ''' @@ -95,4 +115,27 @@ class RoutesTest extends YamlTestSupport { } } } + + def "load route with parameters"() { + when: + loadRoutes ''' + - route: + from: + uri: "direct:info" + parameters: + timeout: 1234 + steps: + - log: "message" + ''' + then: + context.routeDefinitions.size() == 1 + + with(context.routeDefinitions[0], RouteDefinition) { + input.endpointUri == 'direct:info?timeout=1234' + + with (outputs[0], LogDefinition) { + message == 'message' + } + } + } } diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/ToTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/ToTest.groovy index ac8857e..564a261 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/ToTest.groovy +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/ToTest.groovy @@ -50,7 +50,7 @@ class ToTest extends YamlTestSupport { steps: - to: uri: "direct" - properties: + parameters: name: "start" '''), asResource('endpoint', '''