You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/01/23 15:29:52 UTC

(camel) 02/19: CAMEL-19749: EIPs should make it easy to use together with variables.

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

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

commit f85e00bc80d33ffb0fba9d4271e445eb06a148e7
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Jan 19 12:34:03 2024 +0100

    CAMEL-19749: EIPs should make it easy to use together with variables.
---
 .../deserializers/FromDefinitionDeserializer.java  |  7 +++
 .../OutputAwareFromDefinitionDeserializer.java     |  8 +++
 .../generated/resources/schema/camelYamlDsl.json   |  9 ++++
 .../apache/camel/dsl/yaml/FromVariableTest.groovy  | 57 ++++++++++++++++++++++
 4 files changed, 81 insertions(+)

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 5e17eeff940..041eb98795a 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
@@ -38,6 +38,7 @@ import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.getDeseri
           order = YamlDeserializerResolver.ORDER_DEFAULT,
           properties = {
                   @YamlProperty(name = "uri", type = "string", required = true),
+                  @YamlProperty(name = "variable", type = "string"),
                   @YamlProperty(name = "id", type = "string"),
                   @YamlProperty(name = "description", type = "string"),
                   @YamlProperty(name = "parameters", type = "object"),
@@ -54,6 +55,7 @@ public class FromDefinitionDeserializer implements ConstructNode {
 
         String desc = null;
         String id = null;
+        String variable = null;
         if (node.getNodeType() == NodeType.MAPPING) {
             final MappingNode mn = (MappingNode) node;
             for (NodeTuple tuple : mn.getValue()) {
@@ -67,6 +69,8 @@ public class FromDefinitionDeserializer implements ConstructNode {
                     desc = asText(tuple.getValueNode());
                 } else if ("id".equals(key)) {
                     id = asText(tuple.getValueNode());
+                } else if ("variable".equals(key)) {
+                    variable = asText(tuple.getValueNode());
                 }
             }
         }
@@ -91,6 +95,9 @@ public class FromDefinitionDeserializer implements ConstructNode {
         if (id != null) {
             target.setId(id);
         }
+        if (variable != null) {
+            target.setVariable(variable);
+        }
 
         // enrich model with line number
         if (line != -1) {
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/OutputAwareFromDefinitionDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/OutputAwareFromDefinitionDeserializer.java
index c356d78cbd2..b932c448e10 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/OutputAwareFromDefinitionDeserializer.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/OutputAwareFromDefinitionDeserializer.java
@@ -36,6 +36,7 @@ import org.snakeyaml.engine.v2.nodes.NodeTuple;
           order = YamlDeserializerResolver.ORDER_DEFAULT,
           properties = {
                   @YamlProperty(name = "uri", type = "string", required = true),
+                  @YamlProperty(name = "variable", type = "string"),
                   @YamlProperty(name = "id", type = "string"),
                   @YamlProperty(name = "description", type = "string"),
                   @YamlProperty(name = "parameters", type = "object"),
@@ -69,6 +70,7 @@ public class OutputAwareFromDefinitionDeserializer extends YamlDeserializerBase<
         String uri = null;
         String id = null;
         String desc = null;
+        String variable = null;
         Map<String, Object> parameters = null;
 
         for (NodeTuple tuple : node.getValue()) {
@@ -88,6 +90,9 @@ public class OutputAwareFromDefinitionDeserializer extends YamlDeserializerBase<
                 case "uri":
                     uri = asText(val);
                     break;
+                case "variable":
+                    variable = asText(val);
+                    break;
                 case "parameters":
                     parameters = parseParameters(tuple);
                     break;
@@ -114,6 +119,9 @@ public class OutputAwareFromDefinitionDeserializer extends YamlDeserializerBase<
             if (desc != null) {
                 from.setDescription(desc);
             }
+            if (variable != null) {
+                from.setVariable(variable);
+            }
             target.setDelegate(from);
         }
     }
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
index 5ab84e6d6ef..e4c6f9e3fdc 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
@@ -313,6 +313,9 @@
           },
           "uri" : {
             "type" : "string"
+          },
+          "variable" : {
+            "type" : "string"
           }
         },
         "required" : [ "steps", "uri" ]
@@ -339,6 +342,9 @@
           },
           "uri" : {
             "type" : "string"
+          },
+          "variable" : {
+            "type" : "string"
           }
         },
         "required" : [ "steps", "uri" ]
@@ -1961,6 +1967,9 @@
           },
           "uri" : {
             "type" : "string"
+          },
+          "variable" : {
+            "type" : "string"
           }
         },
         "required" : [ "steps", "uri" ]
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/FromVariableTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/FromVariableTest.groovy
new file mode 100644
index 00000000000..08eecb16ad2
--- /dev/null
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/FromVariableTest.groovy
@@ -0,0 +1,57 @@
+/*
+ * 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.component.mock.MockEndpoint
+import org.apache.camel.dsl.yaml.support.YamlTestSupport
+
+class FromVariableTest extends YamlTestSupport {
+
+    def "fromVariable"() {
+        setup:
+            loadRoutes '''
+                - from:
+                    uri: "direct:start"
+                    variable: "myKey"
+                    steps:
+                      - transform:
+                          simple: "Bye ${body}"
+                      - to: "mock:foo"
+                      - setBody:
+                          simple: "${variable:myKey}"
+                      - to: "mock:result"
+            '''
+
+            withMock('mock:foo') {
+                expectedBodiesReceived 'Bye World'
+            }
+            withMock('mock:result') {
+                expectedBodiesReceived 'World'
+            }
+
+        when:
+            context.start()
+
+            withTemplate {
+                to('direct:start').withBody('World').send()
+            }
+
+        then:
+            MockEndpoint.assertIsSatisfied(context)
+    }
+
+}