You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2021/02/26 10:08:51 UTC
[camel] 03/09: CAMEL-12545: create a yaml based route loader (add
support for enhanced ToDefinition)
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
commit 588f0909d245a64d1c3a3b214a28d84559d46463
Author: Luca Burgazzoli <lb...@gmail.com>
AuthorDate: Thu Feb 25 15:11:16 2021 +0100
CAMEL-12545: create a yaml based route loader (add support for enhanced ToDefinition)
---
.../camel-yaml-dsl-deserializers/pom.xml | 1 +
.../dsl/yaml/deserializers/ModelDeserializers.java | 54 ------------
.../deserializers/ModelDeserializersResolver.java | 2 -
.../dsl/yaml/deserializers/CustomResolver.java | 3 +
.../deserializers/ToDefinitionDeserializer.java | 98 ++++++++++++++++++++++
.../src/generated/resources/camel-yaml-dsl.json | 10 +--
.../groovy/org/apache/camel/dsl/yaml/ToTest.groovy | 73 ++++++++++++++++
7 files changed, 177 insertions(+), 64 deletions(-)
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/pom.xml b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/pom.xml
index 6f55e32..9abcfd7 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/pom.xml
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/pom.xml
@@ -125,6 +125,7 @@
<packageName>org.apache.camel.dsl.yaml.deserializers</packageName>
<bannedDefinitions>
<bannedDefinition>org.apache.camel.model.FromDefinition</bannedDefinition>
+ <bannedDefinition>org.apache.camel.model.ToDefinition</bannedDefinition>
<bannedDefinition>org.apache.camel.model.language.ExpressionDefinition</bannedDefinition>
<bannedDefinition>org.apache.camel.model.ExpressionSubElementDefinition</bannedDefinition>
<bannedDefinition>org.apache.camel.model.PropertyDefinitions</bannedDefinition>
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 4b8acce..07a3a14 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
@@ -85,7 +85,6 @@ import org.apache.camel.model.ThreadPoolProfileDefinition;
import org.apache.camel.model.ThreadsDefinition;
import org.apache.camel.model.ThrottleDefinition;
import org.apache.camel.model.ThrowExceptionDefinition;
-import org.apache.camel.model.ToDefinition;
import org.apache.camel.model.ToDynamicDefinition;
import org.apache.camel.model.TransactedDefinition;
import org.apache.camel.model.TransformDefinition;
@@ -13986,59 +13985,6 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
@YamlType(
inline = true,
- types = org.apache.camel.model.ToDefinition.class,
- order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
- nodes = "to",
- properties = {
- @YamlProperty(name = "inherit-error-handler", type = "boolean"),
- @YamlProperty(name = "pattern", type = "string"),
- @YamlProperty(name = "uri", type = "string", required = true)
- }
- )
- public static class ToDefinitionDeserializer extends YamlDeserializerBase<ToDefinition> {
- public ToDefinitionDeserializer() {
- super(ToDefinition.class);
- }
-
- @Override
- protected ToDefinition newInstance() {
- return new ToDefinition();
- }
-
- @Override
- protected ToDefinition newInstance(String value) {
- return new ToDefinition(value);
- }
-
- @Override
- protected boolean setProperty(ToDefinition target, String propertyKey, String propertyName,
- Node node) {
- switch(propertyKey) {
- case "inherit-error-handler": {
- String val = asText(node);
- target.setInheritErrorHandler(java.lang.Boolean.valueOf(val));
- break;
- }
- case "pattern": {
- String val = asText(node);
- target.setPattern(val);
- break;
- }
- case "uri": {
- String val = asText(node);
- target.setUri(val);
- break;
- }
- default: {
- return false;
- }
- }
- return true;
- }
- }
-
- @YamlType(
- inline = true,
types = org.apache.camel.model.ToDynamicDefinition.class,
order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
nodes = "to-d",
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 8d6755f..1ddeaa2 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
@@ -368,8 +368,6 @@ public final class ModelDeserializersResolver implements YamlDeserializerResolve
case "org.apache.camel.model.ThrowExceptionDefinition": return new ModelDeserializers.ThrowExceptionDefinitionDeserializer();
case "tidy-markup": return new ModelDeserializers.TidyMarkupDataFormatDeserializer();
case "org.apache.camel.model.dataformat.TidyMarkupDataFormat": return new ModelDeserializers.TidyMarkupDataFormatDeserializer();
- case "to": return new ModelDeserializers.ToDefinitionDeserializer();
- case "org.apache.camel.model.ToDefinition": return new ModelDeserializers.ToDefinitionDeserializer();
case "to-d": return new ModelDeserializers.ToDynamicDefinitionDeserializer();
case "org.apache.camel.model.ToDynamicDefinition": return new ModelDeserializers.ToDynamicDefinitionDeserializer();
case "tokenize": return new ModelDeserializers.TokenizerExpressionDeserializer();
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
index 92b9e98..20d77a0 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
@@ -62,6 +62,9 @@ public class CustomResolver implements YamlDeserializerResolver {
return new SagaOptionDefinitionDeserializer();
case "org.apache.camel.model.ProcessorDefinition":
return new ProcessorDefinitionDefinitionDeserializer();
+ case "to":
+ case "org.apache.camel.model.ToDefinition":
+ return new ToDefinitionDeserializer();
default:
return null;
}
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ToDefinitionDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ToDefinitionDeserializer.java
new file mode 100644
index 0000000..c6cc362
--- /dev/null
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ToDefinitionDeserializer.java
@@ -0,0 +1,98 @@
+/*
+ * 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.
+ */
+package org.apache.camel.dsl.yaml.deserializers;
+
+import java.util.Map;
+
+import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
+import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver;
+import org.apache.camel.dsl.yaml.common.YamlSupport;
+import org.apache.camel.model.ToDefinition;
+import org.apache.camel.spi.annotations.YamlProperty;
+import org.apache.camel.spi.annotations.YamlType;
+import org.apache.camel.util.ObjectHelper;
+import org.snakeyaml.engine.v2.api.ConstructNode;
+import org.snakeyaml.engine.v2.nodes.MappingNode;
+import org.snakeyaml.engine.v2.nodes.Node;
+import org.snakeyaml.engine.v2.nodes.NodeTuple;
+import org.snakeyaml.engine.v2.nodes.NodeType;
+
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asScalarMap;
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asText;
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.getDeserializationContext;
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.setDeserializationContext;
+
+@YamlType(
+ inline = true,
+ types = ToDefinition.class,
+ order = YamlDeserializerResolver.ORDER_DEFAULT,
+ properties = {
+ @YamlProperty(name = "uri", type = "string", required = true),
+ @YamlProperty(name = "properties", type = "object")
+ })
+public class ToDefinitionDeserializer implements ConstructNode {
+ @Override
+ public Object construct(Node node) {
+ return constructFromDefinition(node);
+ }
+
+ public static ToDefinition constructFromDefinition(Node node) {
+ if (node.getNodeType() == NodeType.SCALAR) {
+ return new ToDefinition(asText(node));
+ } else if (node.getNodeType() == NodeType.MAPPING) {
+ final MappingNode mn = (MappingNode) node;
+ final YamlDeserializationContext dc = getDeserializationContext(node);
+
+ String uri = null;
+ Map<String, Object> properties = null;
+
+ for (NodeTuple tuple : mn.getValue()) {
+ final String key = asText(tuple.getKeyNode());
+ final Node val = tuple.getValueNode();
+
+ setDeserializationContext(val, dc);
+
+ switch (key) {
+ case "uri":
+ uri = asText(val);
+ break;
+ case "properties":
+ properties = asScalarMap(tuple.getValueNode());
+ break;
+ default:
+ ConstructNode cn = EndpointProducerDeserializersResolver.resolveEndpointConstructor(key);
+ if (cn != null) {
+ if (uri != null || properties != null) {
+ throw new IllegalArgumentException(
+ "uri and properties are not supported when using Endpoint DSL ");
+ }
+ return (ToDefinition) cn.construct(val);
+ } else {
+ throw new IllegalArgumentException("Unsupported field: " + key);
+ }
+ }
+
+ ObjectHelper.notNull("uri", "The uri must set");
+ }
+
+ return new ToDefinition(
+ YamlSupport.createEndpointUri(dc.getCamelContext(), uri, properties));
+ }
+
+ return null;
+ }
+}
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 66aa9c6..4a59104 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
@@ -164,9 +164,6 @@
"throw-exception" : {
"$ref" : "#/items/definitions/org.apache.camel.model.ThrowExceptionDefinition"
},
- "to" : {
- "$ref" : "#/items/definitions/org.apache.camel.model.ToDefinition"
- },
"to-d" : {
"$ref" : "#/items/definitions/org.apache.camel.model.ToDynamicDefinition"
},
@@ -2373,11 +2370,8 @@
}, {
"type" : "object",
"properties" : {
- "inherit-error-handler" : {
- "type" : "boolean"
- },
- "pattern" : {
- "type" : "string"
+ "properties" : {
+ "type" : "object"
},
"uri" : {
"type" : "string"
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
new file mode 100644
index 0000000..ac8857e
--- /dev/null
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/ToTest.groovy
@@ -0,0 +1,73 @@
+/*
+ * 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.
+ */
+package org.apache.camel.dsl.yaml
+
+import org.apache.camel.dsl.yaml.support.YamlTestSupport
+import org.apache.camel.model.ToDefinition
+import org.apache.camel.spi.Resource
+
+class ToTest extends YamlTestSupport {
+
+ def "to definition (#resource.location)"(Resource resource) {
+ when:
+ context.routesLoader.loadRoutes(resource)
+ then:
+ with(context.routeDefinitions[0].outputs[0], ToDefinition) {
+ endpointUri == 'direct:start'
+ }
+ where:
+ resource << [
+ asResource('inline', '''
+ - from:
+ uri: "direct:start"
+ steps:
+ - to: "direct:start"
+ '''),
+ asResource('uri', '''
+ - from:
+ uri: "direct:start"
+ steps:
+ - to:
+ uri: "direct:start"
+ '''),
+ asResource('properties', '''
+ - from:
+ uri: "direct:start"
+ steps:
+ - to:
+ uri: "direct"
+ properties:
+ name: "start"
+ '''),
+ asResource('endpoint', '''
+ - from:
+ uri: "direct:start"
+ steps:
+ - to:
+ direct:
+ name: "start"
+ '''),
+ asResource('endpoint-dsl', '''
+ - from:
+ uri: "direct:start"
+ steps:
+ - direct:
+ name: "start"
+ ''')
+ ]
+ }
+}