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 b1495dc845d CAMEL-20407: camel-datasonnet - Add support for variables
b1495dc845d is described below

commit b1495dc845d2f8cfd34f2c9d238a3ad6d8e75931
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon May 20 10:25:56 2024 +0200

    CAMEL-20407: camel-datasonnet - Add support for variables
---
 .../src/main/docs/datasonnet-language.adoc         |  2 ++
 .../org/apache/camel/language/datasonnet/CML.java  | 10 +++++++++
 .../language/datasonnet/CamelDatasonnetTest.java   |  7 ++++++
 .../camel/language.datasonnet/camel-context.xml    | 26 ++++++++++++++++++++++
 4 files changed, 45 insertions(+)

diff --git a/components/camel-datasonnet/src/main/docs/datasonnet-language.adoc 
b/components/camel-datasonnet/src/main/docs/datasonnet-language.adoc
index 5020ed32f2a..1011870fae7 100644
--- a/components/camel-datasonnet/src/main/docs/datasonnet-language.adoc
+++ b/components/camel-datasonnet/src/main/docs/datasonnet-language.adoc
@@ -171,6 +171,8 @@ xref:ROOT:properties-component.adoc[Properties] component 
(property placeholders
 |cml.header |the header name |String |Will return the message header.
 
 |cml.exchangeProperty |key for property |String |Will return the exchange 
property.
+
+|cml.variable |the variable name |String |Will return the exchange variable.
 |===
 
 Here's an example showing some of these functions in use:
diff --git 
a/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/CML.java
 
b/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/CML.java
index 756bacfbc3b..e759f5b978c 100644
--- 
a/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/CML.java
+++ 
b/components/camel-datasonnet/src/main/java/org/apache/camel/language/datasonnet/CML.java
@@ -66,6 +66,9 @@ public final class CML extends Library {
         answer.put("header", makeSimpleFunc(
                 Collections.singletonList("key"), //parameters list
                 params -> header(params.get(0), dataFormats)));
+        answer.put("variable", makeSimpleFunc(
+                Collections.singletonList("key"), //parameters list
+                params -> variable(params.get(0), dataFormats)));
         answer.put("exchangeProperty", makeSimpleFunc(
                 Collections.singletonList("key"), //parameters list
                 params -> exchangeProperty(params.get(0), dataFormats)));
@@ -91,6 +94,13 @@ public final class CML extends Library {
         throw new IllegalArgumentException("Expected String got: " + 
key.prettyName());
     }
 
+    private Val variable(Val key, DataFormatService dataformats) {
+        if (key instanceof Val.Str) {
+            return valFrom(exchange.get().getVariable(((Val.Str) 
key).value()), dataformats);
+        }
+        throw new IllegalArgumentException("Expected String got: " + 
key.prettyName());
+    }
+
     private Val exchangeProperty(Val key, DataFormatService dataformats) {
         if (key instanceof Val.Str) {
             return valFrom(exchange.get().getProperty(((Val.Str) 
key).value()), dataformats);
diff --git 
a/components/camel-datasonnet/src/test/java/org/apache/camel/language/datasonnet/CamelDatasonnetTest.java
 
b/components/camel-datasonnet/src/test/java/org/apache/camel/language/datasonnet/CamelDatasonnetTest.java
index 22486236499..3b0251cda88 100644
--- 
a/components/camel-datasonnet/src/test/java/org/apache/camel/language/datasonnet/CamelDatasonnetTest.java
+++ 
b/components/camel-datasonnet/src/test/java/org/apache/camel/language/datasonnet/CamelDatasonnetTest.java
@@ -85,6 +85,13 @@ public class CamelDatasonnetTest extends 
CamelSpringTestSupport {
                 "direct:expressionLanguage");
     }
 
+    @Test
+    public void testVariable() throws Exception {
+        runCamelTest("World",
+                "{ \"test\":\"Hello, World\"}",
+                "direct:variable");
+    }
+
     @Test
     public void testNullInput() throws Exception {
         runCamelTest("",
diff --git 
a/components/camel-datasonnet/src/test/resources/org/apache/camel/language.datasonnet/camel-context.xml
 
b/components/camel-datasonnet/src/test/resources/org/apache/camel/language.datasonnet/camel-context.xml
index a7ca6d87cdc..055885542b4 100644
--- 
a/components/camel-datasonnet/src/test/resources/org/apache/camel/language.datasonnet/camel-context.xml
+++ 
b/components/camel-datasonnet/src/test/resources/org/apache/camel/language.datasonnet/camel-context.xml
@@ -165,6 +165,32 @@
             <to uri="mock:direct:end"/>
         </route>
 
+        <route id="variable">
+            <from uri="direct:variable"/>
+
+            <setHeader name="CamelDatasonnetOutputMediaType">
+                <constant>text/plain</constant>
+            </setHeader>
+            <setVariable name="HelloVar">
+                <language language="datasonnet">"Hello, " + payload</language>
+            </setVariable>
+
+            <setHeader name="CamelDatasonnetOutputMediaType">
+                <constant>application/json</constant>
+            </setHeader>
+            <setBody>
+                <language language="datasonnet">
+                    <![CDATA[
+                    {
+                        test: cml.variable('HelloVar')
+                    }
+                    ]]>
+                </language>
+            </setBody>
+
+            <to uri="mock:direct:end"/>
+        </route>
+
         <route id="nullInput">
             <from uri="direct:nullInput"/>
             <setBody>

Reply via email to