cziegeler 2003/06/14 10:55:44
Modified: src/blocks/portal/java/org/apache/cocoon/portal/layout/impl
DefaultLayoutFactory.java
src/blocks/portal/java/org/apache/cocoon/portal/coplet/impl
DefaultCopletFactory.java
src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/impl
AspectRenderer.java AbstractRenderer.java
src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl
RendererAspectChain.java XSLTAspect.java
TabContentAspect.java AbstractAspect.java
src/blocks/portal/java/org/apache/cocoon/portal/aspect/impl
DefaultAspectDescription.java
src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer
Renderer.java
src/blocks/portal/conf portal.xconf
src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect
RendererAspect.java
Log:
Simplifying configuration: aspect renderers can add their own descriptions
Revision Changes Path
1.12 +83 -47
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.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- DefaultLayoutFactory.java 14 Jun 2003 16:58:02 -0000 1.11
+++ DefaultLayoutFactory.java 14 Jun 2003 17:55:43 -0000 1.12
@@ -72,6 +72,7 @@
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.portal.aspect.AspectDataHandler;
import org.apache.cocoon.portal.aspect.AspectDataStore;
+import org.apache.cocoon.portal.aspect.AspectDescription;
import org.apache.cocoon.portal.aspect.impl.DefaultAspectDataHandler;
import org.apache.cocoon.portal.aspect.impl.DefaultAspectDescription;
import org.apache.cocoon.portal.coplet.CopletFactory;
@@ -85,6 +86,7 @@
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.portal.layout.renderer.Renderer;
import org.apache.cocoon.portal.profile.ProfileManager;
import org.apache.cocoon.util.ClassUtils;
@@ -114,61 +116,95 @@
protected ComponentManager manager;
- /* (non-Javadoc)
- * @see
org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
+ /**
+ * Configure a layout
*/
- public void configure(Configuration configuration)
+ protected void configureLayout(Configuration layoutConf)
throws ConfigurationException {
- final Configuration[] layoutsConf =
configuration.getChild("layouts").getChildren("layout");
- if ( layoutsConf != null ) {
- for(int i=0; i < layoutsConf.length; i++ ) {
- DefaultLayoutDescription desc = new DefaultLayoutDescription();
- final String name = layoutsConf[i].getAttribute("name");
+ DefaultLayoutDescription desc = new DefaultLayoutDescription();
+ final String name = layoutConf.getAttribute("name");
- // unique test
- if ( this.layouts.get(name) != null) {
- throw new ConfigurationException("Layout name must be unique.
Double definition for " + name);
- }
- desc.setName(name);
- desc.setClassName(layoutsConf[i].getAttribute("class"));
- desc.setCreateId(layoutsConf[i].getAttributeAsBoolean("create-id",
false));
+ // unique test
+ if ( this.layouts.get(name) != null) {
+ throw new ConfigurationException("Layout name must be unique. Double
definition for " + name);
+ }
+ desc.setName(name);
+ desc.setClassName(layoutConf.getAttribute("class"));
+ desc.setCreateId(layoutConf.getAttributeAsBoolean("create-id", false));
- // the renderers
- final String defaultRenderer =
layoutsConf[i].getChild("renderers").getAttribute("default");
- desc.setDefaultRendererName(defaultRenderer);
+ // the renderers
+ final String defaultRenderer =
layoutConf.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 + "'");
+ final Configuration[] rendererConfs =
layoutConf.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;
}
- // and now the aspects
- final Configuration[] aspectsConf =
layoutsConf[i].getChild("aspects").getChildren("aspect");
- if (aspectsConf != null) {
- for(int m=0; m < aspectsConf.length; m++) {
- DefaultAspectDescription adesc = new
DefaultAspectDescription();
- adesc.setClassName(aspectsConf[m].getAttribute("class"));
- adesc.setName(aspectsConf[m].getAttribute("name"));
- adesc.setPersistence(aspectsConf[m].getAttribute("store"));
-
adesc.setAutoCreate(aspectsConf[m].getAttributeAsBoolean("auto-create", false));
- adesc.setDefaultValue(aspectsConf[m].getAttribute("value",
null));
+ }
+ 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 =
layoutConf.getChild("aspects").getChildren("aspect");
+ if (aspectsConf != null) {
+ for(int m=0; m < aspectsConf.length; m++) {
+ AspectDescription adesc =
DefaultAspectDescription.newInstance(aspectsConf[m]);
+ desc.addAspectDescription( adesc );
+ }
+ }
+ // now query all configured renderers for their aspects
+ ComponentSelector rendererSelector = null;
+ try {
+ rendererSelector =
(ComponentSelector)this.manager.lookup(Renderer.ROLE+"Selector");
+
+ Iterator rendererIterator = desc.getRendererNames();
+ while (rendererIterator.hasNext()) {
+ final String rendererName = (String)rendererIterator.next();
+ Renderer renderer = null;
+ try {
+ renderer = (Renderer) rendererSelector.select( rendererName );
+
+ Iterator aspectIterator = renderer.getAspectDescriptions();
+ while (aspectIterator.hasNext()) {
+ final AspectDescription adesc = (AspectDescription)
aspectIterator.next();
desc.addAspectDescription( adesc );
}
+ } catch (ComponentException ce ) {
+ throw new ConfigurationException("Unable to lookup renderer '"
+ rendererName + "'", ce);
+ } finally {
+ rendererSelector.release( renderer );
}
- DefaultAspectDataHandler handler = new
DefaultAspectDataHandler(desc, this.storeSelector);
- this.layouts.put(desc.getName(), new Object[] {desc, handler});
- this.descriptions.add(desc);
+ }
+ } catch (ComponentException ce ) {
+ throw new ConfigurationException("Unable to lookup renderer selector.",
ce);
+ } finally {
+ this.manager.release( rendererSelector );
+ }
+
+ // set the aspect data handler
+ DefaultAspectDataHandler handler = new DefaultAspectDataHandler(desc,
this.storeSelector);
+ this.layouts.put(desc.getName(), new Object[] {desc, handler});
+ this.descriptions.add(desc);
+ }
+
+ /* (non-Javadoc)
+ * @see
org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
+ */
+ public void configure(Configuration configuration)
+ throws ConfigurationException {
+ final Configuration[] layoutsConf =
configuration.getChild("layouts").getChildren("layout");
+ if ( layoutsConf != null ) {
+ for(int i=0; i < layoutsConf.length; i++ ) {
+ this.configureLayout( layoutsConf[i] );
}
}
}
1.6 +4 -14
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/coplet/impl/DefaultCopletFactory.java
Index: DefaultCopletFactory.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/coplet/impl/DefaultCopletFactory.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DefaultCopletFactory.java 6 Jun 2003 11:33:38 -0000 1.5
+++ DefaultCopletFactory.java 14 Jun 2003 17:55:43 -0000 1.6
@@ -69,6 +69,7 @@
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.portal.aspect.AspectDataHandler;
import org.apache.cocoon.portal.aspect.AspectDataStore;
+import org.apache.cocoon.portal.aspect.AspectDescription;
import org.apache.cocoon.portal.aspect.impl.DefaultAspectDataHandler;
import org.apache.cocoon.portal.aspect.impl.DefaultAspectDescription;
import org.apache.cocoon.portal.coplet.CopletData;
@@ -236,12 +237,7 @@
Configuration[] aspectsConf =
copletsConf[i].getChild("coplet-data-aspects").getChildren("aspect");
if (aspectsConf != null) {
for(int m=0; m < aspectsConf.length; m++) {
- DefaultAspectDescription adesc = new
DefaultAspectDescription();
- adesc.setClassName(aspectsConf[m].getAttribute("class"));
- adesc.setName(aspectsConf[m].getAttribute("name"));
- adesc.setPersistence(aspectsConf[m].getAttribute("store"));
-
adesc.setAutoCreate(aspectsConf[m].getAttributeAsBoolean("auto-create", false));
- adesc.setDefaultValue(aspectsConf[m].getAttribute("value",
null));
+ AspectDescription adesc =
DefaultAspectDescription.newInstance(aspectsConf[m]);
desc.addAspectDescription( adesc );
}
}
@@ -250,13 +246,7 @@
aspectsConf =
copletsConf[i].getChild("coplet-instance-data-aspects").getChildren("aspect");
if (aspectsConf != null) {
for(int m=0; m < aspectsConf.length; m++) {
- DefaultAspectDescription adesc = new
DefaultAspectDescription();
- adesc.setClassName(aspectsConf[m].getAttribute("class"));
- adesc.setName(aspectsConf[m].getAttribute("name"));
- adesc.setPersistence(aspectsConf[m].getAttribute("store"));
-
adesc.setAutoCreate(aspectsConf[m].getAttributeAsBoolean("auto-create", false));
- adesc.setDefaultValue(aspectsConf[m].getAttribute("value",
null));
- desc.addInstanceAspectDescription( adesc );
+ AspectDescription adesc =
DefaultAspectDescription.newInstance(aspectsConf[m]);
instanceDesc.addAspectDescription( adesc );
}
}
1.2 +12 -2
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/impl/AspectRenderer.java
Index: AspectRenderer.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/impl/AspectRenderer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AspectRenderer.java 7 May 2003 06:22:22 -0000 1.1
+++ AspectRenderer.java 14 Jun 2003 17:55:43 -0000 1.2
@@ -50,6 +50,8 @@
*/
package org.apache.cocoon.portal.layout.renderer.impl;
+import java.util.Iterator;
+
import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
@@ -65,7 +67,8 @@
import org.apache.cocoon.portal.layout.renderer.Renderer;
import org.apache.cocoon.portal.layout.renderer.aspect.RendererAspect;
import org.apache.cocoon.portal.layout.renderer.aspect.RendererAspectContext;
-import org.apache.cocoon.portal.layout.renderer.aspect.impl.*;
+import org.apache.cocoon.portal.layout.renderer.aspect.impl.DefaultRendererContext;
+import org.apache.cocoon.portal.layout.renderer.aspect.impl.RendererAspectChain;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
@@ -123,5 +126,12 @@
this.manager = null;
}
}
+
+ /**
+ * Return the aspects required for this renderer
+ */
+ public Iterator getAspectDescriptions() {
+ return this.chain.getAspectDescriptionIterator();
+ }
}
1.3 +11 -1
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/impl/AbstractRenderer.java
Index: AbstractRenderer.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/impl/AbstractRenderer.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AbstractRenderer.java 22 May 2003 12:32:47 -0000 1.2
+++ AbstractRenderer.java 14 Jun 2003 17:55:43 -0000 1.3
@@ -50,6 +50,9 @@
*/
package org.apache.cocoon.portal.layout.renderer.impl;
+import java.util.Collections;
+import java.util.Iterator;
+
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.sax.TransformerHandler;
@@ -176,5 +179,12 @@
}
protected abstract void process(Layout layout, PortalService service,
ContentHandler handler) throws SAXException;
+
+ /**
+ * Return the aspects required for this renderer
+ */
+ public Iterator getAspectDescriptions() {
+ return Collections.EMPTY_LIST.iterator();
+ }
}
1.2 +23 -6
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/RendererAspectChain.java
Index: RendererAspectChain.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/RendererAspectChain.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- RendererAspectChain.java 7 May 2003 06:22:22 -0000 1.1
+++ RendererAspectChain.java 14 Jun 2003 17:55:43 -0000 1.2
@@ -60,9 +60,11 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.parameters.Parameters;
+import org.apache.cocoon.portal.layout.renderer.aspect.RendererAspect;
/**
- *
+ * This chain holds all configured renderer aspects for one renderer.
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Volker Schmitt</a>
*
@@ -70,9 +72,11 @@
*/
public final class RendererAspectChain {
- private List aspects = new ArrayList();
+ protected List aspects = new ArrayList(3);
+
+ protected List configs = new ArrayList(3);
- private List configs = new ArrayList();
+ protected List aspectDescriptions = new ArrayList(2);
public void configure(ComponentSelector selector, Configuration conf)
throws ConfigurationException {
@@ -83,8 +87,17 @@
final Configuration current = aspects[i];
final String role = current.getAttribute("type");
try {
- this.aspects.add(selector.select(role));
- this.configs.add(Parameters.fromConfiguration(current));
+ RendererAspect rAspect = (RendererAspect)
selector.select(role);
+ Parameters aspectConfiguration =
Parameters.fromConfiguration(current);
+ this.aspects.add(rAspect);
+ this.configs.add(aspectConfiguration);
+
+ Iterator descriptionIterator =
rAspect.getAspectDescriptions(aspectConfiguration);
+ if ( descriptionIterator != null ) {
+ while ( descriptionIterator.hasNext() ) {
+ this.aspectDescriptions.add(
descriptionIterator.next() );
+ }
+ }
} catch (ComponentException se) {
throw new ConfigurationException("Unable to lookup aspect "
+ role, se);
}
@@ -101,6 +114,10 @@
public Iterator getConfigIterator() {
return this.configs.iterator();
+ }
+
+ public Iterator getAspectDescriptionIterator() {
+ return this.aspectDescriptions.iterator();
}
public void dispose(ComponentSelector selector) {
1.4 +2 -16
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/XSLTAspect.java
Index: XSLTAspect.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/XSLTAspect.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XSLTAspect.java 10 Jun 2003 19:38:54 -0000 1.3
+++ XSLTAspect.java 14 Jun 2003 17:55:43 -0000 1.4
@@ -57,15 +57,10 @@
import org.apache.avalon.framework.component.Component;
import org.apache.avalon.framework.component.ComponentException;
-import org.apache.avalon.framework.component.ComponentManager;
-import org.apache.avalon.framework.component.Composable;
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.avalon.framework.thread.ThreadSafe;
import org.apache.cocoon.components.variables.VariableResolver;
import org.apache.cocoon.components.variables.VariableResolverFactory;
import org.apache.cocoon.portal.PortalService;
import org.apache.cocoon.portal.layout.Layout;
-import org.apache.cocoon.portal.layout.renderer.aspect.RendererAspect;
import org.apache.cocoon.portal.layout.renderer.aspect.RendererAspectContext;
import org.apache.cocoon.xml.IncludeXMLConsumer;
import org.apache.excalibur.source.Source;
@@ -85,11 +80,8 @@
* @version CVS $Id$
*/
public class XSLTAspect
- extends AbstractLogEnabled
- implements RendererAspect, ThreadSafe, Composable {
+ extends AbstractAspect {
- protected ComponentManager manager;
-
/* (non-Javadoc)
* @see
org.apache.cocoon.portal.layout.renderer.RendererAspect#toSAX(org.apache.cocoon.portal.layout.renderer.RendererAspectContext,
org.apache.cocoon.portal.layout.Layout, org.apache.cocoon.portal.PortalService,
org.xml.sax.ContentHandler)
*/
@@ -150,11 +142,5 @@
}
return stylesheet;
}
- /* (non-Javadoc)
- * @see
org.apache.avalon.framework.component.Composable#compose(org.apache.avalon.framework.component.ComponentManager)
- */
- public void compose(ComponentManager manager) throws ComponentException {
- this.manager = manager;
- }
}
1.7 +19 -2
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java
Index: TabContentAspect.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/TabContentAspect.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- TabContentAspect.java 23 May 2003 14:20:09 -0000 1.6
+++ TabContentAspect.java 14 Jun 2003 17:55:43 -0000 1.7
@@ -50,11 +50,14 @@
*/
package org.apache.cocoon.portal.layout.renderer.aspect.impl;
+import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import org.apache.avalon.framework.component.ComponentException;
+import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.portal.PortalService;
+import org.apache.cocoon.portal.aspect.impl.DefaultAspectDescription;
import org.apache.cocoon.portal.event.impl.ChangeAspectDataEvent;
import org.apache.cocoon.portal.layout.CompositeLayout;
import org.apache.cocoon.portal.layout.Layout;
@@ -99,7 +102,7 @@
CompositeLayout tabLayout = (CompositeLayout) layout;
// selected tab
- Integer data = (Integer) layout.getAspectData("tab");
+ Integer data = (Integer)
layout.getAspectData(context.getAspectParameters().getParameter("aspect-name", "tab"));
int selected = data.intValue();
// loop over all tabs
@@ -133,6 +136,20 @@
}
+ }
+
+ /**
+ * Return the aspects required for this renderer
+ * @return An iterator for the aspect descriptions or null.
+ */
+ public Iterator getAspectDescriptions(Parameters configuration) {
+ DefaultAspectDescription desc = new DefaultAspectDescription();
+ desc.setName(configuration.getParameter("aspect-name", "tab"));
+ desc.setClassName("java.lang.Integer");
+ desc.setPersistence(configuration.getParameter("store", "session"));
+ desc.setAutoCreate(true);
+
+ return Collections.singletonList(desc).iterator();
}
}
1.3 +12 -1
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/AbstractAspect.java
Index: AbstractAspect.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/impl/AbstractAspect.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AbstractAspect.java 22 May 2003 12:32:46 -0000 1.2
+++ AbstractAspect.java 14 Jun 2003 17:55:43 -0000 1.3
@@ -50,10 +50,13 @@
*/
package org.apache.cocoon.portal.layout.renderer.aspect.impl;
+import java.util.Iterator;
+
import org.apache.avalon.framework.component.ComponentException;
import org.apache.avalon.framework.component.ComponentManager;
import org.apache.avalon.framework.component.Composable;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.parameters.Parameters;
import org.apache.avalon.framework.thread.ThreadSafe;
import org.apache.cocoon.portal.layout.renderer.aspect.RendererAspect;
@@ -75,6 +78,14 @@
*/
public void compose(ComponentManager componentManager) throws
ComponentException {
this.manager = componentManager;
+ }
+
+ /**
+ * Return the aspects required for this renderer
+ * @return An iterator for the aspect descriptions or null.
+ */
+ public Iterator getAspectDescriptions(Parameters configuration) {
+ return null;
}
}
1.3 +27 -1
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/aspect/impl/DefaultAspectDescription.java
Index: DefaultAspectDescription.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/aspect/impl/DefaultAspectDescription.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- DefaultAspectDescription.java 22 May 2003 12:32:47 -0000 1.2
+++ DefaultAspectDescription.java 14 Jun 2003 17:55:43 -0000 1.3
@@ -50,6 +50,8 @@
*/
package org.apache.cocoon.portal.aspect.impl;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.cocoon.portal.aspect.AspectDescription;
@@ -75,6 +77,22 @@
protected String defaultValue;
/**
+ * Create a new description from a [EMAIL PROTECTED] Configuration} object.
+ * All values must be stored as attributes
+ */
+ public static AspectDescription newInstance(Configuration conf)
+ throws ConfigurationException {
+ DefaultAspectDescription adesc = new DefaultAspectDescription();
+ adesc.setClassName(conf.getAttribute("class"));
+ adesc.setName(conf.getAttribute("name"));
+ adesc.setPersistence(conf.getAttribute("store"));
+ adesc.setAutoCreate(conf.getAttributeAsBoolean("auto-create", false));
+ adesc.setDefaultValue(conf.getAttribute("value", null));
+
+ return adesc;
+ }
+
+ /**
* @return
*/
public String getClassName() {
@@ -139,5 +157,13 @@
public void setDefaultValue(String value) {
this.defaultValue = value;
+ }
+
+ public String toString() {
+ return ("AspectDescription name=" + this.name +
+ ", class=" + this.className +
+ ", persistence=" + this.persistence +
+ ", autoCreate=" + this.autoCreate +
+ ", defaultValue=" + this.defaultValue);
}
}
1.3 +9 -1
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/Renderer.java
Index: Renderer.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/Renderer.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Renderer.java 7 May 2003 20:24:03 -0000 1.2
+++ Renderer.java 14 Jun 2003 17:55:44 -0000 1.3
@@ -50,6 +50,8 @@
*/
package org.apache.cocoon.portal.layout.renderer;
+import java.util.Iterator;
+
import org.apache.avalon.framework.component.Component;
import org.apache.cocoon.portal.PortalService;
import org.apache.cocoon.portal.layout.Layout;
@@ -75,4 +77,10 @@
void toSAX(Layout layout, PortalService service, ContentHandler handler)
throws SAXException;
+ /**
+ * Return the aspects required for this renderer.
+ * This method always returns an iterator even if no descriptions are
+ * available.
+ */
+ Iterator getAspectDescriptions();
}
1.17 +1 -3 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.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- portal.xconf 14 Jun 2003 16:58:02 -0000 1.16
+++ portal.xconf 14 Jun 2003 17:55:44 -0000 1.17
@@ -90,6 +90,7 @@
</aspect>
<aspect type="tab-content">
<parameter name="tag-name" value="tab-layout"/>
+ <parameter name="store" value="session"/>
</aspect>
</aspects>
</renderer>
@@ -152,9 +153,6 @@
<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"
1.3 +10 -1
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/RendererAspect.java
Index: RendererAspect.java
===================================================================
RCS file:
/home/cvs/cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/layout/renderer/aspect/RendererAspect.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- RendererAspect.java 7 May 2003 20:24:03 -0000 1.2
+++ RendererAspect.java 14 Jun 2003 17:55:44 -0000 1.3
@@ -50,7 +50,10 @@
*/
package org.apache.cocoon.portal.layout.renderer.aspect;
+import java.util.Iterator;
+
import org.apache.avalon.framework.component.Component;
+import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.portal.PortalService;
import org.apache.cocoon.portal.layout.Layout;
import org.xml.sax.ContentHandler;
@@ -77,5 +80,11 @@
PortalService service,
ContentHandler handler)
throws SAXException;
+
+ /**
+ * Return the aspects required for this renderer
+ * @return An iterator for the aspect descriptions or null.
+ */
+ Iterator getAspectDescriptions(Parameters configuration);
}