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 <claus.ib...@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 })