<?xml version="1.0"?>

<!--
  - Licensed to the Apache Software Foundation (ASF) under one or more
  - contributor license agreements.  See the NOTICE file distributed with
  - this work for additional information regarding copyright ownership.
  - The ASF licenses this file to You under the Apache License, Version 2.0
  - (the "License"); you may not use this file except in compliance with
  - the License.  You may obtain a copy of the License at
  -
  -     http://www.apache.org/licenses/LICENSE-2.0
  -
  - Unless required by applicable law or agreed to in writing, software
  - distributed under the License is distributed on an "AS IS" BASIS,
  - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  - See the License for the specific language governing permissions and
  - limitations under the License.
  -
  - $Id$
  -->

<!--
  - Build file for the Xindice Project.
  -
  - This script should be started from the xml-xindice directory with the
  - following command line:
  -
  -     build <target>
  -
  - Following command line will display list of available targets:
  -
  -     build -projecthelp
  -
  - Version: $Revision$ $Date$
  - Authors: Tom Bradford (bradford@apache.org)
  -          Kimbro Staken (kstaken@xmldatabases.org)
  -          Fernando Padrilla (fern@apache.org)
  -          James Bates (james.bates@amplexor.com)
  -          Vladimir R. Bossicard (vladimir@apache.org)
  -          Kevin O'Neill (kevinoneill@apache.org)
  -->
<project name="xml-xindice" default="build" basedir=".">

    <!--
      - Give the chance to overwrite the definitions by setting the
      - build.properties file.
      -->
    <property environment="ENVIRONMENT"/>
    <property file="local.build.properties"/>
    <property file="build.properties"/>

    <!--
      - Build definitions
      -->
    <fileset id="endorsed.jars" dir="${jar.dir}/endorsed">
        <include name="*.jar"/>
    </fileset>
    <fileset id="core.jars" dir="${jar.dir}">
        <include name="*.jar"/>
        <exclude name="servlet*.jar"/>
    </fileset>
    <fileset id="servlet.jars" dir="${jar.dir}">
        <include name="servlet*.jar"/>
    </fileset>
    <fileset id="tools.jars" dir="${tools.dir}/lib">
        <include name="*.jar"/>
    </fileset>

    <!--
      - Classpath to use within project
      -->
    <path id="project.class.path">
        <!-- compiled classes directory -->
        <pathelement location="${dom.build.dir}"/>
        <pathelement location="${src.build.dir}"/>
        <fileset refid="endorsed.jars"/>
        <fileset refid="core.jars"/>
        <fileset refid="servlet.jars"/>
        <fileset refid="tools.jars"/>
    </path>

    <property name="jar.file" value="${project.filename}-${project.version}.jar"/>
    <property name="dom.file" value="${project.filename}-dom-${project.version}.jar"/>
    <property name="war.file" value="${project.filename}-${project.version}.war"/>
    <property name="xml.file" value="${project.filename}-${project.version}.xml"/>

    <target name="init">
        <tstamp/>
        <filter token="VERSION" value="${project.version}"/>
        <echo message="Building with Java ${java.version}"/>
    </target>

    <!--
      - Definition of the main targets
      -->
    <target name="compile" depends="compile-src, compile-test"
            description="Compiles all the source code">
    </target>
    <target name="build" depends="compile, jar, war"
            description="* Builds Xindice jar and war files in the current directory">
    </target>
    <target name="clean" depends="jar-clean, war-clean, test-clean" description="Cleans out all generates files">
        <delete dir="${build.dir}"/>
    </target>

    <!--
      - Compiles the source code
      -->
    <target name="compile-src" depends="init, clover.on">
        <mkdir dir="${dom.build.dir}"/>
        <javac srcdir="${dom.src.dir}" destdir="${dom.build.dir}" target="${compile.javac.target}" source="${compile.javac.source}"
               debug="${compile.debug}" optimize="${compile.optimize}" nowarn="${compile.nowarn}" deprecation="${compile.deprecation}" verbose="${compile.verbose}">
            <classpath>
                <path refid="project.class.path"/>
            </classpath>
        </javac>
        <mkdir dir="${src.build.dir}"/>
        <javac srcdir="${src.dir}" destdir="${src.build.dir}" target="${compile.javac.target}" source="${compile.javac.source}"
               debug="${compile.debug}" optimize="${compile.optimize}" nowarn="${compile.nowarn}" deprecation="${compile.deprecation}" verbose="${compile.verbose}">
            <classpath>
                <path path="${dom.build.dir}"/>
                <path refid="project.class.path"/>
            </classpath>
        </javac>
    </target>
    <target name="src-clean">
        <delete dir="${src.build.dir}"/>
    </target>

    <!--
      - Compiles and executes the tests
      -->
    <target name="compile-test" depends="compile-src, clover.off">
        <mkdir dir="${test.build.dir}"/>
        <mkdir dir="${test.result.dir}"/>
        <javac srcdir="${test.src.dir}" destdir="${test.build.dir}" debug="${compile.debug}" optimize="${compile.optimize}" nowarn="${compile.nowarn}" deprecation="${compile.deprecation}" verbose="${compile.verbose}">
            <classpath>
                <path refid="project.class.path"/>
            </classpath>
        </javac>
        <copy todir="${test.build.dir}">
            <fileset dir="${test.src.dir}" excludes="*.java"/>
        </copy>
    </target>

    <target name="test-unit" depends="compile-test">
        <junit fork="yes" printsummary="yes" haltonfailure="no" failureproperty="test.fail">
            <jvmarg value="-Djava.endorsed.dirs=${basedir}/lib/endorsed"/>
            <jvmarg value="-Dxindice.home=${basedir}"/>
            <jvmarg value="-Dxindice.db.home=${basedir}/build/test-unit"/>
            <jvmarg value="-Dxindice.configuration=${basedir}/config/system.xml"/>
            <jvmarg value="-Dorg.apache.commons.logging.Log=${test.logger}"/>
            <jvmarg value="-Dorg.apache.commons.logging.simplelog.defaultlog=${test.loglevel}"/>

            <formatter type="plain" usefile="no"/>
            <formatter type="xml"/>

            <batchtest todir="${test.result.dir}">
              <fileset dir="${test.build.dir}">
                <include name="**/*Test.class"/>
                <include name="**/dom/*Tests.class"/>
                <exclude name="**/Integration*.class"/>
                <exclude name="**/integration/**"/>
                <exclude name="**/dom/*Test.class"/>
              </fileset>
            </batchtest>
            <classpath>
                <path refid="project.class.path"/>
                <pathelement location="${test.build.dir}"/>
            </classpath>
        </junit>
    </target>

    <target name="test-integration-embed" depends="compile-test">
        <junit fork="yes" printsummary="yes" haltonfailure="no" failureproperty="test.fail">
            <jvmarg value="-Djava.endorsed.dirs=${basedir}/lib/endorsed"/>
            <jvmarg value="-Dxindice.home=${basedir}"/>
            <jvmarg value="-Dxindice.db.home=${basedir}/build/test-embed"/>
            <jvmarg value="-Dxindice.configuration=${basedir}/config/system.xml"/>
            <jvmarg value="-Dorg.apache.commons.logging.Log=${test.logger}"/>
            <jvmarg value="-Dorg.apache.commons.logging.simplelog.defaultlog=${test.loglevel}"/>

            <formatter type="plain" usefile="no"/>
            <formatter type="xml"/>

            <test name="org.apache.xindice.IntegrationEmbedTests"
                  outfile="${test.result.dir}/org.apache.xindice.IntegrationEmbedTests"/>
            <classpath>
                <path refid="project.class.path"/>
                <pathelement location="${test.build.dir}"/>
            </classpath>
        </junit>
    </target>

    <target name="test-integration-uncompressed" depends="compile-test">
        <junit fork="yes" printsummary="yes" haltonfailure="no" failureproperty="test.fail">
            <jvmarg value="-Djava.endorsed.dirs=${basedir}/lib/endorsed"/>
            <jvmarg value="-Dxindice.home=${basedir}"/>
            <jvmarg value="-Dxindice.db.home=${basedir}/build/test-uncompressed"/>
            <jvmarg value="-Dxindice.configuration=${basedir}/config/system.xml"/>
            <jvmarg value="-Dorg.apache.commons.logging.Log=${test.logger}"/>
            <jvmarg value="-Dorg.apache.commons.logging.simplelog.defaultlog=${test.loglevel}"/>

            <formatter type="plain" usefile="no"/>
            <formatter type="xml"/>

            <test name="org.apache.xindice.IntegrationUncompressedTests"
                  outfile="${test.result.dir}/org.apache.xindice.IntegrationUncompressedTests"/>
            <classpath>
                <path refid="project.class.path"/>
                <pathelement location="${test.build.dir}"/>
            </classpath>
        </junit>
    </target>

    <target name="test-integration-xmlrpc" depends="compile-test">
        <echo message="XML-RPC driver='${test.xmlrpc.driver}'"/>
        <echo message="XML-RPC host/port='${test.xmlrpc.hostport}'"/>
        <echo message="XML-RPC service location='${test.xmlrpc.service-location}'"/>

        <junit fork="yes" printsummary="yes" haltonfailure="no" failureproperty="test.fail">
            <jvmarg value="-Djava.endorsed.dirs=${basedir}/lib/endorsed"/>
            <jvmarg value="-Dxindice.home=${basedir}"/>
            <jvmarg value="-Dtest.xmlrpc.hostport=${test.xmlrpc.hostport}"/>
            <jvmarg value="-Dtest.xmlrpc.service-location=${test.xmlrpc.service-location}"/>
            <jvmarg value="-Dtest.xmlrpc.driver=${test.xmlrpc.driver}"/>
            <jvmarg value="-Dorg.apache.commons.logging.Log=${test.logger}"/>
            <jvmarg value="-Dorg.apache.commons.logging.simplelog.defaultlog=${test.loglevel}"/>

            <formatter type="plain" usefile="no"/>
            <formatter type="xml" />

            <test name="org.apache.xindice.IntegrationXmlRpcTests"
                  outfile="${test.result.dir}/org.apache.xindice.IntegrationXmlRpcTests"/>
            <classpath>
                <path refid="project.class.path"/>
                <pathelement location="${test.build.dir}"/>
            </classpath>
        </junit>
    </target>

    <target name="test-all"
            depends="test-unit, test-integration-embed, test-integration-uncompressed, test-integration-xmlrpc">
    </target>
    <target name="test-report" depends="init">
        <mkdir dir="${test.report.dir}"/>
        <junitreport todir="${test.result.dir}">
            <fileset dir="${test.result.dir}">
                <include name="*.xml"/>
            </fileset>
            <report format="frames" todir="${test.report.dir}"/>
        </junitreport>
    </target>
    <target name="test" depends="test-all, test-report"
            description="Run all tests and generate all test reports">
      <fail message="Tests failed. See test report for details." if="test.fail"/>
    </target>
    <target name="test-clean">
        <delete dir="${test.build.dir}"/>
        <delete dir="${test.temp.dir}"/>
    </target>


    <!--
      - Prepare bin files
      -->
    <target name="bin" depends="init">
        <mkdir dir="${build.dir}/bin"/>
        <copy toDir="${build.dir}/bin" filtering="on">
            <fileset dir="${bin.dir}"/>
        </copy>
    </target>


    <!--
      - Build the Xindice archives (jar and war)
      -->
    <target name="jar" depends="compile">
        <jar jarfile="${jar.file}"
             basedir="${src.build.dir}">
            <manifest>
                <attribute name="Built-By" value="${user.name}"/>
                <attribute name="Xindice-Version" value="${project.version}"/>
                <section name="org/apache/xindice">
                    <attribute name="Sealed" value="false"/>
                    <attribute name="Extension-name" value="org.apache.xindice"/>
                    <attribute name="Specification-Title" value="Apache Xindice"/>
                    <attribute name="Specification-Version" value="${project.version}"/>
                    <attribute name="Specification-Vendor" value="Apache Software Foundation"/>
                    <attribute name="Implementation-Title" value="Apache Xindice"/>
                    <attribute name="Implementation-Version" value="${project.version}"/>
                    <attribute name="Implementation-Vendor" value="Apache Software Foundation"/>
                </section>
            </manifest>
            <metainf dir="." includes="LICENSE,NOTICE"/>
        </jar>
        <jar jarfile="${dom.file}" basedir="${dom.build.dir}">
            <manifest>
                <attribute name="Built-By" value="${user.name}"/>
                <attribute name="Xindice-Version" value="${project.version}"/>
            </manifest>
            <metainf dir="." includes="LICENSE,NOTICE"/>
        </jar>
    </target>
    <target name="jar-clean">
        <delete file="${jar.file}"/>
        <delete file="${dom.file}"/>
    </target>


    <target name="war" depends="jar, bin">
        <copy file="${config.dir}/xindice.xml" toFile="${xml.file}" filtering="on"/>
        <war destfile="${war.file}" update="false" webxml="config/web.xml">
            <webinf dir=".">
                <include name="${config.dir}/system.xml"/>
                <include name="${config.dir}/commands.xml"/>
                <include name="${config.dir}/webadmin.xml"/>
                <include name="${config.dir}/MimeTypes.xml"/>
            </webinf>
            <lib refid="endorsed.jars"/>
            <lib refid="core.jars"/>
            <lib file="${jar.file}"/>
            <lib file="${dom.file}"/>
            <manifest>
                <attribute name="Built-By" value="${user.name}"/>
                <attribute name="Xindice-Version" value="${project.version}"/>
            </manifest>
            <metainf dir="." includes="LICENSE,NOTICE"/>
        </war>
    </target>
    <target name="war-clean">
        <delete file="${war.file}"/>
        <delete file="${xml.file}"/>
    </target>


    <target name="tomcat-deploy" depends="war" description="Deploys the Xindice webapp into the Tomcat installation">
        <copy file="${xml.file}"
              tofile="${tomcat.home}/webapps/${webapp.name}.xml"/>
        <copy file="${war.file}"
              tofile="${tomcat.home}/webapps/${webapp.name}.war"/>
    </target>
    <target name="tomcat-clean" description="Removes the deployed Xindice webapp from the Tomcat installation">
        <delete dir="${tomcat.home}/webapps/${webapp.name}"/>
        <delete file="${tomcat.home}/webapps/${webapp.name}.xml"/>
    </target>

    <!--
      - Documentation Build Targets
      -->
    <target name="javadoc" depends="init" description="Creates Javadoc API documentation">
        <delete dir="${api.dir}"/>
        <mkdir dir="${api.dir}"/>
        <javadoc packagenames="${packages}"
                 destdir="${api.dir}"
                 overview="${src.dir}/overview.html"
                 author="true"
                 version="true"
                 protected="true"
                 use="false"
                 windowtitle="Apache Xindice API v${project.version}"
                 doctitle="Apache Xindice API, version ${project.version}&lt;br&gt;API specification"
                 header="&lt;b&gt;Xindice API&lt;br&gt;version ${project.version}&lt;/b&gt;"
                 bottom="Copyright (c) ${project.year} The Apache Software Foundation. All Rights Reserved.">
            <group title="Core packages" packages="org.apache.xindice.core*:org.apache.xindice.xml*:org.apache.xindice.util"/>
            <group title="Server packages" packages="org.apache.xindice.server*"/>
            <group title="Client packages" packages="org.apache.xindice.client*"/>
            <group title="Tools packages" packages="org.apache.xindice.tools*"/>
            <sourcepath>
                <pathelement location="${src.dir}"/>
            </sourcepath>
            <classpath>
                <fileset refid="endorsed.jars"/>
                <fileset refid="core.jars"/>
                <fileset refid="servlet.jars"/>
                <fileset refid="tools.jars"/>
            </classpath>
            <link href="http://java.sun.com/j2se/1.3/docs/api/"/>
        </javadoc>
    </target>
    <target name="javadoc-clean">
        <delete dir="${api.dir}"/>
    </target>

    <target name="gump-target" depends="build"/>


    <!--
      - Clover Setup
      -->
    <target name="clover">
      <available property="clover.present"
                 classname="com.cenqua.clover.tasks.CloverSetupTask">
        <classpath refid="project.class.path"/>
      </available>
    </target>

    <target name="clover.init" depends="clover" if="clover.present">
        <taskdef resource="clovertasks"/>
        <typedef resource="clovertypes"/>
        <clover-setup initString="${build.dir}/clover/coverage.db"
                      tmpdir="${build.dir}/clover/src"
                      preserve="false"/>
    </target>

    <target name="clover.on" depends="clover.init" if="clover.present">
        <clover-setup initString="${build.dir}/clover/coverage.db"
                      tmpdir="${build.dir}/clover/src"
                      preserve="false"
                      enabled="true"/>
    </target>

    <target name="clover.off" depends="clover.init" if="clover.present">
        <clover-setup enabled="false"/>
    </target>

    <target name="clover.historypoint" depends="clover.init" if="clover.present">
        <clover-historypoint historyDir="${build.dir}/clover/history"/>
    </target>

    <target name="clover.report" depends="clover.init" if="clover.present">
        <clover-report>
            <current outfile="${build.dir}/clover-report">
                <format type="html"/>
            </current>
            <historical outfile="${build.dir}/clover-history"
                        historyDir="${build.dir}/clover/history">
                <format type="html"/>
            </historical>
        </clover-report>
    </target>


    <!--
      -
      - Tasks for preparing Xindice release artifacts
      -
      -->

    <!--
      - Build Xindice Website
      -->
    <target name="site">
        <!--<exec command="${forrest.home}/bin/forrest"/>-->
    </target>

    <!--
      - Build Binary Releases (zip, tar.gz)
      -->
    <target name="release-bin" depends="init">
        <mkdir dir="${release.dir}"/>
        <zip destfile="${release.dir}/${project.name}-${project.version}-bin.zip">
            <zipfileset dir="."
                        prefix="${project.name}-${project.version}"
                        includes="LICENSE,README,NOTICE,legal/**,xindiced.bat"/>
            <zipfileset dir="."
                        filemode="755"
                        prefix="${project.name}-${project.version}"
                        includes="xindiced"/>
            <zipfileset dir="."
                        prefix="${project.name}-${project.version}"
                        includes="${project.filename}-${project.version}.jar,${project.filename}-dom-${project.version}.jar"/>
            <zipfileset dir="."
                        prefix="${project.name}-${project.version}"
                        includes="${project.filename}-${project.version}.xml,${project.filename}-${project.version}.war"/>
            <zipfileset dir="${build.dir}/bin"
                        filemode="755"
                        prefix="${project.name}-${project.version}/${bin.dir}"/>
            <zipfileset dir="${config.dir}"
                        prefix="${project.name}-${project.version}/${config.dir}"
                        excludes="web.xml,xindice.xml,vm.cfg"/>
            <zipfileset dir="${jar.dir}"
                        prefix="${project.name}-${project.version}/${jar.dir}"/>
            <zipfileset dir="${tools.dir}"
                        prefix="${project.name}-${project.version}/${tools.dir}"
                        includes="jetty/**"/>
            <zipfileset dir="${build.dir}/site"
                        prefix="${project.name}-${project.version}/docs"
                        excludes="api/index.html"/>
            <zipfileset dir="${api.dir}"
                        prefix="${project.name}-${project.version}/docs/api"/>
        </zip>

        <tar destfile="${build.dir}/${project.name}-${project.version}-bin.tar">
            <tarfileset dir="."
                        prefix="${project.name}-${project.version}"
                        preserveLeadingSlashes="true"
                        includes="LICENSE,README,NOTICE,legal/**,xindiced.bat"/>
            <tarfileset dir="."
                        mode="755"
                        prefix="${project.name}-${project.version}"
                        preserveLeadingSlashes="true"
                        includes="xindiced"/>
            <tarfileset dir="."
                        prefix="${project.name}-${project.version}"
                        preserveLeadingSlashes="true"
                        includes="${project.filename}-${project.version}.jar,${project.filename}-dom-${project.version}.jar"/>
            <tarfileset dir="."
                        prefix="${project.name}-${project.version}"
                        preserveLeadingSlashes="true"
                        includes="${project.filename}-${project.version}.xml,${project.filename}-${project.version}.war"/>
            <tarfileset dir="${build.dir}/bin"
                        mode="755"
                        prefix="${project.name}-${project.version}/${bin.dir}"
                        preserveLeadingSlashes="true"/>
            <tarfileset dir="${config.dir}"
                        prefix="${project.name}-${project.version}/${config.dir}"
                        preserveLeadingSlashes="true"
                        excludes="web.xml,xindice.xml,vm.cfg"/>
            <tarfileset dir="${jar.dir}"
                        prefix="${project.name}-${project.version}/${jar.dir}"
                        preserveLeadingSlashes="true"/>
            <tarfileset dir="${tools.dir}"
                        prefix="${project.name}-${project.version}/${tools.dir}"
                        preserveLeadingSlashes="true"
                        includes="jetty/**"/>
            <tarfileset dir="${build.dir}/site"
                        prefix="${project.name}-${project.version}/docs"
                        preserveLeadingSlashes="true"
                        excludes="api/index.html"/>
            <tarfileset dir="${api.dir}"
                        prefix="${project.name}-${project.version}/docs/api"
                        preserveLeadingSlashes="true"/>
        </tar>

        <gzip src="${build.dir}/${project.name}-${project.version}-bin.tar"
              zipfile="${release.dir}/${project.name}-${project.version}-bin.tar.gz"/>
    </target>

    <!--
      - Build Source Releases (zip, tar.gz)
      -->
    <target name="release-src" depends="init">
        <mkdir dir="${release.dir}"/>
        <zip destfile="${release.dir}/${project.name}-${project.version}-src.zip">
            <zipfileset dir="."
                        prefix="${project.name}-${project.version}"
                        includes="LICENSE,README,NOTICE,legal/**,KEYS,build.*,forrest.*,status.xml,xindiced*"
                        excludes="build.sh,xindiced"/>
            <zipfileset dir="."
                        filemode="755"
                        prefix="${project.name}-${project.version}"
                        includes="build.sh,xindiced,${bin.dir}/**"/>
            <zipfileset dir="."
                        prefix="${project.name}-${project.version}"
                        includes="${jar.dir}/**,${tools.dir}/**,${config.dir}/**,${root.dir}/**,${documentation.dir}/**"
                        excludes="${root.dir}/scratchpad/**"/>
        </zip>

        <tar destfile="${build.dir}/${project.name}-${project.version}-src.tar">
            <tarfileset dir="."
                        prefix="${project.name}-${project.version}"
                        preserveLeadingSlashes="true"
                        includes="LICENSE,README,NOTICE,legal/**,KEYS,build.*,forrest.*,status.xml,xindiced*"
                        excludes="build.sh,xindiced"/>
            <tarfileset dir="."
                        mode="755"
                        prefix="${project.name}-${project.version}"
                        preserveLeadingSlashes="true"
                        includes="build.sh,xindiced,${bin.dir}/**"/>
            <tarfileset dir="."
                        prefix="${project.name}-${project.version}"
                        preserveLeadingSlashes="true"
                        includes="${jar.dir}/**,${tools.dir}/**,${config.dir}/**,${root.dir}/**,${documentation.dir}/**"
                        excludes="${root.dir}/scratchpad/**"/>
        </tar>

        <gzip src="${build.dir}/${project.name}-${project.version}-src.tar"
              zipfile="${release.dir}/${project.name}-${project.version}-src.tar.gz"/>
    </target>

    <target name="release" depends="build, javadoc, site, release-bin, release-src"/>

    <!--
      - PMD is a tool that checks for various code mistakes, like unused
      - variables. To ensure a good code quality, please executes this task
      - every now and then and correct the problems found.
      -
      - Xindice is checked every hour and the result can be viewed at
      -     <http://pmd.sourceforge.net/cgi-bin/webpmd.pl>
      -
      - Out of the rules provided by PMD (1.0rc3) Xindice will be check with
      - the following ones:
      -    [ X ]  rulesets/basic.xml
      -    [   ]  rulesets/braces.xml
      -    [   ]  rulesets/design.xml
      -    [ X ]  rulesets/imports.xml
      -    [   ]  rulesets/junit.xml
      -    [   ]  rulesets/naming.xml
      -    [   ]  rulesets/newrules.xml
      -    [   ]  rulesets/strings.xml
      -    [ X ]  rulesets/unusedcode.xml
      -
      - Anyone is free to check Xindice with other rules, as long as they
      - improve the source code.
      -->

    <property name="pmd.rules" value="rulesets/basic.xml,rulesets/imports.xml,rulesets/unusedcode.xml" />

    <target name="pmd"
            description="checks for code quality">
        <taskdef name="pmd"
                 classname="net.sourceforge.pmd.ant.PMDTask"
                 classpath="${pmd.jar}" />
        <pmd reportFile="pmd.html"
             verbose="false"
             rulesetfiles="${pmd.rules}"
             format="html"
             failonerror="no">
            <fileset dir="${src.dir}">
                <include name="**/*.java"/>
            </fileset>
        </pmd>
    </target>

    <!-- Build the Eclipse projects files -->
    <target name="eclipse-project" description="Generate the Eclipse project files">
        <property name="eclipse" value="tools/eclipse"/>

        <!-- prepare the various paths that will form the project -->
        <path id="srcs">
          <!-- main source dir -->
          <pathelement path="${src.dir}"/>
          <!-- scratchpad source dir -->
          <pathelement path="${scratchpad.src.dir}"/>
          <!-- unit tests dir -->
          <pathelement path="${test.src.dir}"/>
          <!-- examples (guide) dir -->
          <pathelement path="${examples.dir}/guide/src"/>
          <!-- examples (Addressbook) dir -->
          <pathelement path="${examples.dir}/addressbook/src/java"/>
        </path>

        <path id="libs">
          <!-- main libs -->
          <fileset dir="${jar.dir}">
            <include name="endorsed/*.jar"/>
            <include name="*.jar"/>
          </fileset>
          <!-- tools libs -->
          <fileset dir="${tools.dir}/lib">
            <include name="*.jar"/>
          </fileset>
          <!-- scratchpad libs -->
          <fileset dir="${scratchpad.jar.dir}">
            <include name="*.jar"/>
          </fileset>
        </path>

        <!-- convert paths to properties -->
        <property name="srcs" refid="srcs"/>
        <property name="libs" refid="libs"/>

        <!-- expand properties in the template file -->
        <copy file="${eclipse}/classpath-tmpl.xml"
              tofile="${eclipse.temp}/classpath-temp.xml"
              filtering="yes"
              overwrite="yes">
          <filterset>
            <filter token="SRC_DIRS" value="${srcs}"/>
            <filter token="LIBS" value="${libs}"/>
          </filterset>
        </copy>

        <!-- split the path in 'item' XML elements -->
        <replace file="${eclipse.temp}/classpath-temp.xml"
                 token="${path.separator}" value="&lt;/item&gt;&#xA; &lt;item&gt;"/>
        <!-- relativize file names by removing the current directory -->
        <replace file="${eclipse.temp}/classpath-temp.xml"
                 token="${user}${file.separator}" value=""/>
        <!-- and in case that fails, remove the base directory -->
        <replace file="${eclipse.temp}/classpath-temp.xml"
                 token="${basedir}${file.separator}" value=""/>

        <!-- replace platform-dependent path separator by '/' -->
        <replace file="${eclipse.temp}/classpath-temp.xml"
                 token="${file.separator}" value="/"/>

        <!-- now build the .classpath file -->
        <xslt in="${eclipse.temp}/classpath-temp.xml" out="${basedir}/.classpath"
              processor="trax"
              style="${eclipse}/make-classpath.xsl"/>

        <!-- copy the project file (expand version) -->
        <copy file="${eclipse}/project"
              tofile="${basedir}/.project"
              overwrite="yes">
          <filterset>
            <filter token="VERSION" value="${project.version}"/>
          </filterset>
        </copy>

        <delete file="${eclipse.temp}/classpath-temp.xml"/>
    </target>
</project>
