<!--

    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 run SYSTEM "../../../config/run.xml">
]>

<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;
  &run;

  <target name="all" depends="init-common, build, setup, run, unset"/>
  <target name="run-dp-test" depends="init-common, build, setup-dp, deploy-dp, run, unset-dp, undeploy-dp"/>
  <target name="build" depends="init-common">
   <ant dir="ra" inheritAll="false" target="all"/>
   <ant dir="app" inheritAll="false" target="all"/>
  </target>

  <target name="setup">
    <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="setup"/>
    <ant dir="app" inheritAll="false" target="deploy-ear"/>
    <ant dir="." inheritAll="false" target="restart"/>
  </target>

  <target name="deploy-dp">
    <ant dir="ra" inheritAll="false" target="setup"/>
    <ant dir="app" inheritAll="false" target="deploy-ear"/>
    <ant dir="." inheritAll="false" target="restart"/>
  </target>

  <target name="run" depends="init-common">
    <antcall target="runclient-common">
        <param name="appname" value="worktest" />
    </antcall>
  </target>

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

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

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

  <target name="undeploy-dp">
    <ant dir="app" inheritAll="false" target="undeploy"/>
    <ant dir="ra" inheritAll="false" target="unsetup"/>
  </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>
