<?xml version="1.0" encoding="UTF-8"?>
<!--

    Copyright 2003-2004 The Apache Software Foundation

    Licensed 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.
-->


<!-- $Rev: 330371 $ $Date: 2005-11-02 16:57:37 -0500 (Wed, 02 Nov 2005) $ -->

<project default="default"
    xmlns:j="jelly:core"
    xmlns:u="jelly:util"
    xmlns:ant="jelly:ant"
    xmlns:maven="jelly:maven"
    xmlns:define="jelly:define"
    xmlns:velocity="jelly:velocity"
    >

    <!-- ================= -->
    <!-- Global Properties -->
    <!-- ================= -->

    <!-- Determine what the top-level project root is -->
    <j:set var="project.root" value="${pom.parentBasedir().getParentFile().getCanonicalFile()}"/>

    <!-- ==================== -->
    <!-- Default Global Goals -->
    <!-- ==================== -->

    <goal name="default">
        <attainGoal name="jar:install"/>
    </goal>

    <goal name="build">
        <attainGoal name="default"/>
    </goal>

    <goal name="rebuild">
        <attainGoal name="clean"/>
        <attainGoal name="build"/>
    </goal>

    <!-- For testing -->
    <goal name="hello">
        <ant:echo>
            H E L L O
            ---------
            Module Name ${pom.name} [${pom.currentVersion}]
            Axis2: ${axis2_version}
        </ant:echo>
    </goal>

    <postGoal name="java:prepare-filesystem">
      <u:file var="file" name="${maven.home}/lib/jalopy.jar"/>
      <j:if test="${file.exists()}">
        <ant:path id="jalopy.library">
          <ant:fileset dir="${maven.home}/lib">
            <ant:include name="jalopy.jar"/>
          </ant:fileset>
        </ant:path>
        <maven:addPath id="maven.dependency.classpath" refid="jalopy.library"/>
      </j:if>
    </postGoal>

    <!-- Remove classes which depend on changed files, so they will rebuild. -->
    <!-- TODO: Fix me
    <preGoal name="java:compile">
        <j:if test="${sourcesPresent}">
            <ant:depend srcdir="${maven.compile.source}"
                destdir="${maven.build.dest}"
                dump="false"
                closure="false">
                <j:forEach var="sm" items="${pom.build.sourceModifications}">
                    <ant:available property="classPresent" classname="${sm.className}"/>
                    <j:if test="${classPresent != 'true'}">
                        <j:forEach var="exclude" items="${sm.excludes}">
                            <ant:exclude name="${exclude}"/>
                        </j:forEach>
                        <j:forEach var="include" items="${sm.includes}">
                            <ant:include name="${include}"/>
                        </j:forEach>
                    </j:if>
                </j:forEach>
            </ant:depend>
        </j:if>
    </preGoal>
    -->

    <!-- Construct dependency lists for inclusion in generated jar. -->
    <!-- putting this goal here produces a circular dependency -->

    <!-- Remove the log files -->
    <goal name="clobber"
        description="Removes all (non-repository installed) build generated files">

        <!-- Let clean:clean do some work first -->
        <attainGoal name="clean:clean"/>

        <j:jelly xmlns="jelly:ant">
            <delete quiet="false" failonerror="false">
                <fileset dir="${basedir}">
                    <include name="maven.log"/>
                    <include name="velocity.log*"/>
                    <include name="junit*.properties"/>
                </fileset>
            </delete>
        </j:jelly>

    </goal>

    <!-- Cleanse source files -->
    <goal name="cleanse-sources"
        description="Cleanse source files, removing tabs and translating CRLF -> LF">

        <j:scope xmlns="jelly:ant">

            <!-- Cleanse sources -->
            <j:set var="srcdir" value="${basedir}/src/java"/>
            <u:available file="">
                <fixcrlf srcdir="${srcdir}" eol="lf" eof="remove" tab="remove" tablength="4">
                    <include name="**/*.java"/>
                </fixcrlf>
                <fixcrlf srcdir="${basedir}" eol="lf" eof="remove" tab="remove" tablength="4">
                    <include name="**/*.xml"/>
                    <include name="**/*.html"/>
                </fixcrlf>
            </u:available>

            <!-- Cleanse test sources -->
            <j:set var="srcdir" value="${basedir}/src/test"/>
            <u:available file="${srcdir}">
                <fixcrlf srcdir="${srcdir}" eol="lf" eof="remove" tab="remove" tablength="4">
                    <include name="**/*.java"/>
                    <include name="**/*.xml"/>
                    <include name="**/*.html"/>
                </fixcrlf>
                <fixcrlf srcdir="${srcdir}" eol="lf" eof="remove" tab="remove" tablength="4">
                    <include name="**/*.xml"/>
                    <include name="**/*.html"/>
                </fixcrlf>
            </u:available>

            <!-- Cleanse xdocs -->
            <j:set var="srcdir" value="${basedir}/src/xdocs"/>
            <u:available file="${srcdir}">
                <fixcrlf srcdir="${srcdir}" eol="lf" eof="remove" tab="remove" tablength="4">
                    <include name="**/*.xml"/>
                    <include name="**/*.html"/>
                </fixcrlf>
            </u:available>

            <!-- Cleanse build files -->
            <fixcrlf srcdir="." eol="lf" tab="remove" eof="remove" tablength="4">
                <include name="project.xml"/>
                <include name="maven.xml"/>
            </fixcrlf>

            <!-- Cleanse scripts -->
            <j:set var="srcdir" value="${basedir}/src/bin"/>
            <u:available file="${srcdir}">
                <fixcrlf srcdir="${srcdir}" eol="lf" eof="remove" tab="remove" tablength="4">
                    <include name="**/*"/>
                </fixcrlf>
            </u:available>

        </j:scope>

    </goal>

    <goal name="java-src"
        description="Creates an archive containing only java source.">

        <u:available file="${basedir}/src/java">
            <j:set var="javaSrcBuilt" value="true"/>
            <ant:mkdir dir="${basedir}/target"/>
            <ant:jar destfile="${basedir}/target/${pom.artifactId}-${pom.currentVersion}-java-src.jar">
                <fileset dir="${basedir}/src/java"/>
                <u:available file="${basedir}/target/xmlbeans">
                    <fileset dir="${basedir}/target/xmlbeans"/>
                </u:available>
            </ant:jar>
        </u:available>

        <j:if test="${javaSrcBuilt != 'true'}">
            <u:available file="${basedir}/target/xmlbeans">
                <j:set var="java-src.built" value="true"/>
                <ant:mkdir dir="${basedir}/target"/>
                <ant:jar destfile="${basedir}/target/${pom.artifactId}-${pom.currentVersion}-java-src.jar">
                    <fileset dir="${basedir}/target/xmlbeans"/>
                </ant:jar>
            </u:available>
        </j:if>
    </goal>

    <!-- If there is no src/test directory you can
    turn off clover in that module by overriding this goal to do nothing -->
    <goal name="clover.wrapper">
        <attainGoal name="clover"/>
    </goal>

    <preGoal name="clover:test">
        <j:set var="cloveroverride" value="true"/>
    </preGoal>

    <!-- Check if the tests need to run -->
    <!--
    <preGoal name="test:test">
        <j:if test="${context.getVariable('maven.test.force') == null}">
            <j:if test="${cloveroverride != 'true'}">
                <j:set var="uptodatePropName" value="tests.uptodate"/>
                <j:remove var="${uptodatePropName}"/>
                <ant:mkdir dir="${basedir}/target/test-reports/"/>
                <j:set var="uptodateFile" value="${basedir}/target/test-reports/tstamp"/>

                <ant:uptodate property="${uptodatePropName}" targetfile="${uptodateFile}">
                    <ant:srcfiles dir="${basedir}/src/" includes="**/*"/>
                </ant:uptodate>

                <j:if test="${context.getVariable(uptodatePropName) == 'true'}">
                    <ant:echo>NOTICE: Skipping tests; they seem to have passed already</ant:echo>
                    <j:set var="maven.test.skip" value="true"/>
                    <j:set var="unitTestSourcesPresent" value="false"/>
                </j:if>
            </j:if>
        </j:if>
    </preGoal>
    -->
    <!-- Update the timestamp of the last successful test -->
    <!--
    <postGoal name="test:test">
        <j:if test="${context.getVariable('maven.test.failure') == null}">
            <ant:touch file="${basedir}/target/test-reports/tstamp"/>
        </j:if>
    </postGoal>
    -->
</project>
