bloritsch 01/06/08 10:53:38 Modified: src/org/apache/cocoon/sitemap Tag: cocoon_20_branch AbstractSitemap.java SitemapComponentSelector.java sitemap.roles Log: Make Sitemap Component inheritance work properly. Revision Changes Path No revision No revision 1.4.2.5 +50 -22 xml-cocoon2/src/org/apache/cocoon/sitemap/AbstractSitemap.java Index: AbstractSitemap.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/AbstractSitemap.java,v retrieving revision 1.4.2.4 retrieving revision 1.4.2.5 diff -u -r1.4.2.4 -r1.4.2.5 --- AbstractSitemap.java 2001/06/08 14:41:59 1.4.2.4 +++ AbstractSitemap.java 2001/06/08 17:53:31 1.4.2.5 @@ -36,7 +36,6 @@ import org.apache.cocoon.environment.Environment; import org.apache.cocoon.util.ClassUtils; import org.apache.avalon.excalibur.component.ExcaliburComponentManager; -import org.apache.avalon.excalibur.component.ExcaliburComponentSelector; import org.apache.avalon.excalibur.component.RoleManager; import org.apache.avalon.excalibur.component.DefaultRoleManager; @@ -44,7 +43,7 @@ * Base class for generated <code>Sitemap</code> classes * * @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a> - * @version CVS $Revision: 1.4.2.4 $ $Date: 2001/06/08 14:41:59 $ + * @version CVS $Revision: 1.4.2.5 $ $Date: 2001/06/08 17:53:31 $ */ public abstract class AbstractSitemap extends AbstractLoggable implements Sitemap, Disposable, ThreadSafe { private Context context; @@ -63,13 +62,13 @@ /** The creation date */ protected static long dateCreated = -1L; - protected ExcaliburComponentSelector generators; - protected ExcaliburComponentSelector transformers; + protected SitemapComponentSelector generators; + protected SitemapComponentSelector transformers; protected SitemapComponentSelector serializers; protected SitemapComponentSelector readers; - protected ExcaliburComponentSelector actions; - protected ExcaliburComponentSelector matchers; - protected ExcaliburComponentSelector selectors; + protected SitemapComponentSelector actions; + protected SitemapComponentSelector matchers; + protected SitemapComponentSelector selectors; /** * Set the role manager @@ -90,37 +89,66 @@ this.manager.setLogger(getLogger()); this.manager.contextualize(this.context); this.manager.setRoleManager(AbstractSitemap.roleManager); + try { - this.manager.configure(AbstractSitemap.defaultConfig); this.urlFactory = (URLFactory)manager.lookup(Roles.URL_FACTORY); - this.generators = new ExcaliburComponentSelector(); + + // Create Sitemap Selectors + this.generators = new SitemapComponentSelector(); + this.transformers = new SitemapComponentSelector(); + this.serializers = new SitemapComponentSelector(); + this.readers = new SitemapComponentSelector(); + this.actions = new SitemapComponentSelector(); + this.matchers = new SitemapComponentSelector(); + this.selectors = new SitemapComponentSelector(); + + // Set Parent Sitemap Selectors + if (AbstractSitemap.defaultConfig == null) { + try { + this.generators.setParentSelector((SitemapComponentSelector) this.manager.lookup(Roles.GENERATORS)); + this.transformers.setParentSelector((SitemapComponentSelector) this.manager.lookup(Roles.TRANSFORMERS)); + this.serializers.setParentSelector((SitemapComponentSelector) this.manager.lookup(Roles.SERIALIZERS)); + this.readers.setParentSelector((SitemapComponentSelector) this.manager.lookup(Roles.READERS)); + this.actions.setParentSelector((SitemapComponentSelector) this.manager.lookup(Roles.ACTIONS)); + this.matchers.setParentSelector((SitemapComponentSelector) this.manager.lookup(Roles.MATCHERS)); + this.selectors.setParentSelector((SitemapComponentSelector) this.manager.lookup(Roles.SELECTORS)); + } catch (ComponentException ce) { + /* we are ignoring those exceptions. We just want + * to ensure that the selectors get initialized + * properly + */ + } + } + + // Setup the Selectors this.setupSelector(this.generators); - this.manager.addComponentInstance(Roles.GENERATORS, this.generators); - this.transformers = new ExcaliburComponentSelector(); this.setupSelector(this.transformers); - this.manager.addComponentInstance(Roles.TRANSFORMERS, this.transformers); - this.serializers = new SitemapComponentSelector(); this.setupSelector(this.serializers); - this.manager.addComponentInstance(Roles.SERIALIZERS, this.serializers); - this.readers = new SitemapComponentSelector(); this.setupSelector(this.readers); - this.manager.addComponentInstance(Roles.READERS, this.readers); - this.actions = new ExcaliburComponentSelector(); this.setupSelector(this.actions); - this.manager.addComponentInstance(Roles.ACTIONS, this.actions); - this.matchers = new ExcaliburComponentSelector(); this.setupSelector(this.matchers); - this.manager.addComponentInstance(Roles.MATCHERS, this.matchers); - this.selectors = new ExcaliburComponentSelector(); this.setupSelector(this.selectors); + + // Add the Selectors + this.manager.addComponentInstance(Roles.GENERATORS, this.generators); + this.manager.addComponentInstance(Roles.TRANSFORMERS, this.transformers); + this.manager.addComponentInstance(Roles.SERIALIZERS, this.serializers); + this.manager.addComponentInstance(Roles.READERS, this.readers); + this.manager.addComponentInstance(Roles.ACTIONS, this.actions); + this.manager.addComponentInstance(Roles.MATCHERS, this.matchers); this.manager.addComponentInstance(Roles.SELECTORS, this.selectors); + + if (AbstractSitemap.defaultConfig != null) { + this.manager.configure(AbstractSitemap.defaultConfig); + AbstractSitemap.defaultConfig = null; + } } catch (Exception e) { getLogger().error("cannot obtain the Component", e); throw new ComponentException("cannot obtain the URLFactory", e); } } - private void setupSelector(ExcaliburComponentSelector selector) throws Exception { + private void setupSelector(SitemapComponentSelector selector) throws Exception { selector.setLogger(getLogger()); selector.contextualize(this.context); selector.setRoleManager(AbstractSitemap.roleManager); 1.2.2.4 +35 -2 xml-cocoon2/src/org/apache/cocoon/sitemap/SitemapComponentSelector.java Index: SitemapComponentSelector.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/SitemapComponentSelector.java,v retrieving revision 1.2.2.3 retrieving revision 1.2.2.4 diff -u -r1.2.2.3 -r1.2.2.4 --- SitemapComponentSelector.java 2001/06/08 14:42:08 1.2.2.3 +++ SitemapComponentSelector.java 2001/06/08 17:53:33 1.2.2.4 @@ -8,10 +8,13 @@ package org.apache.cocoon.sitemap; +import java.util.Collections; import java.util.HashMap; +import java.util.Map; 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.ComponentSelector; import org.apache.avalon.framework.component.Composable; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; @@ -20,16 +23,46 @@ /** Default component manager for Cocoon's sitemap components. * @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a> * @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a> - * @version CVS $Id: SitemapComponentSelector.java,v 1.2.2.3 2001/06/08 14:42:08 bloritsch Exp $ + * @version CVS $Id: SitemapComponentSelector.java,v 1.2.2.4 2001/06/08 17:53:33 bloritsch Exp $ */ public class SitemapComponentSelector extends ExcaliburComponentSelector { - private HashMap mime_types; + private Map mime_types; + private ComponentSelector parentSelector; + private boolean initialized = false; /** The conctructors (same as the Avalon ComponentManager) */ public SitemapComponentSelector() { super(); this.mime_types = new HashMap(); + } + + public void setParentSelector(ComponentSelector newSelector) { + if ((! this.initialized) && this.parentSelector == null) { + this.parentSelector = newSelector; + } + } + + public Component select(Object hint) throws ComponentException { + Component component = null; + + try { + component = super.select(hint); + } catch (ComponentException ce) { + if (this.parentSelector != null) { + component = this.parentSelector.select(hint); + } else { + throw ce; + } + } + + return component; + } + + public void initialize() { + super.initialize(); + this.mime_types = Collections.unmodifiableMap(this.mime_types); + this.initialized = true; } public String getMimeTypeForRole(String role) { 1.1.2.4 +5 -5 xml-cocoon2/src/org/apache/cocoon/sitemap/Attic/sitemap.roles Index: sitemap.roles =================================================================== RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/sitemap/Attic/sitemap.roles,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -r1.1.2.3 -r1.1.2.4 --- sitemap.roles 2001/06/07 21:13:41 1.1.2.3 +++ sitemap.roles 2001/06/08 17:53:34 1.1.2.4 @@ -11,23 +11,23 @@ <role name="org.apache.cocoon.acting.ActionSelector" shorthand="action" - default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"/> + default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/> <role name="org.apache.cocoon.selection.SelectorSelector" shorthand="selector" - default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"/> + default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/> <role name="org.apache.cocoon.matching.MatcherSelector" shorthand="matcher" - default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"/> + default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/> <role name="org.apache.cocoon.generation.GeneratorSelector" shorthand="generator" - default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"/> + default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/> <role name="org.apache.cocoon.transformation.TransformerSelector" shorthand="transformer" - default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"/> + default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/> <role name="org.apache.cocoon.serialization.SerializerSelector" shorthand="serializer" ---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]