<?xml version="1.0"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
  <map:components>
    <map:generators default="file">
      <map:generator name="file"      src="org.apache.cocoon.generation.FileGenerator" />
      <!--
      <map:generator name="html"      src="org.apache.cocoon.generation.HTMLGenerator">
        <jtidy-config>jtidy.properties</jtidy-config>
      </map:generator>
      <map:generator name="directory" src="org.apache.cocoon.generation.DirectoryGenerator" />
      -->
    </map:generators>

    <map:transformers default="xslt">
      <!-- Generates @id attributes from <title> strings -->
      <map:transformer name="idgen" src="org.apache.cocoon.transformation.IdGeneratorTransformer">
        <element>//*[local-name() = 'section']</element>
        <id>title/text()</id>
      </map:transformer>

      <!-- Rewrites links, e.g. transforming href="site:index" to href="../index.html" -->
      <!-- See http://xml.apache.org/forrest/sitemap-ref.html#linkrewriting_impl -->
      <map:transformer name="linkrewriter" logger="sitemap.transformer.linkrewriter" src="org.apache.cocoon.transformation.LinkRewriterTransformer">
        <link-attrs>href src</link-attrs>
        <schemes>site ext</schemes>

        <input-module name="site">
          <input-module name="linkmap">
            <file src="{src}" reloadable="true" />
          </input-module>
          <prefix>/site//</prefix>
          <suffix>/@href</suffix>
        </input-module>
        <input-module name="ext">
          <input-module name="linkmap">
            <file src="{src}" reloadable="true" />
          </input-module>
          <prefix>/site/external-refs//</prefix>
          <suffix>/@href</suffix>
        </input-module>
      </map:transformer>

      <map:transformer name="xpath" logger="sitemap.transformer.xpath" src="org.apache.cocoon.transformation.XPathTransformer" />
      <map:transformer name="xslt" src="org.apache.cocoon.transformation.TraxTransformer" logger="sitemap.transformer.xslt" pool-max="32">
        <use-request-parameters>false</use-request-parameters>
        <use-browser-capabilities-db>false</use-browser-capabilities-db>
        <use-deli>false</use-deli>
        <transformer-factory>org.apache.xalan.processor.TransformerFactoryImpl</transformer-factory>
        <!--<transformer-factory>com.icl.saxon.TransformerFactoryImpl</transformer-factory>-->
        <!--<transformer-factory>org.apache.xalan.xsltc.trax.TransformerFactoryImpl</transformer-factory>-->
      </map:transformer>

      <map:transformer name="xinclude" src="org.apache.cocoon.transformation.XIncludeTransformer" logger="sitemap.transformer.xinclude" pool-max="16"/>
    </map:transformers>

    <map:readers default="resource">
      <map:reader name="resource" src="org.apache.cocoon.reading.ResourceReader"/>
    </map:readers>

    <map:serializers default="html">
      <map:serializer name="html" mime-type="text/html" src="org.apache.cocoon.serialization.HTMLSerializer">
        <doctype-public>-//W3C//DTD HTML 4.01 Transitional//EN</doctype-public>
        <doctype-system>http://www.w3.org/TR/html4/loose.dtd</doctype-system>
      </map:serializer>

      <map:serializer name="xml" mime-type="text/xml" src="org.apache.cocoon.serialization.XMLSerializer"/>
      
      <map:serializer name="xml-document" mime-type="text/xml" src="org.apache.cocoon.serialization.XMLSerializer">
        <cdata-section-elements>source</cdata-section-elements>
        <doctype-public>-//APACHE//DTD Documentation V1.2//EN</doctype-public>
        <doctype-system>document-v12.dtd</doctype-system>
      </map:serializer>

      <map:serializer name="fo2pdf" src="org.apache.cocoon.serialization.FOPSerializer" mime-type="application/pdf" />

      <map:serializer name="links" src="org.apache.cocoon.serialization.LinkSerializer">
        <encoding>ISO-8859-1</encoding>
      </map:serializer>
     <!--
      <map:serializer mime-type="application/x-shockwave-flash" name="swf" src="org.apache.cocoon.serialization.SWFSerializer"/>
      <map:serializer mime-type="application/msword" name="fo2rtf" src="org.apache.cocoon.serialization.RTFSerializer"/>
      -->
    </map:serializers>

    <map:matchers default="wildcard">
      <map:matcher name="wildcard" src="org.apache.cocoon.matching.WildcardURIMatcher"/>
      <map:matcher name="regexp" src="org.apache.cocoon.matching.RegexpURIMatcher"/>
    </map:matchers>

    <map:selectors>
      <map:selector logger="sitemap.selector.exists" name="exists" src="org.apache.cocoon.selection.ResourceExistsSelector" />
    </map:selectors>

    <map:pipes default="caching">
      <map:pipe name="caching" src="org.apache.cocoon.components.pipeline.impl.CachingProcessingPipeline"/>
      <!--
      <map:pipe name="noncaching" src="org.apache.cocoon.components.pipeline.impl.NonCachingProcessingPipeline"/>
      <map:pipe name="profile-caching" src="org.apache.cocoon.components.profiler.ProfilingCachingProcessingPipeline"/>
      <map:pipe name="profile-noncaching" src="org.apache.cocoon.components.profiler.ProfilingNonCachingProcessingPipeline"/>
      -->
    </map:pipes>
  </map:components>

  <map:views>

    <!-- Define a 'links view', which the command-line crawler uses to discover a page's links -->
    <map:view name="links" from-position="last">
      <map:transform src="resources/stylesheets/filterlinks.xsl">
        <map:parameter name="ctxbasedir" value="{realpath:.}/"/>
      </map:transform>
      <map:serialize type="links"/>
    </map:view>
  </map:views>

  <map:resources>
    <map:resource name="skinit">
      <map:transform src="skins/{forrest:skin}/xslt/html/{type}.xsl">
        <map:parameter name="notoc" value="{notoc}"/>
        <!-- For backwards-compat with 0.2 - 0.4 skins -->
        <map:parameter name="isfaq" value="{notoc}"/>
        <map:parameter name="nopdf" value="{nopdf}"/>
        <map:parameter name="path" value="{path}"/>
        <map:parameter name="obfuscate-mail-links" value="false"/>
        <!-- Can set an alternative project skinconfig here 
        <map:parameter name="config-file" value="../../../../skinconf.xml"/>
        -->
      </map:transform>

      <map:serialize/>
    </map:resource>

  </map:resources>

  <!-- =========================== Pipelines ================================= -->
  <map:pipelines>

    <map:pipeline internal-only="false">

      <!-- ============================================================ -->
      <!-- SOURCE FORMATS                                               -->
      <!--                 Raw XML sources, typically doc-v12 format    -->
      <!-- ============================================================ -->
      <!-- http://xml.apache.org/forrest/sitemap-ref.html#source_pipelines -->

      <!-- COCOON SPECIFIC -->
      <map:match pattern="apidocs/**">
        <map:read src="../../javadocs/{1}"/>
      </map:match>
      <map:match pattern="changes.xml">
        <map:mount uri-prefix="" src="status.xmap" check-reload="yes" />
      </map:match>
      <!-- /COCOON SPECIFIC -->

      <!-- Body content -->
      <map:match pattern="**.xml">
        <map:match pattern="changes.xml">
          <map:mount uri-prefix="" src="status.xmap" check-reload="yes" />
        </map:match>

        <map:match pattern="todo.xml">
          <map:mount uri-prefix="" src="status.xmap" check-reload="yes" />
        </map:match>

        <map:match pattern="**dtdx.xml">
          <map:mount uri-prefix="" src="dtd.xmap" check-reload="yes" />
        </map:match>

        <map:match pattern="forrest-issues.xml">
          <map:mount uri-prefix="" src="issues.xmap" check-reload="yes" />
        </map:match>

      <!-- COCOON SPECIFIC -->
      <map:match pattern="faq/**.xml">
        <map:mount uri-prefix="" src="faq.xmap" check-reload="yes" />
      </map:match>
      <!-- /COCOON SPECIFIC -->

        <map:match pattern="**faq.xml">
          <map:mount uri-prefix="" src="faq.xmap" check-reload="yes" />
        </map:match>

        <map:match pattern="community/**index.xml">
          <map:mount uri-prefix="" src="forrest.xmap" check-reload="yes" />
        </map:match>

        <map:match pattern="community/*/**.xml">
          <map:mount uri-prefix="" src="revisions.xmap" check-reload="yes" />
        </map:match>

        <map:match pattern="site.xml">
          <map:mount uri-prefix="" src="aggregate.xmap" check-reload="yes" />
        </map:match>

        <!-- Default source types -->
        <map:mount uri-prefix="" src="forrest.xmap" check-reload="yes" />

      </map:match>

      <!-- Menu content -->
      <map:match pattern="abs-menulinks">
        <map:mount uri-prefix="" src="menu.xmap" check-reload="yes" />
      </map:match>

      <map:match pattern="**menulinks-*">
        <map:mount uri-prefix="" src="menu.xmap" check-reload="yes" />
      </map:match>

      <!-- Link maps -->
      <map:match pattern="abs-linkmap">
        <map:mount uri-prefix="" src="linkmap.xmap"/>
      </map:match>

      <map:match pattern="**linkmap-*">
        <map:match pattern="linkmap-site.*">
          <map:mount uri-prefix="" src="aggregate.xmap" check-reload="yes" />
        </map:match>

        <map:mount uri-prefix="" src="linkmap.xmap" check-reload="yes" />
      </map:match>

    </map:pipeline>


    <!-- ============================================================ -->
    <!-- INTERMEDIATE FORMATS                                         -->
    <!--                          Tabs, menus and body HTML.          -->
    <!--                       Called from output format pipelines    -->
    <!-- ============================================================ -->
    <!-- http://xml.apache.org/forrest/sitemap-ref.html#intermediate_pipelines -->

    <map:pipeline internal-only="false">

      <!-- COCOON SPECIFIC -->
      <map:match pattern="faq/**body-*.html">
        <map:mount uri-prefix="" src="faq.xmap" check-reload="yes" />
      </map:match>
      <!-- /COCOON SPECIFIC -->


      <!-- External matches -->
      <!-- (HTML rendered directly from special formats) -->
      <map:match pattern="**body-faq.html">
        <map:mount uri-prefix="" src="faq.xmap" check-reload="yes" />
      </map:match>

      <map:match pattern="**body-*.html">
        <map:select type="exists">
          <map:when test="content/xdocs/{1}{2}.ehtml">
            <map:generate src="content/xdocs/{1}{2}.ehtml" />
            <map:transform src="resources/stylesheets/html2htmlbody.xsl" />
            <map:transform type="linkrewriter" src="cocoon:/{1}linkmap-{2}.html"/>
            <map:serialize type="xml" />
          </map:when>
        </map:select>
      </map:match>

      <!-- Default matches -->
      <!-- (HTML rendered from doc-v11 intermediate format -->
      <map:match pattern="**body-*.html">
        <map:generate src="cocoon:/{1}{2}.xml"/>
        <map:transform type="idgen"/>
        <map:transform type="xinclude"/>
        <map:transform type="linkrewriter" src="cocoon:/{1}linkmap-{2}.html"/>
        <map:call resource="skinit">
          <map:parameter name="type" value="document2html"/>
          <map:parameter name="path" value="{1}{2}.html"/>
          <map:parameter name="notoc" value="false"/>
        </map:call>
      </map:match>

      <map:match pattern="**menu-*.html">
        <map:generate src="cocoon:/{1}book-{2}.html"/>
        <map:transform type="linkrewriter" src="cocoon:/{1}linkmap-{2}.html"/>
        <map:call resource="skinit">
          <map:parameter name="type" value="book2menu"/>
          <map:parameter name="path" value="{1}{2}.html"/>
        </map:call>
      </map:match>

      <map:match pattern="**tab-*.html">
        <map:generate src="content/xdocs/tabs.xml" />
        <map:transform type="linkrewriter" src="cocoon:/{1}linkmap-{2}.html"/>
        <map:call resource="skinit">
          <map:parameter name="type" value="tab2menu"/>
          <map:parameter name="path" value="{1}{2}.html"/>
        </map:call>
      </map:match>

      <map:match pattern="**book-*.html">
        <map:mount uri-prefix="" src="menu.xmap" check-reload="yes" />
      </map:match>

    </map:pipeline>


    <map:pipeline internal-only="false">

      <!-- ============================================================ -->
      <!-- OUTPUT FORMATS                                               -->
      <!--                  Serves content directly to the user         -->
      <!-- +==========================================================+ -->
      <!-- http://xml.apache.org/forrest/sitemap-ref.html#output_pipelines -->

      <!-- COCOON SPECIFIC -->
      <map:match pattern="**.txt">
        <!-- Handle .txt files (incorrectly) placed in xdocs.  Forrest will
        eventually evolve to handle mixed-content scenarios  (JT) -->
        <map:read src="content/xdocs/{0}" mime-type="text/plain"/>
      </map:match>
      <!-- /COCOON SPECIFIC -->

      <map:match type="regexp" pattern="^.+$">
        <map:select type="exists">
          <map:when test="content/{0}">
            <map:mount uri-prefix="" src="raw.xmap" check-reload="yes" />
          </map:when>
        </map:select>
      </map:match>

      <map:match pattern="*.html">
        <map:aggregate element="site">
          <map:part src="cocoon:/tab-{0}"/>
          <map:part src="cocoon:/menu-{0}"/>
          <map:part src="cocoon:/body-{0}"/>
        </map:aggregate>
        <map:call resource="skinit">
          <map:parameter name="type" value="site2xhtml"/>
          <map:parameter name="path" value="{0}"/>
        </map:call>
      </map:match>         

      <map:match pattern="**/*.html">
        <map:aggregate element="site">
          <map:part src="cocoon:/{1}/tab-{2}.html"/>
          <map:part src="cocoon:/{1}/menu-{2}.html"/>
          <map:part src="cocoon:/{1}/body-{2}.html"/>
        </map:aggregate>
        <map:call resource="skinit">
          <map:parameter name="type" value="site2xhtml"/>
          <map:parameter name="path" value="{0}"/>
        </map:call>
      </map:match>

      <map:match pattern="**faq.pdf">
        <map:mount uri-prefix="" src="faq.xmap" check-reload="yes" />
      </map:match>

      <map:match type="regexp" pattern="^(.*?)([^/]*).pdf$">
        <map:generate src="cocoon:/{1}{2}.xml"/>
        <!-- <map:transform type="idgen"/> -->
        <map:transform type="xinclude"/>
        <map:transform type="linkrewriter" src="cocoon://{1}linkmap-{2}.pdf"/>
        <map:transform src="skins/{forrest:skin}/xslt/fo/document2fo.xsl">
          <map:parameter name="ctxbasedir" value="{realpath:.}/"/>
          <map:parameter name="xmlbasedir" value="content/xdocs/{1}"/>
        </map:transform>
        <map:serialize type="fo2pdf"/>
      </map:match>

      <!-- FIXME This is a hack that makes building the docs work again -->
      <map:match pattern="**changes.rss">
        <map:mount uri-prefix="{1}" src="status.xmap" check-reload="yes" />
      </map:match>

      <map:match pattern="profiler">
        <map:mount uri-prefix="" src="profiler.xmap" check-reload="yes" />
      </map:match>
      <map:match pattern="**.js">
        <map:mount uri-prefix="" src="resources.xmap" check-reload="yes" />
      </map:match>
      <map:match pattern="**.css">
        <map:mount uri-prefix="" src="resources.xmap" check-reload="yes" />
      </map:match>
      <map:match pattern="**images**">
        <map:mount uri-prefix="" src="resources.xmap" check-reload="yes" />
      </map:match>
     <map:match pattern="**favicon.ico">
        <map:mount uri-prefix="" src="resources.xmap" check-reload="yes" />
      </map:match>
    </map:pipeline>



    <!-- ============================================================ -->
    <!-- REDIRECTS                                                    -->
    <!-- ============================================================ -->
    <map:pipeline internal-only="false">

      <map:match pattern="">
        <map:redirect-to uri="index.html" />
      </map:match>
      <map:match type="regexp" pattern="^.+/$">
          <map:redirect-to uri="index.html"/>
      </map:match>
    </map:pipeline>


  </map:pipelines>
</map:sitemap>
