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

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


The following commit(s) were added to refs/heads/main by this push:
     new a8a540a  yaml-dsl: make it simple to configure route local beans
a8a540a is described below

commit a8a540acfc1168a59d6c27cf86d4bc24ed98cea0
Author: Luca Burgazzoli <lburgazz...@gmail.com>
AuthorDate: Fri Jun 11 17:03:44 2021 +0200

    yaml-dsl: make it simple to configure route local beans
---
 .../camel-yaml-dsl-deserializers/pom.xml           |   1 +
 .../dsl/yaml/deserializers/ModelDeserializers.java |  66 -------------
 .../deserializers/ModelDeserializersResolver.java  |   2 -
 .../dsl/yaml/deserializers/CustomResolver.java     |   2 +
 .../RouteTemplateBeanDefinitionDeserializer.java   | 102 +++++++++++++++++++++
 .../src/generated/resources/camel-yaml-dsl.json    |   3 +
 .../org/apache/camel/dsl/yaml/KameletTest.groovy   |  72 +++++++++++++++
 .../apache/camel/dsl/yaml/RouteTemplateTest.groovy |  90 ++++++++++++++++++
 8 files changed, 270 insertions(+), 68 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 d905c97..830a186 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/pom.xml
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/pom.xml
@@ -131,6 +131,7 @@
                                 
<bannedDefinition>org.apache.camel.model.RouteTemplateDefinition</bannedDefinition>
                                 
<bannedDefinition>org.apache.camel.model.RouteTemplateContextRefDefinition</bannedDefinition>
                                 
<bannedDefinition>org.apache.camel.model.RouteTemplatesDefinition</bannedDefinition>
+                                
<bannedDefinition>org.apache.camel.model.RouteTemplateBeanDefinition</bannedDefinition>
                                 
<bannedDefinition>org.apache.camel.model.RoutesDefinition</bannedDefinition>
                                 
<bannedDefinition>org.apache.camel.model.RestsDefinition</bannedDefinition>
                             </bannedDefinitions>
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 224868e..73b408c 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
@@ -71,7 +71,6 @@ import org.apache.camel.model.RollbackDefinition;
 import org.apache.camel.model.RouteBuilderDefinition;
 import org.apache.camel.model.RouteContextRefDefinition;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteTemplateBeanDefinition;
 import org.apache.camel.model.RouteTemplateParameterDefinition;
 import org.apache.camel.model.RouteTemplateScriptDefinition;
 import org.apache.camel.model.RoutingSlipDefinition;
@@ -12195,71 +12194,6 @@ public final class ModelDeserializers extends 
YamlDeserializerSupport {
     }
 
     @YamlType(
-            inline = true,
-            types = org.apache.camel.model.RouteTemplateBeanDefinition.class,
-            order = 
org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
-            nodes = "template-bean",
-            properties = {
-                    @YamlProperty(name = "bean-type", type = "string"),
-                    @YamlProperty(name = "name", type = "string", required = 
true),
-                    @YamlProperty(name = "property", type = 
"array:org.apache.camel.model.PropertyDefinition"),
-                    @YamlProperty(name = "script", type = 
"object:org.apache.camel.model.RouteTemplateScriptDefinition"),
-                    @YamlProperty(name = "type", type = "string", required = 
true)
-            }
-    )
-    public static class RouteTemplateBeanDefinitionDeserializer extends 
YamlDeserializerBase<RouteTemplateBeanDefinition> {
-        public RouteTemplateBeanDefinitionDeserializer() {
-            super(RouteTemplateBeanDefinition.class);
-        }
-
-        @Override
-        protected RouteTemplateBeanDefinition newInstance() {
-            return new RouteTemplateBeanDefinition();
-        }
-
-        @Override
-        protected RouteTemplateBeanDefinition newInstance(String value) {
-            return new RouteTemplateBeanDefinition(value);
-        }
-
-        @Override
-        protected boolean setProperty(RouteTemplateBeanDefinition target, 
String propertyKey,
-                String propertyName, Node node) {
-            switch(propertyKey) {
-                case "bean-type": {
-                    String val = asText(node);
-                    target.setBeanType(val);
-                    break;
-                }
-                case "name": {
-                    String val = asText(node);
-                    target.setName(val);
-                    break;
-                }
-                case "property": {
-                    java.util.List<org.apache.camel.model.PropertyDefinition> 
val = asFlatList(node, org.apache.camel.model.PropertyDefinition.class);
-                    target.setProperties(val);
-                    break;
-                }
-                case "script": {
-                    org.apache.camel.model.RouteTemplateScriptDefinition val = 
asType(node, org.apache.camel.model.RouteTemplateScriptDefinition.class);
-                    target.setScript(val);
-                    break;
-                }
-                case "type": {
-                    String val = asText(node);
-                    target.setType(val);
-                    break;
-                }
-                default: {
-                    return false;
-                }
-            }
-            return true;
-        }
-    }
-
-    @YamlType(
             types = 
org.apache.camel.model.RouteTemplateParameterDefinition.class,
             order = 
org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
             nodes = "template-parameter",
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 eae4520..965e470 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
@@ -300,8 +300,6 @@ public final class ModelDeserializersResolver implements 
YamlDeserializerResolve
             case "org.apache.camel.model.RouteContextRefDefinition": return 
new ModelDeserializers.RouteContextRefDefinitionDeserializer();
             case "route": return new 
ModelDeserializers.RouteDefinitionDeserializer();
             case "org.apache.camel.model.RouteDefinition": return new 
ModelDeserializers.RouteDefinitionDeserializer();
-            case "template-bean": return new 
ModelDeserializers.RouteTemplateBeanDefinitionDeserializer();
-            case "org.apache.camel.model.RouteTemplateBeanDefinition": return 
new ModelDeserializers.RouteTemplateBeanDefinitionDeserializer();
             case "template-parameter": return new 
ModelDeserializers.RouteTemplateParameterDefinitionDeserializer();
             case "org.apache.camel.model.RouteTemplateParameterDefinition": 
return new ModelDeserializers.RouteTemplateParameterDefinitionDeserializer();
             case "template-script": return new 
ModelDeserializers.RouteTemplateScriptDefinitionDeserializer();
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 f962eb3..08ac067 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
@@ -41,6 +41,8 @@ public class CustomResolver implements 
YamlDeserializerResolver {
             case "template":
             case "org.apache.camel.model.RouteTemplateDefinition":
                 return new RouteTemplateDefinitionDeserializer();
+            case "org.apache.camel.model.RouteTemplateBeanDefinition":
+                return new RouteTemplateBeanDefinitionDeserializer();
             case "org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition":
                 return new NamedBeanDeserializer();
             case 
"org.apache.camel.dsl.yaml.deserializers.OutputAwareFromDefinition":
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateBeanDefinitionDeserializer.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateBeanDefinitionDeserializer.java
new file mode 100644
index 0000000..b3ec26b
--- /dev/null
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateBeanDefinitionDeserializer.java
@@ -0,0 +1,102 @@
+/*
+ * 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.stream.Collectors;
+
+import org.apache.camel.dsl.yaml.common.YamlDeserializerBase;
+import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver;
+import org.apache.camel.model.PropertyDefinition;
+import org.apache.camel.model.RouteTemplateBeanDefinition;
+import org.apache.camel.spi.annotations.YamlProperty;
+import org.apache.camel.spi.annotations.YamlType;
+import org.snakeyaml.engine.v2.nodes.Node;
+
+@YamlType(
+          inline = true,
+          types = org.apache.camel.model.RouteTemplateBeanDefinition.class,
+          order = YamlDeserializerResolver.ORDER_DEFAULT,
+          nodes = "template-bean",
+          properties = {
+                  @YamlProperty(name = "bean-type", type = "string"),
+                  @YamlProperty(name = "name", type = "string", required = 
true),
+                  @YamlProperty(name = "property", type = 
"array:org.apache.camel.model.PropertyDefinition"),
+                  @YamlProperty(name = "properties", type = "object"),
+                  @YamlProperty(name = "script", type = 
"object:org.apache.camel.model.RouteTemplateScriptDefinition"),
+                  @YamlProperty(name = "type", type = "string", required = 
true)
+          })
+public class RouteTemplateBeanDefinitionDeserializer extends 
YamlDeserializerBase<RouteTemplateBeanDefinition> {
+    public RouteTemplateBeanDefinitionDeserializer() {
+        super(RouteTemplateBeanDefinition.class);
+    }
+
+    @Override
+    protected RouteTemplateBeanDefinition newInstance() {
+        return new RouteTemplateBeanDefinition();
+    }
+
+    @Override
+    protected RouteTemplateBeanDefinition newInstance(String value) {
+        return new RouteTemplateBeanDefinition(value);
+    }
+
+    @Override
+    protected boolean setProperty(
+            RouteTemplateBeanDefinition target, String propertyKey,
+            String propertyName, Node node) {
+        switch (propertyKey) {
+            case "bean-type": {
+                String val = asText(node);
+                target.setBeanType(val);
+                break;
+            }
+            case "name": {
+                String val = asText(node);
+                target.setName(val);
+                break;
+            }
+            case "property": {
+                java.util.List<org.apache.camel.model.PropertyDefinition> val
+                        = asFlatList(node, 
org.apache.camel.model.PropertyDefinition.class);
+                target.setProperties(val);
+                break;
+            }
+            case "properties": {
+                target.setProperties(
+                        asMap(node).entrySet().stream()
+                                .map(e -> new PropertyDefinition(e.getKey(), 
(String) e.getValue()))
+                                .collect(Collectors.toList()));
+                break;
+            }
+            case "script": {
+                org.apache.camel.model.RouteTemplateScriptDefinition val
+                        = asType(node, 
org.apache.camel.model.RouteTemplateScriptDefinition.class);
+                target.setScript(val);
+                break;
+            }
+            case "type": {
+                String val = asText(node);
+                target.setType(val);
+                break;
+            }
+            default: {
+                return false;
+            }
+        }
+        return true;
+    }
+}
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 39388e3..77628a7 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
@@ -2071,6 +2071,9 @@
             "name" : {
               "type" : "string"
             },
+            "properties" : {
+              "type" : "object"
+            },
             "property" : {
               "type" : "array",
               "items" : {
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletTest.groovy
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletTest.groovy
index f4bfbb4..6d6b223 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletTest.groovy
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletTest.groovy
@@ -19,6 +19,7 @@ package org.apache.camel.dsl.yaml
 import org.apache.camel.component.mock.MockEndpoint
 import org.apache.camel.dsl.yaml.common.YamlDeserializationMode
 import org.apache.camel.dsl.yaml.support.YamlTestSupport
+import org.apache.camel.dsl.yaml.support.model.MySetBody
 import org.apache.camel.dsl.yaml.support.model.MyUppercaseProcessor
 import org.apache.camel.processor.aggregate.UseLatestAggregationStrategy
 import org.apache.camel.spi.Resource
@@ -283,6 +284,77 @@ class KameletTest extends YamlTestSupport {
             MockEndpoint.assertIsSatisfied(context)
     }
 
+    def "kamelet (definition with local bean and properties)"() {
+        setup:
+            loadRoutes """
+                - template:
+                    id: "myTemplate"
+                    beans:
+                      - name: "myProcessor"
+                        type: "#class:${MySetBody.class.name}"
+                        properties:
+                          payload: "test-payload"
+                    from:
+                      uri: "kamelet:source"
+                      steps:
+                        - process:
+                            ref: "{{myProcessor}}"
+                - from:
+                    uri: "direct:start"
+                    steps:
+                      - to: "kamelet:myTemplate"
+                      - to: "mock:result"
+            """
+
+            withMock('mock:result') {
+                expectedMessageCount 1
+                expectedBodiesReceived 'test-payload'
+            }
+        when:
+            withTemplate {
+                to('direct:start').withBody('hello').send()
+            }
+
+        then:
+            MockEndpoint.assertIsSatisfied(context)
+    }
+
+    def "kamelet (definition with local bean and property)"() {
+        setup:
+            loadRoutes """
+                - template:
+                    id: "myTemplate"
+                    beans:
+                      - name: "myProcessor"
+                        type: "#class:${MySetBody.class.name}"
+                        property:
+                          - key: "payload"
+                            value: "test-payload"
+                    from:
+                      uri: "kamelet:source"
+                      steps:
+                        - process:
+                            ref: "{{myProcessor}}"
+                - from:
+                    uri: "direct:start"
+                    steps:
+                      - to: "kamelet:myTemplate"
+                      - to: "mock:result"
+            """
+
+            withMock('mock:result') {
+                expectedMessageCount 1
+                expectedBodiesReceived 'test-payload'
+            }
+        when:
+            withTemplate {
+                to('direct:start').withBody('hello').send()
+            }
+
+        then:
+            MockEndpoint.assertIsSatisfied(context)
+    }
+
     def "kamelet (definition with default parameters)"() {
         setup:
             loadRoutes """
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteTemplateTest.groovy
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteTemplateTest.groovy
index 74f030a..a09f3d1 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteTemplateTest.groovy
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteTemplateTest.groovy
@@ -18,6 +18,7 @@ package org.apache.camel.dsl.yaml
 
 import org.apache.camel.component.mock.MockEndpoint
 import org.apache.camel.dsl.yaml.support.YamlTestSupport
+import org.apache.camel.dsl.yaml.support.model.MySetBody
 import org.apache.camel.dsl.yaml.support.model.MyUppercaseProcessor
 import org.apache.camel.model.LogDefinition
 import org.apache.camel.model.RouteTemplateDefinition
@@ -151,6 +152,95 @@ class RouteTemplateTest extends YamlTestSupport {
             ]
     }
 
+    def "create template with bean and properties"() {
+        setup:
+            loadRoutes """                
+                - template:
+                    id: "myTemplate"
+                    beans:
+                      - name: "myProcessor"
+                        type: "#class:${MySetBody.class.name}"
+                        properties:
+                          payload: "test-payload"
+                    from:
+                      uri: "direct:{{directName}}"
+                      steps:
+                        - process:
+                            ref: "{{myProcessor}}"
+                - from:
+                    uri: "direct:start"
+                    steps:
+                      - to: "direct:myId"
+                      - to: "mock:result"
+            """
+
+            withMock('mock:result') {
+                expectedMessageCount 1
+                expectedBodiesReceived 'test-payload'
+            }
+        when:
+            context.addRouteFromTemplate('myId', 'myTemplate', ['directName': 
'myId'])
+            context.start()
+
+            withTemplate {
+                to('direct:start').withBody('hello').send()
+            }
+        then:
+            context.routeTemplateDefinitions.size() == 1
+
+            with(context.routeTemplateDefinitions[0], RouteTemplateDefinition) 
{
+                id == 'myTemplate'
+                templateBeans.size() == 1
+            }
+
+            MockEndpoint.assertIsSatisfied(context)
+    }
+
+    def "create template with bean and property"() {
+        setup:
+            loadRoutes """                
+                - template:
+                    id: "myTemplate"
+                    beans:
+                      - name: "myProcessor"
+                        type: "#class:${MySetBody.class.name}"
+                        property:
+                          - key: "payload"
+                            value: "test-payload"
+                    from:
+                      uri: "direct:{{directName}}"
+                      steps:
+                        - process:
+                            ref: "{{myProcessor}}"
+                - from:
+                    uri: "direct:start"
+                    steps:
+                      - to: "direct:myId"
+                      - to: "mock:result"
+            """
+
+            withMock('mock:result') {
+                expectedMessageCount 1
+                expectedBodiesReceived 'test-payload'
+            }
+        when:
+            context.addRouteFromTemplate('myId', 'myTemplate', ['directName': 
'myId'])
+            context.start()
+
+            withTemplate {
+                to('direct:start').withBody('hello').send()
+            }
+        then:
+            context.routeTemplateDefinitions.size() == 1
+
+            with(context.routeTemplateDefinitions[0], RouteTemplateDefinition) 
{
+                id == 'myTemplate'
+                templateBeans.size() == 1
+            }
+
+            MockEndpoint.assertIsSatisfied(context)
+    }
+
     def "create template with properties"() {
         when:
             loadRoutes """

Reply via email to