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 &lt;a href="mailto:[EMAIL PROTECTED]"&gt;Berin Loritsch&lt;/a&gt;
        * @author &lt;a href="mailto:[EMAIL PROTECTED]"&gt;Nicola Ken 
Barozzi&lt;/a&gt;
        * @author &lt;a href="mailto:[EMAIL PROTECTED]"&gt;Peter 
Royal&lt;/a&gt;
  -     * @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 &amp;&amp; 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 &amp;&amp; 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 &lt; aLabels.length; i++) {
  +                String view = (String)view_label_map.get(aLabels[i]);
  +                if (view != null &amp;&amp; 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) &gt; 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]

Reply via email to