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/11/30 00:21:20 UTC

svn commit: r599623 - in /cocoon/trunk/blocks/cocoon-portal: cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/ cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/persistence/castor/ cocoon-portal-impl/src/main/java/org/apache/cocoon/...

Author: cziegeler
Date: Thu Nov 29 15:21:15 2007
New Revision: 599623

URL: http://svn.apache.org/viewvc?rev=599623&view=rev
Log:
Create new element to simplify layout type definition in spring bean definitions; adjust castor mapping and remove old layout factory.

Added:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/LayoutTypeDefinitionParser.java   (with props)
Removed:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/DefaultLayoutFactory.java
Modified:
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/CompositeLayout.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/CopletLayout.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/FrameLayout.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/Layout.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LayoutType.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LinkLayout.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/persistence/castor/ReferenceFieldHandler.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileLS.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/profile/impl/ProfileHolder.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/LayoutFactory.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/NewDefaultLayoutFactory.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/PortalNamespaceHandler.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/persistence/castor/layout.xml
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/spring/schema/cocoon-portal-1.0.xsd
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-portlet-impl/src/main/java/org/apache/cocoon/portal/pluto/TestProfileManager.java
    cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/layout-types.xml

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/CompositeLayout.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/CompositeLayout.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/CompositeLayout.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/CompositeLayout.java Thu Nov 29 15:21:15 2007
@@ -36,10 +36,9 @@
      * Never create a layout object directly. Use the
      * {@link org.apache.cocoon.portal.services.LayoutFactory} instead.
      * @param id The unique identifier of the layout object or null.
-     * @param type The layout type.
      */
-    public CompositeLayout(String id, LayoutType type) {
-        super(id, type);
+    public CompositeLayout(String id) {
+        super(id);
     }
 
     /**

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/CopletLayout.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/CopletLayout.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/CopletLayout.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/CopletLayout.java Thu Nov 29 15:21:15 2007
@@ -31,10 +31,9 @@
      * Never create a layout object directly. Use the
      * {@link org.apache.cocoon.portal.services.LayoutFactory} instead.
      * @param id The unique identifier of the layout object or null.
-     * @param type The layout type.
      */
-    public CopletLayout(String id, LayoutType type) {
-        super(id, type);
+    public CopletLayout(String id) {
+        super(id);
     }
 
     public void setCopletInstanceId(String cid) {

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/FrameLayout.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/FrameLayout.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/FrameLayout.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/FrameLayout.java Thu Nov 29 15:21:15 2007
@@ -35,10 +35,9 @@
      * Never create a layout object directly. Use the
      * {@link org.apache.cocoon.portal.services.LayoutFactory} instead.
      * @param id The unique identifier of the layout object or null.
-     * @param type The layout type.
      */
-    public FrameLayout(String id, LayoutType type) {
-        super(id, type);
+    public FrameLayout(String id) {
+        super(id);
     }
 
     /**

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/Layout.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/Layout.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/Layout.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/Layout.java Thu Nov 29 15:21:15 2007
@@ -55,7 +55,7 @@
     protected boolean isStatic;
 
     /** The corresponding layout type. */
-    protected final LayoutType layoutType;
+    protected LayoutType layoutType;
 
     /** The optional renderer to render this layout. If this layout should use
      * a different renderer than the default renderer, this property will point
@@ -68,10 +68,9 @@
      * Never create a layout object directly. Use the
      * {@link LayoutFactory} instead.
      * @param id The unique identifier of the layout object or null.
-     * @param type The type of the layout.
      * @see PortalUtils#testId(String)
      */
-    public Layout(String id, LayoutType type) {
+    public Layout(String id) {
         // check id, null for id is allowed!
         if ( id != null ) {
             final String idErrorMsg = PortalUtils.testId(id);
@@ -80,7 +79,6 @@
             }
         }
         this.id = id;
-        this.layoutType = type;
     }
 
     /**
@@ -189,8 +187,19 @@
         }
     }
 
+    /**
+     * The type of the layout object.
+     * @return A layout type.
+     */
     public LayoutType getLayoutType() {
         return this.layoutType;
+    }
+
+    /**
+     * Set the type of the layout object.
+     */
+    public void setLayoutType(final LayoutType t) {
+        this.layoutType = t;
     }
 
     /**

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LayoutType.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LayoutType.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LayoutType.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LayoutType.java Thu Nov 29 15:21:15 2007
@@ -49,6 +49,13 @@
     /** TODO */
     protected boolean defaultIsStatic = false;
 
+    /** The unique id of this layout type. */
+    protected final String id;
+
+    public LayoutType(String typeId) {
+        this.id = typeId;
+    }
+
     public Renderer getDefaultRenderer() {
         return (Renderer) renderers.get(0);
     }
@@ -116,5 +123,13 @@
 
     public void setDefaultIsStatic(boolean value) {
         this.defaultIsStatic = value;
+    }
+
+    /**
+     * Return the unique id of this layout type.
+     * @return A non-null identifier.
+     */
+    public String getId() {
+        return this.id;
     }
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LinkLayout.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LinkLayout.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LinkLayout.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/om/LinkLayout.java Thu Nov 29 15:21:15 2007
@@ -35,10 +35,9 @@
      * Never create a layout object directly. Use the
      * {@link org.apache.cocoon.portal.services.LayoutFactory} instead.
      * @param id The unique identifier of the layout object or null.
-     * @param type The layout type.
      */
-    public LinkLayout(String id, LayoutType type) {
-        super(id, type);
+    public LinkLayout(String id) {
+        super(id);
     }
 
     public String getLayoutId() {

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/persistence/castor/ReferenceFieldHandler.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/persistence/castor/ReferenceFieldHandler.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/persistence/castor/ReferenceFieldHandler.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/persistence/castor/ReferenceFieldHandler.java Thu Nov 29 15:21:15 2007
@@ -21,6 +21,8 @@
 import org.apache.cocoon.portal.om.CopletDefinition;
 import org.apache.cocoon.portal.om.CopletInstance;
 import org.apache.cocoon.portal.om.CopletType;
+import org.apache.cocoon.portal.om.Layout;
+import org.apache.cocoon.portal.om.LayoutType;
 import org.exolab.castor.mapping.AbstractFieldHandler;
 
 /**
@@ -40,6 +42,9 @@
         if ( object instanceof CopletInstance ) {
             return ((CopletInstance)object).getCopletDefinition().getId();
         }
+        if ( object instanceof Layout ) {
+            return ((Layout)object).getLayoutType().getId();
+        }
         return null;
     }
 
@@ -67,6 +72,9 @@
         if ( object instanceof CopletInstance ) {
             ((CopletInstance)object).setCopletDefinition(null);
         }
+        if ( object instanceof Layout ) {
+            ((Layout)object).setLayoutType(null);
+        }
     }
 
     /**
@@ -80,6 +88,9 @@
         }
         if ( object instanceof CopletInstance ) {
             ((CopletInstance)object).setCopletDefinition((CopletDefinition)reference);
+        }
+        if ( object instanceof Layout ) {
+            ((Layout)object).setLayoutType((LayoutType)reference);
         }
     }
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileLS.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileLS.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileLS.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/ProfileLS.java Thu Nov 29 15:21:15 2007
@@ -22,6 +22,17 @@
 
 /**
  * This component is used for loading/saving of a profile.
+ *
+ * The load/save method is able to load/save the various parts of the profile.
+ * The correct profile type is specified by a constant. For resolving
+ * references during loading an object map is passsed to the loadProfile method.
+ * This object map varies depending on the profile type:
+ * PROFILETYPE_LAYOUT: A map with layout types.
+ * PROFILETYPE_LAYOUTINSTANCE: -
+ * PROFILETYPE_COPLETTYPE: -
+ * PROFILETYPE_COPLETDEFINITION: A map with coplet types.
+ * PROFILETYPE_COPLETINSTANCE: A map with coplet definitions
+ *
  * @version $Id$
  */
 public interface ProfileLS {
@@ -40,10 +51,10 @@
      * @param key The key to identifier the profile. This key contains information
      *            like user etc.
      * @param profileType The type of the profile (instances, types, layouts etc. )
-     * @param objectMap Map with object which might be references by the profile.
+     * @param objectMap Map with objects which might be references by the profile.
      */
     Object loadProfile(Object key, String profileType, Map objectMap)
-    throws Exception;  
+    throws Exception;
 
     /**
      * Save a profile.
@@ -52,7 +63,7 @@
      * @param profileType The type of the profile (instances, types, layouts etc. )
      * @param profile The profile itself.
      */
-    void saveProfile(Object key, String profileType, Object profile) throws Exception;  
+    void saveProfile(Object key, String profileType, Object profile) throws Exception;
 
     /**
      * Get the validity of a profile.

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?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- 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 Nov 29 15:21:15 2007
@@ -58,17 +58,17 @@
  * each user has belong to exactly one group.
  * In the case that the user does not belong to a group, a global
  * profile is loaded.
- * 
+ *
  * This profile manager does not check for changes of the profile,
  * which means for example once a global profile is loaded, it is
  * used until Cocoon is restarted. (This will be changed later on)
- * 
+ *
  * THIS IS A WORK IN PROGRESS - IT'S NOT FINISHED YET
- * 
+ *
  * @version $Id$
  */
-public class GroupBasedProfileManager 
-    extends AbstractProfileManager { 
+public class GroupBasedProfileManager
+    extends AbstractProfileManager {
 
     public static final String CATEGORY_GLOBAL = "global";
     public static final String CATEGORY_GROUP  = "group";
@@ -282,11 +282,12 @@
      * This loads the profile for the current user. First the default profile is read. This might
      * contain links to other profiles which are then loaded recursively.
      */
-    protected ProfileHolder loadProfile() 
+    protected ProfileHolder loadProfile()
     throws ProfileException {
         final String defaultProfileName = this.portalService.getUserService().getDefaultProfileName();
         final PortalUser user = this.portalService.getUserService().getUser();
         ProfileHolder profile = new ProfileHolder();
+        profile.setLayoutTypes(this.portalService.getLayoutFactory().getLayoutTypes());
 
         try {
             // first "load" the global data
@@ -294,7 +295,7 @@
             // FIXME - We should be able to merge definitions from various locations
             //         This could also be handled by aspects?
             profile.setCopletDefinitions( this.getGlobalCopletDefinitions(user, profile) );
-    
+
             // now load the user/group specific data
             this.loadProfile(profile, user, defaultProfileName);
             // FIXME - Traverse the layout tree for link layouts
@@ -317,14 +318,14 @@
                     }
                 }
             }
-    
+
             if ( !this.getLayout(profile, user, CATEGORY_USER, profileName) ) {
                 if ( user.getGroups().size() == 0 || !this.getLayout(profile, user, CATEGORY_GROUP, profileName)) {
                     if ( !this.getLayout(profile, user, CATEGORY_GLOBAL, profileName) ) {
                         throw new ProcessingException("No profile for layout found.");
                     }
                 }
-            }        
+            }
         } catch (ProfileException e) {
             throw e;
         } catch (Exception e) {
@@ -493,7 +494,7 @@
                                       true,
                                       layoutKey);
         try {
-            Layout l = (Layout)loader.loadProfile(key, ProfileLS.PROFILETYPE_LAYOUT, profile.getCopletInstancesMap());
+            Layout l = (Layout)loader.loadProfile(key, ProfileLS.PROFILETYPE_LAYOUT, profile.getLayoutTypesMap());
             l = this.processLayout(profile, l);
             profile.setRootLayout(l);
 
@@ -522,7 +523,7 @@
         if ( load ) {
             config.append("load");
         } else {
-            config.append("save");            
+            config.append("save");
         }
         final String uri = this.configuration.getProperty(config.toString());
         if ( uri == null ) {
@@ -572,7 +573,7 @@
         try {
             final ProfileHolder profile = this.getUserProfile();
             final Map key = this.buildKey(CATEGORY_USER,
-                                          ProfileLS.PROFILETYPE_LAYOUTINSTANCE, 
+                                          ProfileLS.PROFILETYPE_LAYOUTINSTANCE,
                                           this.portalService.getUserService().getUser(),
                                           false,
                                           null);
@@ -605,7 +606,7 @@
                 throw e;
             } catch (Exception e) {
                 throw new ProfileException("Unable to load global coplet types.", e);
-            }            
+            }
         }
         return this.copletTypes.objects.values();
     }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ProfileHolder.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ProfileHolder.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ProfileHolder.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/ProfileHolder.java Thu Nov 29 15:21:15 2007
@@ -30,6 +30,7 @@
 import org.apache.cocoon.portal.om.Item;
 import org.apache.cocoon.portal.om.Layout;
 import org.apache.cocoon.portal.om.LayoutInstance;
+import org.apache.cocoon.portal.om.LayoutType;
 
 /**
  * This class is an utility class holding all profile information of the
@@ -61,6 +62,9 @@
     /** The root element of the layout. */
     protected Layout rootLayout;
 
+    /** A map of all layout types. */
+    protected Map layoutTypes;
+
     /**
      * Set the root layout for this profile.
      */
@@ -234,7 +238,7 @@
                     this.traverseLayouts( current.getLayout() );
                 }
             }
-        }        
+        }
     }
 
     /**
@@ -311,5 +315,19 @@
 
     public Map getCopletTypesMap() {
         return this.copletTypes;
+    }
+
+    public Map getLayoutTypesMap() {
+        return this.layoutTypes;
+    }
+
+    public void setLayoutTypes(final Collection c) {
+        final Map types = new HashMap();
+        final Iterator i = c.iterator();
+        while ( i.hasNext() ) {
+            final LayoutType layoutType = (LayoutType)i.next();
+            types.put(layoutType.getId(), layoutType);
+        }
+        this.layoutTypes = types;
     }
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java Thu Nov 29 15:21:15 2007
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.cocoon.portal.PortalRuntimeException;
 import org.apache.cocoon.portal.om.CompositeLayout;
 import org.apache.cocoon.portal.om.CopletDefinition;
 import org.apache.cocoon.portal.om.CopletInstance;
@@ -30,9 +31,8 @@
 import org.apache.cocoon.portal.om.Item;
 import org.apache.cocoon.portal.om.Layout;
 import org.apache.cocoon.portal.om.LayoutInstance;
-import org.apache.cocoon.portal.profile.ProfileLS;
 import org.apache.cocoon.portal.profile.ProfileException;
-import org.apache.cocoon.portal.PortalRuntimeException;
+import org.apache.cocoon.portal.profile.ProfileLS;
 import org.apache.commons.collections.map.LinkedMap;
 import org.apache.commons.collections.map.StaticBucketMap;
 import org.apache.excalibur.source.SourceValidity;
@@ -43,8 +43,8 @@
  * FIXME - Events for adding/removing coplet instances/layouts not implemented yet
  * @version $Id$
  */
-public class StaticProfileManager 
-    extends AbstractProfileManager { 
+public class StaticProfileManager
+    extends AbstractProfileManager {
 
     protected String profilesPath = "cocoon:/profiles";
 
@@ -84,15 +84,6 @@
                     return layout;
             }
 
-            // put instances into map
-            Collection c = this.loadCopletInstances();
-            final Map objectMap = new HashMap();
-            final Iterator i = c.iterator();
-            while ( i.hasNext() ) {
-                CopletInstance current = (CopletInstance)i.next();
-                objectMap.put(current.getId(), current);
-            }
-
             // load layout
             final Map map = new LinkedMap();
             map.put("base", this.profilesPath);
@@ -108,7 +99,7 @@
             }
 
             // get Layout specified in the map
-            Layout layout = (Layout) this.loader.loadProfile(map, ProfileLS.PROFILETYPE_LAYOUT, objectMap);
+            Layout layout = (Layout) this.loader.loadProfile(map, ProfileLS.PROFILETYPE_LAYOUT, null);
             layout = this.processLayout(null, layout);
 
             final Map layouts = new HashMap();
@@ -150,7 +141,7 @@
         }
     }
 
-    private Map getCopletDefinitionManager() 
+    private Map getCopletDefinitionManager()
     throws Exception {
         final String portalName = this.portalService.getPortalName();
         // ensure that profile is loaded
@@ -158,7 +149,7 @@
         return (Map)this.copletDefinitions.get(portalName);
     }
 
-    private Collection loadCopletInstances() 
+    private Collection loadCopletInstances()
     throws Exception {
         String portalName = this.portalService.getPortalName();
         Collection instances = (Collection) this.copletInstances.get(portalName);

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/LayoutFactory.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/LayoutFactory.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/LayoutFactory.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/LayoutFactory.java Thu Nov 29 15:21:15 2007
@@ -22,6 +22,7 @@
 import org.apache.cocoon.portal.om.Layout;
 import org.apache.cocoon.portal.om.LayoutException;
 import org.apache.cocoon.portal.om.LayoutInstance;
+import org.apache.cocoon.portal.om.LayoutType;
 
 /**
  * This factory is for creating and managing layout objects.
@@ -32,7 +33,7 @@
 
     /**
      * Return all available types.
-     * TODO - Do we need this?
+     * @return A non-null collection of {@link LayoutType}s.
      */
     Collection getLayoutTypes();
 

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/NewDefaultLayoutFactory.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/NewDefaultLayoutFactory.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/NewDefaultLayoutFactory.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/services/impl/NewDefaultLayoutFactory.java Thu Nov 29 15:21:15 2007
@@ -149,7 +149,7 @@
      * @see org.apache.cocoon.portal.services.LayoutFactory#getLayoutTypes()
      */
     public Collection getLayoutTypes() {
-        return this.layoutTypes.keySet();
+        return this.layoutTypes.values();
     }
 
     /**

Added: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/LayoutTypeDefinitionParser.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/LayoutTypeDefinitionParser.java?rev=599623&view=auto
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/LayoutTypeDefinitionParser.java (added)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/LayoutTypeDefinitionParser.java Thu Nov 29 15:21:15 2007
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.portal.spring;
+
+import org.apache.cocoon.portal.layout.renderer.Renderer;
+import org.apache.cocoon.portal.om.LayoutType;
+import org.apache.cocoon.spring.configurator.impl.AbstractElementParser;
+import org.springframework.beans.factory.BeanDefinitionStoreException;
+import org.springframework.beans.factory.config.BeanDefinition;
+import org.springframework.beans.factory.config.RuntimeBeanReference;
+import org.springframework.beans.factory.support.ManagedList;
+import org.springframework.beans.factory.support.RootBeanDefinition;
+import org.springframework.beans.factory.xml.ParserContext;
+import org.w3c.dom.Element;
+
+/**
+*
+* @version $Id$
+*/
+public class LayoutTypeDefinitionParser extends AbstractElementParser {
+
+    /**
+     * @see org.springframework.beans.factory.xml.BeanDefinitionParser#parse(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext)
+     */
+    public BeanDefinition parse(Element element, ParserContext parserContext) {
+        // create a new bean definition for the layout type
+        RootBeanDefinition beanDef = this.createBeanDefinition(LayoutType.class, null, false);
+        final String layoutTypeId = element.getAttribute("id");
+        beanDef.getConstructorArgumentValues().addIndexedArgumentValue(0, layoutTypeId);
+
+        beanDef.getPropertyValues().addPropertyValue("className", element.getAttribute("layoutClass"));
+        if ( this.getAttributeValue(element, "createLayoutId", null) != null ) {
+            beanDef.getPropertyValues().addPropertyValue("createId", this.getAttributeValue(element, "createLayoutId", "false"));
+        }
+        beanDef.getPropertyValues().addPropertyValue("itemClassName", element.getAttribute("itemClass"));
+        if ( this.getAttributeValue(element, "defaultIsStatic", null) != null ) {
+            beanDef.getPropertyValues().addPropertyValue("defaultIStatic", this.getAttributeValue(element, "defaultIStatic", "false"));
+        }
+
+        final ManagedList rendererBeans = new ManagedList();
+        rendererBeans.setSource(parserContext.getReaderContext().extractSource(element));
+
+        final Element[] rendererElements = this.getChildElements(element, "renderer");
+        for(int i=0; i<rendererElements.length; i++) {
+            final String ref = this.getAttributeValue(rendererElements[i], "ref", null);
+            final String type= this.getAttributeValue(rendererElements[i], "type", null);
+            if ( ref == null && type == null ) {
+                throw new BeanDefinitionStoreException("Element 'renderer' must have either a 'ref' or a 'type' attribute.");
+            }
+            if ( ref != null && type != null ) {
+                throw new BeanDefinitionStoreException("Element 'renderer' must have either a 'ref' or a 'type' attribute, but not both.");
+            }
+            final String beanName = (ref != null ? ref : Renderer.class.getName() + '.' + type);
+            rendererBeans.add(new RuntimeBeanReference(beanName));
+        }
+        beanDef.getPropertyValues().addPropertyValue("renderers", rendererBeans);
+
+        this.register(beanDef, LayoutType.class.getName() + "." + layoutTypeId, parserContext.getRegistry());
+        return null;
+    }
+
+}

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/LayoutTypeDefinitionParser.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/LayoutTypeDefinitionParser.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/PortalNamespaceHandler.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/PortalNamespaceHandler.java?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/PortalNamespaceHandler.java (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/java/org/apache/cocoon/portal/spring/PortalNamespaceHandler.java Thu Nov 29 15:21:15 2007
@@ -37,5 +37,6 @@
         this.registerBeanDefinitionParser("request-processor-aspects", new AspectsBeanDefinitionParser(RequestProcessorAspect.class.getName()));
         this.registerBeanDefinitionParser("response-processor-aspects", new AspectsBeanDefinitionParser(ResponseProcessorAspect.class.getName()));
         this.registerBeanDefinitionParser("profile-manager-aspects", new AspectsBeanDefinitionParser(ProfileManagerAspect.class.getName()));
+        this.registerBeanDefinitionParser("layout-type", new LayoutTypeDefinitionParser());
     }
 }

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/persistence/castor/layout.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/persistence/castor/layout.xml?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/persistence/castor/layout.xml (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/persistence/castor/layout.xml Thu Nov 29 15:21:15 2007
@@ -39,6 +39,12 @@
     <field name="static" type="java.lang.Boolean" set-method="setIsStatic" get-method="isStatic">
       <bind-xml name="static" node="attribute"/>
     </field>
+
+    <field name="layoutType"
+           type="java.lang.String"
+           handler="org.apache.cocoon.portal.persistence.castor.ReferenceFieldHandler">
+      <bind-xml name="type" node="attribute"/>
+    </field>
   </class>
 
   <class name="org.apache.cocoon.portal.om.LinkLayout"
@@ -50,10 +56,6 @@
       <bind-xml name="id" node="attribute" />
     </field>
 
-    <field name="type" type="java.lang.String" set-method="%2" get-method="getType">
-      <bind-xml name="type" node="attribute"/>
-    </field>
-
     <field name="profileName" type="java.lang.String">
       <bind-xml name="profile-name" node="attribute"/>
     </field>
@@ -71,10 +73,6 @@
       <bind-xml name="id" node="attribute" />
     </field>
 
-    <field name="type" type="java.lang.String" set-method="%2" get-method="getType">
-      <bind-xml name="type" node="attribute"/>
-    </field>
-
     <field name="items" type="org.apache.cocoon.portal.om.Item"
            collection="collection" set-method="addItem" get-method="getItems">
       <bind-xml matches="named-item item"/>
@@ -91,10 +89,6 @@
       <bind-xml name="id" node="attribute" />
     </field>
 
-    <field name="type" type="java.lang.String" set-method="%2" get-method="getType">
-      <bind-xml name="type" node="attribute"/>
-    </field>
-
     <field name="copletInstanceId"
            type="java.lang.String">
       <bind-xml name="coplet-instance"/>
@@ -108,10 +102,6 @@
 
     <field name="id" type="java.lang.String" set-method="%1" get-method="getId">
       <bind-xml name="id" node="attribute" />
-    </field>
-
-    <field name="type" type="java.lang.String" set-method="%2" get-method="getType">
-      <bind-xml name="type" node="attribute"/>
     </field>
 
     <field name="source" type="java.lang.String"/>

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/spring/schema/cocoon-portal-1.0.xsd
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/spring/schema/cocoon-portal-1.0.xsd?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/spring/schema/cocoon-portal-1.0.xsd (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-impl/src/main/resources/org/apache/cocoon/portal/spring/schema/cocoon-portal-1.0.xsd Thu Nov 29 15:21:15 2007
@@ -77,4 +77,22 @@
       <xsd:attribute name="value" type="xsd:string" use="required"/>
     </xsd:complexType>
   </xsd:element>
+  
+  <xsd:element name="layout-type">
+    <xsd:complexType>
+      <xsd:sequence>
+        <xsd:element name="renderer" minOccurs="1" maxOccurs="unbounded">
+          <xsd:complexType>
+            <xsd:attribute name="ref" type="xsd:string" use="optional"/>
+            <xsd:attribute name="type" type="xsd:string" use="optional"/>
+          </xsd:complexType>
+        </xsd:element>
+      </xsd:sequence>
+      <xsd:attribute name="id" type="xsd:ID" use="required"/>
+      <xsd:attribute name="layoutClass" type="xsd:string" use="required"/>
+      <xsd:attribute name="createLayoutId" type="xsd:boolean" use="optional"/>
+      <xsd:attribute name="itemClass" type="xsd:string" use="optional"/>
+      <xsd:attribute name="defaultIsStatic" type="xsd:boolean" use="optional"/>
+    </xsd:complexType>
+  </xsd:element>
 </xsd:schema>

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?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- 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 Nov 29 15:21:15 2007
@@ -74,6 +74,9 @@
                 }
                 final ProfileHolder profile = new ProfileHolder();
 
+                // set global stuff like layout types
+                profile.setLayoutTypes(this.portalService.getLayoutFactory().getLayoutTypes());
+
                 // first "load" the global coplet types
                 profile.setCopletTypes( this.getGlobalCopletTypes() );
                 profile.setCopletDefinitions( this.getGlobalCopletDefinitions( user, profile ) );

Modified: cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/layout-types.xml
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/layout-types.xml?rev=599623&r1=599622&r2=599623&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/layout-types.xml (original)
+++ cocoon/trunk/blocks/cocoon-portal/cocoon-portal-sample/src/main/resources/COB-INF/config/spring/layout-types.xml Thu Nov 29 15:21:15 2007
@@ -27,92 +27,43 @@
                            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
                            http://cocoon.apache.org/schema/portal http://cocoon.apache.org/schema/portal/cocoon-portal-1.0.xsd">
 
-    <bean name="org.apache.cocoon.portal.om.LayoutType.column"
-          class="org.apache.cocoon.portal.om.LayoutType">
-      <property name="className" value="org.apache.cocoon.portal.om.CompositeLayout"/>
-      <property name="renderers">
-        <list>
-          <ref bean="org.apache.cocoon.portal.layout.renderer.Renderer.column"/>
-        </list>
-      </property>
-    </bean>
-
-    <bean name="org.apache.cocoon.portal.om.LayoutType.row"
-          class="org.apache.cocoon.portal.om.LayoutType">
-      <property name="className" value="org.apache.cocoon.portal.om.CompositeLayout"/>
-      <property name="renderers">
-        <list>
-          <ref bean="org.apache.cocoon.portal.layout.renderer.Renderer.row"/>
-        </list>
-      </property>
-    </bean>
-
-    <bean name="org.apache.cocoon.portal.om.LayoutType.tab"
-          class="org.apache.cocoon.portal.om.LayoutType">
-      <property name="className" value="org.apache.cocoon.portal.om.CompositeLayout"/>
-      <property name="itemClassName" value="org.apache.cocoon.portal.om.NamedItem"/>
-      <property name="defaultIsStatic" value="true"/>
-      <property name="renderers">
-        <list>
-          <ref bean="org.apache.cocoon.portal.layout.renderer.Renderer.tab"/>
-        </list>
-      </property>
-    </bean>
-
-    <bean name="org.apache.cocoon.portal.om.LayoutType.rawtab"
-          class="org.apache.cocoon.portal.om.LayoutType">
-      <property name="className" value="org.apache.cocoon.portal.om.CompositeLayout"/>
-      <property name="itemClassName" value="org.apache.cocoon.portal.om.NamedItem"/>
-      <property name="renderers">
-        <list>
-          <ref bean="org.apache.cocoon.portal.layout.renderer.Renderer.rawtab"/>
-        </list>
-      </property>
-    </bean>
-
-    <bean name="org.apache.cocoon.portal.om.LayoutType.linktab"
-          class="org.apache.cocoon.portal.om.LayoutType">
-      <property name="className" value="org.apache.cocoon.portal.om.CompositeLayout"/>
-      <property name="itemClassName" value="org.apache.cocoon.portal.om.NamedItem"/>
-      <property name="defaultIsStatic" value="true"/>
-      <property name="renderers">
-        <list>
-          <ref bean="org.apache.cocoon.portal.layout.renderer.Renderer.linktab"/>
-        </list>
-      </property>
-    </bean>
-
-    <bean name="org.apache.cocoon.portal.om.LayoutType.frame"
-          class="org.apache.cocoon.portal.om.LayoutType">
-      <property name="className" value="org.apache.cocoon.portal.om.FrameLayout"/>
-      <property name="createId" value="true"/>
-      <property name="renderers">
-        <list>
-          <ref bean="org.apache.cocoon.portal.layout.renderer.Renderer.frame"/>
-        </list>
-      </property>
-    </bean>
-
-    <bean name="org.apache.cocoon.portal.om.LayoutType.coplet"
-          class="org.apache.cocoon.portal.om.LayoutType">
-      <property name="className" value="org.apache.cocoon.portal.om.CopletLayout"/>
-      <property name="renderers">
-        <list>
-          <ref bean="org.apache.cocoon.portal.layout.renderer.Renderer.window"/>
-          <ref bean="org.apache.cocoon.portal.layout.renderer.Renderer.nowindow"/>
-          <ref bean="org.apache.cocoon.portal.layout.renderer.Renderer.borderless-window"/>
-        </list>
-      </property>
-    </bean>
-
-    <bean name="org.apache.cocoon.portal.om.LayoutType.link"
-          class="org.apache.cocoon.portal.om.LayoutType">
-      <property name="className" value="org.apache.cocoon.portal.om.LinkLayout"/>
-      <property name="createId" value="true"/>
-      <property name="renderers">
-        <list>
-          <ref bean="org.apache.cocoon.portal.layout.renderer.Renderer.link"/>
-        </list>
-      </property>
-    </bean>
+    <portal:layout-type id="column" layoutClass="org.apache.cocoon.portal.om.CompositeLayout">
+      <portal:renderer type="column"/>
+    </portal:layout-type>
+
+    <portal:layout-type id="row" layoutClass="org.apache.cocoon.portal.om.CompositeLayout">
+      <portal:renderer type="row"/>
+    </portal:layout-type>
+
+    <portal:layout-type id="tab" layoutClass="org.apache.cocoon.portal.om.CompositeLayout"
+                        itemClassName="org.apache.cocoon.portal.om.NamedItem"
+                        createLayoutId="true" defaultIsStatic="true">
+      <portal:renderer type="tab"/>
+    </portal:layout-type>
+
+    <portal:layout-type id="rawtab" layoutClass="org.apache.cocoon.portal.om.CompositeLayout"
+                        itemClassName="org.apache.cocoon.portal.om.NamedItem"
+                        createLayoutId="true" defaultIsStatic="true">
+      <portal:renderer type="rawtab"/>
+    </portal:layout-type>
+
+    <portal:layout-type id="linktab" layoutClass="org.apache.cocoon.portal.om.CompositeLayout"
+                        itemClassName="org.apache.cocoon.portal.om.NamedItem"
+                        createLayoutId="true" defaultIsStatic="true">
+      <portal:renderer type="linktab"/>
+    </portal:layout-type>
+
+    <portal:layout-type id="frame" layoutClass="org.apache.cocoon.portal.om.FrameLayout" createLayoutId="true">
+      <portal:renderer type="frame"/>
+    </portal:layout-type>
+
+    <portal:layout-type id="link" layoutClass="org.apache.cocoon.portal.om.LinkLayout" createLayoutId="true">
+      <portal:renderer type="link"/>
+    </portal:layout-type>
+
+    <portal:layout-type id="coplet" layoutClass="org.apache.cocoon.portal.om.CopletLayout">
+      <portal:renderer type="window"/>
+      <portal:renderer type="nowindow"/>
+      <portal:renderer type="borderless-window"/>
+    </portal:layout-type>
 </beans>