<?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.
-->
<!-- ===============================================
Pipelines defining all Source XML types Forrest can handle.
Converts from arbitrary formats to standard Forrest doc-v12 XML.

First, determines if a simple format file exists.
Candidates are: .html .ihtml .txt .sxw .jspwiki 

Otherwise, the default *.xml handling is used.  The XML's DTD type is
discovered using the SourceTypeAction, and an appropriate transformation
applied.  Thus to add new XML types, just define a new <sourcetype>
and an appropriate <map:when> handler.

Generates  :  Source XML, Body HTML for *.ehtml
Example URL:  http://localhost:8888/index.xml
Used by    :  *.html and *.pdf pipelines in sitemap.xmap
Uses       :  content/xdocs/**.xml

$Revision: 1.8 $
==================================================== -->
<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
  <map:components>
    <map:actions>
      <map:action logger="sitemap.action.sourcetype" name="sourcetype" src="org.apache.forrest.sourcetype.SourceTypeAction">
        <sourcetype name="document-v10">
          <document-declaration public-id="-//APACHE//DTD Documentation V1.0//EN" />
        </sourcetype>
        <sourcetype name="howto-v10">
          <document-declaration public-id="-//APACHE//DTD How-to V1.0//EN" />
        </sourcetype>
        <sourcetype name="todo-v10">
          <document-declaration public-id="-//APACHE//DTD Todo V1.0//EN" />
        </sourcetype>
        <sourcetype name="changes-v10">
          <document-declaration public-id="-//APACHE//DTD Changes V1.0//EN" />
        </sourcetype>
        <sourcetype name="document-v11">
          <document-declaration public-id="-//APACHE//DTD Documentation V1.1//EN" />
        </sourcetype>
        <sourcetype name="howto-v11">
          <document-declaration public-id="-//APACHE//DTD How-to V1.1//EN" />
        </sourcetype>
        <sourcetype name="todo-v11">
          <document-declaration public-id="-//APACHE//DTD Todo V1.1//EN" />
        </sourcetype>
        <sourcetype name="changes-v11">
          <document-declaration public-id="-//APACHE//DTD Changes V1.1//EN" />
        </sourcetype>
        <sourcetype name="todo-v12">
          <document-declaration public-id="-//APACHE//DTD Todo V1.2//EN" />
        </sourcetype>
        <sourcetype name="changes-v12">
          <document-declaration public-id="-//APACHE//DTD Changes V1.2//EN" />
        </sourcetype>
        <sourcetype name="howto-v12">
          <document-declaration public-id="-//APACHE//DTD How-to V1.2//EN" />
        </sourcetype>
        <sourcetype name="todo-v13">
          <document-declaration public-id="-//APACHE//DTD Todo V1.3//EN" />
        </sourcetype>
        <sourcetype name="changes-v13">
          <document-declaration public-id="-//APACHE//DTD Changes V1.3//EN" />
        </sourcetype>
        <sourcetype name="howto-v13">
          <document-declaration public-id="-//APACHE//DTD How-to V1.3//EN" />
        </sourcetype>
        <sourcetype name="document-v20a">
          <document-declaration public-id="-//APACHE//DTD Documentation V2.0a//EN" />
        </sourcetype>
        <sourcetype name="document-v20">
          <document-declaration public-id="-//APACHE//DTD Documentation V2.0//EN" />
        </sourcetype>
        <sourcetype name="todo-v20">
          <document-declaration public-id="-//APACHE//DTD Todo V2.0//EN" />
        </sourcetype>
        <sourcetype name="changes-v20">
          <document-declaration public-id="-//APACHE//DTD Changes V2.0//EN" />
        </sourcetype>
        <sourcetype name="howto-v20">
          <document-declaration public-id="-//APACHE//DTD How-to V2.0//EN" />
        </sourcetype>
      </map:action>
    </map:actions>
    <map:selectors default="parameter">
      <map:selector logger="sitemap.selector.parameter" name="parameter" src="org.apache.cocoon.selection.ParameterSelector" />
      <map:selector logger="sitemap.selector.exception" name="exception"
                 src="org.apache.cocoon.selection.ExceptionSelector">
        <exception name="syntax" class="net.sourceforge.chaperon.process.ParseException"/>
        <exception class="java.lang.Throwable" unroll="true"/>
      </map:selector>
      <map:selector logger="sitemap.selector.config" name="config" src="org.apache.cocoon.selection.SimpleSelector" />
    </map:selectors>
  </map:components>
  <map:resources>
    <map:resource name="transform-to-document">
      <map:act type="sourcetype" src="{src}">
        <map:select type="parameter">
          <map:parameter name="parameter-selector-test" value="{sourcetype}" />
          <map:when test="document-v10">
<!-- FIXME (JJP):  This should use the v12 now-->
            <map:transform src="{lm:transform.docv10.docv11}" />
          </map:when>
          <map:when test="document-v20a">
            <map:transform src="{lm:transform.docv20.docv12}" />
          </map:when>
          <map:when test="document-v20">
            <map:transform src="{lm:transform.docv20.docv13}" />
          </map:when>
          <map:when test="howto-v10">
            <map:transform src="{lm:transform.howto.document}" />
          </map:when>
          <map:when test="howto-v11">
            <map:transform src="{lm:transform.howto.document}" />
          </map:when>
          <map:when test="howto-v12">
            <map:transform src="{lm:transform.howto.document}" />
          </map:when>
          <map:when test="howto-v13">
            <map:transform src="{lm:transform.howto.document}" />
          </map:when>
          <map:when test="howto-v20">
            <map:transform src="{lm:transform.howto.document}" />
            <map:transform src="{lm:transform.docv20.docv13}" />
          </map:when>
          <map:when test="todo-v10">
            <map:transform src="{lm:transform.todo.document}" />
          </map:when>
          <map:when test="todo-v11">
            <map:transform src="{lm:transform.todo.document}" />
          </map:when>
          <map:when test="todo-v12">
            <map:transform src="{lm:transform.todo.document}" />
          </map:when>
          <map:when test="todo-v13">
            <map:transform src="{lm:transform.todo.document}" />
          </map:when>
          <map:when test="todo-v20">
            <map:transform src="{lm:transform.todo.document}" />
          </map:when>
          <map:when test="changes-v10">
            <map:transform src="{lm:transform.changesv10.changesv11}" />
            <map:transform src="{lm:transform.changesv.document}" />
          </map:when>
          <map:when test="changes-v11">
            <map:transform src="{lm:transform.changesv.document}" />
          </map:when>
          <map:when test="changes-v12">
            <map:transform src="{lm:transform.changesv.document}" />
          </map:when>
          <map:when test="changes-v13">
            <map:transform src="{lm:transform.changesv.document}" />
          </map:when>
          <map:when test="changes-v20">
            <map:transform src="{lm:transform.changesv.document}" />
          </map:when>
          <map:otherwise />
        </map:select>
      </map:act>
    </map:resource>
  </map:resources>
  <map:pipelines>
    <map:pipeline>
<!-- ============================================================ -->
<!-- INTERMEDIATE FORMATS                                         -->
<!-- ============================================================ -->
      <map:match pattern="**body-*.html">
        <map:select type="exists">
          <map:when test="{lm:project.{1}{2}.ehtml}">
            <map:generate src="{lm:project.{1}{2}.ehtml}" />
            <map:transform src="{lm:transform.html.htmlbody}" />
            <map:serialize type="xml" />
          </map:when>
        </map:select>
      </map:match>
<!-- ============================================================ -->
<!-- SOURCE FORMATS                                               -->
<!-- ============================================================ -->
      <map:match type="wildcard" pattern="**.xml">
        <map:select type="exists">
          <map:when test="{lm:plugin.xmap.input}">
            <map:mount uri-prefix=""
                        src="{lm:plugin.xmap.input}"
                        check-reload="yes"
                        pass-through="true"/>
          </map:when>
        </map:select>
        <map:match type="i18n" pattern="{properties:content.xdocs}{1}.*.xml">
          <map:generate src="{source}" />
          <map:call resource="transform-to-document">
            <map:parameter name="src" value="{source}" />
          </map:call>
          <map:serialize type="xml-document"/>
        </map:match>
        <map:match type="i18n" pattern="{properties:content.xdocs}{1}.*.ihtml">
          <map:generate src="{source}" type="html" />
          <map:transform src="{lm:transform.html.document}" />
          <map:transform type="idgen" />
          <map:serialize type="xml-document"/>
        </map:match>
        <map:match type="i18n" pattern="{properties:content.xdocs}{1}.*.html">
          <map:generate src="{source}" type="html" />
          <map:transform src="{lm:transform.html.document}" />
          <map:serialize type="xml-document"/>
        </map:match>
        <map:match type="i18n" pattern="{properties:content.xdocs}{1}.*.txt">
          <map:generate type="text2xml" src="{source}" />
          <map:transform src="{lm:transform.text.document}">
            <map:parameter name="filename" value="{2}" />
          </map:transform>
          <map:serialize type="xml-document"/>
        </map:match>
        <map:match type="i18n" pattern="{properties:content.xdocs}{1}.*.xml">
          <map:generate src="{source}" />
          <map:call resource="transform-to-document">
            <map:parameter name="src" value="{source}" />
          </map:call>
          <map:serialize type="xml-document"/>
        </map:match>
<!-- if we got this far asking for the source.xml then it must be an XDoc -->
        <map:match pattern="**.source.xml">
          <map:generate src="cocoon:/{1}.xml"/>
          <map:serialize type="xml"/>
        </map:match>
        <map:match pattern="**.xml">
          <map:generate src="{lm:project.{0}}"/>
          <map:serialize type="xml"/>
        </map:match>
      </map:match>
    </map:pipeline>
  </map:pipelines>
</map:sitemap>
