<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->

<!-- $Id: navigation.xmap 208680 2005-06-30 20:28:59Z chestnut $ -->

<!--
This sitemap creates default navigation components.
-->

<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">

  <map:components>
    <map:matchers default="wildcard">
      <map:matcher name="language" logger="sitemap.matcher.wildcardrequestparameter" src="org.apache.cocoon.matching.WildcardRequestParameterMatcher">
        <parameter-name>lenya.language</parameter-name>
      </map:matcher>
      <map:matcher name="tab" logger="sitemap.matcher.wildcardrequestparameter" src="org.apache.cocoon.matching.WildcardRequestParameterMatcher">
        <parameter-name>lenya.info-tab</parameter-name>
      </map:matcher>
    </map:matchers>
    <map:transformers default="xslt">
      <map:transformer logger="lenya.sitemap.transformer.uuid2url" name="uuid2url-sitetree"
        src="org.apache.lenya.cms.cocoon.transformation.UuidToUrlTransformer">
        <urls type="relative"/>
        <transform namespace="http://apache.org/cocoon/lenya/navigation/1.0" element="node" attribute="href"/>
      </map:transformer>
      <map:transformer logger="lenya.sitemap.transformer.proxy" name="proxy-sitetree"
          src="org.apache.lenya.cms.cocoon.transformation.ProxyTransformer">
        <transform namespace="http://apache.org/cocoon/lenya/navigation/1.0" element="site" attribute="href"/>
        <transform namespace="http://apache.org/cocoon/lenya/navigation/1.0" element="node" attribute="href"/>
      </map:transformer>
    </map:transformers>
  </map:components>
  
  <!-- =========================== Pipelines ================================ -->
  
  <map:resources>
    
    <map:resource name="i18n">
      <map:transform type="i18n">      
        <map:parameter name="locale" value="{request:locale}"/>
      </map:transform>
    </map:resource>
  
  </map:resources>
  
  <map:pipelines>
  
    <map:pipeline type="caching">
      
      <!-- sitetree -->
      <!-- pattern: sitetree/{1:pub-id}/{2:area}/{3:default-language}/{4:language}/{5:path}.xml -->
      <map:match pattern="sitetree/*/*/*/*/**.xml">
        <map:generate src="lenya://lenya/pubs/{1}/content/{2}/sitetree.xml"/>
        <map:transform src="fallback://lenya/modules/sitetree/xslt/navigation/sitetree2nav.xsl">
          <map:parameter name="currentPath" value="/{5}"/>
          <map:parameter name="area" value="{2}"/>
          <map:parameter name="chosenlanguage" value="{4}"/>
          <map:parameter name="defaultlanguage" value="{3}"/>
        </map:transform>       
        <map:serialize type="xml"/>
      </map:match>
    
      <!-- navigation element -->  
      <!-- pattern: {1:nav-element}/{2:pub-id}/{3:area}/{4:default-language}/{5:language}/{6:path}.xml -->
      <map:match pattern="*/*/*/*/*/**.xml">
        <map:generate src="cocoon:/sitetree/{2}/{3}/{4}/{5}/{6}.xml"/>
        <map:transform src="fallback://lenya/modules/sitetree/xslt/navigation/{1}.xsl">
          <map:parameter name="area" value="{3}"/>
          <map:parameter name="root" value="/{2}/{3}/"/>
          <map:parameter name="chosenlanguage" value="{5}"/>
          <map:parameter name="defaultlanguage" value="{4}"/>
        </map:transform>       
        <map:serialize type="xml"/>
      </map:match>
    
    </map:pipeline>
  
    <!-- usecases -->
    <!-- Sitetree Javascript array -->
    <map:pipeline type="noncaching">
      
      <!-- {publication-id}/{area}/sitetree.xml -->
      <map:match pattern="*/*/sitetree.xml">
        <map:generate src="lenya://lenya/pubs/{1}/content/{2}/sitetree.xml"/>
        <map:call resource="i18n"/>
        <map:transform type="access-control-sitetree">
          <map:parameter name="publication-id" value="{1}"/>
          <map:parameter name="area" value="{2}"/>
        </map:transform>
        <map:transform src="fallback://lenya/modules/sitetree/xslt/info/sitetree2areatree.xsl">
          <map:parameter name="area" value="{2}"/>
        </map:transform>
        <map:serialize type="xml"/>
      </map:match>
      
      <!-- {publication-id}/{area}/info-sitetree -->
      <map:match pattern="*/*/sitetree-fragment.xml">
        <map:generate type="sitetree-fragment">
          <map:parameter name="areas" value="{request-param:areas}"/>
          <map:parameter name="area" value="{request-param:area}"/>
          <map:parameter name="path" value="{request-param:path}"/>
          <map:parameter name="initial" value="{request-param:initial}"/>
          <map:parameter name="mimetype" value="{request-param:mimetype}"/>
        </map:generate>
        <!-- <map:call resource="i18n"/> -->
        <map:transform type="access-control-sitetree">
          <map:parameter name="publication-id" value="{1}"/>
          <map:parameter name="area" value="{2}"/>
        </map:transform>
        <map:act type="set-header">
          <map:parameter name="Cache-Control" value="pre-check=0" />
          <map:parameter name="Expires" value="-1" />
        </map:act>
        <map:transform src="fallback://lenya/modules/sitetree/xslt/navigation/sitetree2nav.xsl" label="navtree">
          <map:parameter name="chosenlanguage" value="{request-param:language}"/>
          <map:parameter name="defaultlanguage" value="{page-envelope:default-language}"/>
          <map:parameter name="extension" value="html"/>
        </map:transform>
        <map:transform type="i18n">
          <map:parameter name="locale" value="{request:locale}"/>
        </map:transform>
        <map:transform type="uuid2url-sitetree"/>
        <map:transform type="proxy-sitetree"/>
        <map:serialize type="xml"/>
      </map:match>
    </map:pipeline>
    
    <!-- Sitetree Javascript   -->
    <map:pipeline>
      <map:match pattern="*/*/*.js">
        <map:read src="resources/javascript/{3}.js"/>
        <map:serialize type="text"/>
      </map:match>
    </map:pipeline>
    
    <!-- Resource type icons -->
    <map:pipeline>
      
      <map:match pattern="*/*/folder.gif">
        <map:read src="fallback://lenya/modules/sitetree/resources/icons/folder.gif"/>
      </map:match>

      <map:match pattern="*/*/default.gif">
        <map:read src="fallback://lenya/modules/sitetree/resources/icons/default.gif"/>
      </map:match> 
 
      <map:match pattern="*/*/**.gif">
        <map:select type="parameter">
          <map:parameter name="parameter-selector-test"
            value="{resource-type:{doc-info:{1}:{2}:{page-envelope:document-uuid}:{page-envelope:document-language}:resourceType}:supportsFormat:icon}"/>
          <map:when test="true">
            <map:read src="lenya-document:{page-envelope:document-uuid},lang={page-envelope:document-language},area={2},pub={1}?format=icon"/>
          </map:when>
          <map:otherwise>
            <map:read src="fallback://lenya/modules/sitetree/resources/icons/default.gif"/>
          </map:otherwise>
        </map:select>
      </map:match>
    </map:pipeline>
    
  </map:pipelines>

</map:sitemap>
