<project name="benow-web" default="compile" basedir=".">


	<property name="app.name" value="benow-web" />
	<property name="app.version" value="1.0" />
	<property name="compile.debug" value="true" />
	<property name="java.library.path" value="lib/java/linux/amd64:lib/java/linux/i386:lib/java/win32" />

	<!-- deploy should be the webapps directory for the servlet container -->
	<property file="/etc/benow/build.properties" />
	<property file="etc/build.properties" />

	<!-- syntax highlighter from http://ostermiller.org/syntax/ant.html, syntax.jar must be in classpath -->
	<taskdef name="syntax" classname="com.Ostermiller.Syntax.ToHTMLAntTask" loaderref="deploy">
		<classpath>
			<pathelement location="lib/java/syntax.jar" />
		</classpath>
	</taskdef>


	<path id="compile.classpath">
		<fileset dir="${lib.home}">
			<include name="*.jar" />
		</fileset>
		<pathelement path="${build.home}" />
		<pathelement location="${java.home}/lib/plugin.jar" />
		<pathelement location="${java.home}/../lib/tools.jar" />
		<!--
    <pathelement location="${java.home}/lib/java/rt.jar"/>
-->
	</path>

	<target name="all" depends="clean,jar" description="Clean build and dist, then compile" />

	<target name="clean" description="Delete old build directories">
		<delete dir="${build.home}" quiet="yes" />
		<delete dir="dev-template" quiet="yes" failonerror="no" />
		<delete quiet="yes">
			<fileset dir="." includes="**/*~" defaultexcludes="no" />
		</delete>

		<delete dir="${dist.home}" />
	</target>

	<target name="compile" depends="clean" description="Compile Java sources">

		<!-- Compile Java classes as necessary -->
		<mkdir dir="${build.home}" />
		<javac srcdir="${src.home}" destdir="${build.home}" debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}">
			<classpath refid="compile.classpath" />
		</javac>

		<!-- compile applets -->
		<javac srcdir="${src.home}" destdir="${build.home}" target="1.4" source="1.4" debug="true" classpath="lib/plugin.jar">
			<include name="test/org/benow/web/applet/upload/**" />
		</javac>

	</target>
	<target name="jar" depends="clean,compile" description="Create binary distribution">

		<delete dir="${lib.home}/tt" failonerror="false" />
		<mkdir dir="${lib.home}/tt"/>
		<copy todir="${lib.home}/tt">
			<fileset dir="${build.home}">
				<include name="*/**"/>
			</fileset>
		</copy>

		<!-- prepare resources, outputting for jar -->
		<java classname="org.benow.java.packager.Packager" fork="true">
			<classpath refid="compile.classpath" />
			<arg value="--file-add" />
			<arg value="lib/xsl,var/site,var/templates,var/service,var/themes,html,var/lang,var/examples" />
			<arg value="--output" />
			<arg value="${lib.home}/tt" />
		</java>
		
		<!-- compile dynamic classes, if any -->
		<delete dir="src/dynamic" failonerror="false" />
		<mkdir dir="src/dynamic" />
		<javac srcdir="src/dynamic" destdir="${lib.home}/tt" debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}">
			<classpath refid="compile.classpath" />
		</javac>


		<!-- create jar -->
		<delete file="${app.name}.jar" />
		<jar jarfile="${app.name}.jar" basedir="${lib.home}/tt" />
		<antcall target="dev-jar" />
		<antcall target="client-jar" />
		<antcall target="client-jar15" />

		<delete dir="${build.home}/META-INF" failonerror="true" />
		<delete dir="${build.home}/WEB-INF" failonerror="true" />

		<antcall target="applets-jar" />
		<delete dir="${lib.home}/tt" failonerror="false" />

	</target>


	<target name="generatekeystore" unless="shouldGenerateKey">
		<!-- In addition to compiling the Java files and building the archives
       we also need to generate a keystore and sign the applet's JAR file.
  -->
		<genkey alias="dndappletdemo" storepass="appletstore" keystore="etc/applet.keystore">
			<dname>
				<param name="CN" value="BeNOW.ca" />
				<param name="OU" value="" />
				<param name="O" value="" />
				<param name="C" value="CA" />
			</dname>
		</genkey>
	</target>


	<target name="applets-jar" depends="compile" description="Creates applet jar">
		<condition property="shouldGenerateKey">
			<and>
				<available file="etc/applet.keystore" />
			</and>
		</condition>

		<!-- Step 2. Create the applet JAR
  -->
		<delete file="html/lib/upload/${app.name}-upload-applet.jar" />
		<jar jarfile="html/lib/upload/${app.name}-upload-applet.jar">
			<zipfileset dir="${build.home}/org/benow/web/applet/upload" includes="*" prefix="org/benow/web/applet/upload" />
			<zipfileset dir="${src.home}/org/benow/web/applet/upload" includes="*.png" prefix="org/benow/web/applet/upload" />
		</jar>

		<!-- Step 3. Generate the key store to sign the applet with if it
       has not already been generated.
  -->
		<antcall target="generatekeystore" />

		<delete file="html/lib/upload/signed.jar" failonerror="false"/>
		<signjar alias="dndappletdemo" storepass="appletstore" keystore="etc/applet.keystore" preservelastmodified="true" jar="html/lib/upload/${app.name}-upload-applet.jar" signedjar="html/lib/upload/signed.jar" />

		<move file="html/lib/upload/signed.jar" tofile="html/lib/upload/${app.name}-upload-applet.jar" />
	</target>

	<target name="plugin" depends="jar" description="Creates test plugin jar">

		<delete file="html/plugin/plugin.jar" />
		<!-- make temp pacakging dir -->
		<delete dir="${lib.home}/t" failonerror="false" />
		<mkdir dir="${lib.home}/t" />

		<copy todir="${lib.home}/t/test/org/benow/web/plugin">
			<fileset dir="${build.home}/test/org/benow/web/plugin" />
		</copy>

		<!-- create jar -->
		<jar jarfile="var/plugin/plugin.jar" basedir="${lib.home}/t" />
		<delete dir="${lib.home}/t" />
	</target>

	<target name="client-jar">
		<delete dir="${lib.home}/client" failonerror="false" />
		<mkdir dir="${lib.home}/client" />
		<copy todir="${lib.home}/client/org/benow/service">
			<fileset dir="${build.home}/org/benow/service">
				<include name="*.class" />
			</fileset>
			<fileset dir="${src.home}/org/benow/service">
				<include name="*.java" />
			</fileset>
		</copy>
		<copy todir="${lib.home}/client" failonerror="false">
			<fileset file="docs/api/org/benow/service/SimpleServiceClient.html" />
		</copy>
		<unjar src="${lib.home}/HTTPClient.jar" dest="${lib.home}/client" />
		<unjar src="${lib.home}/xerces.jar" dest="${lib.home}/client" />
		<jar jarfile="benow-service-client.jar" basedir="${lib.home}/client" manifest="etc/benow-service-client.mf" />
		<delete dir="${lib.home}/client" failonerror="false" />
	</target>

	<target name="client-jar15">
		<delete dir="${lib.home}/client" failonerror="false" />
		<delete file="${build.home}/org/benow/service/SimpleServiceClient.class" />
		<delete file="${build.home}/org/benow/service/SimpleServiceClient$RemoteError.class" />
		<javac srcdir="${src.home}" destdir="${build.home}" debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}" target="1.5" listfiles="yes">
			<include name="org/benow/service/SimpleServiceClient.java" />
			<include name="org/benow/service/SimpleServiceClientTester.java" />
			<classpath refid="compile.classpath" />
		</javac>
		<mkdir dir="${lib.home}/client" />
		<copy todir="${lib.home}/client/org/benow/service">
			<fileset dir="${build.home}/org/benow/service">
				<include name="*.class" />
			</fileset>
			<fileset dir="${src.home}/org/benow/service">
				<include name="*.java" />
			</fileset>
		</copy>
		<copy todir="${lib.home}/client" failonerror="false">
			<fileset file="docs/api/org/benow/service/SimpleServiceClient.html" />
		</copy>
		<unjar src="${lib.home}/HTTPClient.jar" dest="${lib.home}/client" />
		<unjar src="${lib.home}/xerces.jar" dest="${lib.home}/client" />
		<jar jarfile="benow-service-client15.jar" basedir="${lib.home}/client" manifest="etc/benow-service-client.mf" />
		<delete dir="${lib.home}/client" failonerror="false" />
	</target>

	<target name="dev-jar">
		<delete dir="dev-template" failonerror="false" />
		<mkdir dir="dev-template/src/java/test/org/benow/web" />
		<copy todir="dev-template/src/java/test/org/benow/web">
			<fileset dir="${src.home}/test/org/benow/web/" />
		</copy>
		<mkdir dir="dev-template/lib/java" />
		<copy todir="dev-template/lib/java">
			<fileset file="${app.name}.jar" />
		</copy>
		<!--
		<mkdir dir="dev-template/etc/config" />
		<copy todir="dev-template/etc/config">
			<fileset file="org.benow.repository.jdbc.xml" />
		</copy>
-->
		<mkdir dir="dev-template/run" />
		<copy todir="dev-template/run">
			<fileset file="run/web.env" />
			<fileset file="run/jdbcShell.env" />
			<fileset file="run/configUtil.env" />
			<fileset file="run/update.env" />
		</copy>
		<mkdir dir="dev-template/etc" />
    <copy tofile="dev-template/etc/menu.bootstrap" failonerror="false">
      <fileset file="etc/menu.bootstrap.imported" />
    </copy>
		<copy tofile="dev-template/etc/md5.list">
			<fileset file="etc/md5.list" />
		</copy>
		<copy tofile="dev-template/build.xml">
			<fileset file="etc/build.base.xml" />
		</copy>
		<mkdir dir="dev-template/etc/init.d" />
		<copy tofile="dev-template/etc/init.d">
			<fileset file="etc/init.d/web.debian" />
		</copy>
    <mkdir dir="dev-template/html" />
		<copy todir="dev-template/html">
			<fileset dir="html/sample/" />
		</copy>
		<mkdir dir="dev-template/html/css" />
		<copy todir="dev-template/html/css">
			<fileset file="html/css/custom.css" />
		</copy>
		<mkdir dir="dev-template/html/images" />
		<copy todir="dev-template/html/images">
			<fileset file="html/images/logo.png" />
		</copy>
		<mkdir dir="dev-template/var/site" />
		<copy todir="dev-template/var/site">
			<fileset dir="var/site" />
		</copy>
		<mkdir dir="dev-template/src/java/test/org/benow/repository" />
		<copy todir="dev-template/src/java/test/org/benow/repository">
			<fileset dir="${src.home}/test/org/benow/repository">
				<include name="*.java" />
			</fileset>
		</copy>
		<mkdir dir="dev-template/src/java/test/org/benow/service" />
		<copy todir="dev-template/src/java/test/org/benow/service">
			<fileset dir="${src.home}/test/org/benow/service">
				<include name="*.java" />
			</fileset>
		</copy>
		<mkdir dir="dev-template/src/java/test/org/benow/xml" />
		<copy todir="dev-template/src/java/test/org/benow/xml">
			<fileset dir="${src.home}/test/org/benow/xml">
				<include name="*.java" />
			</fileset>
		</copy>
		<mkdir dir="dev-template/lib/java" />
		<copy todir="dev-template/lib/java">
			<fileset dir="lib/java" />
		</copy>
		<jar jarfile="${app.name}-base.jar" basedir="dev-template" />
		<java classname="org.benow.java.packager.Packager" fork="true" dir="dev-template">
			<classpath refid="compile.classpath" />
			<arg value="--md5-include" />
			<arg value="bin,etc,html,build.xml,lib,src,var" />
		</java>
		<delete dir="dev-template/database" failonerror="false" />
		<delete file="dev-template/derby.log" failonerror="false" />

	</target>


	<!-- ==================== Javadoc Target ================================== -->

	<!--

  The "javadoc" target creates Javadoc API documentation for the Java
  classes included in your application.  Normally, this is only required
  when preparing a distribution release, but is available as a separate
  target in case the developer wants to create Javadocs independently.

-->

	<target name="javadoc" depends="compile" description="Create Javadoc API documentation">

		<delete dir="docs/api" failonerror="false" />
		<mkdir dir="docs/api" />
		<javadoc sourcepath="src/java" destdir="docs/api" windowtitle="BeNOW Documentation" doctitle="BeNOW Documentation" packagenames="org.benow.*,ca.reachable.*,test.*,xsl.*">
			<classpath refid="compile.classpath" />
		</javadoc>

		<antcall target="walkthru" />
	</target>

	<target name="walkthru">
		<delete dir="docs/walkthru/api" failonerror="false" />
		<mkdir dir="docs/walkthru/api" />
		<javadoc sourcepath="src/java" destdir="docs/walkthru/api" windowtitle="BeNOW Web Walkthru" packagenames="doc.*">
			<classpath refid="compile.classpath" />
		</javadoc>

		<!-- perform syntax highlighting and merge into javadoc tree -->
		<syntax srcdir="src/java" includes="doc/walkthru/*.java" destdir="docs/walkthru/api" css="../../../files/syntax.css" />

		<delete dir="t" failonerror="false" />
		<mkdir dir="t/src/java/doc" />
		<copy todir="t/src/java/doc">
			<fileset dir="src/java/doc" />
		</copy>
		<mkdir dir="t/docs" />
		<copy todir="t/docs/walkthru">
			<fileset dir="docs/walkthru" />
		</copy>
		<copy todir="t" file="README.walkthru" />
		<zip destfile="benow-web-walkthru.zip" basedir="t" />
		<delete dir="t" failonerror="false" />
	</target>

	<target name="native" depends="compile" description="Compile native code">

		<javah classpath="build" destdir="native/linux" verbose="yes">
			<class name="org.benow.util.io.ConsoleReader" />
		</javah>

		<exec dir="native/linux" executable="make" os="Linux">
			<env key="java.home" value="${java.home}" />
			<env key="os.name" value="linux" />
		</exec>

		<!--
	<exec dir="native" executable="gmake" os="FreeBSD">
	 <env key="java.home" value="${java.home}"/>
	 <env key="os.name" value="freebsd"/>
	</exec>
-->
	</target>

	<target name="dist" depends="javadoc" description="Prep for distribution">
		<!-- nothing -->
	</target>

	<target name="setup">
		<exec executable="java">
			<arg value="-jar" />
			<arg value="${lib.home}/benow-launch.jar" />
			<arg value="Launcher" />
			<arg value="--make-script" />
		</exec>
	</target>

	<!-- ==================== Prepare Target ================================== -->

	<!--

  The "prepare" target is used to create the "build" destination directory,
  and copy the static contents of your web application to it.  If you need
  to copy static files from external dependencies, you can customize the
  contents of this task.

  Normally, this task is executed indirectly when needed.

-->

	<target name="prepare">

		<!-- Create build directory and copy static content -->
		<mkdir dir="${build.home}" />

		<!-- Copy static files from external dependencies as needed -->

	</target>


</project>

