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

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