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 6c3d567  CAMEL-15704: camel-csimple - Compiled simple language.
6c3d567 is described below

commit 6c3d5671945d1034e94d4b12aa02f2de8f2552b1
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu Dec 3 20:06:34 2020 +0100

    CAMEL-15704: camel-csimple - Compiled simple language.
---
 .../language/csimple/joor/OriginalSimpleTest.java  | 17 +++++++----
 .../simple/ast/SimpleFunctionExpression.java       |  5 ++++
 .../java/org/apache/camel/util/OgnlHelperTest.java |  9 ++++++
 .../java/org/apache/camel/util/OgnlHelper.java     | 34 ++++++++++++++++++++++
 4 files changed, 60 insertions(+), 5 deletions(-)

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 f18b8ee..f30184f 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
@@ -1583,13 +1583,12 @@ public class OriginalSimpleTest extends 
LanguageTestSupport {
     public void testBodyOgnlSpaces() throws Exception {
         exchange.getIn().setBody("Hello World");
 
-        // no quotes, which is discouraged to use
-        // TODO: single quotes as double quotes
-        // assertExpression("${bodyAs(String).compareTo('Hello World')}", 0);
-
+        assertExpression("${bodyAs(String).compareTo('Hello World')}", 0);
         assertExpression("${bodyAs(String).compareTo(\"Hello World\")}", 0);
+
+        assertExpression("${bodyAs(String).compareTo('Hello World')}", 0);
         assertExpression("${bodyAs(String).compareTo(${bodyAs(String)})}", 0);
-        assertExpression("${bodyAs(String).compareTo(\"foo\")}", "Hello 
World".compareTo("foo"));
+        assertExpression("${bodyAs(String).compareTo('foo')}", "Hello 
World".compareTo("foo"));
 
         assertExpression("${bodyAs(String).compareTo( \"Hello World\" )}", 0);
         assertExpression("${bodyAs(String).compareTo( ${bodyAs(String)} )}", 
0);
@@ -1597,6 +1596,14 @@ public class OriginalSimpleTest extends 
LanguageTestSupport {
     }
 
     @Test
+    public void testBodySingleQuote() throws Exception {
+        exchange.getIn().setBody("It's a great World");
+
+        assertExpression("${bodyAs(String).compareTo(\"It's a great 
World\")}", 0);
+        assertExpression("${bodyAs(String).compareTo('It\\'s a great 
World')}", 0);
+    }
+
+    @Test
     public void testClassSimpleName() throws Exception {
         Animal tiger = new Animal("Tony the Tiger", 13);
         exchange.getIn().setBody(tiger);
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 2db72c1..af823d8 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
@@ -1394,6 +1394,11 @@ public class SimpleFunctionExpression extends 
LiteralExpression {
                     }
                 }
 
+                // single quotes for string literals should be replaced as 
double quotes
+                if (m != null) {
+                    m = OgnlHelper.methodAsDoubleQuotes(m);
+                }
+
                 // shorthand getter syntax: .name -> .getName()
                 if (m != null && !m.isEmpty()) {
                     // a method so append with a dot
diff --git 
a/core/camel-core/src/test/java/org/apache/camel/util/OgnlHelperTest.java 
b/core/camel-core/src/test/java/org/apache/camel/util/OgnlHelperTest.java
index bb86e95..297de96 100644
--- a/core/camel-core/src/test/java/org/apache/camel/util/OgnlHelperTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/util/OgnlHelperTest.java
@@ -136,4 +136,13 @@ public class OgnlHelperTest {
         assertEquals(".bar(true, ${header.bar[0]?.code})", methods.get(1));
     }
 
+    @Test
+    public void testMethodAsDoubleQuotes() throws Exception {
+        String out = 
OgnlHelper.methodAsDoubleQuotes("${bodyAs(String).compareTo('It\\'s a great 
World')}");
+        assertEquals("${bodyAs(String).compareTo(\"It's a great World\")}", 
out);
+
+        out = 
OgnlHelper.methodAsDoubleQuotes("${bodyAs(String).compareTo(\"It's a great 
World\")}");
+        assertEquals("${bodyAs(String).compareTo(\"It's a great World\")}", 
out);
+    }
+
 }
diff --git 
a/core/camel-util/src/main/java/org/apache/camel/util/OgnlHelper.java 
b/core/camel-util/src/main/java/org/apache/camel/util/OgnlHelper.java
index b10d7ae..c1c2a8d 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/OgnlHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/OgnlHelper.java
@@ -276,4 +276,38 @@ public final class OgnlHelper {
         return methods;
     }
 
+    public static String methodAsDoubleQuotes(String ognl) {
+        StringBuilder sb = new StringBuilder();
+
+        int singleBracketCnt = 0;
+        int doubleBracketCnt = 0;
+        for (int i = 0; i < ognl.length(); i++) {
+            char ch = ognl.charAt(i);
+            char next = i < ognl.length() - 1 ? ognl.charAt(i + 1) : 0;
+
+            if (ch == '\\' && next == '\'') {
+                if (singleBracketCnt % 2 != 0) {
+                    // its an escaped single quote inside an existing quote
+                    // then unescape it
+                    sb.append('\'');
+                    // and skip over to next
+                    i++;
+                    continue;
+                }
+            }
+
+            if (doubleBracketCnt % 2 == 0 && ch == '\'') {
+                singleBracketCnt++;
+                sb.append('"');
+            } else if (singleBracketCnt % 2 == 0 && ch == '"') {
+                doubleBracketCnt++;
+                sb.append('"');
+            } else {
+                sb.append(ch);
+            }
+        }
+
+        return sb.toString();
+    }
+
 }

Reply via email to