<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE project SYSTEM "ant.dtd" >


<!--
Build script for test services
-->
<project name="wstest" basedir="." default="" >
    
    <description>
        wstest build file.
    </description>

    <!-- Load local properties so we can override build.properties -->
    <property file="local.build.properties" /> 

    <!-- Load build properties file -->
    <property file="build.properties" /> 

    <!-- Class path for compilation -->
    <path id="build.classpath">

        <fileset dir="${lib.dir}" includes="*.jar" /> 

    </path>
    
    <!-- *** Build targets -->

    <target name="init" description="Creates the temporary build dirs and loads the build properties for the environment" >
        
        <mkdir dir="${build.dir}"/>

        <property name="classes.build.dir" location="${build.dir}/service/classes" />
        <mkdir dir="${classes.build.dir}"/>
        
        <path id="runtime.classpath">
            <path refid="build.classpath"/>
            <pathelement location="${classes.build.dir}" />
        </path>
        
        <!-- **** Default service -->
        <property name="service" value="person" />

        <fail unless="service" message="'service' must be provided" />
        <property name="xml.dir" value="${basedir}/xml/${service}" />

        <property name="classes.client.build.dir" value="${build.dir}/client/classes" />

        <mkdir dir="${classes.client.build.dir}" />


        <taskdef name="wscompile" classname="com.sun.xml.rpc.tools.ant.Wscompile">
            <classpath refid="build.classpath"/>
        </taskdef>
<!--
        <taskdef name="wsdeploy" classname="com.sun.xml.rpc.tools.ant.Wsdeploy">
            <classpath refid="build.classpath"/>
        </taskdef>
-->
        <echo>build.dir: ${build.dir}</echo>

    </target>
 

    <target name="clean" depends="init" description="Clean temporary directories">

        <delete dir="${build.dir}" quiet="true" />

    </target>


    <target name="gen.service" depends="init" description="Generate service interface from WSDL">

        <property name="src.service.build.dir" value="${build.dir}/service/src" />
        <mkdir dir="${src.service.build.dir}" />

        <fail unless="service" message="'service' must be provided" />
        <property name="config.path" value="${xml.dir}/config.xml" />

        <java dir="${xml.dir}" classname="com.sun.xml.rpc.tools.wscompile.Main" failonerror="true" fork="true">
            <arg line="-import -model  ${build.dir}/service/model.gz -keep -verbose -Xprintstacktrace -f:wsi -d ${classes.build.dir} ${config.path}" />
            <classpath>
                <path refid="runtime.classpath"/>
                <pathelement path="${java.home}/../lib/tools.jar" /> 
            </classpath>
        </java>

        <copy todir="${src.service.build.dir}" >
            <fileset dir="${classes.build.dir}" includes="**/*.java" />
        </copy>

    </target>

    <target name="gen.client" depends="init" description="Generate client stub. Generated files will copied to the source!">

        <property name="config.path" value="${xml.dir}/config.xml" />

        <java dir="${xml.dir}" classname="com.sun.xml.rpc.tools.wscompile.Main" failonerror="true" fork="true">
            <arg line="-gen:client -keep -verbose -Xprintstacktrace -f:wsi -d ${classes.client.build.dir} ${config.path}" />
            <classpath>
                <path refid="runtime.classpath"/>
                <pathelement path="${java.home}/../lib/tools.jar" /> 
            </classpath>
        </java>

        <!-- Copy generated classes to the src -->
        <copy todir="${src.dir}" >
            <fileset dir="${classes.client.build.dir}" includes="**/*.java" />
        </copy>

    </target> 

    <!-- Compile source code -->
    <target name="compile.service" depends="gen.service"  description="Compile Java classes" >

        <!-- make sure that we're compiling against generated classes. 
        This will not override classes that were generates at the previous step -->
        <copy todir="${src.service.build.dir}" >
            <fileset dir="${src.dir}"  excludes="**/*_* **/*Endpoint.* **/*Test.*" />
        </copy>

        <javac deprecation="true" debug="true" destdir="${classes.build.dir}" 
                srcdir="${src.service.build.dir}" includes="**/*Impl*" > 
            <classpath refid="build.classpath"/>
        </javac>

    </target>



    <target name="war" depends="compile.service">

        <property name="input.war.path" value="${build.dir}/personservice_input.war" />

        <jar destfile="${input.war.path}" >
            <zipfileset prefix="WEB-INF" dir="${xml.dir}" includes="*.xml *.wsdl" />
            <zipfileset prefix="WEB-INF/classes" dir="${classes.build.dir}" />
            <zipfileset prefix="WEB-INF" dir="${build.dir}/service" includes="*.gz" />
        </jar>

    </target>

    <target name="deploy" depends="war">

        <property name="output.war.path" value="${build.dir}/personservice.war" />
        <property name="deploy.tmp.dir" value="${build.dir}/deploy_tmp" />
        <mkdir dir="${deploy.tmp.dir}" />

        <java dir="${build.dir}" classname="com.sun.xml.rpc.tools.wsdeploy.Main" failonerror="true" fork="true">
            <arg line="-o ${output.war.path} ${input.war.path}  -tmpdir ${deploy.tmp.dir} -verbose -keep" />
            <classpath>
                <path refid="runtime.classpath"/>
                <pathelement path="${java.home}/../lib/tools.jar" /> 
            </classpath>

        </java>

        <!-- explode war -->
        <property name="deployment.dir" value="${build.dir}/deployment" />
        <mkdir dir="${deployment.dir}" />
        <unzip src="${output.war.path}" dest="${deployment.dir}" />

        <!-- add lib dir so we can use it with any servlet container -->
        <property name="lib.deployment.dir" value="${deployment.dir}/WEB-INF/lib" />
        <mkdir dir="${lib.deployment.dir}" />

        <copy todir="${lib.deployment.dir}" >
            <fileset dir="${lib.dir}" includes="*.*" />
        </copy>

    </target> 


    <target name="test.class" depends="compile.service" 
            description="Run a single JUnit class. The fully qualified class name
            must be passed using -Dtest.class property">
    	
        <fail unless="test.class" message="You must pass test.class" />

        <junit printsummary="true" fork="yes" showoutput="true" haltonfailure="true">
        	<classpath>
            	<path refid="runtime.classpath"/>
            </classpath>
            <formatter type="brief" usefile="false"/>

            <test name="${test.class}"/>
    	</junit>

	</target>

    <target name="build" depends="deploy" 
        description="Generate service and client, compile all classes, deploy" />

</project>
