<project name="vqwiki" basedir="." default="help">

	<property file="build.properties" />
	
	<!-- build a list all jar files needed for compiling -->
	<path id="jamwiki.lib.classpath">
		<pathelement path="${dir.lib}/commons-codec.jar" />
		<pathelement path="${dir.lib}/commons-dbcp-1.2.1.jar" />
		<pathelement path="${dir.lib}/commons-fileupload-1.1.1.jar" />
		<pathelement path="${dir.lib}/commons-io-1.2.jar" />
		<pathelement path="${dir.lib}/commons-logging-1.1.jar" />
		<pathelement path="${dir.lib}/commons-pool-1.3.jar" />
		<pathelement path="${dir.lib}/javadiff-1.0.5.jar" />
		<pathelement path="${dir.lib}/jstl-1.0.6.jar" />
		<pathelement path="${dir.lib}/junit-3.8.2.jar" />
		<pathelement path="${dir.lib}/lucene-core-2.0.0.jar" />
		<pathelement path="${dir.lib}/lucene-highlighter-2.0.0.jar" />
		<pathelement path="${dir.lib}/mail.jar" />
		<pathelement path="${dir.lib}/servlet.jar" />
		<pathelement path="${dir.lib}/spring-beans-2.0.jar" />
		<pathelement path="${dir.lib}/spring-context-2.0.jar" />
		<pathelement path="${dir.lib}/spring-core-2.0.jar" />
		<pathelement path="${dir.lib}/spring-web-2.0.jar" />
		<pathelement path="${dir.lib}/spring-webmvc-2.0.jar" />
		<pathelement path="${dir.lib}/standard-1.0.6.jar" />
	</path>

	<!-- generate task for JFlex -->
	<taskdef classname="JFlex.anttask.JFlexTask" name="jflex" description="Create lexers for default lex plugin">
		<classpath>
			<pathelement location="${dir.lib}/jflex-1.4.1.jar" />
		</classpath>
	</taskdef>
	
	<target name="cleanLexers" description="Cleans up after lexer generation">
		<!-- delete old generated lexer source files -->
		<delete file="${dir.src.java}/org/jamwiki/parser/jflex/JAMWikiPreProcessor.java" />
		<delete file="${dir.src.java}/org/jamwiki/parser/jflex/JAMWikiProcessor.java" />
		<delete file="${dir.src.java}/org/jamwiki/parser/jflex/JAMWikiPostProcessor.java" />
		<delete file="${dir.src.java}/org/jamwiki/parser/jflex/JAMWikiSpliceProcessor.java" />
	</target>

	<target name="clean" depends="cleanLexers" description="Cleans up the directory structure, removing any build artifacts">
		<delete dir="${dir.build}" />
	</target>

	<target name="init" depends="clean" description="Initialize for build sequence">
		<mkdir dir="${dir.build}" />
		<mkdir dir="${dir.build}/classes" />
	</target>

	<target name="jflex" depends="init,cleanLexers" description="Generate Java files from the lexer files">
		<!-- only generate new source files after old ones were deleted through cleanLexers target -->
		<jflex file="${dir.src.lex}/jamwiki-preprocessor.jflex" destdir="${dir.src.java}" />
		<jflex file="${dir.src.lex}/jamwiki-processor.jflex" destdir="${dir.src.java}" />
		<jflex file="${dir.src.lex}/jamwiki-postprocessor.jflex" destdir="${dir.src.java}" />
		<jflex file="${dir.src.lex}/jamwiki-spliceprocessor.jflex" destdir="${dir.src.java}" />
	</target>

	<target name="compile" depends="jflex" description="Compile source code">
		<javac debug="${compile.debug}" deprecation="${compile.deprecation}" destdir="${dir.build.classes}" target="1.4" source="1.4">
			<src path="${dir.src.java}" />
			<include name="org/jamwiki/**" />
			<exclude name="org/jamwiki/test/**" />
			<classpath refid="jamwiki.lib.classpath" />
		</javac>
	</target>

	<target name="war" depends="compile" description="Construct the war file.">
		<war destfile="${dir.build}/${war.name}-${app.version}.war" webxml="${dir.src.webapp}/WEB-INF/web.xml">
			<classes dir="${dir.build.classes}" includes="org/jamwiki/**" />
			<classes dir="${dir.src.properties}" />
			<lib dir="${dir.lib}" includes="*.jar,*.txt" excludes="servlet.jar,jflex-1.4.1.jar,junit-*" />
			<webinf dir="${dir.src.webapp}/WEB-INF" excludes="web.xml,**/index.jsp" />
			<zipfileset dir="${dir.src.resources}/images" prefix="images" />
			<zipfileset dir="${dir.src.resources}/js" prefix="js" />
			<zipfileset file="${dir.src.jsp}/index.jsp" prefix="" />
			<zipfileset file="${basedir}/README.txt" prefix="" />
			<zipfileset file="${basedir}/CHANGELOG.txt" prefix="" />
			<zipfileset file="${basedir}/LICENSE.txt" prefix="" />
			<zipfileset file="${basedir}/CREDITS.txt" prefix="" />
		</war>
	</target>

	<target name="war-local" depends="war" description="Construct the war file using local property files.">
		<unwar src="${dir.build}/${war.name}-${app.version}.war" dest="${dir.build}/war">
			<patternset>
				<exclude name="**/web.xml" />
			</patternset>
		</unwar>
		<delete file="${dir.build}/${war.name}-${app.version}.war" />
		<copy todir="${dir.build}/war/WEB-INF/classes" overwrite="yes">
			<fileset dir="${dir.local}">
				<include name="*.properties" />
			</fileset>
		</copy>
		<copy todir="${dir.build}/war/WEB-INF/lib" overwrite="yes">
			<fileset dir="${dir.local}">
				<include name="*.jar" />
			</fileset>
		</copy>
		<war destfile="${dir.build}/${war.name}-${app.version}.war" basedir="${dir.build}/war" webxml="${dir.src.webapp}/WEB-INF/web.xml" />
		<delete dir="${dir.build}/war" />
	</target>

	<target name="junit-compile" depends="compile" description="Compile JUnit source code">
		<javac debug="${compile.debug}" deprecation="${compile.deprecation}" destdir="${dir.build.classes}" target="1.4" source="1.4">
			<src path="${dir.src.java}" />
			<include name="org/jamwiki/test/**" />
			<classpath refid="jamwiki.lib.classpath" />
		</javac>
	</target>

	<target name="junit" depends="junit-compile" description="Run JUnit tests on the current code.">
		<junit fork="yes" haltonfailure="no">
			<test name="org.jamwiki.test.JAMWikiTestSuite" />
			<formatter type="plain" usefile="false" />
			<classpath>
				<pathelement location="${dir.build.classes}" />
				<pathelement location="${dir.local}" />
				<pathelement location="${dir.src.resources}/classes" />
				<fileset dir="${dir.lib}">
					<include name="*.jar"/>
				</fileset>
			</classpath>
		</junit>
	</target>

	<target name="source" description="Build a zip file of the application source">
		<delete file="${dir.build}/${war.name}-${app.version}-src.zip" />
		<zip destfile="${dir.build}/${war.name}-${app.version}-src.zip">
			<zipfileset dir="." includes="*" />
			<zipfileset dir="${dir.lib}" prefix="lib" />
			<zipfileset dir="${dir.src}" prefix="src" />
		</zip>
	</target>

	<target name="javadiff" depends="init" description="Generate the javadiff.jar file">
		<delete file="${dir.lib}/javadiff-1.0.5.jar" />
		<javac debug="${compile.debug}" deprecation="${compile.deprecation}" destdir="${dir.build.classes}" target="1.4" source="1.4">
			<src path="${dir.src.java}" />
			<include name="org/incava/**" />
		</javac>
		<jar destfile="${dir.lib}/javadiff-1.0.5.jar" basedir="${dir.build.classes}" includes="org/incava/**">
			<fileset dir="${dir.src.java}/org/incava" includes="COPYING, AUTHORS" />
		</jar>
	</target>
	
	<target name="javadoc" depends="jflex" description="Create Javadoc documentation">
		<javadoc destdir="${dir.build.javadoc}">
			<packageset dir="${dir.src.java}" defaultexcludes="yes">
				<include name="org/jamwiki/**" />
			</packageset>
			<classpath refid="jamwiki.lib.classpath" />
		</javadoc>
	</target>

	<target name="help" description="Displays a list of possible targets for the project.">
		<echo>Available targets.  Most users will want the "war" target:

war       - Generates a war file suitable for deployment to a web
            application server.
war-local - Generates a war file suitable for deployment to a web
            application server, replacing jar and property files
            using any files found in the local-files directory.
junit     - Run a series of JUnit tests on the current code.
clean     - Removes any build artifacts from the tree.
source    - Build a zip file of the application source.
javadiff  - Generate the javadiff.jar file.
help      - Displays this text.
javadoc   - Build Javadoc documentation.</echo>
	</target>
</project>
