<!--

    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>
