<!--

    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.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">
    <tstamp>
      <format property="TIMESTAMP" pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ" />
    </tstamp>
    <echo>Current time (ISO): ${TIMESTAMP}</echo>
    <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" failonerror="true">
        <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" failonerror="true">
        <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>
