<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You 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$

  The most useful targets in this build file are:
    * compile
    * test (includes preceding target)
    * dist (includes preceding targets)

  Before running any targets it is necessary to indicate where all required
  libraries can be found on the local system. See file "build.properties.sample"
  for more information.

  Alternately, use maven 2.x or maven 1.x instead of Ant; the appropriate files
  are provided by this project to download necessary dependencies automatically.
-->


<!-- ========== 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="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-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"/>

  <!-- 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-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-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}">
      <compilerarg compiler="jikes" value="+Pno-shadow"/>
      <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}">
      <compilerarg compiler="jikes" value="+Pno-shadow"/>
      <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-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,
                               test.url
                              "
   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> 

  <target name="test.url" depends="compile.tests"
   description="Run Digester URL based unit tests ...">
    <echo message="Running Digester URL based 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.URLTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

</project>
