vgritsenko 02/02/03 18:30:35 Modified: . changes.xml src/java/org/apache/cocoon cocoon.roles src/java/org/apache/cocoon/components/language/markup/sitemap/java sitemap.xsl src/java/org/apache/cocoon/sitemap SitemapComponentSelector.java src/webapp cocoon.xconf sitemap.xmap Log: - Add sitemap components roles into cocoon.roles - Enhance sitemap component selector to read roles config - Labels defined on components are now inherited in the subsitemaps, and can be overrided. - Move some components from the sitemap to the cocoon.xconf Revision Changes Path 1.98 +7 -2 xml-cocoon2/changes.xml Index: changes.xml =================================================================== RCS file: /home/cvs/xml-cocoon2/changes.xml,v retrieving revision 1.97 retrieving revision 1.98 diff -u -r1.97 -r1.98 --- changes.xml 3 Feb 2002 22:12:39 -0000 1.97 +++ changes.xml 4 Feb 2002 02:30:34 -0000 1.98 @@ -4,7 +4,7 @@ <!-- History of Cocoon changes - $Id: changes.xml,v 1.97 2002/02/03 22:12:39 gianugo Exp $ + $Id: changes.xml,v 1.98 2002/02/04 02:30:34 vgritsenko Exp $ --> <changes title="History of Changes"> @@ -31,6 +31,11 @@ </devs> <release version="@version@" date="@date@"> + <action dev="VG" type="update"> + Allow sitemap components to be declared in the cocoon.xconf. Enhance + SitemapComponentSelector to store label information provided in + the configuration. + </action> <action dev="GR" type="add"> Added the XPath-enabled DirectoryGenerator (XPathDirectoryGenerator) to scratchpad. @@ -70,7 +75,7 @@ <action dev="VG" type="add"> Added size() method to the Store interface. </action> - <action dev="GP" type="fixed"> + <action dev="GP" type="fix"> Prevent PostInputStream from looping if the available() method of the base InputStream is returning 0. </action> 1.6 +129 -104 xml-cocoon2/src/java/org/apache/cocoon/cocoon.roles Index: cocoon.roles =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/cocoon.roles,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- cocoon.roles 2 Feb 2002 02:42:39 -0000 1.5 +++ cocoon.roles 4 Feb 2002 02:30:34 -0000 1.6 @@ -13,152 +13,177 @@ ]> <role-list> - <role name="org.apache.cocoon.components.parser.Parser" - shorthand="parser" - default-class="org.apache.cocoon.components.parser.JaxpParser"/> - - <role name="org.apache.cocoon.components.xslt.XSLTProcessor" - shorthand="xslt-processor" - default-class="org.apache.cocoon.components.xslt.XSLTProcessorImpl"/> - - <role name="org.apache.cocoon.components.xpath.XPathProcessor" - shorthand="xpath-processor" - default-class="org.apache.cocoon.components.xpath.XPathProcessorImpl"/> - - <role name="org.apache.cocoon.components.browser.Browser" - shorthand="browser" - default-class="org.apache.cocoon.components.browser.BrowserImpl"/> + <role name="org.apache.cocoon.components.parser.Parser" + shorthand="parser" + default-class="org.apache.cocoon.components.parser.JaxpParser"/> + + <role name="org.apache.cocoon.components.xslt.XSLTProcessor" + shorthand="xslt-processor" + default-class="org.apache.cocoon.components.xslt.XSLTProcessorImpl"/> + + <role name="org.apache.cocoon.components.xpath.XPathProcessor" + shorthand="xpath-processor" + default-class="org.apache.cocoon.components.xpath.XPathProcessorImpl"/> + + <role name="org.apache.cocoon.components.browser.Browser" + shorthand="browser" + default-class="org.apache.cocoon.components.browser.BrowserImpl"/> <!-- For backwards compatibility, the shorthand for this role is "sitemap" - <role name="org.apache.cocoon.Processor" - shorthand="processor"/> + <role name="org.apache.cocoon.Processor" + shorthand="processor"/> --> - <role name="org.apache.cocoon.components.deli.Deli" - shorthand="deli"/> + <role name="org.apache.cocoon.components.deli.Deli" + shorthand="deli"/> - <role name="org.apache.cocoon.Processor" - shorthand="sitemap" - default-class="org.apache.cocoon.sitemap.SitemapManager"/> + <role name="org.apache.cocoon.Processor" + shorthand="sitemap" + default-class="org.apache.cocoon.sitemap.SitemapManager"/> <role name="org.apache.cocoon.components.store.Store" - shorthand="cache-transient" - default-class="org.apache.cocoon.components.store.MRUMemoryStore"/> - + shorthand="cache-transient" + default-class="org.apache.cocoon.components.store.MRUMemoryStore"/> + <role name="org.apache.cocoon.components.store.Store/Filesystem" - shorthand="repository" - default-class="org.apache.cocoon.components.store.FilesystemStore"/> + shorthand="repository" + default-class="org.apache.cocoon.components.store.FilesystemStore"/> <role name="org.apache.cocoon.components.store.Store/PersistentCache" shorthand="cache-persistent" default-class="org.apache.cocoon.components.store.FilesystemStore"/> - + <role name="org.apache.cocoon.components.store.StoreJanitor" shorthand="store-janitor" default-class="org.apache.cocoon.components.store.StoreJanitorImpl"/> - + <role name="org.apache.cocoon.components.language.generator.ServerPagesSelector" shorthand="server-pages" default-class="org.apache.cocoon.components.language.generator.GeneratorSelector"/> - <role name="org.apache.cocoon.components.language.markup.MarkupLanguageSelector" - shorthand="markup-languages" - default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"> - <hint shorthand="sitemap-language" class="org.apache.cocoon.components.language.markup.sitemap.SitemapMarkupLanguage"/> - <hint shorthand="xsp-language" class="org.apache.cocoon.components.language.markup.xsp.XSPMarkupLanguage"/> - </role> - - <role name="org.apache.cocoon.components.language.programming.ProgrammingLanguageSelector" - shorthand="programming-languages" - default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"> - <hint shorthand="java-language" class="org.apache.cocoon.components.language.programming.java.JavaLanguage"/> - </role> - - <role name="org.apache.cocoon.components.language.generator.ProgramGenerator" - shorthand="program-generator" - default-class="org.apache.cocoon.components.language.generator.ProgramGeneratorImpl"/> - - <role name="org.apache.cocoon.components.jsp.JSPEngine" - shorthand="jsp-engine" - default-class="org.apache.cocoon.components.jsp.JSPEngineImpl"/> - - <role name="org.apache.cocoon.components.resolver.Resolver" - shorthand="resolver" - default-class="org.apache.cocoon.components.resolver.ResolverImpl"/> - - <role name="org.apache.cocoon.components.classloader.ClassLoaderManager" - shorthand="classloader" - default-class="org.apache.cocoon.components.classloader.ClassLoaderManagerImpl"/> - - <role name="org.apache.cocoon.components.image.ImageEncoderSelector" - shorthand="image-encoder"/> - - <role name="org.apache.avalon.excalibur.datasource.DataSourceComponentSelector" - shorthand="datasources" - default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"> + <role name="org.apache.cocoon.components.language.markup.MarkupLanguageSelector" + shorthand="markup-languages" + default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"> + <hint shorthand="sitemap-language" class="org.apache.cocoon.components.language.markup.sitemap.SitemapMarkupLanguage"/> + <hint shorthand="xsp-language" class="org.apache.cocoon.components.language.markup.xsp.XSPMarkupLanguage"/> + </role> + + <role name="org.apache.cocoon.components.language.programming.ProgrammingLanguageSelector" + shorthand="programming-languages" + default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"> + <hint shorthand="java-language" class="org.apache.cocoon.components.language.programming.java.JavaLanguage"/> + </role> + + <role name="org.apache.cocoon.components.language.generator.ProgramGenerator" + shorthand="program-generator" + default-class="org.apache.cocoon.components.language.generator.ProgramGeneratorImpl"/> + + <role name="org.apache.cocoon.components.jsp.JSPEngine" + shorthand="jsp-engine" + default-class="org.apache.cocoon.components.jsp.JSPEngineImpl"/> + + <role name="org.apache.cocoon.components.resolver.Resolver" + shorthand="resolver" + default-class="org.apache.cocoon.components.resolver.ResolverImpl"/> + + <role name="org.apache.cocoon.components.classloader.ClassLoaderManager" + shorthand="classloader" + default-class="org.apache.cocoon.components.classloader.ClassLoaderManagerImpl"/> + + <role name="org.apache.cocoon.components.image.ImageEncoderSelector" + shorthand="image-encoder"/> + + <role name="org.apache.avalon.excalibur.datasource.DataSourceComponentSelector" + shorthand="datasources" + default-class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"> <hint shorthand="jdbc" class="org.apache.avalon.excalibur.datasource.JdbcDataSource"/> <hint shorthand="j2ee" class="org.apache.avalon.excalibur.datasource.J2eeDataSource"/> <hint shorthand="informix" class="org.apache.avalon.excalibur.datasource.InformixDataSource"/> - </role> + </role> - <role name="org.apache.cocoon.components.url.URLFactory" - shorthand="url-factory" - default-class="org.apache.cocoon.components.url.URLFactoryImpl"/> + <role name="org.apache.cocoon.components.url.URLFactory" + shorthand="url-factory" + default-class="org.apache.cocoon.components.url.URLFactoryImpl"/> - <role name="org.apache.cocoon.components.source.SourceHandler" - shorthand="source-handler" - default-class="org.apache.cocoon.components.source.SourceHandlerImpl"/> + <role name="org.apache.cocoon.components.source.SourceHandler" + shorthand="source-handler" + default-class="org.apache.cocoon.components.source.SourceHandlerImpl"/> - <role name="org.apache.cocoon.components.sax.XMLSerializer" - shorthand="xml-serializer" - default-class="org.apache.cocoon.components.sax.XMLByteStreamCompiler"/> + <role name="org.apache.cocoon.components.sax.XMLSerializer" + shorthand="xml-serializer" + default-class="org.apache.cocoon.components.sax.XMLByteStreamCompiler"/> - <role name="org.apache.cocoon.components.sax.XMLDeserializer" - shorthand="xml-deserializer" - default-class="org.apache.cocoon.components.sax.XMLByteStreamInterpreter"/> + <role name="org.apache.cocoon.components.sax.XMLDeserializer" + shorthand="xml-deserializer" + default-class="org.apache.cocoon.components.sax.XMLByteStreamInterpreter"/> - - <role name="org.apache.cocoon.components.hsqldb.Server" - shorthand="hsqldb-server" - default-class="org.apache.cocoon.components.hsqldb.ServerImpl"/> + <role name="org.apache.cocoon.components.hsqldb.Server" + shorthand="hsqldb-server" + default-class="org.apache.cocoon.components.hsqldb.ServerImpl"/> - <role name="org.apache.cocoon.components.profiler.Profiler" - shorthand="profiler" - default-class="org.apache.cocoon.components.profiler.SimpleProfiler"/> + <role name="org.apache.cocoon.components.profiler.Profiler" + shorthand="profiler" + default-class="org.apache.cocoon.components.profiler.SimpleProfiler"/> - <role name="org.apache.cocoon.components.xscript.XScriptManager" - shorthand="xscript" - default-class="org.apache.cocoon.components.xscript.XScriptManagerImpl"/> + <role name="org.apache.cocoon.components.xscript.XScriptManager" + shorthand="xscript" + default-class="org.apache.cocoon.components.xscript.XScriptManagerImpl"/> - <role name="org.apache.cocoon.components.pipeline.StreamPipeline" - shorthand="stream-pipeline" - default-class="org.apache.cocoon.components.pipeline.NonCachingStreamPipeline"/> + <role name="org.apache.cocoon.components.pipeline.StreamPipeline" + shorthand="stream-pipeline" + default-class="org.apache.cocoon.components.pipeline.NonCachingStreamPipeline"/> - <role name="org.apache.cocoon.components.pipeline.EventPipeline" - shorthand="event-pipeline" - default-class="org.apache.cocoon.components.pipeline.NonCachingEventPipeline"/> + <role name="org.apache.cocoon.components.pipeline.EventPipeline" + shorthand="event-pipeline" + default-class="org.apache.cocoon.components.pipeline.NonCachingEventPipeline"/> - <role name="org.apache.cocoon.components.saxconnector.SAXConnector" - shorthand="sax-connector"/> + <role name="org.apache.cocoon.components.saxconnector.SAXConnector" + shorthand="sax-connector"/> - <!-- Lucene Components --> + <!-- Lucene Components --> <role name="org.apache.cocoon.components.search.LuceneCocoonIndexer" shorthand="cocoon-indexer" - default-class="org.apache.cocoon.components.search.SimpleLuceneCocoonIndexerImpl" - /> + default-class="org.apache.cocoon.components.search.SimpleLuceneCocoonIndexerImpl"/> <role name="org.apache.cocoon.components.search.LuceneCocoonSearcher" shorthand="cocoon-searcher" - default-class="org.apache.cocoon.components.search.SimpleLuceneCocoonSearcherImpl" - /> + default-class="org.apache.cocoon.components.search.SimpleLuceneCocoonSearcherImpl"/> <role name="org.apache.cocoon.components.search.LuceneXMLIndexer" shorthand="lucene-xml-indexer" - default-class="org.apache.cocoon.components.search.SimpleLuceneXMLIndexerImpl" - /> + default-class="org.apache.cocoon.components.search.SimpleLuceneXMLIndexerImpl"/> <role name="org.apache.cocoon.components.crawler.CocoonCrawler" shorthand="cocoon-crawler" - default-class="org.apache.cocoon.components.crawler.SimpleCocoonCrawlerImpl" - /> + default-class="org.apache.cocoon.components.crawler.SimpleCocoonCrawlerImpl"/> + + <!-- Sitemap Roles --> + <role name="org.apache.cocoon.acting.ActionSelector" + shorthand="actions" + default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/> + + <role name="org.apache.cocoon.selection.SelectorSelector" + shorthand="selectors" + default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/> + + <role name="org.apache.cocoon.matching.MatcherSelector" + shorthand="matchers" + default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/> + + <role name="org.apache.cocoon.generation.GeneratorSelector" + shorthand="generators" + default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"> + </role> + + <role name="org.apache.cocoon.transformation.TransformerSelector" + shorthand="transformers" + default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/> + + <role name="org.apache.cocoon.serialization.SerializerSelector" + shorthand="serializers" + default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/> + + <role name="org.apache.cocoon.reading.ReaderSelector" + shorthand="readers" + default-class="org.apache.cocoon.sitemap.SitemapComponentSelector"/> </role-list> 1.7 +65 -58 xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/sitemap/java/sitemap.xsl Index: sitemap.xsl =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/sitemap/java/sitemap.xsl,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- sitemap.xsl 2 Feb 2002 02:49:45 -0000 1.6 +++ sitemap.xsl 4 Feb 2002 02:30:34 -0000 1.7 @@ -201,6 +201,7 @@ import org.apache.cocoon.sitemap.ContentAggregator; import org.apache.cocoon.sitemap.Manager; import org.apache.cocoon.sitemap.SitemapRedirector; + import org.apache.cocoon.sitemap.SitemapComponentSelector; import org.apache.cocoon.components.language.markup.xsp.XSPRequestHelper; import org.apache.cocoon.components.language.markup.xsp.XSPResponseHelper; import org.apache.cocoon.components.notification.NotifyingBuilder; @@ -214,7 +215,7 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a> * @author <a href="mailto:[EMAIL PROTECTED]">Nicola Ken Barozzi</a> * @author <a href="mailto:[EMAIL PROTECTED]">Peter Royal</a> - * @version CVS $Id: sitemap.xsl,v 1.6 2002/02/02 02:49:45 dims Exp $ + * @version CVS $Id: sitemap.xsl,v 1.7 2002/02/04 02:30:34 vgritsenko Exp $ */ public class <xsl:value-of select="@file-name"/> extends AbstractSitemap { static final String LOCATION = "<xsl:value-of select="translate(@file-path, '/', '.')"/>.<xsl:value-of select="@file-name"/>"; @@ -502,22 +503,53 @@ } </xsl:for-each> - <!-- generate contains_view method to check if a view request is satisfied --> - private final String contains_view(String labels, String cocoon_view) { + <!-- generate check_view method to check if a view request is satisfied --> + private final boolean check_view(String labels, String cocoon_view) { + if (cocoon_view == null) return false; final boolean debug_enabled = getLogger().isDebugEnabled(); - if (debug_enabled) getLogger().debug("contains_view(\"" + labels + "\", \"" + cocoon_view + "\")"); + StringTokenizer st = new StringTokenizer(labels, " ,", false); while (st.hasMoreTokens()) { String token = st.nextToken(); String view = (String)view_label_map.get(token); - if (debug_enabled) getLogger().debug("contains_view: examining token \"" + token + "\" against view \"" + view + "\""); if (view != null && view.equals(cocoon_view)) { - if (debug_enabled) getLogger().debug("contains_view: view \"" + view + "\" selected"); - return view; + if (debug_enabled) getLogger().debug("check_view: view \"" + view + "\" selected"); + return true; } } - return null; - } + return false; + } + + <!-- generate check_view method to check if a view request is satisfied with the component --> + private final boolean check_view(SitemapComponentSelector selector, String hint, String labels, String cocoon_view) { + if (cocoon_view == null) return false; + final boolean debug_enabled = getLogger().isDebugEnabled(); + + if (labels != null) { + // Check labels provided on component invocation + StringTokenizer st = new StringTokenizer(labels, " ,", false); + while (st.hasMoreTokens()) { + String view = (String)view_label_map.get(st.nextToken()); + if (view != null && view.equals(cocoon_view)) { + if (debug_enabled) getLogger().debug("check_view: View \"" + view + "\" selected"); + return true; + } + } + } + + String[] aLabels = selector.getLabels(hint); + if (aLabels != null) { + // Check labels provided on component declaration + for (int i=0; i < aLabels.length; i++) { + String view = (String)view_label_map.get(aLabels[i]); + if (view != null && view.equals(cocoon_view)) { + if (debug_enabled) getLogger().debug("check_view: View \"" + view + "\" selected"); + return true; + } + } + } + return false; + } <!-- generate call_view method to satisfy a view request --> private final boolean call_view(String view_name, @@ -1391,27 +1423,20 @@ <!-- check if a view was requested which matches one attached to a part element --> <xsl:if test="map:part[@label]"> - { - boolean hasMatchingViewRequest = false; + { + boolean has_cocoon_view = false; <xsl:for-each select="map:part[@label]"> - if (contains_view("<xsl:value-of select="@label"/>", cocoon_view) != null) { - hasMatchingViewRequest = true; + if (check_view("<xsl:value-of select="@label"/>", cocoon_view)) { + has_cocoon_view = true; <xsl:apply-templates select="."> <xsl:with-param name="ca"><xsl:value-of select="$ca"/></xsl:with-param> </xsl:apply-templates> } </xsl:for-each> - - <!-- process all map:parts --> - if (hasMatchingViewRequest) { - <xsl:for-each select="map:part[@label]"> - <!-- invoke view, and return here --> - <xsl:call-template name="view-label"> - <xsl:with-param name="label"><xsl:value-of select="@label"/></xsl:with-param> - </xsl:call-template> - </xsl:for-each> + if (has_cocoon_view) { + return call_view(cocoon_view, pipeline, eventPipeline, listOfMaps, environment, internalRequest); + } } - } </xsl:if> <xsl:apply-templates select="map:part"> <xsl:with-param name="ca"><xsl:value-of select="$ca"/></xsl:with-param> @@ -1419,9 +1444,9 @@ <!-- process attached labels to the map:aggregate element --> <xsl:if test="@label"> - <xsl:call-template name="view-label"> - <xsl:with-param name="label"><xsl:value-of select="@label"/></xsl:with-param> - </xsl:call-template> + if (check_view("<xsl:value-of select="@label"/>", cocoon_view)) { + return call_view(cocoon_view, pipeline, eventPipeline, listOfMaps, environment, internalRequest); + } </xsl:if> </xsl:template> <!-- match="map:aggregate" --> @@ -1686,39 +1711,21 @@ </xsl:for-each> </xsl:if> - <xsl:if test="@label"> - <xsl:call-template name="view-label"> - <xsl:with-param name="label"><xsl:value-of select="@label"/></xsl:with-param> - </xsl:call-template> - </xsl:if> - - <xsl:variable name="component-label"> - <xsl:if test="$prefix='generator'"> - <xsl:value-of select="/map:sitemap/map:components/map:generators/map:generator[@name=$component-type]/@label"/> - </xsl:if> - <xsl:if test="$prefix='transformer'"> - <xsl:value-of select="/map:sitemap/map:components/map:transformers/map:transformer[@name=$component-type]/@label"/> - </xsl:if> - </xsl:variable> - <xsl:if test="string-length($component-label) > 0"> - <xsl:call-template name="view-label"> - <xsl:with-param name="label"><xsl:value-of select="$component-label"/></xsl:with-param> - </xsl:call-template> - </xsl:if> + <xsl:choose> + <xsl:when test="@label"> + { boolean has_view = check_view(<xsl:value-of select="$prefix"/>s, "<xsl:value-of select="$component-type"/>", "<xsl:value-of select="@label"/>", cocoon_view); + if (has_view) { + return call_view(cocoon_view, pipeline, eventPipeline, listOfMaps, environment, internalRequest); + }} + </xsl:when> + <xsl:otherwise> + { boolean has_view = check_view(<xsl:value-of select="$prefix"/>s, "<xsl:value-of select="$component-type"/>", null, cocoon_view); + if (has_view) { + return call_view(cocoon_view, pipeline, eventPipeline, listOfMaps, environment, internalRequest); + }} + </xsl:otherwise> + </xsl:choose> </xsl:if> - </xsl:template> - - - - <!-- generate the code to match a label definition --> - <xsl:template name="view-label"> - <xsl:param name="label"/> - { - String view_name = null; - if ((view_name = contains_view("<xsl:value-of select="$label"/>", cocoon_view)) != null) { - return call_view(view_name, pipeline, eventPipeline, listOfMaps, environment, internalRequest); - } - } </xsl:template> 1.4 +59 -8 xml-cocoon2/src/java/org/apache/cocoon/sitemap/SitemapComponentSelector.java Index: SitemapComponentSelector.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/sitemap/SitemapComponentSelector.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- SitemapComponentSelector.java 22 Jan 2002 00:17:13 -0000 1.3 +++ SitemapComponentSelector.java 4 Feb 2002 02:30:34 -0000 1.4 @@ -19,14 +19,20 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.ArrayList; +import java.util.StringTokenizer; -/** Default component manager for Cocoon's sitemap components. +/** + * 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.3 2002/01/22 00:17:13 vgritsenko Exp $ + * @version CVS $Id: SitemapComponentSelector.java,v 1.4 2002/02/04 02:30:34 vgritsenko Exp $ */ public class SitemapComponentSelector extends ExcaliburComponentSelector implements OutputComponentSelector { + + private Map hintLabels; private Map mime_types; private SitemapComponentSelector parentSelector; @@ -37,6 +43,7 @@ */ public SitemapComponentSelector() { super(); + this.hintLabels = new HashMap(); this.mime_types = new HashMap(); componentMapping = Collections.synchronizedMap(new HashMap()); } @@ -80,8 +87,9 @@ } public String getMimeTypeForHint(Object hint) { - if (this.mime_types.containsKey(hint)) { - return (String)this.mime_types.get(hint); + String mimeType = (String)this.mime_types.get(hint); + if (mimeType != null) { + return mimeType; } if (this.parentSelector != null) { return this.parentSelector.getMimeTypeForHint(hint); @@ -89,9 +97,52 @@ return null; } - public void addSitemapComponent(Object hint, Class component, Configuration conf, String mime_type) throws ComponentException, - ConfigurationException { - super.addComponent(hint, component, conf); - this.mime_types.put(hint, mime_type); + public boolean hasLabel(Object hint, String label) { + String[] labels = (String[])this.hintLabels.get(hint); + if (labels != null) { + for (int i = 0; i < labels.length; i++) { + if (labels[i].equals(label)) + return true; + } + } else if (parentSelector != null) { + return parentSelector.hasLabel(hint, label); + } + return false; + } + + public String[] getLabels(Object hint) { + String[] labels = (String[])this.hintLabels.get(hint); + if (labels == null && parentSelector != null) { + return parentSelector.getLabels(hint); + } + return labels; + } + + public void addComponent(Object hint, Class component, Configuration conf) + throws ComponentException { + + String mimeType = conf.getAttribute("mime-type", null); + if (mimeType != null) + this.mime_types.put(hint, mimeType); + + String label = conf.getAttribute("label", null); + if (label != null) { + StringTokenizer st = new StringTokenizer(label, " ,", false); + String[] labels = new String[st.countTokens()]; + for (int i = 0; i < labels.length; i++) { + labels[i] = st.nextToken(); + } + this.hintLabels.put(hint, labels); + } + + super.addComponent(hint, component, conf); + } + + public void addSitemapComponent(Object hint, Class component, + Configuration conf, String mimeType) + throws ComponentException, ConfigurationException { + + this.addComponent(hint, component, conf); + this.mime_types.put(hint, mimeType); } } 1.21 +56 -2 xml-cocoon2/src/webapp/cocoon.xconf Index: cocoon.xconf =================================================================== RCS file: /home/cvs/xml-cocoon2/src/webapp/cocoon.xconf,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- cocoon.xconf 3 Feb 2002 17:58:14 -0000 1.20 +++ cocoon.xconf 4 Feb 2002 02:30:35 -0000 1.21 @@ -392,7 +392,7 @@ --> <stream-pipeline class="org.apache.cocoon.components.pipeline.CachingStreamPipeline" logger="core.stream-pipeline" - pool-max="32" pool-min="16" pool-grow="4"/> + pool-max="32" pool-min="8" pool-grow="4"/> <!-- Event Pipeline: Connects the generator and the various transformers and produces a @@ -403,7 +403,7 @@ --> <event-pipeline class="org.apache.cocoon.components.pipeline.CachingEventPipeline" logger="core.event-pipeline" - pool-max="32" pool-min="16" pool-grow="4"/> + pool-max="32" pool-min="8" pool-grow="4"/> <!-- Compiling xml to byte streams. The xml-serializer "compiles" xml sax events into a byte stream @@ -469,5 +469,59 @@ asynchron and for more safety the check-reload to no. --> <sitemap file="sitemap.xmap" reload-method="asynchron" check-reload="yes" logger="sitemap"/> + +<!-- ===================== Sitemap Components =========================== --> + + <!-- Here defined some core Cocoon sitemap components, as File generator + or XSLT transformer. Note that syntax of this file slightly differs + from the syntax of <map:components> section of the sitemap.xmap file. + --> + <generators> + <component-instance name="file" class="org.apache.cocoon.generation.FileGenerator" + label="content,data" + logger="sitemap.generator.file" + pool-max="32" pool-min="8" pool-grow="4"/> + + <component-instance name="serverpages" class="org.apache.cocoon.generation.ServerPagesGenerator" + label="content,data" + logger="sitemap.generator.serverpages" + pool-max="32" pool-min="4" pool-grow="2"/> + </generators> + + <transformers> + <component-instance name="xslt" class="org.apache.cocoon.transformation.TraxTransformer" + logger="sitemap.transformer.xslt" + pool-max="32" pool-min="8" pool-grow="2"> + <use-request-parameters>false</use-request-parameters> + <use-browser-capabilities-db>false</use-browser-capabilities-db> + <use-deli>false</use-deli> + </component-instance> + </transformers> + + <serializers> + <component-instance name="links" class="org.apache.cocoon.serialization.LinkSerializer" + logger="sitemap.serializer.links"/> + + <component-instance name="xml" class="org.apache.cocoon.serialization.XMLSerializer" + mime-type="text/xml" + logger="sitemap.serializer.xml" + pool-max="32" pool-min="8" pool-grow="4"/> + + <component-instance name="html" class="org.apache.cocoon.serialization.HTMLSerializer" + mime-type="text/html" + logger="sitemap.serializer.html"/> + </serializers> + + <readers> + <component-instance name="resource" class="org.apache.cocoon.reading.ResourceReader" + logger="sitemap.reader.resource" + pool-max="32"/> + </readers> + +<!-- + <matchers/> + <selectors/> + <actions/> +--> </cocoon> 1.24 +3 -45 xml-cocoon2/src/webapp/sitemap.xmap Index: sitemap.xmap =================================================================== RCS file: /home/cvs/xml-cocoon2/src/webapp/sitemap.xmap,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- sitemap.xmap 2 Feb 2002 03:04:19 -0000 1.23 +++ sitemap.xmap 4 Feb 2002 02:30:35 -0000 1.24 @@ -50,23 +50,17 @@ shared between these instances, however. All components follow this schema. ---> + Note: It is possible to define sitemap components in the cocoon.xconf file + also. To simplify this file, some core components are defined there. +--> <map:generators default="file"> - - <map:generator name="file" logger="sitemap.generator.file" label="content,data" - src="org.apache.cocoon.generation.FileGenerator" - pool-max="32" pool-min="16" pool-grow="4"/> - <map:generator name="directory" logger="sitemap.generator.directory" label="content,data" src="org.apache.cocoon.generation.DirectoryGenerator"/> <map:generator name="imagedirectory" logger="sitemap.generator.imagedirectory" label="content,data" src="org.apache.cocoon.generation.ImageDirectoryGenerator"/> - <map:generator name="serverpages" logger="sitemap.generator.serverpages" label="content,data" - src="org.apache.cocoon.generation.ServerPagesGenerator"/> - <map:generator name="request" logger="sitemap.generator.request" label="data" src="org.apache.cocoon.generation.RequestGenerator"/> @@ -75,10 +69,8 @@ <map:generator name="extractor" logger="sitemap.generator.extractor" label="data" src="org.apache.cocoon.generation.FragmentExtractorGenerator"/> - </map:generators> - <!-- Transformers can be placed inside the pipeline between the generator and the serializer. You may have as many transformers as you @@ -87,17 +79,7 @@ The "xslt" transformer is an example of a component with additional configuration. --> - <map:transformers default="xslt"> - - <map:transformer name="xslt" logger="sitemap.transformer.xslt" - src="org.apache.cocoon.transformation.TraxTransformer" - pool-max="32" pool-min="16" pool-grow="4"> - <use-request-parameters>false</use-request-parameters> - <use-browser-capabilities-db>false</use-browser-capabilities-db> - <use-deli>false</use-deli> - </map:transformer> - <map:transformer name="log" logger="sitemap.transformer.log" src="org.apache.cocoon.transformation.LogTransformer"/> @@ -127,7 +109,6 @@ <map:transformer name="readDOMsession" logger="sitemap.transformer.readDOMsession" src="org.apache.cocoon.transformation.ReadDOMSessionTransformer"/> - </map:transformers> <!-- @@ -138,11 +119,7 @@ contain any generator, transformer or serializer in addition to a reader. They are useful for delivering binary content like images. --> - <map:readers default="resource"> - <map:reader name="resource" logger="sitemap.reader.resource" - src="org.apache.cocoon.reading.ResourceReader"/> - <map:reader name="jsp" logger="sitemap.reader.jsp" src="org.apache.cocoon.reading.JSPReader"/> </map:readers> @@ -151,18 +128,7 @@ Serializers consume SAX events and produce a character stream. Every pipeline needs to be terminated by a serializer. --> - <map:serializers default="html"> - <map:serializer name="links" logger="sitemap.serializer.links" - src="org.apache.cocoon.serialization.LinkSerializer"/> - - <map:serializer name="xml" mime-type="text/xml" logger="sitemap.serializer.xml" - src="org.apache.cocoon.serialization.XMLSerializer" - pool-max="32" pool-min="16" pool-grow="4"/> - - <map:serializer name="html" mime-type="text/html" logger="sitemap.serializer.html" - src="org.apache.cocoon.serialization.HTMLSerializer"/> - <map:serializer name="vrml" mime-type="model/vrml" logger="sitemap.serializer.vrml" src="org.apache.cocoon.serialization.TextSerializer"/> @@ -181,7 +147,6 @@ </map:serializer> <map:serializer name="text" mime-type="text/text" logger="sitemap.serializer.text" src="org.apache.cocoon.serialization.TextSerializer"/> - </map:serializers> @@ -197,7 +162,6 @@ Since this is important, let me repeat it: Matchers are executed during pipeline setup. --> - <map:matchers default="wildcard"> <map:matcher name="wildcard" logger="sitemap.matcher.wildcard" @@ -223,10 +187,8 @@ src="org.apache.cocoon.matching.WildcardHeaderMatcher"> <header-name>referer</header-name> </map:matcher> - </map:matchers> - <!-- Selectors are executed during pipeline setup. They can be used to determine which pipeline fragments should be combined. They are best @@ -236,7 +198,6 @@ Since this is important, let me repeat it: Selectors are executed during pipeline setup. --> - <map:selectors default="browser"> <map:selector name="browser" logger="sitemap.selector.browser" src="org.apache.cocoon.selection.BrowserSelector"> @@ -302,7 +263,6 @@ Since this is important, let me repeat it: Actions are executed during pipeline setup. --> - <map:actions> <map:action name="add-employee" logger="sitemap.action.add-employee" src="org.apache.cocoon.acting.DatabaseAddAction"/> @@ -335,7 +295,6 @@ src="org.apache.cocoon.acting.ResourceExistsAction"/> </map:actions> - </map:components> <!-- =========================== Views =================================== --> @@ -344,7 +303,6 @@ Views provide diffent, well, views to resources. Views are orthogonal to pipelines. Please refer to the docs. --> - <map:views> <map:view name="content" from-label="content"> <map:serialize type="xml"/>
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]