<!--

    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/javax.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>
