<!--

    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>
