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 2021/11/04 12:43:24 UTC

[camel] branch main updated: camel-groovy-dsl - Improve using groovy clousures in setHeader and to configure beans as Camel expression

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

davsclaus 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 7f090c8  camel-groovy-dsl - Improve using groovy clousures in setHeader and to configure beans as Camel expression
7f090c8 is described below

commit 7f090c804a609d5101334f3c7caf40af087e3085
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Nov 4 13:42:47 2021 +0100

    camel-groovy-dsl - Improve using groovy clousures in setHeader and to configure beans as Camel expression
---
 .../apache/camel/dsl/groovy/common/GroovyDSL.groovy    | 11 +++++++++++
 .../extensions/ProcessorDefinitionExtensions.groovy    | 12 ++++++++++++
 .../dsl/groovy/common/model/BeansConfiguration.groovy  |  9 +++++++++
 .../dsl/groovy/GroovyRouteBuilderLoaderTest.groovy     | 10 ++++++++++
 .../src/test/resources/routes/routes-with-beans.groovy |  4 ++++
 ...s.groovy => routes-with-set-header-variable.groovy} | 18 ++++--------------
 6 files changed, 50 insertions(+), 14 deletions(-)

diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/GroovyDSL.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/GroovyDSL.groovy
index 171fea4..9b7b9b0 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/GroovyDSL.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/GroovyDSL.groovy
@@ -17,6 +17,7 @@
 package org.apache.camel.dsl.groovy.common
 
 import org.apache.camel.Exchange
+import org.apache.camel.Expression
 import org.apache.camel.Predicate
 import org.apache.camel.Processor
 import org.apache.camel.builder.BuilderSupport
@@ -37,6 +38,7 @@ import org.apache.camel.model.RouteDefinition
 import org.apache.camel.model.rest.RestConfigurationDefinition
 import org.apache.camel.model.rest.RestDefinition
 import org.apache.camel.spi.Registry
+import org.apache.camel.support.builder.ExpressionBuilder
 
 class GroovyDSL extends BuilderSupport implements EndpointBuilderFactory {
     final Registry registry
@@ -132,4 +134,13 @@ class GroovyDSL extends BuilderSupport implements EndpointBuilderFactory {
             return callable.call(it)
         } as Predicate
     }
+
+    static Expression expression(@DelegatesTo(Exchange) Closure<?> callable) {
+        callable.resolveStrategy = Closure.DELEGATE_FIRST
+
+        return {
+            return callable.call(it)
+        } as Expression
+    }
+
 }
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/extensions/ProcessorDefinitionExtensions.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/extensions/ProcessorDefinitionExtensions.groovy
index 38f7300..011e4e7 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/extensions/ProcessorDefinitionExtensions.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/extensions/ProcessorDefinitionExtensions.groovy
@@ -18,6 +18,7 @@ package org.apache.camel.dsl.groovy.common.extensions
 
 import groovy.transform.CompileStatic
 import org.apache.camel.Exchange
+import org.apache.camel.Expression
 import org.apache.camel.Processor
 import org.apache.camel.model.ProcessorDefinition
 
@@ -35,6 +36,17 @@ class ProcessorDefinitionExtensions {
         });
     }
 
+    static <T extends ProcessorDefinition<T>> T setHeader(ProcessorDefinition<T> self, String name, Closure<?> callable) {
+        return self.setHeader(name, new Expression() {
+            @Override
+            def <T> T evaluate(Exchange exchange, Class<T> type) {
+                callable.resolveStrategy = Closure.DELEGATE_ONLY
+                Object obj = callable.call(exchange)
+                return exchange.getContext().getTypeConverter().convertTo(type, exchange, obj)
+            }
+        });
+    }
+
     static <T extends ProcessorDefinition<T>> T process(ProcessorDefinition<T> self, Closure<?> callable) {
         return self.process(new Processor() {
             @Override
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/model/BeansConfiguration.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/model/BeansConfiguration.groovy
index fed4ea4..4980ffa 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/model/BeansConfiguration.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/model/BeansConfiguration.groovy
@@ -18,6 +18,7 @@ package org.apache.camel.dsl.groovy.common.model
 
 import org.apache.camel.CamelContext
 import org.apache.camel.Exchange
+import org.apache.camel.Expression
 import org.apache.camel.Predicate
 import org.apache.camel.Processor
 import org.apache.camel.builder.endpoint.EndpointBuilderFactory
@@ -69,4 +70,12 @@ class BeansConfiguration implements EndpointBuilderFactory {
             return callable.call(it)
         } as Predicate
     }
+
+    static Expression expression(@DelegatesTo(Exchange) Closure<?> callable) {
+        callable.resolveStrategy = Closure.DELEGATE_FIRST
+
+        return {
+            return callable.call(it)
+        } as Expression
+    }
 }
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/groovy/org/apache/camel/dsl/groovy/GroovyRouteBuilderLoaderTest.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/groovy/org/apache/camel/dsl/groovy/GroovyRouteBuilderLoaderTest.groovy
index d0fbbe0..602dc0e 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/groovy/org/apache/camel/dsl/groovy/GroovyRouteBuilderLoaderTest.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/groovy/org/apache/camel/dsl/groovy/GroovyRouteBuilderLoaderTest.groovy
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.dsl.groovy
 
+import org.apache.camel.Expression
 import org.apache.camel.Predicate
 import org.apache.camel.Processor
 import org.apache.camel.component.jackson.JacksonDataFormat
@@ -121,6 +122,7 @@ class GroovyRouteBuilderLoaderTest extends Specification {
                 it.lookupByName('filterStrategy') instanceof DefaultHeaderFilterStrategy
                 it.lookupByName('myProcessor') instanceof Processor
                 it.lookupByName('myPredicate') instanceof Predicate
+                it.lookupByName('myExpression') instanceof Expression
             }
     }
 
@@ -210,4 +212,12 @@ class GroovyRouteBuilderLoaderTest extends Specification {
         then:
             1 == 1
     }
+
+    def "load integration with set-header-variable"()  {
+        when:
+            loadRoute('/routes/routes-with-set-header-variable.groovy')
+            context.start()
+        then:
+            1 == 1
+    }
 }
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy
index e6e35e0..2b63933e 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy
@@ -29,4 +29,8 @@ beans {
     myPredicate = predicate {
         false
     }
+
+    myExpression = expression {
+        'Hello World'
+    }
 }
\ No newline at end of file
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-set-header-variable.groovy
similarity index 72%
copy from dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy
copy to dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-set-header-variable.groovy
index e6e35e0..7ca612a 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-beans.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-test/src/test/resources/routes/routes-with-set-header-variable.groovy
@@ -14,19 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-beans {
-    myBean(org.apache.camel.dsl.groovy.support.MyBean) {
-        name = "test"
-    }
-    filterStrategy {
-        new org.apache.camel.support.DefaultHeaderFilterStrategy()
-    }
 
-    myProcessor = processor {
-        it.in.body = 'value'
-    }
+def myVar = "Hello World"
 
-    myPredicate = predicate {
-        false
-    }
-}
\ No newline at end of file
+from("direct:1")
+    .setHeader("foo", { myVar.reverse() } )
+    .setBody( { 3 * 2 })