<!--
 * 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.    
-->
<!DOCTYPE project [
<!ENTITY buildDependency SYSTEM "build-dependency.xml">
]>
	
<project name="sample-helloworld-ws-sdo-webapp" default="compile">
	&buildDependency;
	
    <property file="${user.home}/tuscany/build.properties" />
    <property file="${user.home}/build.properties" />

    <property name="tuscany.sca.manifest.location" value="../../lib/tuscany-sca-manifest.jar"/>
    <property name="tuscany.sca.lib.location" value="../../lib"/>
    <property name="tuscany.sca.modules.location" value="../../modules"/>
            
    <path id="project.classpath">
        <pathelement path="target/classes"/>
        <pathelement path="target/sdo-source"/>
        <pathelement location="${tuscany.sca.manifest.location}"/>
    </path>
    	
    <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.type"/>
            <arg value="-prefix"/>
            <arg value="Type"/>
            <arg value="-noNotification"/>
            <arg value="src/main/resources/wsdl/helloworld.xsd"/>

            <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="helloworld"/>
            <arg value="-prefix"/>
            <arg value="Helloworld"/>
            <arg value="-noNotification"/>
            <arg value="src/main/resources/wsdl/helloworld.wsdl"/>

            <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"/>
        </copy>
        <war destfile="target/sample-helloworld-ws-sdo-webapp.war" 
             webxml="src/main/webapp/WEB-INF/web.xml">
            <fileset dir="src/main/webapp"/>       	
            <lib refid="tuscany.jars"/>
            <lib refid="3rdparty.jars"/>
            <classes dir="target/classes"/>
        </war>
    </target>	
	
    <target name="package" depends="compile"/>
		
    <target name="clean">
        <delete dir="target" includeemptydirs="true"/>
    </target>
</project>
