Repository: camel
Updated Branches:
  refs/heads/camel-2.15.x 2eaeaee25 -> b8ecc4abc
  refs/heads/master c6b570e9a -> 897c4167a


CAMEL-8512: Simple - Add exchange as function to access the exchange easily


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

Branch: refs/heads/master
Commit: 6d23c13c5d01d6d314c94a0d015a884507c52e16
Parents: c6b570e
Author: Claus Ibsen <davscl...@apache.org>
Authored: Thu Mar 19 08:01:41 2015 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Thu Mar 19 08:29:57 2015 +0100

----------------------------------------------------------------------
 .../apache/camel/builder/ExpressionBuilder.java | 21 +++++++++++++++++++-
 .../simple/ast/SimpleFunctionExpression.java    | 12 +++++++++++
 .../camel/language/simple/SimpleTest.java       | 17 ++++++++++++++++
 3 files changed, 49 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/6d23c13c/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java 
b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
index c22ad80..98b6087 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
@@ -877,7 +877,7 @@ public final class ExpressionBuilder {
      * Returns the expression for the exchanges camelContext invoking methods 
defined
      * in a simple OGNL notation
      *
-     * @param ognl  methods to invoke on the body in a simple OGNL syntax
+     * @param ognl  methods to invoke on the context in a simple OGNL syntax
      */
     public static Expression camelContextOgnlExpression(final String ognl) {
         return new ExpressionAdapter() {
@@ -897,6 +897,25 @@ public final class ExpressionBuilder {
     }
 
     /**
+     * Returns the expression for the exchange invoking methods defined
+     * in a simple OGNL notation
+     *
+     * @param ognl  methods to invoke on the exchange in a simple OGNL syntax
+     */
+    public static Expression exchangeOgnlExpression(final String ognl) {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                return new MethodCallExpression(exchange, 
ognl).evaluate(exchange);
+            }
+
+            @Override
+            public String toString() {
+                return "exchangeOgnl(" + ognl + ")";
+            }
+        };
+    }
+
+    /**
      * Returns the expression for the exchanges inbound message body converted
      * to the given type
      */

http://git-wip-us.apache.org/repos/asf/camel/blob/6d23c13c/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
 
b/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
index d05356d..8d10ca7 100644
--- 
a/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
+++ 
b/camel-core/src/main/java/org/apache/camel/language/simple/ast/SimpleFunctionExpression.java
@@ -128,6 +128,16 @@ public class SimpleFunctionExpression extends 
LiteralExpression {
             return ExpressionBuilder.systemEnvironmentExpression(remainder);
         }
 
+        // exchange OGNL
+        remainder = ifStartsWithReturnRemainder("exchange", function);
+        if (remainder != null) {
+            boolean invalid = 
OgnlHelper.isInvalidValidOgnlExpression(remainder);
+            if (invalid) {
+                throw new SimpleParserException("Valid syntax: 
${exchange.OGNL} was: " + function, token.getIndex());
+            }
+            return ExpressionBuilder.exchangeOgnlExpression(remainder);
+        }
+
         // file: prefix
         remainder = ifStartsWithReturnRemainder("file:", function);
         if (remainder != null) {
@@ -324,6 +334,8 @@ public class SimpleFunctionExpression extends 
LiteralExpression {
             return ExpressionBuilder.messageIdExpression();
         } else if (ObjectHelper.equal(expression, "exchangeId")) {
             return ExpressionBuilder.exchangeIdExpression();
+        } else if (ObjectHelper.equal(expression, "exchange")) {
+            return ExpressionBuilder.exchangeExpression();
         } else if (ObjectHelper.equal(expression, "exception")) {
             return ExpressionBuilder.exchangeExceptionExpression();
         } else if (ObjectHelper.equal(expression, "exception.message")) {

http://git-wip-us.apache.org/repos/asf/camel/blob/6d23c13c/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java 
b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
index cce849d..351efec 100644
--- a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
+++ b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
@@ -125,6 +125,23 @@ public class SimpleTest extends LanguageTestSupport {
         }
     }
 
+    public void testExchangeExpression() throws Exception {
+        Expression exp = SimpleLanguage.simple("${exchange}");
+        assertNotNull(exp);
+        assertEquals(exchange, exp.evaluate(exchange, Object.class));
+
+        assertExpression("exchange", exchange);
+    }
+
+    public void testExchangeOgnlExpression() throws Exception {
+        Expression exp = SimpleLanguage.simple("${exchange.exchangeId}");
+        assertNotNull(exp);
+        assertEquals(exchange.getExchangeId(), exp.evaluate(exchange, 
Object.class));
+
+        assertExpression("exchange.exchangeId", exchange.getExchangeId());
+        assertExpression("exchange.class.name", 
"org.apache.camel.impl.DefaultExchange");
+    }
+
     public void testBodyExpression() throws Exception {
         Expression exp = SimpleLanguage.simple("${body}");
         assertNotNull(exp);

Reply via email to