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

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

commit 0f386e98d186e6618ed8e41a814ea1bfda77a007
Author: Gaelle Fournier <gaelle.fournier.w...@gmail.com>
AuthorDate: Wed Oct 2 16:27:13 2024 +0200

    CAMEL-21295: Add Knative Trigger filter to camel-jbang-kubernetes plugin
---
 .../kubernetes/traits/knative/KnativeTrait.java    | 41 ++++++++++++----------
 .../commands/kubernetes/traits/model/Knative.java  | 12 +++----
 .../kubernetes/KubernetesExportKnativeTest.java    |  5 ++-
 3 files changed, 32 insertions(+), 26 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/knative/KnativeTrait.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/knative/KnativeTrait.java
index 929d649ce09..3935597dc9e 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/knative/KnativeTrait.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/knative/KnativeTrait.java
@@ -38,6 +38,7 @@ import 
io.fabric8.knative.internal.pkg.apis.duck.v1.KReferenceBuilder;
 import io.fabric8.knative.internal.pkg.tracker.ReferenceBuilder;
 import io.fabric8.knative.messaging.v1.SubscriptionBuilder;
 import io.fabric8.knative.sources.v1.SinkBindingBuilder;
+import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.dsl.jbang.core.commands.kubernetes.KubernetesHelper;
 import 
org.apache.camel.dsl.jbang.core.commands.kubernetes.support.SourceMetadata;
 import org.apache.camel.dsl.jbang.core.commands.kubernetes.traits.ServiceTrait;
@@ -119,7 +120,7 @@ public class KnativeTrait extends KnativeBaseTrait {
         Knative knativeTrait = 
Optional.ofNullable(traitConfig.getKnative()).orElseGet(Knative::new);
 
         configureChannels(knativeTrait, context);
-        configureEndpoints(knativeTrait, context);
+        configureEndpoints(knativeTrait);
         configureEvents(knativeTrait, context);
 
         if (knativeTrait.getSinkBinding() != null && 
knativeTrait.getSinkBinding()) {
@@ -145,7 +146,7 @@ public class KnativeTrait extends KnativeBaseTrait {
 
     private void configureChannels(Knative knativeTrait, TraitContext context) 
{
         for (String uri : knativeTrait.getChannelSources()) {
-            createSubscription(toKnativeUri(KnativeResourceType.CHANNEL, uri), 
knativeTrait, context);
+            createSubscription(toKnativeUri(KnativeResourceType.CHANNEL, uri), 
context);
         }
 
         for (String uri : knativeTrait.getChannelSinks()) {
@@ -161,7 +162,7 @@ public class KnativeTrait extends KnativeBaseTrait {
         }
     }
 
-    private void configureEndpoints(Knative knativeTrait, TraitContext 
context) {
+    private void configureEndpoints(Knative knativeTrait) {
         for (String uri : knativeTrait.getEndpointSources()) {
             String endpointName = extractKnativeResource(uri);
             addKnativeResourceConfiguration(new KnativeResourceConfiguration(
@@ -207,7 +208,7 @@ public class KnativeTrait extends KnativeBaseTrait {
         }
     }
 
-    private void createSubscription(String uri, Knative knativeTrait, 
TraitContext context) {
+    private void createSubscription(String uri, TraitContext context) {
         String channelName = extractKnativeResource(uri);
 
         String subscriptionName = createSubscriptionName(context.getName(), 
channelName);
@@ -286,21 +287,23 @@ public class KnativeTrait extends KnativeBaseTrait {
 
     private Map<String, String> getFilterAttributes(Knative knativeTrait, 
String eventType) {
         Map<String, String> filterAttributes = new HashMap<>();
-        filterAttributes.put("type", eventType);
-
-        // TODO: use this as soon as new Camel K CRD model has been released
-        //        for (String filterExpression : knativeTrait.getFilters()) {
-        //            String[] keyValue = filterExpression.split("=", 2);
-        //            if (keyValue.length != 2) {
-        //                throw new RuntimeCamelException("Invalid Knative 
trigger filter expression: %s".formatted(filterExpression));
-        //            }
-        //            filterAttributes.put(keyValue[0].trim(), 
keyValue[1].trim());
-        //        }
-        //
-        //        if (!filterAttributes.containsKey("type") && 
Optional.ofNullable(knativeTrait.getFilterEventType()).orElse(true) && 
ObjectHelper.isNotEmpty(eventType)) {
-        //            // Apply default trigger filter attribute for the event 
type
-        //            filterAttributes.put("type", eventType);
-        //        }
+
+        if (knativeTrait.getFilters() != null) {
+            for (String filterExpression : knativeTrait.getFilters()) {
+                String[] keyValue = filterExpression.split("=", 2);
+                if (keyValue.length != 2) {
+                    throw new RuntimeCamelException(
+                            "Invalid Knative trigger filter expression: 
%s".formatted(filterExpression));
+                }
+                filterAttributes.put(keyValue[0].trim(), keyValue[1].trim());
+            }
+        }
+
+        if (!filterAttributes.containsKey("type") && 
Optional.ofNullable(knativeTrait.getFilterEventType()).orElse(true)
+                && ObjectHelper.isNotEmpty(eventType)) {
+            // Apply default trigger filter attribute for the event type
+            filterAttributes.put("type", eventType);
+        }
 
         return filterAttributes;
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Knative.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Knative.java
index 3410f64b3be..71ec3cc806f 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Knative.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/main/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/traits/model/Knative.java
@@ -28,7 +28,7 @@ import com.fasterxml.jackson.annotation.Nulls;
 
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonPropertyOrder({
-        "auto", "channelSinks", "channelSources", "config", "enabled", 
"endpointSinks", "endpointSources",
+        "auto", "channelSinks", "channelSources", "configuration", "enabled", 
"endpointSinks", "endpointSources",
         "eventSinks", "eventSources", "filterEventType", 
"filterSourceChannels", "filters", "namespaceLabel", "sinkBinding" })
 public class Knative {
     @JsonProperty("auto")
@@ -50,7 +50,7 @@ public class Knative {
     @JsonPropertyDescription("Can be used to inject a Knative complete 
configuration in JSON format.")
     @JsonSetter(
                 nulls = Nulls.SKIP)
-    private String config;
+    private String configuration;
     @JsonProperty("enabled")
     @JsonPropertyDescription("Can be used to enable or disable a trait. All 
traits share this common property.")
     @JsonSetter(
@@ -129,12 +129,12 @@ public class Knative {
         this.channelSources = channelSources;
     }
 
-    public String getConfig() {
-        return this.config;
+    public String getConfiguration() {
+        return this.configuration;
     }
 
-    public void setConfig(String config) {
-        this.config = config;
+    public void setConfiguration(String configuration) {
+        this.configuration = configuration;
     }
 
     public Boolean getEnabled() {
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportKnativeTest.java
 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportKnativeTest.java
index e06ac35976a..36282cf07b4 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportKnativeTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-kubernetes/src/test/java/org/apache/camel/dsl/jbang/core/commands/kubernetes/KubernetesExportKnativeTest.java
@@ -92,6 +92,8 @@ public class KubernetesExportKnativeTest extends 
KubernetesExportBaseTest {
     public void shouldAddKnativeTrigger(RuntimeType rt) throws Exception {
         KubernetesExport command = createCommand(new String[] { 
"classpath:knative-event-source.yaml" },
                 "--image-group=camel-test", "--runtime=" + rt.runtime());
+        command.traits = new String[] {
+                "knative.filters=source=my-source" };
         command.doCall();
 
         Assertions.assertTrue(hasService(rt));
@@ -102,8 +104,9 @@ public class KubernetesExportKnativeTest extends 
KubernetesExportBaseTest {
 
         Assertions.assertEquals("my-broker-knative-event-source-camel-event", 
trigger.getMetadata().getName());
         Assertions.assertEquals("my-broker", trigger.getSpec().getBroker());
-        Assertions.assertEquals(1, 
trigger.getSpec().getFilter().getAttributes().size());
+        Assertions.assertEquals(2, 
trigger.getSpec().getFilter().getAttributes().size());
         Assertions.assertEquals("camel-event", 
trigger.getSpec().getFilter().getAttributes().get("type"));
+        Assertions.assertEquals("my-source", 
trigger.getSpec().getFilter().getAttributes().get("source"));
         Assertions.assertEquals("knative-event-source", 
trigger.getSpec().getSubscriber().getRef().getName());
         Assertions.assertEquals("Service", 
trigger.getSpec().getSubscriber().getRef().getKind());
         Assertions.assertEquals("v1", 
trigger.getSpec().getSubscriber().getRef().getApiVersion());

Reply via email to