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