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

Reply via email to