Author: lgawron
Date: Tue Feb 22 05:01:08 2005
New Revision: 154841

URL: http://svn.apache.org/viewcvs?view=rev&rev=154841
Log:
turns out that that <jx:set var="tags" value="${java.util.HashMap()}"/> worked 
not due to Jexl mechanisms 
but due to Rhino features (AFAIU NativeJavaClass executed as function with some 
parameters passed returned an appropriate object)
In order to keep backward functionality NativeJavaPackage has to be registered 
as property of template object model.

Modified:
    
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java
    
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/JXTemplateGeneratorTestCase.java
    
cocoon/trunk/src/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java

Modified: 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java?view=diff&r1=154840&r2=154841
==============================================================================
--- 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/java/org/apache/cocoon/components/expression/jexl/JexlExpression.java
 Tue Feb 22 05:01:08 2005
@@ -19,13 +19,12 @@
 import java.util.Iterator;
 import java.util.Map;
 
-import org.apache.commons.jexl.JexlContext;
-import org.apache.commons.jexl.util.Introspector;
-import org.apache.commons.jexl.util.introspection.Info;
 import org.apache.cocoon.components.expression.Expression;
-import org.apache.cocoon.components.expression.ExpressionCompiler;
 import org.apache.cocoon.components.expression.ExpressionContext;
 import org.apache.cocoon.components.expression.ExpressionException;
+import org.apache.commons.jexl.JexlContext;
+import org.apache.commons.jexl.util.Introspector;
+import org.apache.commons.jexl.util.introspection.Info;
 
 public class JexlExpression implements Expression {
 

Modified: 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/JXTemplateGeneratorTestCase.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/JXTemplateGeneratorTestCase.java?view=diff&r1=154840&r2=154841
==============================================================================
--- 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/JXTemplateGeneratorTestCase.java
 (original)
+++ 
cocoon/trunk/src/blocks/template/test/org/apache/cocoon/template/jxtg/JXTemplateGeneratorTestCase.java
 Tue Feb 22 05:01:08 2005
@@ -21,8 +21,8 @@
 import org.apache.avalon.framework.logger.ConsoleLogger;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.avalon.framework.parameters.Parameters;
-import org.apache.cocoon.components.flow.FlowHelper;
 import org.apache.cocoon.SitemapComponentTestCase;
+import org.apache.cocoon.components.flow.FlowHelper;
 
 public class JXTemplateGeneratorTestCase extends SitemapComponentTestCase {
     private Logger logger = new ConsoleLogger(ConsoleLogger.LEVEL_WARN);

Modified: 
cocoon/trunk/src/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java?view=diff&r1=154840&r2=154841
==============================================================================
--- 
cocoon/trunk/src/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java
 (original)
+++ 
cocoon/trunk/src/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java
 Tue Feb 22 05:01:08 2005
@@ -22,9 +22,14 @@
 
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.cocoon.components.flow.FlowHelper;
+import 
org.apache.cocoon.components.flow.javascript.fom.FOM_JavaScriptFlowHelper;
 import org.apache.commons.jxpath.DynamicPropertyHandler;
 import org.apache.commons.jxpath.JXPathBeanInfo;
 import org.apache.commons.jxpath.JXPathIntrospector;
+import org.mozilla.javascript.Context;
+import org.mozilla.javascript.NativeJavaPackage;
+import org.mozilla.javascript.Scriptable;
+import org.mozilla.javascript.ScriptableObject;
 
 
 /**
@@ -129,6 +134,30 @@
             fillContext(contextObject, map);
         }
         
+        Object javaPkg = FOM_JavaScriptFlowHelper.getJavaPackage(objectModel);
+        Object pkgs = FOM_JavaScriptFlowHelper.getPackages(objectModel);
+        
+        if ( javaPkg != null && pkgs != null ) {
+            map.put( "Packages", javaPkg );
+            map.put( "java", pkgs );
+        } else { 
+            Context cx = Context.enter();
+            try {
+                //FIXME: we surely need to share the scope as this operation 
is time consuming
+                Scriptable scope = cx.initStandardObjects();
+
+                final String JAVA_PACKAGE = "JavaPackage";
+                ClassLoader cl = 
Thread.currentThread().getContextClassLoader();
+                Scriptable newPackages = new NativeJavaPackage( "", cl );
+                newPackages.setParentScope( scope );
+                newPackages.setPrototype( ScriptableObject.getClassPrototype(  
 scope,
+                                                                               
 JAVA_PACKAGE ) );
+                map.put( "Packages", newPackages );
+                map.put( "java", ScriptableObject.getProperty( scope, "java" ) 
);
+            } finally {
+                Context.exit();
+            }
+        }
         return map;
     }
 


Reply via email to