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

Reply via email to