<!--
 * 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.
-->

<!--
   This file is designed to be imported by build.xml files to provide
   definitions for a default set of build targets.  The build.xml file
   can include additional definitions to configure the behavior of these
   default targets.  The build.xml file can also define any additional
   targets that are needed by the project.

   This build file has been tested with JDK 5 update 22 and JDK 6 update 7.

   When invoking a build.xml file that imports this file, the following
   environment variable must be set:
     TUSCANY_HOME A directory containing the Tuscany SCA binary distribution.
       This build file has been tested with Tuscany SCA version 1.6.

   When building from a svn checkout (but not when building from a downloaded
   distribution), the following environment variables must be set:
     JUNIT_JAR The location of the JUnit jar file.  This build file has
       been tested with JUnit version 4.5.
     JAXWS_HOME (only if using JDK 5) A directory containing the JAX-WS
       reference implementation.  This build file has been tested with
       the JAX-WS RI version 2.1.7.
     OPENEJB_HOME A directory containing the OpenEJB binary distribution.
       This build file has been tested with OpenEJB 3.1.2.

   This file defines the following targets that can be used on the
   ant command that invokes the build.xml file:
     "compile" Compiles any Java source files that don't have an up-to-date
       class file, and copies any files in or under the src/main/resources
       directory.  If the build.xml file contains a <path> element with the
       id "compile-path", the contents of this path are added to the
       compiler's classpath.  Also invokes the following targets:
       . "wsdljava" (defined in the build.xml file) if there are any
           .wsdl files in or under the resource directory
       . "idljava" (defined in the build.xml file) if there are any
           .idl files in or under the resource directory
       . "test" if there are any files in or under the src/test/java
           directory
       . "package" if all previous steps completed successfully
       If the build.xml file defines the "run-update-resources" property,
       the "update-resources" target in the build.xml file is invoked after
       copying resources.
     "test" Compiles any Java unit test files that don't have an
       up-to-date class file, copies any test resources in or under the
       src/test/resources directory, and runs the unit tests.  If the
       build.xml file contains a <path> element with the id "test-path",
       the contents of this path are used for compiling and running
       unit tests.  In addition, the "compile-path" setting (if specified)
       is used for running unit tests.  If the build.xml file defines the
       "run-update-test-resources" property, the "update-test-resources"
       target in the build.xml file is invoked after copying test resources.
     "package" Creates a jar file containing the compiled Java class
       files (excluding unit test code) and any files in or under the
       resource directory, unless the jar file is already up to date.
       The contents of the jar file are taken from the target/classes
       directory unless the target/jar-classes directory exists, in which
       case this directory is used in preference to target/classes.  If the
       build.xml file defines a property named "package-path", a Class-Path
       manifest entry is created and set to the value of this property.  
     "clean" Deletes all the files produced by the build.

   This file also defines the following targets for invocation by <antcall>
   from the build.xml file:
     "wsimport" Generates Java code from a WSDL file (unless the Java code
       is already up to date) by running the wsimport command (on JDK 6)
       or by calling the equivalent class in the JAX-WS RI (on JDK 5).
       Requires the following parameters:
       . <package> the Java package to use for generated code
       . <wsdlfile> the filename of the WSDL file
       . <javaclass> the filename of any Java class file that will be
           generated by running this target on the WSDL file
     "sdojavagen" Generates Java code from a WSDL file (unless the Java
       code is already up to date) by running the SDO XSD2JavaGenerator.
       Requires the same parameters as <wsimport>, plus the following:
       . <prefix> the prefix string for naming the generated factory
     "idlj" Generates Java code from a CORBA IDL file (unless the Java
       code is already up to date) by running the JDK idlj command.
       Requires the following parameters:
       . <idljopts> the options to be used on this idlj command invocation
       . <idlfile> the filename of the IDL file
       . <javaclass> the filename of any Java class file that will be
           generated by running this target for this IDL file
     "add-implementation-web" Adds implementation.web support to the
       installed Tuscany SCA binary distribution if not already there.

   This file also defines the following targets for use with the "depends"
   attribute on targets in the build.xml file:
     "locate-openejb" Locates the OpenEJB dependencies needed by some
       modules and creates a path with id "openejb-path" to bring in
       these dependencies.
     "locate-jaxws" Locates the JAX-WS dependencies needed by some modules
       when running on JDK 5, and creates a path with id "jaxws-path"
       to bring in these dependencies.

   All other targets defined by this file (with names starting with "#")
   are for internal use within this file and should not be used externally.
-->

<project name="antdefs">
    <property environment="env"/> 
    <fail unless="env.TUSCANY_HOME">
        Error: Please set the TUSCANY_HOME environment variable.
    </fail>

    <!-- check whether there are any WSDL files in or under the resource directory -->
    <target name="#find-wsdlfiles">
        <fileset id="#allwsdl" dir="src/main/resources">
            <include name="**/*.wsdl"/>
        </fileset>
        <condition property="#wsdlfiles">
            <and>
                <available file="src/main/resources" type="dir"/>
                <resourcecount refid="#allwsdl" when="greater" count="0"/>
            </and>
        </condition>
    </target>

    <!-- call the wsdljava target in the build.xml file if required -->
    <target name="#call-wsdljava" depends="#find-wsdlfiles" if="#wsdlfiles">
        <antcall target="wsdljava"/>
    </target>

    <!-- check whether the WSDL-generated Java code is already up to date -->
    <target name="#wsdlcheck">
        <condition property="#wsdl-uptodate">
            <uptodate srcfile="src/main/resources/${wsdlfile}"
                      targetfile="target/classes/${javaclass}"/>
        </condition>
    </target>

    <!-- run the wsimport command if required -->
    <target name="wsimport" depends="#wsdlcheck" unless="#wsdl-uptodate">
        <antcall target="#wsimport"/>
	</target>

    <!-- check whether the wsimport command is available in the JDK -->
    <target name="#is-jdk-wsimport">
        <condition property="#jdk-wsimport">
            <or>
                <available file="${java.home}/../bin/wsimport" type="file"/>
                <available file="${java.home}/../bin/wsimport.exe" type="file"/>
            </or>
        </condition>
    </target>

    <!-- run the JDK wsimport command if available, then compile the generated Java source -->
    <target name="#wsimport-jdk" if="#jdk-wsimport">
        <property name="#jaxws-tools-dir" value=""/>
        <mkdir dir="target/jaxws-source"/>
        <exec executable="${java.home}/../bin/wsimport" dir="." failonerror="true">
            <arg line="-keep -s ./target/jaxws-source -p ${package} 
                       -Xnocompile src/main/resources/${wsdlfile}"/>
        </exec>
        <javac destdir="target/classes" debug="true" source="1.5" target="1.5">
            <src path="target/jaxws-source"/>
        </javac>
    </target>

    <!-- If building a downloaded distribution, the JAX-WS jars are in lib/jaxws -->
    <target name="#lib-jaxws-tools" unless="#jdk-wsimport">
        <condition property="#jaxws-tools-dir" value="../../../lib/jaxws">
            <available file="../../../lib/jaxws" type="dir"/>
        </condition>
    </target>

    <!-- Set the path as the JAX-WS directory and the Tuscany runtime -->
    <target name="#tuscany-jaxws-tools" if="#jaxws-tools-dir">
        <path id="#jaxws-tools-path">
            <fileset dir="${#jaxws-tools-dir}"/>
            <fileset dir="${env.TUSCANY_HOME}/lib"/>
        </path>
    </target>

    <!-- If JAX-WS jars not found in lib, try the JAXWS_HOME environment variable -->
    <target name="#env-jaxws-tools" unless="#jaxws-tools-dir">
        <condition property="#jaxws-tools-home" value="${env.JAXWS_HOME}/lib">
            <available file="${env.JAXWS_HOME}/lib" type="dir"/>
        </condition>
    </target>

    <!-- Set the path as the JAXWS_HOME directory -->
    <target name="#home-jaxws-tools" if="#jaxws-tools-home">
        <path id="#jaxws-tools-path">
            <fileset dir="${#jaxws-tools-home}"/>
        </path>
        <property name="#jaxws-tools-dir" value="${#jaxws-tools-home}"/>
    </target>

    <!-- run the com.sun.tools.ws.WsImport class in jaxws-tools.jar if available -->
    <target name="#wsimport-jaxws" unless="#jdk-wsimport">
        <fail unless="#jaxws-tools-dir">
            Error: Could not find wsimport executable or jaxws-tools.jar.
        </fail>
        <mkdir dir="target/jaxws-source"/>
        <java classname="com.sun.tools.ws.WsImport" fork="true" dir="." failonerror="true">
            <arg line="-keep -s ./target/jaxws-source -p ${package} 
                       -d ./target/classes src/main/resources/${wsdlfile}"/>
            <classpath>
                <path refid="#jaxws-tools-path"/>
            </classpath>
        </java>
    </target>

    <!-- run the wsimport command in JDK 6 or use jaxws-tools.jar on JDK 5 -->
    <target name="#wsimport" depends="#is-jdk-wsimport, #wsimport-jdk, #lib-jaxws-tools, #tuscany-jaxws-tools, #env-jaxws-tools, #home-jaxws-tools, #wsimport-jaxws"/>

    <!-- run the SDO XSD2JavaGenerator if required, then compile the generated Java source -->
    <target name="sdojavagen" depends="#wsdlcheck" unless="#wsdl-uptodate">
        <mkdir dir="target/sdo-source"/>
        <java classname="org.apache.tuscany.sdo.generate.XSD2JavaGenerator" fork="true" dir="." failonerror="true">
            <arg value="-javaPackage"/>
            <arg value="${package}"/>
            <arg value="-prefix"/>
            <arg value="${prefix}"/>
            <arg value="-noNotification"/>
            <arg value="-noContainment"/>
            <arg value="-noUnsettable"/>
            <arg value="-targetDirectory"/>
            <arg value="target/sdo-source"/>
            <arg value="src/main/resources/${wsdlfile}"/>
            <classpath location="${env.TUSCANY_HOME}/lib/tuscany-sca-manifest.jar"/>
        </java>
        <javac destdir="target/classes" debug="true" source="1.5" target="1.5">
            <src path="target/sdo-source"/>
            <classpath location="${env.TUSCANY_HOME}/lib/tuscany-sca-manifest.jar"/>
        </javac>
    </target>

    <!-- check whether there are any CORBA IDL files in or under the resource directory -->
    <target name="#find-idlfiles">
        <fileset id="#allidl" dir="src/main/resources">
            <include name="**/*.idl"/>
        </fileset>
        <condition property="#idlfiles">
            <and>
                <available file="src/main/resources" type="dir"/>
                <resourcecount refid="#allidl" when="greater" count="0"/>
            </and>
        </condition>
    </target>

    <!-- call the idljava target in the build.xml file if required -->
    <target name="#call-idljava" depends="#find-idlfiles" if="#idlfiles">
        <antcall target="idljava"/>
    </target>

    <!-- check whether the IDL-generated Java code is already up to date -->
    <target name="#idlcheck">
        <condition property="#idl-uptodate">
            <uptodate srcfile="src/main/resources/${idlfile}"
                      targetfile="target/classes/${javaclass}"/>
        </condition>
    </target>

    <!-- run the JDK idlj command if required, then compile the generated Java source -->
    <target name="idlj" depends="#idlcheck" unless="#idl-uptodate">
        <mkdir dir="target/idlj-source"/>
        <exec executable="${java.home}/../bin/idlj" dir="." failonerror="true">
            <arg value="${idljopts}"/>
            <arg value="-td"/>
            <arg value="target/idlj-source"/>
            <arg value="src/main/resources/${idlfile}"/>
        </exec>
        <javac destdir="target/classes" debug="true" source="1.5" target="1.5">
            <src path="target/idlj-source"/>
        </javac>
    </target>

    <!-- check whether there are any Java source files to compile -->
    <target name="#find-javafiles">
        <fileset id="#alljava" dir="src/main/java">
            <include name="**/*.java"/>
        </fileset>
        <condition property="#javafiles">
            <and>
                <available file="src/main/java" type="dir"/>
                <resourcecount refid="#alljava" when="greater" count="0"/>
            </and>
        </condition>
    </target>

    <!-- compile the Java source files -->
    <target name="#src-compile" depends="#find-javafiles" if="#javafiles">
        <antcall target="#run-compile"/>
    </target>

    <!-- check whether a dependency path for the Java compiler was specified -->
    <target name="#check-compile-path">
        <condition property="#compile-path">
            <isreference refid="compile-path"/>
        </condition>
    </target>

    <!-- set classpath for Java compiler to include specified additional path -->
    <target name="#set-compile-path" if="#compile-path">
        <path id="#javac-classpath">
            <path refid="compile-path"/>
        </path>
    </target>

    <!-- set default classpath for Java compiler if no additional path specified -->
    <target name="#default-compile-path" unless="#compile-path">
        <path id="#javac-classpath"/>
    </target>

    <!-- set the Java compiler classpath -->
    <target name="#set-javac-classpath" depends="#check-compile-path, #set-compile-path, #default-compile-path"/>

    <!-- compile the Java source files -->
    <target name="#run-compile" depends="#set-javac-classpath">
        <javac destdir="target/classes" debug="true" source="1.5" target="1.5">
            <src path="src/main/java"/>
            <classpath>
                <path refid="#javac-classpath"/>
                <pathelement path="${env.TUSCANY_HOME}/lib/tuscany-sca-manifest.jar"/>
            </classpath>
        </javac>
    </target>

    <!-- check whether there are any resources to copy -->
    <target name="#find-resources">
        <fileset id="#allresources" dir="src/main/resources"/>
        <condition property="#resources">
            <and>
                <available file="src/main/resources" type="dir"/>
                <resourcecount refid="#allresources" when="greater" count="0"/>
            </and>
        </condition>
    </target>

    <!-- copy the contents of the resource directory -->
    <target name="#copy-resources" depends="#find-resources" if="#resources">
        <copy todir="target/classes">
            <fileset dir="src/main/resources"/>
        </copy>
    </target>

    <!-- update copied resources if required -->
    <target name="#update-resources" if="run-update-resources">
        <antcall target="update-resources"/>
    </target>

    <!-- check whether there are any Java files in or under the test directory -->
    <target name="#find-testjava">
        <fileset id="#alltestjava" dir="src/test/java">
            <include name="**/*.java"/>
        </fileset>
        <condition property="#testjava">
            <and>
                <available file="src/test/java" type="dir"/>
                <resourcecount refid="#alltestjava" when="greater" count="0"/>
            </and>
        </condition>
    </target>

    <!-- check whether there are any test resources to copy -->
    <target name="#find-test-resources">
        <fileset id="#alltestresources" dir="src/test/resources"/>
        <condition property="#testresources">
            <and>
                <available file="src/test/resources" type="dir"/>
                <resourcecount refid="#alltestresources" when="greater" count="0"/>
            </and>
        </condition>
    </target>

    <!-- copy the test resources -->
    <target name="#copy-test-resources" depends="#find-test-resources" if="#testresources">
        <copy todir="target/test-classes">
            <fileset dir="src/test/resources"/>
        </copy>
    </target>

    <!-- update copied test resources if required -->
    <target name="#update-test-resources" if="run-update-test-resources">
        <antcall target="update-test-resources"/>
    </target>

    <!-- check whether a dependency path for the unit tests was specified -->
    <target name="#check-test-path">
        <condition property="#test-path">
            <isreference refid="test-path"/>
        </condition>
    </target>

    <!-- set classpath for unit tests to include specified additional path -->
    <target name="#set-test-path" if="#test-path">
        <path id="#test-classpath">
            <path refid="test-path"/>
        </path>
    </target>

    <!-- set default classpath for unit tests if no additional path specified -->
    <target name="#default-test-path" unless="#test-path">
        <path id="#test-classpath"/>
    </target>

    <!-- set the Java compiler test classpath -->
    <target name="#set-test-classpath" depends="#check-test-path, #set-test-path, #default-test-path"/>

    <!-- If building a downloaded distribution, the JUnit jar is in lib/junit -->
    <target name="#lib-junit">
        <condition property="#junit-dir" value="../../../lib/junit">
            <available file="../../../lib/junit" type="dir"/>
        </condition>
    </target>

    <!-- If building a svn checkout, try the JUNIT_JAR environment variable -->
    <target name="#env-junit" unless="#junit-dir">
        <condition property="#junit-file" value="${env.JUNIT_JAR}">
            <available file="${env.JUNIT_JAR}" type="file"/>
        </condition>
        <fail unless="#junit-file">
            Error: Couldn't find JUnit jar file.
        </fail>
    </target>

    <!-- Define JUnit fileset using a directory -->
    <target name="#dir-junit" if="#junit-dir">
        <fileset id="#junit-fileset" dir="${#junit-dir}"/>
    </target>

    <!-- Define JUnit fileset using a file -->
    <target name="#file-junit" if="#junit-file">
        <fileset id="#junit-fileset" file="${#junit-file}"/>
    </target>

    <!-- Locate the JUnit jar file -->
    <target name="#locate-junit" depends="#lib-junit, #env-junit, #dir-junit, #file-junit"/>

    <!-- compile the test classes -->
    <target name="#test-compile" depends="#set-test-classpath, #locate-junit">
        <javac destdir="target/test-classes" debug="true" source="1.5" target="1.5">
            <src path="src/test/java"/>
            <classpath>
                <pathelement location="target/classes"/>
                <path refid="#test-classpath"/>
                <pathelement location="${env.TUSCANY_HOME}/lib/tuscany-sca-manifest.jar"/>
                <fileset refid="#junit-fileset"/>
            </classpath>
        </javac>
    </target>

    <!-- run the junit task -->
    <target name="#run-junit" depends="#set-test-classpath, #set-javac-classpath, #locate-junit">
        <junit printsummary="no" dir="." fork="true" forkmode="once" haltonfailure="true">
            <classpath>
                <pathelement location="target/test-classes"/>
                <path refid="#test-classpath"/>
                <pathelement location="target/classes"/>
                <path refid="#javac-classpath"/>
                <pathelement location="${env.TUSCANY_HOME}/lib/tuscany-sca-manifest.jar"/>
                <fileset refid="#junit-fileset"/>
            </classpath>
            <formatter type="plain" usefile="false"/>
            <batchtest>
                <fileset dir="src/test/java">
                    <include name="**/*TestCase.java"/>
                </fileset>
            </batchtest>
        </junit>
    </target>

    <!-- check whether the Tuscany SCA version is 1.5.1 -->
    <target name="#find-tuscany-1.5.1">
        <fileset id="#tuscany-assembly-1.5.1" dir="${env.TUSCANY_HOME}/modules">
            <include name="tuscany-assembly-1.5.1.jar"/>
        </fileset>
        <condition property="#tuscany-version" value="1.5.1">
            <resourcecount refid="#tuscany-assembly-1.5.1" when="greater" count="0"/>
        </condition>
        <condition property="#tuscany-repo" value="m2-ibiblio-rsync-repository">
            <resourcecount refid="#tuscany-assembly-1.5.1" when="greater" count="0"/>
        </condition>
    </target>

    <!-- check whether the Tuscany SCA version is 1.6-SNAPSHOT -->
    <target name="#find-tuscany-1.6-SNAPSHOT" unless="#tuscany-version">
        <fileset id="#tuscany-assembly-1.6-SNAPSHOT" dir="${env.TUSCANY_HOME}/modules">
            <include name="tuscany-assembly-1.6-SNAPSHOT.jar"/>
        </fileset>
        <condition property="#tuscany-version" value="1.6-SNAPSHOT">
            <resourcecount refid="#tuscany-assembly-1.6-SNAPSHOT" when="greater" count="0"/>
        </condition>
        <condition property="#tuscany-baseversion" value="1.6">
            <resourcecount refid="#tuscany-assembly-1.6-SNAPSHOT" when="greater" count="0"/>
        </condition>
        <condition property="#tuscany-repo" value="m2-snapshot-repository">
            <resourcecount refid="#tuscany-assembly-1.6-SNAPSHOT" when="greater" count="0"/>
        </condition>
    </target>

    <!-- check whether the Tuscany SCA version is 1.6 -->
    <target name="#find-tuscany-1.6" unless="#tuscany-version">
        <fileset id="#tuscany-assembly-1.6" dir="${env.TUSCANY_HOME}/modules">
            <include name="tuscany-assembly-1.6.jar"/>
        </fileset>
        <condition property="#tuscany-version" value="1.6">
            <resourcecount refid="#tuscany-assembly-1.6" when="greater" count="0"/>
        </condition>
        <condition property="#tuscany-repo" value="m2-ibiblio-rsync-repository">
            <resourcecount refid="#tuscany-assembly-1.6" when="greater" count="0"/>
        </condition>
    </target>

    <!-- find the Tuscany SCA version that matches the TUSCANY_HOME environment variable -->
    <target name="#find-tuscany-version" depends="#find-tuscany-1.5.1, #find-tuscany-1.6-SNAPSHOT, #find-tuscany-1.6">
        <fail unless="#tuscany-version">
            Error: Unable to copy implementation.web jars for this Tuscany version.
        </fail>
    </target>

    <!-- check whether the installed Tuscany SCA binary distribution includes implementation.web support -->
    <target name="#check-implementation-web">
        <fileset id="#implweb-before-copy" dir="${env.TUSCANY_HOME}/modules">
            <include name="tuscany-implementation-web-${#tuscany-version}.jar"/>
            <include name="tuscany-implementation-web-runtime-${#tuscany-version}.jar"/>
        </fileset>
        <condition property="#has-implementation-web">
            <resourcecount refid="#implweb-before-copy" when="equal" count="2"/>
        </condition>
    </target>

    <!-- check whether the installed Tuscany SCA binary distribution is a snapshot -->
    <target name="#check-tuscany-snapshot">
        <condition property="#tuscany-snapshot">
            <equals arg1="${#tuscany-repo}" arg2="m2-snapshot-repository"/>
        </condition>
    </target>
 
    <!-- copy implementation.web support to the installed Tuscany SCA snapshot binary distribution -->
    <target name="#copy-impl-web-snapshot" if="#tuscany-snapshot">
        <xmlproperty>
            <url url="http://people.apache.org/repo/${#tuscany-repo}/org/apache/tuscany/sca/tuscany-implementation-web/${#tuscany-version}/maven-metadata.xml"/>
        </xmlproperty>   
        <copy todir="${env.TUSCANY_HOME}/modules" flatten="true">
            <url url="http://people.apache.org/repo/${#tuscany-repo}/org/apache/tuscany/sca/tuscany-implementation-web/${#tuscany-version}/tuscany-implementation-web-${#tuscany-baseversion}-${metadata.versioning.snapshot.timestamp}-${metadata.versioning.snapshot.buildNumber}.jar"/>
            <url url="http://people.apache.org/repo/${#tuscany-repo}/org/apache/tuscany/sca/tuscany-implementation-web-runtime/${#tuscany-version}/tuscany-implementation-web-runtime-${#tuscany-baseversion}-${metadata.versioning.snapshot.timestamp}-${metadata.versioning.snapshot.buildNumber}.jar"/>
        </copy>
        <!-- need to copy and move because of ant 1.7.1 bug when copying with tofile and url -->
        <move file="${env.TUSCANY_HOME}/modules/tuscany-implementation-web-${#tuscany-baseversion}-${metadata.versioning.snapshot.timestamp}-${metadata.versioning.snapshot.buildNumber}.jar" tofile="${env.TUSCANY_HOME}/modules/tuscany-implementation-web-${#tuscany-version}.jar"/>
        <move file="${env.TUSCANY_HOME}/modules/tuscany-implementation-web-runtime-${#tuscany-baseversion}-${metadata.versioning.snapshot.timestamp}-${metadata.versioning.snapshot.buildNumber}.jar" tofile="${env.TUSCANY_HOME}/modules/tuscany-implementation-web-runtime-${#tuscany-version}.jar"/>
    </target>
 
    <!-- copy implementation.web support to the installed Tuscany SCA non-snapshot binary distribution -->
    <target name="#copy-impl-web-nonsnapshot" unless="#tuscany-snapshot">
        <copy todir="${env.TUSCANY_HOME}/modules" flatten="true">
            <url url="http://people.apache.org/repo/${#tuscany-repo}/org/apache/tuscany/sca/tuscany-implementation-web/${#tuscany-version}/tuscany-implementation-web-${#tuscany-version}.jar"/>
            <url url="http://people.apache.org/repo/${#tuscany-repo}/org/apache/tuscany/sca/tuscany-implementation-web-runtime/${#tuscany-version}/tuscany-implementation-web-runtime-${#tuscany-version}.jar"/>
        </copy>
    </target>
 
    <!-- copy implementation.web support to the installed Tuscany SCA binary distribution -->
    <target name="#copy-implementation-web" depends="#check-tuscany-snapshot, #copy-impl-web-snapshot, #copy-impl-web-nonsnapshot"/>

    <!-- add implementation.web support to the installed Tuscany SCA binary distribution if not already there -->
    <target name="add-implementation-web" depends="#find-tuscany-version, #check-implementation-web" unless="#has-implementation-web">
        <antcall target="#copy-implementation-web"/>
        <fileset id="#implweb-after-copy" dir="${env.TUSCANY_HOME}/modules">
            <include name="tuscany-implementation-web-${#tuscany-version}.jar"/>
            <include name="tuscany-implementation-web-runtime-${#tuscany-version}.jar"/>
        </fileset>
        <condition property="#implementation-web-copied">
            <resourcecount refid="#implweb-after-copy" when="equal" count="2"/>
        </condition>
        <fail unless="#implementation-web-copied">
            Error: Unable to download tuscany-implementation-web and tuscany-implementation-web-runtime jars.
        </fail>
    </target>

    <!-- check whether the target/jar-classes directory exists -->
    <target name="#check-jar-classes">
        <condition property="#jar-classes" value="target/jar-classes">
            <available file="target/jar-classes" type="dir"/>
        </condition>
        <condition property="#jar-classes" value="target/classes">
            <not>
                <available file="target/jar-classes" type="dir"/>
            </not>
        </condition>
    </target>

    <!-- check whether there are any files in the webapp directory -->
    <target name="#check-webapp">
        <fileset id="#webappfiles" dir="src/main/webapp"/>
        <condition property="#webapp">
            <and>
                <available file="src/main/webapp" type="dir"/>
                <resourcecount refid="#webappfiles" when="greater" count="0"/>
            </and>
        </condition>
    </target>

    <!-- build a war file if there are files in the webapp directory -->
    <target name="#package-war" if="#webapp">
        <mkdir dir="target/lib"/>
        <antcall target="copy-lib"/>
        <war destfile="target/${ant.project.name}.war" webxml="src/main/webapp/WEB-INF/web.xml"
             excludes="**/*.cbp">
            <fileset dir="src/main/webapp"/>
            <lib dir="target/lib"/>
            <classes dir="${#jar-classes}"/>
        </war>
    </target>

    <!-- create a jar file with a Class-Path attribute -->
    <target name="#package-jar-path" unless="#webapp" if="package-path">
        <jar destfile="target/${ant.project.name}.jar" basedir="${#jar-classes}"
             excludes="**/*.cbp">
            <manifest>
                <attribute name="Class-Path" value="${package-path}"/>
            </manifest>
        </jar>
    </target>

    <target name="#not-package-path" unless="package-path">
        <property name="#no-package-path" value=""/>
    </target>

    <!-- create a jar file without a Class-Path attribute -->
    <target name="#package-jar-nopath" unless="#webapp" if="#no-package-path">
        <jar destfile="target/${ant.project.name}.jar" basedir="${#jar-classes}"
             excludes="**/*.cbp"/>
    </target>

    <!-- build a packaged jar file or war file -->
    <target name="#build-package" depends="#check-jar-classes, #check-webapp, #package-war,
            #package-jar-path, #not-package-path, #package-jar-nopath"/>

    <!-- If running from a downloaded distribution, the OpenEJB jars are in lib/openejb -->
    <target name="#lib-openejb">
        <condition property="#openejb-dir" value="../../../lib/openejb">
            <available file="../../../lib/openejb" type="dir"/>
        </condition>
    </target>

    <!-- If running from a complete build, the OpenEJB jars are in binaries/target/openejb -->
    <target name="#binaries-openejb" unless="#openejb-dir">
        <condition property="#openejb-dir" value="../../binaries/target/openejb">
            <available file="../../binaries/target/openejb" type="dir"/>
        </condition>
    </target>

    <!-- Set the path as the OpenEJB directory and the Tuscany runtime -->
    <target name="#tuscany-openejb" if="#openejb-dir">
        <path id="openejb-path">
            <fileset dir="${#openejb-dir}"/>
            <!-- The openejb directory doesn't include all dependencies, so bring these in from Tuscany -->
            <fileset dir="${env.TUSCANY_HOME}/lib">
                <!-- exclude some jars to prevent them being loaded by OpenEJB -->
                <exclude name="tuscany-sca-manifest.jar"/>
                <exclude name="ode-*.jar"/>
                <exclude name="jaxb-xjc-*.jar"/>
                <exclude name="jython-*.jar"/>
                <exclude name="activemq-all-*.jar"/>
                <exclude name="js-*.jar"/>
                <exclude name="org.apache.felix.main-*.jar"/>
                <exclude name="saxon-*.jar"/>
            </fileset>
        </path>
    </target>

    <!-- If OpenEJB jars not found in lib or binaries, try the OPENEJB_HOME environment variable -->
    <target name="#env-openejb" unless="#openejb-dir">
        <condition property="#openejb-home" value="${env.OPENEJB_HOME}/lib">
            <available file="${env.OPENEJB_HOME}/lib" type="dir"/>
        </condition>
    </target>

    <!-- Set the path as the OPENEJB_HOME directory -->
    <target name="#home-openejb" if="#openejb-home">
        <path id="openejb-path">
            <fileset dir="${#openejb-home}"/>
        </path>
        <property name="#openejb-dir" value="${#openejb-home}"/>
    </target>

    <!-- For use as a dependency of "run" targets that need OpenEJB -->
    <target name="locate-openejb" depends="#lib-openejb, #binaries-openejb, #tuscany-openejb, #env-openejb, #home-openejb">
        <fail unless="#openejb-dir">
            Error: Couldn't find OpenEJB dependencies.
        </fail>
    </target>

    <!-- check to see if we are running on JDK 6 -->
    <target name="#is-jdk6">
        <condition property="#jdk6">
            <available classname="javax.xml.ws.Endpoint"/>
        </condition>
    </target>

    <!-- JDK 6 contains JAX-WS so we don't need it on the classpath -->
    <target name="#jaxws-jdk6" if="#jdk6">
        <path id="jaxws-path"/>
        <property name="#jaxws-dir" value=""/>
    </target>

    <!-- If running from a downloaded distribution, the JAX-WS jars are in lib/jaxws -->
    <target name="#lib-jaxws" unless="#jaxws-dir">
        <condition property="#jaxws-dir" value="../../../lib/jaxws">
            <available file="../../../lib/jaxws" type="dir"/>
        </condition>
    </target>

    <!-- If running from a complete build, the JAX-WS jars are in binaries/target/jaxws -->
    <target name="#binaries-jaxws" unless="#jaxws-dir">
        <condition property="#jaxws-dir" value="../../binaries/target/jaxws">
            <available file="../../binaries/target/jaxws" type="dir"/>
        </condition>
    </target>

    <!-- Set the path as the JAX-WS directory and the Tuscany runtime -->
    <target name="#tuscany-jaxws" if="#jaxws-dir">
        <path id="jaxws-path">
            <fileset dir="${#jaxws-dir}"/>
            <fileset dir="${env.TUSCANY_HOME}/lib"/>
        </path>
    </target>

    <!-- If JAX-WS jars not found in lib or binaries, try the JAXWS_HOME environment variable -->
    <target name="#env-jaxws" unless="#jaxws-dir">
        <condition property="#jaxws-home" value="${env.JAXWS_HOME}/lib">
            <available file="${env.JAXWS_HOME}/lib" type="dir"/>
        </condition>
    </target>

    <!-- Set the path as the JAXWS_HOME directory -->
    <target name="#home-jaxws" if="#jaxws-home">
        <path id="jaxws-path">
            <fileset dir="${#jaxws-home}"/>
        </path>
        <property name="#jaxws-dir" value="${#jaxws-home}"/>
    </target>

    <!-- For use as a dependency of "run" targets that need JAX-WS -->
    <target name="locate-jaxws" depends="#is-jdk6, #jaxws-jdk6, #lib-jaxws, #binaries-jaxws, #tuscany-jaxws, #env-jaxws, #home-jaxws">
        <fail unless="#jaxws-dir">
            Error: Couldn't find JAX-WS dependencies.
        </fail>
    </target>

    <!-- for external use on the ant command line -->
    <target name="compile">
        <echo message="Compiling project ${ant.project.name}"/>
        <mkdir dir="target/classes"/>
        <antcall target="#call-wsdljava"/>
        <antcall target="#call-idljava"/>
        <antcall target="#src-compile"/>
        <antcall target="#copy-resources"/>
        <antcall target="#update-resources"/>
        <antcall target="test"/>
        <antcall target="package"/>
    </target>

    <!-- for external use on the ant command line -->
    <target name="test" depends="#find-testjava" if="#testjava">
        <echo message="Testing project ${ant.project.name}"/>
        <mkdir dir="target/test-classes"/>
        <antcall target="#test-compile"/>
        <antcall target="#copy-test-resources"/>
        <antcall target="#update-test-resources"/>
        <antcall target="#run-junit"/>
    </target>

    <!-- for external use on the ant command line -->
    <target name="package">
        <echo message="Packaging project ${ant.project.name}"/>
        <antcall target="#build-package"/>
    </target>

    <!-- for external use on the ant command line -->
    <target name="clean">
        <echo message="Cleaning project ${ant.project.name}"/>
        <delete dir="target" includeemptydirs="true"/>
    </target>

</project>
