cziegeler 2003/03/03 10:39:37
Modified: src/java/org/apache/cocoon Cocoon.java src/java/org/apache/cocoon/environment/wrapper EnvironmentWrapper.java src/java/org/apache/cocoon/components/flow AbstractInterpreter.java src/java/org/apache/cocoon/components CocoonComponentManager.java src/java/org/apache/cocoon/components/source/impl SitemapSource.java src/java/org/apache/cocoon/environment AbstractEnvironment.java Environment.java src/java/org/apache/cocoon/components/treeprocessor/sitemap CallFunctionNode.java ContinueNode.java src/java/org/apache/cocoon/components/treeprocessor TreeProcessor.java src/deprecated/java/org/apache/cocoon/components/source SitemapSource.java src/java/org/apache/cocoon/components/flow/javascript JSCocoon.java Log: Refactoring internal component manager handling. This removes most hacks and cleans-up the environment interface. The remaining part is to remove the setComponents() method. This change might break sub-sitemap handling and the cocoon protocol; so please be patient if you experience any problems (this is real alpha stuff :) ) Revision Changes Path 1.53 +2 -2 xml-cocoon2/src/java/org/apache/cocoon/Cocoon.java Index: Cocoon.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/Cocoon.java,v retrieving revision 1.52 retrieving revision 1.53 diff -u -r1.52 -r1.53 --- Cocoon.java 28 Feb 2003 00:22:49 -0000 1.52 +++ Cocoon.java 3 Mar 2003 18:39:35 -0000 1.53 @@ -588,7 +588,7 @@ Object key = CocoonComponentManager.startProcessing(environment); try { CocoonComponentManager.enterEnvironment(environment, - environment.getObjectModel(), + this.componentManager, this); boolean result; if (this.getLogger().isDebugEnabled()) { 1.28 +13 -21 xml-cocoon2/src/java/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java Index: EnvironmentWrapper.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/environment/wrapper/EnvironmentWrapper.java,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- EnvironmentWrapper.java 6 Feb 2003 15:13:22 -0000 1.27 +++ EnvironmentWrapper.java 3 Mar 2003 18:39:35 -0000 1.28 @@ -149,7 +149,6 @@ this.setComponents(env.getSourceResolver(), env.getXMLizer()); this.enableLogging(logger); this.environment = env; - this.manager = manager; this.context = env.getContext(); this.prefix = new StringBuffer(env.getURIPrefix()); @@ -202,18 +201,6 @@ } /** - * The treeprocessor sets up new managers per sitemap. Set the - * "current" one for this environment. - */ - public void setComponentManager(ComponentManager manager) { - super.setComponentManager( manager ); - // HACK: As processing enters sitemap, capture current processor. - // If pipeline is successfully assembled, this will contain proper processor. - // Used by cocoon protocol. - this.processor = CocoonComponentManager.getCurrentProcessor(); - } - - /** * Get the output stream */ public OutputStream getOutputStream() @@ -223,13 +210,12 @@ : this.outputStream; } - public OutputStream getOutputStream(int bufferSize) - throws IOException - { - return this.outputStream == null - ? this.environment.getOutputStream() - : this.outputStream; - } + public OutputStream getOutputStream(int bufferSize) + throws IOException { + return this.outputStream == null + ? this.environment.getOutputStream() + : this.outputStream; + } /** * Set the output stream for this environment. It hides the one of the @@ -337,6 +323,12 @@ public void changeContext(String prefix, String context) throws MalformedURLException { + // HACK: As processing enters sitemap, capture current processor. + // If pipeline is successfully assembled, this will contain proper processor. + // Used by cocoon protocol. + // FIXME (CZ) : Is this the right place? This was before + // in the setComponentManager method! + this.processor = CocoonComponentManager.getCurrentProcessor(); super.changeContext(prefix, context); this.lastContext = this.context; this.lastPrefix = this.prefix.toString(); 1.13 +1 -1 xml-cocoon2/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java Index: AbstractInterpreter.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/flow/AbstractInterpreter.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- AbstractInterpreter.java 26 Feb 2003 17:15:40 -0000 1.12 +++ AbstractInterpreter.java 3 Mar 2003 18:39:35 -0000 1.13 @@ -194,7 +194,7 @@ processor = (Processor)this.manager.lookup(Processor.ROLE); // Enter the environment - CocoonComponentManager.enterEnvironment(wrapper, wrapper.getObjectModel(), processor); + CocoonComponentManager.enterEnvironment(wrapper, this.manager, processor); // Process the subrequest result = processor.process(wrapper); 1.48 +26 -18 xml-cocoon2/src/java/org/apache/cocoon/components/CocoonComponentManager.java Index: CocoonComponentManager.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/CocoonComponentManager.java,v retrieving revision 1.47 retrieving revision 1.48 diff -u -r1.47 -r1.48 --- CocoonComponentManager.java 3 Mar 2003 18:08:53 -0000 1.47 +++ CocoonComponentManager.java 3 Mar 2003 18:39:36 -0000 1.48 @@ -105,41 +105,45 @@ /** The [EMAIL PROTECTED] RoleManager} */ private RoleManager roleManager; + /** The root component manager */ + private static ComponentManager rootManager; + /** Create the ComponentManager */ - public CocoonComponentManager() - { + public CocoonComponentManager(){ super( null, Thread.currentThread().getContextClassLoader() ); + if ( null == rootManager ) rootManager = this; } /** Create the ComponentManager with a Classloader */ - public CocoonComponentManager( final ClassLoader loader ) - { + public CocoonComponentManager( final ClassLoader loader ) { super( null, loader ); + if ( null == rootManager ) rootManager = this; } /** Create the ComponentManager with a Classloader and parent ComponentManager */ - public CocoonComponentManager( final ComponentManager manager, final ClassLoader loader ) - { + public CocoonComponentManager( final ComponentManager manager, final ClassLoader loader ) { super(manager, loader); + if ( null == rootManager ) rootManager = this; } /** Create the ComponentManager with a parent ComponentManager */ - public CocoonComponentManager(final ComponentManager manager) - { + public CocoonComponentManager(final ComponentManager manager) { super(manager); + if ( null == rootManager ) rootManager = this; } /** * This hook must be called by the sitemap each time a sitemap is entered */ - public static void enterEnvironment(Environment env, - Map objectModel, - Processor processor) { + public static void enterEnvironment(Environment env, + ComponentManager manager, + Processor processor) { + final Map objectModel = env.getObjectModel(); if (environmentStack.get() == null) { environmentStack.set(new EnvironmentStack()); } final EnvironmentStack stack = (EnvironmentStack)environmentStack.get(); - stack.push(new Object[] {env, processor}); + stack.push(new Object[] {env, processor, manager}); EnvironmentDescription desc = (EnvironmentDescription)objectModel.get(PROCESS_KEY); if ( null != desc ) { @@ -223,11 +227,15 @@ * FIXME: Do we really want to expose this? */ static public ComponentManager getSitemapComponentManager() { - Environment env = getCurrentEnvironment(); - if ( null != env ) { - return env.getComponentManager(); - } - return null; + final EnvironmentStack stack = (EnvironmentStack)environmentStack.get(); + + if ( null != stack && !stack.empty()) { + Object[] o = (Object[])stack.peek(); + return (ComponentManager)o[2]; + } + + // if we don't have an environment yet, just return the root manager + return rootManager; } /** 1.39 +4 -4 xml-cocoon2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java Index: SitemapSource.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- SitemapSource.java 31 Jan 2003 22:51:34 -0000 1.38 +++ SitemapSource.java 3 Mar 2003 18:39:36 -0000 1.39 @@ -267,7 +267,7 @@ this.environment.setOutputStream(os); try { CocoonComponentManager.enterEnvironment(this.environment, - this.environment.getObjectModel(), + this.manager, this.pipelineProcessor); this.processingPipeline.process(this.environment); } finally { @@ -352,7 +352,7 @@ int currentOffset = envStack.getOffset(); try { CocoonComponentManager.enterEnvironment(this.environment, - this.environment.getObjectModel(), + this.manager, this.pipelineProcessor); this.processingPipeline.prepareInternal(this.environment); this.sourceValidity = this.processingPipeline.getValidityForEventPipeline(); @@ -408,7 +408,7 @@ int currentOffset = envStack.getOffset(); try { CocoonComponentManager.enterEnvironment(this.environment, - this.environment.getObjectModel(), + this.manager, this.pipelineProcessor); this.processingPipeline.process(this.environment, new EnvironmentChanger(consumer, envStack)); } finally { 1.44 +1 -21 xml-cocoon2/src/java/org/apache/cocoon/environment/AbstractEnvironment.java Index: AbstractEnvironment.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/environment/AbstractEnvironment.java,v retrieving revision 1.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- AbstractEnvironment.java 3 Mar 2003 18:08:54 -0000 1.43 +++ AbstractEnvironment.java 3 Mar 2003 18:39:36 -0000 1.44 @@ -52,7 +52,6 @@ import org.apache.commons.collections.IteratorEnumeration; -import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.cocoon.ProcessingException; @@ -114,30 +113,11 @@ /** The attributes */ private Map attributes = new HashMap(); - /** The current manager */ - protected ComponentManager manager; - /** The secure Output Stream */ protected BufferedOutputStream secureOutputStream; /** The real output stream */ protected OutputStream outputStream; - - /** - * The sitemap processor sets up new managers per sitemap. Get the - * "current" one for this environment. - */ - public ComponentManager getComponentManager(){ - return this.manager; - } - - /** - * The sitemap processor sets up new managers per sitemap. Set the - * "current" one for this environment. - */ - public void setComponentManager(ComponentManager manager){ - this.manager = manager; - } /** * Constructs the abstract environment 1.20 +3 -16 xml-cocoon2/src/java/org/apache/cocoon/environment/Environment.java Index: Environment.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/environment/Environment.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- Environment.java 26 Feb 2003 13:28:19 -0000 1.19 +++ Environment.java 3 Mar 2003 18:39:36 -0000 1.20 @@ -50,14 +50,14 @@ */ package org.apache.cocoon.environment; -import org.apache.avalon.framework.component.ComponentManager; -import org.apache.excalibur.xmlizer.XMLizer; import java.io.IOException; import java.io.OutputStream; import java.net.URL; import java.util.Enumeration; import java.util.Map; +import org.apache.excalibur.xmlizer.XMLizer; + /** * Base interface for an environment abstraction * @@ -70,12 +70,6 @@ extends SourceResolver { /** - * Get the <code>ComponentManager</code> for the current request. - * This is an internal method, use it at your own risk! - */ - ComponentManager getComponentManager(); - - /** * Set the <code>SourceResolver</code> and the <code>XMLizer</code> * This is an internal method, use it at your own risk! */ @@ -189,13 +183,6 @@ * environment is not able to test it */ boolean isResponseModified(long lastModified); - - /** - * Set the <code>ComponentManager</code> for the current request. - * This is an internal method, use it at your own risk! - */ - void setComponentManager(ComponentManager manager); - /** * Mark the response as not modified. 1.10 +0 -2 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallFunctionNode.java Index: CallFunctionNode.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/CallFunctionNode.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- CallFunctionNode.java 31 Jan 2003 22:51:37 -0000 1.9 +++ CallFunctionNode.java 3 Mar 2003 18:39:36 -0000 1.10 @@ -158,8 +158,6 @@ { List params = null; - env.setComponentManager(manager); - // Resolve parameters if (parameters != null) params = resolveList(parameters, manager, context, 1.10 +0 -1 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ContinueNode.java Index: ContinueNode.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/sitemap/ContinueNode.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- ContinueNode.java 31 Jan 2003 22:51:37 -0000 1.9 +++ ContinueNode.java 3 Mar 2003 18:39:36 -0000 1.10 @@ -141,7 +141,6 @@ // Obtain the redirector // Redirector redirector = PipelinesNode.getRedirector(env); - env.setComponentManager(this.manager); try { interpreter.handleContinuation(contId, params, env /*, redirector*/); } finally { 1.27 +3 -4 xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java Index: TreeProcessor.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- TreeProcessor.java 3 Mar 2003 18:08:54 -0000 1.26 +++ TreeProcessor.java 3 Mar 2003 18:39:36 -0000 1.27 @@ -312,7 +312,7 @@ } // and now process - CocoonComponentManager.enterEnvironment(environment, environment.getObjectModel(), this); + CocoonComponentManager.enterEnvironment(environment, this.manager, this); try { return this.rootNode.invoke(environment, context); } finally { @@ -331,8 +331,7 @@ context.enableLogging(getLogger()); - CocoonComponentManager.enterEnvironment(environment, environment.getObjectModel(), this); - environment.setComponentManager(this.manager); + CocoonComponentManager.enterEnvironment(environment, this.manager, this); try { if ( process(environment, context) ) { return context.getProcessingPipeline(); 1.4 +3 -3 xml-cocoon2/src/deprecated/java/org/apache/cocoon/components/source/SitemapSource.java Index: SitemapSource.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/deprecated/java/org/apache/cocoon/components/source/SitemapSource.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- SitemapSource.java 26 Feb 2003 15:02:34 -0000 1.3 +++ SitemapSource.java 3 Mar 2003 18:39:37 -0000 1.4 @@ -242,7 +242,7 @@ this.environment.setOutputStream(os); try { CocoonComponentManager.enterEnvironment(this.environment, - this.environment.getObjectModel(), + this.manager, this.pipelineProcessor); this.processingPipeline.process(this.environment); } finally { @@ -338,7 +338,7 @@ Object fragment; try { CocoonComponentManager.enterEnvironment(this.environment, - this.environment.getObjectModel(), + this.manager, this.pipelineProcessor); this.processingPipeline.process(this.environment, xmls); fragment = xmls.getSAXFragment(); 1.18 +6 -5 xml-cocoon2/src/java/org/apache/cocoon/components/flow/javascript/JSCocoon.java Index: JSCocoon.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/flow/javascript/JSCocoon.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- JSCocoon.java 26 Feb 2003 17:15:41 -0000 1.17 +++ JSCocoon.java 3 Mar 2003 18:39:37 -0000 1.18 @@ -66,6 +66,7 @@ import org.apache.cocoon.environment.Context; import org.apache.cocoon.components.modules.output.OutputModule; import org.apache.cocoon.components.modules.input.InputModule; +import org.apache.cocoon.components.CocoonComponentManager; import org.apache.cocoon.components.flow.ContinuationsManagerImpl; import org.apache.cocoon.components.flow.ContinuationsManager; import org.apache.cocoon.components.flow.WebContinuation; @@ -331,7 +332,7 @@ Redirector redirector = new SitemapRedirector(this.environment); SourceResolver resolver = (SourceResolver)this.environment.getObjectModel() .get(OBJECT_SOURCE_RESOLVER); - ComponentManager sitemapManager = this.environment.getComponentManager(); + ComponentManager sitemapManager = CocoonComponentManager.getSitemapComponentManager(); ComponentSelector actionSelector = (ComponentSelector)sitemapManager.lookup(Action.ROLE + "Selector"); Action action = (Action)actionSelector.select(type); @@ -373,7 +374,7 @@ { // since no new components can be declared on sitemap we could // very well use the 'other' one here. Anyway, since it's there... - ComponentManager sitemapManager = this.environment.getComponentManager(); + ComponentManager sitemapManager = CocoonComponentManager.getSitemapComponentManager(); ComponentSelector inputSelector = (ComponentSelector)sitemapManager .lookup(InputModule.ROLE + "Selector"); InputModule input = (InputModule) inputSelector.select(type); @@ -394,7 +395,7 @@ { // since no new components can be declared on sitemap we could // very well use the 'other' one here. Anyway, since it's there... - ComponentManager sitemapManager = this.environment.getComponentManager(); + ComponentManager sitemapManager = CocoonComponentManager.getSitemapComponentManager(); ComponentSelector outputSelector = (ComponentSelector)sitemapManager .lookup(OutputModule.ROLE + "Selector"); OutputModule output = (OutputModule) outputSelector.select(type); @@ -412,7 +413,7 @@ { // since no new components can be declared on sitemap we could // very well use the 'other' one here. Anyway, since it's there... - ComponentManager sitemapManager = this.environment.getComponentManager(); + ComponentManager sitemapManager = CocoonComponentManager.getSitemapComponentManager(); ComponentSelector outputSelector = (ComponentSelector)sitemapManager .lookup(OutputModule.ROLE + "Selector"); OutputModule output = (OutputModule) outputSelector.select(type); @@ -429,7 +430,7 @@ { // since no new components can be declared on sitemap we could // very well use the 'other' one here. Anyway, since it's there... - ComponentManager sitemapManager = this.environment.getComponentManager(); + ComponentManager sitemapManager = CocoonComponentManager.getSitemapComponentManager(); ComponentSelector outputSelector = (ComponentSelector)sitemapManager .lookup(OutputModule.ROLE + "Selector"); OutputModule output = (OutputModule) outputSelector.select(type);