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 2005/10/28 21:27:02 UTC

svn commit: r329272 [1/2] - in /cocoon/blocks: portal-sample/trunk/java/org/apache/cocoon/portal/coplets/basket/ portal/trunk/java/org/apache/cocoon/portal/ portal/trunk/java/org/apache/cocoon/portal/authenticationfw/ portal/trunk/java/org/apache/cocoo...

Author: cziegeler
Date: Fri Oct 28 12:19:23 2005
New Revision: 329272

URL: http://svn.apache.org/viewcvs?rev=329272&view=rev
Log:
Add some docs, clean up layout creation

Added:
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalRuntimeException.java   (with props)
Modified:
    cocoon/blocks/portal-sample/trunk/java/org/apache/cocoon/portal/coplets/basket/BasketManagerImpl.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalException.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalManager.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/authenticationfw/User.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletBaseData.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletData.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletFactory.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletInstanceData.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/impl/DefaultCopletFactory.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/event/impl/DefaultEventConverter.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/DefaultPortalComponentManager.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/PageLabelManager.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/PortalManagerImpl.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/AbstractLayout.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/CompositeLayout.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/Layout.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/LayoutDescription.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/LayoutFactory.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/CompositeLayoutImpl.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/CopletLayout.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutDescription.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/FrameLayout.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/LinkLayout.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/persistence/castor/layout.xml
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/pluto/PortletContainerEnvironmentImpl.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/pluto/PortletURLProviderImpl.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/profile/ProfileException.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/profile/impl/GroupBasedProfileManager.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/profile/impl/StaticProfileManager.java
    cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/tools/copletManagement/LayoutActions.java

Modified: cocoon/blocks/portal-sample/trunk/java/org/apache/cocoon/portal/coplets/basket/BasketManagerImpl.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal-sample/trunk/java/org/apache/cocoon/portal/coplets/basket/BasketManagerImpl.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal-sample/trunk/java/org/apache/cocoon/portal/coplets/basket/BasketManagerImpl.java (original)
+++ cocoon/blocks/portal-sample/trunk/java/org/apache/cocoon/portal/coplets/basket/BasketManagerImpl.java Fri Oct 28 12:19:23 2005
@@ -30,41 +30,35 @@
 import java.util.Map;
 
 import org.apache.avalon.excalibur.io.IOUtil;
-import org.apache.avalon.framework.activity.Disposable;
-import org.apache.avalon.framework.activity.Initializable;
 import org.apache.avalon.framework.context.Context;
 import org.apache.avalon.framework.context.ContextException;
-import org.apache.avalon.framework.context.Contextualizable;
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.avalon.framework.parameters.ParameterException;
 import org.apache.avalon.framework.parameters.Parameterizable;
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.avalon.framework.service.Serviceable;
-import org.apache.avalon.framework.thread.ThreadSafe;
 import org.apache.cocoon.Constants;
-import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.components.ContextHelper;
 import org.apache.cocoon.components.cron.CronJob;
 import org.apache.cocoon.components.cron.JobScheduler;
 import org.apache.cocoon.components.cron.ServiceableCronJob;
 import org.apache.cocoon.environment.Request;
 import org.apache.cocoon.environment.Session;
+import org.apache.cocoon.portal.PortalException;
 import org.apache.cocoon.portal.PortalService;
 import org.apache.cocoon.portal.coplet.CopletData;
 import org.apache.cocoon.portal.coplet.CopletInstanceData;
 import org.apache.cocoon.portal.coplets.basket.events.AddItemEvent;
-import org.apache.cocoon.portal.coplets.basket.events.ContentStoreEvent;
 import org.apache.cocoon.portal.coplets.basket.events.CleanBriefcaseEvent;
+import org.apache.cocoon.portal.coplets.basket.events.ContentStoreEvent;
 import org.apache.cocoon.portal.coplets.basket.events.MoveItemEvent;
 import org.apache.cocoon.portal.coplets.basket.events.RefreshBasketEvent;
 import org.apache.cocoon.portal.coplets.basket.events.RemoveItemEvent;
 import org.apache.cocoon.portal.coplets.basket.events.ShowBasketEvent;
 import org.apache.cocoon.portal.coplets.basket.events.ShowItemEvent;
 import org.apache.cocoon.portal.coplets.basket.events.UploadItemEvent;
-import org.apache.cocoon.portal.event.EventManager;
 import org.apache.cocoon.portal.event.Receiver;
+import org.apache.cocoon.portal.impl.AbstractComponent;
 import org.apache.cocoon.portal.layout.impl.CopletLayout;
 import org.apache.cocoon.servlet.multipart.Part;
 import org.apache.cocoon.servlet.multipart.PartOnDisk;
@@ -78,14 +72,8 @@
  * @version $Id$
  */
 public class BasketManagerImpl
-extends AbstractLogEnabled
-implements BasketManager, Serviceable, Receiver, Contextualizable, Initializable, Disposable, Parameterizable, ThreadSafe  {
-
-    /** The service manager */
-    protected ServiceManager manager;
-
-    /** The component context */
-    protected Context context;
+    extends AbstractComponent
+    implements BasketManager, Receiver, Parameterizable {
 
     /** The configuration for storing baskets */
     protected String directory;
@@ -140,7 +128,7 @@
      * @see org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context)
      */
     public void contextualize(Context context) throws ContextException {
-        this.context = context;
+        super.contextualize(context);
         this.directory = ((File)context.get(Constants.CONTEXT_WORK_DIR)).getAbsolutePath();
     }
 
@@ -148,7 +136,7 @@
      * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
      */
     public void service(ServiceManager manager) throws ServiceException {
-        this.manager = manager;
+        super.service(manager);
         this.scheduler = (JobScheduler)this.manager.lookup(JobScheduler.ROLE);
     }
 
@@ -159,21 +147,8 @@
         if ( this.manager != null ) {
             this.manager.release(this.scheduler);
             this.scheduler = null;
-            this.manager = null;
-        }
-    }
-
-    /**
-     * @see org.apache.avalon.framework.activity.Initializable#initialize()
-     */
-    public void initialize() throws Exception {
-        EventManager eventManager = null;
-        try {
-            eventManager = (EventManager) this.manager.lookup(EventManager.ROLE);
-            eventManager.subscribe(this);
-        } finally {
-            this.manager.release(eventManager);
         }
+        super.dispose();
     }
 
     /**
@@ -253,16 +228,14 @@
      */
     protected void processShowItemEvent(ShowItemEvent event) {
         if ( event.getItem() instanceof ContentItem ) {
-            PortalService service = null;
             try {
-                service = (PortalService) this.manager.lookup(PortalService.ROLE);
 
                 ContentItem ci = (ContentItem)event.getItem();
                 CopletLayout layout = (CopletLayout) event.getLayout();
                 CopletInstanceData cid = null;
                 if ( ci.isContent() ) {
-                    CopletData copletData = service.getComponentManager().getProfileManager().getCopletData(event.getCopletDataId());
-                    cid = service.getComponentManager().getCopletFactory().newInstance(copletData);
+                    CopletData copletData = this.portalService.getComponentManager().getProfileManager().getCopletData(event.getCopletDataId());
+                    cid = this.portalService.getComponentManager().getCopletFactory().newInstance(copletData);
                     cid.setAttribute("item-content", ci.getContent());                
                 } else {
                     if ( ci.getURL() != null ) {
@@ -273,8 +246,8 @@
                             resolver = (SourceResolver)this.manager.lookup(SourceResolver.ROLE);
                             url = ci.getURL();
                             source = resolver.resolveURI(url);
-                            CopletData copletData = service.getComponentManager().getProfileManager().getCopletData(event.getCopletDataId());
-                            cid = service.getComponentManager().getCopletFactory().newInstance(copletData);
+                            CopletData copletData = this.portalService.getComponentManager().getProfileManager().getCopletData(event.getCopletDataId());
+                            cid = this.portalService.getComponentManager().getCopletFactory().newInstance(copletData);
                             cid.setAttribute("item-content", IOUtil.toByteArray(source.getInputStream()));
                         } catch (IOException se) {
                             this.getLogger().warn("Unable to get content for " + url, se);
@@ -288,9 +261,9 @@
                         }
                         
                     } else {
-                        final CopletInstanceData original = service.getComponentManager().getProfileManager().getCopletInstanceData(ci.getCopletId());
+                        final CopletInstanceData original = this.portalService.getComponentManager().getProfileManager().getCopletInstanceData(ci.getCopletId());
                         final CopletData copletData = original.getCopletData();
-                        cid = service.getComponentManager().getCopletFactory().newInstance(copletData);
+                        cid = this.portalService.getComponentManager().getCopletFactory().newInstance(copletData);
                         Map attributes = (Map) ci.getAttribute("coplet-attributes");
                         Iterator i = attributes.entrySet().iterator();
                         while ( i.hasNext() ) {
@@ -307,12 +280,8 @@
                     }
                 }
                 layout.setCopletInstanceData(cid);
-            } catch (ProcessingException pe) {
+            } catch (PortalException pe) {
                 this.getLogger().warn("Unable to create new instance.", pe);
-            } catch (ServiceException se) {
-                this.getLogger().warn("Unable to lookup portal service.", se);
-            } finally {
-                this.manager.release(service);
             }
         }
     }
@@ -383,56 +352,17 @@
         if ( item instanceof ContentItem ) {
             ContentItem ci = (ContentItem)item;
 
-                if ( ci.isContent() ) {
-                    SourceResolver resolver = null;
-                    Source source = null;
-                    String url = null;
-                    try {
-                        resolver = (SourceResolver)this.manager.lookup(SourceResolver.ROLE);
-                        url = ci.getURL();
-                        if ( url == null ) {
+            if ( ci.isContent() ) {
+                SourceResolver resolver = null;
+                Source source = null;
+                String url = null;
+                try {
+                    resolver = (SourceResolver)this.manager.lookup(SourceResolver.ROLE);
+                    url = ci.getURL();
+                    if ( url == null ) {
                         // copy coplet attributes
-                        PortalService service = null;
-                        try {
-                            service = (PortalService) this.manager.lookup(PortalService.ROLE);
-                            CopletInstanceData cid = service.getComponentManager().getProfileManager().getCopletInstanceData(ci.getCopletId());
-                            url = "coplet://" + ci.getCopletId();
-                            Map attributes = new HashMap();
-                            Iterator i = cid.getAttributes().entrySet().iterator();
-                            while ( i.hasNext() ) {
-                                Map.Entry entry = (Map.Entry)i.next();
-                                attributes.put(entry.getKey(), entry.getValue());
-                            }
-                            i = cid.getCopletData().getAttributes().entrySet().iterator();
-                            while ( i.hasNext() ) {
-                                Map.Entry entry = (Map.Entry)i.next();
-                                attributes.put(entry.getKey(), entry.getValue());
-                            }
-                            ci.setAttribute("coplet-attributes", attributes);
-                        } catch (ServiceException se) {
-                            this.getLogger().warn("Unable to lookup portal service.", se);
-                        } finally {
-                            this.manager.release(service);
-                        }
-                        }
-                        source = resolver.resolveURI(url);
-                        ci.setContent(IOUtil.toByteArray(source.getInputStream()));
-                    } catch (IOException se) {
-                        this.getLogger().warn("Unable to get content for " + url, se);
-                    } catch (ServiceException se) {
-                        this.getLogger().warn("Unable to get source resolver.", se);
-                    } finally {
-                        if ( source != null ) {
-                            resolver.release(source);
-                        }
-                        this.manager.release(resolver);
-                    }
-                } else if ( ci.getURL() == null ) {
-                    // copy coplet attributes
-                    PortalService service = null;
-                    try {
-                        service = (PortalService) this.manager.lookup(PortalService.ROLE);
-                        CopletInstanceData cid = service.getComponentManager().getProfileManager().getCopletInstanceData(ci.getCopletId());
+                        CopletInstanceData cid = this.portalService.getComponentManager().getProfileManager().getCopletInstanceData(ci.getCopletId());
+                        url = "coplet://" + ci.getCopletId();
                         Map attributes = new HashMap();
                         Iterator i = cid.getAttributes().entrySet().iterator();
                         while ( i.hasNext() ) {
@@ -445,12 +375,35 @@
                             attributes.put(entry.getKey(), entry.getValue());
                         }
                         ci.setAttribute("coplet-attributes", attributes);
-                    } catch (ServiceException se) {
-                        this.getLogger().warn("Unable to lookup portal service.", se);
-                    } finally {
-                        this.manager.release(service);
                     }
+                    source = resolver.resolveURI(url);
+                    ci.setContent(IOUtil.toByteArray(source.getInputStream()));
+                } catch (IOException se) {
+                    this.getLogger().warn("Unable to get content for " + url, se);
+                } catch (ServiceException se) {
+                    this.getLogger().warn("Unable to get source resolver.", se);
+                } finally {
+                    if ( source != null ) {
+                        resolver.release(source);
+                    }
+                    this.manager.release(resolver);
+                }
+            } else if ( ci.getURL() == null ) {
+                // copy coplet attributes
+                CopletInstanceData cid = this.portalService.getComponentManager().getProfileManager().getCopletInstanceData(ci.getCopletId());
+                Map attributes = new HashMap();
+                Iterator i = cid.getAttributes().entrySet().iterator();
+                while ( i.hasNext() ) {
+                    Map.Entry entry = (Map.Entry)i.next();
+                    attributes.put(entry.getKey(), entry.getValue());
+                }
+                i = cid.getCopletData().getAttributes().entrySet().iterator();
+                while ( i.hasNext() ) {
+                    Map.Entry entry = (Map.Entry)i.next();
+                    attributes.put(entry.getKey(), entry.getValue());
                 }
+                ci.setAttribute("coplet-attributes", attributes);
+            }
             store.addItem(ci);
         } else { 
             store.addItem(item);
@@ -673,17 +626,7 @@
      * Get the current user
      */
     protected String getUser() {
-        PortalService service = null;
-        try {
-            service = (PortalService)this.manager.lookup(PortalService.ROLE);
-            return service.getComponentManager().getProfileManager().getUser().getUserName();
-        } catch (ServiceException ignore) {
-            // ignore this
-        } finally {
-            this.manager.release(service);
-        }
-        return null;
-        
+        return this.portalService.getComponentManager().getProfileManager().getUser().getUserName();        
     }
 
     /**

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalException.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalException.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalException.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalException.java Fri Oct 28 12:19:23 2005
@@ -19,7 +19,8 @@
  *
  * @version $Id$
  */
-public class PortalException extends RuntimeException {
+public class PortalException extends Exception {
+
     public PortalException() {
         super();
     }

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalManager.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalManager.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalManager.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalManager.java Fri Oct 28 12:19:23 2005
@@ -32,11 +32,34 @@
  */
 public interface PortalManager {
 
+    /** This parameter containing a layout id can be passed to the
+     * {@link #showPortal(ContentHandler, Parameters)} method. In this
+     * case only the tree starting with this layout object is rendered.
+     */
+    String PARAMETER_RENDER_LAYOUT = "render-layout";
+
+    /** This parameter containing a coplet instance id can be passed to the
+     * {@link #showPortal(ContentHandler, Parameters)} method. In this
+     * case only the coplet with the surrounding layout is rendered.
+     */
+    String PARAMETER_RENDER_COPLET = "render-coplet";
+
     String ROLE = PortalManager.class.getName();
 
+    /**
+     * Start the first phase of the request handling.
+     * In this phase all events are fired and processed.
+     * @throws ProcessingException
+     */
     void process()
     throws ProcessingException;
 
+    /**
+     * Render the portal.
+     * @param ch         The content handler receiving the sax events.
+     * @param parameters A parameters object.
+     * @throws SAXException
+     */
     void showPortal(ContentHandler ch,
                     Parameters     parameters)
     throws SAXException;

Added: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalRuntimeException.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalRuntimeException.java?rev=329272&view=auto
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalRuntimeException.java (added)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalRuntimeException.java Fri Oct 28 12:19:23 2005
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2005 The Apache Software Foundation.
+ *
+ * Licensed 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;
+
+/**
+ *
+ * @version $Id$
+ */
+public class PortalRuntimeException extends RuntimeException {
+
+    public PortalRuntimeException() {
+        super();
+    }
+
+    public PortalRuntimeException(String message) {
+        super(message);
+    }
+
+    public PortalRuntimeException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public PortalRuntimeException(Throwable cause) {
+        super(cause);
+    }
+}

Propchange: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalRuntimeException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/PortalRuntimeException.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/authenticationfw/User.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/authenticationfw/User.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/authenticationfw/User.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/authenticationfw/User.java Fri Oct 28 12:19:23 2005
@@ -20,7 +20,7 @@
 import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.portal.profile.PortalUser;
 import org.apache.cocoon.portal.profile.impl.AbstractPortalUser;
-import org.apache.cocoon.portal.PortalException;
+import org.apache.cocoon.portal.PortalRuntimeException;
 import org.apache.cocoon.webapps.authentication.AuthenticationManager;
 import org.apache.cocoon.webapps.authentication.user.RequestState;
 import org.apache.cocoon.webapps.authentication.user.UserHandler;
@@ -66,7 +66,7 @@
 
             return info;
         } catch (ServiceException se) {
-            throw new PortalException("Unable to lookup authentication manager.", se);
+            throw new PortalRuntimeException("Unable to lookup authentication manager.", se);
         } finally {
             manager.release( authManager );
         }

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletBaseData.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletBaseData.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletBaseData.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletBaseData.java Fri Oct 28 12:19:23 2005
@@ -34,12 +34,21 @@
 
 	private String copletAdapterName;
 
+    /**
+     * DO NOT USE THIS CONSTRUCTOR - it's just here to keep Castor happy.
+     * Use {@link #CopletBaseData(String)} instead.
+     */
 	public CopletBaseData() {
         // this constructor is just to keep Castor happy (version 0.9.9)
         // we can remove it in later versions
         this.id = null;
+        throw new IllegalArgumentException("Only instantiate a coplet base data with the id constructor.");
     }
 
+    /**
+     * Create a new coplet base data object. 
+     * @param id The unique id of the object.
+     */
     public CopletBaseData(String id) {
         this.id = id;
     }

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletData.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletData.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletData.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletData.java Fri Oct 28 12:19:23 2005
@@ -47,14 +47,20 @@
     protected transient List allowedRolesList;
 
     /**
-     * Constructor
+     * DO NOT USE THIS CONSTRUCTOR - it's just here to keep Castor happy.
+     * Use {@link #CopletData(String)} instead.
      */
     public CopletData() {
         // this constructor is just to keep Castor happy (version 0.9.9)
         // we can remove it in later versions
         this.id = null;
+        throw new IllegalArgumentException("Only instantiate a coplet data with the id constructor.");
     }
 
+    /**
+     * Constructor to instantiate a new coplet data object.
+     * @param id The unique id of the object.
+     */
     public CopletData(String id) {
         this.id = id;
     }

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletFactory.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletFactory.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletFactory.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletFactory.java Fri Oct 28 12:19:23 2005
@@ -15,7 +15,7 @@
  */
 package org.apache.cocoon.portal.coplet;
 
-import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.portal.PortalException;
 
 /**
  * This factory is for creating and managing coplet objects.
@@ -31,7 +31,7 @@
      * This is also registered at the profile manager.
      */
     CopletInstanceData newInstance(CopletData copletData)
-    throws ProcessingException;
+    throws PortalException;
 
     /** 
      * Create a new coplet instance.
@@ -39,12 +39,11 @@
      */
     CopletInstanceData newInstance(CopletData copletData,
                                    String id)
-    throws ProcessingException;
+    throws PortalException;
 
     /**
      * Remove the coplet instance data.
      * This is also unregistered at the profile manager.
      */
-    void remove(CopletInstanceData copletInstanceData)
-    throws ProcessingException;
+    void remove(CopletInstanceData copletInstanceData);
 }

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletInstanceData.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletInstanceData.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletInstanceData.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/CopletInstanceData.java Fri Oct 28 12:19:23 2005
@@ -66,16 +66,21 @@
     protected int size = SIZE_NORMAL;
 
     /**
-     * Constructor.
+     * DO NOT USE THIS CONSTRUCTOR - it's just here to keep Castor happy.
+     * Use {@link #CopletInstanceData(String)} instead.
      */
     public CopletInstanceData() {
         // this constructor is just to keep Castor happy (version 0.9.9)
         // we can remove it in later versions
         this.id = null;
+        throw new IllegalArgumentException("Only instantiate a coplet instance data with the id constructor.");
     }
 
     /**
-	 * Constructor.
+	 * Constructor to create a new coplet instance data object.
+     * Never create a coplet instance data object directly. Use the
+     * {@link CopletFactory} instead.
+     * @param id The unique id of the object.
 	 */
 	public CopletInstanceData(String id) {
         this.id = id;

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/impl/DefaultCopletFactory.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/impl/DefaultCopletFactory.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/impl/DefaultCopletFactory.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/coplet/impl/DefaultCopletFactory.java Fri Oct 28 12:19:23 2005
@@ -17,7 +17,7 @@
 
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceSelector;
-import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.portal.PortalException;
 import org.apache.cocoon.portal.coplet.CopletData;
 import org.apache.cocoon.portal.coplet.CopletFactory;
 import org.apache.cocoon.portal.coplet.CopletInstanceData;
@@ -41,7 +41,7 @@
      * @see org.apache.cocoon.portal.coplet.CopletFactory#newInstance(org.apache.cocoon.portal.coplet.CopletData)
      */
     public CopletInstanceData newInstance(CopletData copletData)
-    throws ProcessingException {
+    throws PortalException {
         return this.newInstance(copletData, null);
     }
 
@@ -49,7 +49,7 @@
      * @see org.apache.cocoon.portal.coplet.CopletFactory#newInstance(org.apache.cocoon.portal.coplet.CopletData, String)
      */
     public CopletInstanceData newInstance(CopletData copletData, String id)
-    throws ProcessingException {
+    throws PortalException {
         if (id == null ) {
             synchronized (this) {
                 id = copletData.getId() + '-' + idCounter;
@@ -69,7 +69,7 @@
             adapter.init( instance );
             adapter.login( instance );
         } catch (ServiceException ce) {
-            throw new ProcessingException("Unable to lookup coplet adapter selector or adaptor.", ce);
+            throw new PortalException("Unable to lookup coplet adapter selector or adaptor.", ce);
         } finally {
             if ( adapterSelector != null) {
                 adapterSelector.release( adapter );
@@ -85,8 +85,7 @@
     /**
      * @see org.apache.cocoon.portal.coplet.CopletFactory#remove(org.apache.cocoon.portal.coplet.CopletInstanceData)
      */
-    public void remove(CopletInstanceData copletInstanceData) 
-    throws ProcessingException {
+    public void remove(CopletInstanceData copletInstanceData) {
         if ( copletInstanceData != null ) {
             // now lookup the adapter
             final String adapterName = copletInstanceData.getCopletData().getCopletBaseData().getCopletAdapterName();
@@ -98,7 +97,8 @@
                 adapter.logout( copletInstanceData );
                 adapter.destroy( copletInstanceData );
             } catch (ServiceException ce) {
-                throw new ProcessingException("Unable to lookup coplet adapter selector or adaptor.", ce);
+                // we ignore this exception as this is just a remove action
+                this.getLogger().warn("Unable to lookup coplet adaptor: " + adapterName);
             } finally {
                 if ( adapterSelector != null) {
                     adapterSelector.release( adapter );

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/event/impl/DefaultEventConverter.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/event/impl/DefaultEventConverter.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/event/impl/DefaultEventConverter.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/event/impl/DefaultEventConverter.java Fri Oct 28 12:19:23 2005
@@ -25,7 +25,7 @@
 import org.apache.avalon.framework.configuration.Configurable;
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.cocoon.portal.PortalException;
+import org.apache.cocoon.portal.PortalRuntimeException;
 import org.apache.cocoon.portal.PortalService;
 import org.apache.cocoon.portal.event.ConvertableEvent;
 import org.apache.cocoon.portal.event.Event;
@@ -84,9 +84,9 @@
             final Class factoryClass = ClassUtils.loadClass(factory);
             return factoryClass.getConstructor(new Class[] {PortalService.class, String.class});
         } catch (NoSuchMethodException nsme) {
-            throw new PortalException("Factory class does not provide required constructor: " + factory, nsme);
+            throw new PortalRuntimeException("Factory class does not provide required constructor: " + factory, nsme);
         } catch (ClassNotFoundException cnfe) {
-            throw new PortalException("Factory class can't be loaded: " + factory, cnfe);
+            throw new PortalRuntimeException("Factory class can't be loaded: " + factory, cnfe);
         }
     }
 

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/DefaultPortalComponentManager.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/DefaultPortalComponentManager.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/DefaultPortalComponentManager.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/DefaultPortalComponentManager.java Fri Oct 28 12:19:23 2005
@@ -97,7 +97,7 @@
             try {
                 this.linkService = (LinkService)this.manager.lookup( LinkService.ROLE );
             } catch (ServiceException e) {
-                throw new PortalException("Unable to lookup link service.", e);
+                throw new PortalRuntimeException("Unable to lookup link service.", e);
             }
         }
         return this.linkService;
@@ -111,7 +111,7 @@
             try {
                 this.profileManager = (ProfileManager)this.manager.lookup( ProfileManager.ROLE );
             } catch (ServiceException e) {
-                throw new PortalException("Unable to lookup profile manager.", e);
+                throw new PortalRuntimeException("Unable to lookup profile manager.", e);
             }
         }
         return this.profileManager;
@@ -125,7 +125,7 @@
             try {
                 this.eventManager = (EventManager)this.manager.lookup( EventManager.ROLE );
             } catch (ServiceException e) {
-                throw new PortalException("Unable to lookup event manager.", e);
+                throw new PortalRuntimeException("Unable to lookup event manager.", e);
             }
         }
         return this.eventManager;
@@ -169,7 +169,7 @@
                 o = (Renderer) this.manager.lookup( Renderer.ROLE + '/' + hint );
                 this.renderers.put( hint, o );
             } catch (ServiceException e) {
-                throw new PortalException("Unable to lookup renderer with hint " + hint, e);
+                throw new PortalRuntimeException("Unable to lookup renderer with hint " + hint, e);
             }
         }
         return o;
@@ -183,7 +183,7 @@
             try {
                 this.copletFactory = (CopletFactory)this.manager.lookup( CopletFactory.ROLE );
             } catch (ServiceException e) {
-                throw new PortalException("Unable to lookup coplet factory.", e);
+                throw new PortalRuntimeException("Unable to lookup coplet factory.", e);
             }
         }
         return this.copletFactory;
@@ -197,7 +197,7 @@
             try {
                 this.layoutFactory = (LayoutFactory)this.manager.lookup( LayoutFactory.ROLE );
             } catch (ServiceException e) {
-                throw new PortalException("Unable to lookup layout factory.", e);
+                throw new PortalRuntimeException("Unable to lookup layout factory.", e);
             }
         }
         return this.layoutFactory;
@@ -211,7 +211,7 @@
             try {
                 this.portalManager = (PortalManager)this.manager.lookup( PortalManager.ROLE );
             } catch (ServiceException e) {
-                throw new PortalException("Unable to lookup portal manager.", e);
+                throw new PortalRuntimeException("Unable to lookup portal manager.", e);
             }
         }
         return this.portalManager;

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/PageLabelManager.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/PageLabelManager.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/PageLabelManager.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/PageLabelManager.java Fri Oct 28 12:19:23 2005
@@ -32,7 +32,7 @@
 import org.apache.cocoon.components.ContextHelper;
 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.PortalService;
 import org.apache.cocoon.portal.event.layout.LayoutChangeParameterEvent;
 import org.apache.cocoon.portal.layout.CompositeLayout;
@@ -157,7 +157,7 @@
 
             return map;
         } catch (ServiceException ce) {
-            throw new PortalException("Unable to lookup component.", ce);
+            throw new PortalRuntimeException("Unable to lookup component.", ce);
         } finally {
             this.manager.release(service);
         }
@@ -189,7 +189,7 @@
 
             return list;
         } catch (ServiceException ce) {
-            throw new PortalException("Unable to lookup component.", ce);
+            throw new PortalRuntimeException("Unable to lookup component.", ce);
         } finally {
             this.manager.release(service);
         }
@@ -210,7 +210,7 @@
             return labels;
         }
         catch (ServiceException ce) {
-            throw new PortalException("Unable to lookup component.", ce);
+            throw new PortalRuntimeException("Unable to lookup component.", ce);
         }
         finally {
             this.manager.release(service);

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/PortalManagerImpl.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/PortalManagerImpl.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/PortalManagerImpl.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/impl/PortalManagerImpl.java Fri Oct 28 12:19:23 2005
@@ -15,20 +15,15 @@
  */
 package org.apache.cocoon.portal.impl;
 
-import org.apache.avalon.framework.activity.Disposable;
 import org.apache.avalon.framework.configuration.Configurable;
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
 import org.apache.avalon.framework.context.Context;
 import org.apache.avalon.framework.context.ContextException;
-import org.apache.avalon.framework.context.Contextualizable;
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.avalon.framework.parameters.Parameters;
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.ServiceSelector;
-import org.apache.avalon.framework.service.Serviceable;
-import org.apache.avalon.framework.thread.ThreadSafe;
 import org.apache.cocoon.ProcessingException;
 import org.apache.cocoon.components.ContextHelper;
 import org.apache.cocoon.portal.PortalManager;
@@ -36,10 +31,14 @@
 import org.apache.cocoon.portal.PortalManagerAspectPrepareContext;
 import org.apache.cocoon.portal.PortalManagerAspectRenderContext;
 import org.apache.cocoon.portal.PortalService;
+import org.apache.cocoon.portal.coplet.CopletInstanceData;
+import org.apache.cocoon.portal.coplet.CopletInstanceDataFeatures;
 import org.apache.cocoon.portal.coplet.adapter.CopletAdapter;
 import org.apache.cocoon.portal.event.EventManager;
 import org.apache.cocoon.portal.layout.Layout;
 import org.apache.cocoon.portal.layout.renderer.Renderer;
+import org.apache.cocoon.portal.profile.ProfileManager;
+import org.apache.commons.lang.StringUtils;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
 
@@ -48,23 +47,14 @@
  * @version $Id$
  */
 public class PortalManagerImpl
-	extends AbstractLogEnabled
-	implements PortalManager, Serviceable, Disposable, ThreadSafe, Contextualizable, PortalManagerAspect, Configurable {
-
-    /** The service manager */
-    protected ServiceManager manager;
-
-    /** The portal service */
-    protected PortalService portalService;
+	extends AbstractComponent
+	implements PortalManager, PortalManagerAspect, Configurable {
 
     protected PortalManagerAspectChain chain;
 
     protected ServiceSelector aspectSelector;
     protected ServiceSelector adapterSelector;
 
-    /** The component context. */
-    protected Context context;
-
     private boolean fullScreenNav;
     public static final String FULLSCREEN = "fullScreenNav";
 
@@ -73,8 +63,7 @@
      */
     public void service(ServiceManager serviceManager)
     throws ServiceException {
-        this.manager = serviceManager;
-        this.portalService = (PortalService)this.manager.lookup(PortalService.ROLE);
+        super.service(serviceManager);
         if ( this.manager.hasService(PortalManagerAspect.ROLE+"Selector") ) {
             this.aspectSelector = (ServiceSelector) this.manager.lookup( PortalManagerAspect.ROLE+"Selector");
         }
@@ -86,9 +75,6 @@
      */
     public void dispose() {
         if ( this.manager != null ) {
-            this.manager.release(this.portalService);
-            this.portalService = null;
-            this.manager = null;
             if ( this.chain != null) {
                 this.chain.dispose( this.aspectSelector, this.adapterSelector );
             }
@@ -96,8 +82,8 @@
             this.aspectSelector = null;
             this.manager.release( this.adapterSelector );
             this.adapterSelector = null;
-            this.manager = null;
         }
+        super.dispose();
     }
 
     /**
@@ -155,16 +141,37 @@
     /**
      * @see org.apache.cocoon.portal.PortalManagerAspect#render(org.apache.cocoon.portal.PortalManagerAspectRenderContext, org.apache.cocoon.portal.PortalService, org.xml.sax.ContentHandler, org.apache.avalon.framework.parameters.Parameters)
      */
-    public void render(PortalManagerAspectRenderContext context, PortalService service, ContentHandler ch, Parameters parameters) throws SAXException {
-        // first check for a full screen layout
-
+    public void render(PortalManagerAspectRenderContext context,
+                       PortalService                    service,
+                       ContentHandler                   ch,
+                       Parameters                       parameters)
+    throws SAXException {
         Layout portalLayout = null;
-        if (!this.fullScreenNav) {
-            // If fullscreen mode - otherwise TabContentAspect will deal with the layout
-            portalLayout = this.portalService.getEntryLayout(null);
+        final ProfileManager profileManager = this.portalService.getComponentManager().getProfileManager();
+
+        // check for parameters
+        final String copletId = parameters.getParameter(PortalManager.PARAMETER_RENDER_COPLET, null);
+        final String layoutId = parameters.getParameter(PortalManager.PARAMETER_RENDER_LAYOUT, null);
+        if ( StringUtils.isNotEmpty(copletId) && StringUtils.isNotEmpty(layoutId) ) {
+            throw new SAXException("Only one of the paramteters can be specified for rendering: coplet or layout.");
         }
-        if ( portalLayout == null ) {
-            portalLayout = this.portalService.getComponentManager().getProfileManager().getPortalLayout(null, null);
+        if ( StringUtils.isNotEmpty(copletId) ) {
+            final CopletInstanceData cid = profileManager.getCopletInstanceData(copletId);
+            if ( cid != null ) {
+                portalLayout = CopletInstanceDataFeatures.searchLayout(cid, profileManager.getPortalLayout(null, null));
+            }
+        } else if ( StringUtils.isNotEmpty(layoutId) ) {
+            portalLayout = profileManager.getPortalLayout(null, layoutId);
+        } else {
+            // first check for a full screen layout
+
+            if (!this.fullScreenNav) {
+                // If fullscreen mode - otherwise TabContentAspect will deal with the layout
+                portalLayout = this.portalService.getEntryLayout(null);
+            }
+            if ( portalLayout == null ) {
+                portalLayout = profileManager.getPortalLayout(null, null);
+            }
         }
         if ( portalLayout == null) {
             getLogger().error("No Layout to render");

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/AbstractLayout.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/AbstractLayout.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/AbstractLayout.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/AbstractLayout.java Fri Oct 28 12:19:23 2005
@@ -17,10 +17,14 @@
 
 import java.util.Map;
 
+import org.apache.cocoon.portal.PortalRuntimeException;
 import org.apache.commons.collections.map.LinkedMap;
 
 /**
- * FIXME - We have to remove the dependency to pluto
+ * This class can be used as a base class for all layout implementations that
+ * represent a leave in the layout tree.
+ * If you want to implement a container layout, use the
+ * {@link org.apache.cocoon.portal.layout.impl.CompositeLayoutImpl} class instead.
  *
  * @version $Id$
  */
@@ -28,63 +32,71 @@
     extends AbstractParameters
     implements Layout {
 
+    /** The renderer to render this layout if this layout object wants to use a different
+     * render than the default renderer.
+     */
     protected String rendererName;
 
+    /** The parent item of this layout or null if this is a layout root. */
     protected Item parent;
 
+    /** The name of the layout. */
     protected String name;
 
+    /** The unique identifier of this layout object or null. */
     protected String id;
 
-    /** TODO we should remove the description from here. */
+    /** The corresponding layout descripton. */
     transient protected LayoutDescription description;
 
     /** The temporary parameters. */
     protected Map temporaryParameters = new LinkedMap();
 
     /**
-     * @return The configured name
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * @param string
+     * DO NOT USE THIS CONSTRUCTOR - it's just here to keep Castor happy.
+     * Use {@link #AbstractLayout(String, String)} instead.
      */
-    public void setName(String string) {
-        name = string;
+    public AbstractLayout() {
+        // this constructor is just to keep Castor happy (version 0.9.9)
+        // we can remove it in later versions
+        this.id = null;
+        throw new IllegalArgumentException("Only instantiate a layout with the id/string constructor.");
     }
 
     /**
-     * Set the layout description
+     * Create a new layout object.
+     * Never create a layout object directly. Use the
+     * {@link LayoutFactory} instead.
+     * @param id The unique identifier of the layout object or null.
+     * @param id The name of the layout.
      */
-    public void setDescription(LayoutDescription description) {
-        this.description = description;
+    public AbstractLayout (String id, String name) {
+        this.id = id;
+        this.name = name;
     }
 
     /**
-     * Get the unique id of this object
-     * @return String Unique id
+     * @see org.apache.cocoon.portal.layout.Layout#getName()
      */
-    public String getId() {
-        return this.id;
+    public String getName() {
+        return name;
     }
 
     /**
-     * Set the unique id of this object
+     * @see org.apache.cocoon.portal.layout.Layout#setDescription(org.apache.cocoon.portal.layout.LayoutDescription)
      */
-    public void setId(String id) {
-        this.id = id;
+    public void setDescription(LayoutDescription description) {
+        if ( this.description != null ) {
+            throw new PortalRuntimeException("The layout has already a layout description.");
+        }
+        this.description = description;
     }
 
     /**
-     * Initialize the object. This should only be called once directly
-     * after the creation
+     * @see org.apache.cocoon.portal.layout.Layout#getId()
      */
-    public void initialize(String name, String id) {
-        this.name = name;
-        this.id = id;
+    public String getId() {
+        return this.id;
     }
 
     /**
@@ -101,10 +113,16 @@
 		this.rendererName = value;
 	}
 
+    /**
+     * @see org.apache.cocoon.portal.layout.Layout#getParent()
+     */
     public Item getParent() {
         return this.parent;
     }
 
+    /**
+     * @see org.apache.cocoon.portal.layout.Layout#setParent(org.apache.cocoon.portal.layout.Item)
+     */
     public void setParent(Item item) {
         this.parent = item;
     }

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/CompositeLayout.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/CompositeLayout.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/CompositeLayout.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/CompositeLayout.java Fri Oct 28 12:19:23 2005
@@ -73,9 +73,4 @@
      * @return Returns the item class name.
      */
     String getItemClassName();
-
-    /**
-     * @param value The item class name to set.
-     */
-    void setItemClassName(String value);
 }

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/Layout.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/Layout.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/Layout.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/Layout.java Fri Oct 28 12:19:23 2005
@@ -46,12 +46,6 @@
     void setDescription(LayoutDescription description);
 
     /**
-     * Initialize the object. This should only be called once directly
-     * after the creation.
-     */
-    void initialize(String name, String id);
-
-    /**
      * Get parameters map.
      * This method never returns null.
      * @return A map with key value pairs.
@@ -107,8 +101,14 @@
      */
     String getLayoutRendererName();
 
+    /**
+     * The parent of this layout object or null.
+     */
     Item getParent();
 
+    /**
+     * Set the parent item for this layout.
+     */
     void setParent(Item item);
 
     /**

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/LayoutDescription.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/LayoutDescription.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/LayoutDescription.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/LayoutDescription.java Fri Oct 28 12:19:23 2005
@@ -19,39 +19,50 @@
 
 
 /**
- * A configured layout
+ * A configured layout.
+ * This description is used to instantiate new layout objects by the {@link LayoutFactory}.
+ * A layout has an associated class and an associated name. The name is used to differentiate
+ * layout objects having the same class but providing different features. For example
+ * a composite layout can either be a row or a column - both use the same implementation class
+ * but have different names.
  *
  * @version $Id$
  */
 public interface LayoutDescription {
 
     /**
-     * @return The class name
+     * The name of the implementation class for this layout object.
+     * @return The class name.
      */
     String getClassName();
 
     /**
-     * @return The configured name
+     * The associated name for this layout object.
+     * @return The configured name.
      */
     String getName();
 
     /**
-     * Create a unique id for objects of this type
+     * Should the layout factory create a unique id for objects of this type?
      */
     boolean createId();
 
     /**
+     * This is the name of the renderer used by default to render this layout object.
      * @return the default renderer name
      */
     String getDefaultRendererName();
 
     /**
-     * @return the names of all allowed renderers
+     * Each layout can have several associated renderers.
+     * @return the names of all allowed renderers.
      */
     Iterator getRendererNames();
 
     /**
-     * @return The class name of the item
+     * Each composite layout object can contain items. This is the class name
+     * of the item implementation.
+     * @return The class name of the item.
      */
     String getItemClassName();
 }

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/LayoutFactory.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/LayoutFactory.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/LayoutFactory.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/LayoutFactory.java Fri Oct 28 12:19:23 2005
@@ -15,10 +15,6 @@
  */
 package org.apache.cocoon.portal.layout;
 
-import java.util.List;
-
-import org.apache.cocoon.ProcessingException;
-
 /**
  * This factory is for creating and managing layout objects.
  *
@@ -31,22 +27,27 @@
     /**
      * This method is invoked for a newly loaded profile
      */
-    void prepareLayout(Layout layout);
+    void prepareLayout(Layout layout)
+    throws LayoutException;
 
     /**
      * Create a new layout instance.
      * The instance is also registered at the profile manager.
      */
     Layout newInstance(String name)
-    throws ProcessingException;
+    throws LayoutException;
+
+    /**
+     * Create a new layout instance.
+     * The instance is also registered at the profile manager.
+     */
+    Layout newInstance(String name, String id)
+    throws LayoutException;
 
     /**
      * Remove the layout instance.
      * The instance (and all childs) will also be unregistered from
      * the profile manager.
      */
-    void remove(Layout layout)
-    throws ProcessingException;
-
-    List getLayoutDescriptions();
+    void remove(Layout layout);
 }

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/CompositeLayoutImpl.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/CompositeLayoutImpl.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/CompositeLayoutImpl.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/CompositeLayoutImpl.java Fri Oct 28 12:19:23 2005
@@ -23,6 +23,7 @@
 import org.apache.cocoon.portal.layout.CompositeLayout;
 import org.apache.cocoon.portal.layout.Item;
 import org.apache.cocoon.portal.layout.Layout;
+import org.apache.cocoon.portal.layout.LayoutFactory;
 import org.apache.cocoon.util.ClassUtils;
 
 
@@ -35,16 +36,29 @@
     extends AbstractLayout
     implements CompositeLayout {
 
+    /** The children of this layout object. */
     protected List items = new ArrayList();
 
-    /** The class name of the items */
-    protected String itemClassName;
-
     /**
-     * Constructor
+     * DO NOT USE THIS CONSTRUCTOR - it's just here to keep Castor happy.
+     * Use {@link #CompositeLayoutImpl(String, String)} instead.
      */
     public CompositeLayoutImpl() {
-        // nothing to do
+        // this constructor is just to keep Castor happy (version 0.9.9)
+        // we can remove it in later versions
+        super(null, null);
+        throw new IllegalArgumentException("Only instantiate a composite layout with the id/name constructor.");
+    }
+
+    /**
+     * Create a new composite layout object.
+     * Never create a layout object directly. Use the
+     * {@link LayoutFactory} instead.
+     * @param id The unique identifier of the layout object or null.
+     * @param id The name of the layout.
+     */
+    public CompositeLayoutImpl(String id, String name) {
+        super(id, name);
     }
 
 	/**
@@ -102,11 +116,11 @@
      * @see org.apache.cocoon.portal.layout.CompositeLayout#createNewItem()
      */
     public Item createNewItem() {
-        if ( this.itemClassName == null ) {
+        if ( this.description.getItemClassName() == null ) {
             return new Item();
         }
         try {
-            return (Item)ClassUtils.newInstance(this.itemClassName);
+            return (Item)ClassUtils.newInstance(this.description.getItemClassName());
         } catch (Exception ignore) {
             return new Item();
         }
@@ -116,14 +130,7 @@
      * @return Returns the item class name.
      */
     public String getItemClassName() {
-        return this.itemClassName;
-    }
-
-    /**
-     * @param value The item class name to set.
-     */
-    public void setItemClassName(String value) {
-        this.itemClassName = value;
+        return this.description.getItemClassName();
     }
 
     /**
@@ -138,7 +145,7 @@
         return clone;
     }
 
-    /*+
+    /**
      * @see org.apache.cocoon.portal.layout.Layout#copy(java.util.Map)
      */
     public Layout copy() {

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/CopletLayout.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/CopletLayout.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/CopletLayout.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/CopletLayout.java Fri Oct 28 12:19:23 2005
@@ -18,6 +18,7 @@
 import org.apache.cocoon.portal.coplet.CopletInstanceData;
 import org.apache.cocoon.portal.layout.AbstractLayout;
 import org.apache.cocoon.portal.layout.Layout;
+import org.apache.cocoon.portal.layout.LayoutFactory;
 
 /**
  * A coplet layout holds a coplet.
@@ -28,11 +29,30 @@
 
     protected CopletInstanceData copletInstanceData;
 
+    /**
+     * DO NOT USE THIS CONSTRUCTOR - it's just here to keep Castor happy.
+     * Use {@link #CopletLayout(String, String)} instead.
+     */
+    public CopletLayout() {
+        // this constructor is just to keep Castor happy (version 0.9.9)
+        // we can remove it in later versions
+        super(null, null);
+        throw new IllegalArgumentException("Only instantiate a coplet layout with the id/string constructor.");
+    }
+
+    /**
+     * Create a new coplet layout object.
+     * Never create a layout object directly. Use the
+     * {@link LayoutFactory} instead.
+     * @param id The unique identifier of the layout object or null.
+     * @param id The name of the layout.
+     */
+    public CopletLayout(String id, String name) {
+        super(id, name);
+    }
+
     public void setCopletInstanceData(CopletInstanceData cid) {
         this.copletInstanceData = cid;
-        if ( this.getId() == null ) {
-            this.setId(cid.getId());
-        }
     }
 
     public CopletInstanceData getCopletInstanceData() {

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutDescription.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutDescription.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutDescription.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutDescription.java Fri Oct 28 12:19:23 2005
@@ -54,7 +54,7 @@
     }
 
     /**
-     * @return the names of all allowed renderers
+     * @see org.apache.cocoon.portal.layout.LayoutDescription#getRendererNames()
      */
     public Iterator getRendererNames() {
         return this.rendererNames.iterator();
@@ -65,7 +65,7 @@
     }
 
     /**
-     * @return Returns the itemClassName.
+     * @see org.apache.cocoon.portal.layout.LayoutDescription#getItemClassName()
      */
     public String getItemClassName() {
         return this.itemClassName;
@@ -79,14 +79,14 @@
     }
 
     /**
-     * @return The class name
+     * @see org.apache.cocoon.portal.layout.LayoutDescription#getClassName()
      */
     public String getClassName() {
         return className;
     }
 
     /**
-     * @return The configured name
+     * @see org.apache.cocoon.portal.layout.LayoutDescription#getName()
      */
     public String getName() {
         return name;
@@ -107,7 +107,7 @@
     }
 
     /**
-     * Create a unique id for objects of this type
+     * @see org.apache.cocoon.portal.layout.LayoutDescription#createId()
      */
     public boolean createId() {
         return this.createId;

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java Fri Oct 28 12:19:23 2005
@@ -15,23 +15,15 @@
  */
 package org.apache.cocoon.portal.layout.impl;
 
-import java.util.ArrayList;
+import java.lang.reflect.Constructor;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 
-import org.apache.avalon.framework.activity.Disposable;
-import org.apache.avalon.framework.activity.Initializable;
 import org.apache.avalon.framework.configuration.Configurable;
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.avalon.framework.service.ServiceException;
-import org.apache.avalon.framework.service.ServiceManager;
-import org.apache.avalon.framework.service.Serviceable;
-import org.apache.avalon.framework.thread.ThreadSafe;
-import org.apache.cocoon.ProcessingException;
+import org.apache.cocoon.portal.PortalRuntimeException;
 import org.apache.cocoon.portal.PortalService;
 import org.apache.cocoon.portal.coplet.CopletFactory;
 import org.apache.cocoon.portal.coplet.CopletInstanceData;
@@ -41,6 +33,7 @@
 import org.apache.cocoon.portal.event.Receiver;
 import org.apache.cocoon.portal.event.coplet.CopletInstanceSizingEvent;
 import org.apache.cocoon.portal.event.impl.LayoutRemoveEvent;
+import org.apache.cocoon.portal.impl.AbstractComponent;
 import org.apache.cocoon.portal.layout.CompositeLayout;
 import org.apache.cocoon.portal.layout.Item;
 import org.apache.cocoon.portal.layout.Layout;
@@ -114,32 +107,15 @@
  * @version $Id$
  */
 public class DefaultLayoutFactory
-	extends AbstractLogEnabled
-    implements ThreadSafe, 
-                 LayoutFactory, 
-                 Configurable, 
-                 Disposable, 
-                 Serviceable,
-                 Initializable,
-                 Receiver {
+	extends AbstractComponent
+    implements LayoutFactory, Configurable {
 
     protected Map layouts = new HashMap();
 
-    protected List descriptions = new ArrayList();
-
-    protected ServiceManager manager;
-
     protected Configuration[] layoutsConf;
 
     protected static long idCounter = System.currentTimeMillis();
 
-    /**
-     * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
-     */
-    public void service(ServiceManager manager) throws ServiceException {
-        this.manager = manager;
-    }
-
     /** 
      * Configure a layout
      */
@@ -179,7 +155,6 @@
         }
 
         this.layouts.put(desc.getName(), desc);
-        this.descriptions.add(desc);
     }
 
     /**
@@ -200,7 +175,7 @@
                         try {
                             this.configureLayout( layoutsConf[i] );
                         } catch (ConfigurationException ce) {
-                            throw new LayoutException("Unable to configure layout.", ce);
+                            throw new PortalRuntimeException("Unable to configure layout.", ce);
                         }
                     }
                     this.layoutsConf = null;
@@ -212,7 +187,8 @@
     /**
      * @see org.apache.cocoon.portal.layout.LayoutFactory#prepareLayout(org.apache.cocoon.portal.layout.Layout)
      */
-    public void prepareLayout(Layout layout){
+    public void prepareLayout(Layout layout)
+    throws LayoutException {
         if ( layout != null ) {
 
             this.init();
@@ -232,7 +208,6 @@
             // recursive
             if ( layout instanceof CompositeLayout ) {
                 CompositeLayout composite = (CompositeLayout)layout;
-                composite.setItemClassName(layoutDescription.getItemClassName());
 
                 Iterator items = composite.getItems().iterator();
                 while ( items.hasNext() ) {
@@ -246,88 +221,43 @@
      * @see org.apache.cocoon.portal.layout.LayoutFactory#newInstance(java.lang.String)
      */
     public Layout newInstance(String layoutName) 
-    throws ProcessingException {
+    throws LayoutException {
+        return this.newInstance(layoutName, null);
+    }
+
+    /**
+     * @see org.apache.cocoon.portal.layout.LayoutFactory#newInstance(java.lang.String, java.lang.String)
+     */
+    public Layout newInstance(String layoutName, String id) 
+    throws LayoutException {
         this.init();
 
         DefaultLayoutDescription layoutDescription = (DefaultLayoutDescription)this.layouts.get( layoutName );
 
         if ( layoutDescription == null ) {
-            throw new ProcessingException("LayoutDescription with name '" + layoutName + "' not found.");
+            throw new LayoutException("LayoutDescription with name '" + layoutName + "' not found.");
         }
 
-        Layout layout = null;
-        try {
-            Class clazz = ClassUtils.loadClass( layoutDescription.getClassName() );
-            layout = (Layout)clazz.newInstance();
-        } catch (Exception e) {
-            throw new ProcessingException("Unable to create new instance", e );
-        }
-
-        String id = null;
-        if ( layoutDescription.createId() ) {
+        if ( layoutDescription.createId() && id == null ) {
             synchronized (this) {
                 id = layoutName + '-' + idCounter;
                 idCounter += 1;
             }
         }
-        layout.initialize( layoutName, id ); 
-        layout.setDescription( layoutDescription );
-
-        if ( layout instanceof CompositeLayout ) {
-            CompositeLayout composite = (CompositeLayout)layout;
-            composite.setItemClassName(layoutDescription.getItemClassName());
-        }
-
-        PortalService service = null;
+        Layout layout = null;
         try {
-            service = (PortalService)this.manager.lookup(PortalService.ROLE);
-            service.getComponentManager().getProfileManager().register(layout);
-        } catch (ServiceException ce) {
-            throw new ProcessingException("Unable to lookup profile manager.", ce);
-        } finally {
-            this.manager.release( service );
+            Class clazz = ClassUtils.loadClass( layoutDescription.getClassName() );
+            Constructor constructor = clazz.getConstructor(new Class[] {String.class});
+            layout = (Layout)constructor.newInstance(new Object[] {id});
+        } catch (Exception e) {
+            throw new LayoutException("Unable to create new layout instance for: " + layoutDescription , e );
         }
-        return layout;
-    }
 
-    /**
-     * @see org.apache.cocoon.portal.layout.LayoutFactory#getLayoutDescriptions()
-     */
-    public List getLayoutDescriptions() {
-        this.init();
-        return this.descriptions;
-    }
-
-    /**
-     * @see org.apache.avalon.framework.activity.Disposable#dispose()
-     */
-    public void dispose() {
-        if ( this.manager != null ) {
-            EventManager eventManager = null;
-            try { 
-                eventManager = (EventManager)this.manager.lookup(EventManager.ROLE);
-                eventManager.unsubscribe( this );
-            } catch (Exception ignore) {
-                // ignore
-            } finally {
-                this.manager.release( eventManager ); 
-            }
-            this.manager = null;
-        }
+        layout.setDescription( layoutDescription );
 
-    }
+        this.portalService.getComponentManager().getProfileManager().register(layout);
 
-    /**
-     * @see org.apache.avalon.framework.activity.Initializable#initialize()
-     */
-    public void initialize() throws Exception {
-        EventManager eventManager = null;
-        try { 
-            eventManager = (EventManager)this.manager.lookup(EventManager.ROLE);
-            eventManager.subscribe( this );
-        } finally {
-            this.manager.release( eventManager );
-        }
+        return layout;
     }
 
     /**
@@ -336,19 +266,14 @@
     public void inform(LayoutEvent event, PortalService service) {
         Layout layout = (Layout)event.getTarget();
         if ( event instanceof LayoutRemoveEvent ) {
-            try {
-                this.remove( layout );
-            } catch (ProcessingException pe) {
-                throw new LayoutException("Exception during removal.", pe);
-            }
+            this.remove( layout );
         }
     }
 
     /**
      * @see org.apache.cocoon.portal.layout.LayoutFactory#remove(org.apache.cocoon.portal.layout.Layout)
      */
-    public void remove(Layout layout) 
-    throws ProcessingException {
+    public void remove(Layout layout) {
         if ( layout != null ) {
             this.init();
             if ( layout instanceof CompositeLayout ) {
@@ -363,29 +288,19 @@
                 parent.getParent().removeItem( parent );
             }
 
-            PortalService service = null;
-            EventManager eventManager = null;
-            try {
-                service = (PortalService)this.manager.lookup(PortalService.ROLE);                
-                ProfileManager profileManager = service.getComponentManager().getProfileManager();
-                if ( layout instanceof CopletLayout ) {
-                    // full screen?
-                    if ( layout.equals(service.getEntryLayout(null)) ) {
-                        Event event = new CopletInstanceSizingEvent(null, CopletInstanceData.SIZE_FULLSCREEN);
-                        eventManager = (EventManager)this.manager.lookup(EventManager.ROLE);
-                        eventManager.send(event);
-                        service.getComponentManager().getLinkService().addEventToLink(event);
-                    }
-                    CopletFactory factory = service.getComponentManager().getCopletFactory();
-                    factory.remove( ((CopletLayout)layout).getCopletInstanceData());
+            ProfileManager profileManager = this.portalService.getComponentManager().getProfileManager();
+            if ( layout instanceof CopletLayout ) {
+                // full screen?
+                if ( layout.equals(this.portalService.getEntryLayout(null)) ) {
+                    Event event = new CopletInstanceSizingEvent(null, CopletInstanceData.SIZE_FULLSCREEN);
+                    EventManager em = this.portalService.getComponentManager().getEventManager();
+                    em.send(event);
+                    this.portalService.getComponentManager().getLinkService().addEventToLink(event);
                 }
-                profileManager.unregister(layout);
-            } catch (ServiceException ce) {
-                throw new ProcessingException("Unable to lookup portal service.", ce);
-            } finally {
-                this.manager.release( service );
-                this.manager.release(eventManager);
+                CopletFactory factory = this.portalService.getComponentManager().getCopletFactory();
+                factory.remove( ((CopletLayout)layout).getCopletInstanceData());
             }
+            profileManager.unregister(layout);
         }
     }
 }

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/FrameLayout.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/FrameLayout.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/FrameLayout.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/FrameLayout.java Fri Oct 28 12:19:23 2005
@@ -16,6 +16,7 @@
 package org.apache.cocoon.portal.layout.impl;
 
 import org.apache.cocoon.portal.layout.AbstractLayout;
+import org.apache.cocoon.portal.layout.LayoutFactory;
 
 /**
  * A frame layout holds a source URI. The URI can be changed dynamically through
@@ -27,6 +28,28 @@
 public class FrameLayout extends AbstractLayout {
 
     protected String source;
+
+    /**
+     * DO NOT USE THIS CONSTRUCTOR - it's just here to keep Castor happy.
+     * Use {@link #CopletLayout(String, String)} instead.
+     */
+    public FrameLayout() {
+        // this constructor is just to keep Castor happy (version 0.9.9)
+        // we can remove it in later versions
+        super(null, null);
+        throw new IllegalArgumentException("Only instantiate a frame layout with the id/String constructor.");
+    }
+
+    /**
+     * Create a new frame layout object.
+     * Never create a layout object directly. Use the
+     * {@link LayoutFactory} instead.
+     * @param id The unique identifier of the layout object or null.
+     * @param id The name of the layout.
+     */
+    public FrameLayout(String id, String name) {
+        super(id, name);
+    }
 
     /**
      * @return String

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/LinkLayout.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/LinkLayout.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/LinkLayout.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/layout/impl/LinkLayout.java Fri Oct 28 12:19:23 2005
@@ -17,6 +17,7 @@
 
 import org.apache.cocoon.portal.layout.AbstractLayout;
 import org.apache.cocoon.portal.layout.Layout;
+import org.apache.cocoon.portal.layout.LayoutFactory;
 
 /**
  * A link layout references another layout to be used instead. The reference
@@ -28,6 +29,28 @@
 
     protected String linkedLayoutKey;
     protected String linkedLayoutId;
+
+    /**
+     * DO NOT USE THIS CONSTRUCTOR - it's just here to keep Castor happy.
+     * Use {@link #CopletLayout(String, String)} instead.
+     */
+    public LinkLayout() {
+        // this constructor is just to keep Castor happy (version 0.9.9)
+        // we can remove it in later versions
+        super(null, null);
+        throw new IllegalArgumentException("Only instantiate a link layout with the id/string constructor.");
+    }
+
+    /**
+     * Create a new link layout object.
+     * Never create a layout object directly. Use the
+     * {@link LayoutFactory} instead.
+     * @param id The unique identifier of the layout object or null.
+     * @param id The name of the layout.
+     */
+    public LinkLayout(String id, String name) {
+        super(id, name);
+    }
 
     public void setLayoutId(String layoutId) {
         this.linkedLayoutId = layoutId;

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/persistence/castor/layout.xml
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/persistence/castor/layout.xml?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/persistence/castor/layout.xml (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/persistence/castor/layout.xml Fri Oct 28 12:19:23 2005
@@ -32,16 +32,12 @@
   </class>
 
   <class name="org.apache.cocoon.portal.layout.AbstractLayout"
-    extends="org.apache.cocoon.portal.layout.AbstractParameters">
-    <field name="name" type="java.lang.String">
-      <bind-xml name="name" node="attribute"/>
-    </field>
-    <field name="id" type="java.lang.String">
-      <bind-xml name="id" node="attribute"/>
-    </field>
+         extends="org.apache.cocoon.portal.layout.AbstractParameters">
+
     <field name="layoutRendererName" type="java.lang.String">
       <bind-xml name="layout-renderer-name" node="attribute"/>
     </field>
+
     <field name="parameters" type="org.apache.cocoon.portal.pluto.om.common.ParameterImpl" collection="set"
       get-method="getCastorParameters" set-method="addParameter">
       <bind-xml name="parameter" node="element"/>
@@ -49,8 +45,17 @@
   </class>
 
   <class name="org.apache.cocoon.portal.layout.impl.LinkLayout"
-    extends="org.apache.cocoon.portal.layout.AbstractLayout">
+         extends="org.apache.cocoon.portal.layout.AbstractLayout">
     <map-to xml="link-layout"/>
+
+    <field name="id" type="java.lang.String" set-method="%1" get-method="getId">
+      <bind-xml name="id" node="attribute" />
+    </field>
+
+    <field name="name" type="java.lang.String" set-method="%2" get-method="getName">
+      <bind-xml name="name" node="attribute"/>
+    </field>
+
     <field name="layoutKey" type="java.lang.String">
       <bind-xml name="layout-key" node="attribute"/>
     </field>
@@ -60,24 +65,58 @@
   </class>
 
   <class name="org.apache.cocoon.portal.layout.impl.CompositeLayoutImpl"
-    extends="org.apache.cocoon.portal.layout.AbstractLayout">
+         extends="org.apache.cocoon.portal.layout.AbstractLayout">
     <map-to xml="composite-layout"/>
+
+    <field name="id" type="java.lang.String" set-method="%1" get-method="getId">
+      <bind-xml name="id" node="attribute" />
+    </field>
+
+    <field name="name" type="java.lang.String" set-method="%2" get-method="getName">
+      <bind-xml name="name" node="attribute"/>
+    </field>
+
     <field name="items" type="org.apache.cocoon.portal.layout.Item"
-      collection="collection"
-      set-method="addItem"
-      get-method="getItems">
+           collection="collection" set-method="addItem" get-method="getItems">
       <bind-xml auto-naming="deriveByClass"/>
     </field>
   </class>
 
+  <class name="org.apache.cocoon.portal.layout.impl.CopletLayout"
+         auto-complete="false"
+         extends="org.apache.cocoon.portal.layout.AbstractLayout">
+    <map-to xml="coplet-layout"/>
+
+    <field name="id" type="java.lang.String" set-method="%1" get-method="getId">
+      <bind-xml name="id" node="attribute" />
+    </field>
+
+    <field name="name" type="java.lang.String" set-method="%2" get-method="getName">
+      <bind-xml name="name" node="attribute"/>
+    </field>
+
+    <field name="copletInstanceData">
+      <bind-xml name="coplet-instance-data" reference="true"/>
+    </field>
+  </class>
+
   <class name="org.apache.cocoon.portal.layout.impl.FrameLayout"
          extends="org.apache.cocoon.portal.layout.AbstractLayout">
     <map-to xml="frame-layout"/>
+
+    <field name="id" type="java.lang.String" set-method="%1" get-method="getId">
+      <bind-xml name="id" node="attribute" />
+    </field>
+
+    <field name="name" type="java.lang.String" set-method="%2" get-method="getName">
+      <bind-xml name="name" node="attribute"/>
+    </field>
+
     <field name="source" type="java.lang.String"/>
   </class>
 
   <class name="org.apache.cocoon.portal.layout.Item"
-    extends="org.apache.cocoon.portal.layout.AbstractParameters">
+         extends="org.apache.cocoon.portal.layout.AbstractParameters">
     <field name="layout" type="org.apache.cocoon.portal.layout.Layout">
       <bind-xml auto-naming="deriveByClass"/>
     </field>
@@ -108,16 +147,6 @@
 
     <field name="value">
       <bind-xml name="value"/>
-    </field>
-  </class>
-
-  <class name="org.apache.cocoon.portal.layout.impl.CopletLayout"
-         auto-complete="false"
-         extends="org.apache.cocoon.portal.layout.AbstractLayout">
-    <map-to xml="coplet-layout"/>
-
-    <field name="copletInstanceData">
-      <bind-xml name="coplet-instance-data" reference="true"/>
     </field>
   </class>
 

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/pluto/PortletContainerEnvironmentImpl.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/pluto/PortletContainerEnvironmentImpl.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/pluto/PortletContainerEnvironmentImpl.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/pluto/PortletContainerEnvironmentImpl.java Fri Oct 28 12:19:23 2005
@@ -33,7 +33,7 @@
 import org.apache.cocoon.portal.pluto.service.log.LogServiceImpl;
 import org.apache.cocoon.portal.pluto.services.PropertyManagerServiceImpl;
 import org.apache.cocoon.portal.pluto.services.factory.FactoryManagerServiceImpl;
-import org.apache.cocoon.portal.PortalException;
+import org.apache.cocoon.portal.PortalRuntimeException;
 import org.apache.pluto.services.ContainerService;
 import org.apache.pluto.services.PortletContainerEnvironment;
 import org.apache.pluto.services.factory.FactoryManagerService;
@@ -137,7 +137,7 @@
                     service = (ContainerService)this.manager.lookup(key);
                     this.services.put(key, service);
                 } catch (ServiceException se) {
-                    throw new PortalException("Unable to lookup service " + key, se);
+                    throw new PortalRuntimeException("Unable to lookup service " + key, se);
                 }
             }
         }

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/pluto/PortletURLProviderImpl.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/pluto/PortletURLProviderImpl.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/pluto/PortletURLProviderImpl.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/pluto/PortletURLProviderImpl.java Fri Oct 28 12:19:23 2005
@@ -28,7 +28,7 @@
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.cocoon.portal.LinkService;
-import org.apache.cocoon.portal.PortalException;
+import org.apache.cocoon.portal.PortalRuntimeException;
 import org.apache.cocoon.portal.PortalService;
 import org.apache.cocoon.portal.coplet.CopletInstanceData;
 import org.apache.cocoon.portal.event.CopletInstanceEvent;
@@ -85,7 +85,7 @@
             service = (PortalService) manager.lookup(PortalService.ROLE);
             this.linkService = service.getComponentManager().getLinkService();
         } catch (ServiceException se) {
-            throw new PortalException("Unable to lookup portal service.", se);
+            throw new PortalRuntimeException("Unable to lookup portal service.", se);
         } finally {
             manager.release(service);
         }

Modified: cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/profile/ProfileException.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/profile/ProfileException.java?rev=329272&r1=329271&r2=329272&view=diff
==============================================================================
--- cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/profile/ProfileException.java (original)
+++ cocoon/blocks/portal/trunk/java/org/apache/cocoon/portal/profile/ProfileException.java Fri Oct 28 12:19:23 2005
@@ -15,13 +15,13 @@
  */
 package org.apache.cocoon.portal.profile;
 
-import org.apache.cocoon.portal.PortalException;
+import org.apache.cocoon.portal.PortalRuntimeException;
 
 /**
  *
  * @version $Id$
  */
-public class ProfileException extends PortalException {
+public class ProfileException extends PortalRuntimeException {
     public ProfileException() {
         super();
     }