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/12/14 22:19:05 UTC

svn commit: r487353 - in /cocoon/trunk/blocks/cocoon-portal: cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/ cocoon-portal-impl/src/main/java/org/apache...

Author: cziegeler
Date: Thu Dec 14 13:19:04 2006
New Revision: 487353

URL: http://svn.apache.org/viewvc?view=rev&rev=487353
Log:
Split up profile preparation into several methods

Modified:
    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/profile/impl/GroupBasedProfileManager.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/ProfileManagerAspect.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/ProfileManagerAspectContext.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/PageLabelProfileManagerAspect.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/support/ProfileManagerAspectContextImpl.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-impl/src/main/java/org/apache/cocoon/portal/pluto/TestProfileManager.java

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=487353&r1=487352&r2=487353
==============================================================================
--- 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 Thu Dec 14 13:19:04 2006
@@ -188,13 +188,71 @@
     /**
      * Process a freshly loaded profile.
      */
-    protected Profile processProfile(Profile profile) {
-        // FIXME we should add the calls to prepareObject here as well
+    protected Collection processCopletTypes(Collection copletTypes)
+    throws LayoutException {
+        Collection result = copletTypes;
         if ( this.chain.hasAspects() ) {
-            ProfileManagerAspectContextImpl aspectContext = new ProfileManagerAspectContextImpl(this.portalService, this.chain);
-            aspectContext.invokeNext(profile);
+            final ProfileManagerAspectContextImpl aspectContext = new ProfileManagerAspectContextImpl(this.portalService,
+                                                                                                      this.chain,
+                                                                                                      ProfileManagerAspectContextImpl.PHASE_COPLET_TYPES);
+            aspectContext.invokeNext(copletTypes);
+            result = (Collection)aspectContext.getResult();
         }
-        return profile;
+        this.prepareObject(null, result);
+        return result;
+    }
+
+    /**
+     * Process a freshly loaded profile.
+     */
+    protected Collection processCopletDefinitions(Collection copletDefinitions)
+    throws LayoutException {
+        Collection result = copletDefinitions;
+        if ( this.chain.hasAspects() ) {
+            final ProfileManagerAspectContextImpl aspectContext = new ProfileManagerAspectContextImpl(this.portalService,
+                                                                                                      this.chain,
+                                                                                                      ProfileManagerAspectContextImpl.PHASE_COPLET_DEFINITIONS);
+            aspectContext.invokeNext(copletDefinitions);
+            result = (Collection)aspectContext.getResult();
+        }
+        this.prepareObject(null, result);
+        return result;
+    }
+
+    /**
+     * Process a freshly loaded profile.
+     * TODO Why do we need the profile?
+     */
+    protected Collection processCopletInstances(Profile profile, Collection copletInstances)
+    throws LayoutException {
+        Collection result = copletInstances;
+        if ( this.chain.hasAspects() ) {
+            final ProfileManagerAspectContextImpl aspectContext = new ProfileManagerAspectContextImpl(this.portalService,
+                                                                                                      this.chain,
+                                                                                                      ProfileManagerAspectContextImpl.PHASE_COPLET_INSTANCES);
+            aspectContext.invokeNext(copletInstances);
+            result = (Collection)aspectContext.getResult();
+        }
+        this.prepareObject(profile, result);
+        return result;
+    }
+
+    /**
+     * Process a freshly loaded profile.
+     * TODO Why do we need the profile?
+     */
+    protected Layout processLayout(Profile profile, Layout layout)
+    throws LayoutException {
+        Layout result = layout;
+        if ( this.chain.hasAspects() ) {
+            final ProfileManagerAspectContextImpl aspectContext = new ProfileManagerAspectContextImpl(this.portalService,
+                                                                                                      this.chain,
+                                                                                                      ProfileManagerAspectContextImpl.PHASE_COPLET_LAYOUT);
+            aspectContext.invokeNext(layout);
+            result = (Layout)aspectContext.getResult();
+        }
+        this.prepareObject(profile, result);
+        return result;
     }
 
     /**

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java?view=diff&rev=487353&r1=487352&r2=487353
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java Thu Dec 14 13:19:04 2006
@@ -333,17 +333,16 @@
         } catch (Exception e) {
             throw new ProfileException("Unable to load profile '" + defaultProfileName + "' for user " + user + ".", e);
         }
-        final Profile processedProfile = this.processProfile(profile);
-        this.storeUserProfile(processedProfile);
-        return processedProfile;
+        this.storeUserProfile(profile);
+        return profile;
     }
 
     protected void loadProfile(ProfileImpl profile, PortalUser user, String profileName)
     throws ProfileException {
         try {
-            if ( !this.getCopletInstanceDatas(profile, user, CATEGORY_USER, profileName) ) {
-                if ( user.getGroups().size() == 0 || !this.getCopletInstanceDatas(profile, user, CATEGORY_GROUP, profileName)) {
-                    if ( !this.getCopletInstanceDatas(profile, user, CATEGORY_GLOBAL, profileName) ) {
+            if ( !this.getCopletInstances(profile, user, CATEGORY_USER, profileName) ) {
+                if ( user.getGroups().size() == 0 || !this.getCopletInstances(profile, user, CATEGORY_GROUP, profileName)) {
+                    if ( !this.getCopletInstances(profile, user, CATEGORY_GLOBAL, profileName) ) {
                         throw new ProcessingException("No profile for copletinstancedatas found.");
                     }
                 }
@@ -401,8 +400,10 @@
 
         // we have to load/reload
         synchronized ( this ) {
+            Collection collection = (Collection)loader.loadProfile(key, ProfileLS.PROFILETYPE_COPLETTYPE, null);
+            collection = this.processCopletTypes(collection);
             final Map objects = new HashMap();
-            final Iterator i = ((Collection)loader.loadProfile(key, ProfileLS.PROFILETYPE_COPLETTYPE, null)).iterator();
+            final Iterator i = collection.iterator();
             while ( i.hasNext() ) {
                 final CopletType current = (CopletType)i.next();
                 objects.put(current.getId(), current);
@@ -415,7 +416,7 @@
             // now invalidate coplet definitions
             this.copletDefinitions.objects = null;
             this.copletDefinitions.validity = null;
-            this.prepareObject(null, this.copletTypes.objects);
+
             return this.copletTypes.objects;
         }
     }
@@ -451,8 +452,10 @@
         }
 
         synchronized ( this ) {
+            Collection collection = (Collection)loader.loadProfile(key, ProfileLS.PROFILETYPE_COPLETDEFINITION, profile.getCopletTypesMap());
+            collection = this.processCopletDefinitions(collection);
+            final Iterator i = collection.iterator();
             final Map objects = new HashMap();
-            final Iterator i = ((Collection)loader.loadProfile(key, ProfileLS.PROFILETYPE_COPLETDEFINITION, profile.getCopletTypesMap())).iterator();
             while ( i.hasNext() ) {
                 final CopletDefinition current = (CopletDefinition)i.next();
                 // only add coplet data if coplet base data has been found
@@ -469,7 +472,7 @@
                 newValidity = loader.getValidity(key, ProfileLS.PROFILETYPE_COPLETDEFINITION);
             }
             this.copletDefinitions.validity = newValidity;
-            this.prepareObject(profile, this.copletDefinitions.objects);
+
             return this.copletDefinitions.objects;
         }
     }
@@ -485,10 +488,10 @@
         return false;
     }
 
-    protected boolean getCopletInstanceDatas(final ProfileImpl profile,
-                                             final PortalUser  info,
-                                             final String      category,
-                                             final String      layoutKey)
+    protected boolean getCopletInstances(final ProfileImpl profile,
+                                         final PortalUser  info,
+                                         final String      category,
+                                         final String      layoutKey)
     throws Exception {
         Map key = this.buildKey(category,
                                 ProfileLS.PROFILETYPE_COPLETINSTANCE,
@@ -497,8 +500,8 @@
                                 layoutKey);
         try {
             Collection cidm = (Collection)loader.loadProfile(key, ProfileLS.PROFILETYPE_COPLETINSTANCE, profile.getCopletDefinitionsMap());
+            cidm = this.processCopletInstances(profile, cidm);
             profile.setCopletInstances(cidm);
-            this.prepareObject(profile, profile.getCopletInstancesMap());
 
             return true;
         } catch (Exception e) {
@@ -521,7 +524,7 @@
                                       layoutKey);
         try {
             Layout l = (Layout)loader.loadProfile(key, ProfileLS.PROFILETYPE_LAYOUT, profile.getCopletInstancesMap());
-            this.prepareObject(profile, l);
+            l = this.processLayout(profile, l);
             profile.setRootLayout(l);
 
             return true;

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/ProfileManagerAspect.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/ProfileManagerAspect.java?view=diff&rev=487353&r1=487352&r2=487353
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/ProfileManagerAspect.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/ProfileManagerAspect.java Thu Dec 14 13:19:04 2006
@@ -16,7 +16,9 @@
  */
 package org.apache.cocoon.portal.services.aspects;
 
-import org.apache.cocoon.portal.scratchpad.Profile;
+import java.util.Collection;
+
+import org.apache.cocoon.portal.om.Layout;
 
 /**
  * The behaviour of the used profile manager can be extended by assigning one
@@ -27,6 +29,35 @@
  */
 public interface ProfileManagerAspect {
 
-    void prepare(ProfileManagerAspectContext context,
-                 Profile profile);
+    /**
+     * Prepare the coplet types directly after loading.
+     * @param context
+     * @param copletTypes
+     */
+    void prepareCopletTypes(ProfileManagerAspectContext context,
+                            Collection copletTypes);
+                 
+    /**
+     * Prepare the coplet definitions directly after loading.
+     * @param context
+     * @param copletDefinitions
+     */
+    void prepareCopletDefinitions(ProfileManagerAspectContext context,
+                                  Collection copletDefinitions);
+
+    /**
+     * Prepare the coplet instances directly after loading.
+     * @param context
+     * @param copletInstances
+     */
+    void prepareCopletInstances(ProfileManagerAspectContext context,
+                                Collection copletInstances);
+
+    /**
+     * Prepare the layout directly after loading.
+     * @param context
+     * @param layout
+     */
+    void prepareLayout(ProfileManagerAspectContext context,
+                       Layout layout);
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/ProfileManagerAspectContext.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/ProfileManagerAspectContext.java?view=diff&rev=487353&r1=487352&r2=487353
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/ProfileManagerAspectContext.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/ProfileManagerAspectContext.java Thu Dec 14 13:19:04 2006
@@ -16,8 +16,6 @@
  */
 package org.apache.cocoon.portal.services.aspects;
 
-import org.apache.cocoon.portal.scratchpad.Profile;
-
 /**
  * The context for a {@link  ProfileManagerAspect}.
  *
@@ -29,5 +27,5 @@
     /**
      * Invoke next aspect .
      */
-    void invokeNext(Profile profile);
+    void invokeNext(Object object);
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/PageLabelProfileManagerAspect.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/PageLabelProfileManagerAspect.java?view=diff&rev=487353&r1=487352&r2=487353
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/PageLabelProfileManagerAspect.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/PageLabelProfileManagerAspect.java Thu Dec 14 13:19:04 2006
@@ -16,12 +16,13 @@
  */
 package org.apache.cocoon.portal.services.aspects.impl;
 
+import java.util.Collection;
+
 import org.apache.avalon.framework.thread.ThreadSafe;
 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.NamedItem;
-import org.apache.cocoon.portal.scratchpad.Profile;
 import org.apache.cocoon.portal.services.aspects.ProfileManagerAspect;
 import org.apache.cocoon.portal.services.aspects.ProfileManagerAspectContext;
 
@@ -32,17 +33,37 @@
     implements ProfileManagerAspect, ThreadSafe {
 
     /**
-     * @see org.apache.cocoon.portal.services.aspects.ProfileManagerAspect#prepare(org.apache.cocoon.portal.services.aspects.ProfileManagerAspectContext, org.apache.cocoon.portal.scratchpad.Profile)
+     * @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 prepare(ProfileManagerAspectContext context, Profile profile) {
-        final Layout rootLayout = profile.getRootLayout();
+    public void prepareLayout(ProfileManagerAspectContext context, Layout rootLayout) {
         if ( rootLayout instanceof CompositeLayout ) {
             this.populate((CompositeLayout)rootLayout, "");
         }
-        context.invokeNext(profile);
+        context.invokeNext(rootLayout);
     }
 
-    private void populate(CompositeLayout layout, String name) {
+    protected void populate(CompositeLayout layout, String name) {
         for (int j = 0; j < layout.getSize(); j++) {
             final Item tab = layout.getItem(j);
             final StringBuffer label = new StringBuffer(name);

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/support/ProfileManagerAspectContextImpl.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/support/ProfileManagerAspectContextImpl.java?view=diff&rev=487353&r1=487352&r2=487353
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/support/ProfileManagerAspectContextImpl.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/aspects/impl/support/ProfileManagerAspectContextImpl.java Thu Dec 14 13:19:04 2006
@@ -16,8 +16,10 @@
  */
 package org.apache.cocoon.portal.services.aspects.impl.support;
 
+import java.util.Collection;
+
 import org.apache.cocoon.portal.PortalService;
-import org.apache.cocoon.portal.scratchpad.Profile;
+import org.apache.cocoon.portal.om.Layout;
 import org.apache.cocoon.portal.services.aspects.ProfileManagerAspect;
 import org.apache.cocoon.portal.services.aspects.ProfileManagerAspectContext;
 import org.apache.cocoon.portal.services.aspects.support.AspectChain;
@@ -26,24 +28,46 @@
 /**
  * The aspect context is passed to every aspect.
  * @since 2.2
+ *
  * @version $Id$
  */
 public final class ProfileManagerAspectContextImpl
     extends BasicAspectContextImpl
     implements ProfileManagerAspectContext {
 
+    public static final int PHASE_COPLET_TYPES = 0;
+    public static final int PHASE_COPLET_DEFINITIONS = 1;
+    public static final int PHASE_COPLET_INSTANCES =2;
+    public static final int PHASE_COPLET_LAYOUT = 3;
+
+    protected int phase;
+    protected Object result;
+
     public ProfileManagerAspectContextImpl(PortalService service,
-                                              AspectChain   chain) {
+                                           AspectChain   chain,
+                                           int           phase) {
         super(service, chain);
     }
 
-	/**
-	 * @see org.apache.cocoon.portal.services.aspects.ProfileManagerAspectContext#invokeNext(org.apache.cocoon.portal.scratchpad.Profile)
-	 */
-	public void invokeNext(Profile portalProfile) {
+	public void invokeNext(Object object) {
         final ProfileManagerAspect aspect = (ProfileManagerAspect)this.getNext();
         if ( aspect != null ) {
-            aspect.prepare(this, portalProfile);
+            switch (phase) {
+                case PHASE_COPLET_TYPES : aspect.prepareCopletTypes(this, (Collection)object);
+                                          break;
+                case PHASE_COPLET_DEFINITIONS : aspect.prepareCopletDefinitions(this, (Collection)object);
+                                                break;
+                case PHASE_COPLET_INSTANCES : aspect.prepareCopletInstances(this, (Collection)object);
+                                              break;
+                case PHASE_COPLET_LAYOUT : aspect.prepareLayout(this, (Layout)object);
+                                           break;
+            }
+        } else {
+            this.result = object;
         }
+    }
+
+    public Object getResult() {
+        return this.result;
     }
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-impl/src/main/java/org/apache/cocoon/portal/pluto/TestProfileManager.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-impl/src/main/java/org/apache/cocoon/portal/pluto/TestProfileManager.java?view=diff&rev=487353&r1=487352&r2=487353
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-impl/src/main/java/org/apache/cocoon/portal/pluto/TestProfileManager.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-impl/src/main/java/org/apache/cocoon/portal/pluto/TestProfileManager.java Thu Dec 14 13:19:04 2006
@@ -102,14 +102,11 @@
                         }
                     }
                 }
-                profile.setCopletInstances(instances);
-                this.prepareObject(profile, instances);
-                this.prepareObject(profile, rootLayout);
-                profile.setRootLayout(rootLayout);
+                profile.setCopletInstances(this.processCopletInstances(profile, instances));
+                profile.setRootLayout(this.processLayout(profile, rootLayout));
     
-                final Profile processedProfile = this.processProfile(profile);    
-                this.storeUserProfile(processedProfile);
-                return processedProfile;
+                this.storeUserProfile(profile);
+                return profile;
             } catch (ProfileException e) {
                 throw e;
             } catch (Exception e) {