<!--
 * 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>
        
    <path id="project.classpath">
        <pathelement path="target/classes"/>
        <pathelement path="target/sdo-source"/>
        <pathelement location="${tuscany.sca.manifest.location}"/>
    </path>
        
    <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 refid="project.classpath"/>
        </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 refid="project.classpath"/>
        </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 refid="project.classpath"/>
        </javac> 
        <copy todir="target/classes">
            <fileset dir="src/main/resources"/>
            <fileset dir="target/sdo-source"/>
        </copy>
        <jar destfile="target/${test.jar}" basedir="target/classes">
            <manifest>
                <attribute name="Main-Class" value="${test.class}" /> 
            </manifest>
        </jar>    	
    </target>	
	
    <target name="run-classes">
        <java classname="${client.class}" fork="true">
        <classpath refid="project.classpath"/>        </java>
    </target>

    <target name="run-server">
        <java classname="${server.class}" fork="true">
            <classpath path="target/${test.jar}"/>
            <classpath refid="project.classpath"/>
        </java>    	
    </target>

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