<!--

    Copyright (c) 2010, 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

-->

<target name="clean-common">
  <echo message="common.xml: Cleaning test build files: ${build.base.dir}"
        level="verbose"/>
  <delete dir="${build.base.dir}"/>
</target>

<target name="common-setup">
   <mkdir dir="${TEST_HOME_WEB}/common/classes"/>
   <javac srcdir="${TEST_HOME_WEB}/common"
    destdir="${TEST_HOME_WEB}/common/classes"
    debug="on"
    failonerror="true"/>
</target>

<target name="common-unsetup">
  <delete dir="${TEST_HOME_WEB}/common/classes" failonerror="false"/>
</target>

<target name="compile-common">
  <mkdir dir="${build.base.dir}"/>
  <echo message="common.xml: Compiling test source files" level="verbose"/>
  <javac srcdir="${basedir}/src"
    destdir="${build.base.dir}"
    classpath="${env.S1AS_HOME}/modules/jakarta.servlet.jar:${env.S1AS_HOME}/osgi/felix/bin/felix.jar:${env.S1AS_HOME}/modules/jersey-core.jar"
    debug="on"
    failonerror="true"/>
</target>

<target name="package">
  <exec executable="mvn" failonerror="false" resultproperty="PackageFailure">
     <arg value="package"/>
  </exec>

<!-- Check if the packaging has failed and set the Failure property accordingly -->
  <condition property="FailStatus" value="${package.fail.status}">
    <not>
      <equals arg1="${PackageFailure}" arg2="0"/>
    </not>
  </condition>

  <antcall target="report"/>
</target>

<target name="package-war">  
  <echo message="Creating ${appname}.war file"/>
  <copy toDir="${build.classes.dir}/WEB-INF/classes" failonerror="false">
        <fileset dir="${build.base.dir}"/>
  </copy>
  <jar destfile="${destfile}" manifest="${manifest.mf}">
	<fileset dir="${build.classes.dir}"
	     excludes="**/main/**"
	/>
  </jar>
  <delete dir="${build.classes.dir}/WEB-INF/classes" failonerror="false"/>
</target>

<target name="deploy-application">
  <echo message="common.xml: Deploying Application : ${app.path}"
	level="verbose"/>
  <antcall target="autodeploy-app"/>
<!--  <antcall target="asadmin-deploy-app"/ -->
</target>

<target name="autodeploy-app">
  <copy file="${app.path}" todir="${deploy.dir}" failonerror="false"/>
  <sleep seconds="10"/>
</target>

<target name="asadmin-deploy-app">
   <echo message="Deploying ${app.path}" level="verbose"/>
   <exec executable="${ASADMIN}" failonerror="false" resultproperty="DeploymentFailure">
     <arg line="--user ${admin.user}"/>
     <arg line="--host ${admin.host}"/>
     <arg line="--port ${admin.port}"/>
     <arg line="deploy"/>
     <arg line="--type osgi"/>
     <arg line="${app.path}"/>
   </exec>

<!-- Check if the deployment has failed and set the failure status accordingly -->
  <condition property="FailStatus" value="${deployment.fail.status}">
    <not>
      <equals arg1="${DeploymentFailure}" arg2="0"/>
    </not>
  </condition>

  <antcall target="report"/>
</target>

<target name="undeploy-application">
  <echo message="common.xml: Undeploying Application : ${appname}"
	level="verbose"/>
  <antcall target="autoundeploy-app"/>
<!--  <antcall target="asadmin-undeploy-app"/ -->
</target>

<target name="autoundeploy-app">
  <delete file="${deploy.dir}/${appname}.war" failonerror="false"/>
  <sleep seconds="7"/>
</target> 

<target name="asadmin-undeploy-app">
   <echo message="Deploying ${appname}" level="verbose"/>
   <exec executable="${ASADMIN}" failonerror="false" resultproperty="DeploymentFailure">
     <arg line="--user ${admin.user}"/>
     <arg line="--host ${admin.host}"/>
     <arg line="--port ${admin.port}"/>
     <arg line="undeploy"/>
     <arg line="${appname}"/>
   </exec>

<!-- Check if the deployment has failed and set the failure status accordingly -->
  <condition property="FailStatus" value="${deployment.fail.status}">
    <not>
      <equals arg1="${DeploymentFailure}" arg2="0"/>
    </not>
  </condition>

  <antcall target="report"/>
</target>

<target name="report" if="FailStatus"> 
   <java classname="Reporter">
      <classpath>
        <pathelement path="${TEST_HOME_WEB}/common/classes"/>
      </classpath>
      <arg value="${testname}"/>
      <arg value="${FailStatus}"/>
      <arg value="${TestResultFile}"/>
   </java>
</target>

<target name="test">
   <java classname="TestClient">
      <classpath>
        <pathelement path="${TEST_HOME_WEB}/common/classes"/>
      </classpath>
      <arg value="${testURL}"/>
      <arg value="${testname}"/>
      <arg value="${TestResultFile}"/>
   </java>
</target>

<target name="generateSummary">
   <java classname="Reporter">
      <classpath>
        <pathelement path="${TEST_HOME_WEB}/common/classes"/>
      </classpath>
      <arg value="${TestResultFile}"/>
      <arg value="${TestSummaryFile}"/>
   </java>
</target>
