<project name="workshop-toolset" default="gui.db" >

    <description>Hibernate Workshops: Toolset</description>

    <!-- ################################################ -->
    <!--                   SETTINGS                       -->
    <!-- ################################################ -->

    <property name="src.dir" location="src"/>
    <property name="gensrc.dir" location="gensrc"/>
    <property name="build.dir" location="classes"/>

    <path id="libs">
        <fileset dir="lib">
            <include name="**/*.jar"/>
            <include name="**/*.zip"/>
        </fileset>
    </path>

    <property name="db.url" value="jdbc:hsqldb:${basedir}/database/toolset.db"/>

    <!-- ################################################ -->
    <!--                    TASKS                         -->
    <!-- ################################################ -->

    <taskdef name="hibernatedoclet"
        classname="xdoclet.modules.hibernate.HibernateDocletTask"
        classpathref="libs"/>

    <taskdef name="hbm2java"
        classname="net.sf.hibernate.tool.hbm2java.Hbm2JavaTask"
        classpathref="libs"/>

    <taskdef name="middlegen"
        classname="middlegen.MiddlegenTask"
        classpathref="libs"/>

    <taskdef name="schemaexport"
        classname="net.sf.hibernate.tool.hbm2ddl.SchemaExportTask">
        <classpath refid="libs"/>
        <classpath path="${build.dir}"/>
    </taskdef>

    <!-- ################################################ -->
    <!--                  TARGETS                         -->
    <!-- ################################################ -->

    <target name="clean"
        description="Delete all generated demo files.">

        <delete dir="${gensrc.dir}/org"/>
        <delete dir="${build.dir}/org"/>
        <delete file="${basedir}/velocity.log"/>
        <delete file="${basedir}/Toolset-prefs.properties"/>
        <delete>
            <fileset dir="${src.dir}">
                <include name="**/*.hbm.xml"/>
            </fileset>
        </delete>
        <delete file="${basedir}/schema-export.sql"/>

    </target>

    <!-- ################################################ -->

    <target name="topdown.xdoclet"
        description="Generates Hibernate mapping files with XDoclet.">

        <hibernatedoclet
            destdir="${src.dir}"
            excludedtags="@version,@author,@todo"
            force="true"
            mergedir="${build.dir}"
            verbose="false">

            <fileset dir="${src.dir}">
                <include name="**/*.java"/>
            </fileset>

            <hibernate version="2.0"/>

        </hibernatedoclet>

    </target>

    <!-- ################################################ -->

    <target name="topdown.hbm2ddl"
        description="Generates DB schema with hbm2ddl."
        depends="topdown.xdoclet">

        <!-- build from source -->
        <javac
            srcdir="${src.dir}"
            destdir="${build.dir}"
            classpathref="libs"
            nowarn="off">
        </javac>

        <!-- copy Hibernate mapping metadata -->
        <copy todir="${build.dir}">
            <fileset dir="${src.dir}">
                <include name="**/*.hbm.xml"/>
            </fileset>
        </copy>

        <!-- generate and export DB schema -->
        <schemaexport
            config="/hibernate.cfg.xml"
            quiet="yes"
            text="yes"
            drop="no"
            delimiter=";"
            output="schema-export.sql"/>

    </target>

    <!-- ################################################ -->

    <target
        name="bottomup.middlegen"
        description="Run Middlegen and generate Hibernate mapping files.">

        <middlegen
            appname="Toolset"
            prefsdir="${basedir}"
            gui="true"
            databaseurl="${db.url}"
            driver="org.hsqldb.jdbcDriver"
            username="SA">

            <hibernate
                destination="${gensrc.dir}"
                package="org.hibernate.workshop.toolset"/>

        </middlegen>

    </target>

    <!-- ################################################ -->

    <target name="bottomup.hbm2java"
        description="Generate .java from .hbm files.">

        <hbm2java config="${build.dir}/hibernate.cfg.xml"
            output="${gensrc.dir}">

            <fileset dir="${gensrc.dir}">
                <include name="**/*.hbm.xml"/>
            </fileset>
        </hbm2java>

    </target>

    <!-- ################################################ -->

    <target name="gui.hibernate"
        description="Run hibern8ide for ad-hoc queries.">

        <!-- copy Hibernate mapping metadata -->
        <copy todir="${build.dir}">
            <fileset dir="${gensrc.dir}">
                <include name="**/*.hbm.xml"/>
            </fileset>
        </copy>

        <!-- build from generated source -->
        <javac
            srcdir="${gensrc.dir}"
            destdir="${build.dir}"
            classpathref="libs"
            nowarn="off"
            fork="yes" >
        </javac>

        <!-- run Hibernate IDE -->
        <java
            classname="net.sf.hibern8ide.Hibern8IDE"
            fork="yes"
            failonerror="true">
            <classpath refid="libs"/>
            <classpath path="${build.dir}"/>
        </java>
    </target>

    <!-- ################################################ -->

    <target name="gui.db"
        description="Brings up the hsqldb admin tool.">
        <property name="database.urlparams" value="?user=SA&amp;password="/>
        <java
            classname="org.hsqldb.util.DatabaseManager"
            fork="yes"
            classpathref="libs"
            failonerror="true">
            <arg value="-url"/>
            <arg value="${db.url}"/>
            <arg value="-driver"/>
            <arg value="org.hsqldb.jdbcDriver"/>
        </java>
    </target>

</project>
