Author: danielf
Date: Sun Jan 16 14:06:22 2005
New Revision: 125368

URL: http://svn.apache.org/viewcvs?view=rev&rev=125368
Log:
Added method in the ExpressionFactory class so that the expression language is 
chosen by a prefix e.g. "jxpath:1+2".
Modified:
   
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/ExpressionFactory.java
   
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.java
   
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.xtest

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/ExpressionFactory.java
Url: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/ExpressionFactory.java?view=diff&rev=125368&p1=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/ExpressionFactory.java&r1=125367&p2=cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/ExpressionFactory.java&r2=125368
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/ExpressionFactory.java
        (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/ExpressionFactory.java
        Sun Jan 16 14:06:22 2005
@@ -28,6 +28,7 @@
     extends AbstractLogEnabled
     implements Disposable, Serviceable, ThreadSafe {
     public static String ROLE = ExpressionFactory.class.getName();
+    public static String DEFAULT ="default";
 
     /** The component manager */
     protected ServiceManager manager;
@@ -64,5 +65,15 @@
             this.compilerSelector.release(compiler);
         }
         return expressionImpl;
+    }
+
+    public Expression getExpression(String expression) throws 
ExpressionException {
+        String language = DEFAULT;
+        int end = expression.indexOf(':');
+        if (end != -1) {
+            language = expression.substring(0, end);
+            expression = expression.substring(end+1);
+        }
+        return getExpression(language, expression);
     }
 }

Modified: 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.java
Url: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.java?view=diff&rev=125368&p1=cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.java&r1=125367&p2=cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.java&r2=125368
==============================================================================
--- 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.java
       (original)
+++ 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.java
       Sun Jan 16 14:06:22 2005
@@ -73,5 +73,24 @@
         assertEquals(new Double(3), expression.evaluate(new 
ExpressionContext()));
         this.release(factory);
     }
+
+    public void testFactoryPluggable() throws ExpressionException, 
ServiceException {
+        ExpressionFactory factory = 
(ExpressionFactory)this.lookup(ExpressionFactory.ROLE);
+        assertNotNull("Test lookup of expression factory", factory);
+
+        Expression expression = factory.getExpression("1+2");
+        assertNotNull("Test expression compilation", expression);
+        assertEquals(new Double(3), expression.evaluate(new 
ExpressionContext()));
+
+        expression = factory.getExpression("jexl:1+2");
+        assertNotNull("Test expression compilation", expression);
+        assertEquals(new Long(3), expression.evaluate(new 
ExpressionContext()));
+
+        expression = factory.getExpression("jxpath:1+2");
+        assertNotNull("Test expression compilation", expression);
+        assertEquals(new Double(3), expression.evaluate(new 
ExpressionContext()));
+
+        this.release(factory);
+    }
 }
 

Modified: 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.xtest
Url: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.xtest?view=diff&rev=125368&p1=cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.xtest&r1=125367&p2=cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.xtest&r2=125368
==============================================================================
--- 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.xtest
      (original)
+++ 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/components/expression/ExpressionTestCase.xtest
      Sun Jan 16 14:06:22 2005
@@ -27,6 +27,7 @@
  
   <components>
     <expression-compilers>
+      <component-instance 
class="org.apache.cocoon.components.expression.jxpath.JXPathCompiler" 
name="default"/>
       <component-instance 
class="org.apache.cocoon.components.expression.jexl.JexlCompiler" name="jexl"/>
       <component-instance 
class="org.apache.cocoon.components.expression.jxpath.JXPathCompiler" 
name="jxpath"/>
     </expression-compilers>

Reply via email to