<!--

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

<project name="Rpc Lit" default="all" basedir=".">

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

  <target name="all" depends="clean,assemble,deploy,run,undeploy"/>


  <target name="run.wscompile">
        <exec executable="${WSCOMPILE}" failonerror="true" >
        <arg line="-source 1.1.2 ${wscompile.command}" />
        </exec>
  </target>

  <target name="compile" depends="">
    <antcall target="compile-common">
      <param name="src" value="doclit"/>
    </antcall>
  </target>

  <target name="build" depends="init-common, clean">
      <antcall target="gen-mapping-ejb"/>
      <antcall target="wscompile-ejb"/>
  </target>

  <target name="assemble" depends="init-common, build, compile">
    <copy todir="${build.classes.dir}/META-INF/wsdl"
      file="SimpleTest.wsdl"/>
    <copy todir="${build.classes.dir}"
         file="DocLitMapping.xml"/>
    <antcall target="ejb-jar-common">
      <param name="ejbjar.classes"
             value="DocLitMapping.xml,META-INF/wsdl/**,doclit/*.class" />

    </antcall>
  </target>

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

    <target name="clean" depends="init-common">
      <antcall target="clean-common"/>
      <delete dir="output"/>
      <delete file="DocLitMapping.xml"/>
      <delete file="anyRpcModel.txt"/>
    </target>

    <target name="run" depends="init-common">
    </target>

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

  <target name="wscompile-ejb" depends="init-common">
    <mkdir dir="output"/>
    <antcall target="run.wscompile">
      <param name="wscompile.command"
       value="-import -keep -d output -s output -classpath . wscompile_config.xml"/>
    </antcall>
    <copy todir="${build.classes.dir}/doclit">
       <fileset dir="output/doclit"
                includes="SimpleTest.class"/>
    </copy>
    <delete dir="output"/>
  </target>


  <target name="gen-mapping-ejb" depends="init-common">
    <mkdir dir="output"/>
    <antcall target="run.wscompile">
      <!-- use model -->
      <param name="wscompile.command"
       value="-gen -cp . -keep -d output -Xdebugmodel:anyRpcModel.txt -model DocLitMapping.xml wscompile_config.xml"/>

      <!-- use mapping -->
<!--
      <param name="wscompile.command"
       value="-gen -cp . -keep -d output -Xdebugmodel:anyRpcModel.txt -mapping RpcLitMapping.xml wscompile_config.xml"/>
-->
    </antcall>
    <delete dir="output"/>
  </target>

    <target name="usage">
        <echo>
                Usage:
                        ant all (Executes the WebServices test)
                        ant clean
        </echo>
    </target>
</project>
