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 2007/03/07 16:59:02 UTC

svn commit: r515620 - in /cocoon/trunk/blocks/cocoon-portal: cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ cocoon-portal-impl/src/main/java/org/apache/cocoon/p...

Author: cziegeler
Date: Wed Mar  7 07:59:00 2007
New Revision: 515620

URL: http://svn.apache.org/viewvc?view=rev&rev=515620
Log:
Refactor aspect handling and simplified configuration: automatic configuration of system services 

Removed:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/PageLabelProfileManagerAspect.java
Modified:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManager.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/AbstractProfileManager.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/PortalManager.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/DefaultLayoutFactory.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/DefaultPortalManager.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/DefaultLinkService.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/PageLabelLinkService.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/RegistrationBeanPostProcessor.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/cocoon-portal-components.xml
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/cocoon-portal-sample-components.xml

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManager.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManager.java?view=diff&rev=515620&r1=515619&r2=515620
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManager.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileManager.java Wed Mar  7 07:59:00 2007
@@ -24,6 +24,7 @@
 import org.apache.cocoon.portal.om.CopletType;
 import org.apache.cocoon.portal.om.Layout;
 import org.apache.cocoon.portal.om.LayoutInstance;
+import org.apache.cocoon.portal.services.aspects.AspectChain;
 
 /**
  * The profile manager provides access to the portal profile (or parts
@@ -89,4 +90,6 @@
      * Get a specific coplet type for the current user.
      */
     CopletType getCopletType(String id);
+
+    AspectChain getProfileManagerAspectChain();
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/AbstractProfileManager.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/AbstractProfileManager.java?view=diff&rev=515620&r1=515619&r2=515620
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/AbstractProfileManager.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/AbstractProfileManager.java Wed Mar  7 07:59:00 2007
@@ -33,6 +33,7 @@
 import org.apache.cocoon.portal.om.LayoutException;
 import org.apache.cocoon.portal.om.PortalUser;
 import org.apache.cocoon.portal.profile.ProfileManager;
+import org.apache.cocoon.portal.services.aspects.AspectChain;
 import org.apache.cocoon.portal.services.aspects.impl.support.ProfileManagerAspectContextImpl;
 import org.apache.cocoon.portal.services.aspects.support.AspectChainImpl;
 import org.apache.cocoon.portal.util.AbstractBean;
@@ -43,8 +44,8 @@
  *
  * @version $Id$
  */
-public abstract class AbstractProfileManager 
-    extends AbstractBean 
+public abstract class AbstractProfileManager
+    extends AbstractBean
     implements ProfileManager, Receiver, Ordered {
 
     /** The chain for the configured profile manager aspects. */
@@ -59,6 +60,13 @@
     }
 
     /**
+     * @see org.apache.cocoon.portal.profile.ProfileManager#getProfileManagerAspectChain()
+     */
+    public AspectChain getProfileManagerAspectChain() {
+        return this.chain;
+    }
+
+    /**
      * Receives any user related event and invokes login, logout etc.
      * @see Receiver
      */
@@ -114,7 +122,7 @@
                         if ( cid.getCopletDefinition() != null ) {
                             // now invoke login on each instance
                             CopletAdapter adapter;
-                            adapter = this.portalService.getCopletAdapter(cid.getCopletDefinition().getCopletType().getCopletAdapterName());                            
+                            adapter = this.portalService.getCopletAdapter(cid.getCopletDefinition().getCopletType().getCopletAdapterName());
                             adapter.login( cid );
                         }
                     }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/PortalManager.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/PortalManager.java?view=diff&rev=515620&r1=515619&r2=515620
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/PortalManager.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/PortalManager.java Wed Mar  7 07:59:00 2007
@@ -19,8 +19,7 @@
 import java.util.Properties;
 
 import org.apache.cocoon.portal.PortalException;
-import org.apache.cocoon.portal.services.aspects.RequestProcessorAspect;
-import org.apache.cocoon.portal.services.aspects.ResponseProcessorAspect;
+import org.apache.cocoon.portal.services.aspects.AspectChain;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
 
@@ -66,6 +65,7 @@
                 Properties     properties)
     throws SAXException;
 
-    void register(ResponseProcessorAspect aspect);
-    void register(RequestProcessorAspect aspect);
+    AspectChain getResponseProcessorAspectChain();
+
+    AspectChain getRequestProcessorAspectChain();
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/DefaultLayoutFactory.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/DefaultLayoutFactory.java?view=diff&rev=515620&r1=515619&r2=515620
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/DefaultLayoutFactory.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/DefaultLayoutFactory.java Wed Mar  7 07:59:00 2007
@@ -117,28 +117,28 @@
 
     protected static long idCounter = System.currentTimeMillis();
 
-    /** 
+    /**
      * Configure a layout
      */
-    protected void configureLayout(Configuration layoutConf) 
+    protected void configureLayout(Configuration layoutConf)
     throws ConfigurationException {
         LayoutDescription desc = new LayoutDescription();
         final String type = layoutConf.getAttribute("type");
-   
+
         // unique test
         if ( this.layouts.get(type) != null) {
             throw new ConfigurationException("Layout type must be unique. Double definition for " + type);
         }
         desc.setType(type);
-        desc.setClassName(layoutConf.getAttribute("class"));        
+        desc.setClassName(layoutConf.getAttribute("class"));
         desc.setCreateId(layoutConf.getAttributeAsBoolean("create-id", false));
         desc.setItemClassName(layoutConf.getAttribute("item-class", null));
         desc.setDefaultIsStatic(layoutConf.getAttributeAsBoolean("default-is-static", false));
 
         // the renderers
         final String defaultRenderer = layoutConf.getChild("renderers").getAttribute("default");
-        desc.setDefaultRendererName(defaultRenderer); 
-         
+        desc.setDefaultRendererName(defaultRenderer);
+
         final Configuration[] rendererConfs = layoutConf.getChild("renderers").getChildren("renderer");
         if ( rendererConfs != null ) {
             boolean found = false;
@@ -161,7 +161,7 @@
     /**
      * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
      */
-    public void configure(Configuration configuration) 
+    public void configure(Configuration configuration)
     throws ConfigurationException {
         final Configuration[] layoutsConf = configuration.getChild("layouts").getChildren("layout");
         for(int i=0; i < layoutsConf.length; i++ ) {
@@ -176,7 +176,7 @@
     /**
      * @see org.apache.cocoon.portal.services.LayoutFactory#newInstance(java.lang.String)
      */
-    public Layout newInstance(String layoutType) 
+    public Layout newInstance(String layoutType)
     throws LayoutException {
         return this.newInstance(layoutType, null);
     }
@@ -184,7 +184,7 @@
     /**
      * @see org.apache.cocoon.portal.services.LayoutFactory#newInstance(java.lang.String, java.lang.String)
      */
-    public Layout newInstance(String layoutType, String id) 
+    public Layout newInstance(String layoutType, String id)
     throws LayoutException {
         LayoutDescription layoutDescription = (LayoutDescription)this.layouts.get( layoutType );
 
@@ -216,6 +216,8 @@
     }
 
     /**
+     * Inform this bean about a remove layout event.
+     * @param event The remove layout event
      * @see Receiver
      */
     public void inform(RemoveLayoutEvent event) {

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/DefaultPortalManager.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/DefaultPortalManager.java?view=diff&rev=515620&r1=515619&r2=515620
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/DefaultPortalManager.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/DefaultPortalManager.java Wed Mar  7 07:59:00 2007
@@ -25,6 +25,7 @@
 import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Request;
 import org.apache.cocoon.portal.PortalException;
+import org.apache.cocoon.portal.PortalRuntimeException;
 import org.apache.cocoon.portal.layout.renderer.Renderer;
 import org.apache.cocoon.portal.om.CopletInstance;
 import org.apache.cocoon.portal.om.CopletInstanceFeatures;
@@ -33,6 +34,7 @@
 import org.apache.cocoon.portal.om.LayoutFeatures;
 import org.apache.cocoon.portal.profile.ProfileManager;
 import org.apache.cocoon.portal.services.PortalManager;
+import org.apache.cocoon.portal.services.aspects.AspectChain;
 import org.apache.cocoon.portal.services.aspects.RequestProcessorAspect;
 import org.apache.cocoon.portal.services.aspects.RequestProcessorAspectContext;
 import org.apache.cocoon.portal.services.aspects.ResponseProcessorAspect;
@@ -61,12 +63,22 @@
     /** The aspect chain for additional response processing. */
     protected AspectChainImpl responseChain;
 
+    public DefaultPortalManager() {
+        this.setRequestAspectChain(new AspectChainImpl(RequestProcessorAspect.class));
+        this.setResponseAspectChain(new AspectChainImpl(ResponseProcessorAspect.class));
+    }
+
     /**
      * Set the request aspect chain.
      * @param a A chain.
      */
     public void setRequestAspectChain(AspectChainImpl a) {
         this.requestChain = a;
+        try {
+            this.requestChain.addAspect(this, null);
+        } catch (PortalException e) {
+            throw new PortalRuntimeException("Unable to add DefaultPortalManager to request aspect chain.", e);
+        }
     }
 
     /**
@@ -75,6 +87,11 @@
      */
     public void setResponseAspectChain(AspectChainImpl a) {
         this.responseChain = a;
+        try {
+            this.responseChain.addAspect(this, null);
+        } catch (PortalException e) {
+            throw new PortalRuntimeException("Unable to add DefaultPortalManager to response aspect chain.", e);
+        }
     }
 
     /**
@@ -98,34 +115,19 @@
 	}
 
     /**
-     * Initialize
-     * @throws PortalException
-     */
-    public void init()
-    throws PortalException {
-        if ( this.requestChain == null ) {
-            this.requestChain = new AspectChainImpl(RequestProcessorAspect.class);
-        }
-        this.requestChain.addAspect(this, null);
-        if ( this.responseChain == null ) {
-            this.responseChain = new AspectChainImpl(ResponseProcessorAspect.class);
-        }
-        this.responseChain.addAspect(this, null);
-    }
-
-    /**
      * @see org.apache.cocoon.portal.services.aspects.RequestProcessorAspect#process(org.apache.cocoon.portal.services.aspects.RequestProcessorAspectContext)
      */
     public void process(RequestProcessorAspectContext rpContext) {
-        // by defaut, we have nothing to do
+        // by defaut, we have nothing to do, except invoking the next
+        rpContext.invokeNext();
     }
 
     /**
      * @see org.apache.cocoon.portal.services.aspects.ResponseProcessorAspect#render(org.apache.cocoon.portal.services.aspects.ResponseProcessorAspectContext, org.xml.sax.ContentHandler, java.util.Properties)
      */
     public void render(ResponseProcessorAspectContext renderContext,
-                       ContentHandler                   ch,
-                       Properties                       properties)
+                       ContentHandler                 ch,
+                       Properties                     properties)
     throws SAXException {
         final ProfileManager profileManager = this.portalService.getProfileManager();
 
@@ -235,28 +237,16 @@
     }
 
     /**
-     * @see org.apache.cocoon.portal.services.PortalManager#register(org.apache.cocoon.portal.services.aspects.ResponseProcessorAspect)
+     * @see org.apache.cocoon.portal.services.PortalManager#getRequestProcessorAspectChain()
      */
-    public void register(ResponseProcessorAspect aspect) {
-        try {
-            this.responseChain.addAspect(aspect, null, 0);
-        } catch (PortalException pe) {
-            final IllegalArgumentException e = new IllegalArgumentException("Unable to add portal manager aspects.");
-            e.initCause(pe);
-            throw e;
-        }
+    public AspectChain getRequestProcessorAspectChain() {
+        return this.requestChain;
     }
 
     /**
-     * @see org.apache.cocoon.portal.services.PortalManager#register(org.apache.cocoon.portal.services.aspects.RequestProcessorAspect)
+     * @see org.apache.cocoon.portal.services.PortalManager#getResponseProcessorAspectChain()
      */
-    public void register(RequestProcessorAspect aspect) {
-        try {
-            this.responseChain.addAspect(aspect, null, 0);
-        } catch (PortalException pe) {
-            final IllegalArgumentException e = new IllegalArgumentException("Unable to add portal manager aspects.");
-            e.initCause(pe);
-            throw e;
-        }
+    public AspectChain getResponseProcessorAspectChain() {
+        return this.responseChain;
     }
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/DefaultLinkService.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/DefaultLinkService.java?view=diff&rev=515620&r1=515619&r2=515620
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/DefaultLinkService.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/DefaultLinkService.java Wed Mar  7 07:59:00 2007
@@ -33,6 +33,7 @@
 import org.apache.cocoon.portal.event.EventConverter;
 import org.apache.cocoon.portal.event.EventManager;
 import org.apache.cocoon.portal.services.LinkService;
+import org.apache.cocoon.portal.services.aspects.DynamicAspect;
 import org.apache.cocoon.portal.services.aspects.RequestProcessorAspectContext;
 import org.apache.cocoon.portal.util.AbstractBean;
 
@@ -45,7 +46,7 @@
  */
 public class DefaultLinkService
     extends AbstractBean
-    implements LinkService {
+    implements LinkService, DynamicAspect {
 
     /** Default port used for http. */
     protected int defaultPort = 80;

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/PageLabelLinkService.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/PageLabelLinkService.java?view=diff&rev=515620&r1=515619&r2=515620
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/PageLabelLinkService.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/links/PageLabelLinkService.java Wed Mar  7 07:59:00 2007
@@ -16,18 +16,29 @@
  */
 package org.apache.cocoon.portal.services.impl.links;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Request;
+import org.apache.cocoon.portal.PortalService;
 import org.apache.cocoon.portal.event.Event;
 import org.apache.cocoon.portal.event.EventManager;
 import org.apache.cocoon.portal.event.layout.ChangeTabEvent;
+import org.apache.cocoon.portal.om.CompositeLayout;
+import org.apache.cocoon.portal.om.Item;
+import org.apache.cocoon.portal.om.Layout;
+import org.apache.cocoon.portal.om.LayoutFeatures;
+import org.apache.cocoon.portal.om.NamedItem;
+import org.apache.cocoon.portal.services.aspects.ProfileManagerAspect;
+import org.apache.cocoon.portal.services.aspects.ProfileManagerAspectContext;
 import org.apache.cocoon.portal.services.aspects.RequestProcessorAspectContext;
-import org.apache.cocoon.portal.services.aspects.impl.PageLabelProfileManagerAspect;
 
 
 /**
@@ -36,10 +47,17 @@
  *
  * @version $Id$
  */
-public class PageLabelLinkService extends DefaultLinkService {
+public class PageLabelLinkService
+    extends DefaultLinkService
+    implements ProfileManagerAspect {
+
+    protected static final String PAGE_LABEL_MAP = PageLabelLinkService.class.getName() + "/pageLabelMap";
+    protected static final String PAGE_LABEL_ATTR= PageLabelLinkService.class.getName() + "/pageLabel";
 
     protected String pageLabelRequestParameter = "pageLabel";
 
+    protected boolean stickyTabs = false;
+
     public void setPageLabelRequestParameter(String pageLabelRequestParameter) {
         this.pageLabelRequestParameter = pageLabelRequestParameter;
     }
@@ -55,7 +73,7 @@
                 final Event current = (Event)i.next();
                 if ( current instanceof ChangeTabEvent ) {
                     final ChangeTabEvent tabEvent = (ChangeTabEvent)current;
-                    final String pageLabel = (String)tabEvent.getItem().getTemporaryAttribute("pageLabel");
+                    final String pageLabel = (String)tabEvent.getItem().getTemporaryAttribute(PAGE_LABEL_ATTR);
                     if ( pageLabel != null ) {
                         i.remove();
                         if ( parameterDescriptions == null ) {
@@ -73,7 +91,7 @@
      * @see org.apache.cocoon.portal.services.impl.links.DefaultLinkService#process(org.apache.cocoon.portal.services.aspects.RequestProcessorAspectContext)
      */
     public void process(RequestProcessorAspectContext context) {
-        final Map pageLabelMap = (Map)context.getPortalService().getUserService().getAttribute("pageLabelMap");
+        final Map pageLabelMap = (Map)context.getPortalService().getUserService().getAttribute(PAGE_LABEL_MAP);
         if ( pageLabelMap != null ) {
             final Request request = ObjectModelHelper.getRequest(context.getPortalService().getProcessInfoProvider().getObjectModel());
             final EventManager publisher = context.getPortalService().getEventManager();
@@ -86,7 +104,7 @@
                     if ( events != null ) {
                         final Iterator iter = events.iterator();
                         while ( iter.hasNext() ) {
-                            final PageLabelProfileManagerAspect.PageLabelEventInfo event = (PageLabelProfileManagerAspect.PageLabelEventInfo)iter.next();
+                            final PageLabelEventInfo event = (PageLabelEventInfo)iter.next();
                             // TODO - check for change
                             publisher.send(event.createEvent(context.getPortalService()));
                         }
@@ -96,4 +114,100 @@
         }
         super.process(context);
     }
+
+    /**
+     * @see org.apache.cocoon.portal.services.aspects.ProfileManagerAspect#prepareCopletDefinitions(org.apache.cocoon.portal.services.aspects.ProfileManagerAspectContext, java.util.Collection)
+     */
+    public void prepareCopletDefinitions(ProfileManagerAspectContext context, Collection copletDefinitions) {
+        context.invokeNext(copletDefinitions);
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.services.aspects.ProfileManagerAspect#prepareCopletInstances(org.apache.cocoon.portal.services.aspects.ProfileManagerAspectContext, java.util.Collection)
+     */
+    public void prepareCopletInstances(ProfileManagerAspectContext context, Collection copletInstances) {
+        context.invokeNext(copletInstances);
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.services.aspects.ProfileManagerAspect#prepareCopletTypes(org.apache.cocoon.portal.services.aspects.ProfileManagerAspectContext, java.util.Collection)
+     */
+    public void prepareCopletTypes(ProfileManagerAspectContext context, Collection copletTypes) {
+        context.invokeNext(copletTypes);
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.services.aspects.ProfileManagerAspect#prepareLayout(org.apache.cocoon.portal.services.aspects.ProfileManagerAspectContext, org.apache.cocoon.portal.om.Layout)
+     */
+    public void prepareLayout(ProfileManagerAspectContext context, Layout rootLayout) {
+        if ( rootLayout instanceof CompositeLayout ) {
+            final Map pageLabelMap = new HashMap();
+            this.populate(context.getPortalService(), (CompositeLayout)rootLayout, pageLabelMap, "", null);
+            context.getPortalService().getUserService().setAttribute(PAGE_LABEL_MAP, pageLabelMap);
+        }
+        context.invokeNext(rootLayout);
+    }
+
+    private List populate(PortalService service, CompositeLayout layout, Map map, String name, List parentEvents) {
+        List lhList = null;
+        for (int j = 0; j < layout.getSize(); j++) {
+            final Item tab = layout.getItem(j);
+            final PageLabelEventInfo event = new PageLabelEventInfo(layout, tab);
+            final StringBuffer label = new StringBuffer(name);
+            if (label.length() > 0) {
+                label.append(".");
+            }
+            label.append((tab instanceof NamedItem) ? ((NamedItem) tab).getName()
+                                                    : Integer.toString(j));
+            try {
+                tab.setTemporaryAttribute(PAGE_LABEL_ATTR, URLEncoder.encode(label.toString(), "utf-8"));
+            } catch (UnsupportedEncodingException e) {
+                // this can never happen
+            }
+
+            final List events = (parentEvents != null ? new ArrayList(parentEvents) : new ArrayList());
+            events.add(event);
+
+            Layout child = tab.getLayout();
+            List allEvents = null;
+            if (child != null && child instanceof CompositeLayout) {
+                allEvents = populate(service, (CompositeLayout) child, map, label.toString(), events);
+            }
+            if ( !this.stickyTabs ) {
+                // With non-sticky tabs the non-leaf nodes always display
+                // the left-most child tabs
+                if (lhList == null) {
+                    if (allEvents != null) {
+                        lhList = allEvents;
+                    } else {
+                        lhList = events;
+                    }
+                }
+                if (allEvents != null) {
+                    map.put(label.toString(), allEvents);
+                } else {
+                    map.put(label.toString(), events);
+                }
+            } else {
+                map.put(label.toString(), events);
+            }
+        }
+        return lhList;
+    }
+
+    public static final class PageLabelEventInfo {
+
+        protected final CompositeLayout layout;
+        protected final Item            item;
+
+        public PageLabelEventInfo(final CompositeLayout l, final Item i) {
+            this.layout = l;
+            this.item = i;
+        }
+
+        public ChangeTabEvent createEvent(PortalService service) {
+            return new ChangeTabEvent(LayoutFeatures.getLayoutInstance(service, this.layout, true), this.item, false);
+        }
+    }
+
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/RegistrationBeanPostProcessor.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/RegistrationBeanPostProcessor.java?view=diff&rev=515620&r1=515619&r2=515620
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/RegistrationBeanPostProcessor.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/RegistrationBeanPostProcessor.java Wed Mar  7 07:59:00 2007
@@ -16,13 +16,16 @@
  */
 package org.apache.cocoon.portal.spring;
 
+import org.apache.cocoon.portal.PortalException;
 import org.apache.cocoon.portal.PortalService;
 import org.apache.cocoon.portal.services.aspects.DynamicAspect;
+import org.apache.cocoon.portal.services.aspects.ProfileManagerAspect;
 import org.apache.cocoon.portal.services.aspects.RequestProcessorAspect;
 import org.apache.cocoon.portal.services.aspects.ResponseProcessorAspect;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.BeanFactory;
 import org.springframework.beans.factory.BeanFactoryAware;
+import org.springframework.beans.factory.BeanInitializationException;
 import org.springframework.beans.factory.config.BeanPostProcessor;
 
 /**
@@ -47,11 +50,21 @@
      * @see org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization(java.lang.Object, java.lang.String)
      */
     public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
-        if ( bean instanceof DynamicAspect && bean instanceof ResponseProcessorAspect ) {
-            ((PortalService)this.beanFactory.getBean(PortalService.class.getName())).getPortalManager().register((ResponseProcessorAspect)bean);
-        }
-        if ( bean instanceof DynamicAspect && bean instanceof RequestProcessorAspect ) {
-            ((PortalService)this.beanFactory.getBean(PortalService.class.getName())).getPortalManager().register((RequestProcessorAspect)bean);
+        if ( bean instanceof DynamicAspect ) {
+            final PortalService portalService = (PortalService) this.beanFactory.getBean(PortalService.class.getName());
+            try {
+                if ( bean instanceof ResponseProcessorAspect ) {
+                    portalService.getPortalManager().getResponseProcessorAspectChain().addAspect(bean, null, 0);
+                }
+                if ( bean instanceof RequestProcessorAspect ) {
+                    portalService.getPortalManager().getRequestProcessorAspectChain().addAspect(bean, null, -1);
+                }
+                if ( bean instanceof ProfileManagerAspect ) {
+                    portalService.getProfileManager().getProfileManagerAspectChain().addAspect(bean, null, -1);
+                }
+            } catch (PortalException pe) {
+                throw new BeanInitializationException("Unable to register dynamic aspect of bean " + beanName, pe);
+            }
         }
         return bean;
     }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/cocoon-portal-components.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/cocoon-portal-components.xml?view=diff&rev=515620&r1=515619&r2=515620
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/cocoon-portal-components.xml (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/cocoon-portal-components.xml Wed Mar  7 07:59:00 2007
@@ -100,15 +100,13 @@
     <bean name="org.apache.cocoon.portal.services.PortalManager"
           class="org.apache.cocoon.portal.services.impl.DefaultPortalManager"
           parent="org.apache.cocoon.portal.util.AbstractBean"
-          init-method="init" scope="singleton">
+          scope="singleton">
       <property name="requestAspectChain" ref="org.apache.cocoon.portal.services.PortalManager.requestAspects"/>
       <property name="responseAspectChain" ref="org.apache.cocoon.portal.services.PortalManager.responseAspects"/>
     </bean>
 
-    <!-- We register only the link service as a request processor. The aspect configuration
-         should be redefined in the portal config. -->
+    <!-- We register an empty aspects bean which should be redefined in the portal config. -->
     <portal:request-processor-aspects id="org.apache.cocoon.portal.services.PortalManager.requestAspects">
-      <portal:aspect ref="org.apache.cocoon.portal.services.LinkService"/>
     </portal:request-processor-aspects>
 
     <!-- We register an empty aspects bean which should be redefined in the portal config. -->
@@ -212,9 +210,6 @@
       | Profile Manager Aspects.
       |
       +-->
-    <bean name="org.apache.cocoon.portal.services.aspects.ProfileManagerAspect.page-labels"
-          class="org.apache.cocoon.portal.services.aspects.impl.PageLabelProfileManagerAspect"
-          parent="org.apache.cocoon.portal.util.AbstractBean" scope="singleton"/>
 
     <!-- We register an empty aspects bean which should be redefined in the portal config. -->
     <portal:profile-manager-aspects id="org.apache.cocoon.portal.profile.ProfileManager.aspects"/>

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/cocoon-portal-sample-components.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/cocoon-portal-sample-components.xml?view=diff&rev=515620&r1=515619&r2=515620
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/cocoon-portal-sample-components.xml (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/cocoon-portal-sample-components.xml Wed Mar  7 07:59:00 2007
@@ -78,7 +78,6 @@
       |
       +-->
     <portal:request-processor-aspects id="org.apache.cocoon.portal.services.PortalManager.requestAspects">
-      <portal:aspect ref="org.apache.cocoon.portal.services.LinkService"/>
       <!--  The client should not cache the page. -->
       <portal:aspect type="no-client-caching"/>
       <!-- Use the action counter with great care. We recommend turning it off. -->
@@ -106,7 +105,6 @@
       |
       +-->
     <portal:profile-manager-aspects id="org.apache.cocoon.portal.profile.ProfileManager.aspects">
-      <portal:aspect type="page-labels"/>
       <!-- Add your aspects here -->
     </portal:profile-manager-aspects>
 </beans>