<!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 commonSetup SYSTEM "./../../../../config/properties.xml">
<!ENTITY commonBuild SYSTEM "./../../../../config/common.xml">
<!ENTITY commonRun SYSTEM "./../../../../config/run.xml">
<!ENTITY testproperties SYSTEM "./build.properties">
<!ENTITY database SYSTEM "../../config/database.xml">
]>

<project name="excptApp" default="usage" basedir=".">
    &database;
    &commonSetup;
    &commonBuild;
    &commonRun;
    &testproperties;

    <target name="all" depends="create-lifecycle, setup, restart-appserver,build,deploy,run,undeploy,unsetup, destroy-lifecycle"/>
    <target name="test" depends="build,deploy,run,undeploy,unsetup"/>
    <target name="run-test" depends="build,deploy,run,undeploy"/>

    <target name="clean" depends="init-common">
      <antcall  target="clean-common"/>
    </target>

    <target name="compile" depends="clean">
        <antcall target="compile-common">
            <param name="src" value="ejb"/>
        </antcall>
        <antcall target="compile-common">
            <param name="src" value="client"/>
        </antcall>
    </target>

    <target name="build" depends="compile">
        <antcall target="build-ear-common">
            <param name="ejbjar.classes"
              value="**/*Bean*.class" />
            <param name="appclientjar.classes"
              value="**/*Client*.class" />
        </antcall>
    </target>

    <target name="restart-appserver" depends="init-common">
        <antcall target="restart-server-instance-common"/>
    </target>

    <target name="setup" depends="init-common">
        <antcall target="deploy-jms-common"/>
    </target>

    <target name="deploy" depends="init-common">
        <antcall target="deploy-common"/>
    </target>

    <target name="run" depends="init-common">
      <property file="${env.APS_HOME}/devtests/connector/config/oracle.properties"/>
      <exec executable="${APPCLIENT}" failonerror="true">
          <env key="APPCPATH" value="${env.S1AS_HOME}/domains/domain1/lib/ext/Oranxo.jar:${env.APS_HOME}/lib/reporter.jar"/>
          <arg line="-client ${assemble.dir}/${appname}AppClient.jar"/>
          <arg line="-name ${appname}Client"/>
          <arg line="-textauth"/>
          <arg line="-user j2ee"/>
          <arg line="-password j2ee"/>
          <arg line=" ${oracleForConnector.driver} ${oracleForConnector.url} ${oracleForConnector.user} ${oracleForConnector.pwd} "/>
          <arg line="-xml ${env.S1AS_HOME}/domains/${admin.domain}/config/glassfish-acc.xml"/>
       </exec>
    </target>

    <target name="create-lifecycle" depends="init-common">
      <antcall target="execute-sql-connector">
            <param name="sql.file" value="sql/create_pointbase.sql"/>
      </antcall>
      <antcall target="compile-common">
          <param name="src" value="src"/>
      </antcall>
      <jar jarfile="${assemble.dir}/lifecycletest.jar" update="true">
          <fileset dir="${build.classes.dir}" casesensitive="yes">
          <include name="**/*class*"/>
          </fileset>
      </jar>
      <antcall target="asadmin-common">
          <param name="admin.command" value="create-lifecycle-module --classname  samples.lifecycle.simple.LifecycleListenerImpl"/>
          <param name="operand.props" value="--classpath ${assemble.dir}/lifecycletest.jar  lifecycletest1"/>
      </antcall>
    </target>

    <target name="destroy-lifecycle" depends="init-common">
      <antcall target="asadmin-common">
          <param name="admin.command" value="delete-lifecycle-module "/>
          <param name="operand.props" value=" lifecycletest1"/>
      </antcall>
      <antcall target="execute-sql-connector">
          <param name="sql.file" value="sql/drop_pointbase.sql"/>
      </antcall>
    </target>

    <target name="undeploy" depends="init-common">
        <antcall target="undeploy-common"/>
    </target>

    <target name="unsetup" depends="init-common">
        <antcall target="undeploy-jms-common"/>
    </target>


    <target name="usage">
        <antcall target="usage-common"/>
    </target>
</project>
