<!--
   Copyright 2001-2004 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="Bean Utilities" default="compile" basedir=".">


<!--
        "Bean Utilities" component of the Jakarta Commons Subproject
        $Id: build.xml,v 1.59.2.3 2004/07/27 21:59:14 rdonkin Exp $
-->


<!-- ========== 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 home directory for the Commons collection classes distribution -->
  <property name="commons-logging.home" value="../logging/dist"/>

  <!-- The directory containing your binary distribution of JUnit,
       version 3.7 or later -->
  <property name="junit.home"              value="/usr/local/junit3.7"/>


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

  <!-- The pathname of the "junit.jar" JAR file -->
  <property name="junit.jar"               value="${junit.home}/junit.jar"/>


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


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

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

  <!-- The title of this component -->
  <property name="component.title"         value="Bean Introspection Utilities"/>

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

  <!-- 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="${commons-logging.jar}"/>
  </path>


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


  <!-- Construct unit test classpath -->
  <path id="test.classpath">
    <pathelement location="${build.home}/classes"/>
    <pathelement location="${build.home}/tests"/>
    <pathelement location="${commons-logging.jar}"/>
    <pathelement location="${junit.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"/>

  <!-- The Commons Logger LogFactory implementation to use -->
  <property name="test.factory"
           value="org.apache.commons.logging.impl.LogFactoryImpl"/>

  <!-- The Commons Logger Log implementation to use (standard factory) -->
  <property name="test.log"
           value="org.apache.commons.logging.impl.SimpleLog"/>

  <!-- The Commons Logger SimpleLog level for testing -->
  <property name="test.level"               value="error"/>

  <!-- Loop counter for microbenchmarks -->
  <property name="bench.counter"            value="100000"/>


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


  <target name="init"
   description="Initialize and evaluate conditionals">
    <echo message="-------- ${component.name} ${component.version} --------"/>
    <filter  token="name"                  value="${component.name}"/>
    <filter  token="package"               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>
  </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="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 (c) 2001-2004 - Apache Software Foundation">
      <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}"/>
    <copy      file="NOTICE.txt"
              todir="${dist.home}"/>
    <copy      file="RELEASE-NOTES.txt"
              todir="${dist.home}"/>
    <copy      file="README.txt"
              todir="${dist.home}"/>
    <antcall target="jar"/>
    <antcall target="bean-collections-dist"/>
  </target>


  <target name="jar" depends="compile"
   description="Create jar">
    <mkdir      dir="${dist.home}"/>
    <mkdir      dir="${build.home}/classes/META-INF"/>
    <copy      file="LICENSE.txt"
             tofile="${build.home}/classes/META-INF/LICENSE.txt"/>
    <copy      file="NOTICE.txt"
             tofile="${build.home}/classes/META-INF/NOTICE.txt"/>
    <jar    jarfile="${dist.home}/commons-beanutils.jar"
            basedir="${build.home}/classes"
           manifest="${build.home}/conf/MANIFEST.MF"/>
    <copy tofile='${dist.home}/commons-beanutils-core.jar' file='${dist.home}/commons-beanutils.jar'/>
  </target>


  <target name="install-jar" depends="jar"
   description="--> Installs jar file in ${lib.repo}">
    <copy todir="${lib.repo}" filtering="no">
      <fileset dir="${dist.home}">
        <include name="commons-${component.name}.jar"/>
      </fileset>
    </copy>
  </target>

<!-- ========== Sub Component Targets ===================================== -->

  <target name='bean-collections-dist'>
    <ant antfile='optional/bean-collections/build.xml' target='dist' inheritAll='false'/>
  </target>

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


  <target name="test"  depends="compile.tests,
                                test.basic.dynabean,
                                test.wrap.dynabean,
                                test.dyna.property,
                                test.property,
                                test.dyna.bean,
                                test.bean,
                                test.convert,
                                test.method,
                                test.dyna.result,
                                test.dyna.row,
                                test.locale.convert,
                                test.converters,
                                test.beanification,
                                test.lazy.dynaclass,
                                test.lazy.dynabean,
                                test.lazy.dynamap
                                "
   description="Run all unit test cases">
  </target>


  <target name="test.basic.dynabean" depends="compile.tests">
    <echo message="Running BasicDynaBean tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.BasicDynaBeanTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.wrap.dynabean" depends="compile.tests">
    <echo message="Running WrapDynaBean tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.WrapDynaBeanTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.dyna.property" depends="compile.tests">
    <echo message="Running DynaBean PropertyUtils tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.DynaPropertyUtilsTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.property" depends="compile.tests">
    <echo message="Running PropertyUtils tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.PropertyUtilsTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.dyna.bean" depends="compile.tests">
    <echo message="Running DynaBean BeanUtils tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.DynaBeanUtilsTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

 <target name="test.bean" depends="compile.tests">
    <echo message="Running BeanUtils tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.BeanUtilsTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

 <target name="test.convert" depends="compile.tests">
    <echo message="Running ConvertUtils tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.ConvertUtilsTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.method" depends="compile.tests">
    <echo message="Running MethodUtils tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.MethodUtilsTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.dyna.result" depends="compile.tests">
    <echo message="Running DynaBean ResultSet tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.DynaResultSetTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.dyna.row" depends="compile.tests">
    <echo message="Running DynaBean RowSet tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.DynaRowSetTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>
  
  <target name="test.locale.convert" depends="compile.tests">
    <echo message="Running Locale converters tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.locale.LocaleConvertTestSuite"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>
  
  
  <target name="test.converters" depends="compile.tests">
    <echo message="Running Converters tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.converters.ConverterTestSuite"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.lazy.dynaclass" depends="compile.tests">
    <echo message="Running LazyDynaClass tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.LazyDynaClassTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.lazy.dynabean" depends="compile.tests">
    <echo message="Running LazyDynaBean tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.LazyDynaBeanTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="test.lazy.dynamap" depends="compile.tests">
    <echo message="Running LazyDynaMap tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.LazyDynaMapTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>
  
  <target name="test.beanification" depends="compile.tests">
    <echo message="Running Beanification tests ..."/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <arg value="org.apache.commons.beanutils.BeanificationTestCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>


  <!-- ========== Microbenchmark Cases ===================================== -->


  <target name="bench"  depends="compile.tests,
                                 bench.BeanUtils,
                                 bench.PropertyUtils
                                "
   description="Execute microbenchmark cases"/>


  <target name="bench.BeanUtils" depends="compile.tests">
    <echo message="Running BeanUtils microbenchmarks"/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="counter"
                 value="${bench.counter}"/>
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.BeanUtilsBenchCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>

  <target name="bench.PropertyUtils" depends="compile.tests">
    <echo message="Running PropertyUtils microbenchmarks"/>
    <java classname="${test.runner}" fork="yes"
        failonerror="${test.failonerror}">
      <sysproperty key="counter"
                 value="${bench.counter}"/>
      <sysproperty key="org.apache.commons.logging.LogFactory"
                 value="${test.factory}"/>
      <sysproperty key="org.apache.commons.logging.Log"
                 value="${test.log}"/>
      <sysproperty key="org.apache.commons.logging.simplelog.defaultlog"
                 value="${test.level}"/>
      <arg value="org.apache.commons.beanutils.PropertyUtilsBenchCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>



</project>
