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) {