<!--
   Copyright 2001-2005 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="Digester" default="compile" basedir=".">


<!--
        "Digester" component of the Jakarta Commons Subproject
        $Id$
-->


<!-- ========== Initialize Properties ===================================== -->


  <property file="build.properties"/>                <!-- Component local   -->
  <property file="../build.properties"/>             <!-- Commons local     -->
  <property file="${user.home}/build.properties"/>   <!-- User local        -->


<!-- ========== External Dependencies ===================================== -->


  <!-- The directories corresponding to your necessary dependencies -->
  <property name="jaxp.home"               value="/usr/local/jaxp1.1"/>
  <property name="junit.home"              value="/usr/local/junit3.7"/>
  <property name="commons.home"            value=".."/>
  <property name="beanutils.home"          value="${commons.home}/beanutils"/>
  <property name="collections.home"        value="${commons.home}/collections"/>
  <property name="logging.home"            value="${commons.home}/logging"/>


<!-- ========== Derived Values ============================================ -->


  <!-- The locations of necessary jar files -->
  <property name="jaxp.jaxp.jar"           value="${jaxp.home}/jaxp.jar"/>
  <property name="jaxp.parser.jar"         value="${jaxp.home}/crimson.jar"/>
  <property name="junit.jar"               value="${junit.home}/junit.jar"/>
  <property name="commons-beanutils.api"   value="${beanutils.home}/dist/docs/api"/>
  <property name="commons-beanutils.jar"   value="${beanutils.home}/dist/commons-beanutils.jar"/>
  <property name="commons-collections.api" value="${collections.home}/dist/docs/api"/>
  <property name="commons-collections.jar" value="${collections.home}/dist/commons-collections.jar"/>
  <property name="commons-logging.api"     value="${logging.home}/dist/docs/api"/>
  <property name="commons-logging.jar"     value="${logging.home}/dist/commons-logging.jar"/>


<!-- ========== Component Declarations ==================================== -->


  <!-- The name of this component -->
  <property name="component.name"          value="digester"/>

  <!-- The primary package name of this component -->
  <property name="component.package"       value="org.apache.commons.digester"/>

  <!-- The title of this component -->
  <property name="component.title"         value="Digester - XML to Java Object Configuration"/>

  <!-- The current version number of this component -->
  <property name="component.version"       value="1.8-dev"/>

  <!-- The base directory for compilation targets -->
  <property name="build.home"              value="target"/>

  <!-- The base directory for component configuration files -->
  <property name="conf.home"               value="src/conf"/>

  <!-- The base directory for distribution targets -->
  <property name="dist.home"               value="dist"/>

  <!-- The base directory for component sources -->
  <property name="source.home"             value="src/java"/>

  <!-- The base directory for unit test sources -->
  <property name="test.home"               value="src/test"/>


<!-- ========== Compiler Defaults ========================================= -->


  <!-- Should Java compilations set the 'debug' compiler option? -->
  <property name="compile.debug"           value="true"/>

  <!-- Should Java compilations set the 'deprecation' compiler option? -->
  <property name="compile.deprecation"     value="false"/>

  <!-- Should Java compilations set the 'optimize' compiler option? -->
  <property name="compile.optimize"        value="true"/>

  <!-- Construct compile classpath -->
  <path id="compile.classpath">
    <pathelement location="${build.home}/classes"/>
    <pathelement location="${jaxp.jaxp.jar}"/>
    <pathelement location="${jaxp.parser.jar}"/>
    <pathelement location="${commons-beanutils.jar}"/>
    <pathelement location="${commons-collections.jar}"/>
    <pathelement location="${commons-logging.jar}"/>
    <pathelement location="${junit.jar}"/>
  </path>


<!-- ========== Test Execution Defaults =================================== -->

  <property name="suppressLogOutputDuringTests" value="true"/>
  <property name="log.factoryopt" value="org.apache.commons.logging.Log"/>
  <property name="log.noop" value="org.apache.commons.logging.impl.NoOpLog"/>
  <property name="log.class" value="${log.noop}"/>
  
  <!--
  <property name="logclass" value="org.apache.commons.logging.impl.NoOpLog"/>
  -->

  <!-- Construct unit test classpath -->
  <path id="test.classpath">
    <pathelement location="${build.home}/classes"/>
    <pathelement location="${build.home}/tests"/>
    <pathelement location="${junit.jar}"/>
    <pathelement location="${jaxp.jaxp.jar}"/>
    <pathelement location="${jaxp.parser.jar}"/>
    <pathelement location="${commons-beanutils.jar}"/>
    <pathelement location="${commons-collections.jar}"/>
    <pathelement location="${commons-logging.jar}"/>
  </path>

  <!-- Should all tests fail if one does? -->
  <property name="test.failonerror"        value="true"/>

  <!-- The test runner to execute -->
  <property name="test.runner"             value="junit.textui.TestRunner"/>


<!-- ========== Executable Targets ======================================== -->


  <target name="init"
   description="Initialize and evaluate conditionals">
    <echo message="-------- ${component.name} ${component.version} --------"/>
    <filter  token="name"                  value="${component.package}"/>
    <filter  token="version"               value="${component.version}"/>
  </target>


  <target name="prepare" depends="init"
   description="Prepare build directory">
    <mkdir dir="${build.home}"/>
    <mkdir dir="${build.home}/classes"/>
    <mkdir dir="${build.home}/conf"/>
    <mkdir dir="${build.home}/tests"/>
  </target>


  <target name="static" depends="prepare"
   description="Copy static files to build directory">
    <tstamp/>
    <copy  todir="${build.home}/conf" filtering="on">
      <fileset dir="${conf.home}" includes="*.MF"/>
    </copy>
  </target>


  <target name="compile" depends="static"
   description="Compile shareable components">
    <javac  srcdir="${source.home}"
           destdir="${build.home}/classes"
             debug="${compile.debug}"
       deprecation="${compile.deprecation}"
          optimize="${compile.optimize}">
      <classpath refid="compile.classpath"/>
    </javac>
    <copy    todir="${build.home}/classes" filtering="on">
      <fileset dir="${source.home}" excludes="**/*.java"/>
    </copy>
    <copy      file="LICENSE.txt"
              todir="${build.home}/classes/META-INF"/>
    <copy      file="NOTICE.txt"
              todir="${build.home}/classes/META-INF"/>
  </target>


  <target name="compile.tests" depends="compile"
   description="Compile unit test cases">
    <javac  srcdir="${test.home}"
           destdir="${build.home}/tests"
             debug="${compile.debug}"
       deprecation="${compile.deprecation}"
          optimize="${compile.optimize}">
      <classpath refid="test.classpath"/>
    </javac>
    <copy    todir="${build.home}/tests" filtering="on">
      <fileset dir="${test.home}" excludes="**/*.java"/>
    </copy>
  </target>


  <target name="compile.examples" depends="compile"
   description="Compile example code">
    <ant dir="src/examples/api" target="compile"/>
  </target>


  <target name="clean"
   description="Clean build and distribution directories">
    <delete    dir="${build.home}"/>
    <delete    dir="${dist.home}"/>
  </target>


  <target name="all" depends="clean,compile"
   description="Clean and compile all components"/>


  <target name="javadoc" depends="compile"
   description="Create component Javadoc documentation">
    <mkdir      dir="${dist.home}"/>
    <mkdir      dir="${dist.home}/docs"/>
    <mkdir      dir="${dist.home}/docs/api"/>
    <javadoc sourcepath="${source.home}"
                destdir="${dist.home}/docs/api"
           packagenames="org.apache.commons.*"
                 author="true"
                private="true"
                version="true"
               overview="src/java/overview.html"
               doctitle="&lt;h1&gt;${component.title} (Version ${component.version})&lt;/h1&gt;"
            windowtitle="${component.title} (Version ${component.version})"
                 bottom='Copyright 2001-2005 The Apache Software Foundation.'>
      <link     offline="true" packagelistLoc="${commons-beanutils.api}"
                   href="http://jakarta.apache.org/commons/beanutils/api/"/>
      <link     offline="true" packagelistLoc="${commons-collections.api}"
                   href="http://jakarta.apache.org/commons/collections/api/"/>
      <link     offline="true" packagelistLoc="${commons-logging.api}"
                   href="http://jakarta.apache.org/commons/logging/api/"/>
      <classpath  refid="compile.classpath"/>
    </javadoc>
  </target>


  <target name="dist" depends="compile,javadoc"
   description="Create binary distribution">
    <mkdir      dir="${dist.home}"/>
    <copy      file="LICENSE.txt"
              todir="${dist.home}"/>
    <mkdir      dir="${build.home}/classes/META-INF"/>
    <copy      file="RELEASE-NOTES.txt"
              todir="${dist.home}"/>
    <copy      file="NOTICE.txt"
              todir="${dist.home}"/>
    <jar    jarfile="${dist.home}/commons-${component.name}.jar"
            basedir="${build.home}/classes"
           manifest="${build.home}/conf/MANIFEST.MF"/>
  </target>


<!-- ========== Unit Test Targets ========================================= -->


  <target name="test" depends="compile.tests,
                               test.digester,
                               test.matching,
                               test.matching.extended,
                               test.rule,
                               test.callmethod,
                               test.objectparam,
                               test.bpsr,
                               test.spr,
                               test.xmlrules,
                               test.node,
                               test.factory,
                               test.regex,
                               test.wdrules,
                               test.plugins,
                               test.others,
                               test.substitution
                              "
   description="Run all unit test cases">
  </target>

  <target name="test.factory" depends="compile.tests"
   description="Run tests for loading Digester rules from XML ...">
    <echo message="Running factory create tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.TestFactoryCreate"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.xmlrules" depends="compile.tests"
   description="Run tests for loading Digester rules from XML ...">
    <echo message="Running xmlrules tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.xmlrules.DigesterLoaderTestSuite"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>


  <target name="test.bpsr" depends="compile.tests"
   description="Run tests for BeanPropertySetterRule ...">
    <echo message="Running BeanPropertySetterRule tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.BeanPropertySetterRuleTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>


  <target name="test.callmethod" depends="compile.tests"
   description="Run tests for CallMethodRule and CallParamRule ...">
    <echo message="Running CallMethodRule tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.CallMethodRuleTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.overlapping" depends="compile.tests"
   description="Run tests for OverlappingCallMethodRule...">
    <echo message="Running OverlappingCallMethodRule tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.OverlappingCallMethodRuleTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.objectparam" depends="compile.tests"
   description="Run tests for ObjectParamRule ...">
    <echo message="Running ObjectParamRule tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.ObjectParamRuleTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.digester" depends="compile.tests"
   description="Run basic Digester unit tests ...">
    <echo message="Running basic Digester tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.DigesterTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>


  <target name="test.matching" depends="compile.tests"
   description="Run rule Digester test cases">
    <echo message="Running rule Digester tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.RulesBaseTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.regex" depends="compile.tests"
   description="Run tests for RegexRules">
    <echo message="Running tests for RegexRules ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.RegexRulesTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.wdrules" depends="compile.tests"
   description="Run tests for WithDefaultsRulesWrapper">
    <echo message="Running tests for WithDefaultsRulesWrapper ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.WDRulesWrapperTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>
  
  <target name="test.matching.extended" depends="compile.tests"
   description="Run rule Digester extended test cases">
    <echo message="Running rule Digester tests for ExtendedBaseRules ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.EBRTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>


  <target name="test.rule" depends="compile.tests"
   description="Run rule Digester unit tests ...">
    <echo message="Running Rule tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.RuleTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.spr" depends="compile.tests"
   description="Run tests for SetPropertyRule ...">
    <echo message="Running SetPropertyRule tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.SetPropertyRuleTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.SetPropertiesRuleTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>


  <target name="test.node" depends="compile.tests"
          description="Run NodeCreateRule tests ...">
    <echo message="Running NodeCreateRule tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.NodeCreateRuleTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.plugins" depends="compile.tests"
          description="Run Plugins tests ...">
    <echo message="Running Plugins tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.plugins.TestAll"/>
      <classpath refid="test.classpath"/>
    </java>
  </target> 

  <target name="test.others" depends="compile.tests"
          description="Run Other tests ...">
    <echo message="Running Other tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.TestOthers"/>
      <classpath refid="test.classpath"/>
    </java>
  </target> 
  
  <target name="test.substitution" depends="compile.tests"
          description="Run Substitutions tests ...">
    <echo message="Running Substitutions tests ..."/>
    <condition property="logopt" value="${log.factoryopt}=${log.class}">
      <istrue value="${suppressLogOutputDuringTests}"/>
    </condition>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <jvmarg value="-D${logopt}"/>
      <arg value="org.apache.commons.digester.substitution.TestAll"/>
      <classpath refid="test.classpath"/>
    </java>
  </target> 

</project>
