<!--

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

-->

<!DOCTYPE project [
  <!ENTITY common SYSTEM "../../../../config/common.xml">
  <!ENTITY testcommon SYSTEM "../../../../config/properties.xml">
  <!ENTITY testproperties SYSTEM "./build.properties">
]>

<project name="connector1.5 TEST" default="all" basedir=".">
<property name="j2ee.home" value="../../.."/>
<property name="client.class" value="client/Client"/>

  <!-- include common.xml and testcommon.xml -->
  &common;
  &testcommon;
  &testproperties;

  <target name="all" depends="init-common, build, setup, runtest, unset"/>
  <target name="embedded-all" depends="init-common, build-dp, setup-dp, deploy-dp, runtest-dp, unset-dp, undeploy-dp"/>

  <target name="build" depends="init-common">
  <ant dir="ra" target="all"/>
  <ant dir="app" target="all"/>
  </target>

    <target name="build-dp" depends="init-common">
    <ant dir="ra" target="all"/>
    <ant dir="app" target="embedded-all"/>
    </target>

  <target name="setup">
    <ant dir="app" inheritAll="false" target="setupJdbc"/>
    <ant dir="." inheritAll="false" target="deploy"/>
  </target>

  <target name="setup-dp">
    <ant dir="app" inheritAll="false" target="setupJdbc"/>
  </target>

  <target name="deploy">
    <ant dir="ra" inheritAll="false" target="deploy"/>
    <ant dir="ra" inheritAll="false" target="testAddAdmin">
        <property  name="prefix" value=""/>
    </ant>
    <ant dir="app" inheritAll="false" target="deploy-ear"/>
    <ant dir="." inheritAll="false" target="restart"/>
  </target>

  <target name="deploy-dp">
    <ant dir="app" inheritAll="false" target="deploy-ear"/>
    <ant dir="ra" inheritAll="false" target="testAddAdmin">
        <property  name="prefix" value="${appname}#"/>
    </ant>
    <ant dir="." inheritAll="false" target="restart"/>
  </target>

<!--
    <target name="runtest" depends="init-common">

        <ant  dir="app" inheritAll="false" target="runtest"/>
-->

<!--
        <java classname="client.WebTest">
          <arg value="${http.host}"/>
          <arg value="${http.port}"/>
          <arg value="${contextroot}"/>
          <classpath>
           <pathelement location="${env.APS_HOME}/lib/reporter.jar"/>
           <pathelement location="app"/>
         </classpath>
        </java>

    </target>
-->

<!--
    <target name="runtest" depends="init-common">
        <antcall target="runwebclient-common">
            <param name="testsuite.id" value="connector1.5 (ear based)"/>
            </antcall>
    </target>
-->

  <target name="runtest" depends="init-common">
    <antcall target="runclient-common">
        <param name="appname" value="simple-connector-bean-validation" />
        <param  name="appclient.application.args" value="Standalone-"/>
    </antcall>
  </target>

 <target name="runtest-dp" depends="init-common">
    <antcall target="runclient-common">
        <param name="appname" value="simple-connector-bean-validation" />
        <param  name="appclient.application.args" value="Embedded-"/>
    </antcall>
  </target>


  <target name="unset">
    <ant dir="app" inheritAll="false" target="unsetJdbc"/>
    <ant dir="." inheritAll="false" target="undeploy"/>
    <ant dir="." inheritAll="false" target="restart"/>
  </target>

  <target name="unset-dp">
    <ant dir="app" inheritAll="false" target="unsetJdbc"/>
    <ant dir="." inheritAll="false" target="restart"/>
  </target>

  <target name="undeploy">
    <ant dir="app" inheritAll="false" target="undeploy"/>
    <ant dir="ra" inheritAll="false" target="testDelAdmin"/>
    <ant dir="ra" inheritAll="false" target="undeploy"/>
  </target>

  <target name="undeploy-dp">
    <ant dir="ra" inheritAll="false" target="testDelAdmin">
      <property  name="prefix" value="${appname}#"/>
    </ant>
    <ant dir="app" inheritAll="false" target="undeploy"/>
  </target>

  <target name="restart" depends="init-common">
    <echo message="Not required to restart"/>
  </target>

  <target name="clean">
    <ant dir="ra" inheritAll="false" target="clean"/>
    <ant dir="app" inheritAll="false" target="clean"/>
  </target>

</project>
