You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@forrest.apache.org by cr...@apache.org on 2002/11/21 01:49:28 UTC

cvs commit: xml-forrest/src/resources/convert/cocoon README.txt forrest-targets.ent forrest.antproxy.xml forrest.build.xml forrest.properties sitemap.xmap skinconf.xml status-docs.xml status.xml tabs.xml

crossley    2002/11/20 16:49:28

  Added:       src/resources/convert/cocoon README.txt forrest-targets.ent
                        forrest.antproxy.xml forrest.build.xml
                        forrest.properties sitemap.xmap skinconf.xml
                        status-docs.xml status.xml tabs.xml
  Log:
  New utilities for conversion of Cocoon document-v10 to document-v11
  Submitted by: Diana Shannon <sh...@apache.org>
  
  Revision  Changes    Path
  1.1                  xml-forrest/src/resources/convert/cocoon/README.txt
  
  Index: README.txt
  ===================================================================
  Please see the explanation of this trial at the following Wiki page:
  http://outerthought.net/wiki/Wiki.jsp?page=HowToForrestTransition
  
  
  
  1.1                  xml-forrest/src/resources/convert/cocoon/forrest-targets.ent
  
  Index: forrest-targets.ent
  ===================================================================
  <!--
  This build.xml snippet contains Forrest targets for Ant 1.5+.  It checks that
  the user has set ${forrest.home}, either in one of:
    build.properties
    project.properties
    ant.properties
    .ant.properties
  or with the FORREST_HOME environment variable, and prints an informative error
  message if not found.
  
  Usage:
  1) Copy this file to somewhere in your project.
  2) Add the following to the top of your project's Ant build.xml script
  (adjusting the path):
  
    <!DOCTYPE project [
      <!ENTITY forrest-targets SYSTEM "file:./forrest-targets.ent">
    ]>
  
  3) Before the closing '</project>' in your build.xml, add this:
  
    &forrest-targets;
    
  This is like expanding a macro: it pulls in the contents of this file.
  
  A minimal build.xml would thus be:
  
  <!DOCTYPE project [
  <!ENTITY forrest-targets SYSTEM "file:./forrest-targets.ent">
  ]>
  
  <project default="site">
      &forrest-targets;
  </project>
  -->
  
    <target name="site-F" depends="forrest.init" description="Generates static HTML documentation">
      <ant antfile="${forrest.home}/forrest.antproxy.xml" target="site"/>
    </target>
  
    <target name="webapp-F" depends="forrest.init" description="Generates an unpackaged webapp of the website">
      <ant antfile="${forrest.home}/forrest.antproxy.xml" target="webapp"/>
    </target>
  
    <target name="war-F" depends="forrest.init" description="Generates a .war file containing the website">
      <ant antfile="${forrest.home}/forrest.antproxy.xml" target="war"/>
    </target>
  
    <target name="validate-F" depends="forrest.init" description="Validates XML documentation files">
      <ant antfile="${forrest.home}/forrest.antproxy.xml" target="validate"/>
    </target>
  
    <target name="trial-run-F" depends="forrest.init" description="Transforms and copies files to enable site-F, webapp-F, war-F, and validate-F functions">
      <ant antfile="${forrest.home}/forrest.antproxy.xml" target="trial-run"/>
    </target>
  
  
  
    <target name="forrest.init" depends="forrest.sethome, forrest.home.defined"/>
  
    <target name="forrest.sethome" depends="forrest.loadenv,
    forrest.checkenv, forrest.checkhome, forrest.check-build.properties,
    forrest.check-project.properties, forrest.check-ant.properties,
    forrest.check-.ant.properties"/>
  
    <target name="forrest.loadenv" unless="forrest.home.present">
      <property environment="env"/>
      <echo level="verbose">Forrest: Got ${env.FORREST_HOME}</echo>
    </target>
  
    <target name="forrest.checkenv" if="env.FORREST_HOME">
      <echo level="verbose">Found $FORREST_HOME..</echo>
      <property name="forrest.home" location="${env.FORREST_HOME}"/>
      <echo level="verbose">forrest.home set to ${forrest.home}</echo>
      <available file="${forrest.home}" type="dir" property="forrest.home.present"/>
    </target>
  
  
    <target name="forrest.checkhome">
      <available file="${forrest.home}" type="dir" property="forrest.home.present"/>
      <available file="build.properties" type="file" property="build.properties.present"/>
      <available file="project.properties" type="file" property="project.properties.present"/>
      <available file="ant.properties" type="file" property="ant.properties.present"/>
      <available file=".ant.properties" type="file" property=".ant.properties.present"/>
    </target>
  
    <!-- No we can't extract the commonalities below into an antcall'ed target,
    because it wouldn't be able to set forrest.home -->
    <target name="forrest.check-build.properties" unless="forrest.home.present"
    if="build.properties.present">
      <echo level="verbose">Forrest: Checking build.properties..</echo>
      <loadproperties srcfile="build.properties">
        <filterchain>
          <linecontains>
            <contains value="forrest.home"/>
          </linecontains>
        </filterchain>
      </loadproperties>
      <available file="${forrest.home}" type="dir" property="forrest.home.present"/>
  
    </target>
  
    <target name="forrest.check-project.properties" unless="forrest.home.present"
    if="project.properties.present">
      <echo level="verbose">Forrest: Checking project.properties..</echo>
      <loadproperties srcfile="project.properties">
        <filterchain>
          <linecontains>
            <contains value="forrest.home"/>
          </linecontains>
        </filterchain>
      </loadproperties>
      <available file="${forrest.home}" type="dir" property="forrest.home.present"/>
    </target>
  
    <target name="forrest.check-ant.properties" unless="forrest.home.present"
    if="ant.properties.present">
      <echo level="verbose">Forrest: Checking ant.properties..</echo>
      <loadproperties srcfile="ant.properties">
        <filterchain>
          <linecontains>
            <contains value="forrest.home"/>
          </linecontains>
        </filterchain>
      </loadproperties>
      <available file="${forrest.home}" type="dir" property="forrest.home.present"/>
    </target>
  
    <target name="forrest.check-.ant.properties" unless="forrest.home.present"
    if=".ant.properties.present">
      <echo level="verbose">Forrest: Checking .ant.properties..</echo>
      <loadproperties srcfile=".ant.properties">
        <filterchain>
          <linecontains>
            <contains value="forrest.home"/>
          </linecontains>
        </filterchain>
      </loadproperties>
      <available file="${forrest.home}" type="dir" property="forrest.home.present"/>
    </target>
  
    <target name="forrest.home.defined" depends="forrest.sethome" unless="forrest.home.present">
      <property name="path" value="${user.home}/xml-forrest/build/dist/shbat"/>
      <pathconvert targetos="windows" property="winpath">
        <path>
          <pathelement location="${path}"/>
        </path>
      </pathconvert>
      <pathconvert targetos="unix" property="unixpath">
        <path>
          <pathelement
            location="${path}"/>
        </path>
      </pathconvert>
  
      <echo>
        ----------------------------------------------
        To run this target, you need Forrest installed.
        Please do the following:
  
        export CVSROOT=:pserver:anoncvs@cvs.apache.org:/home/cvspublic
        cvs checkout xml-forrest
        cd xml-forrest
        build      (Windows)
        ./build.sh (Unix)
  
        Then either:
  
        - Set FORREST_HOME as the Forrest build instructions describe
        - Create a build.properties, with the forrest.home property pointing to
          the forrest shbat directory, eg:
  
          forrest.home=${winpath}  (Windows)
          forrest.home=${unixpath}  (Unix)
  
          (adjusting the path according to where your xml-forrest is)
        ----------------------------------------------
      </echo>
      <fail message="Need to define $${forrest.home}"/>
    </target>
  
  
  
  
  
  1.1                  xml-forrest/src/resources/convert/cocoon/forrest.antproxy.xml
  
  Index: forrest.antproxy.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <project default="site" basedir="." name="Forrest Ant proxy targets">
  
    <description>
      Proxy Forrest targets that run the customized Ant provided with Forrest,
      rather than using the invoker's version.
  
      The 'validate' target in forrest.build.xml requires a patched Ant 1.6 to
      run.  Thus if forrest.build.xml is invoked from a user's script, it will
      fail.  The solution is to invoke this script's proxy targets, eg:
  
      <![CDATA[
      <target name="site" description="Build a static website">
        <ant antfile="${forrest.home}/forrest.antproxy.xml" target="site"/>
      </target>
      ]]>
    </description>
  
    <property name="build.sysclasspath" value="ignore"/>
  
    <target name="validate" description="Validates XML doc files">
      <antcall target="forrest"><param name="target" value="validate"/></antcall>
    </target>
    <target name="webapp" description="Generates an unpacked webapp">
      <antcall target="forrest"><param name="target" value="webapp"/></antcall>
    </target>
    <target name="war" description="Generates a packaged .war webapp">
      <antcall target="forrest"><param name="target" value="war"/></antcall>
    </target>
    <target name="site" description="Generates static HTML">
      <antcall target="forrest"><param name="target" value="site"/></antcall>
    </target>
    <target name="trial-run" description="Transforms v10 to v11 docs">
      <antcall target="forrest"><param name="target" value="trial-run"/></antcall>
    </target>
  
  
    <path id="forrest-classpath">
      <fileset dir="${forrest.home}">
        <include name="ant/lib/*.jar"/>
        <include name="lib/endorsed/*.jar"/>
      </fileset>
      <pathelement location="${java.home}/../lib/tools.jar"/>
    </path>
  
    <target name="forrest">
      <java classname="org.apache.tools.ant.Main" fork="true">
        <classpath refid="forrest-classpath"/>
        <jvmarg value="-Dforrest.home=${forrest.home}"/>
        <jvmarg value="-Dbasedir=${basedir}"/>
        <jvmarg value="-Djava.endorsed.dirs=${forrest.home}/lib/endorsed${path.separator}${java.endorsed.dirs}"/>
        <arg line="-f ${forrest.home}/forrest.build.xml -emacs ${target}"/>
      </java>
    </target>
  
  
  </project>
  
  
  
  1.1                  xml-forrest/src/resources/convert/cocoon/forrest.build.xml
  
  Index: forrest.build.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!--
  FORREST SITE BUILDER
  
   - The runtime part of Forrest
   - Contains actions Forrest can peform on any Forrest-using project.
   - This is typically called by forrest.bat or forrest
  -->
  
  
  <project default="site" basedir="." name="Forrest template targets">
  
    <description>
      *=======================================================*
      |                Forrest Site Builder                   |
      *=======================================================*
                                by
                    Marc Portier (mpo@apache.org)
                    Jeff Turner (jefft@apache.org)
    
               Call this through the 'forrest' command
    </description>
    
    <taskdef name="jing" classname="com.thaiopensource.relaxng.util.JingTask">
      <classpath>
        <fileset dir="${forrest.home}/WEB-INF/lib" includes="*.jar" />
      </classpath>
    </taskdef>
  
  
  <!-- ***************************************************************** -->
  <!-- ***************************************************************** -->
  <!-- **                                                             ** -->
  <!-- **                                                             ** -->
  <!-- **                    COMMON SETTINGS                          ** -->
  <!-- **                                                             ** -->
  <!-- **                                                             ** -->
  <!-- ***************************************************************** -->
  <!-- ***************************************************************** -->
  
    <!-- ===============================================================
         Loads user defined settings.
         Steps back to defaults when they are not set.
         Echo's the settings if requested.
         =============================================================== -->
    <target name="init-props">
    
      <!-- setting defaults for parameters -->
      <!-- people should use -D switch, or <ant><property>s to override these   -->
  
      <property name="project.home" location="." />
  
      <echo message="Loading project specific properties from ${project.home}/forrest.properties" />
      <property file="${project.home}/forrest.properties" />
  
      <!-- people should use forrest.properties to override following defaults  -->
      <property name="forrest.home"        location="." />
      <property name="project.name"        value="my-project"    />
      <property name="project.build-dir"    value="${project.home}/build"    />
      <property name="project.site-dir"    value="${project.build-dir}/site"    />
      <property name="project.war"   location="${project.build-dir}/${project.name}.war" />
      <property name="project.webapp"      location="${project.build-dir}/webapp" />
  
      <property name="project.temp-dir"    value="${project.build-dir}/tmp"     />
      <property name="project.work-dir"    value="${project.temp-dir}/work"      />
      <property name="project.ctxt-dir"    value="${project.temp-dir}/context"   />
  
      <property name="project.brokenlinkfile" value="${project.temp-dir}/brokenlinks.txt"/>
      <property name="project.debuglevel"  value="ERROR"                         />
      <property name="project.start-uri"   value="index.html"                    />
  
      <!-- use of these property should be removed when the siteplan becomes active -->
      <property name="project.skin"        value="forrest-site" />
      <property name="project.status"      value="${project.home}/status.xml" />
      <property name="project.status-docs"      value="${project.home}/status-docs.xml" />
      <!-- FIXME: rename project.content-dir to project.documentation-dir -->
      <property name="project.content-dir" value="${project.home}/src/documentation" />
      <!-- NOTE: Do not rely on this 'project.real-content-dir' property, as it
      will go away soon -->
      <property name="project.real-content-dir" value="${project.content-dir}/content" />
      <property name="project.sitemap"     value="${project.content-dir}/sitemap.xmap" />
      <property name="project.xdocs-dir"   value="${project.content-dir}/content/xdocs" />
      <property name="project.stylesheets-dir" value="${project.content-dir}/resources/stylesheets" />
      <property name="project.images-dir"  value="${project.content-dir}/resources/images" />
      <property name="project.schema-dir" value="${project.content-dir}/resources/schema" />
      <property name="project.skins-dir"   value="${project.content-dir}/skins" />
      <property name="project.skinconf"    value="${project.content-dir}/skinconf.xml" />
      <property name="project.conf-dir"     value="${project.content-dir}/conf" />
      <property name="project.lib-dir"     value="${project.content-dir}/lib" />
      <property name="project.classes-dir" value="${project.content-dir}/classes" />
  
      <!-- checks for presence of required classes and/or resources -->
      <property name="tools.jar"           location="${java.home}/../lib/tools.jar"/>
      <available file="${tools.jar}"       property="tools.jar.present"/>
  
      <!-- echo settings in -Dforrest.echo=true mode -->
      <antcall target="echo-settings" />
    </target>
  
    <target name="examine-proj" depends="init-props">
      <available property="conf.present" file="${project.conf-dir}" type="dir"/>
      <available property="real-content.present" file="${project.real-content-dir}" type="dir"/>
      <available property="sitemap.present" file="${project.sitemap}"/>
      <available property="xdocs.present" file="${project.xdocs-dir}" type="dir"/>
      <available property="images.present" file="${project.images-dir}" type="dir"/>
      <available property="schema.present" file="${project.schema-dir}" type="dir"/>
      <available property="stylesheets.present" file="${project.stylesheets-dir}" type="dir"/>
      <available property="lib.present" file="${project.lib-dir}" type="dir"/>
      <available property="classes.present" file="${project.classes-dir}" type="dir"/>
      <available property="skins.present" file="${project.skins-dir}" type="dir"/>
      <available property="skinconf.present" file="${project.skinconf}"/>
      <available property="status.present" file="${project.status}"/>
      <available property="status-docs.present" file="${project.status-docs}"/>
  
    </target>
  
    <target name="validation-props" depends="examine-proj">
      <!-- Validation flags -->
  
      <property name="forrest.validate" value="true" />
      <condition property="validate">
        <istrue value="${forrest.validate}"/>
      </condition>
      <property name="forrest.validate.failonerror" value="true" />
      <property name="forrest.validate.includes" value="**/*"/>
      <property name="forrest.validate.excludes" value=""/>
  
      <property name="forrest.validate.xdocs" value="${forrest.validate}"/>
      <condition property="validate.xdocs">
        <and>
          <istrue value="${forrest.validate.xdocs}"/>
          <isset property="xdocs.present"/>
        </and>
      </condition>
      <property name="forrest.validate.xdocs.includes" value="**/*.x*"/>
      <property name="forrest.validate.xdocs.excludes" value=""/>
      <property name="forrest.validate.xdocs.failonerror"
        value="${forrest.validate.failonerror}" />
  
      <property name="forrest.validate.skinconf" value="${forrest.validate}"/>
      <condition property="validate.skinconf">
        <and>
          <istrue value="${forrest.validate.skinconf}"/>
          <isset property="skinconf.present"/>
        </and>
      </condition>
      <basename file="${project.skinconf}" property="skinconf-file"/>
      <property name="forrest.validate.skinconf.includes" value="${skinconf-file}"/>
      <property name="forrest.validate.skinconf.excludes" value=""/>
      <property name="forrest.validate.skinconf.failonerror"
        value="${forrest.validate.failonerror}" />
  
      <property name="forrest.validate.sitemap" value="${forrest.validate}"/>
      <condition property="validate.sitemap">
        <and>
          <istrue value="${forrest.validate.sitemap}"/>
          <isset property="sitemap.present"/>
        </and>
      </condition>
      <basename file="${project.sitemap}" property="sitemap-file"/>
      <property name="forrest.validate.sitemap.includes" value="${sitemap-file}"/>
      <property name="forrest.validate.sitemap.excludes" value=""/>
      <property name="forrest.validate.sitemap.failonerror"
        value="${forrest.validate.failonerror}" />
  
      <property name="forrest.validate.stylesheets" value="${forrest.validate}"/>
      <condition property="validate.stylesheets">
        <and>
          <istrue value="${forrest.validate.stylesheets}"/>
          <isset property="stylesheets.present"/>
        </and>
      </condition>
      <property name="forrest.validate.stylesheets.includes" value="**/*.xsl"/>
      <property name="forrest.validate.stylesheets.excludes" value=""/>
      <property name="forrest.validate.stylesheets.failonerror"
        value="${forrest.validate.failonerror}" />
  
      <property name="forrest.validate.skins" value="${forrest.validate}"/>
      <condition property="validate.skins">
        <and>
          <istrue value="${forrest.validate.skins}"/>
          <isset property="skins.present"/>
        </and>
      </condition>
      <property name="forrest.validate.skins.includes" value="**/*"/>
      <property name="forrest.validate.skins.excludes" value="**/*.xsl"/>
      <property name="forrest.validate.skins.failonerror"
        value="${forrest.validate.failonerror}" />
  
      <property name="forrest.validate.skins.stylesheets" value="${forrest.validate.skins}"/>
      <condition property="validate.skins.stylesheets">
        <and>
          <istrue value="${forrest.validate.skins.stylesheets}"/>
          <isset property="skins.present"/>
        </and>
      </condition>
      <property name="forrest.validate.skins.stylesheets.includes" value="**/*.xsl"/>
      <property name="forrest.validate.skins.stylesheets.excludes" value=""/>
      <property name="forrest.validate.skins.stylesheets.failonerror"
        value="${forrest.validate.skins.failonerror}" />
    </target>
  
  
    <!-- Load properties from user's skinconf.xml, if it is defined -->
    <target name="load-project-props" depends="validation-props, validate-skinconf" if="skinconf.present">
      <xmlproperty file="${project.skinconf}" collapseattributes="true"
        validate="${validate.skinconf}"/>
    </target>
  
    <!-- Load properties from Forrest's default skinconf.xml, unless a user's is defined -->
    <target name="load-forrest-props" unless="skinconf.present">
      <xmlproperty file="${forrest.home}/context/skinconf.xml"
        collapseattributes="true" validate="true"/>
      <!-- Forrest skinconf should have been previously validated in buld.xml -->
    </target>
  
    <!-- Define filters equating to elements in the skinconf.xml file. Skins can
    include tokens corresponding to skinconf.xml elements, and have them replaced
    at runtime.-->
    <target name="init-skinprops" depends="load-project-props, load-forrest-props">
      <mkdir dir="${project.temp-dir}"/>
      <property name="skinfilters" value="${project.temp-dir}/skinfilters.properties"/>
      <echoproperties prefix="skinconfig" destfile="${skinfilters}"/>
      <filter filtersfile="${skinfilters}"/>
    </target>
  
    <!-- Sets up properties and filters -->
    <target name="init" depends="init-props, init-skinprops"/>
  
    <!-- ===============================================================
         Echo's the settings if requested. [-Dforrest.echo=true]
         =============================================================== -->
    <target name="echo-settings" if="forrest.echo">
      <echo>
        ------------------------------------------------
        | Forrest template run.
        | Running from $${forrest.home} = ${forrest.home}
        | Working on   $${project.home} = ${project.home}
        ------------------------------------------------
        | //where to put the result
        | project.site-dir    = ${project.site-dir} 
        | //uri to start crawling/generation process
        | project.start-uri   = ${project.start-uri}
        | //cocoon.xconf location
        | project.configfile  = ${project.configfile}
        | //logkit.xconf location
        | project.logkitfile  = ${project.logkitfile}
        | //temp dir to throw stuff in (i.e. work and ctxt)
        | project.temp-dir    = ${project.temp-dir} 
        | //temp working directory for generation process
        | project.work-dir    = ${project.work-dir} 
        | //temp context directory for generation process
        | project.ctxt-dir    = ${project.ctxt-dir} 
        | //debuglevel for logging (INFO, DEBUG, WARN, ERROR, FAIL)
        | project.debuglevel  = ${project.debuglevel}
        | //file for list of broken links
        | project.brokenlinkfile = ${project.brokenlinkfile}
        | //check if you have tools.jar installed
        | tools.jar.present   = ${tools.jar.present} 
        ------------------------------------------------
        | The following properties could be removed from future builds:
        | //which skin to apply
        | project.skin        = ${project.skin} 
        | //where your documentation xml is
        | project.content-dir = ${project.content-dir} 
        ------------------------------------------------
      </echo>
    </target>
  
  
    <!-- ===============================================================
         Set class-path.
         =============================================================== -->
    <target name="prepare-classpath" depends="prepare-context, -prepare-classpath"/>
    <target name="-prepare-classpath">
      <path id="forrest.cp">
        <pathelement location="${project.ctxt-dir}/WEB-INF/classes"/>
        <fileset dir="${project.ctxt-dir}/WEB-INF/lib" includes="*.jar"/>
        <pathelement location="${forrest.home}/WEB-INF/classes"/>
        <fileset dir="${forrest.home}/lib/endorsed" includes="*.jar"/>
        <fileset dir="${forrest.home}/WEB-INF/lib" includes="*.jar" />
        <pathelement location="${tools.jar}"/>
      </path>
    </target>
  
  
  <!-- ***************************************************************** -->
  <!-- ***************************************************************** -->
  <!-- **                                                             ** -->
  <!-- **                                                             ** -->
  <!-- **                  SITE BUILDING ACTIONS                      ** -->
  <!-- **                                                             ** -->
  <!-- **                                                             ** -->
  <!-- ***************************************************************** -->
  <!-- ***************************************************************** -->
  
  
    <!-- ===============================================================
         Fills the Cocoon context dir to work in 
         with the forrest-predefines.
         param: name of the skin to use ${project.skin} (now)
         param: location to make temporary context-dir ${project.ctxt-dir} 
         =============================================================== -->
    <target name="bare-context" depends="init" >
      <filter token="skin"              value="${project.skin}" />
  
      <!--
      These filters defined for backwards-compatibility with old skins.
      New skins should use the skinconfig.* filters, or actively parse the
      skinconf.xml file themselves. (JT)
      -->
      <filter token="link1"      value="${skinconfig.trail.link1.name}"/>
      <filter token="link1.href" value="${skinconfig.trail.link1.href}"/>
      <filter token="link2"      value="${skinconfig.trail.link2.name}"/>
      <filter token="link2.href" value="${skinconfig.trail.link2.href}"/>
      <filter token="link3"      value="${skinconfig.trail.link3.name}"/>
      <filter token="link3.href" value="${skinconfig.trail.link3.href}"/>
      <filter token="year"       value="${skinconfig.year}"/>
      <filter token="vendor"     value="${skinconfig.vendor}"/>
      <filter token="group-logo.src"  value="${skinconfig.group-logo}"/>
      <filter token="group-logo.href" value="${skinconfig.group-url}"/>
      <filter token="group-logo.alt"  value="${skinconfig.group-name} logo"/>
      <filter token="project-logo.src"  value="${skinconfig.project-logo}"/>
      <filter token="project-logo.href" value="${skinconfig.project-url}"/>
      <filter token="project-logo.alt"  value="${skinconfig.project-name} logo"/>
  
      <copy todir="${project.ctxt-dir}/" filtering="off">
        <fileset dir="${forrest.home}/context" >
          <exclude name="sitemap.xmap" />
          <exclude name="skins/**" />
        </fileset>
        <fileset dir="${forrest.home}/context" >
          <include name="skins/**/images/**" />
        </fileset>
      </copy>
  
      <copy todir="${project.ctxt-dir}/" filtering="on" overwrite="true">
      <!-- everything in the skins, except the images , and the sitemap -->
        <fileset dir="${forrest.home}/context" >
          <include name="sitemap.xmap" />
          <include name="skins/**" />
          <exclude name="skins/**/images/**" />
        </fileset>
      </copy>
  
      <mkdir dir="${project.ctxt-dir}/WEB-INF"/>
  
      <copy todir="${project.ctxt-dir}/WEB-INF" filtering="true">
        <fileset dir="${forrest.home}/WEB-INF">
          <include name="*.xconf" />
        </fileset>
      </copy>
  
      <!--Hack to stop the classpath definition breaking. If the project has any
      custom jars or classes, they will be added to these dirs -->
      <mkdir dir="${project.ctxt-dir}/WEB-INF/lib"/>
      <mkdir dir="${project.ctxt-dir}/WEB-INF/classes"/>
    </target>
  
  
    <!-- ===============================================================
         Fills the Cocoon context dir to work in 
         with the project-content-parts 
           (now: copy stuff from param ${project.content-dir}
            with siteplan: based on that plan; should allow more different parts)
         param: location to find the content ${project.content-dir}(now)
         param: location to find project descriptors == ${project.home} 
         param: location to make temporary context-dir ${project.ctxt-dir} 
         =============================================================== -->
    <target name="project-context-bot" depends="init, examine-proj, copy-conf, copy-sitemap,
      copy-xdocs, copy-stylesheets, copy-images, copy-schema, copy-lib, 
      copy-classes, copy-skins, copy-skinconf, copy-status"/>
  
    <target name="project-context" depends="examine-proj, ensure-content, validate, init, bare-context, copy-conf, copy-sitemap,
      copy-xdocs, copy-stylesheets, copy-images, copy-schema, copy-content, copy-lib, 
      copy-classes, copy-skins, copy-skinconf, copy-status"/>
  
    <target name="copy-conf" if="conf.present">
      <copy toDir="${project.ctxt-dir}/WEB-INF" filtering="true"
        overwrite="true" failonerror="false">
        <fileset dir="${project.conf-dir}"/>
      </copy>
    </target>
  
    <target name="copy-sitemap" if="sitemap.present">
      <copy file="${project.sitemap}" toDir="${project.ctxt-dir}" filtering="true"
        overwrite="true" failonerror="false"/>
    </target>
  
    <target name="copy-xdocs" if="xdocs.present">
      <copy toDir="${project.ctxt-dir}/content/xdocs" filtering="false"
        overwrite="true">
        <fileset dir="${project.xdocs-dir}"/>
      </copy>
    </target>
  
    <target name="copy-resources" if="resources.present">
      <copy toDir="${project.ctxt-dir}/resources" filtering="false"
        overwrite="true" failonerror="false">
        <fileset dir="${project.resources-dir}">
        </fileset>
      </copy>
    </target>
  
    <target name="copy-stylesheets" if="stylesheets.present">
      <copy toDir="${project.ctxt-dir}/resources/stylesheets" filtering="false"
        overwrite="true" failonerror="false">
        <fileset dir="${project.stylesheets-dir}"/>
      </copy>
    </target>
  
    <target name="copy-images" if="images.present">
      <copy toDir="${project.ctxt-dir}/resources/images" filtering="false"
        overwrite="true" failonerror="false">
        <fileset dir="${project.images-dir}"/>
      </copy>
    </target>
  
    <!-- Copy all non-xdocs content -->
    <target name="copy-content" if="real-content.present">
      <copy toDir="${project.ctxt-dir}/content" filtering="false"
        overwrite="true" failonerror="false">
        <fileset dir="${project.real-content-dir}">
          <exclude name="xdocs/**"/>
        </fileset>
      </copy>
    </target>
  
    <target name="copy-schema" if="schema.present">
      <copy toDir="${project.ctxt-dir}/resources/schema" filtering="false"
        overwrite="true" failonerror="false">
        <fileset dir="${project.schema-dir}"/>
      </copy>
    </target>
  
    <target name="copy-lib" if="lib.present">
      <copy toDir="${project.ctxt-dir}/WEB-INF/lib" filtering="false"
        overwrite="true" failonerror="false">
        <fileset dir="${project.lib-dir}"/>
      </copy>
    </target>
  
    <target name="copy-classes" if="classes.present">
      <copy toDir="${project.ctxt-dir}/WEB-INF/classes" filtering="false"
        overwrite="true" failonerror="false">
        <fileset dir="${project.classes-dir}"/>
      </copy>
    </target>
  
    <target name="copy-skins" if="skins.present">
      <copy toDir="${project.ctxt-dir}/skins" filtering="off" overwrite="true" failonerror="false">
         <fileset dir="${project.skins-dir}" >
          <include name="**/images/**" />
        </fileset>
      </copy>
      <copy toDir="${project.ctxt-dir}/skins" filtering="on" overwrite="true" failonerror="false">
        <fileset dir="${project.skins-dir}" >
          <exclude name="**/images/**" />
        </fileset>
      </copy>
    </target>
  
    <target name="copy-skinconf" if="skinconf.present">
      <copy file="${project.skinconf}"
        toDir="${project.ctxt-dir}" filtering="false"
        overwrite="true" failonerror="false"/>
    </target>
  
    <target name="copy-status" if="status.present">
      <copy file="${project.status}" todir="${project.ctxt-dir}" filtering="false"/>
  <!-- FIXME: perhaps a separate target not conditional on status.present? -->
      <copy file="${project.status-docs}" todir="${project.ctxt-dir}" filtering="false"/>
    </target>
  
  
    <!-- ===============================================================
         Makes the Cocoon context dir to work in and fills it completely.
         That is by depending on:
           bare-context     // for forrest predefines.  
           project-context  // for project's actual content
             (now: copy stuff from extra param defining the content dir
              with siteplan: based on that)
           control-context  // for derivatives from siteplan 
             (now: no need, waiting on siteplan future)
              with siteplan: e.g. sitemap and catalog)
         param: name of the skin to use ${project.skin} (now)
         param: location to find the content ${project.content-dir}(now)
         param: location to make temporary context-dir ${project.ctxt-dir} 
         =============================================================== -->
    <target name="prepare-context" depends="init, bare-context, project-context" />
  
  
    <!-- ===============================================================
         Cleans the site.  (typically before generating the new version)
         param: location to clean ${project.site-dir}
         =============================================================== -->
    <target name="clean-site">
      <!-- <delete dir="${project.site-dir}"/> -->
      <mkdir dir="${project.site-dir}"/>     
      <delete includeEmptyDirs="false">
        <fileset dir="${project.site-dir}"/>
      </delete>     
    </target>
    
    <!-- ===============================================================
         Checks if the current project contains Forrest docs, and sets
         the 'project.empty' property if no docs are found.
         =============================================================== -->
    <target name="check-contentdir" depends="init-props">
      <available property="project.content.present" file="${project.content-dir}"
        type="dir"/>
    </target>
  
    <target name="ensure-nocontent" depends="check-contentdir"
      if="project.content.present">
      <fail>
  ------------------------------------------------
  This project already has content in ${project.xdocs-dir}.
  ------------------------------------------------
      </fail>
    </target>
  
    <target name="ensure-content" depends="check-contentdir"
      unless="project.content.present">
      <fail>
  ------------------------------------------------
  This project has no content in ${project.xdocs-dir}.
  Use the 'seed' target to create a template project structure.
  ------------------------------------------------
      </fail>
    </target>
  
    <!-- ===============================================================
         Makes the site.
         param: name of the skin to use ${project.skin} (now)
         param: location to find the content ${project.content-dir}(now)
         param: location to make temporary context-dir ${project.ctxt-dir} 
         param: location to make temporary work-dir ${project.content-dir}
         param: debuglevel for logging ${project.debuglevel}
         param: location of log-file ${project.logkitfile}
         ===============================================================
     -->
  
     <target name="site" depends="prepare-context, -site"
       description="Generates a static HTML website for this project"/>
  
     <target name="-site" depends="init, -prepare-classpath"
       if="project.content.present">
      <!-- clean out the temp space, if we don't cocoon fails on this
           actually clears the cache, not yet clear why it is really needed? -->
      <delete dir="${project.work-dir}"/>
      <mkdir dir="${project.work-dir}"/>
  
      <java classname="org.apache.cocoon.Main"
        fork="true"
        dir="."
        failonerror="true"
        classpathref="forrest.cp">
        <jvmarg
          value="-Djava.endorsed.dirs=${forrest.home}/lib/endorsed${path.separator}${java.endorsed.dirs}"/>
        <arg value="-c${project.ctxt-dir}"/>   <!-- input to the process -->
        <arg value="-d${project.site-dir}"/>   <!-- output to be put -->
        <arg value="-w${project.work-dir}"/>   <!-- temp dir to use for e.g. cache -->
        <arg value="-u${project.debuglevel}"/> <!-- threshold for log messages -->
        <arg value="-C${project.ctxt-dir}/WEB-INF/cocoon.xconf"/>      <!-- cocoon.xconf file to use -->
        <arg value="-b${project.brokenlinkfile}"/>  <!-- output list of broken links -->
        <arg value="-k${project.ctxt-dir}/WEB-INF/logkit.xconf"/>  <!-- output list of broken links -->
        <arg value="${project.start-uri}"/>              <!-- starting page -->
        <arg value="-V" />                          <!-- be verbose -->
      </java>
      <echo>
  ------------------------------
  Static site generated at:
    ${project.site-dir}
  
  Please check the file
  ${project.brokenlinkfile}
  for any broken links in the generated site.
  ------------------------------
      </echo>
    </target>
  
  
    <target name="project.webapp.defined" unless="project.webapp">
      <fail>
        ------------------------------------------------
        Error: $${project.webapp} variable has not been set. This is where the
        webapp will be assembled. Please define it in the calling script.
        ------------------------------------------------
      </fail>
    </target>
  
    <!-- ===============================================================
         Builds a cocoon webapp for your project.
         param: location to put generated webapp ${project.webapp}
         =============================================================== -->
    <target name="webapp" depends="init, validate, project.webapp.defined, prepare-context,
           load-project-props"
     description="Generates a dynamic servlet-based website (an unpackaged webapp)">
      <!-- this will need revisions in the case of the siteplan
      extra project-custom classes then will need to be warred in as well. -->
      <mkdir dir="${project.webapp}/WEB-INF"/>
      <copy file="${forrest.home}/WEB-INF/web.xml" todir="${project.webapp}/WEB-INF"/>
      <copy todir="${project.webapp}">
        <fileset dir="${project.ctxt-dir}" >
          <exclude name="*.xconf" /> <!-- CLI wants them there, webapp finds them in WEB-INF -->
        </fileset>
      </copy>
  
      <copy todir="${project.webapp}/WEB-INF">
        <!-- Note: no overwriting, so user's libs and classes get preference -->
        <fileset dir="${forrest.home}/WEB-INF">
          <include name="lib/**"/>
          <include name="classes/**"/>
        </fileset>
      </copy>
  
      <!-- Copy XML jars if not running JDK 1.4 (where they're built-in) -->
      <available property="jdk1.4+" classname="java.lang.CharSequence"/>
      <copy todir="${project.webapp}/WEB-INF/lib">
        <fileset dir="${forrest.home}/lib">
          <include name="endorsed/*jar" unless="jdk1.4+"/>
        </fileset>
      </copy>
  
      <echo>
  ---------------------------------
  Webapp generated in ${project.webapp}
  
  To run in Tomcat, add this to the config file (usu. server.xml):
  
  &lt;Context path='/${skinconfig.project-name}'
              docBase='${project.webapp}'
              reloadable='true'/&gt;
  
  If using JDK 1.4 or above, make sure to set the Java environment variable
  -Djava.endorsed.dirs=${forrest.home}/lib/endorsed
  Eg, in the TOMCAT_OPTS (3.3.x) or CATALINA_OPTS (4.x) env variable.
  ---------------------------------
      </echo>
    </target>
  
    <!-- ===============================================================
         Builds a cocoon .war for your project based on the siteplan.
         param: location to put generated war ${project.war}
         =============================================================== -->
   <target name="war" depends="webapp"
     description="Generates a dynamic servlet-based website (an packaged .war file)">
  
     <jar destfile="${project.war}" basedir="${project.webapp}"/>
     <echo>
  ---------------------------------
  Webapp .war file generated:
  ${project.war}
  ---------------------------------
     </echo>
    </target>
  
  
  
  <!-- ***************************************************************** -->
  <!-- ***************************************************************** -->
  <!-- **                                                             ** -->
  <!-- **                                                             ** -->
  <!-- **          PROJECT-TEMPLATE BUILDING ACTIONS                  ** -->
  <!-- **                                                             ** -->
  <!-- **                                                             ** -->
  <!-- ***************************************************************** -->
  <!-- ***************************************************************** -->
  
  
  
    <!-- ===============================================================
          Copies a template structure over to your project dir.
         =============================================================== -->
    <target name="seed" depends="ensure-nocontent"
      description="Seeds a directory with a template project doc structure">
      <unzip src="${forrest.home}/fresh-site.zip" 
        dest="${project.home}"
        overwrite="false"/>
      <echo>
  -------------------------------
  ~~ Template project created! ~~
  
  Here is an outline of the generated files:
  
  /                        # ${basedir}
  /status.xml              # List of project developers, todo list and change log
  /forrest.properties      # Optional file describing your site layout
  /src/documentation/      # Doc-specific files
  /src/documentation/skinconf.xml    # Info about your project used by the skin
  /src/documentation/content/xdocs   # XML content.
  /src/documentation/content/xdocs/index.xml # Home page
  /src/documentation/content/xdocs/book.xml  # Navigation file for site structure
  /src/documentation/content/xdocs/tabs.xml  # Skin-specific 'tabs' file.
  /src/documentation/resources/images        # Project images (logos, etc)
  
  
  What to do now?
  
  - Try rendering this template to HTML by typing 'forrest'. View the generated
    HTML in a browser to make sure everything works.
  - Edit status.xml and src/documentation/skinconf.xml and customize for your
    project.
  - Replace src/documentation/resources/images/project-logo.gif with your project
    logo.
  - Start adding content in xdocs/, remembering to add new files to book.xml
  - Provide any feedback to forrest-dev@xml.apache.org
  
  Thanks for using Apache Forrest
  -------------------------------
      </echo>
    </target>
  
  
  
  
    <target name="validate" depends="validation-props, validate-xdocs,
      validate-skinconf, validate-sitemap, validate-skins, validate-skinchoice,
      validate-stylesheets"  description="Validates XML doc files in the project"/>
  
    <target name="validate-xdocs" depends="validation-props" if="validate.xdocs">
      <xmlvalidate failonerror="${forrest.validate.xdocs.failonerror}" lenient="no" warn="yes">
        <xmlcatalog>
          <catalogfiles dir="${project.schema-dir}">
            <include name="catalog*"/>
          </catalogfiles>
          <catalogfiles dir="${forrest.home}/context/resources/schema">
            <include name="catalog" />
          </catalogfiles>
        </xmlcatalog>
        <fileset dir="${project.xdocs-dir}"
          includes="${forrest.validate.xdocs.includes}"
          excludes="${forrest.validate.xdocs.excludes}"/>
      </xmlvalidate>
      <echo message="...validated xdocs"/>
    </target>
  
    <target name="validate-skinconf" depends="validation-props"
      if="validate.skinconf">
      <jing rngfile="${forrest.home}/context/resources/schema/relaxng/skinconf-v10.rng">
        <fileset dir="${project.content-dir}"
          includes="${forrest.validate.skinconf.includes}"
          excludes="${forrest.validate.skinconf.excludes}"/>
      </jing>
      <echo message="...validated skinconf"/>
    </target>
  
    <target name="validate-sitemap" depends="validation-props"
      if="validate.sitemap">
      <jing rngfile="${forrest.home}/context/resources/schema/relaxng/sitemap-v05.rng">
        <fileset dir="${project.content-dir}"
          includes="${forrest.validate.sitemap.includes}"
          excludes="${forrest.validate.sitemap.excludes}"/>
      </jing>
      <echo message="...validated sitemap"/>
    </target>
  
    <target name="validate-stylesheets" depends="validation-props"
      if="validate.stylesheets">
      <jing rngfile="${forrest.home}/context/resources/schema/relaxng/xslt.rng">
        <fileset dir="${project.stylesheets-dir}"
          includes="${forrest.validate.stylesheets.includes}"
          excludes="${forrest.validate.stylesheets.excludes}" />
      </jing>
      <echo message="...validated stylesheets"/>
    </target>
  
    <target name="validate-skins" depends="validate-skins-stylesheets"/>
  
    <target name="validate-skins-stylesheets" depends="validation-props"
      if="validate.skins.stylesheets">
      <jing rngfile="${forrest.home}/context/resources/schema/relaxng/xslt.rng">
        <fileset dir="${project.skins-dir}"
          includes="${forrest.validate.skins.stylesheets.includes}"
          excludes="${forrest.validate.skins.stylesheets.excludes}"/>
      </jing>
      <echo message="...validated skin stylesheets"/>
    </target>
  
    <!-- Check that ${project.skin} points to an existing skin. -->
    <target name="validate-skinchoice">
      <condition property="project.skin.present">
        <available file="${project.skin}" type="dir">
          <filepath path="${project.skins-dir}"/>
          <filepath path="${forrest.home}/context/skins"/>
        </available>
      </condition>
  
      <fail unless="project.skin.present">
  ------------------------------------------------
  Error: The skin '${project.skin}' could not be found in:
  
  ${project.skins-dir}
  
  And is not provided by Forrest in
  
  ${forrest.home}/context/skins
  
  Please check the $${project.skins-dir} and $${project.skin} properties in
  forrest.properties.
  ------------------------------------------------
      </fail>
      <echo message="...validated existence of skin '${project.skin}'"/>
    </target>
    
    
  <!-- ***************************************************************** -->
  <!-- ***************************************************************** -->
  <!-- **                                                             ** -->
  <!-- **                                                             ** -->
  <!-- **              LOCAL SERVER RUN ACTION                        ** -->
  <!-- **                                                             ** -->
  <!-- **                                                             ** -->
  <!-- ***************************************************************** -->
  <!-- ***************************************************************** -->
  
  
    <target name="run" 
     description="Run Jetty with configuration set by the jetty.run property"
     depends="webapp">
            
      <java classname="org.mortbay.jetty.Server"
            dir="./build/webapp"
            fork="yes"
            failonerror="yes">
         <classpath>
           <pathelement path="${env.CLASSPATH}" />
           <fileset dir="${forrest.home}/lib/endorsed">
             <include name="*.jar"/>
             <include name="*.JAR"/>
             <include name="*.zip"/>
             <include name="*.ZIP"/>
           </fileset>         
           <fileset dir="${forrest.home}/lib/optional">
             <include name="*.jar"/>
             <include name="*.JAR"/>
             <include name="*.zip"/>
             <include name="*.ZIP"/>
           </fileset>
         </classpath>
        <jvmarg
          value="-Djava.endorsed.dirs=${java.endorsed.dirs}${path.separator}${forrest.home}/lib/endorsed"/>
         <arg line="jettyconf.xml" />
      </java>
    </target>  
  
  
  <!-- ***************************************************************** -->
  <!-- **                    COCOON TRIAL RUN                         ** -->
  <!-- ***************************************************************** -->
  
  
    <target name="trial-run" depends="validation-props, copy-config-files, validate-v10-docs, transform2v11">
      <echo>
    *---------------------------------------------------------------*
    | Forrest Transition Trial Set Up Successfully                  |
    |                                                               |
    | Please type:                                                  |                 
    |                                                               |
    |    ./build.[sh|bat] site-F       to build the static site     |
    |    ./build.[sh|bat] webapp-F     to build the webapp          |
    |    ./build.[sh|bat] war-F        to build a war               |
    |    ./build.[sh|bat] validate-F  to validate files             | 
    *---------------------------------------------------------------*
  
      </echo>
  
    </target>
  
  
    <target name="validate-v10-docs" depends="validation-props">
      <echo>
    *---------------------------------------------------------------*
    | Validating document-v10 files                                 |
    *---------------------------------------------------------------*
  
      </echo>
      <xmlvalidate failonerror="${forrest.validate.xdocs.failonerror}" lenient="no" warn="yes">
        <xmlcatalog>
          <catalogfiles dir="${project.schema-dir}">
            <include name="catalog*"/>
          </catalogfiles>
          <catalogfiles dir="${forrest.home}/context/resources/schema">
            <include name="catalog" />
          </catalogfiles>
        </xmlcatalog>
        <fileset dir="${project.home}/src/documentation/xdocs"
          includes="${forrest.validate.xdocs.includes}"
          excludes="drafts/**, ctwig/**, dictionary.xml"/>
      </xmlvalidate>
    </target>
  
  
  <target name="transform2v11"
          depends="validate-v10-docs">
  
    <property name="src.dir" value="${project.home}/src/documentation/xdocs"/>
    <property name="dest.dir" value="${project.home}/build/forrest-trial-run"/>
  
      <echo>
    *---------------------------------------------------------------*
    | Transforming document-v10 files                               |
    *---------------------------------------------------------------*
  
      </echo>
  
    <xslt basedir="${src.dir}"
      destdir="${dest.dir}/v11-docs"
      extension=".xml"
      style="${forrest.home}/context/library/xslt/docv10todocv11.xsl"
      includes="**/*.xml"
      excludes="css/**, drafts/**, faq/faq**.xml, book.xml, **/book.xml, plan/changes-doc.xml, plan/todo-doc.xml, ctwig/**, dictionary.xml"
    >
        <xmlcatalog>
          <catalogfiles dir="${forrest.home}/context/resources/schema">
            <include name="catalog" />
          </catalogfiles>
        </xmlcatalog>
    </xslt> 
  
      <echo>
    *---------------------------------------------------------------*
    | Transforming faq files                                        |
    *---------------------------------------------------------------*
  
      </echo>
  
    <xslt basedir="${src.dir}/faq"
      destdir="${dest.dir}/v11-docs/faq"
      extension=".xml" 
      style="${forrest.home}/context/library/xslt/faqv10tofaqv11.xsl"
      includes="*.xml"
      excludes="book.xml, index.xml"
    >
        <xmlcatalog>
          <catalogfiles dir="${forrest.home}/context/resources/schema">
            <include name="catalog" />
          </catalogfiles>
        </xmlcatalog>
  
    </xslt> 
  		   
      <echo>
    *---------------------------------------------------------------*
    | Transforming book.xml files                                   |
    *---------------------------------------------------------------*
  
      </echo>
  
    <xslt basedir="${src.dir}"
      destdir="${dest.dir}/v11-docs"
      extension=".xml" 
      style="${forrest.home}/context/library/xslt/bookv10.xsl"
      includes="book.xml, **/book.xml"
    >
        <xmlcatalog>
          <catalogfiles dir="${forrest.home}/context/resources/schema">
            <include name="catalog" />
          </catalogfiles>
        </xmlcatalog>
    </xslt> 
  
      <echo>
    *---------------------------------------------------------------*
    | Copying text files unchanged                                  |
    *---------------------------------------------------------------*
  
      </echo>
  
      <copy todir="${dest.dir}/v11-docs/">
        <fileset dir="${src.dir}/" >
          <include name="**/*.txt" />
        </fileset>
      </copy>
      
  </target>
  
  <target name="copy-config-files">
  
    <delete dir="${project.home}/build/forrest-trial-run/"/>
  
  
      <echo>
    *---------------------------------------------------------------*
    | Copying latest in-process tabs.xml                            |
    *---------------------------------------------------------------*
  
      </echo>
  
      <copy todir="${project.home}/build/forrest-trial-run/v11-docs/" filtering="off">
        <fileset dir="${forrest.home}../../../../src/resources/convert/cocoon/" >
          <include name="tabs.xml" />
        </fileset>
      </copy>
  
      <echo>
    *---------------------------------------------------------------*
    | Copying latest in-process skinconf.xml                        |
    *---------------------------------------------------------------*
  
      </echo>
  
      <copy todir="${project.home}/build/forrest-trial-run/" filtering="off">
        <fileset dir="${forrest.home}../../../../src/resources/convert/cocoon/" >
          <include name="skinconf.xml" />
        </fileset>
      </copy>
  
      <echo>
    *---------------------------------------------------------------*
    | Copying latest in-process sitemap.xmap                        |
    *---------------------------------------------------------------*
  
      </echo>
  
      <copy todir="${project.home}/build/forrest-trial-run/" filtering="off">
        <fileset dir="${forrest.home}../../../../src/resources/convert/cocoon/" >
          <include name="sitemap.xmap" />
        </fileset>
      </copy>
  
      
  </target>
  
  
  
  
  </project>
  
  
  
  1.1                  xml-forrest/src/resources/convert/cocoon/forrest.properties
  
  Index: forrest.properties
  ===================================================================
  ##############
  # Properties used by forrest.build.xml for building the website
  ##############
  
  # Prints out a summary of Forrest settings for this project
  forrest.echo=true 
  
  # Project name (used to name .war file)
  project.name=cocoon-docs
  
  # Specifies name of Forrest skin to use
  project.skin=forrest-site
  #project.skin=avalon-tigris
  
  ##############
  # transition properties
  project.debuglevel=INFO
  
  ##############
  # layout properties
  
  # Properties that must be set to override the default locations
  #project.status=status.xml
  project.content-dir=src/documentation
  #project.conf-dir=${project.content-dir}/conf
  project.sitemap=build/forrest-trial-run/sitemap.xmap
  project.xdocs-dir=build/forrest-trial-run/v11-docs
  project.stylesheets-dir=${project.content-dir}/stylesheets
  project.images-dir=${project.content-dir}/images
  #project.schema-dir=${project.content-dir}/resources/schema
  #project.skins-dir=${project.content-dir}/skins
  project.skinconf=build/forrest-trial-run/skinconf.xml
  #project.lib-dir=/lib
  #project.classes-dir=${project.content-dir}/classes
  
  
  ##############
  # validation properties
  
  # These props determine if validation is performed at all
  # Values are inherited unless overridden.
  # Eg, if forrest.validate=false, then all others are false unless set to true.
  #forrest.validate=true
  #forrest.validate.xdocs=${forrest.validate}
  #forrest.validate.skinconf=${forrest.validate}
  #forrest.validate.sitemap=${forrest.validate}
  #forrest.validate.stylesheets=${forrest.validate}
  #forrest.validate.skins=${forrest.validate}
  #forrest.validate.skins.stylesheets=${forrest.validate.skins}
  
  
  # Key:
  # *.failonerror=(true|false)    stop when an XML file is invalid
  # *.includes=(pattern)         Comma-separated list of path patterns to validate
  # *.excludes=(pattern)         Comma-separated list of path patterns to not validate
  
  #forrest.validate.failonerror=true
  #forrest.validate.includes=**/*
  #forrest.validate.excludes=
  #
  #forrest.validate.xdocs.failonerror=${forrest.validate.failonerror}
  #
  #forrest.validate.xdocs.includes=**/*.x*
  #forrest.validate.xdocs.excludes=
  #
  #forrest.validate.skinconf.includes=${skinconf-file}
  #forrest.validate.skinconf.excludes=
  #forrest.validate.skinconf.failonerror=${forrest.validate.failonerror}
  #
  #forrest.validate.sitemap.includes=${sitemap-file}
  #forrest.validate.sitemap.excludes=
  #forrest.validate.sitemap.failonerror=${forrest.validate.failonerror}
  #
  #forrest.validate.stylesheets.includes=**/*.xsl
  #forrest.validate.stylesheets.excludes=
  #forrest.validate.stylesheets.failonerror=${forrest.validate.failonerror}
  #
  #forrest.validate.skins.includes=**/*
  #forrest.validate.skins.excludes=**/*.xsl
  #forrest.validate.skins.failonerror=${forrest.validate.failonerror}
  #
  #forrest.validate.skins.stylesheets.includes=**/*.xsl
  #forrest.validate.skins.stylesheets.excludes=
  #forrest.validate.skins.stylesheets.failonerror=${forrest.validate.skins.failonerror}
  
  
  
  1.1                  xml-forrest/src/resources/convert/cocoon/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  <?xml version="1.0"?>
  
  <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
  
  <!-- =========================== Components ================================ -->
  
   <map:components>
  
    <map:generators default="file">
     <map:generator  name="file"        src="org.apache.cocoon.generation.FileGenerator" label="content"/>
     <map:generator  name="directory"   src="org.apache.cocoon.generation.DirectoryGenerator" label="content"/>
     <map:generator  name="html"        src="org.apache.cocoon.generation.HTMLGenerator" label="content"/>
     <map:generator  name="libre"       src="org.apache.forrest.yer.use.cocoon.HierarchyGenerator" label="content"/>
     <map:generator  name="nekodtd"     src="org.apache.forrest.components.generator.XNIConfigurableFileGenerator" label="content"/>
     <!-- FIXME: Change this once better view handling is implemented -->
     <map:generator  name="file-nolabel" src="org.apache.cocoon.generation.FileGenerator"/>
    </map:generators>
  
    <map:transformers default="xslt">
    <!--
     <map:transformer     name="xslt"      src="org.apache.cocoon.transformation.TraxTransformer">
      <use-request-parameters>false</use-request-parameters>
      <use-browser-capabilities-db>false</use-browser-capabilities-db>
     </map:transformer>
    -->
      <map:transformer name="xslt" src="org.apache.cocoon.transformation.TraxTransformer"
                          logger="sitemap.transformer.xsltc"
                          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>
        <!-- transformer-factory>com.icl.saxon.TransformerFactoryImpl</transformer-factory -->
        <!-- transformer-factory>org.apache.xalan.xsltc.trax.TransformerFactoryImpl</transformer-factory -->
      </map:transformer>
    </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>
       <encoding>ISO-8859-1</encoding>
     </map:serializer>
  
     <map:serializer name="xml"    mime-type="text/xml"         src="org.apache.cocoon.serialization.XMLSerializer">
       <encoding>ISO-8859-1</encoding>
     </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 name="svg2jpeg" mime-type="image/jpeg"     src="org.apache.cocoon.serialization.SVGSerializer">
         <parameter name="quality" type="float" value="1.0"/>
     </map:serializer>
     <map:serializer name="svg2png" mime-type="image/png"       src="org.apache.cocoon.serialization.SVGSerializer"/>
    </map:serializers>
  
    <map:matchers default="wildcard">
     <map:matcher name="wildcard" src="org.apache.cocoon.matching.WildcardURIMatcher"/>
    </map:matchers>
  <!--
    <map:selectors default="skin-parameter">
      <map:selector name="request-parameter" logger="sitemap.selector.request-parameter"
                   src="org.apache.cocoon.selection.RequestParameterSelector">
        <parameter-name>skin</parameter-name>
      </map:selector>
      <map:selector name="style-parameter" logger="sitemap.selector.request-parameter"
                   src="org.apache.cocoon.selection.RequestParameterSelector">
        <parameter-name>style</parameter-name>
      </map:selector>
  
    </map:selectors>
  -->
    <map:actions>
     <!-- <map:action logger="sitemap.action.request" name="request" src="org.apache.cocoon.acting.RequestParamAction"/> -->
      <map:action logger="sitemap.action.resource-exists" name="resource-exists" src="org.apache.cocoon.acting.ResourceExistsAction"/>
    </map:actions>
  
    <!--
       The different pipeline implementations
    -->
    <map:pipelines default="caching">
       <map:pipeline name="caching" src="org.apache.cocoon.components.pipeline.impl.CachingProcessingPipeline"/>
       <map:pipeline name="noncaching" src="org.apache.cocoon.components.pipeline.impl.NonCachingProcessingPipeline"/>
       <!-- The following two can be used for profiling:
       <map:pipeline name="profile-caching" src="org.apache.cocoon.components.profiler.ProfilingCachingProcessingPipeline"/>
       <map:pipeline name="profile-noncaching" src="org.apache.cocoon.components.profiler.ProfilingNonCachingProcessingPipeline"/>
       -->
    </map:pipelines>
    
   </map:components>
  
  <!-- =========================== Views =================================== -->
  
   <map:views>
    <map:view name="content" from-label="content">
     <map:serialize type="xml"/>
    </map:view>
  
    <map:view name="links" from-position="last">
     <map:transform src="library/xslt/filterlinks.xsl"/>
     <map:serialize type="links"/>
    </map:view>
   </map:views>
  
   <map:resources>
    <map:resource name="skinit">
     <map:transform src="skins/{defaults:skin}/xslt/html/{type}.xsl">
       <map:parameter name="isfaq" value="{isfaq}"/>
       <map:parameter name="nopdf" value="{nopdf}"/>
       <map:parameter name="path" value="{path}"/>
       <!-- Can set an alternative project skinconfig here 
       <map:parameter name="config-file" value="../../../../skinconf.xml"/>
       -->
     </map:transform>
     <map:serialize/>
    </map:resource>
  
    <map:resource name="book">
      <map:generate src="content/xdocs/{../1}book.xml"/>
      <map:call resource="skinit">
        <map:parameter name="type" value="book2menu"/>
        <map:parameter name="path" value="{path}"/>
      </map:call>
    </map:resource>
  
    <map:resource name="skin-read">
      <map:read src="skins/{defaults:skin}/{path}" mime-type="{mime-type}"/>
    </map:resource>
  
   </map:resources>
  
  <!-- =========================== Pipelines ================================= -->
  
   <map:pipelines>
    
    <!-- Pipeline that manages the internal URI space
         For the external URI space manager, see the next pipeline. -->
    <map:pipeline internal-only="true">
  
    <map:match pattern="**tab-**.xml">
      <map:generate src="content/xdocs/tabs.xml"/>
      <map:call resource="skinit">
       <map:parameter name="type" value="tab2menu"/>
       <map:parameter name="path" value="{2}"/>
      </map:call>
    </map:match>
  
    <map:match pattern="**book-**/*.xml">
      <map:call resource="book">
       <map:parameter name="path" value="{2}/{3}.xml"/>
      </map:call>
    </map:match>
  
    <map:match pattern="**book-**.xml">
      <map:call resource="book">
        <map:parameter name="path" value="{2}.xml"/>
      </map:call>
    </map:match>
  
    <map:match pattern="body-todo.xml">
       <map:generate type="file-nolabel" src="status.xml"/>
       <map:transform src="library/xslt/todo2document.xsl" label="content"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="/todo.xml"/>
       </map:call>
     </map:match>
  
     <!-- docs todo -->
     <map:match pattern="body-**/todo-*.xml">
       <map:generate type="file-nolabel" src="status-docs.xml" label="content"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="{1}/todo-{2}.xml"/>
       </map:call>
     </map:match>
  
  
     <map:match pattern="body-changes.xml">
       <map:generate type="file-nolabel" src="status.xml"/>
       <map:transform src="library/xslt/changes2document.xsl" label="content"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="/changes.xml"/>
       </map:call>
     </map:match>
  
     <!-- docs changes -->
     <map:match pattern="body-**/changes-*.xml">
       <map:generate type="file-nolabel" src="status-docs.xml" label="content"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="{1}/changes-{2}.xml"/>
        <map:parameter name="nopdf" value="true"/>
       </map:call>
     </map:match>
  
     <map:match pattern="body-**/faq.xml">
       <map:generate type="file-nolabel" src="content/xdocs/{1}/faq.xml"/>
       <map:transform src="library/xslt/faq2document.xsl" label="content"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="{1}/faq.xml"/>
        <map:parameter name="isfaq" value="true"/>
        <map:parameter name="nopdf" value="true"/>
       </map:call>
     </map:match>
  
     <map:match pattern="body-faq.xml">
       <map:generate type="file-nolabel" src="content/xdocs/faq.xml"/>
       <map:transform src="library/xslt/faq2document.xsl" label="content"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="faq.xml"/>
        <map:parameter name="isfaq" value="true"/>
        <map:parameter name="nopdf" value="true"/>
       </map:call>
     </map:match>
  
  
     <!-- Redirect requests for community/ (eg in the trail) to the home page -->
     <map:match pattern="community/index.html">
       <map:redirect-to uri="../index.html"/>
     </map:match>
  
     <!-- index pages for contribution categories -->
     <map:match pattern="body-community/*/index.xml">
       <map:generate src="content/xdocs/community/{1}/index.xml"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="community/{1}/index"/>
       </map:call>
     </map:match>
  
     <!-- no special transformation, yet, for revision pages -->
     <map:match pattern="body-community**revision-*.xml">
       <map:generate src="content/xdocs/community{1}revision-{2}.xml"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="community/{1}/revision-{2}"/>
       </map:call>
     </map:match>
  
     <!-- all contribution docs -->
     <map:match pattern="body-community/*/*/**.xml">
       <map:aggregate element="all" >
         <map:part src="content/xdocs/community/{1}/{2}/{3}.xml"/>
         <map:part src="cocoon:/revisions-community/{1}/{2}/{3}" />
       </map:aggregate>
       <map:transform src="library/xslt/{1}2document.xsl" label="content"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="community/{1}/{2}/{3}.xml"/>
       </map:call>
     </map:match>
  
     <!-- revisions only implemented for community pages -->
    <map:match pattern="revisions-community/*/*/**">
       <map:generate type="directory" src="content/xdocs/community/{1}/{2}">
      <map:parameter name="dateFormat" value="yyyy-MM-dd hh:mm" />
     </map:generate>
       <map:transform src="library/xslt/directory2revisions.xsl" label="content" >
         <map:parameter name="use-request-parameters" value="true"/>
         <map:parameter name="page" value="{3}"/>
       </map:transform>
     <map:serialize type="xml" />
   </map:match>
  
   <!-- Any other howto directories get transformed, without revisions -->
   <map:match pattern="body-**howto/*.xml">
     <map:generate src="content/xdocs/{1}howto/{2}.xml"/>
     <map:transform src="library/xslt/howto2document.xsl" label="content"/>
     <map:call resource="skinit">
       <map:parameter name="type" value="document2html"/>
       <map:parameter name="path" value="{1}howto/{2}.xml"/>
     </map:call>
   </map:match>
  
  
     <!-- Generate the "doclist" - list of all documentation
       The first match generates each book.xml and adds a new attribute "uri".
       The second match aggregates each book.xml into a doclist and
       then converts it to a document.
     -->
     <map:match pattern="doclist/content/xdocs/**book.xml">
       <map:generate src="content/xdocs/{1}book.xml"/>
       <map:transform src="library/xslt/doclist.xsl">
         <map:parameter name="uri" value="{1}"/>
       </map:transform>
       <map:serialize type="xml"/>
      </map:match>
  
     <map:match pattern="body-doclist.xml">
       <map:aggregate element="doclist">
         <map:part src="cocoon:/doclist/content/xdocs/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/installing/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/userdocs/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/userdocs/concepts/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/userdocs/generators/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/userdocs/transformers/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/userdocs/serializers/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/userdocs/matchers/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/userdocs/selectors/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/userdocs/actions/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/userdocs/xsp/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/developing/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/developing/webapps/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/tutorial/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/howto/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/faq/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/snippet/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/plan/book.xml"/>
         <map:part src="cocoon:/doclist/content/xdocs/link/book.xml"/>
       </map:aggregate>
       <map:transform src="library/xslt/doclist2document.xsl"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="path" value="doclist.xml"/>
        <map:parameter name="nopdf" value="true"/>
       </map:call>
     </map:match>
  
     <!-- HTML DTD Documentation generation pipeline, makes use of NekoDTD tool -->
  
     <map:match pattern="body-**.dtdx.xml">
       <map:generate type="nekodtd" src="resources/schema/dtd/{1}.dtd">
         <map:parameter name="config-class" value="org.cyberneko.dtd.DTDConfiguration" />
       </map:generate>
       <map:transform src="library/xslt/dtdx2flat.xsl"/>
       <map:transform src="library/xslt/flat2document.xsl"/>
       <map:call resource="skinit">
        <map:parameter name="type" value="document2html"/>
        <map:parameter name="isfaq" value="true"/>
        <map:parameter name="path" value="{1}.dtdx.xml"/>
       </map:call>
     </map:match>
  
     <!-- Generates body HTML for files in subdirs -->
     <map:match pattern="body-**/*.xml">
      <map:generate src="content/xdocs/{1}/{2}.xml"/>
      <map:call resource="skinit">
       <map:parameter name="type" value="document2html"/>
       <map:parameter name="path" value="{1}/{2}.xml"/>
        <map:parameter name="nopdf" value="true"/>
      </map:call>
      </map:match>
  
     <!-- Generates body HTML for root-level files -->
     <map:match pattern="body-**.xml">
      <map:generate src="content/xdocs/{1}.xml"/>
      <map:call resource="skinit">
       <map:parameter name="type" value="document2html"/>
       <map:parameter name="path" value="{1}.xml"/>
        <map:parameter name="nopdf" value="true"/>
      </map:call>
     </map:match>
  
    </map:pipeline>
  
  
    <map:pipeline internal-only="false">
  
     <!-- ======================    editor    ============================== -->
     <map:match pattern="edit**">
       <map:mount uri-prefix="edit" src="editor.xmap" check-reload="yes"/>
     </map:match>
     
     <!-- ==================   External URI-space    ========================= -->   
  
  
     <map:match pattern="">
      <map:redirect-to uri="{context:context}/index.html"/>
     </map:match>
  
     <map:match pattern="**">
     
      <!-- if the file is present verbatim as content, give that to the user... -->
      <map:act type="resource-exists">
       <map:parameter name="url" value="content/{1}"/>
       <map:read src="content/{../1}"/>
      </map:act>
     
     <!-- ... otherwise try to generate it using these rules.  -->
    
    <map:match pattern="apachestats">
      <map:generate type="html"
                    src="http://www.apache.org/~rubys/stats/xml.apache.org/">
        <map:parameter name="xpath"
                       value="/html/body//a[contains(@href,'.xml')]"/>
      </map:generate>
      <map:serialize type="xml"/>
    </map:match>
  
       
     <map:match pattern="*.html">
      <map:aggregate element="site">
       <map:part src="cocoon:/book-{1}.xml"/>
       <map:part src="cocoon:/tab-{1}.xml"/>
       <map:part src="cocoon:/body-{1}.xml" label="content"/>
      </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}/book-{1}/{2}.xml"/>
       <map:part src="cocoon:/{1}/tab-{1}/{2}.xml"/>
       <map:part src="cocoon:/body-{1}/{2}.xml" label="content"/>
      </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="*.dtdx.pdf">
       <map:generate type="nekodtd" src="resources/schema/dtd/{1}.dtd">
         <map:parameter name="config-class" value="org.cyberneko.dtd.DTDConfiguration" />
       </map:generate>
       <map:transform src="library/xslt/dtdx2flat.xsl"/>
       <map:transform src="library/xslt/flat2document.xsl"/>
       <map:transform src="skins/{defaults:skin}/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <map:match pattern="**/*.dtdx.pdf">
       <map:generate type="nekodtd" src="resources/schema/dtd/{2}.dtd">
         <map:parameter name="config-class" value="org.cyberneko.dtd.DTDConfiguration" />
       </map:generate>
       <map:transform src="library/xslt/dtdx2flat.xsl"/>
       <map:transform src="library/xslt/flat2document.xsl"/>
      <map:transform src="skins/{defaults:skin}/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <map:match pattern="changes.pdf">
      <map:generate type="file-nolabel" src="status.xml"/>
      <map:transform src="library/xslt/changes2document.xsl" label="content"/>
      <map:transform src="skins/forrest-site/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <map:match pattern="todo.pdf">
      <map:generate type="file-nolabel" src="status.xml"/>
      <map:transform src="library/xslt/todo2document.xsl" label="content"/>
      <map:transform src="skins/forrest-site/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <map:match pattern="faq.pdf">
      <map:generate type="file-nolabel" src="content/xdocs/faq.xml"/>
      <map:transform src="library/xslt/faq2document.xsl" label="content"/>
      <map:transform src="skins/forrest-site/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <map:match pattern="community/howto/**.pdf">
      <map:generate src="content/xdocs/community/howto/{1}.xml"/>
      <map:transform src="library/xslt/howto2document.xsl" label="content"/>
      <map:transform src="skins/{defaults:skin}/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
     <map:match pattern="**.pdf">
      <map:generate src="content/xdocs/{1}.xml"/>
      <map:transform src="skins/{defaults:skin}/xslt/fo/document2fo.xsl"/>
      <map:serialize type="fo2pdf"/>
     </map:match>
  
  
     <!-- ================  Directory redirects   =========================== -->
     <!-- Redirect any request for a directory to the directory's index.html file  -->
     <map:match pattern="**/">
       <map:redirect-to uri="{context:context}/{1}/index.html"/>
     </map:match>
  
     <!-- ================  Libre   =========================== -->
  
     <map:match pattern="libre">
       <map:generate type="libre" src="content/xdocs" >
        <map:parameter name="depth" value="-1" />
       </map:generate>
       <map:serialize type="xml"/>
     </map:match>
  
     <!-- ================  Static  =========================== -->
  
     <map:match pattern="skin/**.js">
      <map:call resource="skin-read">
        <map:parameter name="path" value="scripts/{1}.js"/>
        <map:parameter name="mime-type" value="application/javascript"/>
      </map:call>
     </map:match>
  
     <map:match pattern="**/skin/**.js">
      <map:call resource="skin-read">
        <map:parameter name="path" value="scripts/{2}.js"/>
        <map:parameter name="mime-type" value="application/javascript"/>
      </map:call>
     </map:match>
  
     <map:match pattern="**.js">
       <map:read src="resources/scripts/{1}.js" mime-type="application/javascript"/>
     </map:match>
  
     <map:match pattern="skin/**.css">
      <map:call resource="skin-read">
        <map:parameter name="path" value="css/{1}.css"/>
        <map:parameter name="mime-type" value="text/css"/>
      </map:call>
     </map:match>
  
     <map:match pattern="**/skin/**.css">
      <map:call resource="skin-read">
        <map:parameter name="path" value="css/{2}.css"/>
        <map:parameter name="mime-type" value="text/css"/>
      </map:call>
     </map:match>
  
     <map:match pattern="**.css">
      <map:read src="resources/css/{1}.css" mime-type="text/css"/>
     </map:match>
  
     <map:match pattern="skin/images/**.*">
      <map:call resource="skin-read">
        <map:parameter name="path" value="images/{1}.{2}"/>
        <map:parameter name="mime-type" value="image/{2}"/>
      </map:call>
     </map:match>
  
     <!-- WARNING: You are strongly advised not to make use of this target, as it
     leads to browsers having to cache multiple copies of the images, one per
     directory. See the forrest-site skin XSLTs for an example of how to make
     all image references use the 'skin/images/**.*' rule above -->
     <map:match pattern="**/skin/images/**.*">
      <map:call resource="skin-read">
        <map:parameter name="path" value="images/{2}.{3}"/>
        <map:parameter name="mime-type" value="image/{3}"/>
      </map:call>
     </map:match>
  
     <!-- DS: handles images local to a contributor directory -->
     <map:match pattern="**my-images/**.*">
      <map:read src="content/xdocs/{1}my-images/{2}.{3}" mime-type="image/{3}"/>
     </map:match>
  
     <map:match pattern="images/**.*">
      <map:read src="resources/images/{1}.{2}" mime-type="image/{2}"/>
     </map:match>
  
     <!-- WARNING: See above: this target should not be made use of -->
     <map:match pattern="**/images/**.*">
      <map:read src="resources/images/{2}.{3}" mime-type="image/{3}"/>
     </map:match>
  
     <map:match pattern="**favicon.ico">
      <map:call resource="skin-read">
        <map:parameter name="path" value="images/favicon.ico"/>
        <map:parameter name="mime-type" value="image/x-ico"/>
      </map:call>
     </map:match>
  
     <map:match pattern="**.txt">
      <map:read src="content/xdocs/{1}.txt" mime-type="text/plain"/>
     </map:match>
  
     </map:match>
     
    </map:pipeline>
   </map:pipelines>
  
  </map:sitemap>
  
  
  
  
  1.1                  xml-forrest/src/resources/convert/cocoon/skinconf.xml
  
  Index: skinconf.xml
  ===================================================================
  <?xml version="1.0"?>
  
  <!--
  Skin configuration file. This file contains details of your project, which will
  be used to configure the chosen Forrest skin.
  
  jefft@apache.org
  -->
  
  <!DOCTYPE skinconfig [
  
    <!ENTITY % links.att 'name CDATA #REQUIRED'>
    <!ENTITY % link.att 'name CDATA #REQUIRED href CDATA #REQUIRED'>
    <!ELEMENT skinconfig (disable-search?, searchsite-domain?, searchsite-name?, project-name, project-url, project-logo, group-name?, group-url?, group-logo?, host-url?, host-logo?, year?, vendor?, trail?, credits?)*>
    <!ELEMENT credits (credit*)>
    <!ELEMENT credit (name, url, image, width?, height?)>
    <!ELEMENT disable-search (#PCDATA)>
    <!ELEMENT searchsite-domain (#PCDATA)>
    <!ELEMENT searchsite-name (#PCDATA)>  
    <!ELEMENT project-name (#PCDATA)>
    <!ELEMENT project-url (#PCDATA)>
    <!ELEMENT project-logo (#PCDATA)>
    <!ELEMENT group-name (#PCDATA)>
    <!ELEMENT group-url (#PCDATA)>
    <!ELEMENT group-logo (#PCDATA)>
    <!ELEMENT host-url (#PCDATA)>
    <!ELEMENT host-logo (#PCDATA)>
    <!ELEMENT year (#PCDATA)>
    <!ELEMENT vendor (#PCDATA)>
    <!ELEMENT trail (link1, link2, link3)>
    <!ELEMENT link1 EMPTY>
    <!-- Seems we can't use param entity refs until this is DTDified -->
    <!ATTLIST link1 name CDATA #REQUIRED href CDATA #IMPLIED>
    <!ELEMENT link2 EMPTY>
    <!ATTLIST link2 name CDATA #REQUIRED href CDATA #IMPLIED>
    <!ELEMENT link3 EMPTY>
    <!ATTLIST link3 name CDATA #REQUIRED href CDATA #IMPLIED>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT url (#PCDATA)>
    <!ELEMENT image (#PCDATA)>
    <!ELEMENT width (#PCDATA)>
    <!ELEMENT height (#PCDATA)>
    ]>
  
  <skinconfig>
    <!-- Do we want to disable the Google search box? -->
    <disable-search>false</disable-search>
    <searchsite-domain>xml.apache.org/cocoon</searchsite-domain>
    <searchsite-name>Apache Cocoon</searchsite-name>  
  
    <!-- mandatory project logo
         skin: forrest-site renders it at the top -->
    <project-name>Cocoon</project-name>
    <project-url>http://xml.apache.org/cocoon/</project-url>
    <project-logo>images/project-logo.gif</project-logo>
  
    <!-- optional group logo
         skin: forrest-site renders it at the top-left corner -->
    <group-name>Apache XML</group-name>
    <group-url>http://xml.apache.org/</group-url>
    <group-logo>images/group-logo.gif</group-logo>
  
    <!-- optional host logo (e.g. sourceforge logo)
         skin: forrest-site renders it at the bottom-left corner -->
    <host-url></host-url>
    <host-logo></host-logo>
  
    <!-- The following are used to construct a copyright statement -->
    <year>2002</year>
    <vendor>The Apache Software Foundation.</vendor>
  
    <!-- Some skins use this to form a 'breadcrumb trail' of links. If you don't
    want these, set the attributes to blank. The DTD purposefully requires them.
    -->
    <trail>
      <link1 name="apache" href="http://www.apache.org/"/>
      <link2 name="xml.apache" href="http://xml.apache.org/"/>
      <link3 name="" href=""/>
    </trail>
  
    <!-- Credits are typically rendered as a set of small clickable images in the
    page footer -->
    <credits>
      <credit>
        <name>Built with Cocoon</name>
        <url>http://xml.apache.org/cocoon/</url>
        <image>skin/images/built-with-cocoon.gif</image>
        <width>88</width>
        <height>31</height>
      </credit>
      <credit>
        <name>Krysalis Centipede</name>
        <url>http://www.krysalis.org/centipede/</url>
        <image>skin/images/centipede-logo-small.gif</image>
        <width>138</width>
        <height>31</height>
      </credit>
    </credits>
  </skinconfig>
  
  
  
  1.1                  xml-forrest/src/resources/convert/cocoon/status-docs.xml
  
  Index: status-docs.xml
  ===================================================================
  <?xml version="1.0"?>
  <status>
  
    <developers>
  	  <person name="Zvi Avraham" email="zvia@apache.org" id=""/>
  	  <person name="Donald Ball" email="balld@apache.org" id="DB"/>
  	  <person name="Nicola Ken Barozzi" email="nicolaken@apache.org" id="NKB"/>  
  	  <person name="Brian Behlendorf" email="brian@apache.org" id=""/>
  	  <person name="Ross Burton" email="rossb@apache.org" id="RB"/>
  	  <person name="Mark Butler" email="butlermh@apache.org" id=""/>
  	  <person name="Steven Coffman" email="gears@apache.org" id=""/>
  	  <person name="Marcus Crafter" email="crafterm@apache.org" id="MC"/>
  	  <person name="David Crossley" email="crossley@apache.org" id="DC"/>
  	  <person name="Torsten Curdt" email="tcurdt@apache.org" id="TC"/>
  	  <person name="Bertrand Delacr&#233;taz" email="bdelacretaz@apache.org" id=""/>
  	  <person name="Peter Donald" email="donaldp@apache.org" id=""/>
  	  <person name="Gerhard Froehlich" email="froehlich@apache.org" id="GF"/>
  	  <person name="Pierpaolo Fumagalli" email="pier@apache.org" id="PF"/>
  	  <person name="Robin Green" email="greenrd@apache.org" id=""/>
  	  <person name="Vadim Gritsenko" email="vgritsenko@apache.org" id="VG"/>
  	  <person name="Christian Haul" email="haul@apache.org" id="CH"/>
  	  <person name="Bernhard Huber" email="huber@apache.org" id="BH"/>
  	  <person name="Ivelin Atanasoff Ivanov" email="ivelin@apache.org" id="IAI"/>
  	  <person name="Ben Laurie" email="ben@apache.org" id=""/>
        <person name="Berin Loritsch" email="bloritsch@apache.org" id="BL"/>
  	  <person name="Martin Man" email="mman@apache.org" id=""/>
  	  <person name="Stefano Mazzocchi" email="stefano@apache.org" id="SM"/>
  	  <person name="Brett McLaughlin" email="bmclaugh@apache.org" id=""/>
  	  <person name="Stephan Michels" email="stephan@apache.org" id="SMS"/>
  	  <person name="John Morrison" email="morrijr@apache.org" id="JM"/>
        <person name="Steven Noels" email="stevenn@apache.org" id="SN" />
  	  <person name="Giacomo Pati" email="Giacomo.Pati@pwr.ch" id="GP"/>
  	  <person name="Konstantin Piroumian" email="kpiroumian@apache.org" id="KP"/>
  	  <person name="Ovidiu Predescu" email="ovidiu@apache.org" id="OP"/>
  	  <person name="Jeremy Quinn" email="jeremy@apache.org" id="JQ"/>
  	  <person name="Gianugo Rabellino" email="gianugo@apache.org" id="GR"/>
  	  <person name="Ricardo Rocha" email="ricardo@apache.org" id="RR"/>
  	  <person name="Peter Royal" email="proyal@apache.org" id=""/>
  	  <person name="Paul Russell" email="prussell@apache.org" id="PR"/>
  	  <person name="Sam Ruby" email="rubys@apache.org" id=""/>
  	  <person name="Sebastien Sahuc" email="ssahuc@apache.org" id=""/>
  	  <person name="Diana Shannon" email="shannon@apache.org" id="DS"/>
  	  <person name="Davanum Srinivas" email="dims@yahoo.com" id="DM"/>
  	  <person name="Sylvain Wallez" email="sylvain@apache.org" id="SW"/>
  	  <person name="Carsten Ziegeler" email="cziegeler@apache.org" id="CZ"/>
    </developers>
  
    <todo>
  	 <actions priority="high">
  	
  	  <action context="docs" assigned-to="open">
  	   Decide priorities for initial documentation project efforts.
  	  </action> 
  	 
  	  <action context="docs" assigned-to="open">
  	   Decide how draft documentation will be managed in CVS.
  	   Probably under the main xdocs to start with.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Decide how to simplify proposed content submission and review process.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Explore options for building &quot;depends&quot; hooks into 
  	   documentation to couple document content more tightly to code evolution.
  	   In other words, create internal document flags to help identify content
  	   to update when a particular component/option changes.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Clarify any copyright issues related to contributed documentation.
  	  </action> 
  		
  	  <action context="docs" assigned-to="open">
  	   Javadocs need simple package.html for description of each class.
  	   See email discussion cocoon-dev
  	   <link href="http://marc.theaimsgroup.com/?l=xml-cocoon-dev&amp;m=102056702426129">Javadocs: need basic package information</link>
  	  </action>
  	  
  	  <action context="docs" assigned-to="open">
  	   Develop how-to author Tutorial and Recipe documents.
  	  </action> 
  		
  	  <action context="docs" assigned-to="open">
  	   Develop how-to author a case studies/success story document.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Develop how-to author business case document.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="DS">
  	   Develop tips on writing effectively document for contributors.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="DS">
  	   Develop basic editing conventions for project.
  	  </action> 
  			
  	  <action context="docs" assigned-to="open">
  	   Develop status page of in-process documents and topics.
  	  </action> 
  		  
  	  <action context="docs" assigned-to="open">
  	   Review all existing documentation. Update 
  	   <link href="doc.html">Documentation Revisions</link> as appropriate. 
  	  </action> 
  		  
  	  <action context="docs" assigned-to="open">
  	   Review the titles of all existing documents. At one stage they were
  	   deliberately kept short because of show-off banner images. Now there is no
  	   need and titles can be properly descriptive. Also set guidelines for new
  	   document titles. See cocoon-dev discussion
  	   <link href="http://marc.theaimsgroup.com/?l=xml-cocoon-dev&amp;m=101982197707050"> Re: tracks/titles</link>.
  	  </action> 
  	
  	  <action context="docs" assigned-to="open">
  	   Harvest FAQ content from user list. Expand FAQ content. Revise faq-v10.dtd.
  	  </action> 
  		
  	  <action context="docs" assigned-to="open">
  	   Develop and post survey to user list to assess documentation needs. 
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Develop comprehensive how-to "wish list" cover all critical development issues. 
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Provide technical review of draft tutorial: &quot;Developing Your Own Generator.&quot; 
  	  </action> 
  		
  	  <action context="docs" assigned-to="open">
  	   Expand documentation infrastructure (XSLT, indexing, etc.) to provide efficient user
  	   access to multiple FAQs, How-Tos, Snippets, Tutorials, etc.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Revise web site navigation/hierarchy to make all documentation more accessible.
  	  </action> 
  	
  	 </actions>
  	
  	 <actions priority="medium">
  	
  	  <action context="code" assigned-to="open">
  	   Build upon Ken's excellent Patch Queue notifier to send a reminder/prompt
  	   to relevant mail list about outstanding DOC patches in Bugzilla.
  	  </action>
  	
  	  <action context="code" assigned-to="open">
  	   Explore CMS-related options with Forrest project.
  	  </action>
  	  
  	  <action context="docs" assigned-to="open">
  	   Recruit users for authoring and QA testing.
  	  </action>
  	  
  	  <action context="docs" assigned-to="open">
  	   Explore other QA options, such as off-site wikis and contentEnabled 
  	   browser capabilities.
  	  </action>
  	  
  	  <action context="docs" assigned-to="open">
  	   Decide how Cocoon project web site can be updated more frequently.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Edit content of existing documents, based on 
  	   <link href="doc.html">Documentation Revisions</link>.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Restructure existing documents, if necessary, based on 
  	   <link href="doc.html">Documentation Revisions</link>.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Develop more informative introductory pages for refactored samples.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Figure out how to consistently link between the Samples and the relevant
  	   documentation and vice versa. Then create more links.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Develop learner's roadmaps.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Develop an expanded version of <link href="doc.html">Documentation Revisions</link>
  	   to facilitate contributor and coordination efforts.
  	  </action> 
  	  
  	  <action context="docs" assigned-to="open">
  	   Review all existing scratchpad documentation. Update 
  	   <link href="doc.html">Documentation Revisions</link> as appropriate. 
  	  </action> 
  	
  	  <action context="docs" assigned-to="open">
  	   Decide what to do about the cTwIG (Cocoon Two Idiots Guide). After the
  	   re-organisation of the menus, it is no longer linked in.
  	   Perhaps some of it should move into the new How-to docs.
  	   There is also an old patch waiting in Bugzilla ...
  	   <link href="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6435">Bug 6435</link>
  	   which contains neglected contributions.
  	  </action> 
  	   
  	 </actions>
  
    </todo>
  
    <changes>
  	  <release version="@version@" date="@date@">
  		<action dev="DS" type="add" due-to="Mohamed El-Refaey" due-to-email="m.refaey@imkenberg.de">
  	   New How-To:
  	   <link href="../howto/howto-i18n-xmlform.html">i18n within the XMLForm Framework</link>
  		</action>
  		<action dev="DC" type="add" due-to="Geoff Howard" due-to-email="javageoff@yahoo.com">
  	   New tutorial:
  	   <link href="../tutorial/tutorial-generator.html">Write a Custom Generator</link>
  		</action>
  		<action dev="IAI" type="add" due-to="Ivelin Ivanov" due-to-email="ivelin@apache.org">
  		   Added documentation for the WebServiceProxyGenerator component.
  		   Explains how to implement Web Syndication.
  	  </action>
  		<action dev="IAI" type="add" due-to="Ivelin Ivanov" due-to-email="ivelin@apache.org">
  	   Added WSDL descriptor and a REST style resource version
  	   of the XMLForm demo.
  	  </action>
  	  </release>
  	  <release version="2.0.3" date="July 15 2002">
  		<action dev="DC" type="add">
  	   Encourage people to help with the mending broken links.
  	   Added a 
  	   <link href="linkstatus.html">linkstatus</link> document describing some
  	   tools.
  	  </action>
  		<action dev="DC" type="add">
  		Added section to the 
  		<link href="../mail-lists.html">Mailing Lists</link> document to describe
  		the new <code>cocoon-docs</code> mailing list.
  	  </action>
  		<action dev="NKB" type="add">
  		Established the new <code>cocoon-docs</code> mailing list.
  	  </action>
  		<action dev="DS" type="update">
  		Updated and refactored some planning docs.
  	  </action>
  		<action dev="DS" type="add" due-to="Betrand Delacretaz" due-to-email="bdelacretaz@codeconsult.ch">
  	   Added new How-To for HTML-PDF Publishing.
  	  </action>
  		<action dev="DS" type="add">
  		Added new How-To for Authoring Core Docs.
  	  </action>
  		<action dev="DS" type="add">
  		Added new How-To for PaginatorTransformer.
  	  </action>
  		<action dev="BH" type="add">
  		Added simple user documentation of LinkStatus Generator.
  	  </action>
  		<action dev="DC" type="add">
  	   Encourage people to help with the refactoring of Cocoon samples.
  	   Provide a 
  	   <link href="samples.html">refactoring guidelines</link> document.
  	  </action>
  		<action dev="DC" type="add" due-to="Andrew Savory" due-to-email="andrew@luminas.co.uk">
  	   Added overview documentation for
  	   <link href="../userdocs/concepts/xmlform.html">XMLForm Handling</link>.
  	  </action>
  		<action dev="DS" type="add">
  	   New <link href="../snippet/index.html">Snippet</link> section added, along
  	   with first <link href="../snippet/snippet-internal-pipeline.html">Snippet</link> and <link href="../howto/howto-author-snippet.html">Snippet How-To</link>.
  	  </action>
  		<action dev="DS" type="add">
  	   Added additional FAQs pages: <link href="../faq/faq-actions.html">Actions</link>, 
  	   <link href="../faq/faq-aggregators.html">Aggregators</link>, and 
  	   <link href="../faq/faq-xsp.html">XSP</link>.
  	  </action>
  		<action dev="DS" type="update">
  	   Edited <link href="../userdocs/matchers/matchers.html">Matchers</link>, 
  	   <link href="../userdocs/selectors/selectors.html">Selectors</link>, and a number of other
  	   user guide doc files to address grammar, typos, and general Global English issues.
  	  </action>
  		<action dev="DS" type="update">
  	   Added stylesheet, src/documentation/stylesheets/faqcommon.xsl, which places two 
  	   FAQs at the bottom of every FAQs topic page. FAQs added include
  	   &quot;How can I add my FAQ to this document&quot; and &quot;How can I suggest 
  	   improvements to existing FAQs&quot;.
  	  </action>
  		<action dev="DS" type="update">
  	   Added five additional <link href="../faq/index.html">FAQ categories</link> and pages.
  	   Pulled useful FAQ content from various locations within existing docs and sitemap files.
  	   Provided &quot;gateway links&quot; to additional site documentation.
  	  </action>
  		<action dev="IAI" type="add" due-to="Heidi Brannan" due-to-email="heidi@wkwyw.net">
  	   Added Heidi Brannan's new
  	   <link href="../howto/xmlform-wizard/howto-xmlform-wizard.html">XMLForm's How-To</link>.
  	  </action>
  		<action dev="DC" type="add">
  	   Added new draft
  	   <link href="../howto/howto-patch.html">How to Prepare a Patch</link>.
  	  </action>
  		<action dev="DC" type="add">
  	   Added new draft
  	   <link href="../howto/howto-bugzilla.html">How to Contribute a Patch
  	   via Bugzilla</link>.
  	  </action>
  		<action dev="DS" type="add">
  	   Added Tutorial section. Moved existing tutorial to new
  	   location. Added draft tutorial contribution.
  	  </action>
  		<action dev="DS" type="add">
  	   Added <link href="../howto/index.html">How-To section</link>.
  	   Added new How to author How-To and FAQ articles.
  	  </action>
  		<action dev="DS" type="update">
  	   Added new <link href="../faq/index.html">FAQ categories</link>.
  	   Restructured FAQ content to facilitate user contributions via patches.
  	  </action>
  		<action dev="DC" type="update">
  	   Reviewed the <link href="linkalarm-readme.txt">LinkAlarm report</link>
  	   and fixed some broken links.
  	  </action>
  		<action dev="DC" type="add" fixes-bug="8989" due-to="Andreas Hochsteger" due-to-email="e9625392@student.tuwien.ac.at">
  	   Added new <link href="../link/index.html">Cocoon Links</link> section
  	   with a collection of links to various external sources.
  	  </action>
  		<action dev="DS" type="update">
  	   Added many entries to the new To Do List.
  	  </action>
  		<action dev="DC" type="add">
  	   Started new documents for
  	   <link href="todo-doc.html">Documentation To Do List</link> and
  	   <link href="changes-doc.html">Documentation History of Changes</link>.
  	  </action>
  	  </release>
  	  <release version="2.0.2" date="March 26 2002">
  		<action dev="DS" type="add">
  		Commenced discussion and planning for a Documentation Project.
  	   </action>
    </release>
    </changes>
  </status>
  
  
  
  1.1                  xml-forrest/src/resources/convert/cocoon/status.xml
  
  Index: status.xml
  ===================================================================
  <?xml version="1.0"?>
  <status>
  
    <developers>
  	  <person name="Zvi Avraham" email="zvia@apache.org" id=""/>
  	  <person name="Donald Ball" email="balld@apache.org" id="DB"/>
  	  <person name="Nicola Ken Barozzi" email="nicolaken@apache.org" id="NKB"/>  
  	  <person name="Brian Behlendorf" email="brian@apache.org" id=""/>
  	  <person name="Ross Burton" email="rossb@apache.org" id="RB"/>
  	  <person name="Mark Butler" email="butlermh@apache.org" id=""/>
  	  <person name="Steven Coffman" email="gears@apache.org" id=""/>
  	  <person name="Marcus Crafter" email="crafterm@apache.org" id="MC"/>
  	  <person name="David Crossley" email="crossley@apache.org" id="DC"/>
  	  <person name="Torsten Curdt" email="tcurdt@apache.org" id="TC"/>
  	  <person name="Bertrand Delacr&#233;taz" email="bdelacretaz@apache.org" id=""/>
  	  <person name="Peter Donald" email="donaldp@apache.org" id=""/>
  	  <person name="Gerhard Froehlich" email="froehlich@apache.org" id="GF"/>
  	  <person name="Pierpaolo Fumagalli" email="pier@apache.org" id="PF"/>
  	  <person name="Robin Green" email="greenrd@apache.org" id=""/>
  	  <person name="Vadim Gritsenko" email="vgritsenko@apache.org" id="VG"/>
  	  <person name="Christian Haul" email="haul@apache.org" id="CH"/>
  	  <person name="Bernhard Huber" email="huber@apache.org" id="BH"/>
  	  <person name="Ivelin Atanasoff Ivanov" email="ivelin@apache.org" id="IAI"/>
  	  <person name="Ben Laurie" email="ben@apache.org" id=""/>
        <person name="Berin Loritsch" email="bloritsch@apache.org" id="BL"/>
  	  <person name="Martin Man" email="mman@apache.org" id=""/>
  	  <person name="Stefano Mazzocchi" email="stefano@apache.org" id="SM"/>
  	  <person name="Brett McLaughlin" email="bmclaugh@apache.org" id=""/>
  	  <person name="Stephan Michels" email="stephan@apache.org" id="SMS"/>
  	  <person name="John Morrison" email="morrijr@apache.org" id="JM"/>
        <person name="Steven Noels" email="stevenn@apache.org" id="SN" />
  	  <person name="Giacomo Pati" email="Giacomo.Pati@pwr.ch" id="GP"/>
  	  <person name="Konstantin Piroumian" email="kpiroumian@apache.org" id="KP"/>
  	  <person name="Ovidiu Predescu" email="ovidiu@apache.org" id="OP"/>
  	  <person name="Jeremy Quinn" email="jeremy@apache.org" id="JQ"/>
  	  <person name="Gianugo Rabellino" email="gianugo@apache.org" id="GR"/>
  	  <person name="Ricardo Rocha" email="ricardo@apache.org" id="RR"/>
  	  <person name="Peter Royal" email="proyal@apache.org" id=""/>
  	  <person name="Paul Russell" email="prussell@apache.org" id="PR"/>
  	  <person name="Sam Ruby" email="rubys@apache.org" id=""/>
  	  <person name="Sebastien Sahuc" email="ssahuc@apache.org" id=""/>
  	  <person name="Diana Shannon" email="shannon@apache.org" id="DS"/>
  	  <person name="Davanum Srinivas" email="dims@yahoo.com" id="DM"/>
  	  <person name="Sylvain Wallez" email="sylvain@apache.org" id="SW"/>
  	  <person name="Carsten Ziegeler" email="cziegeler@apache.org" id="CZ"/>
    </developers>
  
    <todo>
  	 <actions priority="high">
  	  <action context="code" assigned-to="open">
  	   For 2.1: Rewrite the FilesystemStore. The current implementations relies on
  	   a correct implementation of the toString() method of the used
  	   keys. A correct version should rely on hashCode() and equals().
  	   (This is actually an Avalon action as the code is in Excalibur)
  	  </action> 
  	
  	  <action context="code" assigned-to="open">
  		For 2.1: Implement the smart-caching for the processing pipeline and
  		iron out bugs.
  	  </action> 
  	
  	  <action context="docs" assigned-to="open">
  	   For 2.1: Attend to any high+ issues in the
  	   <link href="plan/todo-doc.html">Documentation To Do List</link>
  	  </action> 
  	
  	  <action context="code" assigned-to="open">
  	   For 2.1: Correct the sitemap DTD which is now broken and make sitemap validated.
  	  </action> 
  	 
  	  <action context="code" assigned-to="open">
  	   Complete (means put everything we know of into even if it has to be 
  	   commented) the cocoon.xconf file and put descriptions into it
  	  </action>
  	
  	  <action context="code" assigned-to="open">
  	   Complete (means put all allowed constructs and combinations)
  	   the lint/sitemap.xmap file
  	  </action>
  	
  	  <action context="code" assigned-to="SW">
  	   For 2.1: Views must start not from the first encountered label, but from the last one
  	   (see http://marc.theaimsgroup.com/?l=xml-cocoon-dev&amp;m=101784499622172&amp;w=2)
  	  </action>
  	  
  	  <action context="code" assigned-to="NKB">
  	   For 2.1: Make comprehensive samples with the handle-errors sitemap and real world
  	   use cases. Add also specific Selector and a FaqBuilder to be used by the
  	   as a NotifyingBuilder.
  	  </action>  
  	  
  	  <action context="code" assigned-to="NKB">
  	   For 2.1: Make all the samples in WIP (Work In Progress) work again, and finish refactoring.
  	  </action>
  		
  	 </actions>
  	
  	 <actions priority="medium">
  	 
  	  <action context="code">
  	   Remove all useless blank strings in XSP-generated code that hinder performances.
  	   This should be configurable (through an attribute?) to be able to keep them when
  	   needed.
  	  </action>
  	
  	  <action context="code">
  	   For 2.1: Make a guide on how to upgrade Cocoon,and see how this can be eased.
  	  </action>
  	
  	  <action context="code">
  	   For 2.1: Check how to handle the mixing of output streams when an error inside
  	   a pipeline occurs. When the pipeline has something written to the
  	   output stream and then an error occurs the result is the first written
  	   part with the appended exception.
  	   One solution could be a configurable intermediate output stream.
  	  </action>
  	
  	  <action context="code">
  	   For 2.1: Redesign FragmentExtractorGenerator/Transformer so that it works on a clustered
  	   server : store fragments in the session rather than in a local store. <br/>
  	   Additionnaly, store the fragments using the XMLCompiler instead of building a DOM.
  	  </action>
  	 </actions>
    </todo>
  
    <changes>
  	 <release version="@version@" date="@date@">
  	  <action dev="CZ" type="fix" fixes-bug="14466" due-to="Luca Morandini" due-to-email="lmorandini@ieee.org">
  	   Fixing namespace handling of SQLTransformer.
  	  </action>
  	  <action dev="SW" type="add">
  		New ZipArchiveSerializer to build zip files aggregating various sources
  		as archive entries. Can be used to generate zip files, sxw files (OpenOffice),
  		jar files, etc.
  	  </action>
  	  <action dev="VG" type="update">
  		TraxTransformer does not have use-deli parameter anymore. If deli is
  		configured in the cocoon.xconf, it always will be used.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="13648" due-to="Geoff Howard" due-to-email="javageoff@yahoo.com">
  		CocoonServlet upload behavior now configurable from the web.xml.
  		Configuration parameters are: autosave-uploads, overwrite-uploads,
  		upload-max-size. See web.xml for description.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="13643" due-to="Leo Sutic" due-to-email="leo.sutic@inspireinfrastructure.com">
  		Remove the static factory variable in RequestFactory, and instead 
  		pass it to the HttpRequest via the environment.
  	  </action>
  	  <action dev="VG" type="update">
  		ReadDOMSessionTransformer now can work with any types of object
  		(same mechanism as in &lt;xsp:expr&gt; now used). Configuration
  		parameter dom-name renamed to attribute-name.
  	  </action>
  	  <action dev="VG" type="update">
  		Src attribute can be used now with SessionAttributeGenerator to specify
  		session attribute name. Old syntax preserved.
  	  </action>
  	  <action dev="VG" type="update">
  		Local parameters in SessionStateAction still do override global parameters,
  		but do NOT change global parameters.
  	  </action>
  	  <action dev="VG" type="update">
  		Src attribute can be used now with ResourceExistsAction. Old parameter
  		syntax preserved.
  	  </action>
  	  <action dev="CZ" type="fix">
  		Fixed prefix mapping for the sql transformer.
  	  </action>
  	  <action dev="VG" type="update">
  		FOP user configuration can now be specified as URL or relative path
  		as the value of the &lt;user-config&gt; element.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="6533">
  		Load default FOP configuration only once, do not overwrite any user
  		configuration.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="11856" due-to="Stefan Seifert" due-to-email="sseifert@pro-vision.de">
  		Remove unnessesary code in SVGBuilder. This also fixes intermittent
  		ClassCastExceptions in Batik code.
  	  </action>
  	  <action dev="VG" type="fix">
  		Fix issue with cross-platform uploads. Uploaded file's name converted
  		to match destination platform's path separator.
  	  </action>
  	  <action dev="VG" type="update" fixes-bug="12131">
  		Absolute path now can be specified for work, cache, and upload directory.
  		Read comments in web.xml, and verify your settings.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="12328">
  		Set URI resolver for XSLT handler every time time templates are used,
  		because XSLT templates might reference disposed instance of XSLT processor.
  		Fixes some NPEs in XSLT processor when templates cache is used.
  	  </action>
  	  <action dev="VG" type="fix">
  		Fix sitemap reloading bug: When parent sitemap is modified, it is
  		recompiled and reloaded. All sub-sitemaps of this sitemap also has
  		to be reloaded because they have references to the parent sitemap's
  		ComponentSelectors. This bug is the cause of some NPEs in the XSLT
  		processor.
  	  </action>
  	  <action dev="VG" type="update" fixes-bug="11401">
  		Improve backward compatibility: FilePartFile needs toString() method to
  		work with code written for Cocoon 2.0.
  	  </action>
  	  <action dev="SW" type="fix">
  		AbstractServerPages used static fields for dependency tracking, which caused
  		either non-modified XSPs to be recompiled, or modified XSPs not to be recompiled.
  	  </action>
  	  <action dev="VG" type="update">
  		SearchGenerator now includes &lt;field name=""/&gt; elements into &lt;hit/&gt;
  		element. These elements contain stored fields of a found Document,
  		making it possible to provide additional info about document in the
  		search result list (only when index created with some stored fields).
  	  </action>
  	  <action dev="VG" type="update">
  		In addition to attributes in same namespace with elements,
  		link serializer reacts on non-namespaced attributes too. This allows
  		processing of (strict) XHTML.
  	  </action>
  	  <action dev="CH" type="add">
  	   Backport usage of InputModules to compiled sitemap.
  	  </action>
  	  <action dev="CH" type="update">
  	   Sync modules and related components with HEAD.
  	  </action>
  	  <action dev="CH" type="add">
  	   Added some more types understood by modular database actions.
  	  </action>
  	  <action dev="CH" type="fix">
  	   Request logicsheet: Fix session tags.
  	  </action>
  	  <action dev="CH" type="add">
  	   Added some more InputModules.
  	  </action>
  	  <action dev="CH" type="update">
  	   Changed existing OutputModules to not use ":" to separate key prefix from
  	   suffix if prefix is an empty string.
  	  </action>
  	  <action dev="CH" type="add">
  	   Simple Formvalidation: FormValidatorAction sets attribute "*" to indicate
  	   overall validation status. Added SimpleFormTransformer that fills XHTML form
  	   fields with values from request parameters and allows conditional error tags
  	   depending on validation result. This removes the requirement for
  	   XSP. Changed ordering of error levels: "notpresent" (indicates that no
  	   validation result is present for this parameter) moves between "ok" and
  	   "error". New error level "maxerror" used in conjunction with the
  	   transformer, is never set, used as upper bound.
  	  </action>
  	  <action dev="CH" type="fix">
  	   (Modular) DatabaseActions: select produced wrong result if no rows were
  	   found, query action returned broken result.
  	  </action>
  	  <action dev="CH" type="update">
  	   ESQL: Allow arbitrary types for prepared and callable statements via
  	   dynamically loading classes like the SQLTransformer does. Is-null now uses
  	   dynamic colum specification. Fixed skip-row feature, which was off by one.
  	   Added tag to get connection meta data.
  	  </action>
  	  <action dev="CZ" type="fix">
  		Fixed NPE in the recycling phase of content aggregation.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="9288">
  		Fixed bug in cocoon pseudo protocol involving aggregation of aggregated
  		resources spanning several sitemaps.
  	  </action>
  	  <action dev="VG" type="fix">
  		Conect to the XML:DB once, from the XMLDBSourceFactory.
  	  </action>
  	  <action dev="VG" type="fix">
  		&lt;xsp-util:include-expr/&gt; includes any object, converting it to string.
  	  </action>
  	  <action dev="VG" type="update">
  		XSP now verifies that value of attribute name on xsp:element does not
  		contains ':'. To create namespaced elements, uri and prefix attributes
  		must be used.
  	  </action>
  	  <action dev="VG" type="fix">
  		Request, response, and session logicsheet were incorrectly returning
  		result when as="xml" is specified.
  	  </action>
  	  <action dev="VG" type="update">
  		XScript now has better variable management: variables of request,
  		session, global, and page scope are stored not in the XScriptManager,
  		but as request, session, context attributes, or as XSP page field
  		(respectively). Chances of memory leaks are highly reduced.
  	  </action>
  	  <action dev="VG" type="fix">
  		Include all warnings and errors reported by the XSLT engine into the
  		TransformerException if transformation fails or terminated by the
  		stylesheet.
  	  </action>
  	  <action dev="VG" type="update">
  		Update HSQLDB to version 1.7.0. Now it properly shuts down with Cocoon.
  	  </action>
  	  <action dev="CZ" type="update">
  		All log messages from FOP now go into the logs instead of printing them to the screen.
  	  </action>
  	  <action dev="CZ" type="fix" fixes-bug="10254" due-to="Stuart Roebuck" due-to-email="stuart.roebuck@adolos.co.uk ">
  	   Applied patch for MaybeUploadRequestFactoryImpl which sets the timeout for a session to
  	   infinite during an upload and restores it afterwards.
  	  </action>
  	 </release>
  	 <release version="2.0.3" date="July 15 2002">
  	  <action dev="CZ" type="add">
  	   When Cocoon is built, the build system automatically detects the current jvm and builds
  	   a target for this virtual machine. This is eiter JVM 1.4 or JVM 1.2 upto 1.3.
  	  </action>
  	  <action dev="KP" type="fix">
  	   Fixed current page indication in documentation menu (synced with HEAD).
  	  </action>
  	  <action dev="KP" type="update">
  	   Internationalization and JSP samples are refactored.
  	  </action>
  	  <action dev="CZ" type="add" fixes-bug="10505" due-to="Stuart Roebuck" due-to-email="stuart.roebuck@adolos.co.uk">
  	   When building Cocoon it is required to set the targetted JVM (either 1.3 (means 1.3 or lower) or 1.4.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="10311" due-to="Joachim Piketz" due-to-email="pik@uniquare.com">
  	   Fixed NullPointerException in Notifier.
  	  </action>
  	  <action dev="CH" type="update">
  	   Multiple results seem not to be supported by some DBMSs (i.e. Oracle and
  	   Informix). Therefore this is made optional in ESQL. A new parameter
  	   (esql:allow-multiple-results) to esql:connection re-enables it. See
  	   EsqlConnection for details.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="9693" due-to="Vladimir Kralik" due-to-email="vladimir.kralik@asset.sk">
  	   Properly escape (national) characters included in element's attributes
  	   in XSP page.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="6934">
  	   Add connect-attempts and connect-waittime parameters to the SQLTransformer.
  	   Transformer tries to get a connection to the DB several times before
  	   returning an error.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="8658" due-to="Michael Melhem" due-to-email="michaelm@fztig938.bank.dresdner.net">
  	   Fixed sitemap compilation error when matchers are used within view or
  	   resource.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="8509" due-to="Michael Melhem" due-to-email="michaelm@fztig938.bank.dresdner.net">
  	   Fixed sitemap compilation error when actions are used within view.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="3782">
  	   TraxTransformer and XSLTProcessor components now correctly handle
  	   dependecies on imported (via xsl:include) XSLT stylesheets.
  	  </action>
  	  <action dev="NKB" type="fix">
  		Removed Java 1.3+ only method (URL.getPath()) from LinkStatusGenerator.
  	  </action>     
  	  <action dev="SW" type="update">
  	   CocoonServlet no longer builds its own classloader. Also, it no more sets the thread's context
  	   classloader unless the "init-classloader" parameter is true. To have Cocoon use its own classloader,
  	   use the ParanoidCocoonServlet.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="9539" due-to="Stuart Roebuck" due-to-email="stuart.roebuck@adolos.co.uk">
  	   ResourceReader incorrectly advertised byte ranges support.
  	  </action>
  	  <action dev="NKB" type="add">
  		Added a "handle-exceptions" init argument in web.xml, used by CocoonServlet for the exceptions
  		that the core Cocoon class throws.
  		If true or not set, this class will try to catch and handle all Cocoon exceptions.
  		If false, it will rethrow them to the servlet container.
  	  </action> 
  	  <action dev="NKB" type="fix">
  		Changed the Notifier notify() methods to accept a mimetype instead of returning it.
  		There is no way in which this method could understand what mime/type to use from the
  		notification info and the stream.
  		It was added to the method using a ContentHandler, since it could output svg for example.
  		The old methods were deprecated. 
  	  </action> 
  	  <action dev="NKB" type="fix" due-to="J.Pietschmann" due-to-email="j3322ptm@yahoo.de">
  		Fixed error reporting in CocoonServlet: stream is now closed at the end of the service method,
  		the content-type is sent before sending the error and the notification messages are now more
  		descriptive.
  	  </action> 
  	  <action dev="VG" type="fix" fixes-bug="8639">
  	   Support Parameterizable URLFactories.
  	  </action>
  	  <action dev="GF" type="fix" fixes-bug="9064" due-to="Jeroen ter Voorde" due-to-email="j.tervoorde@home.nl">
  		Fixed multipart request problems with IE6.
  	  </action> 
  	  <action dev="VG" type="fix" fixes-bug="3372">
  	   Added ability to run Cocoon on Novell OS.
  	  </action>
  	  <action dev="SM" type="add">
  	   Make the multipart/form-data parser aware of the encoding used by the 
  	   processed request.
  	  </action>
  	  <action dev="SM" type="add">
  	   Added support for StreamGenerator to read from 'multipart/form-data' as well.
  	  </action>
  	  <action dev="DC" type="add">
  	   Started new documents for
  	   <link href="plan/todo-doc.html">Documentation To Do List</link> and
  	   <link href="plan/changes-doc.html">Documentation History of Changes</link>.
  	  </action>
  	  <action dev="GF" type="fix" fixes-bug="8881" due-to="Peter Royal" due-to-email="proyal@apache.org">
  		Fixed NPE in DefaultNotifyingBuilder.
  	  </action>
  	  <action dev="GF" type="fix" fixes-bug="8743" due-to="Michael Enke" due-to-email="michael.enke@wincor-nixdorf.com"> 
  	   Fixed NPE in I18nTransformer.
  	  </action>
  	  <action dev="KP" type="update" due-to="Michael Enke">
  	   i18n transformer changed to use shorter syntax for number formatting. Now 'type' attribute with
  	   'number', 'currency' and 'percent' should be used instead of 'type' and 'sub-type'combination. 
  	  </action>
  	  <action dev="CH" type="add">
  	   New documents on databases and Cocoon, database actions and modules.
  	  </action>
  	  <action dev="CH" type="add">
  	   Additional input modules: Date, Digest, ConstantString, Random, NullInput, Collection
  	  </action>
  	  <action dev="CH" type="fix" due-to="J&#252;rgen Ehms">
  	   Sendmail logicsheet works again.
  	  </action>
  	  <action dev="CH" type="add">
  	   Array support for original form validation and new constraint for strings:
  	   "one-of" lists all allowed values, separated by "|"s. List should start
  	   and end with "|".
  	  </action>
  	  <action dev="CH" type="fix">
  	   Aliases in modular database actions now work correctly. All of them return
  	   the number of affected rows as sitemap variable.
  	  </action>
  	  <action dev="GF" type="add" due-to="Maciek Kaminski" due-to-email="maciejka@tiger.com.pl">
  	   added new Selector component.
  	  </action>
  	  <action dev="GF" type="fix" fixes-bug="6740">
  		Updated commons-httpclient.
  	  </action>
  	  <action dev="CZ" type="fix" fixes-bug="5772">
  		Fixing bug in NetUtils that altered in some cases the link reference in command-line mode.
  	  </action>
  	  <action dev="VG" type="fix">
  		XScript works now (and all XScript SOAP samples).
  	  </action>
  	  <action dev="VG" type="update">
  		XSP engine now correctly processes pages with any encoding.
  	  </action>
  	  <action dev="VG" type="fix">
  		Fixed error (NPE) in AbstractValidatorAction introduced in the 2.0.2.
  	  </action>
  	  <action dev="CZ" type="fix" fixes-bug="7510" due-to="Jeroen ter Voorde" due-to-email="j.tervoorde@home.nl">
  		Fixing ClassCastException when a multipart/form-data form is posted.
  	  </action>
  	  <action dev="CZ" type="update">
  		Rewrote SQLTransformer and added capability to store/fetch XML.
  	  </action>
  	  <action dev="CZ" type="add">
  		Added AbstractSAXTransformer for much easier implementation of custom
  		transformers.
  	  </action>
  	  <action dev="SW" type="add">
  		Handle request forwarding (aka internal redirects) using the "cocoon:"
  		pseudo-protocol : writing &lt;map:redirect-to uri="cocoon:/foo.bar"/&gt; makes
  		a recursive call on the current sitemap without going back to the browser
  		(as usual, "cocoon://foo.bar" uses the root sitemap). This also keeps any data
  		that have been stored as request attributes.
  	
  		Note: this is only available in the interpreted sitemap engine for now, and
  		will come soon on the compiled engine.
  	  </action>
  	  <action dev="NKB" type="fix" fixes-bug="7251" due-to="Marcus Crafter" due-to-email="crafterm@fztig938.bank.dresdner.net">
  		Small optimization to XConfTool to check if the file is actually
  		an XConfTool file.
  	  </action>
  	  <action dev="NKB" type="add">
  		Added LinkStatusGenerator donated by Michael Homeijer and accompanying sample
  		sitemap to scratchpad.
  	  </action>
  	  <action dev="NKB" type="update">
  		Moved castor scratchpad sample from /samples to /mount as other samples.
  		Now the refactored sample page points to the mount dir, thus
  		showing available scratchpad components to test.
  	  </action>
  	  <action dev="NKB" type="update">
  		When including the scratchpad libs in the build, 
  		all the scratchpad samples are copied too.
  	  </action>
  	 </release>
  	 <release version="2.0.2" date="March 26 2002">
  	   <action dev="SW" type="add">
  		New BootstrapServlet to allow Cocoon to run in non-compliant servlet
  		engines that don't handle correctly servlet contexts. This servlet
  		builds a class loader with the contents of WEB-INF/classes and
  		WEB-INF/lib and manages resource resolution.
  	   </action>
  	   <action dev="NKB" type="update">
  		Updated error reporting to add line, column and location
  		attributes specified in SAXException and 
  		TransformerException.
  		The error page in the webapp examples shows the new
  		extra info.
  	  </action>
  	  <action dev="NKB" type="add">
  		Added new "gump" target to the build, to be used as a general
  		test of Cocoon code. To be used by Gump.
  		It calls docs, javadocs, test and package.  
  		Gump descriptor has been modified to use it;
  		now we also have automatic javadoc creation.
  	  </action>
  	  <action dev="NKB" type="update">
  		cocoon.xconf is moved in WEB-INF for security reasons. 
  		The documentation has been updated to reflect the change.
  	  </action>
  	  <action dev="NKB" type="update">
  	   Partial commit of new samples structure.
  	   Samples go in samples/ dir with their own sitemap.
  	   All scratchpad samples that are in the samples/ subdir are 
  	   copied in webapp samples automatically by installscratchpadwar 
  	   target.  
  	  </action>
  	  <action dev="SW" type="update">
  	   New "set-content-length" configuration for FOPSerializer to allow
  	   streaming of large PDFs (default is true for backwards compatibility).
  	  </action>
  	  <action dev="NKB" type="update">
  	   The docs now have svg stuff removed and these enhancements: 
  	   menu items are in text,
  	   page title is in text,
  	   pages have new clean style courtesy of Stefano,
  	   added Stefano's explanation on how to write mails,
  	   the docs are generated with the TreeProcessor,
  	   the docs generation uses JispStore.
  	  </action>
  	  <action dev="NKB" type="add">
  		Added new targets:
  		"installwar"  asks for the directory in which to put
  		the war and makes it.
  		"installscratchpadwar"  does the same but incudes
  		scratchpad libs ans samples.
  	  </action>  
  	  <action dev="NKB" type="add">
  	   New POI HSSF Serializer; outputs to the .xls (not .xsl) file format.
  	   Added samples as legacy file format support.
  	  </action>
  	  <action dev="CH" type="add">
  	   New module structure for input, output, and database specifica in
  	   scratchpad. Thus it is possible to write generic components for one
  	   task and replace input and output dynamically. As an example a
  	   generic version of a WildcardMatcher is provided as well as a
  	   sample action that uses it. DatabaseActions in scratchpad use this
  	   structure as well.
  	  </action>
  	  <action dev="CH" type="update">
  	   Moved ModularDatabase*Actions to new home in scratchpad and
  	   reworked them. They now use new module structure. For sample
  	   application, copy mod-db directory to cocoon/mount.
  	  </action>
  	  <action dev="CH" type="update">
  	   Changed jdbc datasource to ResourceLimitingJdbcDataSource because
  	   it does not require to be able to contact the datasource on
  	   startup. Thus race condition with HSQLDB startup is eliminated.
  	  </action>
  	  <action dev="VG" type="add">
  	   Added new Jisp based persistence cache, to improve (1) performance and (2)
  	   to solve the problem with long filenames on Windows OS flavours.
  	  </action>  
  	  <action dev="GF" type="add">
  	   Added new Jisp based persistence cache, to improve (1) performance and (2)
  	   to solve the problem with long filenames on Windows OS flavours.
  	  </action>
  	  <action dev="GF" type="update">
  	   Removed explicit System.gc() call from StoreJanitor, because this
  	   caused performance leaks.
  	  </action>
  	  <action dev="TC" type="update">
  	   Added support for input type=image buttons
  	  </action>
  	  <action dev="TC" type="update">
  	   Deprecated the old cocoon-action=ACTION syntax in favor of the new
  	   cocoon-action-[ACTION]=whatever. Still supported though.
  	  </action>
  	  <action dev="BH" type="add">
  	   Added encodeURL transformer for encoding URIs.
  	  </action>
  	  <action dev="CZ" type="update">
  	   Using migrated XPath Processor from Avalon Excalibur instead of own component.
  	  </action>
  	  <action dev="CZ" type="fix">
  	   Fixed endless loop bug in IncludeXMLConsumer.
  	  </action>
  	  <action dev="VG" type="update">
  	   Added &lt;xsp:page create-session=""&gt; attribute now processed correctly,
  	   as described in the xsp-session logicsheet documentation. Variable 'session'
  	   declared and could be used in XSP page code.
  	  </action>
  	  <action dev="SW" type="add">
  	   New implementation of the sitemap engine based on an evaluation tree. This provides
  	   super-fast load times (no more compilation), and a slight gain in request processing
  	   speed compared to the compiled engine thanks to the HotSpot VM.
  	  </action>
  	  <action dev="VG" type="add">
  	   Added matchers: HeaderMatcher, ParameterMatcher.
  	  </action>
  	  <action dev="VG" type="add" due-to="Matteo Di Giovinazzo" due-to-email="matteodg@infinito.it">
  	   Added CookieSelector.
  	  </action>
  	  <action dev="VG" type="add" due-to="Maciek Kaminski" due-to-email="maciejka@tiger.com.pl">
  	   Added CookieMatcher.
  	  </action>
  	  <action dev="VG" type="add">
  	   Request, response, and session XSP logicsheets in Javascript language are added.
  	  </action>
  	  <action dev="SM" type="add" due-to="Andreas Hartmann" due-to-email="ah@cocooncenter.de">
  	   Added Cocoon link page.
  	  </action>
  	  <action dev="SM" type="add" due-to="Maxim Dominichenko" due-to-email="max@magic.kiev.ua">
  	   Added 'cocoon.ico'.
  	  </action>
  	  <action dev="SM" type="update">
  	   Cleaned up documentation and refactored it a little.
  	  </action>
  	  <action dev="GR" type="fix">
  	   Started to clean up the XML:DB stuff. The XML:DB generators have been
  	   deprecated, and a note has been written in the docs suggesting to switch
  	   to the XML:DB pseudo-protocol. Configurations have been switched from dbXML
  	   to Xindice.
  	  </action>
  	  <action dev="SW" type="add">
  	   New WriteableSource interface that extends Source. Just as Source for reading,
  	   it allows to transparently write to various destinations. The first implementation
  	   is FileSource to write to files.
  	  </action>
  	  <action dev="JQ" type="add">
  	   Added FileWritingTransformer and sample file editor to scratchpad.
  	  </action>
  	  <action dev="CZ" type="fix">
  	   Fixed some bugs in the file URI resolving on windows plattforms.
  	  </action>
  	  <action dev="CZ" type="update">
  	   Using migrated entity resolver from Avalon Excalibur instead of own component.
  	  </action>
  	  <action dev="VG" type="add">
  	   Javascript language now supported by the XSP pages. Samples of Javascript
  	   XSP pages are added.
  	  </action>
  	  <action dev="CZ" type="update">
  	   Using migrated XML Parser from Avalon Excalibur instead of own component.
  	  </action>
  	  <action dev="CZ" type="update">
  	   Added subprotocol "raw" to the cocoon: protocol. When the subprotocol is
  	   appended, the request parameters of the original request are not
  	   forwarded to the internal pipelines. Suggested by 
  	   Michael Hartle [mhartle@hartle-klug.com].
  	  </action>
  	  <action dev="VG" type="add">
  		Added Pizza Java compiler as another alternative to Sun javac and Jikes.
  	  </action>
  	  <action dev="VG" type="update">
  		ProgramLanguage is decoupled now from the languages compiled into Java.
  		Instead of Class object representing a program, Program interface has
  		been introduced.
  	  </action>
  	  <action dev="VG" type="fix">
  		Text located in XSP language logicsheets now properly quoted.
  	  </action>
  	  <action dev="CZ" type="fix" fixes-bug="6242">
  	   SQL Transformer did enter Infinite Loop. This is fixed now.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="4117">
  		Sitemap engine verifies that root element is the &lt;sitemap&gt; element
  		in the 'http://apache.org/cocoon/sitemap/1.0' namespace.
  	  </action>
  	  <action dev="VG" type="fix">
  		Move commonalities between sitemap markup language and XSP markup language
  		into CocoonMarkupLanguage.
  	  </action>
  	  <action dev="CZ" type="update">
  		Minor rewrite of the LogTransformer. The logfile is now resolved using
  		the standard source resolver. The component is now recycled properly.
  	  </action>
  	  <action dev="CZ" type="update">
  		Minor rewrite of the SQLTransformer. Removed several parameters tests
  		and the use of Properties objects - instead the Parameters object
  		is used directly.
  	  </action>
  	  <action dev="VG" type="update" due-to="Konstantin Piroumian" due-to-email="KPiroumian@flagship.ru">
  		Action LangSelect has been deprecated in favor of LocaleAction.
  	  </action>
  	  <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.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="4117">
  		XSP engine verifies that root element is the &lt;page&gt; element in the
  		'http://apache.org/xsp' namespace.
  	  </action>
  	  <action dev="VG" type="fix">
  		Markup language logicsheets in general and XSP logicsheets in particular
  		are now looked up by their namespace URI, not prefix.
  	  </action>
  	  <action dev="VG" type="update">
  		xsp-request and xsp-response logicsheets got more tags, and now are
  		(almost) backward compatible with the logicsheets in Cocoon 1.8.
  	  </action>
  	  <action dev="VG" type="update">
  		Cache relies on two types of store components: (1) transient cache, 
  		with cache-transient shorthand, and (2) persistent cache, with 
  		cache-persistent shorthand.
  	  </action>
  	  <action dev="VG" type="update">
  		FilesystemStore (used as programs repository) now is created as all other
  		components from the cocoon.xconf, and can be configured to use working
  		directory, cache directory, or any other directory.
  	  </action>
  	  <action dev="SW" type="update">
  		Calling getInputStream() on a "cocoon:" source now returns the same output
  		as an external call instead of always using an XML serializer.
  		This also allows to get internally data produced by a Reader.
  	  </action>
  	  <action dev="VG" type="fix">
  		Fixed memory leaks in XScript engine. Fixed global and session scope
  		variables: now they are shared between XScript pages as it should be.
  		Page scope variables now visible for all instances of the same page.
  	  </action>
  	  <action dev="VG" type="add">
  		Added size() method to the Store interface.
  	  </action>
  	  <action dev="GP" type="fix">
  		Prevent PostInputStream from looping if the available() method of the base 
  		InputStream is returning 0.
  	  </action>
  	  <action dev="VG" type="add">
  		Added X-Cocoon-Version header to all responses generated by Cocoon.
  	  </action>
  	  <action dev="VG" type="update">
  		SystemID for cocoon: pseudo-protocol URIs changed from the form of
  		&lt;schema&gt;:\\&lt;host&gt;:&lt;port&gt;\path\to\resource\from\the\root\sitemap
  		to the form cocoon:\\path\to\resource\from\the\root\sitemap. This provides
  		portability for compiled resources generated from the cocoon: sources.
  	  </action>
  	  <action dev="CH" type="add">
  		Stored Procedure support for esql plus ability to obtain and use a result
  		set from any column just like a nested query.
  	  </action>
  	 </release>
  	 <release version="2.0.1" date="January 31, 2002">
  	  <action dev="SW" type="update" due-to="Stephan Michels" due-to-email="stephan@vern.chem.tu-berlin.de">
  		The FragmentExtractorTransformer is now configurable to extract any fragment
  		identified by an element name and namespace URI, and no more limited to
  		SVG images only.
  	  </action>
  	  <action dev="VG" type="fix">
  		XSP engine now correctly works with dynamically generated sources
  		with last modification date of 0, and it is correctly reloaded on Cocoon
  		reload.
  	  </action>
  	  <action dev="VG" type="update">
  		Logicsheets are resolved using instance of url factory source resolver 
  		(URLFactorySourceResolver), and not the current request resolver (which
  		is temporary object).
  	  </action>
  	  <action dev="VG" type="update">
  		Improve Lucene indexing. Only one Lucene document is created for one 
  		Cocoon resource. Document consists from 'body' field with all the text,
  		'element' field for every &lt;element&gt;, and 'element@attribute' for 
  		every attribute of the &lt;element&gt;.
  	  </action>
  	  <action dev="GF" type="fix">
  	   Fixed performance issues in the Store implementation:
  	   (1) removed the FilesystemQueueImpl, one thread less now, (2) changed swapping 
  	   alghorithm in the MRUMemoryStore towards less serialization, (3) Cache entries
  	   will be saved to the filesystem, when the System is shutdown cleanly, (4) fixed
  	   bug submitted by Peter Hargreaves [pdh@totalise.co.uk] in StoreJanitor
  	   (GC hangs in endless loop).
  	  </action>
  	  <action dev="VG" type="update">
  		Serializers do not write namespace attributes for prefixes starting with
  		xml anymore (these are reserved by XML spec).
  	  </action>
  	  <action dev="GF" type="update">
  	   Removed Event Cache and Stream Cache. For all possible Caching Piplines there
  	   is only one Store implementation behind.
  	  </action>
  	  <action dev="GF" type="update">
  	   Added new log targets. (1) access.log, (2) core.log, (3) error.log and
  	   (4) sitemap.log.
  	  </action>
  	  <action dev="VG" type="update">
  		Perform substitution in the sitemap only when it is required (improves
  		performace).
  	  </action>
  	  <action dev="VG" type="add">
  		Additions to sitemap syntax: (1) allow all elements at root level, not 
  		only matchers, (2) perform some validation checks, (3) perform attribute
  		substitution on all attributes except @type and @label.
  	  </action>
  	  <action dev="DC" type="add">
  		Added &quot;List of Docs&quot; which automatically generates a list
  		of all Cocoon documentation by aggregating each xdocs/**/book.xml
  	  </action>
  	  <action dev="DC" type="fix" fixes-bug="5060">
  		The Catalog Entity Resolver is now fully operational on all platforms
  		in both the webapp context and the commandline context of build docs.
  		The verbosity level is now set low - if you want to see messages, then
  		raise the verbosity via cocoon.xconf or CatalogManager.properties
  	  </action>
  	  <action dev="CZ" type="update">
  		Separated the jars into core and optional. For compiling only the
  		core jars are necessary. However, the sample webapp still needs some
  		optional jars.
  	  </action>
  	  <action dev="VG" type="add">
  		Added matchers: 
  		RegexpHeaderMatcher, RegexpRequestAttributeMatcher,
  		RegexpRequestParameterMatcher, RegexpSessionAttributeMatcher,
  		RequestAttributeMatcher, SessionAttributeMatcher,
  		WildcardHostMatcher, WildcardRequestAttributeMatcher.
  	  </action>
  	  <action dev="BL" type="fix" fixes-bug="5791">
  		Address issue about how RegexpURIMatcher matches the "" pattern.
  		Because it is so different from WildcardURIMatcher, the "" pattern
  		is rewritten as "^$" which matches an empty string.  The event is
  		logged, along with the hint that if you really want to match
  		everything, the pattern ".*" works as advertised.
  	  </action>
  	  <action dev="BL" type="update">
  		Fix command line generation so that a broken link was not a fatal
  		error, and processing will continue after the link is reported as
  		bad.
  	  </action>
  	  <action dev="BL" type="add">
  		Add ability to serialize all broken links to a file when running in
  		command line mode.  This helps debug sites.
  	  </action>
  	  <action dev="VG" type="update">
  		Rename some of the matchers/serializers (new added, old deprecated):
  		RequestSelector to RequestParameterSelector,
  		RequestParamMatcher to RequestParameterMatcher,
  		WildcardParameterValueMatcher to WildcardRequestParameterMatcher,
  		RegexpTargetHostMatcher to RegexpHostMatcher.
  	  </action>
  	  <action dev="VG" type="update">
  		Wap serializer renamed to wml serializer in the sitemap shipped with
  		Cocoon, to be consistent with the names of other serializers.
  	  </action>
  	  <action dev="CZ" type="update">
  		FilterTransformer is now Cacheable.
  	  </action>
  	  <action dev="CZ" type="update">
  		Added CACHE_VALIDITY singleton object to NOPCacheValidity and changed all
  		components to use constant instead of creating new instances each time.
  	  </action>
  	  <action dev="VG" type="fix">
  		Fix lifecycle related bugs in i18n transformer. Now transformers handles
  		only lifecycle of resource bundle factory, which handles lifecycle of all
  		resource bundles.
  	  </action>
  	  <action dev="CZ" type="add">
  		Added special lifecycle interface for Cocoon components: RequestLifecycle.   
  		A component marked by this interface has the lifecycle of one request,
  		so looking up the role twice during the same request results in the same
  		component.
  	  </action>
  	  <action dev="SW" type="update">
  		The "namespace-prefixes" feature is no more set on parsers. It can be set if
  		needed in the configuration.
  	  </action>
  	  <action dev="VG" type="add">
  		Added ability to use XPath expressions to query XML:DB collections using
  		XML:DB pseudo protocol. URL should be in form:
  		xmldb:dbxml://host:port/db/collection/#/xpath
  	  </action>
  	  <action dev="VG" type="add">
  		Enabled XML:DB support (generators and pseudo protocol) by default.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="4239">
  		JSPEngine returns result in UTF-8 charset.
  	  </action>
  	  <action dev="CH" type="add">
  		Changed invokation syntax of sitemap resources. Now &lt;call resource/&gt;
  		is used instead of &lt;redirect-to resource/&gt;. Affects only resources,
  		other redirections still use "old" syntax. New syntax does not take "target"
  		attribute but allows to set arbitrary parameters by using
  		&lt;map-parameter/&gt; Always creates new map while old syntax only did
  		when "target" was present. Old syntax still available but deprecated.
  	  </action>
  	  <action dev="VG" type="fix" due-to="Eisert, Wolfram" due-to-email="Wolfram.Eisert@Dresdner-Bank.com">
  		XSP page were called twice if used as a source of XSLT stylesheet due to multiple calls to 
  		Source.getInputSource() in XSLProcessorImpl.
  	  </action>
  	  <action dev="VG" type="update">
  		Changed default upload directory from "image-dir" to "upload-dir".
  	  </action>
  	  <action dev="VG" type="add" due-to="MIYABE Tatsuhiko" due-to-email="miyabe@jzf.co.jp">
  		RequestGenerator accepts container-encoding and form-encoding parameters.
  	  </action>
  	  <action dev="CZ" type="update">
  		Added support for configurable URLFactories.
  	  </action>
  	  <action dev="SW" type="fix">
  		Made the cache work again by updating cocoon.roles, sitemap.roles and making EventPipeline
  		and StreamPipeline implement Recomposable instead of just Composable.
  	  </action>
  	  <action dev="GR" type="add">
  		Added the XML:DB pseudo protocol
  	  </action>
  	  <action dev="SW" type="add">
  		Status generator outputs a detailed description of what's in the cache. Patch submitted by
  		Sebastien Koechlin [skoechlin@ivision.fr]
  	  </action>
  	  <action dev="CZ" type="update">
  		Applied patch adding advanced error handling to SQLTransformer plus escape-string element
  		from Peter Seiderer [Peter.Seiderer@ciselant.de]
  	  </action>
  	  <action dev="CZ" type="update">
  		The JaxpParser is now poolable and configurable.
  	  </action>
  	  <action dev="SW" type="update">
  		The sitemap engine is now a regular component available through Processor.ROLE. This allows
  		alternative implementations of Processors (e.g. interpreted sitemap, flowmap, statemap) to
  		be plugged through cocoon.xconf. Note : to ensure compatibility with existing cocoon.xconf
  		files, the shorthand for the Processor role is "sitemap".
  	  </action>
  	  <action dev="CZ" type="update">
  		Added support for configurable SourceFactories.
  		Patch submitted by Gianugo Rabellino [gianugo@rabellino.it].
  	  </action>
  	  <action dev="CZ" type="add">
  		Added RTF serialization of XSL-FO documents (requires jfor).
  		Patch submitted by Bertrand Delacretaz [bdelacretaz@codeconsult.ch].
  		Applied patch for the SQLTransformer to output namespaces for the
  		generated elements. Patch submitted by Per-Olof Nor&eacute;n [pelle@alma.nu].
  	  </action>
  	  <action dev="SW" type="add">
  	   New ServerPagesAction and associated "action" and "capture" logicsheets
  	   that allow actions to be written in XSP and parts of the generated XML
  	   to be captured in XMLFragment or DOM objects.
  	  </action>
  	 </release>
  	 <release version="2.0" date="November 29, 2001">
  	  <action dev="CZ" type="update">
  		Restructured build system. A new ant task (SitemapToolTask) adds entries
  		of optional components to the sitemap. Warnings for not available
  		optional components are printed out.
  	  </action>
  	  <action dev="GP" type="update">
  		Made the concept of views work as proposed in the original proposal. There
  		is now the possibility to attach a label attribute with multiple values separated
  		by blanks or commas to the following elements: map:generator, map:transformer,
  		map:generate, map:transform, map:aggregate and map:part.
  	  </action>
  	  <action dev="CZ" type="update">
  		Applied patch for session-info for TraxTransformer from J&ouml;rn Heid
  		[heid@fh-heilbronn.de].
  	  </action>
  	  <action dev="CZ" type="update">
  		Applied patch for the SQLTransformer to output namespaces for the
  		generated elements. Patch submitted by Per-Olof Nor&eacute;n [pelle@alma.nu].
  	  </action>
  	  <action dev="OP" type="update">
  		Applied patch for incremental XSLT processing from J&ouml;rn Heid
  		[heid@fh-heilbronn.de].
  	  </action>
  	 </release>
  	 <release version="2.0rc2" date="November 7, 2001">
  	  <action dev="SW" type="add">
  		Deprecation of CodeFactory in preparation of the tree traversal implementation of the sitemap.
  		All factory-based matchers have been rewritten using the new PreparableMatcher interface, and
  		all factory-based selectors have been rewritten as regular implementations of Selector.
  		For patterns whose syntax uses '{' like regexp, sitemap substitution can be avoided by escaping the
  		brace character (example : "pat\{2}ern" will match "pattern").
  	  </action>
  	  <action dev="SW" type="fix">
  		Reduce exception nesting in case of sitemap setup errors, and display all nested exceptions
  		in the error page (avoids searching the logs for the failure cause).
  	  </action>
  	  <action dev="SW" type="update">
  		Added attribute management methods to environment Context and its implementations.
  	  </action>
  	  <action dev="SW" type="update">
  		Updated TraxTransformer and XSLTProcessor to allow simultaneous use of several
  		TRAX processors (e.g. xalan and saxon) in a controlled way. 
  	  </action>
  	  <action dev="CZ" type="fix">
  		Updated session handling of commandline interface and fixed
  		parameter handling.
  	  </action>
  	  <action dev="CZ" type="fix">
  		Fixed missing prefix in elements generated by the directory and image
  		directory generator.
  	  </action>
  	  <action dev="CZ" type="fix">
  	   Throw exception for internal requests instead of using the error handler and
  	   fixed component handling in subsitemaps when invoked internally. Components only
  	   defined in a subsitemap were not found as for internal requests the parent
  	   component manager was used.
  	  </action>
  	  <action dev="CZ" type="update">
  		When Cocoon is reloaded, the logkit configuration is now also reloading. 
  		This enables changing the logkit settings during runtime.
  	  </action>
  	  <action dev="CZ" type="update">
  		The documentation build system now uses Cocoon itself to generate the
  		html documentation.
  	  </action>
  	  <action dev="CZ" type="fix">
  		Applied NPE fix in certain conditions in ServerPagesGenerator.
  		Submitted by: Ovidiu Predescu [ovidiu@cup.hp.com] 
  	  </action>
  	  <action dev="CZ" type="fix">
  		Applied NPE fix for MRUMemoryStore Submitted by: Ovidiu Predescu [ovidiu@cup.hp.com] 
  	  </action>
  	  <action dev="CZ" type="fix">
  		Fixed (hopefully) dependency to the http environment in StreamGenerator.
  	  </action>
  	  <action dev="CZ" type="fix">
  		Optional setting of the lexical-handler for XMLReader. This patch allows to use 
  		Crimson instead of Xerces. Submitted by: Ovidiu Predescu [ovidiu@cup.hp.com] 
  	  </action>
  	  <action dev="CZ" type="update">
  		Added xml compiler and interpreter to cocoon.xconf 
  	  </action>
  	  <action dev="CZ" type="fix">
  		Applied Patch for entity catalogs: accept parameters from xconf.
  		Submitted by: David Crossley [crossley@indexgeo.com.au] 
  	  </action>
  	  <action dev="CZ" type="fix">
  		Applied fix for missing "User-Agent" header in BrowserSelectorFactory.
  		Submitted by: Joerg Henne [j.henne@levigo.de] 
  	  </action>
  	  <action dev="CZ" type="fix">
  		Enhanced Command Line Interface by adding background attribute to ExtendedXLinkPipe
  		and fixing bugs: "mailto:" and "news:" are now ignored for traversing and links
  		containing anchors are handled properly
  	  </action>
  	  <action dev="CZ" type="update">
  		Applied patch for default value support for RequestParamAction.
  		Submitted by: Sergio Carvalho [sergio.carvalho@acm.org] 
  	  </action>
  	  <action dev="CZ" type="fix">
  		Applied fix for a bug in the WriteDOMSessionTransformer for handling xml documents
  		with namespaces correctly. Submitted by: Greg Weinger [gweinger@itmedicine.net] 
  	  </action>
  	 </release>
  	 <release version="2.0rc1" date="September 24, 2001">
  	  <action dev="SW" type="add">
  	   New "capture" logicsheet that allows parts of XSP-generated XML to be captured
  	   as XMLFragment or DOM objects.
  	  </action>
  	   <action dev="GP" type="add">
  	   Added LogKit management functionality.
  	  </action>
  	  <action dev="SW" type="add">
  	   Removed ThreadSafe from the Action interfaces : the decision to be ThreadSafe
  	   is left to each implementation. Consequently, existing actions now explictly
  	   implement ThreadSafe.
  	  </action>
  	  <action dev="CZ" type="add">
  	   Redesigned the handling of the cocoon: protocol. Removed the pushURI
  	   and popURI methods. It is now possible to load cocoon: resources
  	   parallel in several tasks.
  	  </action>
  	  <action dev="VG" type="fix" fixes-bug="2737">
  	   Fixed package name generation for subsitemap components and external components.
  	  </action>
  	  <action dev="VG" type="add">
  	   Added ability to specify custom 404 error page for pipelines using
  	   map:handle-errors element with attribute type="404".
  	  </action>
  	  <action dev="VG" type="fix">
  	   Catch NoClassDefFoundError and throw ResourceNotFoundException
  	   if XSP was requested with different case.
  	  </action>
  	  <action dev="SW" type="add">
  	   New log formatter outputs the caller class and request URI in the log file. 
  	  </action>
  	  <action dev="CZ" type="add">
  	   Added patch by Stuart Roebuck (stuart.roebuck@adolos.com)
  	   fixing the byte handling of the ImageDirectoryGenerator.
  	  </action>
  	  <action dev="DM" type="add">
  	   Added capability to resolve external XML entities using an entity resolver.
  	   See the documentation for "Entity Catalogs".
  	  </action>
  	 </release>
  	 <release version="2.0b2" date="July 23, 2001">
  	  <action dev="CZ" type="add">
  		When a resource is not found (ResourceNotFoundException) the
  		servlet sets only the status 404 and doesn't write to the output.    
  	  </action>
  	  <action dev="SW" type="add">
  		In http environment, reset the response if it hasn't been committed
  		before executing the handle-errors pipeline.
  	  </action>
  	  <action dev="CZ" type="add">
  		Added reloading of jar files. When cocoon is reloaded by specifying
  		cocoon-reload parameter, the class-path is new build and used.
  	  </action>
  	  <action dev="CZ" type="add">
  		Added caching of cocoon: urls.
  	  </action>
  	  <action dev="CZ" type="add">
  		Redirects are handled when the cocoon: url points to a redirect in 
  		the sitemaps.
  	  </action>
  	  <action dev="CZ" type="fix">
  		Fixed proper setting of content length for pdf and images.
  	  </action>
  	  <action dev="VG" type="fix">
  		Fixed parsing and reporting of Java compilation errors using Javac
  		and Jikes compilers.
  	  </action>
  	  <action dev="VG" type="add" due-to="John Morrison" due-to-email="John.Morrison@uk.experian.com">
  		Added documentation on libraries used in Cocoon.
  	  </action>
  	  <action dev="CZ" type="add">
  		Redesigned the source handling and added the source handler
  		and source factory components.
  	  </action>
  	  <action dev="CZ" type="add">
  		Added the cocoon: protocol to access pipelines. cocoon:/ resolves
  		to the current sitemap and cocoon:// to the root sitemap.
  	  </action>
  	  <action dev="VG" type="fix">
  		Offline site generation now allows recursive links and
  		works for site of any complexity (limited by capabilities of your
  		filesystem).
  	  </action>
  	  <action dev="CZ" type="add">
  		Removed XInclude/CIncludeSAXConnectors and added LoggingSAXConnector.
  	  </action>
  	  <action dev="CZ" type="add">
  		Added CIncludeTransformer.
  	  </action>
  	  <action dev="BL" type="fix" fixes-bug="2182">
  		Fixed the sub-sitemap issue experienced after a code merge
  		between 2.0 and 2.1
  	  </action>
  	  <action dev="BL" type="add">
  		Added the automatic announcement generation utility from
  		Avalon.
  	  </action>
  	  <action dev="BL" type="fix" fixes-bug="2172">
  		Fixed typo that created an element &lt;xsp-request:get-user/&gt;
  		instead of &lt;xsp-request:get-host/&gt; in XSPRequestHelper.
  	  </action>
  	  <action dev="BL" type="fix" fixes-bug="2166">
  		Made sure the _static_ classes did not inherit from each other,
  		and made all calls to XSPObjectHelper that handled XML elements
  		explicitly call with URI and PREFIX as parameters to the methods.
  	  </action>
  	  <action dev="BL" type="fix" fixes-bug="2142">
  		Applied fix to URLFactoryImpl donated by wangtun@staff.yam.com.
  	  </action>
  	  <action dev="BL" type="add">
  		Added support for fine-grained pool size control for Excalibur Component
  		Architecture.
  	  </action>
  	  <action dev="BL" type="fix">
  		Fixed component release errors in ContentAggregator (thanks to Vadim
  		Gritsenko for the patch).  Also fixed potential race conditions in
  		the ComponentManager architecture in Avalon Excalibur.
  	  </action>
  	  <action dev="GP" type="add">
  	   Integrated new StreamGenerator from Kinga Dziembowski &lt;kingadziembowska@msn.com&gt;
  	   Documentation is available in the webapp/docs/samples/stream/ReadMeAdd.txt (not yet converted to xdocs)
  	  </action>
  	  <action dev="CZ" type="update">
  	   Fixed ClassCastException in CommandLineEnvironment.
  	   Added Redirector interface to the CommandLineEnvironment to avoid class cast exceptions
  	  </action>
  	  <action dev="CZ" type="update">
  	   Fixed NPE in browser detection.
  	   Applied patch to the BrowserImpl. from Ovidiu Predescu (ovidiu@cup.hp.com). It
  	   fixes a NPE if the browser is not described.
  	  </action>
  	  <action dev="CZ" type="update">
  	   The TraxTransformer resolves now the uri used inside a stylesheet (e.g. xsl:include).
  	   Applied the patch from Rick Tessner (rick@myra.com).
  	  </action>
  	  <action dev="CZ" type="update">
  	   SQLTransformer is now recycled properly.
  	   Applied patch from Ovidiu Predescu (ovidiu@cup.hp.com).
  	  </action>
  	 </release>
  	 <release version="Cocoon 2.0b1" date="June 7, 2001">
  	  <action dev="CZ" type="update">
  	   Removed setContentHandler and setLexicalHandler from the XMLProducer interface.
  	  </action>
  	  <action dev="CZ" type="add">
  	   The sitemap components now use the new SourceResolver to resolve
  	   resources instead of the old EntityResolver approach.
  	  </action>
  	  <action dev="GP" type="add">
  	   Added a internal-only attribute to the map:pipeline element to protect them
  	   from being accessed by normal user request. The only way to access them by
  	   use of the src attribute of the map:part element or the xinclude:href of
  	   the XIncludeSAXConnector which implements transparent xinclude capability
  	  </action>
  	  <action dev="GP" type="add">
  	   Added a prefix attribute to both map:aggregate and map:part to have a
  	   namespace prefix available.
  	  </action>
  	  <action dev="GP" type="add">
  	   Added an optional strip-root attribute to the map:part element of the
  	   map:aggregate element to indicate that the aggregator should strip off
  	   the root element of the aggregated content. The values can be "yes" or "true"
  	   to strip off and anything else to not.
  	  </action>
  	  <action dev="GP" type="update">
  	   Made element attribute of map:part element in map:aggregate element optional
  	  </action>
  	  <action dev="GP" type="add">
  	   Also added substitution for test/pattern attribute.
  	  </action>
  	  <action dev="GP" type="add">
  	   Implementation of content aggregation at sitemap level.
  	  </action>
  	  <action dev="GP" type="add">
  	   Enable a parallel calling path into the sitemap for internal requests
  	   of resource.
  	  </action>
  	  <action dev="GP" type="fix">
  	   Added missing methods on CommandLineRequest.
  	  </action>
  	  <action dev="CZ" type="update">
  	   Finished cleanup of the environment. We are now as independant of
  	   the javax.servlet package as possible.
  	  </action>
  	  <action dev="CZ" type="add">
  	   Creating wrappers for Session and Cookie.
  	   The creation of these wrapper classes allow us to be independent
  	   of the javax.servlet classes.
  	  </action>
  	  <action dev="CZ" type="add">
  		Added reload-method and check-reload configuration attributes for
  		the sitemap to allow asynchron/synchron sitemap reloading.
  	  </action>
  	  <action dev="CZ" type="add">
  		Added initial caching algorithm for StreamPipelines. The caching system
  		is pluggable and offers caching of the whole response.
  	  </action>
  	  <action dev="CZ" type="add">
  		Added initial caching algorithm for EventPipelines. The caching system
  		is pluggable and includes caching of generators and transformers.
  	  </action>
  	  <action dev="BL" type="remove">
  		Moved ComponentManagement infrastructure to Avalon where more eyes
  		can keep it working well, and it can benefit more people.
  	  </action>
  	  <action dev="GP" type="update">
  		Decoupled the RoleUtils class from the component management system.
  		Implemented RoleInfo proposed by Ricardo Rocha
  	  </action>
  	  <action dev="GP" type="update">
  		Split up ResourcePipeline into the Component EventPipeline and StreamPipeline
  		and put them in the components package.
  		it.
  	  </action>
  	  <action dev="RB" type="update">
  		Added a TranscoderFactory for Batik, and updated the SVG Serializer to use
  		it.
  	  </action>
  	  <action dev="PR" type="add">
  		Added support for SAXConnectors. This is the first stage in the
  		implementation of content aggregation. SAXConnectors could also
  		be used for profiling and pipeline logging.
  	  </action>
  	  <action dev="BL" type="add">
  		Added form to database Actions.  Using these Actions, you can quickly
  		generate a webapp that functions in _very_ little time.
  	  </action>
  	  <action dev="DM" type="update">
  		Added command line code generation and compilation of XSP's and the Sitemap.
  	  </action>
  	  <action dev="DM" type="update">
  		Eliminated dependency on Xalan. Updated sitemap.xsl and the Extension functions to
  		work both on Xalan and SAXON. SAXON should work from version 6.2.2 onwards.
  	  </action>
  	  <action dev="DM" type="update">
  		Eliminated dependency on Xerces for the serializers by using TRaX Serializers.
  	  </action>
  	 </release>
  	 <release version="Cocoon 2.0a" date="March 2001">
  	  <action dev="BL" type="update">
  		Made Cocoon load classpath independent of Servlet Engine Classpath
  		Attribute.
  	  </action>
  	  <action dev="BL" type="update">
  		Changed the Xerces Specific code in the parser to JAXP 1.1 code.
  		The JAXP 1.1 code will work with any compliant parser.  Unfortunately
  		we still need Xerces for the serializers.
  	  </action>
  	  <action dev="BL" type="update">
  		Put meat on the Action Framework for the ManageEmployees form.
  	  </action>
  	  <action dev="RB" type="update"> 
  	   SVG serializer now uses Batik.
  	  </action>
  	  <action dev="BL" type="add">
  		I did a first stab at importing the util logicsheet from Cocoon 1.8.1.
  	  </action>
  	  <action dev="BL" type="add">
  		I added some simple forms that make use of the xsp-request and esql
  		logicsheets.
  	  </action>
  	  <action dev="BL" type="update">
  		Clean up a lot of classloader issues.  RepositoryClassLoader is quicker and
  		more stable accross installations.  ClassUtils takes care of getting resources.
  	  </action>
  	  <action dev="BL" type="update">
  		Updated avalonapi to implement hierarchical logging, and added many more
  		log entries to get a handle on where the problems lay.
  	  </action>
  	  <action dev="DB" type="add">
  	   added esql logicsheet to c2
  	  </action>
  	  <action dev="DB" type="fix">
  	   patched xsp generator to use proper namespace for automatic text elements
  	  </action>
  	  <action dev="BL" type="update">
  		Updated Cocoon to be Avalon 3.0a4 compliant.  Introduced ComponentManager and
  		ComponentSelector patterns correctly in code.  Updated sitemap to create
  		Configuration trees directly.
  	  </action>
  	  <action dev="RB" type="add"> 
  	   Added a more complete SVG serializer.
  	  </action>
  	  <action dev="SM" type="update">
  	   Distribution cleanup and creation of a decent live demo, also to test the new sitemap.
  	  </action>
  	  <action dev="GP" type="update">
  	   Major update to implement the new compiled sitemap subsystem.
  	  </action>
  	  <action dev="DB" type="update">
  	   Patched XSLTFilter to pass request parameters into stylesheet like cocoon1
  	  </action>
  	  <action dev="DB" type="add">
  	   Added ImageDirectoryGenerator - this oughta be pluggable though, so other file types can have extra attributes added easily
  	  </action>
  	  <action dev="SM" type="add"> 
  	   Improved the samples and the webapp sitemap.
  	  </action>
  	  <action dev="SM" type="update"> 
  	   Cleaned build system in order to be friendly to ASF-wide build procedures.
  	  </action>
  	  <action dev="SM" type="update"> 
  	   Updated installation section (JServ no longer supported).
  	  </action>
  	  <action dev="SM" type="update"> 
  	   Updated Xerces and FOP to latest versions.
  	  </action>
  	  <action dev="SM" type="fix"> 
  	   Patched for final SAX2 compatibility.
  	  </action>
  	  <action dev="SM" type="update" due-to="Sven K&uuml;nzler" due-to-email="svenk@tzi.org"> 
  	   Improved installation documentation.
  	  </action>
  	  <action dev="DB" type="add" due-to="Zvi" due-to-email="thezvi@ifrance.com">
  	   Patched SQLFilter so VJ++ was happy
  	  </action>
  	  <action dev="DB" type="add">
  	   Officially added XincludeFilter
  	  </action>
  	  <action dev="DB" type="add">
  	   Officially added SQLFilter
  	  </action>
  	  <action dev="SM" type="add" due-to="Sebastien Sahuc" due-to-email="ssahuc@imediation.com"> 
  	   Fixed order of filters that was backwards.
  	  </action>
  	  <action dev="GP" type="add">
  	   Fixed typo in DirectoryGenerator.
  	  </action>
  	  <action dev="SM" type="add">
  	   Distribution cleanup, early documentation.
  	  </action>
  	  <action dev="PF" type="add">
  	   Initial code implementation.
  	  </action>
  	 </release>
    </changes>
  </status>
  
  
  
  1.1                  xml-forrest/src/resources/convert/cocoon/tabs.xml
  
  Index: tabs.xml
  ===================================================================
  <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE tabs PUBLIC "-//APACHE//DTD Cocoon Documentation Tab V1.0//EN" "tab-cocoon-v10.dtd">
  
        <tabs software="MyProj"
          title="MyProj"
          copyright="Foo"
          xmlns:xlink="http://www.w3.org/1999/xlink">
  
          <tab label="Home" dir=""/>
          <!-- Add new tabs here, eg:
          <tab label="How-Tos" dir="community/howto/"/>
          <tab label="XML Site" dir="xml-site/"/>
          -->
  
      </tabs>