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]