Author: davsclaus
Date: Sun May 20 14:24:19 2012
New Revision: 1340734
URL: http://svn.apache.org/viewvc?rev=1340734&view=rev
Log:
CAMEL-5295: Added support for escaping values with the simple language.
Added:
camel/branches/camel-2.9.x/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleNewlineTest.java
- copied unchanged from r1340733,
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleNewlineTest.java
camel/branches/camel-2.9.x/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleNewline.xml
- copied unchanged from r1340733,
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleNewline.xml
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/SimpleTokenizer.java
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.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:r1340733
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/SimpleTokenizer.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java?rev=1340734&r1=1340733&r2=1340734&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
(original)
+++
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
Sun May 20 14:24:19 2012
@@ -42,6 +42,7 @@ public final class SimpleTokenizer {
KNOWN_TOKENS.add(new SimpleTokenType(TokenType.booleanValue, "true"));
KNOWN_TOKENS.add(new SimpleTokenType(TokenType.booleanValue, "false"));
KNOWN_TOKENS.add(new SimpleTokenType(TokenType.nullValue, "null"));
+ KNOWN_TOKENS.add(new SimpleTokenType(TokenType.escape, "\\"));
// binary operators
KNOWN_TOKENS.add(new SimpleTokenType(TokenType.binaryOperator, "=="));
@@ -164,6 +165,30 @@ public final class SimpleTokenizer {
}
}
+ boolean escapeAllowed = acceptType(TokenType.escape, filters);
+ if (escapeAllowed) {
+ StringBuilder sb = new StringBuilder();
+ char ch = expression.charAt(index);
+ boolean escaped = '\\' == ch;
+ if (escaped && index < expression.length()) {
+ // grab next character to escape
+ char next = expression.charAt(++index);
+ // special for new line, tabs and carriage return
+ if ('n' == next) {
+ sb.append("\n");
+ } else if ('t' == next) {
+ sb.append("\t");
+ } else if ('r' == next) {
+ sb.append("\r");
+ } else {
+ // append the next
+ sb.append(next);
+ }
+ // force 2 as length
+ return new SimpleToken(new
SimpleTokenType(TokenType.character, sb.toString()), index, 2);
+ }
+ }
+
// it could be any of the known tokens
String text = expression.substring(index);
for (SimpleTokenType token : KNOWN_TOKENS) {
Modified:
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java?rev=1340734&r1=1340733&r2=1340734&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
(original)
+++
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
Sun May 20 14:24:19 2012
@@ -62,6 +62,13 @@ public class SimpleTokenType {
}
/**
+ * Whether the type is escape
+ */
+ public boolean isEscape() {
+ return type == TokenType.escape;
+ }
+
+ /**
* Whether the type is single quote
*/
public boolean isSingleQuote() {
Modified:
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
URL:
http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java?rev=1340734&r1=1340733&r2=1340734&view=diff
==============================================================================
---
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
(original)
+++
camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
Sun May 20 14:24:19 2012
@@ -24,6 +24,7 @@ public enum TokenType {
whiteSpace, character,
booleanValue, numericValue, nullValue,
singleQuote, doubleQuote,
+ escape,
functionStart, functionEnd,
binaryOperator, unaryOperator, logicalOperator,
eol
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=1340734&r1=1340733&r2=1340734&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 14:24:19 2012
@@ -1064,7 +1064,7 @@ public class SimpleTest extends Language
public void testSlashBeforeHeader() throws Exception {
assertExpression("foo/${header.foo}", "foo/abc");
- assertExpression("foo\\${header.foo}", "foo\\abc");
+ assertExpression("foo\\\\${header.foo}", "foo\\abc");
}
public void testJSonLike() throws Exception {
@@ -1084,6 +1084,26 @@ public class SimpleTest extends Language
assertExpression("{{${body}-${body}}}", "{{Something-Something}}");
}
+ public void testEscape() throws Exception {
+ exchange.getIn().setBody("Something");
+
+ // slash foo
+ assertExpression("\\\\foo", "\\foo");
+
+ assertExpression("\\n${body}", "\nSomething");
+ assertExpression("\\t${body}", "\tSomething");
+ assertExpression("\\r${body}", "\rSomething");
+ assertExpression("\\n\\r${body}", "\n\rSomething");
+ assertExpression("\\n${body}\\n", "\nSomething\n");
+ assertExpression("\\t${body}\\t", "\tSomething\t");
+ assertExpression("\\r${body}\\r", "\rSomething\r");
+ assertExpression("\\n\\r${body}\\n\\r", "\n\rSomething\n\r");
+
+ assertExpression("\\$${body}", "$Something");
+ assertExpression("\\$\\{${body}\\}", "${Something}");
+ assertExpression("\\$\\{body\\}", "${body}");
+ }
+
protected String getLanguageName() {
return "simple";
}