<!DOCTYPE project [
<!--

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

<project name="jaxrpc-hello-web" default="all" basedir=".">

  <property name="appname" value="MyHelloService"/>

  <property environment="env" />

  <property file="${env.APS_HOME}/config.properties"/>
  <property file="samplebuild.properties"/>

  &jaxrpctargets;
  &commonSetup;
  &commonBuild;
  &testproperties;

  <path id="class.path">
        <fileset dir="${env.S1AS_HOME}/modules">
            <include name="**/*.jar"/>
        </fileset>
        <fileset dir="${env.S1AS_HOME}/modules/endorsed">
            <include name="**/*.jar"/>
        </fileset>
        <fileset dir="${env.APS_HOME}/lib">
            <include name="**/*.jar"/>
        </fileset>

    </path>

  <target name="all" depends="clean,deploy,assemble-client,deploy-client,runtest,undeploy"/>


  <target name="create-war" description="Packages the WAR file">
     <echo message="Creating the WAR...."/>
     <delete file="${assemble.war}/${war.file}" />
     <delete dir="${assemble.war}/WEB-INF" />
     <copy todir="${assemble.war}/WEB-INF/classes/">
         <fileset dir="${build}/"
                  includes="**/*.class"
                  excludes="**/*Client.class, **/*.wsdl, **/*mapping.xml"/>
     </copy>
     <copy file="${build}/MyHelloService.wsdl" todir="${assemble.war}/WEB-INF/wsdl" />
     <copy file="${build}/mapping.xml" todir="${assemble.war}/${build}/" />
     <copy file="sun-web.xml" todir="${assemble.war}/WEB-INF" />
     <copy file="webservices.xml" todir="${assemble.war}/WEB-INF" />
     <war destfile="${assemble.war}/${war.file}"
          webxml="./web.xml" filesonly="true" >
       <fileset dir="${assemble.war}" includes="WEB-INF/**, build/**" />
     </war>
     <copy file="${assemble.war}/${war.file}" todir="." />
  </target>

  <target name="build" depends="build-service"
     description="Executes the targets needed to build the service.">
  </target>

  <target name="deploy" depends="set-asadmin,build,create-war">
      <echo message="Deploying ${war.file} from ${basedir}." level="verbose"/>
      <glassfish-embedded-start />
      <glassfish-embedded-deploy app="${war.file}" />
    </target>



   <target name="undeploy-war1" depends="init-common">
      <echo message="Undeploying ${war.file} from ${basedir}." level="verbose"/>
      <glassfish-embedded-undeploy name="${warname}"/>
  </target>


 <!-- <target name="build-client" depends="build-static"
     description="Executes the targets needed to build a static stub client.">
  </target>

  <target name="runclient1" depends="run-client"
     description="Runs the client.">
  </target>

  <target name="run-client"
     description="Runs a stand-alone (non-J2EE) client">
      <java classname="${client.class}" fork="yes" >
        <arg line="${endpoint.address}" />
        <classpath refid="run.classpath" />
    </java>
  </target>


  <target name="generate-client-stubs"
      description="Runs wscompile to generate the client stub classes">
    <antcall target="run-wscompile">
      <param name="param1" value="-gen:client -d ${build.classes.dir} -keep -s ${build.classes.dir} -classpath ${build.classes.dir} ${config.wsdl.file}"/>
    </antcall>
  </target>

    <target name="assemble-client" depends="init-common,generate-client-stubs">
    <antcall target="compile-common">
        <param name="src" value="client"/>
    </antcall>
    <mkdir dir="${build.classes.dir}/META-INF/wsdl"/>
    <copy file="${assemble.war}/WEB-INF/wsdl/MyHelloService.wsdl" todir="${build.classes.dir}/META-INF/wsdl"/>
    <unjar src="${env.APS_HOME}/lib/reporter.jar"
        dest="${build.classes.dir}"/>
    <antcall target="appclient-jar-common">
      <param name="appclientjar.classes"
             value="mapping.xml,META-INF/wsdl/**,helloservice/**,com/**" />
    </antcall>

        <antcall target="deploy-client-common"/>
        <move file="${assemble.dir}/${appname}-client.jar" toFile="${assemble.dir}/${appname}AppClient.jar"/>
  </target>

    <target name="run" depends="init-common,assemble-client">
        <antcall target="runclient-common">
          <param name="appclient.application.args" value="http://${http.host}:${http.port}/hello-jaxrpc/hello"/>
        </antcall>
    </target>      -->

    <target name="assemble-client" depends="init-common">
             <mkdir dir="${build.classes.dir}/webclient/WEB-INF/classes"/>
             <antcall target="run-wscompile">
              <param name="param1" value="-gen:client -d ${build.classes.dir}/webclient/WEB-INF/classes -keep -s ${build.classes.dir}/webclient/WEB-INF/classes -classpath ${build.classes.dir}/webclient/WEB-INF/classes ${config.wsdl.file}"/>
             </antcall>

             <javac srcdir="." destdir="${build.classes.dir}/webclient/WEB-INF/classes"
                   includes="webclient/**">
                <classpath refid="class.path"/>
             </javac>
             <copy file="client-web.xml" tofile="${build.classes.dir}/webclient/WEB-INF/web.xml"/>
             <copy file="build/mapping.xml" tofile="${build.classes.dir}/webclient/WEB-INF/hello-mapping.xml"/>
             <copy file="build/MyHelloService.wsdl" tofile="${build.classes.dir}/webclient/WEB-INF/wsdl/hello.wsdl"/>
             <copy file="config-wsdl.xml" tofile="${build.classes.dir}/webclient/WEB-INF/hello-config.xml"/>




             <copy file="client-sun-web.xml" tofile="${build.classes.dir}/webclient/WEB-INF/sun-web.xml"/>
            <mkdir dir="${assemble.dir}"/>
             <jar destfile="${assemble.dir}/wsclient.war" basedir="${build.classes.dir}/webclient" includes="**"/>
       </target>

       <target name="deploy-client" depends="init-common">
             <property name="client.war" value="${assemble.dir}/wsclient.war"/>
             <echo message="Deploying wsclient.war from ${assemble.dir}." level="verbose"/>
             <glassfish-embedded-deploy app="${client.war}" />
       </target>

       <target name="undeploy-client" depends="init-common">
         <glassfish-embedded-undeploy name="wsclient" />
       </target>

       <target  name="undeploy" depends="undeploy-war1,undeploy-client"/>

       <target name="runtest" depends="init-common">
             <mkdir dir="${build.classes.dir}/client"/>
             <javac srcdir="." destdir="${build.classes.dir}/client"
                   classpath="${env.APS_HOME}/lib/reporter.jar"
                   includes="client/**"/>
             <unjar src="${env.APS_HOME}/lib/reporter.jar" dest="${build.classes.dir}/client"/>
             <java classname="client.TestClient">
               <classpath>
                 <pathelement path="${build.classes.dir}/client"/>
               </classpath>
               <arg value="http://${http.host}:${http.port}/wsclient/RequestProcessor"/>
             </java>
       </target>




</project>
