<!--

    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="test-all" depends="clean">
    <basename file="${src-name}" property="server" suffix=".java"/>
    <dirname file="${src-name}" property="directory"/>
    <echo message="Starting Test ${directory}"/>
    <basename file="${directory}" property="pkg-name"/> 
    <antcall target="deploy">
	<param name="pkg-name" value="${pkg-name}"/>
    </antcall> 
    <condition property="deploy_succeeded">
        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployed"/>
    </condition>
    <condition property="deploy_failed">
        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployFailed"/>
    </condition>
    <fail message="Deployment failed" if="deploy_failed"/>
    <antcall target="run"/>
    <echo message="Removing jar bundle ${server}.jar from autodeploy directory"/>
    <antcall target="undeploy"/>
    <antcall target="report"/>
</target>

<target name="clean">
    <echo message="Clean from ${ant.file}"/> 
    <delete dir="${env.APS_HOME}/build/module/classes"/>
    <delete dir="${env.APS_HOME}/build/module/archive"/>    
    <mkdir dir="${env.APS_HOME}/build/module/classes"/>   
    <mkdir dir="${env.APS_HOME}/build/module/archive"/>   
</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="reporter.jar"/>
                   </fileset>


    </path>


<target name="test-compile">
    <echo message="Compiling into ${pkg-name}/${server}.class"/>
    <javac srcdir="." destdir="${env.APS_HOME}/build/module/classes" 
        includes="${pkg-name}/*.java">
 <classpath refid="classpath"/>
</javac>
</target>

<target name="compile-client">
    <javac srcdir="." destdir="${env.APS_HOME}/build/module/classes" 
        includes="${client-src-name}">
        <classpath refid="classpath"/>
    </javac>
</target>

<target name="build">
    <basename file="${src-name}" property="server" suffix=".java"/>
    <dirname file="${src-name}" property="directory"/>
    <basename file="${directory}" property="pkg-name"/> 
    <antcall target="test-compile"/>
    <echo message="Building with package ${pkg-name}"/>
    <jar destfile="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar"
        basedir="${env.APS_HOME}/build/module/classes"
        includes="${pkg-name}/**">
	<metainf dir="${pkg-name}"
		includes="*.xml **/*.wsdl **/*.xsd"/>
    </jar>            
</target>

<target name="deploy">
    <antcall target="build"/>
    <basename file="${src-name}" property="server" suffix=".java"/>
    <waitfor maxwait="100" maxwaitunit="second">
       <or>
            <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployed"/>
            <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployFailed"/>
       </or>
    </waitfor>
</target>

<target name="undeploy">
    <basename file="${src-name}" property="server" suffix=".java"/>
    <antcall target="autoundeploy-file">
	<param name="filename" value="${server}.jar"/>
    </antcall>
    <condition property="undeploy_succeeded">
        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_undeployed"/>
    </condition>
    <condition property="undeploy_failed">
        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_undeployFailed"/>
    </condition>
    <fail if="undeploy_failed" message="undeployment failed"/>
</target>


<target name="autoundeploy-file">
    <delete file="${env.S1AS_HOME}/domains/domain1/autodeploy/${filename}"/>
    <waitfor maxwait="100" maxwaitunit="second">
       <or>
            <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${filename}_undeployed"/>
            <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${filename}_undeployFailed"/>
       </or>
    </waitfor>
</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">
    <basename file="${src-name}" property="server" suffix=".java"/>
    <condition property="deploy_succeeded">
        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployed"/>
    </condition>
    <condition property="deploy_failed">
        <available file="${env.S1AS_HOME}/domains/domain1/autodeploy/${server}.jar_deployFailed"/>
    </condition>
    <antcall target="prepare-client"/>
    <antcall target="internal-run"/>
</target>

<target name="wsdl-import">
    <antcall target="configurable-wsdl-import">
        <param name="host-name" value="${http.host}"/>
        <param name="host-port" value="${http.port}"/>
        <param name="protocol" value="http"/>
    </antcall>
</target>

<target name="configurable-wsdl-import">
    <echo message="wsimporting ${protocol}://${host-name}:${host-port}/${server}Service/${port}?WSDL; special args are ${wsimport-special-args}"/>  
    <exec executable="${env.S1AS_HOME}/bin/wsimport">
        <arg line="-keep -d ${env.APS_HOME}/build/module/classes ${protocol}://${host-name}:${host-port}/${server}Service/${port}?WSDL"/>
    </exec>
</target>

<target name="prepare-client">
    <!--basename file="${server}" property="port" suffix="EJB"/-->
    <basename file="${server}" property="port"/>
    <antcall target="wsdl-import">
	<param name="server" value="${server}"/>
	<param name="port" value="${port}"/>
    </antcall>
    <antcall target="compile-client"/>   
    <antcall target="unjar-client-utils"/>
</target>

<target name="unjar-client-utils">
    <unjar src="${env.APS_HOME}/lib/reporter.jar" dest="${env.APS_HOME}/build/module/classes"/>
</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="Running appclient with ${client-pkg-name}.${client} ${app-client-parameters} ${app-client-extra-parameters}"/>
    <exec executable="${env.S1AS_HOME}/bin/appclient" dir="${env.APS_HOME}/build/module/classes">
        <arg line="${client-pkg-name}.${client} ${app-client-parameters} ${app-client-extra-parameters}"/>    
    </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>
