cziegeler 2003/06/14 09:58:02
Modified: src/blocks/portal/java/org/apache/cocoon/portal/layout/impl DefaultLayoutFactory.java DefaultLayoutDescription.java src/blocks/portal/java/org/apache/cocoon/portal/layout AbstractLayout.java LayoutDescription.java src/blocks/portal/conf portal.xconf Log: Several renderers can now be configured for a layout Revision Changes Path 1.11 +24 -5 cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java Index: DefaultLayoutFactory.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutFactory.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- DefaultLayoutFactory.java 6 Jun 2003 11:33:37 -0000 1.10 +++ DefaultLayoutFactory.java 14 Jun 2003 16:58:02 -0000 1.11 @@ -132,8 +132,27 @@ desc.setName(name); desc.setClassName(layoutsConf[i].getAttribute("class")); desc.setCreateId(layoutsConf[i].getAttributeAsBoolean("create-id", false)); - desc.setRendererName(layoutsConf[i].getAttribute("renderer")); + // the renderers + final String defaultRenderer = layoutsConf[i].getChild("renderers").getAttribute("default"); + desc.setDefaultRendererName(defaultRenderer); + + final Configuration[] rendererConfs = layoutsConf[i].getChild("renderers").getChildren("renderer"); + if ( rendererConfs != null ) { + boolean found = false; + for(int m=0; m < rendererConfs.length; m++) { + final String rName = rendererConfs[m].getAttribute("name"); + desc.addRendererName(rName); + if ( defaultRenderer.equals(rName) ) { + found = true; + } + } + if ( !found ) { + throw new ConfigurationException("Default renderer '" + defaultRenderer + "' is not configured for layout '" + name + "'"); + } + } else { + throw new ConfigurationException("Default renderer '" + defaultRenderer + "' is not configured for layout '" + name + "'"); + } // and now the aspects final Configuration[] aspectsConf = layoutsConf[i].getChild("aspects").getChildren("aspect"); if (aspectsConf != null) { @@ -160,12 +179,12 @@ final String layoutName = layout.getName(); if ( layoutName == null ) { - throw new ProcessingException("Layout "+layout.getId()+" has no associated name."); + throw new ProcessingException("Layout '"+layout.getId()+"' has no associated name."); } Object[] o = (Object[]) this.layouts.get( layoutName ); if ( o == null ) { - throw new ProcessingException("LayoutDescription with name " + layoutName + " not found."); + throw new ProcessingException("LayoutDescription with name '" + layoutName + "' not found."); } DefaultLayoutDescription layoutDescription = (DefaultLayoutDescription)o[0]; @@ -188,7 +207,7 @@ Object[] o = (Object[]) this.layouts.get( layoutName ); if ( o == null ) { - throw new ProcessingException("LayoutDescription with name " + layoutName + " not found."); + throw new ProcessingException("LayoutDescription with name '" + layoutName + "' not found."); } DefaultLayoutDescription layoutDescription = (DefaultLayoutDescription)o[0]; 1.3 +22 -6 cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutDescription.java Index: DefaultLayoutDescription.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/impl/DefaultLayoutDescription.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- DefaultLayoutDescription.java 20 May 2003 14:06:42 -0000 1.2 +++ DefaultLayoutDescription.java 14 Jun 2003 16:58:02 -0000 1.3 @@ -50,6 +50,10 @@ */ package org.apache.cocoon.portal.layout.impl; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + import org.apache.cocoon.portal.factory.impl.AbstractProducibleDescription; import org.apache.cocoon.portal.layout.LayoutDescription; @@ -65,20 +69,32 @@ extends AbstractProducibleDescription implements LayoutDescription { - protected String rendererName; + protected String defaultRendererName; + + protected List rendererNames = new ArrayList(2); /** * @return */ - public String getRendererName() { - return rendererName; + public String getDefaultRendererName() { + return defaultRendererName; } /** * @param string */ - public void setRendererName(String string) { - rendererName = string; + public void setDefaultRendererName(String string) { + defaultRendererName = string; } + /** + * @return the names of all allowed renderers + */ + public Iterator getRendererNames() { + return this.rendererNames.iterator(); + } + + public void addRendererName(String name) { + this.rendererNames.add( name ); + } } 1.9 +2 -2 cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/AbstractLayout.java Index: AbstractLayout.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/AbstractLayout.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- AbstractLayout.java 22 May 2003 06:55:15 -0000 1.8 +++ AbstractLayout.java 14 Jun 2003 16:58:02 -0000 1.9 @@ -88,7 +88,7 @@ */ public String getRendererName() { if ( this.rendererName == null ) { - return ((LayoutDescription)this.description).getRendererName(); + return ((LayoutDescription)this.description).getDefaultRendererName(); } return this.rendererName; } 1.3 +10 -3 cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/LayoutDescription.java Index: LayoutDescription.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/LayoutDescription.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- LayoutDescription.java 20 May 2003 14:06:43 -0000 1.2 +++ LayoutDescription.java 14 Jun 2003 16:58:02 -0000 1.3 @@ -50,6 +50,8 @@ */ package org.apache.cocoon.portal.layout; +import java.util.Iterator; + import org.apache.cocoon.portal.factory.ProducibleDescription; @@ -65,7 +67,12 @@ extends ProducibleDescription { /** - * @return + * @return the default renderer name + */ + String getDefaultRendererName(); + + /** + * @return the names of all allowed renderers */ - String getRendererName(); + Iterator getRendererNames(); } 1.16 +20 -10 cocoon-2.1/src/blocks/portal/conf/portal.xconf Index: portal.xconf =================================================================== RCS file: /home/cvs/cocoon-2.1/src/blocks/portal/conf/portal.xconf,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- portal.xconf 10 Jun 2003 19:38:54 -0000 1.15 +++ portal.xconf 14 Jun 2003 16:58:02 -0000 1.16 @@ -136,31 +136,41 @@ role="org.apache.cocoon.portal.layout.LayoutFactory"> <layouts> <layout name="column" - class="org.apache.cocoon.portal.layout.impl.CompositeLayout" - renderer="column"> + class="org.apache.cocoon.portal.layout.impl.CompositeLayout"> + <renderers default="column"> + <renderer name="column"/> + </renderers> </layout> <layout name="row" - class="org.apache.cocoon.portal.layout.impl.CompositeLayout" - renderer="row"> + class="org.apache.cocoon.portal.layout.impl.CompositeLayout"> + <renderers default="row"> + <renderer name="row"/> + </renderers> </layout> <layout name="tab" - class="org.apache.cocoon.portal.layout.impl.CompositeLayout" - renderer="tab"> + class="org.apache.cocoon.portal.layout.impl.CompositeLayout"> + <renderers default="tab"> + <renderer name="tab"/> + </renderers> <aspects> <aspect name="tab" class="java.lang.Integer" store="session" auto-create="true"/> </aspects> </layout> <layout name="frame" - class="org.apache.cocoon.portal.layout.impl.FrameLayout" - renderer="frame" + class="org.apache.cocoon.portal.layout.impl.FrameLayout" create-id="true"> + <renderers default="frame"> + <renderer name="frame"/> + </renderers> <aspects> <aspect name="frame" class="java.lang.String" store="request" auto-create="false"/> </aspects> </layout> <layout name="coplet" - class="org.apache.cocoon.portal.layout.impl.CopletLayout" - renderer="window"> + class="org.apache.cocoon.portal.layout.impl.CopletLayout"> + <renderers default="window"> + <renderer name="window"/> + </renderers> </layout> </layouts> </component>