<!--

    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

-->

<!-- GLOBAL PROPERTIES -->
<property name="autodeployDir" value="${appserver.instance.dir}/autodeploy"/>
<property name="clientStubsDir" value="${build}/${untaggedName}Client-stubs"/>
<property name="testClusterServer2" value="depltest-cluster-server2"/>
<property name="deploy.clusterinstance2.httpport" value="2002"/>
<property name="deploy.clusterinstance2.orbport" value="2202"/>

<!--
  HANDLING COMMANDS TARGETS, usable for making versioning scenarios
-->

<!--
  Deploys the given version if not registred, force=true can be supply to redeploy.
  @param ${versionExpression} (optional)
  @param ${xmlVersionIdentifier} (optional)
  @param ${dontUseNameOption} (optional)
  @param ${force} (optional)
-->
<target name="deploy.version">
  <antcall target="del.ref.registred"/>
  <antcall target="deploy.version.unregistred"/>
</target>

<!--
  Deploys the given version from it's directory if not registred, force=true can be supply to redeploy.
  @param ${versionExpression} (optional)
  @param ${xmlVersionIdentifier} (optional)
  @param ${dontUseNameOption} (optional)
  @param ${force} (optional)
-->
<target name="deploydir.version" depends="process.appname,create.version,unzip.version,deploy.version"/>

<!--
  Redeploys the given version
  @param ${versionExpression} (optional)
-->
<target name="redeploy.version" depends="process.appname,prepare.cluster">
  <antcall target="common.redeploy.asadmin">
    <param name="arg.list" value="--name ${appName} ${build}/${appName}.${packaging}"/>
  </antcall>
</target>


<!--
  Enables the given version
  @param ${versionExpression} (optional)
-->
<target name="enable.version" depends="process.appname,prepare.cluster">
  <antcall target="common.enable.asadmin">
    <param name="arg.list" value="${appName}"/>
  </antcall>
</target>

<!--
  Enables the given version on ${testClusterServer1} or ${testClusterServer2}
  Used by rolling-upgrade scenario
  @param ${versionExpression} (optional)
-->
<target name="enable.version.clusterInstance1" if="doRollingUpgrade" depends="prepare.httpport.clusterInstance1">
  <antcall target="enable.version">
    <param name="ASADMIN-ARGS" value="--user ${admin.user} --passwordfile ${passwordFile} --port ${admin.port} --target ${testClusterServer1}"/>
  </antcall>
</target>
<target name="enable.version.clusterInstance2" if="doRollingUpgrade" depends="prepare.httpport.clusterInstance2">
  <antcall target="enable.version">
    <param name="ASADMIN-ARGS" value="--user ${admin.user} --passwordfile ${passwordFile} --port ${admin.port} --target ${testClusterServer2}"/>
  </antcall>
</target>

<!--
  Disables the given version(s)
  @param ${versionExpression} (optional)
-->
<target name="disable.version" depends="process.appname,prepare.cluster">
  <antcall target="common.disable.asadmin">
    <param name="arg.list" value="${appName}"/>
  </antcall>
</target>

<!--
  Undeploys the given version(s)
  @param ${versionExpression} (optional)
-->
<target name="undeploy.version" depends="process.appname,prepare.cluster">
  <antcall target="common.undeploy.asadmin">
    <param name="arg.list" value="${appName}"/>
  </antcall>
</target>

<!--
  Deploys the given version with JSR88 API that use a File
  @param ${versionExpression} (optional)
  @param ${xmlVersionIdentifier} (optional)
-->
<target name="deploy.version.jsr88" depends="prepare.version.jsr88,common.deploy.jsr88"/>

<!--
  Deploys the given version with the JSR88 API that use an Inputstream.
  @param ${versionExpression} (optional)
  @param ${xmlVersionIdentifier} (optional)
-->
<target name="deploy.version-stream.jsr88" depends="prepare.version.jsr88,common.deploy-stream.jsr88"/>

<!--
  Redeploys the given version with JSR88 API that use a File
  @param ${versionExpression} (optional)
-->
<target name="redeploy.version.jsr88" depends="prepare.version.jsr88">
    <antcall target="common.run.jsr88">
        <param name="command" value="redeploy"/>
        <param name="arg.list" value="true ${arg.list}"/>
    </antcall>
</target>

<!--
  Redeploys the given version with the JSR88 API that use a Inputstream.
  @param ${versionExpression} (optional)
-->
<target name="redeploy.version-stream.jsr88" depends="prepare.version.jsr88">
    <antcall target="common.run.jsr88">
        <param name="command" value="redeploy-stream"/>
        <param name="arg.list" value="true ${arg.list}"/>
    </antcall>
</target>

<!--
  Deploys the given version with autodeploy directory, available only in PE mode
  @param ${versionExpression} (optional)
  @param ${xmlVersionIdentifier} (optional)
-->
<target name="autodeploy.version" if="PE">
  <antcall target="_autodeploy.version"/>
</target>
<!-- the parent target intend to block the dependency resolution if PE isn't defined -->
<target name="_autodeploy.version" depends="process.appname,create.version">
    <!-- Copy the module in the autodeploy directory -->
    <copy file="${build}/${appName}.${packaging}" todir="${autodeployDir}"/>
    <!-- Wait for the module deployment (timout 10s) -->
    <waitfor maxwait="6" maxwaitunit="second" checkevery="500">
        <available file="${autodeployDir}/${appName}.${packaging}_deployed"/>
    </waitfor>
    <!-- clean the autodeploy directory -->
    <delete file="${autodeployDir}/${appName}.${packaging}"/>
    <delete file="${autodeployDir}/${appName}.${packaging}_deployed"/>
    <delete file="${autodeployDir}/.autodeploystatus/${appName}.${packaging}"/>
 </target>

<!--
    TESTS TARGETS, usable for making versioning scenarios
-->

<!--
  Test that the given version is running
  @param ${versionExpression} (optional)
  @param ${description} (optional, but very important for investigations)

  This target duplicate the run.positive, to have the possible to run the
  deployment scenario without performing the tests.
-->
<target name="run.positive.deploy" if="withTest">
  <antcall target="run.positive"/>
</target>

<!--
  Test that the given version is running or not running
  @param ${versionExpression} (optional)
  @param ${description} (optional, but very important for investigations)
-->
<target name="run" depends="run.positive"/>
<target name="run.positive" depends="prepare.client, prepare.run, common.run.positive"/>
<target name="run.negative" depends="prepare.client, prepare.run, common.run.negative"/>

<!--
  Test that the given version is running on ${testClusterServer1} or ${testClusterServer2}
  Used by rolling-upgrade scenario
  @param ${test-details} (required)
-->
<target name="run.positive.clusterInstance1" if="doRollingUpgrade" depends="prepare.clusterInstance1,prepare.run.positive.clusterInstances,runclient"/>
<target name="run.positive.clusterInstance2" if="doRollingUpgrade" depends="prepare.clusterInstance2,prepare.run.positive.clusterInstances,runclient"/>

<!--
  Test that the given version is registred or not on the ${testServer} target.
  In clustering mode, the default target that is used is ${testCluster},
  but we have also to test the ${testServer} references.

  @param ${versionExpression} (optional)
  @param ${description} (optional, but very important for investigations)
-->
<target name="test.registred.cluster" if="doCluster">
  <antcall target="show-component-status.asadmin">
    <param name="direction" value="true"/>
    <param name="targetName" value="${testServer}"/>
  </antcall>
</target>
<target name="test.notregistred.cluster" if="doCluster">
  <antcall target="show-component-status.asadmin">
    <param name="direction" value="false"/>
    <param name="targetName" value="${testServer}"/>
  </antcall>
</target>

<!--
  Test that the given version is registred or not
  @param ${versionExpression} (optional)
  @param ${description} (optional, but very important for investigations)
-->
<target name="test.registred">
  <antcall target="show-component-status.asadmin">
    <param name="direction" value="true"/>
  </antcall>
  <antcall target="test.registred.cluster"/>
</target>
<target name="test.notregistred">
  <antcall target="show-component-status.asadmin">
    <param name="direction" value="false"/>
  </antcall>
  <antcall target="test.notregistred.cluster"/>
</target>

<!--
  PROPERTIES PROCESSING TARGETS, not directly usable for making scenarios
-->

<target name="process.versionExpression" unless="versionExpression">
  <condition property="versionExpression" value="">
    <not><isset property="versionExpression"/></not>
  </condition>
</target>
<target name="process.classpath">
  <condition property="classpath" value="">
    <not><isset property="classpath"/></not>
  </condition>
</target>
<target name="process.jvmargs">
  <condition property="jvm.args" value="">
    <not><isset property="jvm.args"/></not>
  </condition>
</target>
<target name="process.appname" unless="appName" depends="process.versionExpression">
  <condition property="appName"
             value="${untaggedName}" else="${untaggedName}:${versionExpression}">
    <equals arg1="${versionExpression}" arg2=""/>
  </condition>
</target>
<target name="process.enabled" unless="enabled">
  <condition property="enabled" value="">
    <not><isset property="enabled"/></not>
  </condition>
</target>
<target name="process.xmlversionidentifier" unless="xmlVersionIdentifier">
  <condition property="xmlVersionIdentifier" value="">
    <not><isset property="xmlVersionIdentifier"/></not>
  </condition>
</target>
<target name="process.registred">
  <condition property="notRegistred">
    <or>
      <and>
        <isset property="result"/>
        <equals arg1="${result}" arg2="1"/>
      </and>
    </or>
  </condition>
</target>
<target name="process.hasToDeploy">
  <condition property="hasToDeploy">
    <or>
      <isset property="notRegistred"/>
      <and>
        <isset property="force"/>
        <istrue value="${force}"/>
      </and>
    </or>
  </condition>
</target>
<target name="process.versionexpression">
  <condition property="versionExpression" value="">
    <not><isset property="versionExpression"/></not>
  </condition>
</target>
<target name="process.result">
  <condition property="newResult" value="0">
    <and>
      <equals arg1="${result}" arg2="1"/>
      <equals arg1="${direction}" arg2="false"/>
      <isset property="direction"/>
    </and>
  </condition>
  <condition property="newResult" value="1">
    <and>
      <equals arg1="${result}" arg2="0"/>
      <isset property="direction"/>
      <equals arg1="${direction}" arg2="false"/>
    </and>
  </condition>
  <condition property="newResult" value="${result}">
    <or>
      <not><isset property="direction"/></not>
      <equals arg1="${direction}" arg2="true"/>
    </or>
  </condition>
  <antcall target="processResult">
    <param name="result" value="${newResult}"/>
    <param name="log" value="${build}/${log.next}.output.log"/>
  </antcall>
</target>
<target name="_process.target">
  <condition property="targetName" value="${testServer}">
    <and>
      <isset property="EE"/>
      <not><isset property="doCluster"/></not>
    </and>
  </condition>
  <condition property="targetName" value="${testCluster}">
    <isset property="doCluster"/>
  </condition>
  <condition property="targetName" value="server">
    <not><isset property="target"/></not>
  </condition>
</target>
<target name="process.target" depends="_process.target">
  <property name="target" value="--target=${targetName}"/>
</target>
<target name="process.xml.delete.flag">
  <condition property="hasToDeleteXmlFlag">
    <equals arg1="${xmlVersionIdentifier}" arg2=""/>
  </condition>
</target>
<target name="process.xml.create.flag" depends="process.versionExpression">
  <condition property="hasToCreateXmlFlag">
     <not><equals arg1="${xmlVersionIdentifier}" arg2=""/></not>
  </condition>
</target>

<!--
  CONFIGURATION TARGETS, not directly usable for making scenarios
-->

<target name="prepare.update.xml.identifier" depends="process.xmlversionidentifier" if="hasToUpdateXmlVersion">
  <property name="archiveFile" value="${build}/${appName}.${packaging}"/>
</target>
<target name="prepare.is.version.registred" depends="process.appname,process.target">
  <property name="outputLog" value="${build}/test-is-version-registred.log"/>
  <property name="errorLog" value="${outputLog}"/>
  <property name="arg2.list" value="show-component-status ${target} ${appName}"/>
</target>
<target name="prepare.has.version.registred" depends="process.appname,process.target">
  <property name="outputLog" value="${build}/test-has-version-registred.log"/>
  <property name="errorLog" value="${outputLog}"/>
  <property name="arg2.list" value="show-component-status ${target} ${untaggedName}:*"/>
</target>
<target name="prepare.is.ref.registred" if="doCluster" depends="process.appname">
  <property name="outputLog" value="${build}/test-is-ref-registred.log"/>
  <property name="errorLog" value="${outputLog}"/>
  <property name="arg2.list" value="show-component-status --target ${testServer} ${appName}"/>
</target>
<target name="prepare.has.ref.registred" if="doCluster">
  <property name="outputLog" value="${build}/test-has-ref-registred.log"/>
  <property name="errorLog" value="${outputLog}"/>
  <property name="arg2.list" value="show-component-status --target ${testServer} ${untaggedName}:*"/>
</target>
<target name="prepare.del.all.version.registred" unless="notRegistred" depends="process.target">
  <property name="outputLog" value="${build}/clean-scenario.log"/>
  <property name="errorLog" value="${outputLog}"/>
  <property name="arg.list" value="undeploy ${target} ${untaggedName}:*"/>
</target>
<target name="prepare.clean.scenario.cluster" if="doCluster" unless="notRegistred" depends="process.target">
  <property name="outputLog" value="${build}/clean-scenario.log"/>
  <property name="errorLog" value="${outputLog}"/>
  <property name="arg.list" value="delete-application-ref --target=${testServer} ${untaggedName}:*"/>
</target>
<target name="prepare.run" depends="increment.log.next,process.versionexpression">
  <loadproperties srcFile="log.properties"/>
  <property name="extra.args" value="${versionExpression}"/>
  <property name="desc" value="${description} - logID=${log.next}"/>
  <property name="log.id" value="${log.next}"/>
</target>
<target name="prepare.cluster" if="doCluster" depends="process.versionExpression,process.xmlversionidentifier">
  <condition property="testIdentifier" value="${versionExpression}" else="${xmlVersionIdentifier}">
    <or>
      <equals arg1="${versionExpression}" arg2="${xmlVersionIdentifier}"/>
      <and>
        <not><isset property="dontUseNameOption"/></not>
        <not><equals arg1="${versionExpression}" arg2="${xmlVersionIdentifier}"/></not>
        <not><equals arg1="${versionExpression}" arg2=""/></not>
      </and>
    </or>
  </condition>
  <condition property="testName" value="${untaggedName}:${testIdentifier}" else="${untaggedName}">
    <not><equals arg1="${testIdentifier}" arg2=""/></not>
  </condition>
</target>
<target name="prepare.show-component-status.asadmin" depends="process.appname, process.target">
  <property name="arg.list" value="show-component-status ${target} ${appName}"/>
  <property name="desc" value="${description}"/>
</target>
<target name="prepare.get-client-stubs.asadmin" depends="process.appname,process.target">
  <property name="arg.list" value="get-client-stubs --appname=${appName} ${stubsPath}"/>
  <property name="desc" value="${description}"/>
</target>
<target name="prepare.version.jsr88" depends="process.appname,create.version">
    <property name="arg.list" value="${build}/${appName}.${packaging}"/>
</target>
<target name="prepare.appclient.preparator">
  <property name="classname" value="${preparatorClassName}"/>
  <property name="outputLog" value="${build}/getJwsClientStubs.log"/>
  <property name="classpath" value="${build}"/>
  <property name="arg.list" value="http://${http.host}:${depltest.port}/${untaggedName} ${build}"/>
</target>
<target name="prepare.runclient">
  <!-- set jvm.args="" if notset previously -->
  <condition property="jvm.args" value="${jvm.arguments}" else="">
    <isset property="jvm.arguments"/>
  </condition>
  <!-- build the classpath property -->
  <condition property="classpath" value="${build}" else="${runClientClassPath}">
    <not><isset property="runClientClassPath"/></not>
  </condition>
  <property name="classname" value="${classRunclient}"/>
  <property name="outputLog" value="${build}/${log.id}.output.log"/>
</target>
<target name="prepare.run.positive.clusterInstances" if="doRollingUpgrade" depends="increment.log.next,process.versionExpression">
  <loadproperties srcFile="log.properties"/>
  <property name="direction" value="true"/>
  <property name="url" value="http://${http.host}:${depltest.port}/${link}"/>
  <property name="arg.list" value="${url} ${direction} ${versionExpression}"/>
  <property name="log.id" value="${log.next}"/>
  <antcall target="declare-test">
    <param name="description" value="${test-details} logID=${log.next}"/>
  </antcall>
</target>
<target name="prepare.httpport.clusterInstance1" if="doRollingUpgrade">
  <property name="depltest.port" value="${deploy.clusterinstance1.httpport}"/>
</target>
<target name="prepare.httpport.clusterInstance2" if="doRollingUpgrade">
  <property name="depltest.port" value="${deploy.clusterinstance2.httpport}"/>
</target>
<target name="prepare.clusterInstance1" if="doRollingUpgrade" depends="prepare.httpport.clusterInstance1">
  <property name="test-details" value="${description} (instance1)"/>
</target>
<target name="prepare.clusterInstance2" if="doRollingUpgrade" depends="prepare.httpport.clusterInstance2">
  <property name="test-details" value="${description} (instance2)"/>
  <property name="depltest.port" value="${deploy.clusterinstance2.httpport}"/>
</target>

<!--
  INTERNAL TESTS TARGET, not directly usable for making scenarios
-->

<!--
  if the given version isn't registred, the property notRegistred will be created.
  @param ${versionExpression} (optional)
-->
<target name="is.version.registred" depends="prepare.is.version.registred,exec.asadmin2,process.registred"/>
<!--
  if no version are registred, the property notRegistred will be created.
  @param ${versionExpression} (optional)
-->
<target name="has.version.registred" depends="prepare.has.version.registred,exec.asadmin2,process.registred"/>
<!--
  if the given version ref isn't registred, the property notRegistred will be created.
  @param ${versionExpression} (optional)
-->
<target name="is.ref.registred" depends="prepare.is.ref.registred,exec.asadmin2,process.registred"/>
<!--
  if no version ref(s) are registred, the property notRegistred will be created.
  @param ${versionExpression} (optional)
-->
<target name="has.ref.registred" depends="prepare.has.ref.registred,exec.asadmin2,process.registred"/>

<!--
  INTERNAL CLEANING TARGET
-->

<!--
  Undeploys and delete all the versions and their references, only if registred
  Very usefull for writing scenarios
-->
<target name="clean.scenario">
  <antcall target="clean.scenario.cluster"/>
  <antcall target="_clean.scenario"/>
</target>
<target name="_clean.scenario" depends="prepare,has.version.registred,del.all.version.registred"/>
<target name="clean.scenario.cluster" if="doCluster" unless="doRollingUpgrade">
  <antcall target="_clean.scenario.cluster"/>
</target>
<target name="_clean.scenario.cluster" depends="prepare, has.ref.registred, del.all.ref.registred"/>

<!-- del all the version references if registred -->
<target name="del.all.ref.registred" if="doCluster" unless="notRegistred">
  <antcall target="_del.all.ref.registred"/>
</target>
<target name="_del.all.ref.registred" depends="prepare.clean.scenario.cluster, exec.asadmin"/>
<!-- del the given version reference if registred -->
<target name="del.ref.registred" if="doCluster" unless="doRollingUpgrade">
  <antcall target="_del.ref.registred"/>
</target>
<target name="_del.ref.registred" unless="notRegistred" depends="prepare.cluster,is.ref.registred">
  <antcall target="delAppRef"/>
</target>
<!-- del all the version if registred -->
<target name="del.all.version.registred" unless="notRegistred">
  <antcall target="_del.all.version.registred"/>
</target>
<target name="_del.all.version.registred" depends="prepare.del.all.version.registred, exec.asadmin"/>

<!--
  INTERNAL TARGETS, not directly usable for making scenarios
-->

<!--
  Performs a test with a show-component-status command
  Test result is based on return code
  @param ${xmlVersionIdentifier} (optional)
-->
<target name="show-component-status.asadmin" depends="prepare.show-component-status.asadmin, asadmin.with.result"/>

<!--
  Performs a test with a get-client-stubs command, available only in PE mode
  Test result is based on return code
  @param ${xmlVersionIdentifier} (optional)
-->
<target name="get-client-stubs.asadmin" if="PE">
  <antcall target="_get-client-stubs.asadmin"/>
</target>
<target name="_get-client-stubs.asadmin" depends="prepare.get-client-stubs.asadmin, asadmin.with.result"/>

<!--
  Performs a test with an asadmin command
  @param ${outputLog} (required)
  @param ${errorLog} (required)
  @param ${arg.list} (required)
-->
<target name="asadmin.with.result" depends="declare.test,exec.asadmin,process.result"/>

<!--
  Deploys a version if not registred or if force=true is provided
  @param ${force} (optional)
  @param ${dontUseNameOption} (optional)
  @param ${xmlVersionIdentifier} (optional)
  @param ${versionExpression} (optional)
-->
<target name="deploy.version.unregistred" if="hasToDeploy" depends="is.version.registred,prepare.cluster,process.enabled,process.hasToDeploy">
    <!-- retrieve the force param -->
    <condition property="forceState" value="true" else="false">
    <and>
      <isset property="force"/>
      <istrue value="${force}"/>
    </and>
  </condition>

  <!-- build  ${useNameOption} -->
  <condition property="useNameOption" value="true">
    <not><isset property="dontUseNameOption"/></not>
  </condition>
  <antcall target="create.version"/>
  <antcall target="deployWithNameOption"/>
  <antcall target="deployWithoutNameOption"/>
</target>
<target name="deployWithNameOption" if="useNameOption">
  <antcall target="common.deploy.asadmin">
    <param name="arg.list" value="
           --enabled ${enabled}
           --force=${forceState}
           --name=${appName}
           ${build}/${appName}.${packaging}"/>
  </antcall>
</target>
<target name="deployWithoutNameOption" if="dontUseNameOption">
  <antcall target="common.deploy.asadmin">
    <param name="arg.list" value="
           --enabled ${enabled}
           --force=${forceState}
           ${build}/${appName}.${packaging}"/>
  </antcall>
</target>

<!--
  Creates a version archive, if the archive already exist, we just update it
  @param ${xmlVersionIdentifier} (optional)
  @param ${versionExpression} (optional)
-->
<target name="create.version" depends="prepare, process.appname">
  <condition property="fileNotExist">
    <not><available file="${build}/${appName}.${packaging}"/></not>
  </condition>
  <!-- archive creation -->
  <antcall target="assemble.non-existent">
    <param name="archiveFile" value="${build}/${appName}.${packaging}"/>
    <param name="classPath" value="${build}"/>
  </antcall>
  <!-- update the xmlVersionIdentifier if needed to avoid unexpected behavior -->
  <condition property="hasToUpdateXmlVersion" value="true">
    <and>
      <!-- file exists -->
      <not><isset property="fileNotExist"/></not>
      <or>
        <available file="${build}/${appName}-hasXmlVersion"/>
        <and>
          <isset property="xmlVersionIdentifier"/>
          <not><equals arg1="${xmlVersionIdentifier}" arg2=""/></not>
        </and>
      </or>
    </and>
  </condition>
  <antcall target="update.xml.identifier"/>
</target>

<!--
  Updates a version archive: modify the xmlVersionIdentifier if needed
  @param ${gfDDDir} (required)
  @param ${gfDDFile} (required)
  @param ${packaging} (required)
  @param ${xmlVersionIdentifier} (optional)
  @param ${versionExpression} (optional)
-->
<target name="update.xml.identifier" if="hasToUpdateXmlVersion" depends="prepare.update.xml.identifier">
  <!-- extract only the GFDD -->
  <unzip src="${archiveFile}" dest="${build}">
    <patternset>
      <include name="${gfDDDir}/${gfDDFile}"/>
    </patternset>
    <mapper type="flatten"/>
  </unzip>
  <antcall target="generate.xml.identifier">
    <param name="xmlFile" value="${build}/${gfDDFile}"/>
  </antcall>
  <!-- creates the new archive -->
  <zip destfile="${build}/tmp.${packaging}">
    <zipfileset src="${archiveFile}">
      <exclude name="${gfDDDir}/${gfDDFile}"/>
    </zipfileset>
    <zipfileset dir="${build}" prefix="${gfDDDir}">
      <include name="${gfDDFile}"/>
    </zipfileset>
  </zip>
  <!-- clean some files -->
  <delete file="${archiveFile}"/>
  <move file="${build}/tmp.${packaging}" tofile="${archiveFile}"/>
  <delete file="${build}/${gfDDFile}" failonerror="false"/>
  <antcall target="delete.xml.flag"/>
</target>
<!-- the flag is delete only when an empty value has been written -->
<target name="delete.xml.flag" if="hasToDeleteXmlFlag" depends="process.xml.delete.flag">
  <delete file="${build}/${appName}-hasXmlVersion" failonerror="false"/>
</target>
<!--  the flag is created only when a non-empty value is written -->
<target name="create.xml.flag" if="hasToCreateXmlFlag" depends="process.xml.create.flag">
  <touch file="${build}/${appName}-hasXmlVersion"/>
</target>

<!--
  Updates the ${xmlVersionIdentifier} value in the appropriate GlassFish DD
-->
<target name="generate.xml.identifier" depends="process.xmlversionidentifier,create.xml.flag">
  <replaceregexp file="${xmlFile}"
                 match="&lt;version-identifier&gt;(.*)&lt;&#47;version-identifier&gt;"
                 replace="&lt;version-identifier&gt;${xmlVersionIdentifier}&lt;&#47;version-identifier&gt;"
                 byline="true"/>
</target>

<!-- Unzip a the given version's archive for a directory deployment -->
<target name="unzip.version">
  <unzip src="${build}/${appName}.${packaging}"
         dest="${build}/${appName}">
  </unzip>
</target>

<!--
  TESTS DECLARATIONS

  These targets are used only with the following targets: test.registred, test.notregistred
-->
<target name="declare.test" depends="increment.log.next">
  <loadproperties srcFile="log.properties"/>
  <condition property="runPositive">
    <or>
      <not><isset property="direction"/></not>
      <equals arg1="${direction}" arg2="true"/>
    </or>
  </condition>
  <condition property="runNegative">
    <and>
      <equals arg1="${direction}" arg2="false"/>
      <isset property="direction"/>
    </and>
  </condition>
  <property name="outputLog" value="${build}/${log.next}.output.log"/>
  <property name="errorLog" value="${outputLog}"/>
  <!--
        add informations to the log : what we are expecting
        (a sucess or a fail)
    -->
  <antcall target="declare.test.positive"/>
  <antcall target="declare.test.negative"/>
</target>
<target name="declare.test.positive" if="runPositive" depends="setHttpPort">
  <echo message="expected to succeed => " file="${outputLog}"/>
  <antcall target="declare-test">
    <param name="description" value="${desc} - logID=${log.next} - (${targetName}) - (sucess expected)"/>
  </antcall>
</target>
<target name="declare.test.negative" if="runNegative" depends="setHttpPort">
  <echo message="expected to fail => " file="${outputLog}"/>
  <antcall target="declare-test">
    <param name="description" value="${desc} - logID=${log.next} - (${targetName}) - (fail expected)"/>
  </antcall>
</target>

<!--
  INTERNAL EXECUTION TARGETS
-->

<!--
  @param ${outputLog} (required)
  @param ${errorLog} (required)
  @param ${arg.list} (required)
-->
<target name="exec.asadmin" depends="prepare">
  <exec executable="${ASADMIN}"
        resultproperty="result"
        failonerror="false"
        output="${outputLog}"
        error="${errorLog}"
        append="yes">
    <arg line="${arg.list}"/>
  </exec>
</target>
<!--
  This target duplicates the previous as it's used to perform an asadmin command
  before the real one. (for internal tests targets)
  @param ${outputLog} (required)
  @param ${errorLog} (required)
  @param ${arg2.list} (required)
-->
<target name="exec.asadmin2" depends="prepare">
  <exec executable="${ASADMIN}"
        resultproperty="result"
        failonerror="false"
        output="${outputLog}"
        error="${errorLog}"
        append="yes">
    <arg line="${arg2.list}"/>
  </exec>
</target>

<!--
  This target is used to launch Java classes (clients, and others like for appclient)
  @param ${outputLog} (required)
  @param ${arg.list} (required)
  @param ${classname} (required)
-->
<target name="java.with.result" depends="process.classpath,process.jvmargs">
  <javaWithResult
    fork="true"
    failonerror="false"
    jvm="${JAVA}"
    classname="${classname}"
    classpath="${inst}/lib/gf-client.jar:${classpath}"
    output="${outputLog}"
    append="yes"
    resultproperty="result">
    <jvmarg line="${jvm.args}"/>
    <arg line="${arg.list}"/>
  </javaWithResult>
</target>

<!--
 OTHER TARGETS
-->

<!--
  prepare.client: this target intends to call the appropriate target before
  the call to runClient target
-->
<target name="prepare.client" depends="init">
  <condition property="isAppClient" value="true">
    <and>
      <isset property="appType"/>
      <equals arg1="${appType}" arg2="appClient"/>
    </and>
  </condition>
  <antcall target="prepare.client.appclient"/>
</target>

<!--
  prepare.client.appclient: this target is called before the runClient one.
  It performs some extra processes needed for appclient.
-->
<target name="prepare.client.appclient" if="isAppClient">
  <antcall target="_prepare.client.appclient"/>
</target>
<target name="_prepare.client.appclient" depends="setHttpPort,process.appname,prepare.appclient.preparator,java.with.result"/>

<!--
  This target is called with the following targets common.run, common.run.positive, common.run.negative
-->
<target name="runclient" depends="prepare.runclient,java.with.result,process.result"/>

<target name="delete.log.next">
  <delete file="log.properties"/>
</target>
<target name="increment.log.next">
  <propertyfile file="log.properties">
    <entry key="log.next" default="0" type="int" operation="+" value="1"/>
  </propertyfile>
</target>
<target name="assemble.non-existent" if="fileNotExist">
  <antcall target="assemble"/>
</target>
<target name="clobber" depends="clean, delete.log.next">
  <delete dir="${build}"/>
</target>
<target name="usage">
  <antcall target="all"/>
</target>
<target name="_private-all" unless="doRollingUpgrade">
  <antcall target="main-all"/>
</target>
<target name="private-rollingUpgrade" if="doRollingUpgrade" depends="init">
  <antcall target="main-rollingUpgrade"/>
</target>
<target name="private-all" depends="delete.log.next">
  <antcall target="private-rollingUpgrade"/>
  <antcall target="_private-all"/>
  <antcall target="delete.log.next"/>
</target>

