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 2012/05/20 14:16:52 UTC

svn commit: r1340690 - in /camel/branches/camel-2.9.x: ./ camel-core/src/main/java/org/apache/camel/language/simple/ camel-core/src/test/java/org/apache/camel/language/simple/

Author: davsclaus
Date: Sun May 20 12:16:52 2012
New Revision: 1340690

URL: http://svn.apache.org/viewvc?rev=1340690&view=rev
Log:
CAMEL-5262: Relaxed syntax check in simple langauge in terms of balancing function tokens.

Modified:
    camel/branches/camel-2.9.x/   (props changed)
    camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java
    camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java
    camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java

Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
  Merged /camel/trunk:r1340689

Propchange: camel/branches/camel-2.9.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java?rev=1340690&r1=1340689&r2=1340690&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleExpressionParser.java Sun May 20 12:16:52 2012
@@ -18,6 +18,7 @@ package org.apache.camel.language.simple
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.camel.Expression;
 import org.apache.camel.builder.ExpressionBuilder;
@@ -92,6 +93,9 @@ public class SimpleExpressionParser exte
     protected void parseAndCreateAstModel() {
         // we loop the tokens and create a sequence of ast nodes
 
+        // counter to keep track of number of functions in the tokens
+        AtomicInteger functions = new AtomicInteger();
+
         LiteralNode imageToken = null;
         for (SimpleToken token : tokens) {
             // break if eol
@@ -100,7 +104,7 @@ public class SimpleExpressionParser exte
             }
 
             // create a node from the token
-            SimpleNode node = createNode(token);
+            SimpleNode node = createNode(token, functions);
             if (node != null) {
                 // a new token was created so the current image token need to be added first
                 if (imageToken != null) {
@@ -127,11 +131,15 @@ public class SimpleExpressionParser exte
         }
     }
 
-    private SimpleNode createNode(SimpleToken token) {
+    private SimpleNode createNode(SimpleToken token, AtomicInteger functions) {
         // expression only support functions and unary operators
         if (token.getType().isFunctionStart()) {
+            // starting a new function
+            functions.incrementAndGet();
             return new SimpleFunctionStart(token);
-        } else if (token.getType().isFunctionEnd()) {
+        } else if (functions.get() > 0 && token.getType().isFunctionEnd()) {
+            // there must be a start function already, to let this be a end function
+            functions.decrementAndGet();
             return new SimpleFunctionEnd(token);
         } else if (token.getType().isUnary()) {
             return new UnaryExpression(token);

Modified: camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java?rev=1340690&r1=1340689&r2=1340690&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionInvalidTest.java Sun May 20 12:16:52 2012
@@ -75,34 +75,4 @@ public class SimpleParserExpressionInval
         }
     }
 
-    public void testNoStartFunction() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("Hello {body}");
-        try {
-            parser.parseExpression();
-            fail("Should thrown exception");
-        } catch (SimpleIllegalSyntaxException e) {
-            assertEquals(11, e.getIndex());
-        }
-    }
-
-    public void testNoStartFunction2() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("Hello body}");
-        try {
-            parser.parseExpression();
-            fail("Should thrown exception");
-        } catch (SimpleIllegalSyntaxException e) {
-            assertEquals(10, e.getIndex());
-        }
-    }
-
-    public void testPropertyPlaceholderSyntax() throws Exception {
-        SimpleExpressionParser parser = new SimpleExpressionParser("{{myserver}}/${header.myapp}");
-        try {
-            parser.parseExpression();
-            fail("Should thrown exception");
-        } catch (SimpleIllegalSyntaxException e) {
-            assertEquals(10, e.getIndex());
-        }
-    }
-
 }

Modified: camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java?rev=1340690&r1=1340689&r2=1340690&view=diff
==============================================================================
--- camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java (original)
+++ camel/branches/camel-2.9.x/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java Sun May 20 12:16:52 2012
@@ -1067,6 +1067,23 @@ public class SimpleTest extends Language
         assertExpression("foo\\${header.foo}", "foo\\abc");
     }
 
+    public void testJSonLike() throws Exception {
+        exchange.getIn().setBody("Something");
+
+        assertExpression("{\n\"data\": \"${body}\"\n}", "{\n\"data\": \"Something\"\n}");
+    }
+
+    public void testFunctionEnds() throws Exception {
+        exchange.getIn().setBody("Something");
+
+        assertExpression("{{", "{{");
+        assertExpression("}}", "}}");
+        assertExpression("{{}}", "{{}}");
+        assertExpression("{{foo}}", "{{foo}}");
+        assertExpression("{{${body}}}", "{{Something}}");
+        assertExpression("{{${body}-${body}}}", "{{Something-Something}}");
+    }
+
     protected String getLanguageName() {
         return "simple";
     }