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; }