Author: davsclaus
Date: Sun May 20 14:23:02 2012
New Revision: 1340733
URL: http://svn.apache.org/viewvc?rev=1340733&view=rev
Log:
CAMEL-5295: Added support for escaping values with the simple language.
Added:
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleNewlineTest.java
- copied, changed from r1340682,
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleRegexTest.java
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleNewline.xml
- copied, changed from r1340682,
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleRegexContext.xml
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java?rev=1340733&r1=1340732&r2=1340733&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
Sun May 20 14:23:02 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/trunk/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java?rev=1340733&r1=1340732&r2=1340733&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
Sun May 20 14:23:02 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/trunk/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java?rev=1340733&r1=1340732&r2=1340733&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
Sun May 20 14:23:02 2012
@@ -24,6 +24,7 @@ public enum TokenType {
whiteSpace, character,
booleanValue, numericValue, nullValue,
singleQuote, doubleQuote,
+ escape,
functionStart, functionEnd,
binaryOperator, unaryOperator, logicalOperator,
eol
Modified:
camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java?rev=1340733&r1=1340732&r2=1340733&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
Sun May 20 14:23:02 2012
@@ -1088,7 +1088,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 {
@@ -1108,6 +1108,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";
}
Copied:
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleNewlineTest.java
(from r1340682,
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleRegexTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleNewlineTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleNewlineTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleRegexTest.java&r1=1340682&r2=1340733&rev=1340733&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleRegexTest.java
(original)
+++
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/language/SpringSimpleNewlineTest.java
Sun May 20 14:23:02 2012
@@ -20,19 +20,16 @@ import org.apache.camel.spring.SpringTes
import org.springframework.context.support.AbstractXmlApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
-public class SpringSimpleRegexTest extends SpringTestSupport {
+public class SpringSimpleNewlineTest extends SpringTestSupport {
@Override
protected AbstractXmlApplicationContext createApplicationContext() {
- return new
ClassPathXmlApplicationContext("org/apache/camel/language/springSimpleRegexContext.xml");
+ return new
ClassPathXmlApplicationContext("org/apache/camel/language/springSimpleNewline.xml");
}
- public void testSimpleRegex() {
- String result = template.requestBody("direct:start", "Something is
wrong", String.class);
- assertEquals("Let's keep looking.", result);
-
- result = template.requestBody("direct:start", "12.34.5678",
String.class);
- assertEquals("Found the result.", result);
+ public void testSimpleNewline() {
+ String result = template.requestBody("direct:start", "Camel",
String.class);
+ assertEquals("Body is\non new line Camel\n", result);
}
}
Copied:
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleNewline.xml
(from r1340682,
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleRegexContext.xml)
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleNewline.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleNewline.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleRegexContext.xml&r1=1340682&r2=1340733&rev=1340733&view=diff
==============================================================================
---
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleRegexContext.xml
(original)
+++
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/language/springSimpleNewline.xml
Sun May 20 14:23:02 2012
@@ -24,20 +24,12 @@
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
- <from uri="direct:start" />
- <choice>
- <when>
- <simple>${body} regex '^\d{2}\.\d{2}\.\d{4}$'</simple>
- <setBody>
- <constant>Found the result.</constant>
- </setBody>
- </when>
- <otherwise>
- <setBody>
- <constant>Let's keep looking.</constant>
- </setBody>
- </otherwise>
- </choice>
+ <from uri="direct:start"/>
+ <transform>
+ <simple>
+ Body is\non new line ${body}\n
+ </simple>
+ </transform>
</route>
</camelContext>