<?xml version="1.0"?>


<project name="Thinking in Java" default="run" basedir=".">

  <description>
  Main build.xml for "Thinking in Java, 3rd Edition"
  by Bruce Eckel
  Available at http://www.MindView.net
  See copyright notice in CopyRight.txt

  Ant must be downloaded from:
  http://jakarta.apache.org/ant

  Options:
  ant
    compiles and runs all examples
  ant build
    compiles but does not run the examples
  ant clean
    removes old class files
  </description>

  <!-- remove old errors.txt and check JDK version -->
  <target name="prepare">
    <delete file="errors.txt"/>
    <javac
      includes="CheckVersion.java"
      srcdir="com/bruceeckel/tools/"
    />
    <java
      taskname="CheckVersion"
      classname="com.bruceeckel.tools.CheckVersion"
      fork="true"
      failonerror="true"
    />
    <property name="JDK.version.ok" value="true"/>
  </target>

  <!-- builds all examples -->
  <target name="build" description="Compiles all the examples in the book">
    <ant
      antfile="${basedir}/simplifying/build.xml"
      target="simplifying.build"
      dir="${basedir}/simplifying"
      output="${basedir}/simplifying/log.txt"
    />
    <ant
      antfile="${basedir}/singleton/build.xml"
      target="singleton.build"
      dir="${basedir}/singleton"
      output="${basedir}/singleton/log.txt"
    />
    <ant
      antfile="${basedir}/proxy/build.xml"
      target="proxy.build"
      dir="${basedir}/proxy"
      output="${basedir}/proxy/log.txt"
    />
    <ant
      antfile="${basedir}/state/build.xml"
      target="state.build"
      dir="${basedir}/state"
      output="${basedir}/state/log.txt"
    />
    <ant
      antfile="${basedir}/com/build.xml"
      target="com.build"
      dir="${basedir}/com"
      output="${basedir}/com/log.txt"
    />
    <ant
      antfile="${basedir}/strategy/build.xml"
      target="strategy.build"
      dir="${basedir}/strategy"
      output="${basedir}/strategy/log.txt"
    />
    <ant
      antfile="${basedir}/templatemethod/build.xml"
      target="templatemethod.build"
      dir="${basedir}/templatemethod"
      output="${basedir}/templatemethod/log.txt"
    />
    <ant
      antfile="${basedir}/factory/build.xml"
      target="factory.build"
      dir="${basedir}/factory"
      output="${basedir}/factory/log.txt"
    />
    <ant
      antfile="${basedir}/builder/build.xml"
      target="builder.build"
      dir="${basedir}/builder"
      output="${basedir}/builder/log.txt"
    />
    <ant
      antfile="${basedir}/flyweight/build.xml"
      target="flyweight.build"
      dir="${basedir}/flyweight"
      output="${basedir}/flyweight/log.txt"
    />
    <ant
      antfile="${basedir}/decorator/build.xml"
      target="decorator.build"
      dir="${basedir}/decorator"
      output="${basedir}/decorator/log.txt"
    />
    <ant
      antfile="${basedir}/adapter/build.xml"
      target="adapter.build"
      dir="${basedir}/adapter"
      output="${basedir}/adapter/log.txt"
    />
    <ant
      antfile="${basedir}/bridge/build.xml"
      target="bridge.build"
      dir="${basedir}/bridge"
      output="${basedir}/bridge/log.txt"
    />
    <ant
      antfile="${basedir}/composite/build.xml"
      target="composite.build"
      dir="${basedir}/composite"
      output="${basedir}/composite/log.txt"
    />
    <ant
      antfile="${basedir}/observer/build.xml"
      target="observer.build"
      dir="${basedir}/observer"
      output="${basedir}/observer/log.txt"
    />
    <ant
      antfile="${basedir}/facade/build.xml"
      target="facade.build"
      dir="${basedir}/facade"
      output="${basedir}/facade/log.txt"
    />
    <ant
      antfile="${basedir}/command/build.xml"
      target="command.build"
      dir="${basedir}/command"
      output="${basedir}/command/log.txt"
    />
    <ant
      antfile="${basedir}/chainofresponsibility/build.xml"
      target="chainofresponsibility.build"
      dir="${basedir}/chainofresponsibility"
      output="${basedir}/chainofresponsibility/log.txt"
    />
    <ant
      antfile="${basedir}/multipledispatch/build.xml"
      target="multipledispatch.build"
      dir="${basedir}/multipledispatch"
      output="${basedir}/multipledispatch/log.txt"
    />
    <ant
      antfile="${basedir}/visitor/build.xml"
      target="visitor.build"
      dir="${basedir}/visitor"
      output="${basedir}/visitor/log.txt"
    />
    <ant
      antfile="${basedir}/statemachine/build.xml"
      target="statemachine.build"
      dir="${basedir}/statemachine"
      output="${basedir}/statemachine/log.txt"
    />
    <ant
      antfile="${basedir}/statemachine2/build.xml"
      target="statemachine2.build"
      dir="${basedir}/statemachine2"
      output="${basedir}/statemachine2/log.txt"
    />
    <ant
      antfile="${basedir}/refactor/build.xml"
      target="refactor.build"
      dir="${basedir}/refactor"
      output="${basedir}/refactor/log.txt"
    />
    <ant
      antfile="${basedir}/projects/build.xml"
      target="projects.build"
      dir="${basedir}/projects"
      output="${basedir}/projects/log.txt"
    />
    <available file="errors.txt" property="errors"/>
    <antcall target="finish"/>
  </target>

  <!-- forces all tests -->
  <target name="test" description="Compiles and runs all the examples in the book">
    <ant
      antfile="${basedir}/simplifying/build.xml"
      target="test"
      dir="${basedir}/simplifying"
      output="${basedir}/simplifying/log.txt"
    />
    <ant
      antfile="${basedir}/singleton/build.xml"
      target="test"
      dir="${basedir}/singleton"
      output="${basedir}/singleton/log.txt"
    />
    <ant
      antfile="${basedir}/proxy/build.xml"
      target="test"
      dir="${basedir}/proxy"
      output="${basedir}/proxy/log.txt"
    />
    <ant
      antfile="${basedir}/state/build.xml"
      target="test"
      dir="${basedir}/state"
      output="${basedir}/state/log.txt"
    />
    <ant
      antfile="${basedir}/com/build.xml"
      target="test"
      dir="${basedir}/com"
      output="${basedir}/com/log.txt"
    />
    <ant
      antfile="${basedir}/strategy/build.xml"
      target="test"
      dir="${basedir}/strategy"
      output="${basedir}/strategy/log.txt"
    />
    <ant
      antfile="${basedir}/templatemethod/build.xml"
      target="test"
      dir="${basedir}/templatemethod"
      output="${basedir}/templatemethod/log.txt"
    />
    <ant
      antfile="${basedir}/factory/build.xml"
      target="test"
      dir="${basedir}/factory"
      output="${basedir}/factory/log.txt"
    />
    <ant
      antfile="${basedir}/builder/build.xml"
      target="test"
      dir="${basedir}/builder"
      output="${basedir}/builder/log.txt"
    />
    <ant
      antfile="${basedir}/flyweight/build.xml"
      target="test"
      dir="${basedir}/flyweight"
      output="${basedir}/flyweight/log.txt"
    />
    <ant
      antfile="${basedir}/decorator/build.xml"
      target="test"
      dir="${basedir}/decorator"
      output="${basedir}/decorator/log.txt"
    />
    <ant
      antfile="${basedir}/adapter/build.xml"
      target="test"
      dir="${basedir}/adapter"
      output="${basedir}/adapter/log.txt"
    />
    <ant
      antfile="${basedir}/bridge/build.xml"
      target="test"
      dir="${basedir}/bridge"
      output="${basedir}/bridge/log.txt"
    />
    <ant
      antfile="${basedir}/composite/build.xml"
      target="test"
      dir="${basedir}/composite"
      output="${basedir}/composite/log.txt"
    />
    <ant
      antfile="${basedir}/observer/build.xml"
      target="test"
      dir="${basedir}/observer"
      output="${basedir}/observer/log.txt"
    />
    <ant
      antfile="${basedir}/facade/build.xml"
      target="test"
      dir="${basedir}/facade"
      output="${basedir}/facade/log.txt"
    />
    <ant
      antfile="${basedir}/command/build.xml"
      target="test"
      dir="${basedir}/command"
      output="${basedir}/command/log.txt"
    />
    <ant
      antfile="${basedir}/chainofresponsibility/build.xml"
      target="test"
      dir="${basedir}/chainofresponsibility"
      output="${basedir}/chainofresponsibility/log.txt"
    />
    <ant
      antfile="${basedir}/multipledispatch/build.xml"
      target="test"
      dir="${basedir}/multipledispatch"
      output="${basedir}/multipledispatch/log.txt"
    />
    <ant
      antfile="${basedir}/visitor/build.xml"
      target="test"
      dir="${basedir}/visitor"
      output="${basedir}/visitor/log.txt"
    />
    <ant
      antfile="${basedir}/statemachine/build.xml"
      target="test"
      dir="${basedir}/statemachine"
      output="${basedir}/statemachine/log.txt"
    />
    <ant
      antfile="${basedir}/statemachine2/build.xml"
      target="test"
      dir="${basedir}/statemachine2"
      output="${basedir}/statemachine2/log.txt"
    />
    <ant
      antfile="${basedir}/refactor/build.xml"
      target="test"
      dir="${basedir}/refactor"
      output="${basedir}/refactor/log.txt"
    />
    <ant
      antfile="${basedir}/projects/build.xml"
      target="test"
      dir="${basedir}/projects"
      output="${basedir}/projects/log.txt"
    />
    <available file="errors.txt" property="errors"/>
    <antcall target="finish"/>
  </target>

  <!-- runs all untested examples -->
  <target name="run" description="Compiles and runs all untested examples in the book">
    <ant
      antfile="${basedir}/simplifying/build.xml"
      dir="${basedir}/simplifying"
      output="${basedir}/simplifying/log.txt"
    />
    <ant
      antfile="${basedir}/singleton/build.xml"
      dir="${basedir}/singleton"
      output="${basedir}/singleton/log.txt"
    />
    <ant
      antfile="${basedir}/proxy/build.xml"
      dir="${basedir}/proxy"
      output="${basedir}/proxy/log.txt"
    />
    <ant
      antfile="${basedir}/state/build.xml"
      dir="${basedir}/state"
      output="${basedir}/state/log.txt"
    />
    <ant
      antfile="${basedir}/com/build.xml"
      dir="${basedir}/com"
      output="${basedir}/com/log.txt"
    />
    <ant
      antfile="${basedir}/strategy/build.xml"
      dir="${basedir}/strategy"
      output="${basedir}/strategy/log.txt"
    />
    <ant
      antfile="${basedir}/templatemethod/build.xml"
      dir="${basedir}/templatemethod"
      output="${basedir}/templatemethod/log.txt"
    />
    <ant
      antfile="${basedir}/factory/build.xml"
      dir="${basedir}/factory"
      output="${basedir}/factory/log.txt"
    />
    <ant
      antfile="${basedir}/builder/build.xml"
      dir="${basedir}/builder"
      output="${basedir}/builder/log.txt"
    />
    <ant
      antfile="${basedir}/flyweight/build.xml"
      dir="${basedir}/flyweight"
      output="${basedir}/flyweight/log.txt"
    />
    <ant
      antfile="${basedir}/decorator/build.xml"
      dir="${basedir}/decorator"
      output="${basedir}/decorator/log.txt"
    />
    <ant
      antfile="${basedir}/adapter/build.xml"
      dir="${basedir}/adapter"
      output="${basedir}/adapter/log.txt"
    />
    <ant
      antfile="${basedir}/bridge/build.xml"
      dir="${basedir}/bridge"
      output="${basedir}/bridge/log.txt"
    />
    <ant
      antfile="${basedir}/composite/build.xml"
      dir="${basedir}/composite"
      output="${basedir}/composite/log.txt"
    />
    <ant
      antfile="${basedir}/observer/build.xml"
      dir="${basedir}/observer"
      output="${basedir}/observer/log.txt"
    />
    <ant
      antfile="${basedir}/facade/build.xml"
      dir="${basedir}/facade"
      output="${basedir}/facade/log.txt"
    />
    <ant
      antfile="${basedir}/command/build.xml"
      dir="${basedir}/command"
      output="${basedir}/command/log.txt"
    />
    <ant
      antfile="${basedir}/chainofresponsibility/build.xml"
      dir="${basedir}/chainofresponsibility"
      output="${basedir}/chainofresponsibility/log.txt"
    />
    <ant
      antfile="${basedir}/multipledispatch/build.xml"
      dir="${basedir}/multipledispatch"
      output="${basedir}/multipledispatch/log.txt"
    />
    <ant
      antfile="${basedir}/visitor/build.xml"
      dir="${basedir}/visitor"
      output="${basedir}/visitor/log.txt"
    />
    <ant
      antfile="${basedir}/statemachine/build.xml"
      dir="${basedir}/statemachine"
      output="${basedir}/statemachine/log.txt"
    />
    <ant
      antfile="${basedir}/statemachine2/build.xml"
      dir="${basedir}/statemachine2"
      output="${basedir}/statemachine2/log.txt"
    />
    <ant
      antfile="${basedir}/refactor/build.xml"
      dir="${basedir}/refactor"
      output="${basedir}/refactor/log.txt"
    />
    <ant
      antfile="${basedir}/projects/build.xml"
      dir="${basedir}/projects"
      output="${basedir}/projects/log.txt"
    />
    <available file="errors.txt" property="errors"/>
    <antcall target="finish"/>
  </target>

  <!-- delete all class files -->
  <target name="clean" description="Removes all old class files">
    <ant
      antfile="${basedir}/simplifying/build.xml"
      target="clean"
      dir="${basedir}/simplifying"
    />
    <ant
      antfile="${basedir}/singleton/build.xml"
      target="clean"
      dir="${basedir}/singleton"
    />
    <ant
      antfile="${basedir}/proxy/build.xml"
      target="clean"
      dir="${basedir}/proxy"
    />
    <ant
      antfile="${basedir}/state/build.xml"
      target="clean"
      dir="${basedir}/state"
    />
    <ant
      antfile="${basedir}/com/build.xml"
      target="clean"
      dir="${basedir}/com"
    />
    <ant
      antfile="${basedir}/strategy/build.xml"
      target="clean"
      dir="${basedir}/strategy"
    />
    <ant
      antfile="${basedir}/templatemethod/build.xml"
      target="clean"
      dir="${basedir}/templatemethod"
    />
    <ant
      antfile="${basedir}/factory/build.xml"
      target="clean"
      dir="${basedir}/factory"
    />
    <ant
      antfile="${basedir}/builder/build.xml"
      target="clean"
      dir="${basedir}/builder"
    />
    <ant
      antfile="${basedir}/flyweight/build.xml"
      target="clean"
      dir="${basedir}/flyweight"
    />
    <ant
      antfile="${basedir}/decorator/build.xml"
      target="clean"
      dir="${basedir}/decorator"
    />
    <ant
      antfile="${basedir}/adapter/build.xml"
      target="clean"
      dir="${basedir}/adapter"
    />
    <ant
      antfile="${basedir}/bridge/build.xml"
      target="clean"
      dir="${basedir}/bridge"
    />
    <ant
      antfile="${basedir}/composite/build.xml"
      target="clean"
      dir="${basedir}/composite"
    />
    <ant
      antfile="${basedir}/observer/build.xml"
      target="clean"
      dir="${basedir}/observer"
    />
    <ant
      antfile="${basedir}/facade/build.xml"
      target="clean"
      dir="${basedir}/facade"
    />
    <ant
      antfile="${basedir}/command/build.xml"
      target="clean"
      dir="${basedir}/command"
    />
    <ant
      antfile="${basedir}/chainofresponsibility/build.xml"
      target="clean"
      dir="${basedir}/chainofresponsibility"
    />
    <ant
      antfile="${basedir}/multipledispatch/build.xml"
      target="clean"
      dir="${basedir}/multipledispatch"
    />
    <ant
      antfile="${basedir}/visitor/build.xml"
      target="clean"
      dir="${basedir}/visitor"
    />
    <ant
      antfile="${basedir}/statemachine/build.xml"
      target="clean"
      dir="${basedir}/statemachine"
    />
    <ant
      antfile="${basedir}/statemachine2/build.xml"
      target="clean"
      dir="${basedir}/statemachine2"
    />
    <ant
      antfile="${basedir}/refactor/build.xml"
      target="clean"
      dir="${basedir}/refactor"
    />
    <ant
      antfile="${basedir}/projects/build.xml"
      target="clean"
      dir="${basedir}/projects"
    />
    <delete>
      <fileset dir="${basedir}" includes="**/log.txt"/>
      <fileset dir="${basedir}" includes="errors.txt"/>
    </delete>
    <echo message="clean successful"/>
  </target>

  <!-- checks for erors -->
  <target name="finish" if="errors">
    <echo message="Errors occurred.  See errors.txt for information."/>
  </target>
</project>
