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

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

commit 8c6f7e4d31d9419e03641233337898e1aa835c8a
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu Aug 15 09:45:33 2024 +0200

    CAMEL-21081: Add iif function to simple language
---
 .../language/csimple/joor/OriginalSimpleTest.java  | 28 ++++++++++++++++++++++
 .../language/csimple/CSimpleCodeGenerator.java     |  1 +
 .../camel/language/csimple/CSimpleHelper.java      | 20 ++++++++++++++++
 .../simple/ast/SimpleFunctionExpression.java       | 14 +++++++++++
 4 files changed, 63 insertions(+)

diff --git 
a/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
 
b/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
index e7aa30324f1..c3b2d990983 100644
--- 
a/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
+++ 
b/components/camel-csimple-joor/src/test/java/org/apache/camel/language/csimple/joor/OriginalSimpleTest.java
@@ -43,6 +43,7 @@ import 
org.apache.camel.language.bean.RuntimeBeanExpressionException;
 import org.apache.camel.language.csimple.CSimpleLanguage;
 import org.apache.camel.language.simple.types.SimpleIllegalSyntaxException;
 import org.apache.camel.spi.Language;
+import org.apache.camel.spi.UuidGenerator;
 import org.apache.camel.spi.VariableRepository;
 import org.apache.camel.spi.VariableRepositoryFactory;
 import org.apache.camel.support.ExchangeHelper;
@@ -2180,6 +2181,33 @@ public class OriginalSimpleTest extends 
LanguageTestSupport {
         assertNull(s);
     }
 
+    @Test
+    public void testUuid() {
+        Expression expression = 
context.resolveLanguage("csimple").createExpression("${uuid}");
+        String s = expression.evaluate(exchange, String.class);
+        assertNotNull(s);
+
+        expression = 
context.resolveLanguage("csimple").createExpression("${uuid(default)}");
+        s = expression.evaluate(exchange, String.class);
+        assertNotNull(s);
+
+        expression = 
context.resolveLanguage("csimple").createExpression("${uuid(short)}");
+        s = expression.evaluate(exchange, String.class);
+        assertNotNull(s);
+
+        expression = 
context.resolveLanguage("csimple").createExpression("${uuid(simple)}");
+        s = expression.evaluate(exchange, String.class);
+        assertNotNull(s);
+
+        expression = 
context.resolveLanguage("csimple").createExpression("${uuid(classic)}");
+        s = expression.evaluate(exchange, String.class);
+        assertNotNull(s);
+
+        // custom generator
+        context.getRegistry().bind("mygen", (UuidGenerator) () -> "1234");
+        assertExpression("${uuid(mygen)}", "1234");
+    }
+
     @Override
     protected String getLanguageName() {
         return "csimple";
diff --git 
a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleCodeGenerator.java
 
b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleCodeGenerator.java
index 10c491cb2da..f6304517930 100644
--- 
a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleCodeGenerator.java
+++ 
b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleCodeGenerator.java
@@ -96,6 +96,7 @@ public class CSimpleCodeGenerator {
         sb.append("public class ").append(name).append(" extends 
org.apache.camel.language.csimple.CSimpleSupport {\n");
         sb.append("\n");
         sb.append("    Language bean;\n");
+        sb.append("    UuidGenerator uuid;\n");
         sb.append("\n");
         sb.append("    public ").append(name).append("() {\n");
         sb.append("    }\n");
diff --git 
a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleHelper.java
 
b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleHelper.java
index 6f1d730118c..b572aef5478 100644
--- 
a/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleHelper.java
+++ 
b/core/camel-core-languages/src/main/java/org/apache/camel/language/csimple/CSimpleHelper.java
@@ -41,10 +41,16 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.ExchangeFormatter;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.PropertiesComponent;
+import org.apache.camel.spi.UuidGenerator;
+import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.ClassicUuidGenerator;
+import org.apache.camel.support.DefaultUuidGenerator;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.GroupIterator;
 import org.apache.camel.support.LanguageHelper;
 import org.apache.camel.support.MessageHelper;
+import org.apache.camel.support.ShortUuidGenerator;
+import org.apache.camel.support.SimpleUuidGenerator;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.InetAddressUtil;
 import org.apache.camel.util.ObjectHelper;
@@ -738,4 +744,18 @@ public final class CSimpleHelper {
         return null;
     }
 
+    public static UuidGenerator createUuidGenerator(Exchange exchange, String 
generator) {
+        if ("classic".equalsIgnoreCase(generator)) {
+            return new ClassicUuidGenerator();
+        } else if ("short".equals(generator)) {
+            return new ShortUuidGenerator();
+        } else if ("simple".equals(generator)) {
+            return new SimpleUuidGenerator();
+        } else if (generator == null || "default".equals(generator)) {
+            return new DefaultUuidGenerator();
+        } else {
+            // lookup custom generator
+            return CamelContextHelper.mandatoryLookup(exchange.getContext(), 
generator, UuidGenerator.class);
+        }
+    }
 }
diff --git 
a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
 
b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
index e2c9b23e410..e0801692538 100644
--- 
a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
+++ 
b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
@@ -1882,6 +1882,20 @@ public class SimpleFunctionExpression extends 
LiteralExpression {
             return "var val = " + tokens[0] + ";\n        return 
hash(exchange, val, " + algo + ");";
         }
 
+        // uuid function
+        remainder = ifStartsWithReturnRemainder("uuid", function);
+        if (remainder == null && "uuid".equals(function)) {
+            remainder = "(default)";
+        }
+        if (remainder != null) {
+            String generator = StringHelper.between(remainder, "(", ")");
+            if (generator == null) {
+                generator = "default";
+            }
+            generator = StringQuoteHelper.doubleQuote(generator);
+            return "if (uuid == null) uuid = createUuidGenerator(exchange, " + 
generator + "); return uuid.generateUuid();";
+        }
+
         // iif function
         remainder = ifStartsWithReturnRemainder("iif(", function);
         if (remainder != null) {

Reply via email to