<!--
Copyright 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.
 -->
<project name="SampleTemplate" default="build">

    <property environment="env"/>

    <path id="SampleTemplate.path">
        <path refid="xmlbeans.path"/>
        <fileset dir="build/lib" includes="*.jar"/>
        <pathelement path="build/classes"/>
    </path>

    <target name="init">
        <property name="xmlbeans.home" value="${env.XMLBEANS_HOME}"/>
        <echo message="xmlbeans.home: ${xmlbeans.home}"/>

        <!-- check for xbean.jar from binary distribution -->
        <available
            property="xmlbeans.lib"
            value="${xmlbeans.home}/lib"
            file="${xmlbeans.home}/lib/xbean.jar" />

        <!-- check for xbean.jar compiled from source -->
        <available
            property="xmlbeans.lib"
            value="${xmlbeans.home}/build/lib"
            file="${xmlbeans.home}/build/lib/xbean.jar" />

        <fail message="Set XMLBEANS_HOME in your enviornment."
            unless="xmlbeans.lib"/>

        <echo message="xmlbeans.lib: ${xmlbeans.lib}"/>
        <path id="xmlbeans.path">
            <fileset dir="${xmlbeans.lib}" includes="*.jar"/>
        </path>

        <taskdef name="xmlbean"
            classname="org.apache.xmlbeans.impl.tool.XMLBean"
            classpathref="xmlbeans.path"/>
    </target>

    <!-- ========================== clean ==== -->

    <target name="clean">
        <delete dir="build"/>
    </target>

    <!-- ========================== build ==== -->

    <target name="build" depends="init,schemas.jar,SampleTemplate.classes">
    </target>

    <target name="schemas.check">
        <uptodate property="schemas.notRequired"
            targetfile="build/lib/schemas.jar">
            <srcfiles dir="schemas" includes="**/*.xsd"/>
        </uptodate>
    </target>

    <target name="schemas.jar" depends="init,schemas.check"
        unless="schemas.notRequired">
        <mkdir dir="build/lib"/>

        <xmlbean schema="schemas"
            destfile="build/lib/schemas.jar"
            srcgendir="build/src"
            classpathref="xmlbeans.path"
            debug="on"
            />
    </target>

    <target name="SampleTemplate.classes" depends="init">
        <mkdir dir="build/classes"/>

        <javac srcdir="src"
            destdir="build/classes"
            classpathref="SampleTemplate.path"
            debug="on"
            source="1.8"
            />
    </target>

    <!-- ========================== run ==== -->

    <target name="run" depends="init,build">
        <echo message="============================== running SampleTemplate"/>
        <java
            classname="org.apache.xmlbeans.samples.template.SampleTemplate"
            classpathref="SampleTemplate.path"
            fork="true">
            <arg line="xml/hello.xml"/>
            <arg line="xml/bad.xml"/>
        </java>
    </target>

    <!-- ========================== test ==== -->

    <target name="test" depends="init,build">
        <echo message="============================== testing SampleTemplate"/>
        <java
            classname="org.apache.xmlbeans.samples.template.SampleTemplateTest"
            classpathref="SampleTemplate.path"
            fork="true">
            <arg line="xml/hello.xml"/>
            <arg line="xml/bad.xml"/>
        </java>
    </target>

</project>
