<?xml version="1.0"?>

<project name="vaadin-buildhelpers" basedir="." default="publish-local"
    xmlns:ivy="antlib:org.apache.ivy.ant">
    <description>
        Compiles build helpers used when building other
        modules.
    </description>
    <include file="../build.xml" as="vaadin" />
    <include file="../common.xml" as="common" />

    <property name="module.name" value="vaadin-buildhelpers" />
    <property name="module.symbolic" value="com.vaadin.buildhelpers" />
    <property name="result.dir" location="result" />
    <path id="classpath.compile.custom" />

    <property name="filtered.webcontent.dir" location="${result.dir}/WebContent" />
    <property name="release-notes-tickets-file" location="${result.dir}/release-notes-tickets.html" />
    <property name="release-notes-authors-file" location="${result.dir}/release-notes-authors.html" />

    <target name="jar" depends="filter.webcontent">
        <antcall target="common.compile" />
        <property name="result.jar"
            location="${result.dir}/lib/${module.name}-${vaadin.version}.jar" />
        <property name="classes" location="${result.dir}/classes" />
        <property name="src" location="${result.dir}/../src" />

        <jar destfile="${result.jar}" duplicate="fail" index="true">
            <fileset dir="${classes}" excludes="${classes.exclude}"
                erroronmissingdir="false" />
            <fileset dir="${filtered.webcontent.dir}/.."
                includes="WebContent/**" />
        </jar>
    </target>

    <target name="publish-local" depends="jar">
        <antcall target="common.publish-local" />
    </target>

    <target name="clean">
        <antcall target="common.clean" />
    </target>

    <target name="filter.webcontent"
        depends="fetch-release-notes-tickets,fetch-release-notes-authors">
        <!-- Running without build.release-notes will cause an error, which 
            is ignored -->
        <loadfile property="release-notes-tickets" srcFile="${release-notes-tickets-file}"
            failonerror="false" />
        <loadfile property="release-notes-authors" srcFile="${release-notes-authors-file}"
            failonerror="false" />

        <delete dir="${filtered.webcontent.dir}" />
        <copy todir="${filtered.webcontent.dir}">
            <fileset dir="${vaadin.basedir}/WebContent">
                <include name="img/**" />
            </fileset>
        </copy>
        <copy todir="${filtered.webcontent.dir}">
            <fileset dir="${vaadin.basedir}/WebContent">
                <patternset>
                    <include name="release-notes.html" />
                    <include name="license.html" />
                    <include name="licenses/**" />
                    <include name="css/**" />
                </patternset>
            </fileset>
            <filterchain>
                <expandproperties />
                <replacetokens begintoken="@" endtoken="@">
                    <token key="version" value="${vaadin.version}" />
                </replacetokens>
                <replacetokens begintoken="@" endtoken="@">
                    <token key="version-minor"
                        value="${vaadin.version.major}.${vaadin.version.minor}" />
                </replacetokens>
                <replacetokens begintoken="@" endtoken="@">
                    <token key="builddate" value="${build.date}" />
                </replacetokens>
                <replacetokens begintoken="@" endtoken="@">
                    <token key="release-notes-tickets" value="${release-notes-tickets}" />
                </replacetokens>
                <replacetokens begintoken="@" endtoken="@">
                    <token key="release-notes-authors" value="${release-notes-authors}" />
                </replacetokens>
            </filterchain>
        </copy>
    </target>


    <target name="fetch-release-notes-tickets" if="build.release-notes">
        <mkdir dir="${filtered.webcontent.dir}" />
        <antcall target="exec-buildhelper">
            <param name="main.class"
                value="com.vaadin.buildhelpers.FetchReleaseNotesTickets" />
            <param name="output" location="${release-notes-tickets-file}" />
        </antcall>
    </target>

    <target name="fetch-release-notes-authors" if="build.release-notes">
        <copy file="src/com/vaadin/buildhelpers/authormap.properties"
            tofile="${result.dir}/classes/com/vaadin/buildhelpers/authormap.properties" />

        <mkdir dir="${filtered.webcontent.dir}" />
        <antcall target="exec-buildhelper">
            <param name="main.class"
                value="com.vaadin.buildhelpers.FetchReleaseNotesAuthors" />
            <param name="output" location="${release-notes-authors-file}" />
        </antcall>
        <delete
            file="${result.dir}/classes/com/vaadin/buildhelpers/authormap.properties" />
    </target>

    <target name="exec-buildhelper">
        <antcall target="common.compile" />
        <fail unless="main.class" message="No main class given in 'main.class'" />
        <fail unless="output" message="No output file given in 'output'" />
        <ivy:resolve log="download-only" conf="build" />
        <ivy:cachepath pathid="deps" />
        <java classname="${main.class}" output="${output}"
            failonerror="true" fork="yes">
            <classpath>
                <pathelement location="${result.dir}/classes" />
            </classpath>
            <classpath refid="deps" />
            <jvmarg value="-Dvaadin.version=${vaadin.version}" />
        </java>
    </target>

    <target name="checkstyle">
        <antcall target="common.checkstyle">
            <param name="cs.src" location="src" />
        </antcall>
    </target>

    <target name="test" depends="checkstyle">
        <!--<antcall target="common.test.run" /> -->
        <echo>WHAT? No JUnit tests for ${module.name}!</echo>
    </target>
</project>