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

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


The following commit(s) were added to refs/heads/master by this push:
     new 6258982  CAMEL-15697: camel-joor - Camel expression langauge using 
jOOR runtime java compiled.
6258982 is described below

commit 62589825b73fc1b2b145957b8124a564bf9d53da
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Oct 19 15:08:55 2020 +0200

    CAMEL-15697: camel-joor - Camel expression langauge using jOOR runtime java 
compiled.
---
 .../apache/camel/language/joor/JoorCompiler.java   | 28 +++++-----
 .../camel/language/joor/JoorLanguageTest.java      | 65 ++++++++++++++++++++++
 2 files changed, 79 insertions(+), 14 deletions(-)

diff --git 
a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompiler.java
 
b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompiler.java
index 01623d6..4168ff3 100644
--- 
a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompiler.java
+++ 
b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompiler.java
@@ -38,18 +38,18 @@ import org.slf4j.LoggerFactory;
 
 public class JoorCompiler extends ServiceSupport implements StaticService {
 
-    // TODO: OptionalXXX
-
-    private static final Pattern BODY_AS_PATTERN = 
Pattern.compile("bodyAs\\(([A-Za-z0-9.$]*)(.class)\\)");
-    private static final Pattern BODY_AS_PATTERN_NO_CLASS = 
Pattern.compile("bodyAs\\(([A-Za-z0-9.$]*)\\)");
+    private static final Pattern BODY_AS_PATTERN = 
Pattern.compile("(optionalBodyAs|bodyAs)\\(([A-Za-z0-9.$]*)(.class)\\)");
+    private static final Pattern BODY_AS_PATTERN_NO_CLASS = 
Pattern.compile("(optionalBodyAs|bodyAs)\\(([A-Za-z0-9.$]*)\\)");
     private static final Pattern HEADER_AS_PATTERN
-            = 
Pattern.compile("headerAs\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)(.class)\\)");
+            = 
Pattern.compile("(optionalHeaderAs|headerAs)\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)(.class)\\)");
     private static final Pattern HEADER_AS_PATTERN_NO_CLASS
-            = 
Pattern.compile("headerAs\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)\\)");
+            = 
Pattern.compile("(optionalHeaderAs|headerAs)\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)\\)");
     private static final Pattern EXCHANGE_PROPERTY_AS_PATTERN
-            = 
Pattern.compile("exchangePropertyAs\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)(.class)\\)");
+            = Pattern.compile(
+                    
"(optionalExchangePropertyAs|exchangePropertyAs)\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)(.class)\\)");
     private static final Pattern EXCHANGE_PROPERTY_AS_PATTERN_NO_CLASS
-            = 
Pattern.compile("exchangePropertyAs\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)\\)");
+            = Pattern.compile(
+                    
"(optionalExchangePropertyAs|exchangePropertyAs)\\((['|\"][A-Za-z0-9.$]*['|\"]\\s*,\\s*[A-Za-z0-9.$]*)\\)");
 
     private static final Logger LOG = 
LoggerFactory.getLogger(JoorCompiler.class);
     private static final AtomicInteger UUID = new AtomicInteger();
@@ -165,19 +165,19 @@ public class JoorCompiler extends ServiceSupport 
implements StaticService {
 
     private String staticHelper(String script) {
         Matcher matcher = BODY_AS_PATTERN.matcher(script);
-        script = matcher.replaceAll("bodyAs(exchange, $1$2)");
+        script = matcher.replaceAll("$1(exchange, $2$3)");
         matcher = BODY_AS_PATTERN_NO_CLASS.matcher(script);
-        script = matcher.replaceAll("bodyAs(exchange, $1.class)");
+        script = matcher.replaceAll("$1(exchange, $2.class)");
 
         matcher = HEADER_AS_PATTERN.matcher(script);
-        script = matcher.replaceAll("headerAs(exchange, $1$2)");
+        script = matcher.replaceAll("$1(exchange, $2$3)");
         matcher = HEADER_AS_PATTERN_NO_CLASS.matcher(script);
-        script = matcher.replaceAll("headerAs(exchange, $1.class)");
+        script = matcher.replaceAll("$1(exchange, $2.class)");
 
         matcher = EXCHANGE_PROPERTY_AS_PATTERN.matcher(script);
-        script = matcher.replaceAll("exchangePropertyAs(exchange, $1$2)");
+        script = matcher.replaceAll("$1(exchange, $2$3)");
         matcher = EXCHANGE_PROPERTY_AS_PATTERN_NO_CLASS.matcher(script);
-        script = matcher.replaceAll("exchangePropertyAs(exchange, $1.class)");
+        script = matcher.replaceAll("$1(exchange, $2.class)");
         return script;
     }
 
diff --git 
a/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorLanguageTest.java
 
b/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorLanguageTest.java
index d47a80a..644e217 100644
--- 
a/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorLanguageTest.java
+++ 
b/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorLanguageTest.java
@@ -90,6 +90,16 @@ public class JoorLanguageTest extends LanguageTestSupport {
     }
 
     @Test
+    public void testOptionalBody() throws Exception {
+        exchange.getIn().setBody("22");
+        assertExpression("optionalBody.isPresent()", true);
+        assertExpression("optionalBody.get()", "22");
+
+        exchange.getIn().setBody(null);
+        assertExpression("optionalBody.isPresent()", false);
+    }
+
+    @Test
     public void testExchangeBodyAs() throws Exception {
         exchange.getIn().setBody("22");
 
@@ -103,6 +113,19 @@ public class JoorLanguageTest extends LanguageTestSupport {
     }
 
     @Test
+    public void testExchangeOptionalBodyAs() throws Exception {
+        exchange.getIn().setBody("22");
+
+        assertExpression("2 * optionalBodyAs(int.class).get()", "44");
+        assertExpression("2 * optionalBodyAs(int).get()", "44");
+        assertExpression("3 * optionalBodyAs(Integer.class).get()", "66");
+        assertExpression("3 * optionalBodyAs(Integer).get()", "66");
+        assertExpression("3 * optionalBodyAs(java.lang.Integer.class).get()", 
"66");
+        assertExpression("3 * optionalBodyAs(java.lang.Integer).get()", "66");
+        assertExpression("var num = optionalBodyAs(int).get(); return num * 
4", "88");
+    }
+
+    @Test
     public void testExchangeHeaderAs() throws Exception {
         exchange.getIn().setHeader("foo", 22);
 
@@ -124,6 +147,27 @@ public class JoorLanguageTest extends LanguageTestSupport {
     }
 
     @Test
+    public void testExchangeOptionalHeaderAs() throws Exception {
+        exchange.getIn().setHeader("foo", 22);
+
+        assertExpression("2 * optionalHeaderAs('foo', int.class).get()", "44");
+        assertExpression("2 * optionalHeaderAs('foo', int).get()", "44");
+        assertExpression("3 * optionalHeaderAs('foo', Integer.class).get()", 
"66");
+        assertExpression("3 * optionalHeaderAs('foo', Integer).get()", "66");
+        assertExpression("3 * optionalHeaderAs('foo', 
java.lang.Integer.class).get()", "66");
+        assertExpression("3 * optionalHeaderAs('foo', 
java.lang.Integer).get()", "66");
+        assertExpression("var num = optionalHeaderAs('foo', int).get(); return 
num * 4", "88");
+
+        assertExpression("2 * optionalHeaderAs(\"foo\", int.class).get()", 
"44");
+        assertExpression("2 * optionalHeaderAs(\"foo\", int).get()", "44");
+        assertExpression("3 * optionalHeaderAs(\"foo\", Integer.class).get()", 
"66");
+        assertExpression("3 * optionalHeaderAs(\"foo\", Integer).get()", "66");
+        assertExpression("3 * optionalHeaderAs(\"foo\", 
java.lang.Integer.class).get()", "66");
+        assertExpression("3 * optionalHeaderAs(\"foo\", 
java.lang.Integer).get()", "66");
+        assertExpression("var num = optionalHeaderAs(\"foo\", int).get(); 
return num * 4", "88");
+    }
+
+    @Test
     public void testExchangePropertyAs() throws Exception {
         exchange.setProperty("bar", 22);
 
@@ -144,4 +188,25 @@ public class JoorLanguageTest extends LanguageTestSupport {
         assertExpression("var num = exchangePropertyAs(\"bar\", int); return 
num * 4", "88");
     }
 
+    @Test
+    public void testOptionalExchangePropertyAs() throws Exception {
+        exchange.setProperty("bar", 22);
+
+        assertExpression("2 * optionalExchangePropertyAs('bar', 
int.class).get()", "44");
+        assertExpression("2 * optionalExchangePropertyAs('bar', int).get()", 
"44");
+        assertExpression("3 * optionalExchangePropertyAs('bar', 
Integer.class).get()", "66");
+        assertExpression("3 * optionalExchangePropertyAs('bar', 
Integer).get()", "66");
+        assertExpression("3 * optionalExchangePropertyAs('bar', 
java.lang.Integer.class).get()", "66");
+        assertExpression("3 * optionalExchangePropertyAs('bar', 
java.lang.Integer).get()", "66");
+        assertExpression("var num = optionalExchangePropertyAs('bar', 
int).get(); return num * 4", "88");
+
+        assertExpression("2 * optionalExchangePropertyAs(\"bar\", 
int.class).get()", "44");
+        assertExpression("2 * optionalExchangePropertyAs(\"bar\", int).get()", 
"44");
+        assertExpression("3 * optionalExchangePropertyAs(\"bar\", 
Integer.class).get()", "66");
+        assertExpression("3 * optionalExchangePropertyAs(\"bar\", 
Integer).get()", "66");
+        assertExpression("3 * optionalExchangePropertyAs(\"bar\", 
java.lang.Integer.class).get()", "66");
+        assertExpression("3 * optionalExchangePropertyAs(\"bar\", 
java.lang.Integer).get()", "66");
+        assertExpression("var num = optionalExchangePropertyAs(\"bar\", 
int).get(); return num * 4", "88");
+    }
+
 }

Reply via email to