You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2006/06/22 17:13:56 UTC
svn commit: r416391 - in /cocoon/trunk:
blocks/cocoon-template/cocoon-template-impl/src/main/java/org/apache/cocoon/components/expression/javascript/
blocks/cocoon-template/cocoon-template-impl/src/main/java/org/apache/cocoon/template/environment/
core...
Author: cziegeler
Date: Thu Jun 22 08:13:55 2006
New Revision: 416391
URL: http://svn.apache.org/viewvc?rev=416391&view=rev
Log:
Move javascript related stuff out of the TemplateObjectModelHelper
Modified:
cocoon/trunk/blocks/cocoon-template/cocoon-template-impl/src/main/java/org/apache/cocoon/components/expression/javascript/JavaScriptExpression.java
cocoon/trunk/blocks/cocoon-template/cocoon-template-impl/src/main/java/org/apache/cocoon/template/environment/FlowObjectModelHelper.java
cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java
Modified: cocoon/trunk/blocks/cocoon-template/cocoon-template-impl/src/main/java/org/apache/cocoon/components/expression/javascript/JavaScriptExpression.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-template/cocoon-template-impl/src/main/java/org/apache/cocoon/components/expression/javascript/JavaScriptExpression.java?rev=416391&r1=416390&r2=416391&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-template/cocoon-template-impl/src/main/java/org/apache/cocoon/components/expression/javascript/JavaScriptExpression.java (original)
+++ cocoon/trunk/blocks/cocoon-template/cocoon-template-impl/src/main/java/org/apache/cocoon/components/expression/javascript/JavaScriptExpression.java Thu Jun 22 08:13:55 2006
@@ -26,6 +26,7 @@
import org.apache.cocoon.components.expression.jexl.JSIntrospector;
import org.apache.cocoon.components.flow.FlowHelper;
import org.apache.cocoon.environment.TemplateObjectModelHelper;
+import org.apache.cocoon.template.environment.FlowObjectModelHelper;
import org.apache.commons.jexl.util.introspection.Info;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Script;
@@ -45,7 +46,7 @@
Context ctx = Context.enter();
try {
// Note: used compileReader instead of compileString to work with the older Rhino in C2.1
- this.script = ctx.compileReader(TemplateObjectModelHelper.getScope(), new StringReader(getExpression()), "", 1, null);
+ this.script = ctx.compileReader(FlowObjectModelHelper.getScope(), new StringReader(getExpression()), "", 1, null);
} catch (Exception e) {
// Note: this catch block is only needed for the Rhino in C2.1 where the older
// Rhino does not throw RuntimeExceptions
@@ -62,7 +63,7 @@
public Object evaluate(ExpressionContext context) throws ExpressionException {
Context ctx = Context.enter();
try {
- Scriptable scope = ctx.newObject(TemplateObjectModelHelper.getScope());
+ Scriptable scope = ctx.newObject(FlowObjectModelHelper.getScope());
// Populate the scope
Iterator iter = context.entrySet().iterator();
while (iter.hasNext()) {
Modified: cocoon/trunk/blocks/cocoon-template/cocoon-template-impl/src/main/java/org/apache/cocoon/template/environment/FlowObjectModelHelper.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-template/cocoon-template-impl/src/main/java/org/apache/cocoon/template/environment/FlowObjectModelHelper.java?rev=416391&r1=416390&r2=416391&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-template/cocoon-template-impl/src/main/java/org/apache/cocoon/template/environment/FlowObjectModelHelper.java (original)
+++ cocoon/trunk/blocks/cocoon-template/cocoon-template-impl/src/main/java/org/apache/cocoon/template/environment/FlowObjectModelHelper.java Thu Jun 22 08:13:55 2006
@@ -20,7 +20,12 @@
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.components.expression.ExpressionContext;
import org.apache.cocoon.components.flow.FlowHelper;
+import org.apache.cocoon.components.flow.javascript.fom.FOM_JavaScriptFlowHelper;
import org.apache.cocoon.environment.TemplateObjectModelHelper;
+import org.mozilla.javascript.Context;
+import org.mozilla.javascript.NativeJavaPackage;
+import org.mozilla.javascript.Scriptable;
+import org.mozilla.javascript.ScriptableObject;
/**
@@ -30,17 +35,69 @@
*/
public class FlowObjectModelHelper {
+ private static Scriptable rootScope;
+
+ /** Avoid instantiation. */
+ private FlowObjectModelHelper() {}
+
+ public static Scriptable getScope() {
+ Context ctx = Context.enter();
+ try {
+ // Create it if never used up to now
+ if (rootScope == null) {
+ rootScope = ctx.initStandardObjects(null);
+ }
+ Scriptable scope = ctx.newObject(rootScope);
+ scope.setPrototype(rootScope);
+ scope.setParentScope(null);
+ return scope;
+ } finally {
+ Context.exit();
+ }
+ }
+
/**
* Create an expression context that contains the object model
*/
public static ExpressionContext getFOMExpressionContext(final Map objectModel,
final Parameters parameters) {
ExpressionContext context = new ExpressionContext();
- Map expressionContext = (Map)TemplateObjectModelHelper.getTemplateObjectModel(objectModel, parameters);
- expressionContext = (Map) TemplateObjectModelHelper.addJavaPackages( expressionContext );
+ Map expressionContext = TemplateObjectModelHelper.getTemplateObjectModel(objectModel, parameters);
+ FlowObjectModelHelper.addJavaPackages( expressionContext );
context.setVars( expressionContext );
context.setContextBean(FlowHelper.getContextObject(objectModel));
return context;
}
+
+ /**
+ * Add java packages to object model. Allows to construct java objects.
+ * @param objectModel usually the result of invoking getTemplateObjectModel
+ */
+ public static void addJavaPackages( Map objectModel ) {
+ Object javaPkg = FOM_JavaScriptFlowHelper.getJavaPackage(objectModel);
+ Object pkgs = FOM_JavaScriptFlowHelper.getPackages(objectModel);
+
+ // packages might have already been set up if flowscript is being used
+ if ( javaPkg != null && pkgs != null ) {
+ objectModel.put( "Packages", javaPkg );
+ objectModel.put( "java", pkgs );
+ } else {
+ Context.enter();
+ try {
+ final String JAVA_PACKAGE = "JavaPackage";
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ // FIXME - NativeJavaPackage is an internal class which we should not use
+ Scriptable newPackages = new NativeJavaPackage( "", cl );
+ newPackages.setParentScope( getScope() );
+ newPackages.setPrototype( ScriptableObject.getClassPrototype( getScope(),
+ JAVA_PACKAGE ) );
+ objectModel.put( "Packages", newPackages );
+ objectModel.put( "java", ScriptableObject.getProperty( getScope(), "java" ) );
+ } finally {
+ Context.exit();
+ }
+ }
+ }
+
}
Modified: cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java?rev=416391&r1=416390&r2=416391&view=diff
==============================================================================
--- cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java (original)
+++ cocoon/trunk/core/cocoon-core/src/main/java/org/apache/cocoon/environment/TemplateObjectModelHelper.java Thu Jun 22 08:13:55 2006
@@ -17,23 +17,14 @@
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
-import java.util.Collection;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
-import java.util.Set;
-import org.apache.avalon.framework.parameters.ParameterException;
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;
/**
@@ -45,27 +36,10 @@
* @version $Id$
*/
public class TemplateObjectModelHelper {
- private static Scriptable rootScope = null;
/** Avoid instantiation */
private TemplateObjectModelHelper() {}
- public static Scriptable getScope() {
- Context ctx = Context.enter();
- try {
- // Create it if never used up to now
- if (rootScope == null) {
- rootScope = ctx.initStandardObjects(null);
- }
- Scriptable scope = ctx.newObject(rootScope);
- scope.setPrototype(rootScope);
- scope.setParentScope(null);
- return scope;
- } finally {
- Context.exit();
- }
- }
-
public static void fillContext(Object contextObject, Map map) {
// Hack: I use jxpath to populate the context object's properties
// in the jexl context
@@ -114,34 +88,27 @@
* + continuation The Continuation (if available)
* + parameters The parameters (if provided)
*/
- public static Object getTemplateObjectModel(final Map objectModel,
- final Parameters parameters) {
+ public static Map getTemplateObjectModel(final Map objectModel,
+ final Parameters parameters) {
// first create the "cocoon object":
final Map cocoon = new HashMap();
- // Needed for the FOM wrappers
- Context.enter();
- try {
- // cocoon.request
- final Request request = ObjectModelHelper.getRequest( objectModel );
- cocoon.put("request", request);
-
- // cocoon.session
- final Session session = request.getSession(false);
- if (session != null) {
- cocoon.put("session", session);
- }
-
- // cocoon.context
- final org.apache.cocoon.environment.Context context =
- ObjectModelHelper.getContext( objectModel );
- cocoon.put("context", context);
-
- } finally {
- Context.exit();
+ // cocoon.request
+ final Request request = ObjectModelHelper.getRequest( objectModel );
+ cocoon.put("request", request);
+
+ // cocoon.session
+ final Session session = request.getSession(false);
+ if (session != null) {
+ cocoon.put("session", session);
}
-
+
+ // cocoon.context
+ final org.apache.cocoon.environment.Context context =
+ ObjectModelHelper.getContext( objectModel );
+ cocoon.put("context", context);
+
// cocoon.continuation
final Object cont = FlowHelper.getWebContinuation(objectModel);
if ( cont != null ) {
@@ -165,36 +132,5 @@
}
return map;
- }
-
- /**
- * Add java packages to object model. Allows to construct java objects.
- * @param objectModel usually the result of invoking getTemplateObjectModel
- */
- public static Object addJavaPackages( Map objectModel ) {
- Object javaPkg = FOM_JavaScriptFlowHelper.getJavaPackage(objectModel);
- Object pkgs = FOM_JavaScriptFlowHelper.getPackages(objectModel);
-
- // packages might have already been set up if flowscript is being used
- if ( javaPkg != null && pkgs != null ) {
- objectModel.put( "Packages", javaPkg );
- objectModel.put( "java", pkgs );
- } else {
- Context.enter();
- try {
- final String JAVA_PACKAGE = "JavaPackage";
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- // FIXME - NativeJavaPackage is an internal class which we should not use
- Scriptable newPackages = new NativeJavaPackage( "", cl );
- newPackages.setParentScope( getScope() );
- newPackages.setPrototype( ScriptableObject.getClassPrototype( getScope(),
- JAVA_PACKAGE ) );
- objectModel.put( "Packages", newPackages );
- objectModel.put( "java", ScriptableObject.getProperty( getScope(), "java" ) );
- } finally {
- Context.exit();
- }
- }
- return objectModel;
}
}