<!--
 * 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="sample-helloworld-bpel" default="compile">
    <property name="test.class"   value="helloworld.BPELClient" />
    <property name="test.jar"     value="sample-helloworld-bpel.jar" />
    <property name="manifest.jar" value="../../lib/tuscany-sca-manifest.jar" />

    <target name="init">
        <mkdir dir="target/classes"/>
        <mkdir dir="target/wsdl2java-source"/>
    </target>

    <target name="generate-wsdl" depends="init">
        <java classname="org.apache.tuscany.sdo.generate.XSD2JavaGenerator" fork="true">
            <arg value="-targetDirectory"/>
            <arg value="target/wsdl2java-source"/>
            <arg value="-prefix"/>
            <arg value="HelloWorld"/>
            <arg value="-noContainment"/>
            <arg value="-noUnsettable"/>
            <arg value="src/main/resources/helloworld.wsdl"/>

            <classpath>
                <pathelement location="${manifest.jar}"/>
            </classpath>
        </java>

        <java classname="org.apache.tuscany.tools.wsdl2java.generate.WSDL2JavaGenerator" fork="true">
            <arg value="-targetDirectory"/>
            <arg value="target/wsdl2java-source"/>
            <arg value="src/main/resources/helloworld.wsdl"/>

            <classpath>
                <pathelement location="${manifest.jar}"/>
            </classpath>
        </java>
    </target>

    <target name="unzip-ode-db" depends="init">
        <unzip src="../../lib/ode-dao-jpa-ojpa-derby-1.3.2.zip" dest="target/database"/>
    </target>

    <target name="compile" depends="init,generate-wsdl,unzip-ode-db">
        <javac destdir="target/classes" debug="on" source="1.5" target="1.5">
            <src path="src/main/java"/>
            <src path="target/wsdl2java-source"/>
            <classpath>
                <pathelement location="${manifest.jar}"/>
            </classpath>
        </javac>
        <copy todir="target/classes">
            <fileset dir="src/main/resources"/>
        </copy>
        <jar destfile="target/${test.jar}" basedir="target/classes">
            <manifest>
                <attribute name="Main-Class" value="${test.class}" />
            </manifest>
        </jar>
    </target>

    <target name="run">
        <java classname="${test.class}" fork="true">
            <!-- jvmarg value="-Xdebug"/ -->
            <!-- jvmarg value="-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y"/ -->
            <classpath>
                <pathelement location="target/classes"/>
                <pathelement location="target/database"/>
                <pathelement location="${manifest.jar}"/>
            </classpath>
        </java>
    </target>

    <target name="clean">
        <delete includeemptydirs="true">
            <fileset dir="target"/>
        </delete>
    </target>

</project>
