sylvain     2004/02/20 10:48:23

  Modified:    src/blocks/apples/java/org/apache/cocoon/components/flow/apples
                        ApplesProcessor.java
               
src/blocks/jxforms/java/org/apache/cocoon/components/jxforms/flow/javascript
                        JXForm.java
               
src/blocks/scratchpad/java/org/apache/cocoon/components/flow/javascript/fom
                        AO_FOM_Cocoon.java
                        AO_FOM_JavaScriptInterpreter.java
                        JavaScriptAspectWeaver.java
               src/java/org/apache/cocoon/components/flow
                        AbstractInterpreter.java CompilingInterpreter.java
                        Interpreter.java
               src/java/org/apache/cocoon/components/flow/javascript/fom
                        FOM_Cocoon.java FOM_JavaScriptInterpreter.java
                        FOM_WebContinuation.java
               src/java/org/apache/cocoon/components/treeprocessor/sitemap
                        CallFunctionNode.java ContinueNode.java
  Log:
  Remove dependency of flow on Environment: replaced by Redirector
  
  Revision  Changes    Path
  1.11      +14 -13    
cocoon-2.1/src/blocks/apples/java/org/apache/cocoon/components/flow/apples/ApplesProcessor.java
  
  Index: ApplesProcessor.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/apples/java/org/apache/cocoon/components/flow/apples/ApplesProcessor.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- ApplesProcessor.java      2 Dec 2003 23:04:30 -0000       1.10
  +++ ApplesProcessor.java      20 Feb 2004 18:48:23 -0000      1.11
  @@ -47,18 +47,19 @@
   
   import java.util.List;
   
  +import org.apache.avalon.framework.activity.Disposable;
  +import org.apache.avalon.framework.component.WrapperComponentManager;
  +import org.apache.avalon.framework.context.DefaultContext;
   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.activity.Disposable;
  -import org.apache.avalon.framework.context.DefaultContext;
  +import org.apache.cocoon.components.ContextHelper;
   import org.apache.cocoon.components.LifecycleHelper;
   import org.apache.cocoon.components.flow.AbstractInterpreter;
   import org.apache.cocoon.components.flow.ContinuationsDisposer;
   import org.apache.cocoon.components.flow.InvalidContinuationException;
   import org.apache.cocoon.components.flow.WebContinuation;
  -import org.apache.cocoon.environment.Environment;
  -import org.apache.cocoon.environment.ObjectModelHelper;
  +import org.apache.cocoon.environment.Redirector;
   import org.apache.cocoon.environment.Request;
   
   /**
  @@ -74,7 +75,7 @@
       public void callFunction(
           String className,
           List params,
  -        Environment env)
  +        Redirector redirector)
           throws Exception {
   
           AppleController app = instantiateController(className);
  @@ -87,10 +88,10 @@
           getLogger().debug("Pulling fresh apple through the lifecycle... | 
continuationid=" + wk.getId());
           
           LifecycleHelper.setupComponent( app, getLogger(), appleContext, 
  -                                        this.serviceManager, super.manager,  
  +                                        this.serviceManager, new 
WrapperComponentManager(this.serviceManager),  
                                           null, null, true);
           
  -        processApple(params, env, app, wk);
  +        processApple(params, redirector, app, wk);
       }
   
   
  @@ -98,7 +99,7 @@
       public void handleContinuation(
           String continuationId,
           List params,
  -        Environment env)
  +        Redirector redirector)
           throws Exception {
   
           WebContinuation wk =
  @@ -116,7 +117,7 @@
           getLogger().debug("found apple from continuation: " + app);
   
           // TODO access control checks? exception to be thrown for illegal 
access?
  -        processApple(params, env, app, wk);
  +        processApple(params, redirector, app, wk);
   
       }
   
  @@ -136,22 +137,22 @@
   
       private void processApple(
           List params,
  -        Environment env,
  +        Redirector redirector,
           AppleController app,
           WebContinuation wk)
           throws Exception {
   
  -        Request cocoonRequest = 
ObjectModelHelper.getRequest(env.getObjectModel());
  +        Request cocoonRequest = ContextHelper.getRequest(this.avalonContext);
           AppleRequest req = new DefaultAppleRequest(params, cocoonRequest);
           DefaultAppleResponse res = new DefaultAppleResponse();
           app.process(req, res);
   
           if (res.isRedirect()) {
  -            env.redirect(false, res.getURI());
  +            redirector.redirect(false, res.getURI());
           } else {
               String uri = res.getURI();
               getLogger().debug("Apple forwards to " + uri + " with bizdata= " 
+ res.getData() + " and continuationid= " + wk.getId());
  -            this.forwardTo(uri, res.getData(), wk, env);
  +            this.forwardTo(uri, res.getData(), wk, redirector);
           }
   
           //TODO allow for AppleResponse to set some boolean saying the use 
case
  
  
  
  1.7       +1 -1      
cocoon-2.1/src/blocks/jxforms/java/org/apache/cocoon/components/jxforms/flow/javascript/JXForm.java
  
  Index: JXForm.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/jxforms/java/org/apache/cocoon/components/jxforms/flow/javascript/JXForm.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- JXForm.java       5 Sep 2003 07:21:48 -0000       1.6
  +++ JXForm.java       20 Feb 2004 18:48:23 -0000      1.7
  @@ -128,7 +128,7 @@
           form.setAutoValidate(false);
           if (validatorNamespace != null && validatorDocument != null) {
               SourceResolver resolver = (SourceResolver)
  -                
getCocoon().getComponentManager().lookup(SourceResolver.ROLE);
  +                getCocoon().getServiceManager().lookup(SourceResolver.ROLE);
               Source schemaSrc = resolver.resolveURI(validatorDocument);
               InputSource is = SourceUtil.getInputSource(schemaSrc);
               SchemaFactory schf = SchemaFactory.lookup(validatorNamespace);
  
  
  
  1.5       +29 -49    
cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/flow/javascript/fom/AO_FOM_Cocoon.java
  
  Index: AO_FOM_Cocoon.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/flow/javascript/fom/AO_FOM_Cocoon.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AO_FOM_Cocoon.java        28 Oct 2003 17:22:17 -0000      1.4
  +++ AO_FOM_Cocoon.java        20 Feb 2004 18:48:23 -0000      1.5
  @@ -59,16 +59,16 @@
   import java.util.Locale;
   import java.util.Map;
   
  -import org.apache.avalon.framework.component.Component;
  -import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.framework.logger.Logger;
  +import org.apache.avalon.framework.service.ServiceManager;
  +import org.apache.cocoon.components.ContextHelper;
   import org.apache.cocoon.components.flow.ContinuationsManager;
   import org.apache.cocoon.components.flow.WebContinuation;
   import org.apache.cocoon.components.flow.Interpreter.Argument;
  -import org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode;
   import org.apache.cocoon.environment.Cookie;
  -import org.apache.cocoon.environment.Environment;
   import org.apache.cocoon.environment.ObjectModelHelper;
  +import org.apache.cocoon.environment.Redirector;
   import org.apache.cocoon.environment.Request;
   import org.apache.cocoon.environment.Response;
   import org.apache.cocoon.environment.Session;
  @@ -93,9 +93,10 @@
   
       private AO_FOM_JavaScriptInterpreter interpreter;
   
  -    private Environment environment;
  -    private ComponentManager componentManager;
  +    private Redirector redirector;
  +    private ServiceManager componentManager;
       private Logger logger;
  +    private Context avalonContext;
   
       private FOM_Request request;
       private FOM_Response response;
  @@ -123,11 +124,13 @@
       }
   
       void setup(AO_FOM_JavaScriptInterpreter interp,
  -                      Environment env, 
  -                      ComponentManager manager,
  +                      Redirector redirector, 
  +                      Context avalonContext,
  +                      ServiceManager manager,
                         Logger logger) {
           this.interpreter = interp;
  -        this.environment = env;
  +        this.redirector = redirector;
  +        this.avalonContext = avalonContext;
           this.componentManager = manager;
           this.logger = logger;
       }
  @@ -140,7 +143,7 @@
           this.log = null;
           this.logger = null;
           this.componentManager = null;
  -        this.environment = null;
  +        this.redirector = null;
           this.interpreter = null;
       }
   
  @@ -167,7 +170,7 @@
           fom_wk.setPrototype(getClassPrototype(getParentScope(), 
                                                 fom_wk.getClassName()));
           interpreter.forwardTo(getParentScope(), this, redUri,
  -                              bizData, fom_wk, environment);
  +                              bizData, fom_wk, redirector);
   
           FOM_WebContinuation result = null;
           if (wk != null) {
  @@ -195,14 +198,11 @@
               throw new JavaScriptException("expected a java.io.OutputStream 
instead of " + outputStream);
           }
           interpreter.process(getParentScope(), this, uri, map, 
  -                            (OutputStream)unwrap(outputStream), 
  -                            environment);
  +                            (OutputStream)unwrap(outputStream));
       }
   
       public void jsFunction_redirectTo(String uri) throws Exception {
  -        // Cannot use environment directly as TreeProcessor uses own version 
of redirector
  -        // environment.redirect(false, uri);
  -        PipelinesNode.getRedirector(environment).redirect(false, uri);
  +        redirector.redirect(false, uri);
       }
   
       /*
  @@ -237,11 +237,7 @@
        * of <code>org.apache.avalon.framework.component.Component</code>
        */
       public void jsFunction_releaseComponent( Object component ) throws 
Exception {
  -        try {
  -            this.componentManager.release( (Component) unwrap(component) );
  -        } catch( ClassCastException cce ) {
  -            throw new JavaScriptException( "Only components can be 
released!" );
  -        }
  +        this.componentManager.release( unwrap(component) );
       }
   
       // (RPO) added by interception layer    
  @@ -272,9 +268,7 @@
           org.mozilla.javascript.Context cx = 
               org.mozilla.javascript.Context.getCurrentContext();
           Scriptable scope = getParentScope();
  -        Script script = interpreter.compileScript( cx, 
  -                                                   environment,
  -                                                   filename );
  +        Script script = interpreter.compileScript( cx, filename );
           return script.exec( cx, scope );
       }    
           
  @@ -773,12 +767,11 @@
           if (request != null) {
               return request;
           }
  -        if (environment == null) {
  +        if (redirector == null) {
               // context has been invalidated
               return null;
           }
  -        Map objectModel = environment.getObjectModel();
  -        request = new FOM_Request(ObjectModelHelper.getRequest(objectModel));
  +        request = new FOM_Request(ContextHelper.getRequest(avalonContext));
           request.setParentScope(getParentScope());
           request.setPrototype(getClassPrototype(getParentScope(), 
"FOM_Request"));
           return request;
  @@ -788,13 +781,11 @@
           if (response != null) {
               return response;
           }
  -        if (environment == null) {
  +        if (redirector == null) {
               // context has been invalidated
               return null;
           }
  -        Map objectModel = environment.getObjectModel();
  -        response = 
  -            new FOM_Response(ObjectModelHelper.getResponse(objectModel));
  +        response = new 
FOM_Response(ContextHelper.getResponse(avalonContext));
           response.setParentScope(getParentScope());
           response.setPrototype(getClassPrototype(this, "FOM_Response"));
           return response;
  @@ -814,7 +805,7 @@
           if (context != null) {
               return context;
           }
  -        Map objectModel = environment.getObjectModel();
  +        Map objectModel = ContextHelper.getObjectModel(avalonContext);
           context = 
               new FOM_Context(ObjectModelHelper.getContext(objectModel));
           context.setParentScope(getParentScope());
  @@ -826,13 +817,11 @@
           if (session != null) {
               return session;
           }
  -        if (environment == null) {
  +        if (redirector == null) {
               // session has been invalidated
               return null;
           }
  -        Map objectModel = environment.getObjectModel();
  -        session = 
  -            new 
FOM_Session(ObjectModelHelper.getRequest(objectModel).getSession(true));
  +        session = new 
FOM_Session(ContextHelper.getRequest(avalonContext).getSession(true));
           session.setParentScope(getParentScope());
           session.setPrototype(getClassPrototype(this, "FOM_Session"));
           return session;
  @@ -904,16 +893,7 @@
        * @return The object model
        */
       public Map getObjectModel() {
  -        return environment.getObjectModel();
  -    }
  -
  -    /**
  -     * Get the current Sitemap's component manager
  -     * @return The component manager
  -     */
  -
  -    public ComponentManager getComponentManager() {
  -        return componentManager;
  +        return ContextHelper.getObjectModel(avalonContext);
       }
   
       /**
  @@ -932,7 +912,7 @@
                                 uri,
                                 bean,
                                 fom_wk,
  -                              environment);
  +                              redirector);
       }
   
       /**
  @@ -958,7 +938,7 @@
                                           
org.mozilla.javascript.Context.toString(getProperty(parameters, name)));
               list.add(arg);
           }
  -        interpreter.handleContinuation(kontId, list, environment);
  +        interpreter.handleContinuation(kontId, list, redirector);
       }
   
       /**
  
  
  
  1.7       +58 -36    
cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/flow/javascript/fom/AO_FOM_JavaScriptInterpreter.java
  
  Index: AO_FOM_JavaScriptInterpreter.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/flow/javascript/fom/AO_FOM_JavaScriptInterpreter.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- AO_FOM_JavaScriptInterpreter.java 24 Sep 2003 22:00:34 -0000      1.6
  +++ AO_FOM_JavaScriptInterpreter.java 20 Feb 2004 18:48:23 -0000      1.7
  @@ -65,8 +65,12 @@
   import org.apache.avalon.framework.configuration.Configurable;
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
  +import org.apache.avalon.framework.service.ServiceException;
  +import org.apache.avalon.framework.service.ServiceManager;
  +import org.apache.avalon.framework.service.Serviceable;
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.ResourceNotFoundException;
  +import org.apache.cocoon.components.ContextHelper;
   import org.apache.cocoon.components.flow.AbstractInterpreter;
   import org.apache.cocoon.components.flow.Interpreter;
   import org.apache.cocoon.components.flow.InvalidContinuationException;
  @@ -74,14 +78,23 @@
   import org.apache.cocoon.components.flow.javascript.JSErrorReporter;
   import org.apache.cocoon.components.flow.javascript.ScriptablePointerFactory;
   import 
org.apache.cocoon.components.flow.javascript.ScriptablePropertyHandler;
  -import org.apache.cocoon.environment.Environment;
   import org.apache.cocoon.environment.ObjectModelHelper;
  +import org.apache.cocoon.environment.Redirector;
   import org.apache.cocoon.environment.Request;
   import org.apache.cocoon.environment.Session;
   import org.apache.commons.jxpath.JXPathIntrospector;
   import org.apache.commons.jxpath.ri.JXPathContextReferenceImpl;
   import org.apache.excalibur.source.Source;
  -import org.mozilla.javascript.*;
  +import org.apache.excalibur.source.SourceResolver;
  +import org.mozilla.javascript.Context;
  +import org.mozilla.javascript.EcmaError;
  +import org.mozilla.javascript.EvaluatorException;
  +import org.mozilla.javascript.JavaScriptException;
  +import org.mozilla.javascript.Script;
  +import org.mozilla.javascript.ScriptRuntime;
  +import org.mozilla.javascript.Scriptable;
  +import org.mozilla.javascript.ScriptableObject;
  +import org.mozilla.javascript.Wrapper;
   import org.mozilla.javascript.continuations.Continuation;
   import org.mozilla.javascript.tools.ToolErrorReporter;
   import org.mozilla.javascript.tools.shell.Global;
  @@ -110,9 +123,11 @@
    * @version CVS $Id$
    */
   public class AO_FOM_JavaScriptInterpreter extends AbstractInterpreter
  -    implements Configurable, Initializable
  +    implements Serviceable, Configurable, Initializable
   {
   
  +    private SourceResolver sourceResolver;
  +
       /**
        * LAST_EXEC_TIME
        * A long value is stored under this key in each top level JavaScript
  @@ -244,6 +259,11 @@
       Configuration stopExecutionFunctionsConf = null;
       boolean serializeResultScript = false;
       // --end
  +    
  +    public void service(ServiceManager manager) throws ServiceException {
  +        super.service(manager);
  +        this.sourceResolver = 
(SourceResolver)manager.lookup(SourceResolver.ROLE);
  +    }
   
       public void configure(Configuration config) 
           throws ConfigurationException {
  @@ -312,16 +332,18 @@
        * @param environment an <code>Environment</code> value
        * @return a <code>Scriptable</code> value
        */
  -    private Scriptable getSessionScope(Environment environment)
  +    private Scriptable getSessionScope()
           throws Exception {
  -        Map objectModel = environment.getObjectModel();
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  +        Request request = ContextHelper.getRequest(avalonContext);
           Scriptable scope = null;
           Session session = request.getSession(false);
           if (session != null) {
               HashMap userScopes = 
(HashMap)session.getAttribute(USER_GLOBAL_SCOPE);
               if (userScopes != null) {
  -                String uriPrefix = environment.getURIPrefix();
  +                // Get context prefix
  +                Source src = this.sourceResolver.resolveURI(".");
  +                String uriPrefix = src.getURI();
  +                this.sourceResolver.release(src);
                   scope = (Scriptable)userScopes.get(uriPrefix);
               }
           }
  @@ -331,10 +353,10 @@
           return scope;
       }
   
  -    void updateSession(Environment env, Scriptable scope) throws Exception {
  +    void updateSession(Scriptable scope) throws Exception {
           ThreadScope thrScope = (ThreadScope)scope;
           if (thrScope.useSession) {
  -            setSessionScope(env, scope);
  +            setSessionScope(scope);
           }
       }
   
  @@ -346,10 +368,9 @@
        * @param environment an <code>Environment</code> value
        * @param scope a <code>Scriptable</code> value
        */
  -    private Scriptable setSessionScope(Environment environment, Scriptable 
scope)
  +    private Scriptable setSessionScope(Scriptable scope)
           throws Exception {
  -        Map objectModel = environment.getObjectModel();
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  +        Request request = ContextHelper.getRequest(this.avalonContext);
           Session session = request.getSession(true);
   
           HashMap userScopes = 
(HashMap)session.getAttribute(USER_GLOBAL_SCOPE);
  @@ -357,7 +378,10 @@
               userScopes = new HashMap();
               session.setAttribute(USER_GLOBAL_SCOPE, userScopes);
           }
  -        String uriPrefix = environment.getURIPrefix();
  +        // Get context prefix
  +        Source src = this.sourceResolver.resolveURI(".");
  +        String uriPrefix = src.getURI();
  +        this.sourceResolver.release(src);
           userScopes.put(uriPrefix, scope);
           return scope;
       }
  @@ -436,7 +460,7 @@
        * @param environment an <code>Environment</code> value
        * @exception Exception if an error occurs
        */
  -    private void setupContext(Environment environment,
  +    private void setupContext(Redirector redirector,
                                 org.mozilla.javascript.Context context,
                                 Scriptable thrScope)
           throws Exception {
  @@ -455,7 +479,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, redirector, avalonContext, manager, getLogger());
           
           // Check if we need to compile and/or execute scripts
           synchronized (compiledScripts) {
  @@ -488,7 +512,7 @@
                   ScriptSourceEntry entry =
                       (ScriptSourceEntry)compiledScripts.get(sourceURI);
                   if (entry == null) {
  -                    Source src = environment.resolveURI(sourceURI);
  +                    Source src = this.sourceResolver.resolveURI(sourceURI);
                       entry = new ScriptSourceEntry(src);
                       compiledScripts.put(sourceURI, entry);
                   }
  @@ -496,8 +520,8 @@
                   // add interception support
                   if( isInterceptionEnabled ) {
                       JavaScriptAspectWeaver aspectWeaver = new 
JavaScriptAspectWeaver();
  -                    aspectWeaver.setEnvironment( environment );
                       aspectWeaver.enableLogging( this.getLogger() );
  +                    aspectWeaver.service(this.manager);
                       aspectWeaver.setSerializeResultScriptParam( 
this.serializeResultScript );
                       aspectWeaver.setStopExecutionFunctionsConf( 
this.stopExecutionFunctionsConf );
                       entry.setAspectWeaver( aspectWeaver );
  @@ -532,9 +556,8 @@
        * @return compiled script
        */
       Script compileScript(Context cx,
  -                         Environment environment,
                            String fileName) throws Exception {
  -        Source src = environment.resolveURI(fileName);
  +        Source src = sourceResolver.resolveURI(fileName);
           if (src == null) {
               throw new ResourceNotFoundException(fileName + ": not found");
           }
  @@ -596,7 +619,7 @@
        * @exception Exception if an error occurs
        */
       public void callFunction(String funName, List params,
  -                             Environment environment)
  +                             Redirector redirector)
           throws Exception
       {
           Context context = Context.enter();
  @@ -605,10 +628,10 @@
           context.setCompileFunctionsWithDynamicScope(true);
           context.setErrorReporter(errorReporter);
           AO_FOM_Cocoon cocoon = null;
  -        Scriptable thrScope = getSessionScope(environment);
  +        Scriptable thrScope = getSessionScope();
           synchronized (thrScope) {
               try {
  -                setupContext(environment, context, thrScope);
  +                setupContext(redirector, context, thrScope);
                   cocoon = (AO_FOM_Cocoon)thrScope.get("cocoon", thrScope);
                   if (enableDebugger) {
                       if (!getDebugger().isVisible()) {
  @@ -657,7 +680,7 @@
                   }
                   throw new CascadingRuntimeException(ee.getMessage(), ee);
               } finally {
  -                updateSession(environment, thrScope);
  +                updateSession(thrScope);
                   if (cocoon != null) cocoon.invalidate();
                   Context.exit();
               }
  @@ -665,7 +688,7 @@
       }
   
       public void handleContinuation(String id, List params,
  -                                   Environment environment)
  +                                   Redirector redirector)
           throws Exception
       {
           WebContinuation wk = continuationsMgr.lookupWebContinuation(id);
  @@ -691,7 +714,7 @@
           Scriptable kScope = k.getParentScope();
           synchronized (kScope) {
               AO_FOM_Cocoon cocoon = (AO_FOM_Cocoon)kScope.get("cocoon", 
kScope);
  -            cocoon.setup(this, environment, manager, getLogger());
  +            cocoon.setup(this, redirector, avalonContext, manager, 
getLogger());
               if (enableDebugger) {
                   getDebugger().setVisible(true);
               }
  @@ -739,7 +762,7 @@
                   }
                   throw new CascadingRuntimeException(ee.getMessage(), ee);
               } finally {
  -                updateSession(environment, kScope);
  +                updateSession(kScope);
                   cocoon.invalidate();
                   Context.exit();
               }
  @@ -760,29 +783,28 @@
       public void forwardTo(Scriptable scope, AO_FOM_Cocoon cocoon,
                             String uri, Object bizData,
                             FOM_WebContinuation fom_wk,
  -                          Environment environment)
  +                          Redirector redirector)
           throws Exception {
  -        setupView(scope, cocoon, environment, fom_wk);
  +        setupView(scope, cocoon, fom_wk);
           super.forwardTo(uri, bizData, 
                           fom_wk == null ? null :
                              fom_wk.getWebContinuation(), 
  -                        environment);
  +                        redirector);
       }
   
       // package access as this is called by FOM_Cocoon
  -    boolean process(Scriptable scope, AO_FOM_Cocoon cocoon,
  +    void process(Scriptable scope, AO_FOM_Cocoon cocoon,
                       String uri, Object bizData, 
  -                    OutputStream out, Environment environment)
  +                    OutputStream out)
           throws Exception {
  -        setupView(scope, cocoon, environment, null);
  -        return super.process(uri, bizData, out, environment);
  +        setupView(scope, cocoon, null);
  +        super.process(uri, bizData, out);
       }
       
       private void setupView(Scriptable scope,
                              AO_FOM_Cocoon cocoon,
  -                           Environment environment,
                              FOM_WebContinuation kont) {
  -        Map objectModel = environment.getObjectModel();
  +        Map objectModel = ContextHelper.getObjectModel(this.avalonContext);
           // Make the JS live-connect objects available to the view layer
           FOM_JavaScriptFlowHelper.setPackages(objectModel,
                                      
(Scriptable)ScriptableObject.getProperty(scope,
  
  
  
  1.10      +29 -18    
cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/flow/javascript/fom/JavaScriptAspectWeaver.java
  
  Index: JavaScriptAspectWeaver.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/scratchpad/java/org/apache/cocoon/components/flow/javascript/fom/JavaScriptAspectWeaver.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- JavaScriptAspectWeaver.java       23 Dec 2003 15:28:32 -0000      1.9
  +++ JavaScriptAspectWeaver.java       20 Feb 2004 18:48:23 -0000      1.10
  @@ -67,8 +67,11 @@
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
   import org.apache.avalon.framework.logger.AbstractLogEnabled;
  -import org.apache.cocoon.environment.Environment;
  +import org.apache.avalon.framework.service.ServiceException;
  +import org.apache.avalon.framework.service.ServiceManager;
  +import org.apache.avalon.framework.service.Serviceable;
   import org.apache.excalibur.source.Source;
  +import org.apache.excalibur.source.SourceResolver;
   import org.apache.cocoon.matching.helpers.WildcardHelper;
   
   
  @@ -116,13 +119,13 @@
    * @since Sept, 2003
    * @version CVS $Id$
    */
  -public class JavaScriptAspectWeaver extends AbstractLogEnabled {
  +public class JavaScriptAspectWeaver extends AbstractLogEnabled implements 
Serviceable {
       
       /** All Interceptors in the right order */
       ArrayList interceptorGroups = new ArrayList();
       
  -    /** The Cocoon environment needed for SourceResolving */
  -    Environment environement = null;
  +    /** The service manager */
  +    ServiceManager manager = null;
       
       /** If debugging is true, the intercepted script is writen to filesystem 
*/
       boolean serializeResultScript = false;
  @@ -144,7 +147,7 @@
        * intercepting scripts) and if scripts are applied those are
        * scanned the code is added to <code>interceptorGroups</code>
        */
  -    public void setBaseScript( Source source ) throws IOException {
  +    public void setBaseScript( Source source ) throws Exception {
           
           this.source = source;
           
  @@ -202,11 +205,19 @@
        * script is added first, ...)
        */
       protected void addInterceptorGroup( String source  ) 
  -        throws IOException {
  +        throws Exception {
           
  -        this.getLogger().info( "applied script: " + source );        
  -        JSTokenList interceptorsTokensList = JSParser.parse( 
  -            readSourceIntoCharArray( 
this.environement.resolveURI(source).getInputStream() ) );
  +        this.getLogger().info( "applied script: " + source );
  +        SourceResolver resolver = 
(SourceResolver)this.manager.lookup(SourceResolver.ROLE);
  +        Source src = resolver.resolveURI(source);
  +        JSTokenList interceptorsTokensList;
  +        try {
  +            interceptorsTokensList = JSParser.parse( 
  +                readSourceIntoCharArray( src.getInputStream() ) );
  +        } finally {
  +            resolver.release(src);
  +            this.manager.release(resolver);
  +        }
   
           InterceptionList interceptors = 
interceptorsTokensList.readInterceptionTokens();
           interceptors.setSourceScript( source );
  @@ -220,13 +231,6 @@
       }
       
       /**
  -     * The access to the Cocoon environemnt 
  -     */
  -    public void setEnvironment( Environment env ) {
  -        this.environement = env;
  -    }
  -
  -    /**
        * Should the JavaScriptAspectWeaver write the result script
        * into separate file in the same directory as the basescript?
        */
  @@ -1412,5 +1416,12 @@
           }
   
        }
  -        
  +
  +    /* (non-Javadoc)
  +     * @see 
org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
  +     */
  +    public void service(ServiceManager manager) throws ServiceException
  +    {
  +        this.manager = manager;
  +    }
   }
  
  
  
  1.18      +15 -84    
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.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- AbstractInterpreter.java  28 Jan 2004 05:46:21 -0000      1.17
  +++ AbstractInterpreter.java  20 Feb 2004 18:48:23 -0000      1.18
  @@ -51,9 +51,6 @@
   
   import org.apache.avalon.framework.activity.Disposable;
   import org.apache.avalon.framework.component.Component;
  -import org.apache.avalon.framework.component.ComponentException;
  -import org.apache.avalon.framework.component.ComponentManager;
  -import org.apache.avalon.framework.component.Composable;
   import org.apache.avalon.framework.configuration.Configurable;
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
  @@ -64,17 +61,12 @@
   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;
  -import org.apache.cocoon.components.CocoonComponentManager;
  +import org.apache.cocoon.components.ContextHelper;
  +import org.apache.cocoon.components.flow.util.PipelineUtil;
   import org.apache.cocoon.environment.Context;
  -import org.apache.cocoon.environment.Environment;
   import org.apache.cocoon.environment.Redirector;
  -import org.apache.cocoon.environment.wrapper.EnvironmentWrapper;
  -
   import org.apache.excalibur.source.SourceUtil;
  -import org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode;
   
   /**
    * Abstract superclass for various scripting languages used by Cocoon
  @@ -88,7 +80,7 @@
    * @version CVS $Id$
    */
   public abstract class AbstractInterpreter extends AbstractLogEnabled
  -  implements Component, Composable, Serviceable, Contextualizable, 
Interpreter,
  +  implements Component, Serviceable, Contextualizable, Interpreter,
                SingleThreaded, Configurable, Disposable
   {
       protected org.apache.avalon.framework.context.Context avalonContext;
  @@ -99,8 +91,7 @@
       protected ArrayList needResolve = new ArrayList();
   
       protected org.apache.cocoon.environment.Context context;
  -    protected ComponentManager manager;
  -    protected ServiceManager serviceManager;
  +    protected ServiceManager manager;
       protected ContinuationsManager continuationsMgr;
       
       /**
  @@ -121,19 +112,10 @@
       }
   
       /**
  -     * Composable
  -     */
  -    public void compose(ComponentManager manager) throws ComponentException {
  -        this.manager = manager;
  -        //mpved below in service()
  -        //this.continuationsMgr = 
(ContinuationsManager)manager.lookup(ContinuationsManager.ROLE);
  -    }
  -
  -    /**
        * Serviceable
        */
       public void service(ServiceManager sm) throws ServiceException {
  -        this.serviceManager = sm;
  +        this.manager = sm;
           this.continuationsMgr = 
(ContinuationsManager)sm.lookup(ContinuationsManager.ROLE);
       }
   
  @@ -148,7 +130,7 @@
        */
       public void dispose() {
           if ( this.manager != null ) {
  -            this.manager.release( (Component)this.continuationsMgr );
  +            this.manager.release( this.continuationsMgr );
               this.continuationsMgr = null;
               this.manager = null;
           }
  @@ -196,79 +178,28 @@
        * @param uri The URI for which the request should be generated.
        * @param biz Extra data associated with the subrequest.
        * @param out An OutputStream where the output should be written to.
  -     * @param env The environment of the original request.
  -     * @return Whatever the Cocoon processor returns (????).
        * @exception Exception If an error occurs.
        */
  -    public boolean process(String uri, Object biz, OutputStream out, 
Environment env)
  +    public void process(String uri, Object biz, OutputStream out)
           throws Exception 
       {
  -        if (SourceUtil.indexOfSchemeColon(uri) != -1) {
  -            throw new Exception("uri is not allowed to contain a scheme 
(cocoon:/ is always automatically used)");
  -        }
  -        // if the uri starts with a slash, then assume that the uri contains 
an absolute
  -        // path, starting from the root sitemap. Otherwise, the uri is 
relative to the current
  -        // sitemap.
  -        if (uri.length() > 0 && uri.charAt(0) == '/') {
  -            uri = uri.substring(1);
  -        } else {
  -            uri = env.getURIPrefix() + uri;
  -        }
  -
  -        // Create a wrapper environment for the subrequest to be processed.
  -        EnvironmentWrapper wrapper = new EnvironmentWrapper(env, uri, "", 
getLogger());
  -        wrapper.setURI("", uri);
  -        if (out != null) {
  -            wrapper.setOutputStream(out);
  -        }
  -        Map objectModel = env.getObjectModel();
  -        FlowHelper.setContextObject(objectModel, biz);
  -
  -        // Attermpt to start processing the wrapper environment
  -        Object key = CocoonComponentManager.startProcessing(wrapper);
  -
  -        Processor processor = null;
  -        boolean result = false;
  -        try {
  -            // Retrieve a processor instance
  -            processor = (Processor)this.manager.lookup(Processor.ROLE);
  -            
  -            // Enter the environment
  -            CocoonComponentManager.enterEnvironment(wrapper, this.manager, 
processor);
  -            
  -            // Process the subrequest
  -            result = processor.process(wrapper);
  -            if (out != null) {
  -                wrapper.commitResponse();
  -                out.flush();
  -            }
  -            // Return whatever the processor returned us
  -            return(result);
  -        } catch (Exception any) {
  -            throw(any);
  -        } finally {
  -            // Leave the environment, terminate processing and release 
processor
  -            if ( processor != null ) {
  -                // enterEnvironemnt has only been called if the
  -                // processor has been looked up
  -                CocoonComponentManager.leaveEnvironment();
  -            }
  -            CocoonComponentManager.endProcessing(wrapper, key);
  -            this.manager.release(processor);
  -        }
  +        // FIXME (SW): should we deprecate this method in favor of 
PipelineUtil?
  +        PipelineUtil pipeUtil = new PipelineUtil();
  +        pipeUtil.contextualize(this.avalonContext);
  +        pipeUtil.service(this.manager);
  +        pipeUtil.processToStream(uri, biz, out);
       }
   
       public void forwardTo(String uri, Object bizData,
                             WebContinuation continuation,
  -                          Environment environment)
  +                          Redirector redirector)
           throws Exception
       {
           if (SourceUtil.indexOfSchemeColon(uri) == -1) {
               uri = "cocoon:/" + uri;
  -            Map objectModel = environment.getObjectModel();
  +            Map objectModel = 
ContextHelper.getObjectModel(this.avalonContext);
               FlowHelper.setWebContinuation(objectModel, continuation);
               FlowHelper.setContextObject(objectModel, bizData);
  -            Redirector redirector = PipelinesNode.getRedirector(environment);
               if (redirector.hasRedirected()) {
                   throw new IllegalStateException("Pipeline has already been 
processed for this request");
               }
  
  
  
  1.2       +5 -5      
cocoon-2.1/src/java/org/apache/cocoon/components/flow/CompilingInterpreter.java
  
  Index: CompilingInterpreter.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/CompilingInterpreter.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- CompilingInterpreter.java 15 Oct 2003 17:02:05 -0000      1.1
  +++ CompilingInterpreter.java 20 Feb 2004 18:48:23 -0000      1.2
  @@ -49,8 +49,8 @@
   import java.util.Iterator;
   import java.util.Map;
   
  -import org.apache.avalon.framework.component.ComponentException;
  -import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.service.ServiceException;
  +import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.excalibur.source.Source;
   import org.apache.excalibur.source.SourceResolver;
   import org.mozilla.javascript.Context;
  @@ -79,8 +79,8 @@
       /**
        * Composable
        */
  -    public void compose(ComponentManager manager) throws ComponentException {
  -        super.compose(manager);
  +    public void service(ServiceManager manager) throws ServiceException {
  +        super.service(manager);
           this.sourceresolver = 
(SourceResolver)this.manager.lookup(SourceResolver.ROLE);
       }
   
  
  
  
  1.5       +8 -8      
cocoon-2.1/src/java/org/apache/cocoon/components/flow/Interpreter.java
  
  Index: Interpreter.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/Interpreter.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Interpreter.java  15 Nov 2003 04:21:29 -0000      1.4
  +++ Interpreter.java  20 Feb 2004 18:48:23 -0000      1.5
  @@ -46,6 +46,7 @@
   package org.apache.cocoon.components.flow;
   
   import org.apache.cocoon.environment.Environment;
  +import org.apache.cocoon.environment.Redirector;
   
   import java.util.List;
   
  @@ -172,9 +173,9 @@
      * CallFunctionNode.Argument instances. The interpretation of the
      * parameters is left to the actual implementation of the
      * interpreter.
  -   * @param env an <code>Environment</code> value
  +   * @param redirector a <code>Redirector</code> used to call views
      */
  -  void callFunction(String funName, List params, Environment env)
  +  void callFunction(String funName, List params, Redirector redirector)
       throws Exception;
   
     /**
  @@ -185,12 +186,11 @@
      * to be made available to the forwarded pipeline
      * @param continuation a <code>WebContinuation</code>, the
      * continuation to be called to resume the processing
  -   * @param environment an <code>Environment</code>, the Cocoon environment
  -   * invocation context.
  +   * @param redirector a <code>Redirector</code> used to call views
      * @exception Exception if an error occurs
      */
     void forwardTo(String uri, Object bizData, WebContinuation continuation,
  -                 Environment environment)
  +                 Redirector redirector)
       throws Exception;
   
     /**
  @@ -206,10 +206,10 @@
      * these parameters will only become available in the language's
      * environment, if at all.
      *
  -   * @param environment an <code>Environment</code> value
  +   * @param redirector a <code>Redirector</code> used to call views
      * @exception Exception if an error occurs
      */
     void handleContinuation(String continuationId, List params,
  -                          Environment environment)
  +                          Redirector redirector)
       throws Exception;
   }
  
  
  
  1.30      +34 -54    
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.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- FOM_Cocoon.java   10 Feb 2004 23:18:32 -0000      1.29
  +++ FOM_Cocoon.java   20 Feb 2004 18:48:23 -0000      1.30
  @@ -52,8 +52,8 @@
   
   import java.io.InputStream;
   import java.io.OutputStream;
  -import java.net.URL;
   import java.net.MalformedURLException;
  +import java.net.URL;
   import java.security.Principal;
   import java.util.ArrayList;
   import java.util.Enumeration;
  @@ -62,19 +62,18 @@
   import java.util.Locale;
   import java.util.Map;
   
  -import org.apache.avalon.framework.component.Component;
  -import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.component.WrapperComponentManager;
   import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.framework.logger.Logger;
   import org.apache.avalon.framework.service.ServiceManager;
  +import org.apache.cocoon.components.ContextHelper;
   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;
  -import org.apache.cocoon.components.treeprocessor.sitemap.PipelinesNode;
   import org.apache.cocoon.environment.Cookie;
  -import org.apache.cocoon.environment.Environment;
   import org.apache.cocoon.environment.ObjectModelHelper;
  +import org.apache.cocoon.environment.Redirector;
   import org.apache.cocoon.environment.Request;
   import org.apache.cocoon.environment.Response;
   import org.apache.cocoon.environment.Session;
  @@ -104,8 +103,7 @@
           Context avalonContext;
           ServiceManager serviceManager;
           FOM_JavaScriptInterpreter interpreter;
  -        Environment environment;
  -        ComponentManager componentManager;
  +        Redirector redirector;
           Logger logger;
           FOM_Request request;
           FOM_Response response;
  @@ -119,17 +117,15 @@
   
           public CallContext(CallContext caller,
                              FOM_JavaScriptInterpreter interp,
  -                           Environment env,
  -                           ComponentManager manager,
  -                           ServiceManager serviceManager,
  +                           Redirector redirector,
  +                           ServiceManager manager,
                              Context avalonContext,
                              Logger logger,
                              WebContinuation lastContinuation) {
               this.caller = caller;
               this.interpreter = interp;
  -            this.environment = env;
  -            this.componentManager = manager;
  -            this.serviceManager = serviceManager;
  +            this.redirector = redirector;
  +            this.serviceManager = manager;
               this.avalonContext = avalonContext;
               this.logger = logger;
               this.lastContinuation = lastContinuation;
  @@ -167,7 +163,7 @@
               if (session != null) {
                   return session;
               }
  -            Map objectModel = environment.getObjectModel();
  +            Map objectModel = 
ContextHelper.getObjectModel(this.avalonContext);
               session =
                   new 
FOM_Session(ObjectModelHelper.getRequest(objectModel).getSession(true));
               session.setParentScope(getParentScope());
  @@ -180,7 +176,7 @@
               if (request != null) {
                   return request;
               }
  -            Map objectModel = environment.getObjectModel();
  +            Map objectModel = 
ContextHelper.getObjectModel(this.avalonContext);
               request = new 
FOM_Request(ObjectModelHelper.getRequest(objectModel));
               request.setParentScope(getParentScope());
               request.setPrototype(getClassPrototype(getParentScope(),
  @@ -192,7 +188,7 @@
               if (context != null) {
                   return context;
               }
  -            Map objectModel = getEnvironment().getObjectModel();
  +            Map objectModel = 
ContextHelper.getObjectModel(this.avalonContext);
               context =
                   new FOM_Context(ObjectModelHelper.getContext(objectModel));
               context.setParentScope(getParentScope());
  @@ -205,7 +201,7 @@
               if (response != null) {
                   return response;
               }
  -            Map objectModel = environment.getObjectModel();
  +            Map objectModel = 
ContextHelper.getObjectModel(this.avalonContext);
               response =
                   new FOM_Response(ObjectModelHelper.getResponse(objectModel));
               response.setParentScope(getParentScope());
  @@ -255,17 +251,16 @@
       }
   
       void pushCallContext(FOM_JavaScriptInterpreter interp,
  -                         Environment env,
  -                         ComponentManager manager,
  -                         ServiceManager serviceManager,
  +                         Redirector redirector,
  +                         ServiceManager manager,
                            Context avalonContext,
                            Logger logger,
                            WebContinuation lastContinuation) {
           if (pageLocal == null) {
               pageLocal = new PageLocalScopeHolder(getTopLevelScope(this));
           }
  -        this.currentCall = new CallContext(currentCall, interp, env, manager,
  -                                           serviceManager, avalonContext,
  +        this.currentCall = new CallContext(currentCall, interp, redirector, 
manager,
  +                                           avalonContext,
                                              logger, lastContinuation);
       }
   
  @@ -319,18 +314,15 @@
               throw new JavaScriptException("expected a java.io.OutputStream 
instead of " + outputStream);
           }
           getInterpreter().process(getParentScope(), this, uri, map,
  -                                 (OutputStream)unwrap(outputStream),
  -                                 getEnvironment());
  +                                 (OutputStream)unwrap(outputStream));
       }
   
       public void jsFunction_redirectTo(String uri) throws Exception {
  -        // Cannot use environment directly as TreeProcessor uses own version 
of redirector
  -        // environment.redirect(false, uri);
  -        PipelinesNode.getRedirector(getEnvironment()).redirect(false, uri);
  +        this.currentCall.redirector.redirect(false, uri);
       }
   
       public void jsFunction_sendStatus(int sc) {
  -        PipelinesNode.getRedirector(getEnvironment()).sendStatus(sc);
  +        this.currentCall.redirector.sendStatus(sc);
       }
   
   /*
  @@ -360,21 +352,16 @@
        */
       public Object jsFunction_getComponent(String id)
           throws Exception {
  -        return getComponentManager().lookup(id);
  +        return getServiceManager().lookup(id);
       }
   
       /**
        * Release pooled components.
        *
  -     * @param component - an <code>Object</code> that is an instance
  -     * of <code>org.apache.avalon.framework.component.Component</code>
  +     * @param component a component
        */
       public void jsFunction_releaseComponent( Object component ) throws 
Exception {
  -        try {
  -            this.getComponentManager().release( (Component) 
unwrap(component) );
  -        } catch( ClassCastException cce ) {
  -            throw new JavaScriptException( "Only components can be 
released!" );
  -        }
  +        this.getServiceManager().release( unwrap(component) );
       }
   
       /**
  @@ -389,9 +376,7 @@
           org.mozilla.javascript.Context cx =
               org.mozilla.javascript.Context.getCurrentContext();
           Scriptable scope = getParentScope();
  -        Script script = getInterpreter().compileScript( cx,
  -                                                        getEnvironment(),
  -                                                        filename );
  +        Script script = getInterpreter().compileScript(cx, filename);
           return script.exec( cx, scope );
       }
   
  @@ -417,7 +402,7 @@
                this.getLogger(),
                this.getAvalonContext(),
                this.getServiceManager(),
  -             this.getComponentManager(),
  +             new WrapperComponentManager(this.getServiceManager()),
                null,// roleManager
                null,// configuration
                true);
  @@ -1487,7 +1472,7 @@
        * @return The object model
        */
       public Map getObjectModel() {
  -        return getEnvironment().getObjectModel();
  +        return ContextHelper.getObjectModel(currentCall.avalonContext);
       }
   
       /**
  @@ -1495,14 +1480,9 @@
        * @return The component manager
        */
   
  -    public ComponentManager getComponentManager() {
  -        return currentCall.componentManager;
  -    }
  -
  -
  -    private Environment getEnvironment() {
  -        return currentCall.environment;
  -    }
  +//    public ComponentManager getComponentManager() {
  +//        return currentCall.componentManager;
  +//    }
   
       private Context getAvalonContext() {
           return currentCall.avalonContext;
  @@ -1512,7 +1492,7 @@
           return currentCall.logger;
       }
   
  -    private ServiceManager getServiceManager() {
  +    public ServiceManager getServiceManager() {
           return currentCall.serviceManager;
       }
   
  @@ -1536,7 +1516,7 @@
                                      uri,
                                      bean,
                                      fom_wk,
  -                                   getEnvironment());
  +                                   this.currentCall.redirector);
       }
   
       /**
  @@ -1562,7 +1542,7 @@
                                           
org.mozilla.javascript.Context.toString(getProperty(parameters, name)));
               list.add(arg);
           }
  -        getInterpreter().handleContinuation(kontId, list, getEnvironment());
  +        getInterpreter().handleContinuation(kontId, list, 
this.currentCall.redirector);
       }
   
       /**
  @@ -1602,7 +1582,7 @@
           WebContinuation wk;
           ContinuationsManager contMgr;
           contMgr = (ContinuationsManager)
  -            getComponentManager().lookup(ContinuationsManager.ROLE);
  +            getServiceManager().lookup(ContinuationsManager.ROLE);
           wk = contMgr.createWebContinuation(unwrap(k),
                                              (parent == null ? null : 
parent.getWebContinuation()),
                                              timeToLive,
  
  
  
  1.23      +43 -42    
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.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- FOM_JavaScriptInterpreter.java    13 Feb 2004 00:24:31 -0000      1.22
  +++ FOM_JavaScriptInterpreter.java    20 Feb 2004 18:48:23 -0000      1.23
  @@ -59,22 +59,23 @@
   import java.io.Reader;
   import java.util.ArrayList;
   import java.util.HashMap;
  +import java.util.HashSet;
   import java.util.Iterator;
   import java.util.LinkedList;
   import java.util.List;
   import java.util.Map;
  -import java.util.HashSet;
   import java.util.Set;
   import java.util.StringTokenizer;
   
   import org.apache.avalon.framework.CascadingRuntimeException;
  -import org.apache.avalon.framework.component.ComponentManager;
   import org.apache.avalon.framework.activity.Initializable;
   import org.apache.avalon.framework.configuration.Configurable;
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
  +import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.cocoon.ProcessingException;
   import org.apache.cocoon.ResourceNotFoundException;
  +import org.apache.cocoon.components.ContextHelper;
   import org.apache.cocoon.components.flow.CompilingInterpreter;
   import org.apache.cocoon.components.flow.Interpreter;
   import org.apache.cocoon.components.flow.InvalidContinuationException;
  @@ -82,8 +83,8 @@
   import org.apache.cocoon.components.flow.javascript.JSErrorReporter;
   import org.apache.cocoon.components.flow.javascript.ScriptablePointerFactory;
   import 
org.apache.cocoon.components.flow.javascript.ScriptablePropertyHandler;
  -import org.apache.cocoon.environment.Environment;
   import org.apache.cocoon.environment.ObjectModelHelper;
  +import org.apache.cocoon.environment.Redirector;
   import org.apache.cocoon.environment.Request;
   import org.apache.cocoon.environment.Session;
   import org.apache.commons.jxpath.JXPathIntrospector;
  @@ -166,7 +167,7 @@
        * Needed to get things working with JDK 1.3. Can be removed once we
        * don't support that platform any more.
        */
  -    private ComponentManager getComponentManager() {
  +    protected ServiceManager getServiceManager() {
           return manager;
       }
   
  @@ -197,7 +198,7 @@
   
           public synchronized boolean upToDateCheck() throws Exception {
               SourceResolver sourceResolver = (SourceResolver)
  -                getComponentManager().lookup(SourceResolver.ROLE);
  +                getServiceManager().lookup(SourceResolver.ROLE);
               Iterator iter = javaSource.entrySet().iterator();
               List invalid = new LinkedList();
               while (iter.hasNext()) {
  @@ -377,18 +378,19 @@
        * @param environment an <code>Environment</code> value
        * @return a <code>Scriptable</code> value
        */
  -    private ThreadScope getSessionScope(Environment environment)
  -                    throws Exception {
  -        Map objectModel = environment.getObjectModel();
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  +    private ThreadScope getSessionScope() throws Exception {
  +        Request request = ContextHelper.getRequest(this.avalonContext);
           ThreadScope scope = null;
           Session session = request.getSession(false);
           if (session != null) {
               HashMap userScopes =
                       (HashMap)session.getAttribute(USER_GLOBAL_SCOPE);
               if (userScopes != null) {
  -                String uriPrefix = environment.getURIPrefix();
  -                scope = (ThreadScope)userScopes.get(uriPrefix);
  +                // Get the scope attached to the current context
  +                Source src = this.sourceresolver.resolveURI(".");
  +                String contextPrefix = src.getURI();
  +                this.sourceresolver.release(src);
  +                scope = (ThreadScope)userScopes.get(contextPrefix);
               }
           }
           if (scope == null) {
  @@ -397,10 +399,10 @@
           return scope;
       }
   
  -    void updateSession(Environment env, Scriptable scope) throws Exception {
  +    void updateSession(Scriptable scope) throws Exception {
           ThreadScope thrScope = (ThreadScope)scope;
           if (thrScope.useSession) {
  -            setSessionScope(env, scope);
  +            setSessionScope(scope);
           }
       }
   
  @@ -412,10 +414,9 @@
        * @param environment an <code>Environment</code> value
        * @param scope a <code>Scriptable</code> value
        */
  -    private Scriptable setSessionScope(Environment environment, Scriptable 
scope)
  +    private Scriptable setSessionScope(Scriptable scope)
           throws Exception {
  -        Map objectModel = environment.getObjectModel();
  -        Request request = ObjectModelHelper.getRequest(objectModel);
  +        Request request = ContextHelper.getRequest(this.avalonContext);
           Session session = request.getSession(true);
   
           HashMap userScopes = 
(HashMap)session.getAttribute(USER_GLOBAL_SCOPE);
  @@ -423,8 +424,11 @@
               userScopes = new HashMap();
               session.setAttribute(USER_GLOBAL_SCOPE, userScopes);
           }
  -        String uriPrefix = environment.getURIPrefix();
  -        userScopes.put(uriPrefix, scope);
  +        // Attach the scope to the current context
  +        Source src = this.sourceresolver.resolveURI(".");
  +        String contextPrefix = src.getURI();
  +        this.sourceresolver.release(src);
  +        userScopes.put(contextPrefix, scope);
           return scope;
       }
   
  @@ -541,7 +545,7 @@
        * @param environment an <code>Environment</code> value
        * @exception Exception if an error occurs
        */
  -    private void setupContext(Environment environment, Context context,
  +    private void setupContext(Redirector redirector, Context context,
                     ThreadScope thrScope, CompilingClassLoader classLoader)
                     throws Exception {
           // Try to retrieve the scope object from the session instance. If
  @@ -568,7 +572,7 @@
           // We need to setup the FOM_Cocoon object according to the current
           // request. Everything else remains the same.
           thrScope.setupPackages(getClassLoader(needsRefresh));
  -        cocoon.pushCallContext(this, environment, manager, serviceManager,
  +        cocoon.pushCallContext(this, redirector, manager,
                                  avalonContext, getLogger(), null);
   
           // Check if we need to compile and/or execute scripts
  @@ -626,8 +630,7 @@
        * @param fileName resource uri
        * @return compiled script
        */
  -    Script compileScript(Context cx, Environment environment,
  -                         String fileName) throws Exception {
  +    Script compileScript(Context cx, String fileName) throws Exception {
           Source src = this.sourceresolver.resolveURI(fileName);
           if (src != null) {
               synchronized (compiledScripts) {
  @@ -677,17 +680,17 @@
        * @exception Exception if an error occurs
        */
       public void callFunction(String funName, List params,
  -                             Environment environment) throws Exception {
  +                             Redirector redirector) throws Exception {
           Context context = Context.enter();
           context.setOptimizationLevel(OPTIMIZATION_LEVEL);
           context.setGeneratingDebug(true);
           context.setCompileFunctionsWithDynamicScope(true);
           context.setErrorReporter(errorReporter);
           FOM_Cocoon cocoon = null;
  -        ThreadScope thrScope = getSessionScope(environment);
  +        ThreadScope thrScope = getSessionScope();
           synchronized (thrScope) {
               try {
  -                setupContext(environment, context, thrScope, classLoader);
  +                setupContext(redirector, context, thrScope, classLoader);
                   cocoon = (FOM_Cocoon)thrScope.get("cocoon", thrScope);
   
                   // Register the current scope for scripts indirectly called 
from this function
  @@ -739,7 +742,7 @@
                   }
                   throw new CascadingRuntimeException(ee.getMessage(), ee);
               } finally {
  -                updateSession(environment, thrScope);
  +                updateSession(thrScope);
                   if (cocoon != null) {
                       cocoon.popCallContext();
                   }
  @@ -749,7 +752,7 @@
       }
   
       public void handleContinuation(String id, List params,
  -                                   Environment environment) throws Exception
  +                                   Redirector redirector) throws Exception
       {
           WebContinuation wk = continuationsMgr.lookupWebContinuation(id);
   
  @@ -773,8 +776,8 @@
           Scriptable kScope = k.getParentScope();
           synchronized (kScope) {
               FOM_Cocoon cocoon = (FOM_Cocoon)kScope.get("cocoon", kScope);
  -            cocoon.pushCallContext(this, environment, manager,
  -                                   serviceManager, avalonContext,
  +            cocoon.pushCallContext(this, redirector, manager,
  +                                   avalonContext,
                                      getLogger(), wk);
               // Register the current scope for scripts indirectly called from 
this function
               cocoon.getRequest().setAttribute(
  @@ -820,7 +823,7 @@
                   }
                   throw new CascadingRuntimeException(ee.getMessage(), ee);
               } finally {
  -                updateSession(environment, kScope);
  +                updateSession(kScope);
                   cocoon.popCallContext();
                   Context.exit();
               }
  @@ -840,25 +843,23 @@
   
       public void forwardTo(Scriptable scope, FOM_Cocoon cocoon, String uri,
               Object bizData, FOM_WebContinuation fom_wk,
  -            Environment environment) throws Exception {
  -        setupView(scope, cocoon, environment, fom_wk);
  +            Redirector redirector) throws Exception {
  +        setupView(scope, cocoon, fom_wk);
           super.forwardTo(uri, bizData,
                           fom_wk == null ? null :
                              fom_wk.getWebContinuation(),
  -                        environment);
  +                        redirector);
       }
   
       // package access as this is called by FOM_Cocoon
  -    boolean process(Scriptable scope, FOM_Cocoon cocoon, String uri,
  -            Object bizData, OutputStream out,
  -            Environment environment) throws Exception {
  -        setupView(scope, cocoon, environment, null);
  -        return super.process(uri, bizData, out, environment);
  +    void process(Scriptable scope, FOM_Cocoon cocoon, String uri,
  +            Object bizData, OutputStream out) throws Exception {
  +        setupView(scope, cocoon, null);
  +        super.process(uri, bizData, out);
       }
   
  -    private void setupView(Scriptable scope, FOM_Cocoon cocoon,
  -                   Environment environment, FOM_WebContinuation kont) {
  -        Map objectModel = environment.getObjectModel();
  +    private void setupView(Scriptable scope, FOM_Cocoon cocoon, 
FOM_WebContinuation kont) {
  +        Map objectModel = ContextHelper.getObjectModel(this.avalonContext);
           // Make the JS live-connect objects available to the view layer
           FOM_JavaScriptFlowHelper.setPackages(objectModel,
                  (Scriptable)ScriptableObject.getProperty(scope, "Packages"));
  
  
  
  1.6       +5 -4      
cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_WebContinuation.java
  
  Index: FOM_WebContinuation.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/flow/javascript/fom/FOM_WebContinuation.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- FOM_WebContinuation.java  28 Jan 2004 15:33:21 -0000      1.5
  +++ FOM_WebContinuation.java  20 Feb 2004 18:48:23 -0000      1.6
  @@ -54,6 +54,7 @@
   import java.util.List;
   
   import org.apache.avalon.framework.component.ComponentManager;
  +import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.cocoon.components.flow.ContinuationsManager;
   import org.apache.cocoon.components.flow.WebContinuation;
   import org.mozilla.javascript.Context;
  @@ -119,7 +120,7 @@
           WebContinuation wk;
           Scriptable scope = getTopLevelScope(c);
           FOM_Cocoon cocoon = (FOM_Cocoon)getProperty(scope, "cocoon");
  -        ComponentManager componentManager =  cocoon.getComponentManager();
  +        ServiceManager componentManager =  cocoon.getServiceManager();
           ContinuationsManager contMgr = (ContinuationsManager)
               componentManager.lookup(ContinuationsManager.ROLE);
           wk = contMgr.createWebContinuation(c,
  @@ -178,8 +179,8 @@
           FOM_Cocoon cocoon =
               (FOM_Cocoon)getProperty(getTopLevelScope(this),
                                       "cocoon");
  -        ComponentManager componentManager =
  -            cocoon.getComponentManager();
  +        ServiceManager componentManager =
  +            cocoon.getServiceManager();
           contMgr = (ContinuationsManager)
               componentManager.lookup(ContinuationsManager.ROLE);
           contMgr.invalidateWebContinuation(wk);
  
  
  
  1.8       +3 -3      
cocoon-2.1/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallFunctionNode.java
  
  Index: CallFunctionNode.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallFunctionNode.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- CallFunctionNode.java     15 Jan 2004 00:36:18 -0000      1.7
  +++ CallFunctionNode.java     20 Feb 2004 18:48:23 -0000      1.8
  @@ -147,7 +147,7 @@
           // If the continuation id is not null, it takes precedence over
           // the function call, so we invoke it here.
           if (continuation != null && continuation.length() > 0) {
  -            interpreter.handleContinuation(continuation, params, env);
  +            interpreter.handleContinuation(continuation, params, 
PipelinesNode.getRedirector(env));
               return true;
           }
   
  @@ -157,7 +157,7 @@
           String name = functionName.resolve(context, env.getObjectModel());
   
           if (name != null && name.length() > 0) {
  -            interpreter.callFunction(name, params, env);
  +            interpreter.callFunction(name, params, 
PipelinesNode.getRedirector(env));
               return true;
           }
           
  
  
  
  1.4       +2 -5      
cocoon-2.1/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ContinueNode.java
  
  Index: ContinueNode.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ContinueNode.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ContinueNode.java 24 Oct 2003 13:36:40 -0000      1.3
  +++ ContinueNode.java 20 Feb 2004 18:48:23 -0000      1.4
  @@ -140,11 +140,8 @@
           // Obtain the Interpreter instance for this language
           Interpreter interpreter = (Interpreter)selector.select(language);
   
  -        // Obtain the redirector
  -        // Redirector redirector = PipelinesNode.getRedirector(env);
  -
           try {
  -            interpreter.handleContinuation(contId, params, env /*, 
redirector*/);
  +            interpreter.handleContinuation(contId, params, 
PipelinesNode.getRedirector(env));
           } finally {
               selector.release((Component)interpreter);
           }
  
  
  

Reply via email to