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 4b35801e262 CAMEL-21086: Add more complex functions to csimple language
4b35801e262 is described below

commit 4b35801e262c3dcd9531e5073cc8acc447a9bc47
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Aug 15 11:52:04 2024 +0200

    CAMEL-21086: Add more complex functions to csimple language
---
 .../language/csimple/CSimpleCodeGenerator.java      | 14 +++++++++++++-
 .../camel/language/csimple/CSimpleHelper.java       | 19 ++-----------------
 .../simple/ast/SimpleFunctionExpression.java        | 21 +++++++++++++++++++--
 3 files changed, 34 insertions(+), 20 deletions(-)

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 f6304517930..1f53489f431 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
@@ -22,6 +22,8 @@ import java.util.Set;
 import java.util.TreeSet;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.camel.util.StringHelper;
+
 /**
  * Source code generate for csimple language.
  *
@@ -138,6 +140,11 @@ public class CSimpleCodeGenerator {
                 script = "\"" + script + "\"";
             }
         }
+        String uuid = null;
+        if (script.startsWith("    UuidGenerator uuid")) {
+            uuid = StringHelper.before(script, "\n") + "\n";
+            script = StringHelper.after(script, "\n");
+        }
 
         if (!script.contains("return ")) {
             sb.append("return ");
@@ -162,7 +169,12 @@ public class CSimpleCodeGenerator {
         sb.append("}\n");
         sb.append("\n");
 
-        return new CSimpleGeneratedCode(qn + "." + name, sb.toString());
+        String code = sb.toString();
+        if (uuid != null) {
+            code = code.replace("    UuidGenerator uuid;\n", uuid);
+        }
+
+        return new CSimpleGeneratedCode(qn + "." + name, code);
     }
 
     private String alias(String script) {
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 b572aef5478..1ff46c5534e 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
@@ -43,14 +43,10 @@ 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;
@@ -744,18 +740,7 @@ 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);
-        }
+    public static UuidGenerator customUuidGenerator(Exchange exchange, String 
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 e0801692538..8f73cdcfec5 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
@@ -1892,8 +1892,25 @@ public class SimpleFunctionExpression extends 
LiteralExpression {
             if (generator == null) {
                 generator = "default";
             }
-            generator = StringQuoteHelper.doubleQuote(generator);
-            return "if (uuid == null) uuid = createUuidGenerator(exchange, " + 
generator + "); return uuid.generateUuid();";
+            StringBuilder sb = new StringBuilder();
+            if ("classic".equals(generator)) {
+                sb.append("    UuidGenerator uuid = new 
org.apache.camel.support.ClassicUuidGenerator();\n");
+                sb.append("return uuid.generateUuid();");
+            } else if ("short".equals(generator)) {
+                sb.append("    UuidGenerator uuid = new 
org.apache.camel.support.ShortUuidGenerator();\n");
+                sb.append("return uuid.generateUuid();");
+            } else if ("simple".equals(generator)) {
+                sb.append("    UuidGenerator uuid = new 
org.apache.camel.support.SimpleUuidGenerator();\n");
+                sb.append("return uuid.generateUuid();");
+            } else if ("default".equals(generator)) {
+                sb.append("    UuidGenerator uuid = new 
org.apache.camel.support.DefaultUuidGenerator();\n");
+                sb.append("return uuid.generateUuid();");
+            } else {
+                generator = StringQuoteHelper.doubleQuote(generator);
+                sb.append("if (uuid == null) uuid = 
customUuidGenerator(exchange, ").append(generator)
+                        .append("); return uuid.generateUuid();");
+            }
+            return sb.toString();
         }
 
         // iif function

Reply via email to