<!--

    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="xsd test" default="usage" basedir=".">

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

  <target name="all" depends="clean,build,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="client"/>
    </antcall>
    <antcall target="compile-common">
      <param name="src" value="ejb"/>
    </antcall>
  </target>

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

  <target name="wscompile-appclient" depends="init-common">
    <mkdir dir="output"/>
    <antcall target="run.wscompile">
      <param name="wscompile.command"
       value="-import -keep -d output -s output -classpath . -f:explicitcontext wscompile_config_appclient.xml"/>
    </antcall>
    <copy todir="${build.classes.dir}/soapfaults">
       <fileset dir="output/soapfaults"
        includes="TestService.class, Test.class, Test1RequestType.class, Test2RequestType.class, Test1ResponseType.class, FaultOne.class, FaultTwo.class, FaultThree.class"/>
    </copy>
    <delete dir="output"/>
  </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 . -f:explicitcontext wscompile_config_ejb.xml"/>
    </antcall>
    <copy todir="${build.classes.dir}/soapfaultsejb">
       <fileset dir="output/soapfaultsejb"
        includes="TestService.class, Test.class, Test1RequestType.class, Test2RequestType.class, Test1ResponseType.class, FaultOne.class, FaultTwo.class, FaultThree.class"/>
    </copy>
    <delete dir="output"/>
  </target>

  <target name="assemble" depends="init-common, compile">
    <copy todir="${build.classes.dir}/META-INF/wsdl"
      file="soapfaults.wsdl"/>
    <copy todir="${build.classes.dir}"
         file="mapping_appclient.xml"/>
    <antcall target="appclient-jar-common">
      <param name="appclientjar.classes"
             value="mapping_appclient.xml,META-INF/wsdl/**,soapfaults/*.class" />

    </antcall>
    <copy todir="${build.classes.dir}"
         file="mapping_ejb.xml"/>
    <antcall target="ejb-jar-common">
      <param name="ejbjar.classes"
             value="mapping_ejb.xml,META-INF/wsdl/**,soapfaultsejb/*.class" />

    </antcall>
    <antcall target="ear-common" />
  </target>

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

    <target name="clean" depends="init-common">
      <antcall target="clean-common"/>
      <delete dir="out"/>
      <delete dir="output"/>
      <delete dir="soapfaults"/>
      <delete dir="soapfaultsejb"/>
      <delete file="mapping.xml"/>
      <delete file="mapping_ejb.xml"/>
      <delete file="mapping_appclient.xml"/>
      <delete file="jaxrpc.log"/>
      <delete file="good.debugModel.txt"/>
      <delete file="bad.debugModel.txt"/>
    </target>

    <target name="run" depends="init-common">
        <antcall target="runclient-common">
          <param name="appclient.application.args" value="http://${http.host}:${http.port}/soapfaultsejb/SoapFaultsTest"/>
        </antcall>
    </target>

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

  <target name="gen-mapping-appclient" depends="init-common">
    <antcall target="run.wscompile">
      <param name="wscompile.command"
       value="-import -cp . -mapping mapping_appclient.xml -f:explicitcontext wscompile_config_appclient.xml"/>
    </antcall>
  </target>

  <target name="gen-mapping-ejb" depends="init-common">
    <antcall target="run.wscompile">
      <param name="wscompile.command"
       value="-import -cp . -mapping mapping_ejb.xml -f:explicitcontext wscompile_config_ejb.xml"/>
    </antcall>
  </target>

  <target name="mapping" depends="init-common">
    <delete dir="out"/>
    <mkdir dir="out"/>
    <antcall target="run.wscompile">
      <param name="wscompile.command"
       value="-import -cp . -keep -d out -Xprintstacktrace -Xdebugmodel:good.debugModel.txt -mapping mapping.xml -f:explicitcontext wscompile_config_ejb.xml"/>
    </antcall>
  </target>

   <target name="genall" depends="init-common, mapping">
    <delete dir="out"/>
    <mkdir dir="out"/>
     <antcall target="run.wscompile">
       <param name="wscompile.command"
       value="-gen:both -cp . -keep -d out -Xprintstacktrace -Xdebugmodel:bad.debugModel.txt -f:explicitcontext config.xml"/>
      </antcall>
   </target>


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