<!--
 * 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="helloworld-ws-sdo" default="compile" basedir=".">
    <property file="${user.home}/tuscany/build.properties" />
    <property file="${user.home}/build.properties" />

    <property name="server.class" value="helloworld.HelloWorldServer" />    
    <property name="client.class" value="helloworld.HelloWorldClient" />
    <property name="test.jar"   value="sample-helloworld-ws-sdo.jar" />

    <property name="tuscany.sca.manifest.location" value="../../lib/tuscany-sca-manifest.jar"/>

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

            <classpath location="${tuscany.sca.manifest.location}"/>
        </java>
        <java classname="org.apache.tuscany.sdo.generate.XSD2JavaGenerator" fork="true">
            <arg value="-targetDirectory"/>
            <arg value="target/sdo-source"/>
            <arg value="-javaPackage"/>
            <arg value="model.sdo"/>
            <arg value="-prefix"/>
            <arg value="Entity"/>
            <arg value="-noNotification"/>
            <arg value="-noContainment"/>
            <arg value="-noUnsettable"/>
            <arg value="src/main/resources/test.xsd"/>

            <classpath location="${tuscany.sca.manifest.location}"/>
        </java>
    </target>

    <target name="compile" depends="init, generate-sdo">
        <javac destdir="target/classes"
               debug="on"
               source="1.5"
               target="1.5">
            <src location="src/main/java"/>
            <src location="target/sdo-source"/>
            <classpath location="${tuscany.sca.manifest.location}"/>
        </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="${client.class}" /> 
            </manifest>
        </jar>    	
    </target>	
	
    <target name="run-classes">
        <java classname="${client.class}" fork="true">
=            <classpath>
                <pathelement path="target/classes"/>
                <pathelement location="${tuscany.sca.manifest.location}"/>
            </classpath>        
        </java>
    </target>

    <target name="run-server">
        <java classname="${server.class}" fork="true">
            <classpath>
                <pathelement path="target/${test.jar}"/>
                <pathelement location="${tuscany.sca.manifest.location}"/>
            </classpath>        
        </java>    	
    </target>

    <target name="run">
        <java classname="${client.class}" fork="true">
            <classpath>
                <pathelement path="target/${test.jar}"/>
                <pathelement location="${tuscany.sca.manifest.location}"/>
            </classpath>        
        </java>    	
    </target>
		
    <target name="clean">
        <delete dir="target" includeemptydirs="true"/>
    </target>
</project>
