<?xml version="1.0"?>
<!--
  *    build.xml
  *
  *    Copyright: 2000 Regents of the University of California
  *
  *   '$Author: sgarg $'
  *   '$Date: 2006-08-18 21:44:45 $'
  *   '$Revision: 1.9 $'
-->
<project name="utilities" default="usage" basedir=".">

  <target name="usage" depends="init">
    <exec executable="ant" dir="." vmlauncher="false">
      <arg line=" -projecthelp"/>
    </exec>
  </target>

  <target name="config">
    <property name="installdir" value="dist" />
    <property name="debuglevel" value="100"/>
    <!-- set the test that you want to run here -->
    <property name="testtorun" value="MonarchUtilTest.java"/>
  </target>

  <target name="init" depends="config">
      <property name="name" value="utilities"/>
      <property name="Name" value="Utilities"/>
      <property name="release" value="0.0.0"/>

      <filter token="release" value="${release}"/>

      <property name="srcdir" value="src/main/java" />
      <property name="libdir" value="lib" />
      <property name="testdir" value="src/test/java" />

      <property name="build.dir" value="./build"/>
      <property name="build.src" value="${build.dir}/src"/>
      <property name="build.dest" value="${build.dir}/classes"/>
      <property name="build.docs" value="${build.dir}/docs"/>
      <property name="build.samples" value="${build.dir}/samples"/>
      <property name="build.tests" value="${build.dir}/tests"/>
      <property name="build.data" value="${build.dir}/data"/>
      <property name="build.lib" value="${build.dir}/lib"/>
      <property name="build.javadocs" value="${build.dir}/docs/api"/>

      <property name="package.home" value="edu/ucsb/nceas" />

      <property name="dist.dir" value="dist"/>
      <property name="ver.dir" value="${dist.dir}/${name}-${release}"/>
      <property name="ver.src" value="${ver.dir}/src"/>

      <filter token="debuglevel" value="${debuglevel}"/>
      <filter token="installdir" value="${installdir}"/>
      <filter token="name" value="${name}"/>

      <!-- classpath jar files (including relative path from basedir) -->
      <property name="xmlapijar" value="${libdir}/xml-apis.jar" />
      <property name="xalanjar"  value="${libdir}/xalan.jar" />
<!--
      <property name="extresjar" value="${libdir}/ExternalResources.jar" />
-->
      <property name="xercesjar" value="${libdir}/xercesImpl.jar" />
      <property name="log4jjar"  value="${libdir}/log4j-1.2.8.jar" />
      <property name="httpjar"  value="${libdir}/httpclient.jar" />
      <property name="commonsiojar"  value="${libdir}/commons-io-1.4.jar" />
      <property name="junitjar"  value="${libdir}/junit-4.8.1.jar" />
  	
	<!-- for pdf export -->
		<property name="serializer" value="lib/serializer.jar"/>
		<property name="xml-apis" value="lib/xml-apis-xerces-2.9.1.jar"/>
		<property name="itext" value="lib/iText-2.0.8.jar"/>
		<property name="renderer" value="lib/core-renderer.jar"/>
		<property name="renderer-min" value="lib/core-renderer-minimal.jar"/>
		<property name="jtidy" value="lib/jtidy-r938.jar"/>

      <!-- CLASSPATH -->
      <property name="cpath"          
		value="${xercesjar}:${log4jjar}:${httpjar}:${xalanjar}:${xmlapijar}:${junitjar}:${commonsiojar}:${serializer}:${xml-apis}:${jtidy}:${itext}:${renderer}:${renderer-min}" />

      <echo message="classpath is:   ${cpath}"/>
 
    </target>

   <target name="prepare" depends="init">
      <mkdir dir="${build.dir}"/>
      <mkdir dir="${build.src}"/>
      <mkdir dir="${build.dest}"/>
      <mkdir dir="${build.lib}"/>
      <copy todir="${build.src}" filtering="yes">
        <fileset dir="${srcdir}">
          <include name="**/*.java"/>
          <include name="edu/**"/>
          <include name="com/**"/>
          <include name="org/**"/>
          <exclude name="**/CVS*"/>
          <exclude name="**/.#*"/>
          <exclude name="**/*.sql"/>
        </fileset>
      </copy>
   </target>

   <target name="compile" depends="prepare"
           description="compiles all the java classes">
      <javac srcdir="${build.src}"
             destdir="${build.dest}"
             classpath="${cpath}"
             debug="on"/>
   </target>

   <target name="jar" depends="compile"
           description="compiles and jars all the java classes">
      <delete file="${build.dir}/${name}.jar" />
      <copy todir="${build.dest}/${package.home}/${name}" filtering="no">
        <fileset dir="${srcdir}/${package.home}/${name}">
        </fileset>
      </copy>
      <jar jarfile="${build.dir}/${name}.jar">
        <fileset dir="${build.dest}">
          <include name="${package.home}/${name}/**" />
          <exclude name="**/*.java"/>
        </fileset>
      </jar>
   </target>

   <target name="install" depends="jar">
      <mkdir dir="${installdir}" />
   </target>

   <target name="jdoc" depends="init,prepare"
           description="creates javadoc documentation for all the java classes">
       <mkdir dir="${build.javadocs}" />
       <javadoc packagenames="edu.ucsb.nceas.*"
           sourcepath="src"
           destdir="${build.javadocs}"
           author="true"
           version="true"
           use="true"
           windowtitle="${Name} API"
           doctitle="&lt;h1&gt;${Name}&lt;/h1&gt;"
           bottom="&lt;i&gt;Copyright &#169; 2000 National Center for Ecological Analysis and Synthesis. All Rights Reserved.&lt;/i&gt;">
        <fileset dir="${build.src}">
          <include name="**/*.java"/>
          <exclude name="**/CVS*"/>
          <exclude name="**/.#*"/>
        </fileset>
       </javadoc>
   </target>

   <target name="clean" depends="init"
           description="deletes everything in the build directory">
       <delete dir="${build.dir}" />
   </target>

   <target name="buildtestjar" depends="clean,compile"
           description="copy and compile the tests into a jar file">
      <mkdir dir="${build.tests}"/>
      <copy todir="${build.tests}" filtering="yes">
        <fileset dir="${testdir}">
          <include name="**/*.java"/>
          <include name="**/*.xml"/>
          <exclude name="**/CVS*"/>
          <exclude name="**/.#*"/>
        </fileset>
      </copy>
      <javac srcdir="${build.tests}"
             destdir="${build.dest}"
             classpath="${cpath}"
             debug="on"/>

      <jar jarfile="${build.dir}/${name}-test.jar" basedir="${build.dest}">
        <fileset dir="${testdir}">
          <include name="${package.home}/${name}/**" />
          <exclude name="**/*.java"/>
        </fileset>
      </jar>

   </target>

   <target name="test" depends="buildtestjar"
           description="run all JUnit tests">

      <!-- use the ant "junit" task to run JUnit tests. -->
      <junit printsummary="withOutAndErr" haltonfailure="yes" fork="no"
             haltonerror="yes" newenvironment="true">
        <classpath>
          <pathelement path="${cpath}:${build.dir}/${name}-test.jar:${build.dir}/classes" />
        </classpath>

        <formatter type="plain"  usefile="false"/>

        <batchtest fork="true" todir="${build.dir}">
          <fileset dir="${build.dest}">
            <include name="**/*Test.class" />
          </fileset>
        </batchtest>
     </junit>
   </target>
   
   
    <!-- run one test -->
    <target name="onetest" depends="buildtestjar" 
            description="target to run only ONE of the junit tests - you will be prompted for the class name">
                                
      <input  message="Enter test class name (e.g. MyClassTest)"
              addproperty="test.class"/>
                    
      <junit printsummary="withOutAndErr" haltonfailure="true" fork="true"
             haltonerror="true" newenvironment="true">
        <classpath>
          <pathelement path="${cpath}" />
          <pathelement path="${build.dir}/${name}-test.jar" />
          <pathelement path="${build.dir}/classes" />
        </classpath>
                
        <formatter type="plain" usefile="false"/>

        <batchtest fork="true" todir="${build.dir}">
          <fileset dir="${build.dest}">
            <include name="**/${test.class}.class" />
          </fileset>
        </batchtest>
      </junit> 
    </target>


   <target name="dist" depends="jar,jdoc"
           description="jar all class files and documentation for distribution">
      <mkdir dir="${dist.dir}"/>
      <delete dir="${ver.dir}" />
      <mkdir dir="${ver.dir}"/>
      <copy todir="${ver.dir}">
        <fileset dir="."
            excludes="**/CVS* **/.#* **/src* **/test* **/build* **/docs* ${dist.dir}"/>
      </copy>
      <copy todir="${ver.dir}" file="build.xml"/>
      <copy todir="${ver.dir}/lib" file="${build.dir}/${name}.jar"/>

      <copy todir="${ver.dir}/docs" filtering="yes" failonerror="false">
        <fileset dir="docs" excludes="**/*gif **/*jpg **/*png" />
      </copy>
      <copy todir="${ver.dir}/docs" filtering="no" failonerror="false">
        <fileset dir="docs" includes="**/*gif **/*jpg **/*png" />
      </copy>
      <copy todir="${ver.dir}/docs/dev">
        <fileset dir="${build.dir}/docs"/>
      </copy>
      <copy todir="${ver.dir}/src">
        <fileset dir="${build.dir}/src"/>
      </copy>

      <delete dir="./${ver.dir}/${build.dir}"/>
      <delete dir="./${ver.dir}/dist"/>
      <delete file="./${name}-${release}.zip"/>
      <zip zipfile="./${name}-${release}.zip" basedir="${dist.dir}" excludes="${name}-${release}/src/**, ${name}-${release}/build/src/**"/>
      <delete file="./${name}-${release}.tar.gz" />
      <tar tarfile="./${name}-${release}.tar" basedir="${dist.dir}" excludes="${name}-${release}/src/**, ${name}-${release}/build/src/**"/>
      <gzip zipfile="./${name}-${release}.tar.gz"
                src="./${name}-${release}.tar"/>
      <delete file="./${name}-${release}.tar" />
  </target>

  <target name="distsrc" depends="dist"
           description="jar all source files for distribution">
      <mkdir dir="${ver.src}"/>
      <copy todir="${ver.src}">
        <fileset dir="./src"/>
      </copy>

      <delete file="./${name}-src-${release}.zip"/>
      <zip zipfile="./${name}-src-${release}.zip" basedir="${dist.dir}"/>
      <delete file="./${name}-src-${release}.tar.gz" />
      <tar tarfile="./${name}-src-${release}.tar" basedir="${dist.dir}"/>
      <gzip zipfile="./${name}-src-${release}.tar.gz"
                src="./${name}-src-${release}.tar"/>
      <delete file="./${name}-src-${release}.tar" />
      <delete dir="${dist.dir}"/>
  </target>

</project>