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