<!--

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

<project name="connector1.5 - RA : mixed annotation" default="all" basedir=".">

  <property name="j2ee.home" value="../../../.."/>
  <property name="earfile" value="generic-ra.rar"/>

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

  <target name="all">
    <ant dir="src" inheritAll="false" target="all"/>

    <jar jarfile="generic-ra.rar" basedir="."
         includes="generic-ra.jar, META-INF/ra.xml" />
  </target>

  <target name="deploy" depends="init-common">
    <antcall target="deploy-rar-common">
      <param name="rarfile" value="generic-ra.rar"/>
    </antcall>
  </target>

  <target name="undeploy" depends="init-common">
    <antcall target="undeploy-rar-common">
      <param name="undeployrar" value="generic-ra"/>
    </antcall>
  </target>

  <target name="testAddAdmin" depends="init-common">
      <!-- @Readme : there should have been only one admin object configured for 'restype' of MyAdminObject and hence not specifying 'classname' attribute should work fine -->
    <antcall target="asadmin-common">
      <param name="admin.command" value="create-admin-object --target ${appserver.instance.name} --restype connector.MyAdminObject --raname generic-ra --property ResetControl=BEGINNING"/>
      <param name="operand.props" value="eis/testAdmin"/>
    </antcall>

      <antcall target="asadmin-common">
        <param name="admin.command" value="create-admin-object --target ${appserver.instance.name} --restype connector.MyAdminObject_1 --classname connector.MyAdminObject_1 --raname generic-ra --property ResetControl=BEGINNING"/>
        <param name="operand.props" value="eis/aor_1"/>
      </antcall>

      <antcall target="asadmin-common">
        <param name="admin.command" value="create-admin-object --target ${appserver.instance.name} --restype connector.MyAdminObject_Interface_1 --classname connector.MyAdminObject_2 --raname generic-ra --property ResetControl=BEGINNING"/>
        <param name="operand.props" value="eis/aor_1_2"/>
      </antcall>

      <antcall target="asadmin-common">
        <param name="admin.command" value="create-admin-object --target ${appserver.instance.name} --restype connector.MyAdminObject_Interface_2 --classname connector.MyAdminObject_2 --raname generic-ra --property ResetControl=BEGINNING"/>
        <param name="operand.props" value="eis/aor_2_2"/>
      </antcall>

      <antcall target="asadmin-common">
        <param name="admin.command" value="create-admin-object --target ${appserver.instance.name} --restype connector.MyAdminObject_Interface_1 --classname connector.MyAdminObject_3 --raname generic-ra --property ResetControl=BEGINNING"/>
        <param name="operand.props" value="eis/aor_1_3"/>
      </antcall>

      <antcall target="asadmin-common">
        <param name="admin.command" value="create-admin-object --target ${appserver.instance.name} --restype connector.MyAdminObject_Interface_2 --classname connector.MyAdminObject_4 --raname generic-ra --property ResetControl=BEGINNING"/>
        <param name="operand.props" value="eis/aor_2_4"/>
      </antcall>
      <!-- @Readme : there should have been only one admin object configured for 'restype' of MyAdminObject_Interface_3 and hence not specifying 'classname' attribute should work fine -->
      <antcall target="asadmin-common">
        <param name="admin.command" value="create-admin-object --target ${appserver.instance.name} --restype connector.MyAdminObject_Interface_3 --raname generic-ra --property ResetControl=BEGINNING"/>
        <param name="operand.props" value="eis/aor_3_5"/>
      </antcall>


  </target>

  <target name="testDelAdmin" depends="init-common">
    <antcall target="asadmin-common">
      <param name="admin.command" value="delete-admin-object"/>
      <param name="operand.props" value="--target ${appserver.instance.name} eis/testAdmin"/>
    </antcall>

      <antcall target="asadmin-common">
        <param name="admin.command" value="delete-admin-object"/>
        <param name="operand.props" value="--target ${appserver.instance.name} eis/aor_1"/>
      </antcall>

      <antcall target="asadmin-common">
        <param name="admin.command" value="delete-admin-object"/>
        <param name="operand.props" value="--target ${appserver.instance.name} eis/aor_1_2"/>
      </antcall>

      <antcall target="asadmin-common">
        <param name="admin.command" value="delete-admin-object"/>
        <param name="operand.props" value="--target ${appserver.instance.name} eis/aor_2_2"/>
      </antcall>

      <antcall target="asadmin-common">
        <param name="admin.command" value="delete-admin-object"/>
        <param name="operand.props" value="--target ${appserver.instance.name} eis/aor_1_3"/>
      </antcall>

      <antcall target="asadmin-common">
        <param name="admin.command" value="delete-admin-object"/>
        <param name="operand.props" value="--target ${appserver.instance.name} eis/aor_2_4"/>
      </antcall>

 <antcall target="asadmin-common">
        <param name="admin.command" value="delete-admin-object"/>
        <param name="operand.props" value="--target ${appserver.instance.name} eis/aor_3_5"/>
      </antcall>


  </target>

  <target name="sendMessage" depends="init-common">
    <echo message="Class path is ${s1astest.classpath}"/>
    <java fork="true" classname="connector.Messages" failonerror="true">
      <arg line="add Foo TestMessage"/>
      <classpath>
        <pathelement location="${s1astest.classpath}"/>
        <pathelement location="generic-ra.jar"/>
      </classpath>
    </java>
  </target>

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

</project>
