<!--

    Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<property environment="env"/>
<property file="${env.APS_HOME}/config.properties"/>   

<target name="all" depends="clean, compile, run, undeploy, report"/>

<target name="clean">
    <delete dir="${env.APS_HOME}/build/module/classes"/>
</target>

 <path id="classpath">
        <fileset dir="${env.S1AS_HOME}/modules">
                      <include name="*.jar"/>
        </fileset>
        <fileset dir="${env.S1AS_HOME}/modules/endorsed">
                      <include name="*.jar"/>
        </fileset>
        <fileset dir="${env.APS_HOME}/lib">
                      <include name="*.jar"/>
        </fileset>
    </path>


<target name="compile">
    <mkdir dir="${env.APS_HOME}/build/module/classes"/>   
    <basename file="${src-name}" property="server" suffix=".java"/>
    <dirname file="${src-name}" property="directory"/>
    <basename file="${directory}" property="pkg-name"/> 
    <property name="class-name" value="${pkg-name}/${server}.class"/>
    <echo message="Compiling into ${pkg-name}/${server}.class"/>
    <javac srcdir="." destdir="${env.S1AS_HOME}/domains/domain1/autodeploy" 
        includes="${src-name}">
    <classpath refid="classpath"/>
   </javac>
</target>

<target name="compile-client">
    <javac srcdir="." destdir="${env.APS_HOME}/build/module/classes" 
        classpath="${env.APS_HOME}/lib/reporter.jar:${env.S1AS_HOME}/lib/j2ee.jar:${env.S1AS_HOME}/lib/webservices-rt.jar:${env.S1AS_HOME}/lib/webservices-tools.jar" 
        includes="${client-src-name}"/>
</target>

<target name="deploy">
    <antcall target="compile"/>
</target>

<target name="undeploy">
    <basename file="${src-name}" property="server" suffix=".java"/>
    <dirname file="${src-name}" property="directory"/>
    <basename file="${directory}" property="pkg-name"/> 
    <property name="class-name" value="${pkg-name}/${server}.class"/>
    <echo message="Removing file ${class-name} from autodeploy directory"/>
    <delete file="${env.S1AS_HOME}/domains/domain1/autodeploy/${class-name}"/>
    <waitfor maxwait="100" maxwaitunit="second">
       <or>
            <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${class-name}_undeployed"/>
            <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${class-name}_undeployFailed"/>
       </or>
    </waitfor>
    <condition property="undeploy_succeeded">
        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${class-name}_undeployed"/>
    </condition>
    <condition property="undeploy_failed">
        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${class-name}_undeployFailed"/>
    </condition>
</target>

<target name="report" depends="internal-report-success, internal-report-failure">
    <delete file="${env.S1AS_HOME}/domains/domain1/autodeploy/${class-name}_*"/>    
</target>

<target name="run">
    <waitfor maxwait="100" maxwaitunit="second">
       <or>
            <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${class-name}_deployed"/>
            <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${class-name}_deployFailed"/>
       </or>
    </waitfor>
    <condition property="deploy_succeeded">
        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${class-name}_deployed"/>
    </condition>
    <condition property="deploy_failed">
        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${class-name}_deployFailed"/>
    </condition>
    <antcall target="internal-run"/>
    <antcall target="internal-report-failure"/>
</target>



<target name="internal-run" if="deploy_succeeded">
    <basename file="${client-src-name}" property="client" suffix=".java"/>
    <dirname file="${client-src-name}" property="client-directory"/>
    <basename file="${client-directory}" property="client-pkg-name"/> 
    <property name="client-class-name" value="${client-pkg-name}/${client}.class"/>
    <echo message="wsimporting http://${http.host}:${http.port}/${server}/${server}Service?WSDL"/>
    <exec executable="${env.S1AS_HOME}/bin/wsimport">
        <arg line="-keep -d ${env.APS_HOME}/build/module/classes http://${http.host}:${http.port}/${server}/${server}Service?WSDL"/>
    </exec>
    <antcall target="compile-client"/>   
    <echo message="Running appclient with ${client-pkg-name}.${client}"/>
    <unjar src="${env.APS_HOME}/lib/reporter.jar" dest="${env.APS_HOME}/build/module/classes"/>
    <exec executable="${env.S1AS_HOME}/bin/appclient" dir="${env.APS_HOME}/build/module/classes">
        <arg value="${client-pkg-name}.${client}"/>    
    </exec>
</target>

<target name="internal-report-success" if="undeploy_succeeded">
    <antcall target="report-success"/>
</target>

<target name="internal-report-failure" if="undeploy_failed, deploy_failed">
    <antcall target="report-failure"/>
</target>
