You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/09/03 14:00:09 UTC
[camel] branch main updated: CAMEL-17823: simple language new uuid function.
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 b22e889c010 CAMEL-17823: simple language new uuid function.
b22e889c010 is described below
commit b22e889c010cae39202910599a2d0957b83e8c3c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Sep 3 15:59:57 2022 +0200
CAMEL-17823: simple language new uuid function.
---
.../modules/languages/pages/simple-language.adoc | 11 +++++-
.../language/simple/SimpleExpressionBuilder.java | 45 ++++++++++++++++++++++
.../simple/ast/SimpleFunctionExpression.java | 10 +++++
.../apache/camel/language/simple/SimpleTest.java | 28 ++++++++++++++
4 files changed, 92 insertions(+), 2 deletions(-)
diff --git a/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc b/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc
index 5626af3421b..734f41c1c20 100644
--- a/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc
+++ b/core/camel-core-languages/src/main/docs/modules/languages/pages/simple-language.adoc
@@ -168,11 +168,11 @@ the ?method=methodname syntax that is used by the xref:components::bean-componen
component. Camel will by default lookup a bean by the given name. However if you need to refer
to a bean class (such as calling a static method) then you can prefix with type, such as `bean:type:fqnClassName`.
-|`properties:key:default` |String |Lookup a property with the given key. If the key does
+|properties:key:default |String |Lookup a property with the given key. If the key does
not exists or has no value, then an optional default value can be
specified.
-|`propertiesExist:key` |String |Checks whether a property placeholder with the given key exists or not.
+|propertiesExist:key |String |Checks whether a property placeholder with the given key exists or not.
The result can be negated by prefixing the key with `!`.
|routeId |String |Returns the id of the current route the
@@ -218,6 +218,13 @@ the error handler logs in case of an unhandled exception.
|messageHistory(false) |String |As messageHistory but without the exchange details (only
includes the route stack-trace). This can be used if you do not want to
log sensitive data from the message itself.
+
+|uuid(type) |String |Returns an UUID using the Camel `UuidGenerator`.
+You can choose between `default`, `classic`, `short` and `simple` as the type.
+If no type is given the default is used. It is also possible to use a custom `UuidGenerator`
+and bind the bean to the xref:manual::registry.adoc[Registry] with an id. For example `${uuid(myGenerator}`
+where the ID is _myGenerator_.
+
|=======================================================================
== OGNL expression support
diff --git a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleExpressionBuilder.java b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleExpressionBuilder.java
index af825f9ea9b..14a1139d588 100644
--- a/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleExpressionBuilder.java
+++ b/core/camel-core-languages/src/main/java/org/apache/camel/language/simple/SimpleExpressionBuilder.java
@@ -37,9 +37,14 @@ import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.ClassResolver;
import org.apache.camel.spi.ExchangeFormatter;
import org.apache.camel.spi.Language;
+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.ExpressionAdapter;
import org.apache.camel.support.MessageHelper;
+import org.apache.camel.support.ShortUuidGenerator;
+import org.apache.camel.support.SimpleUuidGenerator;
import org.apache.camel.support.builder.ExpressionBuilder;
import org.apache.camel.support.processor.DefaultExchangeFormatter;
import org.apache.camel.util.FileUtil;
@@ -238,6 +243,46 @@ public final class SimpleExpressionBuilder {
};
}
+ /**
+ * Returns a uuid string based on the given generator (default, classic, short, simple)
+ */
+ public static Expression uuidExpression(final String generator) {
+ return new ExpressionAdapter() {
+
+ UuidGenerator uuid;
+
+ @Override
+ public Object evaluate(Exchange exchange) {
+ return uuid.generateUuid();
+ }
+
+ @Override
+ public void init(CamelContext context) {
+ if ("classic".equalsIgnoreCase(generator)) {
+ uuid = new ClassicUuidGenerator();
+ } else if ("short".equals(generator)) {
+ uuid = new ShortUuidGenerator();
+ } else if ("simple".equals(generator)) {
+ uuid = new SimpleUuidGenerator();
+ } else if (generator == null || "default".equals(generator)) {
+ uuid = new DefaultUuidGenerator();
+ } else {
+ // lookup custom generator
+ uuid = CamelContextHelper.mandatoryLookup(context, generator, UuidGenerator.class);
+ }
+ }
+
+ @Override
+ public String toString() {
+ if (generator != null) {
+ return "uuid(" + generator + ")";
+ } else {
+ return "uuid";
+ }
+ }
+ };
+ }
+
public static Expression fileNameExpression() {
return new ExpressionAdapter() {
@Override
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 a737c323d9a..0bff750ffaf 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
@@ -557,6 +557,16 @@ public class SimpleFunctionExpression extends LiteralExpression {
} else if (ObjectHelper.equal(function, "messageHistory")) {
return SimpleExpressionBuilder.messageHistoryExpression(true);
}
+
+ // uuid function
+ remainder = ifStartsWithReturnRemainder("uuid", function);
+ if (remainder != null) {
+ String values = StringHelper.between(remainder, "(", ")");
+ return SimpleExpressionBuilder.uuidExpression(values);
+ } else if (ObjectHelper.equal(function, "uuid")) {
+ return SimpleExpressionBuilder.uuidExpression(null);
+ }
+
return null;
}
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
index d0243353312..57fcbf88bf3 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
@@ -43,6 +43,7 @@ import org.apache.camel.language.simple.types.SimpleIllegalSyntaxException;
import org.apache.camel.spi.Language;
import org.apache.camel.spi.PropertiesComponent;
import org.apache.camel.spi.Registry;
+import org.apache.camel.spi.UuidGenerator;
import org.apache.camel.util.InetAddressUtil;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.parallel.ResourceLock;
@@ -2004,6 +2005,33 @@ public class SimpleTest extends LanguageTestSupport {
assertPredicate("${propertiesExist:!myKey}", false);
}
+ @Test
+ public void testUuid() throws Exception {
+ Expression expression = context.resolveLanguage("simple").createExpression("${uuid}");
+ String s = expression.evaluate(exchange, String.class);
+ assertNotNull(s);
+
+ expression = context.resolveLanguage("simple").createExpression("${uuid(default)}");
+ s = expression.evaluate(exchange, String.class);
+ assertNotNull(s);
+
+ expression = context.resolveLanguage("simple").createExpression("${uuid(short)}");
+ s = expression.evaluate(exchange, String.class);
+ assertNotNull(s);
+
+ expression = context.resolveLanguage("simple").createExpression("${uuid(simple)}");
+ s = expression.evaluate(exchange, String.class);
+ assertNotNull(s);
+
+ expression = context.resolveLanguage("simple").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 "simple";