You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by cz...@apache.org on 2006/02/20 12:48:29 UTC

svn commit: r379105 - in /cocoon/trunk: ./ cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/ cocoon-core/src/main/java/org/apache/cocoon/bean/ cocoon-core/src/main/java/org/apache/cocoon/components/source/ cocoon-core/src/m...

Author: cziegeler
Date: Mon Feb 20 03:48:20 2006
New Revision: 379105

URL: http://svn.apache.org/viewcvs?rev=379105&view=rev
Log:
Spring block is not needed anymore; make sub sitemaps work correctly

Removed:
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/ComponentLocatorWrapper.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/sitemap/ComponentLocator.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/sitemap/impl/ComponentManager.java
Modified:
    cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlocksContext.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/bean/CocoonBean.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/source/CocoonSourceResolver.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/DefaultTreeBuilder.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeBuilder.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/Core.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/CoreServiceManager.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonXmlWebApplicationContext.java
    cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/sitemap/Sitemap.java
    cocoon/trunk/pom.xml

Modified: cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlocksContext.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlocksContext.java?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlocksContext.java (original)
+++ cocoon/trunk/cocoon-blocks-fw/cocoon-blocks-fw-impl/src/main/java/org/apache/cocoon/blocks/BlocksContext.java Mon Feb 20 03:48:20 2006
@@ -121,7 +121,7 @@
             int index = this.mountPath.length();
             while (this.block == null && index != -1) {
                 this.mountPath = this.mountPath.substring(0, index);
-                this.block = (Block) BlocksContext.this.blocks.getMountedBlock(this.mountPath);
+                this.block = BlocksContext.this.blocks.getMountedBlock(this.mountPath);
                 index = this.mountPath.lastIndexOf('/');
             }
         }

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/bean/CocoonBean.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/bean/CocoonBean.java?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/bean/CocoonBean.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/bean/CocoonBean.java Mon Feb 20 03:48:20 2006
@@ -93,7 +93,7 @@
         if (this.initialized == false) {
             super.initialize();
 
-            this.sourceResolver = (SourceResolver)this.coreUtil.getCore().getCurrentSitemap().getComponentLocator().getComponent(SourceResolver.ROLE);
+            this.sourceResolver = (SourceResolver)this.coreUtil.getCore().getCurrentSitemap().getComponentLocator().lookup(SourceResolver.ROLE);
 
             initialized = true;
         }

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/source/CocoonSourceResolver.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/source/CocoonSourceResolver.java?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/source/CocoonSourceResolver.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/source/CocoonSourceResolver.java Mon Feb 20 03:48:20 2006
@@ -34,10 +34,8 @@
 import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.Processor;
 import org.apache.cocoon.core.Core;
-import org.apache.cocoon.core.container.ComponentLocatorWrapper;
 import org.apache.cocoon.environment.SourceResolver;
 import org.apache.cocoon.environment.internal.EnvironmentHelper;
-import org.apache.cocoon.sitemap.ComponentLocator;
 import org.apache.cocoon.sitemap.Sitemap;
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceException;
@@ -144,7 +142,7 @@
             }
         }
 
-        final ComponentLocator m = this.getComponentLocator();
+        final ServiceManager m = this.getComponentLocator();
 
         Source source = null;
         // search for a SourceFactory implementing the protocol
@@ -218,14 +216,14 @@
     /**
      * Get the component locator.
      */
-    protected ComponentLocator getComponentLocator() {
-        ComponentLocator l = null;
+    protected ServiceManager getComponentLocator() {
+        ServiceManager l = null;
         final Sitemap sitemap = this.core.getCurrentSitemap();
         if ( sitemap != null ) {
             l = sitemap.getComponentLocator();
         }
         if ( l == null ) {
-            l = new ComponentLocatorWrapper(this.manager);
+            l = this.manager;
         }
         return l;
     }
@@ -233,9 +231,13 @@
     /**
      * Get the SourceFactory
      */
-    protected SourceFactory getSourceFactory(ComponentLocator m, String scheme) 
+    protected SourceFactory getSourceFactory(ServiceManager m, String scheme) 
     throws ProcessingException {
-        return (SourceFactory)m.getComponent(SourceFactory.ROLE + '/' + scheme);
+        try {
+            return (SourceFactory)m.lookup(SourceFactory.ROLE + '/' + scheme);
+        } catch (ServiceException se) {
+            throw new ProcessingException("Unable to lookup source factory for scheme: " + scheme, se);
+        }
     }
 
     /**
@@ -247,7 +249,7 @@
         if ( this.customResolver != null ) {
             this.customResolver.release( source );
         } else {
-            final ComponentLocator m = this.getComponentLocator();
+            final ServiceManager m = this.getComponentLocator();
             
             // search for a SourceFactory implementing the protocol
             final String scheme = source.getScheme();

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/ConcreteTreeProcessor.java Mon Feb 20 03:48:20 2006
@@ -37,14 +37,12 @@
 import org.apache.cocoon.environment.internal.EnvironmentHelper;
 import org.apache.cocoon.environment.internal.ForwardEnvironmentWrapper;
 import org.apache.cocoon.environment.wrapper.MutableEnvironmentFacade;
-import org.apache.cocoon.sitemap.ComponentLocator;
 import org.apache.cocoon.sitemap.EnterSitemapEvent;
 import org.apache.cocoon.sitemap.EnterSitemapEventListener;
 import org.apache.cocoon.sitemap.ExecutionContext;
 import org.apache.cocoon.sitemap.LeaveSitemapEvent;
 import org.apache.cocoon.sitemap.LeaveSitemapEventListener;
 import org.apache.cocoon.sitemap.SitemapExecutor;
-import org.apache.cocoon.sitemap.SitemapListener;
 import org.apache.cocoon.util.location.Location;
 import org.apache.cocoon.util.location.LocationImpl;
 import org.apache.commons.jci.listeners.NotificationListener;
@@ -81,9 +79,6 @@
     /** The sitemap executor */
     private SitemapExecutor sitemapExecutor;
 
-    /** Optional application container */
-    private ComponentLocator applicationContainer;
-
     /** Optional event listeners for the enter sitemap event */
     private List enterSitemapEventListeners = new ArrayList();
 
@@ -131,7 +126,6 @@
                                  ClassLoader classloader, 
                                  ProcessingNode rootNode, 
                                  List disposableNodes,
-                                 ComponentLocator componentLocator,
                                  List enterSitemapEventListeners,
                                  List leaveSitemapEventListeners) {
         if (this.rootNode != null) {
@@ -144,7 +138,6 @@
         this.disposableNodes = disposableNodes;
         this.enterSitemapEventListeners = enterSitemapEventListeners;
         this.leaveSitemapEventListeners = leaveSitemapEventListeners;
-        this.applicationContainer = componentLocator;
     }
 
     /** Set the sitemap component configurations (called as part of the tree building process) */
@@ -395,12 +388,6 @@
         // dispose listeners
         this.disposeListeners(this.enterSitemapEventListeners);
         this.disposeListeners(this.leaveSitemapEventListeners);
-
-        // dispose component locator - if it is a SitemapListener it is already disposed!
-        if ( !(this.applicationContainer instanceof SitemapListener) ) {
-            ContainerUtil.dispose(this.applicationContainer);
-        }
-        this.applicationContainer = null;
     }
 
     protected void disposeListeners(List l) {

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/DefaultTreeBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/DefaultTreeBuilder.java?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/DefaultTreeBuilder.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/DefaultTreeBuilder.java Mon Feb 20 03:48:20 2006
@@ -42,7 +42,6 @@
 import org.apache.cocoon.components.source.SourceUtil;
 import org.apache.cocoon.components.treeprocessor.variables.VariableResolverFactory;
 import org.apache.cocoon.components.treeprocessor.variables.VariableResolver;
-import org.apache.cocoon.sitemap.ComponentLocator;
 import org.apache.cocoon.sitemap.PatternException;
 import org.apache.cocoon.sitemap.SitemapParameters;
 import org.apache.cocoon.util.location.Location;
@@ -121,9 +120,6 @@
      */
     protected ProcessorComponentInfo itsComponentInfo;
 
-    /** Optional application container */
-    protected ComponentLocator applicationContainer;
-
     /** Optional event listeners for the enter sitemap event */
     protected List enterSitemapEventListeners = new ArrayList();
 
@@ -261,14 +257,6 @@
     }
 
     /**
-     * @see org.apache.cocoon.components.treeprocessor.TreeBuilder#getComponentLocator()
-     */
-    public ComponentLocator getComponentLocator() {
-        // Useless method as it's redefined in SitemapLanguage
-        return this.applicationContainer;
-    }
-
-    /**
      * @see org.apache.cocoon.components.treeprocessor.TreeBuilder#getEnterSitemapEventListeners()
      */
     public List getEnterSitemapEventListeners() {
@@ -644,7 +632,6 @@
         this.registeredNodes.clear();
 
         VariableResolverFactory.setDisposableCollector(null);
-        this.applicationContainer = null;
         this.enterSitemapEventListeners.clear();
         this.leaveSitemapEventListeners.clear();
     }

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeBuilder.java?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeBuilder.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeBuilder.java Mon Feb 20 03:48:20 2006
@@ -20,7 +20,6 @@
 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.sitemap.ComponentLocator;
 
 /**
  *
@@ -116,11 +115,6 @@
      * Get the value of an attribute.
      */
     Object getAttribute(String name);
-
-    /**
-     * Return the sitemap component locator - if available.
-     */
-    ComponentLocator getComponentLocator();
 
     /**
      * Return all event listers that are registered for the

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/TreeProcessor.java Mon Feb 20 03:48:20 2006
@@ -727,7 +727,6 @@
                         treeBuilder.getBuiltProcessorClassLoader(),
                         root,
                         treeBuilder.getDisposableNodes(),
-                        treeBuilder.getComponentLocator(),
                         treeBuilder.getEnterSitemapEventListeners(),
                         treeBuilder.getLeaveSitemapEventListeners());
                 

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/components/treeprocessor/sitemap/SitemapLanguage.java Mon Feb 20 03:48:20 2006
@@ -50,12 +50,10 @@
 import org.apache.cocoon.generation.Generator;
 import org.apache.cocoon.serialization.Serializer;
 import org.apache.cocoon.servlet.CocoonServlet;
-import org.apache.cocoon.sitemap.ComponentLocator;
 import org.apache.cocoon.sitemap.EnterSitemapEventListener;
 import org.apache.cocoon.sitemap.LeaveSitemapEventListener;
 import org.apache.cocoon.sitemap.PatternException;
 import org.apache.cocoon.sitemap.SitemapListener;
-import org.apache.cocoon.sitemap.impl.ComponentManager;
 import org.apache.cocoon.util.ClassUtils;
 import org.apache.cocoon.util.StringUtils;
 import org.apache.regexp.RE;
@@ -124,38 +122,25 @@
         c.removeChild(config.getChild("listeners"));
 
         // setup spring container
+        // first, get the correct parent
+        CocoonXmlWebApplicationContext parentContext = this.applicationContext.getCurrentApplicationContext();
+        
         final AvalonEnvironment ae = new AvalonEnvironment();
         ae.context = context;
         ae.core = (Core)applicationContext.getBean(Core.ROLE);
         ae.logger = this.getLogger();
         ae.servletContext = ((ServletConfig)context.get(CocoonServlet.CONTEXT_SERVLET_CONFIG)).getServletContext();
         ae.settings = ae.core.getSettings();
-        final ConfigurationInfo ci = ConfigReader.readConfiguration(c, this.applicationContext.getConfigurationInfo(), ae);
+        final ConfigurationInfo ci = ConfigReader.readConfiguration(c, parentContext.getConfigurationInfo(), ae);
 
         final CocoonXmlWebApplicationContext sitemapContext = 
-            ApplicationContextFactory.createApplicationContext(ae, ci, this.applicationContext, false);
+            ApplicationContextFactory.createApplicationContext(ae, ci, parentContext, false);
         newManager = (ServiceManager) sitemapContext.getBean(ServiceManager.class.getName());
         Logger sitemapLogger = sitemapLogger = (Logger)sitemapContext.getBean(Logger.class.getName());
 
-        // check for an application specific container
-        final Configuration appContainer = config.getChild("application-container", false);
-        if ( appContainer != null ) {
-            final String clazzName = appContainer.getAttribute("class");
-
-            final ComponentLocator cl = (ComponentLocator)ClassUtils.newInstance(clazzName); 
-            // Go through the component lifecycle
-            LifecycleHelper.setupComponent(cl, sitemapLogger, context, newManager, appContainer);
-
-            this.applicationContainer = cl;
-
-            newManager = new ComponentManager(newManager, cl);
-        }
-
+        this.addListener(new TreeBuilder.EventComponent(sitemapContext, false));
+        
         // and finally the listeners
-        if ( this.applicationContainer instanceof SitemapListener ) {
-            this.addListener(new TreeBuilder.EventComponent(this.applicationContainer, false));
-        }
-
         final Configuration listenersWrapper = config.getChild("listeners", false);
         if ( listenersWrapper != null ) {
             final Configuration[] listeners = listenersWrapper.getChildren("listener");                

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/Core.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/Core.java?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/Core.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/Core.java Mon Feb 20 03:48:20 2006
@@ -29,9 +29,7 @@
 import org.apache.cocoon.Processor;
 import org.apache.cocoon.components.ContextHelper;
 import org.apache.cocoon.components.flow.Interpreter;
-import org.apache.cocoon.core.container.ComponentLocatorWrapper;
 import org.apache.cocoon.environment.internal.EnvironmentHelper;
-import org.apache.cocoon.sitemap.ComponentLocator;
 import org.apache.cocoon.sitemap.Sitemap;
 import org.apache.commons.lang.NotImplementedException;
 
@@ -204,17 +202,8 @@
         /**
          * @see org.apache.cocoon.sitemap.Sitemap#getComponentLocator()
          */
-        public ComponentLocator getComponentLocator() {
-            final ServiceManager m = EnvironmentHelper.getSitemapServiceManager();
-            ComponentLocator l = null;
-            if ( m != null ) {
-                if ( !(m instanceof ComponentLocator) ) {
-                    l = new ComponentLocatorWrapper(m);
-                } else {
-                    l = (ComponentLocator)m;
-                }
-            }
-            return l;
+        public ServiceManager getComponentLocator() {
+            return EnvironmentHelper.getSitemapServiceManager();
         }
 
         /**

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/CoreServiceManager.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/CoreServiceManager.java?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/CoreServiceManager.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/CoreServiceManager.java Mon Feb 20 03:48:20 2006
@@ -55,7 +55,6 @@
 import org.apache.cocoon.core.container.handler.LazyHandler;
 import org.apache.cocoon.core.source.SimpleSourceResolver;
 import org.apache.cocoon.matching.helpers.WildcardHelper;
-import org.apache.cocoon.sitemap.impl.ComponentManager;
 import org.apache.cocoon.util.JMXUtils;
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceResolver;
@@ -142,9 +141,6 @@
         RoleManager parentRoleManager = null;
         // FIXME - We should change this to a cleaner way!
         ServiceManager coreServicemanager = parent;
-        if ( parent instanceof ComponentManager ) {
-            coreServicemanager = ((ComponentManager)parent).getServiceManager();
-        }
         // get role manager
         if ( coreServicemanager instanceof RoleManagerOwner ) {
             parentRoleManager = ((RoleManagerOwner)coreServicemanager).getRoleManager();

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonXmlWebApplicationContext.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonXmlWebApplicationContext.java?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonXmlWebApplicationContext.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/core/container/spring/CocoonXmlWebApplicationContext.java Mon Feb 20 03:48:20 2006
@@ -18,6 +18,7 @@
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.util.Map;
+import java.util.Stack;
 
 import org.apache.avalon.framework.CascadingRuntimeException;
 import org.apache.avalon.framework.configuration.Configurable;
@@ -29,9 +30,14 @@
 import org.apache.avalon.framework.parameters.Parameterizable;
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.components.ContextHelper;
+import org.apache.cocoon.environment.ObjectModelHelper;
+import org.apache.cocoon.environment.Request;
 import org.apache.cocoon.environment.internal.EnvironmentHelper;
-import org.apache.cocoon.sitemap.ComponentLocator;
+import org.apache.cocoon.sitemap.EnterSitemapEvent;
+import org.apache.cocoon.sitemap.EnterSitemapEventListener;
+import org.apache.cocoon.sitemap.LeaveSitemapEvent;
+import org.apache.cocoon.sitemap.LeaveSitemapEventListener;
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceResolver;
 import org.springframework.beans.BeansException;
@@ -54,9 +60,10 @@
  */
 public class CocoonXmlWebApplicationContext
     extends XmlWebApplicationContext
-    implements ComponentLocator {
+    implements EnterSitemapEventListener, LeaveSitemapEventListener {
 
     public static final String DEFAULT_SPRING_CONFIG = "conf/applicationContext.xml";
+    public static final String APPLICATION_CONTEXT_REQUEST_ATTRIBUTE = "application-context";
 
     final private Resource avalonResource;
     protected SourceResolver resolver;
@@ -168,24 +175,48 @@
     }
 
     /**
-     * @see org.apache.cocoon.sitemap.ComponentLocator#getComponent(java.lang.String)
+     * @see org.apache.cocoon.sitemap.EnterSitemapEventListener#enteredSitemap(org.apache.cocoon.sitemap.EnterSitemapEvent)
      */
-    public Object getComponent(String key) throws ProcessingException {
-        return this.getBean(key);
+    public void enteredSitemap(EnterSitemapEvent event) {
+        final Request request = ObjectModelHelper.getRequest(event.getEnvironment().getObjectModel());
+        final Object oldContext = request.getAttribute(APPLICATION_CONTEXT_REQUEST_ATTRIBUTE, Request.REQUEST_SCOPE);
+        if ( oldContext != null ) {
+            Stack stack = (Stack)request.getAttribute("ac-stack", Request.REQUEST_SCOPE);
+            if ( stack == null ) {
+                stack = new Stack();
+                request.setAttribute("ac-stack", stack, Request.REQUEST_SCOPE);
+            }
+            stack.push(oldContext);
+        }
+        request.setAttribute(APPLICATION_CONTEXT_REQUEST_ATTRIBUTE, this, Request.REQUEST_SCOPE);
     }
 
     /**
-     * @see org.apache.cocoon.sitemap.ComponentLocator#hasComponent(java.lang.String)
+     * @see org.apache.cocoon.sitemap.LeaveSitemapEventListener#leftSitemap(org.apache.cocoon.sitemap.LeaveSitemapEvent)
      */
-    public boolean hasComponent(String key) {
-        return this.containsBean(key);
+    public void leftSitemap(LeaveSitemapEvent event) {
+        final Request request = ObjectModelHelper.getRequest(event.getEnvironment().getObjectModel());
+        final Stack stack = (Stack)request.getAttribute("ac-stack", Request.REQUEST_SCOPE);
+        if ( stack == null ) {
+            request.removeAttribute(APPLICATION_CONTEXT_REQUEST_ATTRIBUTE, Request.REQUEST_SCOPE);
+        } else {
+            final Object oldContext = stack.pop();
+            request.setAttribute(APPLICATION_CONTEXT_REQUEST_ATTRIBUTE, oldContext, Request.REQUEST_SCOPE);
+            if ( stack.size() == 0 ) {
+                request.removeAttribute("ac-stack", Request.REQUEST_SCOPE);
+            }
+        }
     }
 
-    /**
-     * @see org.apache.cocoon.sitemap.ComponentLocator#release(java.lang.Object)
-     */
-    public void release(Object component) {
-        // nothing to do
+    public CocoonXmlWebApplicationContext getCurrentApplicationContext() {
+        final Request request = ContextHelper.getRequest(this.avalonContext);
+        if ( this.avalonContext == null ) {
+            return this;
+        }
+        if ( request.getAttribute(APPLICATION_CONTEXT_REQUEST_ATTRIBUTE) != null ) {
+            return (CocoonXmlWebApplicationContext)request.getAttribute(APPLICATION_CONTEXT_REQUEST_ATTRIBUTE);
+        }
+        return this;
     }
 
     /**

Modified: cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/sitemap/Sitemap.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/sitemap/Sitemap.java?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/sitemap/Sitemap.java (original)
+++ cocoon/trunk/cocoon-core/src/main/java/org/apache/cocoon/sitemap/Sitemap.java Mon Feb 20 03:48:20 2006
@@ -15,12 +15,13 @@
  */
 package org.apache.cocoon.sitemap;
 
+import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.cocoon.Processor;
 import org.apache.cocoon.components.flow.Interpreter;
 
 /**
  * TODO WORK IN PROGRESS!!
- *
+ * FIXME - we should not use the service manager
  * This interface describes the current sitemap. The current sitemap is available using
  * {@link org.apache.cocoon.core.Core#getCurrentSitemap()}.
  *
@@ -33,7 +34,7 @@
      * Return the locator of the current sitemap.
      * @return The current locator.
      */
-    ComponentLocator getComponentLocator();
+    ServiceManager getComponentLocator();
 
     /**
      * Return the current processor

Modified: cocoon/trunk/pom.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/pom.xml?rev=379105&r1=379104&r2=379105&view=diff
==============================================================================
--- cocoon/trunk/pom.xml (original)
+++ cocoon/trunk/pom.xml Mon Feb 20 03:48:20 2006
@@ -52,7 +52,6 @@
     <module>cocoon-portal</module>
     <module>cocoon-session-fw</module>
     <module>cocoon-sitemap</module>
-    <module>cocoon-spring</module>
     <module>cocoon-template</module>
     <module>cocoon-validation</module>
     <!--module>cocoon-xmldb</module-->