Updated Branches:
  refs/heads/master 83b180637 -> 19e499c9f

CAMEL-6191: Simple predicate parser should keep whitespace in functions. Thanks 
to Antoine DESSAIGNE for the patch.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/19e499c9
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/19e499c9
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/19e499c9

Branch: refs/heads/master
Commit: 19e499c9fe1469014a67d2cc1ada7e877e9b5ef0
Parents: 83b1806
Author: Claus Ibsen <davscl...@apache.org>
Authored: Fri May 17 08:03:53 2013 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Fri May 17 08:03:53 2013 +0200

----------------------------------------------------------------------
 .../language/simple/SimplePredicateParser.java     |   13 ++++++++++---
 .../language/simple/SimpleParserPredicateTest.java |    8 ++++++--
 2 files changed, 16 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/19e499c9/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
 
b/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
index eae8296..44f7cc0 100644
--- 
a/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
+++ 
b/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
@@ -287,16 +287,23 @@ public class SimplePredicateParser extends 
BaseSimpleParser {
      * which makes the succeeding parsing easier.
      */
     private void removeIgnorableWhiteSpaceTokens() {
-        // white space can be removed if its not part of a quoted text
+        // white space can be removed if its not part of a quoted text or 
within function(s)
         boolean quote = false;
+        int functionCount = 0;
 
         Iterator<SimpleToken> it = tokens.iterator();
         while (it.hasNext()) {
             SimpleToken token = it.next();
             if (token.getType().isSingleQuote()) {
                 quote = !quote;
-            } else if (token.getType().isWhitespace() && !quote) {
-                it.remove();
+            } else if (!quote) {
+                if (token.getType().isFunctionStart()) {
+                    functionCount++;
+                } else if (token.getType().isFunctionEnd()) {
+                    functionCount--;
+                } else if (token.getType().isWhitespace() && functionCount == 
0) {
+                    it.remove();
+                }
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/19e499c9/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateTest.java
 
b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateTest.java
index 020a286..f089afa 100644
--- 
a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateTest.java
+++ 
b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateTest.java
@@ -180,7 +180,7 @@ public class SimpleParserPredicateTest extends 
ExchangeTestSupport {
 
         assertTrue("Should match", pre.matches(exchange));
     }
-    
+
     public void testSimpleExpressionPredicate() throws Exception {
         exchange.getIn().setBody("Hello");
         exchange.getIn().setHeader("number", "1234");
@@ -203,6 +203,10 @@ public class SimpleParserPredicateTest extends 
ExchangeTestSupport {
         parser = new SimplePredicateParser("${body['foo bar']} == 456", true);
         pre = parser.parsePredicate();
         assertTrue("Should match", pre.matches(exchange));
-    }
 
+        // the predicate has whitespace in the function
+        parser = new SimplePredicateParser("${body[foo bar]} == 456", true);
+        pre = parser.parsePredicate();
+        assertTrue("Should match", pre.matches(exchange));
+    }
 }

Reply via email to