sylvain 2003/11/20 07:31:29
Modified: src/java/org/apache/cocoon/components/flow
AbstractInterpreter.java
src/java/org/apache/cocoon/components/flow/javascript/fom
FOM_Cocoon.java FOM_JavaScriptInterpreter.java
Log:
Adding cocoon.setup() to setup java objects using IOC style
Revision Changes Path
1.11 +19 -3
cocoon-2.1/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java
Index: AbstractInterpreter.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- AbstractInterpreter.java 15 Oct 2003 17:02:05 -0000 1.10
+++ AbstractInterpreter.java 20 Nov 2003 15:31:29 -0000 1.11
@@ -56,6 +56,9 @@
import org.apache.avalon.framework.context.ContextException;
import org.apache.avalon.framework.context.Contextualizable;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.Serviceable;
import org.apache.avalon.framework.thread.SingleThreaded;
import org.apache.cocoon.Constants;
import org.apache.cocoon.Processor;
@@ -82,9 +85,11 @@
* @version CVS $Id$
*/
public abstract class AbstractInterpreter extends AbstractLogEnabled
- implements Component, Composable, Contextualizable, Interpreter,
+ implements Component, Composable, Serviceable, Contextualizable,
Interpreter,
SingleThreaded, Configurable, Disposable
{
+ protected org.apache.avalon.framework.context.Context avalonContext;
+
/**
* List of source locations that need to be resolved.
*/
@@ -92,6 +97,7 @@
protected org.apache.cocoon.environment.Context context;
protected ComponentManager manager;
+ protected ServiceManager serviceManager;
protected ContinuationsManager continuationsMgr;
/**
@@ -116,11 +122,21 @@
*/
public void compose(ComponentManager manager) throws ComponentException {
this.manager = manager;
- this.continuationsMgr =
(ContinuationsManager)manager.lookup(ContinuationsManager.ROLE);
+ //mpved below in service()
+ //this.continuationsMgr =
(ContinuationsManager)manager.lookup(ContinuationsManager.ROLE);
+ }
+
+ /**
+ * Serviceable
+ */
+ public void service(ServiceManager sm) throws ServiceException {
+ this.serviceManager = sm;
+ this.continuationsMgr =
(ContinuationsManager)sm.lookup(ContinuationsManager.ROLE);
}
public void contextualize(org.apache.avalon.framework.context.Context
context)
throws ContextException{
+ this.avalonContext = context;
this.context =
(Context)context.get(Constants.CONTEXT_ENVIRONMENT_CONTEXT);
}
1.18 +42 -3
cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java
Index: FOM_Cocoon.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_Cocoon.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- FOM_Cocoon.java 14 Nov 2003 18:58:18 -0000 1.17
+++ FOM_Cocoon.java 20 Nov 2003 15:31:29 -0000 1.18
@@ -62,6 +62,8 @@
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.logger.Logger;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.cocoon.components.LifecycleHelper;
import org.apache.cocoon.components.flow.ContinuationsManager;
import org.apache.cocoon.components.flow.WebContinuation;
import org.apache.cocoon.components.flow.Interpreter.Argument;
@@ -92,6 +94,10 @@
*/
public class FOM_Cocoon extends ScriptableObject {
+ private org.apache.avalon.framework.context.Context avalonContext;
+
+ private ServiceManager serviceManager;
+
private FOM_JavaScriptInterpreter interpreter;
private Environment environment;
@@ -126,10 +132,14 @@
void setup(FOM_JavaScriptInterpreter interp,
Environment env,
ComponentManager manager,
+ ServiceManager serviceManager,
+ org.apache.avalon.framework.context.Context avalonContext,
Logger logger) {
this.interpreter = interp;
this.environment = env;
this.componentManager = manager;
+ this.serviceManager = serviceManager;
+ this.avalonContext = avalonContext;
this.logger = logger;
}
@@ -281,8 +291,37 @@
environment,
filename );
return script.exec( cx, scope );
- }
-
+ }
+
+ /**
+ * Setup an object so that it can access the information provided to
regular components.
+ * This is done by calling the various Avalon lifecycle interfaces
implemented by the object, which
+ * are <code>LogEnabled</code>, <code>Contextualizable</code>,
<code>ServiceManageable</code>,
+ * <code>Composable</code> (even if deprecated) and
<code>Initializable</code>.
+ * <p>
+ * <code>Contextualizable</code> is of primary importance as it gives
access to the whole object model
+ * (request, response, etc.) through the [EMAIL PROTECTED]
org.apache.cocoon.components.ContextHelper} class.
+ * <p>
+ * Note that <code>Configurable</code> is ignored, as no configuration
exists in a flowscript that
+ * can be passed to the object.
+ *
+ * @param obj the object to setup
+ * @return the same object (convenience that allows to write <code>var
foo = cocoon.setupObject(new Foo());</code>).
+ * @throws Exception if something goes wrong during setup.
+ */
+ public Object jsFunction_setupObject(Object obj) throws Exception {
+ LifecycleHelper.setupComponent(
+ unwrap(obj),
+ this.logger,
+ this.avalonContext,
+ this.serviceManager,
+ this.componentManager,
+ null,// roleManager
+ null,// configuration
+ true);
+ return obj;
+ }
+
public static class FOM_Request extends ScriptableObject {
Request request;
1.13 +3 -3
cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_JavaScriptInterpreter.java
Index: FOM_JavaScriptInterpreter.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_JavaScriptInterpreter.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- FOM_JavaScriptInterpreter.java 28 Oct 2003 17:21:14 -0000 1.12
+++ FOM_JavaScriptInterpreter.java 20 Nov 2003 15:31:29 -0000 1.13
@@ -364,7 +364,7 @@
thrScope)).longValue();
// We need to setup the FOM_Cocoon object according to the current
// request. Everything else remains the same.
- cocoon.setup(this, environment, manager, getLogger());
+ cocoon.setup(this, environment, manager, serviceManager,
avalonContext, getLogger());
// Check if we need to compile and/or execute scripts
synchronized (compiledScripts) {
@@ -578,7 +578,7 @@
Scriptable kScope = k.getParentScope();
synchronized (kScope) {
FOM_Cocoon cocoon = (FOM_Cocoon)kScope.get("cocoon", kScope);
- cocoon.setup(this, environment, manager, getLogger());
+ cocoon.setup(this, environment, manager, serviceManager,
avalonContext, getLogger());
// Register the current scope for scripts indirectly called from
this function
cocoon.getRequest().setAttribute(FOM_JavaScriptFlowHelper.FOM_SCOPE, kScope);