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

davsclaus pushed a commit to branch eip
in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git

commit ef2a9441db638f3ffc5ec099a24ff4c79e03a32a
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Wed Apr 15 14:36:40 2020 +0200

    yaml dsl - Add idempotent consumer EIP and update docs
---
 camel-k-loader-yaml/README.adoc                    | 33 ++++++++++---
 .../yaml/parser/IdempotentConsumerParser.java      | 46 ++++++++++++++++++
 .../apache/camel/k/loader/yaml/RoutesTest.groovy   | 31 ++++++++++++-
 .../yaml/parser/IdempotentConsumerTest.groovy      | 54 ++++++++++++++++++++++
 .../routes/RoutesTest_idempotentConsumer.yaml      | 25 ++++++++++
 5 files changed, 181 insertions(+), 8 deletions(-)

diff --git a/camel-k-loader-yaml/README.adoc b/camel-k-loader-yaml/README.adoc
index 1ee9b30..90df923 100644
--- a/camel-k-loader-yaml/README.adoc
+++ b/camel-k-loader-yaml/README.adoc
@@ -1,14 +1,13 @@
-YAML DSL
-========
+= YAML DSL
 
 This artifact provides a YAML based DSL for Apache Camel and Apache Camel K.
 
 [WARNING]
 ====
-experimental
+Experimental
 ====
 
-=== Defining a route
+== Defining a route
 
 A route is a sequence of elements, or `steps`, defined as follow:
 
@@ -116,31 +115,51 @@ In case you want to use the data-format's default 
settings, you need to place an
 ====
 
 
-=== Supported EIP
+== Supported EIP
 
+- Aggregate
+- Bean
 - Choice
 - Claim Check
 - Convert Body
 - Delay
+- Dynamic Router
+- Enrich
 - Filter
+- From
+- Idempotent Consumer
 - Log
+- Loop
 - Marshal
+- Multicast
 - Pipeline
+- PollEnrich
 - Process
+- Recipient List
 - Remove Header
 - Remove Headers
 - Remove Property
 - Remove Properties
+- Resequence
+- Rest DSL
+- Routing Slip
+- Sample
 - Set Body
 - Set Header
 - Set Property
+- Sort
 - Split
+- Threads
+- Throttle
 - To
 - To Dynamic
 - Transform
+- Unmarshal
+- Validate
+- Wire Tap
 
 
-=== Extending the DSL
+== Extending the DSL
 
 The DSL is designed to be easily extended so you can provide your own step 
handler which is discovered at runtime using Camel's factory finder.
 
@@ -201,4 +220,4 @@ from:
         host: acme.com
         port: 8081
 ----
-<1> Parameters go here
+
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/IdempotentConsumerParser.java
 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/IdempotentConsumerParser.java
new file mode 100644
index 0000000..e35ba8d
--- /dev/null
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/parser/IdempotentConsumerParser.java
@@ -0,0 +1,46 @@
+/*
+ * 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.k.loader.yaml.parser;
+
+import java.util.List;
+
+import org.apache.camel.k.annotation.yaml.YAMLNodeDefinition;
+import org.apache.camel.k.annotation.yaml.YAMLStepParser;
+import org.apache.camel.k.loader.yaml.model.Step;
+import org.apache.camel.model.IdempotentConsumerDefinition;
+import org.apache.camel.model.ProcessorDefinition;
+import org.apache.camel.reifier.IdempotentConsumerReifier;
+
+@YAMLStepParser("idempotent-consumer")
+public class IdempotentConsumerParser implements ProcessorStepParser {
+    @Override
+    public ProcessorDefinition<?> toProcessor(Context context) {
+        Definition definition = context.node(Definition.class);
+
+        return StepParserSupport.convertSteps(
+            context,
+            definition,
+            definition.steps
+        );
+    }
+
+    @YAMLNodeDefinition(reifiers = IdempotentConsumerReifier.class)
+    public static final class Definition extends IdempotentConsumerDefinition 
implements HasExpression {
+        public List<Step> steps;
+    }
+}
+
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesTest.groovy
 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesTest.groovy
index db020e4..3fc24b0 100644
--- 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesTest.groovy
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/RoutesTest.groovy
@@ -16,9 +16,9 @@
  */
 package org.apache.camel.k.loader.yaml
 
-
 import org.apache.camel.component.mock.MockEndpoint
 import org.apache.camel.processor.aggregate.UseLatestAggregationStrategy
+import org.apache.camel.support.processor.idempotent.MemoryIdempotentRepository
 
 class RoutesTest extends TestSupport {
 
@@ -100,4 +100,33 @@ class RoutesTest extends TestSupport {
         cleanup:
             context?.stop()
     }
+
+    def 'idempotentConsumer'() {
+        setup:
+        def context = startContext([
+                'myRepo': new MemoryIdempotentRepository()
+        ])
+
+        
org.apache.camel.k.loader.yaml.TestSupport.mockEndpoint(context,'mock:idempotent')
 {
+            expectedMessageCount = 3
+            expectedBodiesReceived 'a', 'b', 'c'
+        }
+        
org.apache.camel.k.loader.yaml.TestSupport.mockEndpoint(context,'mock:route') {
+            expectedMessageCount = 5
+            expectedBodiesReceived 'a', 'b', 'a2', 'b2', 'c'
+        }
+        when:
+        context.createProducerTemplate().with {
+            sendBodyAndHeader('direct:route', 'a', 'id', '1')
+            sendBodyAndHeader('direct:route', 'b', 'id', '2')
+            sendBodyAndHeader('direct:route', 'a2', 'id', '1')
+            sendBodyAndHeader('direct:route', 'b2', 'id', '2')
+            sendBodyAndHeader('direct:route', 'c', 'id', '3')
+        }
+        then:
+            MockEndpoint.assertIsSatisfied(context)
+        cleanup:
+            context?.stop()
+    }
+
 }
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/IdempotentConsumerTest.groovy
 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/IdempotentConsumerTest.groovy
new file mode 100644
index 0000000..277f2c3
--- /dev/null
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/groovy/org/apache/camel/k/loader/yaml/parser/IdempotentConsumerTest.groovy
@@ -0,0 +1,54 @@
+/*
+ * 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.k.loader.yaml.parser
+
+import org.apache.camel.k.loader.yaml.TestSupport
+import org.apache.camel.model.IdempotentConsumerDefinition
+import org.apache.camel.model.SplitDefinition
+
+class IdempotentConsumerTest extends TestSupport {
+
+    def "definition with expression"() {
+        given:
+            def stepContext = stepContext('''
+                 simple: "${header.id}"
+            ''')
+        when:
+            def processor = new 
IdempotentConsumerParser().toProcessor(stepContext)
+        then:
+            def p = processor as IdempotentConsumerDefinition
+
+            p.expression.language == 'simple'
+            p.expression.expression == '${header.id}'
+    }
+
+    def "definition with expression block"() {
+        given:
+            def stepContext = stepContext('''
+                 expression:
+                   simple: "${header.id}"
+            ''')
+        when:
+            def processor = new 
IdempotentConsumerParser().toProcessor(stepContext)
+        then:
+            with(processor, IdempotentConsumerDefinition) {
+                expression.language == 'simple'
+                expression.expression == '${header.id}'
+            }
+    }
+
+}
diff --git 
a/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesTest_idempotentConsumer.yaml
 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesTest_idempotentConsumer.yaml
new file mode 100644
index 0000000..36097e6
--- /dev/null
+++ 
b/camel-k-loader-yaml/camel-k-loader-yaml/src/test/resources/routes/RoutesTest_idempotentConsumer.yaml
@@ -0,0 +1,25 @@
+#
+# 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.
+#
+- from:
+    uri: "direct:route"
+    steps:
+      - idempotent-consumer:
+          simple: "${header.id}"
+          message-id-repository-ref: "myRepo"
+          steps:
+            - to: "mock:idempotent"
+      - to: "mock:route"

Reply via email to