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


<!--
        "Bean Utilities" component of the Apache Commons Subproject
        $Id$
-->


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


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


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

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

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

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

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

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


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


  <!-- Compiler source JDK version -->
  <property name="compile.source"          value="1.7"/>

  <!-- Compiler target JDK version -->
  <property name="compile.target"          value="1.7"/>

  <!-- 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}"/>
    <pathelement location="${commons-collections.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-collections.jar}"/>
    <pathelement location="${commons-collections-testframework.jar}"/>
    <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"/>
    <tstamp/>
  </target>


  <target name="compile" depends="prepare"
   description="Compile shareable components">
    <javac  srcdir="${source.home}"
           destdir="${build.home}/classes"
            source="${compile.source}"
            target="${compile.target}"
             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) 2000-2008 - 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.md"
              todir="${dist.home}"/>
    <antcall target="jar"/>
  </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-${component.version}.jar">
        <manifest>
            <attribute name="Built-By" value="${user.name}"/>
            <attribute name="Specification-Title" value="Commons BeanUtils"/>
            <attribute name="Specification-Version" value="${component.version}"/>
            <attribute name="Specification-Vendor" value="The Apache Software Foundation"/>
            <attribute name="Implementation-Title" value="Commons BeanUtils"/>
            <attribute name="Implementation-Version" value="${component.version}"/> 
            <attribute name="Implementation-Vendor" value="The Apache Software Foundation"/>
            <attribute name="Implementation-Vendor-Id" value="org.apache"/>
            <attribute name="X-Compile-Source-JDK" value="${compile.source}"/>
            <attribute name="X-Compile-Target-JDK" value="${compile.target}"/>
            <attribute name="Automatic-Module-Name" value="org.apache.commons.beanutils2"/>
        </manifest>
        <fileset dir="${build.home}/classes">
            <include name="**/*.class"/>
            <include name="**/LICENSE.txt"/>
            <include name="**/NOTICE.txt"/>
        </fileset>
    </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>

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


 <target name="test" depends="compile.tests"
   description="Run all unit test cases">
      <junit printsummary="true" showoutput="true" fork="yes" haltonfailure="${test.failonerror}"
        maxmemory="25m">
        <classpath refid="test.classpath"/>
        <batchtest>
          <fileset dir="${test.home}">
            <include name="**/*TestCase.java"/>
            <exclude name="**/*MemoryTestCase.java"/>
            <exclude name="**/MemoryLeakTestCase.java"/>
          </fileset>
        </batchtest>
      </junit>
  </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.beanutils2.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.beanutils2.PropertyUtilsBenchCase"/>
      <classpath refid="test.classpath"/>
    </java>
  </target>



</project>
