Author: davsclaus
Date: Thu Jan 20 12:09:27 2011
New Revision: 1061262

URL: http://svn.apache.org/viewvc?rev=1061262&view=rev
Log:
CAMEL-3564: Added ref function to simple langauge.

Modified:
    
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/model/language/ConstantExpression.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?rev=1061262&r1=1061261&r2=1061262&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
 Thu Jan 20 12:09:27 2011
@@ -389,6 +389,24 @@ public final class ExpressionBuilder {
     }
 
     /**
+     * Returns an expression for lookup a bean in the {@link 
org.apache.camel.spi.Registry}
+     *
+     * @return an expression object which will return the bean
+     */
+    public static Expression refExpression(final String ref) {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                return exchange.getContext().getRegistry().lookup(ref);
+            }
+
+            @Override
+            public String toString() {
+                return "ref(" + ref + ")";
+            }
+        };
+    }
+
+    /**
      * Returns an expression for the {@link org.apache.camel.CamelContext}
      *
      * @return an expression object which will return the camel context

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java?rev=1061262&r1=1061261&r2=1061262&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
 Thu Jan 20 12:09:27 2011
@@ -304,6 +304,12 @@ public class SimpleLanguage extends Simp
             return ExpressionBuilder.propertiesComponentExpression(key, 
locations);
         }
 
+        // ref: prefix
+        remainder = ifStartsWithReturnRemainder("ref:", expression);
+        if (remainder != null) {
+            return ExpressionBuilder.refExpression(remainder);
+        }
+
         if (strict) {
             throw new ExpressionIllegalSyntaxException(expression);
         } else {

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/language/ConstantExpression.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/language/ConstantExpression.java?rev=1061262&r1=1061261&r2=1061262&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/language/ConstantExpression.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/language/ConstantExpression.java
 Thu Jan 20 12:09:27 2011
@@ -20,10 +20,10 @@ import javax.xml.bind.annotation.XmlRoot
 
 /**
  * For expressions and predicates using a constant
- *
  */
 @XmlRootElement(name = "constant")
 public class ConstantExpression extends ExpressionDefinition {
+
     public ConstantExpression() {
     }
 

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java?rev=1061262&r1=1061261&r2=1061262&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java 
(original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java 
Thu Jan 20 12:09:27 2011
@@ -31,6 +31,7 @@ import org.apache.camel.ExpressionIllega
 import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.LanguageTestSupport;
 import org.apache.camel.component.bean.MethodNotFoundException;
+import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.language.bean.RuntimeBeanExpressionException;
 import org.apache.camel.language.simple.SimpleLanguage;
 
@@ -39,6 +40,22 @@ import org.apache.camel.language.simple.
  */
 public class SimpleTest extends LanguageTestSupport {
 
+    @Override
+    protected JndiRegistry createRegistry() throws Exception {
+        JndiRegistry jndi = super.createRegistry();
+        jndi.bind("myAnimal", new Animal("Donkey", 17));
+        return jndi;
+    }
+
+    public void testRefExpression() throws Exception {
+        assertExpression("ref:myAnimal", "Donkey");
+        assertExpression("${ref:myAnimal}", "Donkey");
+        assertExpression("ref:unknown", null);
+        assertExpression("${ref:unknown}", null);
+        assertExpression("Hello ${ref:myAnimal}", "Hello Donkey");
+        assertExpression("Hello ${ref:unknown}", "Hello ");
+    }
+
     public void testConstantExpression() throws Exception {
         assertExpression("Hello World", "Hello World");
     }


Reply via email to