<!--
  Sample Build Script

  @author  Chunyue Li
  @version $Id: //crm/HHSR3/dev/src/_sample/cfg/build.xml#8 $
-->
<project name="${project_name_lower}.sample" default="deploy" basedir=".."> 

  <!-- Project information -->
  <property name="subapp.name" value="${project_name}"/>
  <property name="subproject.description" value="${project_name} Web Application"/>
  <property name="subproject.version" value="1.0"/>

  <!-- default properties -->
  <property name="properties" value="build.properties"/>

  <!-- Load local and user build preferences -->
  <property file="${properties}" environment="env"/>

  <!-- SAP Make Factory Mandatory Properties -->
  <!-- The corresponding release level (level 3) directory -->
  <property name="base.dir" value=".."/>
  <!-- The directory in which to put the .class files -->
  <property name="gen.dir" value="gen"/>
  <!-- The directory in which to put the archives (the results to distribute) -->
  <property name="archive.dir" value="archive"/>
  <!-- The directory to fetch libraries from -->
  <property name="lib.dir" value="lib"/>
  <property name="mbslib.dir" value="./app-root/WEB-INF/lib"/>
  <!-- The name of the build machine -->
  <property name="make.server" value="unknown"/>
  <!-- The release of the current build project, such as dev, cons4 -->
  <property name="make.rel" value="dev"/>

  <!-- Output directory for all files generated by the build process -->
  <property name="gen.home" value="${gen.dir}"/>
  <property name="gen.lib" value="${gen.home}/lib"/>
  <property name="gen.classes" value="${gen.home}/classes"/>
  <property name="gen.precompile" value="${gen.home}/precompile"/>
  <property name="web.home" value="${gen.home}/webapps/${subapp.name}"/>
  <property name="web.WEB-INF" value="${web.home}/WEB-INF"/>
  <property name="web.lib" value="${web.WEB-INF}/lib"/>
  <property name="web.classes" value="${web.WEB-INF}/classes"/>
  <property name="web.srclib" value="${web.WEB-INF}/srclib"/>
  <property name="res.package" value=""/>
  <!-- Input library -->
  <property name="core.jar" value="${mbslib.dir}/mbscore.jar"/>
  <property name="make.jar" value="${mbslib.dir}/mbsmake.jar"/>
  <!-- Output library -->
  <property name="${project_name}.jar" value="${gen.lib}/${subapp.name}.jar"/>
  <property name="${project_name}.war" value="${archive.dir}/${subapp.name}.war"/>
  <property name="${project_name}_SRC.jar" value="${web.srclib}/${subapp.name}_src.jar"/>
  <!-- Source directory -->
  <property name="src.home" value="."/>
  <property name="src.java" value="${src.home}/java"/>
  <property name="src.web" value="${src.home}/app-root"/>
  <property name="res.home" value="${src.web}/WEB-INF/res"/>
  <property name="syncbo.config" value="${bo_impl_dir}/${property_file_name}.properties"/>

  <!-- Include libraries -->
  <property name="tomcat.home" value="${env.TOMCAT_HOME}"/>
  <property name="crimson.jar" value="${tomcat.home}/lib/crimson.jar"/>
  <property name="jaxp.jar" value="${tomcat.home}/lib/jaxp.jar"/>
  <property name="me2lib.jar" value="${tomcat.home}/lib/me2lib.jar"/>
  <property name="MEg.jar" value="${tomcat.home}/lib/MEg.jar"/>
  <property name="servlet.jar" value="${tomcat.home}/lib/servlet.jar"/>
  <property name="webserver.jar" value="${tomcat.home}/lib/webserver.jar"/>
  <property name="jasper.jar" value="${tomcat.home}/lib/jasper.jar"/>
  <property name="junit.jar" value="${lib.dir}/junit.jar"/>

  <property name="jspc.path" value="${tomcat.home}/bin/jspc.bat" />

  <!-- Compilation classpath -->
  <path id="compile.classpath">
    <pathelement location="${crimson.jar}"/>
    <pathelement location="${jaxp.jar}"/>
    <pathelement location="${me2lib.jar}"/>
    <pathelement location="${MEg.jar}"/>
    <pathelement location="${servlet.jar}"/>
    <pathelement location="${webserver.jar}"/>
    <pathelement location="${jasper.jar}"/>
    <pathelement location="${core.jar}"/>
    <pathelement location="${junit.jar}"/>
  </path>

  <path id="precompile.classpath">
    <pathelement location="${${project_name}.jar}"/>
    <pathelement location="${core.jar}"/>
  </path>

  <path id="tools.classpath">
    <pathelement location="${make.jar}"/>
  </path>

  <!-- 
        The "init" target evaluates "available" expressions as necessary
        to modify the behavior of this script and print some information on
        screen
  --> 
  <target name="init">
    <echo message="--------- ${subproject.description} ${subproject.version} ---------" /> 
    <echo message="" /> 
  </target>

  <!-- 
        The "prepare.java" target prepares directories for files generated
	by the building process of Java source code.
  --> 
  <target name="prepare.java" depends="init">
    <mkdir dir="${gen.home}"/> 
    <mkdir dir="${gen.lib}"/> 
    <mkdir dir="${gen.classes}"/> 
    <mkdir dir="${archive.dir}"/> 
  </target>

  <!-- 
        The "prepare.web" target prepares directories for files generated
	by the building process of the web application.
  --> 
  <target name="prepare.web" depends="prepare.java">
    <mkdir dir="${gen.precompile}"/> 
    <mkdir dir="${web.home}"/> 
    <mkdir dir="${web.WEB-INF}"/> 
    <mkdir dir="${web.lib}"/> 
    <mkdir dir="${web.classes}"/> 
<!--  aki  <mkdir dir="${web.srclib}"/>  -->

    <copy todir="${web.home}" overwrite="true">
      <fileset dir="${src.web}" excludes="**/classes/**, **/res/**"/>
    </copy>
  </target>

  <!-- 
        The "build.java" target compiles the Java source code,
	precompiles the web application and packages everything
	to a deliverable file.
  --> 
  <target name="build" depends="build.web">
  </target>

  <!-- 
        The "build.java" target compiles the source code and packages the
	class files to a jar library.
  --> 
  <target name="build.java" depends="prepare.java">
    <javac srcdir="${src.java}" destdir="${gen.classes}"
      debug="${compile.debug}" optimize="${compile.optimize}"
      deprecation="${compile.deprecation}">
      <classpath refid="compile.classpath"/>
    </javac>

    <copy overwrite="yes"
	file="${src.java}/${syncbo.config}"
	tofile="${gen.classes}/${syncbo.config}"/>

    <jar jarfile="${${project_name}.jar}" 
      basedir="${gen.classes}"/>

<!-- aki
    <jar jarfile="${${project_name}_SRC.jar}" 
      basedir="${src.java}"/>
-->

  </target>

  <!-- 
        The "build.web" target precompiles the jsp files and packages
	everything to a deliverable file.
  --> 
  <target name="build.web" 
      depends="prepare.web, build.java, compile.res, precompile.jsp">

    <copy todir="${web.lib}" overwrite="true">
      <fileset dir="${gen.lib}" /> 
    </copy>

    <copy file="${core.jar}" todir="${web.lib}" overwrite="true">
    </copy>

<!-- aki
    <copy file="${${project_name}_SRC.jar}" todir="${web.srclib}" overwrite="true">
    </copy>
-->

    <jar jarfile="${${project_name}.war}" basedir="${web.home}" includes="**"/>
  </target>

  <target name="compile.res" depends="prepare.web">
    <java classname="com.sap.mbs.make.Native2AsciiFolder">
      <classpath refid="tools.classpath"/>
      <arg file="${res.home}"/>
      <arg file="${web.classes}/${res.package}"/>
    </java>
  </target>

  <!-- 
        The "build.web" target precompiles the jsp files to servlets
	and makes necessary entry mappings in web.xml file.
  --> 
  <target name="precompile.jsp" depends="prepare.web, build.java">

    <!-- Precompile JSP files -->
    <exec executable="${jspc.path}">
      <arg value="-d"/>
      <arg file="${gen.precompile}"/>
      <arg value="-webinc"/>
      <arg file="${gen.precompile}/webinc.xml"/>
      <arg value="-webapp"/>
      <arg file="${web.home}"/>
    </exec> 

    <!-- Compile the generated Java source codes -->
    <javac srcdir="${gen.precompile}" destdir="${web.classes}"
      debug="${compile.debug}" optimize="${compile.optimize}"
      deprecation="${compile.deprecation}">
      <classpath refid="compile.classpath"/>
      <classpath refid="precompile.classpath"/>
    </javac>

    <!-- Merge web.xml and generated webinc.xml -->
    <java classname="com.sap.mbs.make.MergeWebXML"> 
      <classpath refid="tools.classpath"/>
      <arg file="${web.WEB-INF}/web.xml"/>
      <arg file="${gen.precompile}/webinc.xml"/>
    </java>

    <!-- Remove jsp files -->
    <delete>
    	<fileset dir="${web.home}" includes="**/*.jsp, **/*.inc"/>
    </delete>
  </target>

  <!-- 
        The "clean" target cleans up build and distribution directories.
  --> 
  <target name="clean" description="Clean build and distribution directories">
    <delete dir="${gen.dir}"/>
    <delete dir="${archive.dir}"/>
  </target>

  <!-- 
        The "deploy" target compiles distributable and deploy it to mobile engine.
  --> 
  <target name="deploy" depends="build"> 
    <delete dir="${tomcat.home}/webapps/${subapp.name}"/>
    <copy file="${${project_name}.war}" todir="${tomcat.home}/webapps" overwrite="true"/>
  </target>

  <!-- 
        The "all" target cleans up and builds the deliverable.
  --> 
  <target name="all" depends="clean, build"/>


  <target name="dev.src" depends="prepare.web, build.java, compile.res">
    <mkdir dir="${web.srclib}"/>

    <jar jarfile="${${project_name}_SRC.jar}" 
      basedir="${src.java}"/>

    <copy todir="${web.lib}" overwrite="true">
      <fileset dir="${gen.lib}" /> 
    </copy>

    <copy file="${core.jar}" todir="${web.lib}" overwrite="true">
    </copy>

    <copy file="${${project_name}_SRC.jar}" todir="${web.srclib}" overwrite="true">
    </copy>

    <jar jarfile="${${project_name}.war}" basedir="${web.home}" includes="**"/>

  </target>

</project>
