<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE project [
<!--

    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

-->

<!ENTITY autodeployUtil SYSTEM "./../util/util.xml">
<!ENTITY commonBuild SYSTEM "./../../config/common.xml">
]>
<!--
    This makes sure that redeployment of an autodeployed app works.  Specifically,
    it tests that the validations (governing app refcs in particular) pass as
    the autodeployed app is removed and then redeployed.
-->

<project name="autodeploy-simple" default="all" basedir=".">

         &commonBuild;
        &autodeployUtil;

    <property name="testName" value="simpleautodeploy"/>

    <target name="prepare" depends="init">
        <property name="result.property.file" value="${build}/result.properties"/>
<echo>in simple/build.xml and build is ${build}</echo>
        <mkdir dir="${build}" />

    </target>

    <target name="build" depends="prepare">

        <echo>Using previously-built ${autodeploy.archive}</echo>
        <!--
            Some earlier tests should have run already, so the app we use for autodeploy testing
            should already be in place in the build directory.
        -->
    </target>



    <target name="private-all" depends="build">

        <antcall target="declare-test">
            <param name="description" value="autodeploy/simple Test autodeploy, auto-redeploy, and autoundeploy"/>
        </antcall>

        <!--
            The next task discards any previous temporary file used to gather property settings that
            record the results of the autodeploy directory monitoring Java class.
        -->
        <delete file="${result.property.file}" quiet="true"/>

        <!--
            Do the auto-deployment.
       -->
        <antcall target="deploy.autodeploy">
            <param name="archive.name" value="${autodeploy.archive.name}"/>
            <param name="archive.file" value="${autodeploy.archive}"/>
            <param name="autodeploy.dir" value="${autodeploy.dir}"/>
            <param name="deployResultPropertyName" value="deployResult1"/>
        </antcall>

        <!--
            Redeploy the archive.  This used to trigger an error because the
            app ref was not removed before the app was removed.
        -->
        <antcall target="deploy.autodeploy">
            <param name="archive.name" value="${autodeploy.archive.name}"/>
            <param name="archive.file" value="${autodeploy.archive}"/>
            <param name="autodeploy.dir" value="${autodeploy.dir}"/>
            <param name="deployResultPropertyName" value="deployResult2"/>
        </antcall>

        <!--
            Now undeploy the app.
        -->
        <antcall target="deploy.autoundeploy">
            <param name="archive.file" value="${autodeploy.archive}"/>
            <param name="archive.name" value="${autodeploy.archive.name}"/>
            <param name="autodeploy.dir" value="${autodeploy.dir}"/>
            <param name="undeployResultPropertyName" value="undeployResult"/>
        </antcall>

        <!--
            Make the result properties of the several substeps accessible now because we need them in
            the next several steps.  The prefix attribute helps avoid possible collisions with other
            property names that might already be present.
        -->
        <property file="${result.property.file}" prefix="simple.autodeploy"/>

        <!--
            Decide whether the test was successful or not.  Make sure that the deploy and
            undeploy results are good.
        -->
        <condition property="result" value="0">
            <and>
                <equals arg1="${simple.autodeploy.deployResult1}" arg2="0"/>
                <equals arg1="${simple.autodeploy.deployResult2}" arg2="0"/>
                <equals arg1="${simple.autodeploy.undeployResult}" arg2="0"/>
            </and>
        </condition>

        <!--
            If the property "result" was not set by the "condition" task just above then something
            went wrong and we set result to 1 now.
        -->
        <condition property="result" value="1">
            <not>
                <isset property="result"/>
            </not>
        </condition>

        <antcall target="processResult">
            <param name="result" value="${result}"/>
            <param name="log" value="${build}/output.log"/>
        </antcall>

    </target>

</project>
