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

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


The following commit(s) were added to refs/heads/bind by this push:
     new ded6047  CAMEL-17261: camel-yaml-dsl - Add support for loading Camel K 
KameletBinding file. WIP.
ded6047 is described below

commit ded6047e9e3df4e9af8b0e29a724e4fbe9251bab
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Dec 6 11:05:08 2021 +0100

    CAMEL-17261: camel-yaml-dsl - Add support for loading Camel K 
KameletBinding file. WIP.
---
 dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml          |  5 +++
 .../camel/dsl/yaml/YamlRoutesBuilderLoader.java    | 13 ++++++--
 .../camel/dsl/yaml/KameletBindingLoaderTest.groovy | 37 ++++++++++++++++++++++
 3 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml
index 045ff78..7170e1d4 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/pom.xml
@@ -121,6 +121,11 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
+            <artifactId>camel-stub</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
             <artifactId>camel-log</artifactId>
             <scope>test</scope>
         </dependency>
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 b972525..339ec63 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
@@ -56,6 +56,7 @@ public class YamlRoutesBuilderLoader extends 
YamlRoutesBuilderLoaderSupport {
     // API versions for Camel-K Integration and Kamelet Binding
     private static final String INTEGRATION_VERSION = "camel.apache.org/v1";
     private static final String BINDING_VERSION = "camel.apache.org/v1alpha1";
+    private static final String STRIMZI_VERSION = "kafka.strimzi.io/v1beta1";
 
     public YamlRoutesBuilderLoader() {
         super(EXTENSION);
@@ -238,8 +239,10 @@ public class YamlRoutesBuilderLoader extends 
YamlRoutesBuilderLoaderSupport {
 
         // extract uri is different if kamelet or not
         boolean kamelet = mn != null && anyTupleMatches(mn.getValue(), "kind", 
"Kamelet");
+        boolean strimzi = !kamelet && mn != null && 
anyTupleMatches(mn.getValue(), "apiVersion", STRIMZI_VERSION)
+                && anyTupleMatches(mn.getValue(), "kind", "KafkaTopic");
         String uri;
-        if (kamelet) {
+        if (kamelet || strimzi) {
             uri = extractTupleValue(mn.getValue(), "name");
         } else {
             uri = extractTupleValue(node.getValue(), "uri");
@@ -253,7 +256,13 @@ public class YamlRoutesBuilderLoader extends 
YamlRoutesBuilderLoaderSupport {
             uri = uri + "?" + query;
         }
 
-        return kamelet ? "kamelet:" + uri : uri;
+        if (kamelet) {
+            return "kamelet:" + uri;
+        } else if (strimzi) {
+            return "kafka:" + uri;
+        } else {
+            return uri;
+        }
     }
 
 }
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletBindingLoaderTest.groovy
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletBindingLoaderTest.groovy
index a2a0323..98d334e 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletBindingLoaderTest.groovy
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletBindingLoaderTest.groovy
@@ -240,5 +240,42 @@ class KameletBindingLoaderTest extends YamlTestSupport {
         }
     }
 
+    def "kamelet binding from kamelet to strimzi"() {
+        when:
+
+        // stub kafka for testing as it requires to setup connection to a real 
kafka broker
+        context.addComponent("kafka", context.getComponent("stub"))
+
+        loadBindings('''
+                apiVersion: camel.apache.org/v1alpha1
+                kind: KameletBinding
+                metadata:
+                  name: timer-event-source                  
+                spec:
+                  source:
+                    ref:
+                      kind: Kamelet
+                      apiVersion: camel.apache.org/v1
+                      name: timer-source
+                    properties:
+                      message: "Hello world!"
+                  sink:
+                    ref:
+                      kind: KafkaTopic
+                      apiVersion: kafka.strimzi.io/v1beta1
+                      name: my-topic
+            ''')
+        then:
+        context.routeDefinitions.size() == 2
+
+        with (context.routeDefinitions[0]) {
+            routeId == 'timer-event-source'
+            input.endpointUri == 'kamelet:timer-source?message=Hello+world%21'
+            outputs.size() == 1
+            with (outputs[0], ToDefinition) {
+                endpointUri == 'kafka:my-topic'
+            }
+        }
+    }
 
 }

Reply via email to