<!--
    JSPWiki - a JSP-based WikiWiki clone.

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.  
-->

<!--
    This is the Ant build file for the JSPWiki project.

    The verbosity in this file is intentional - it is also
    an example for those who don't know Ant yet that well
    and would like to learn it.

    The build file assumes the following directory structure:

    JSPWiki
    |___build.xml
    |
    |___etc
    |   |___[jspwiki.properties and web.xml]
    |
    |___src
    |   |___webdocs
    |   |   |___[all .jsp files]
    |   |
    |   |___com
    |       |___[...and the rest of the source code files]
    |
    |___docs
    |
    |___lib
    |
    |___tests
        |___com
            |___[...and the rest of the test source code]

    $Id: build.xml,v 1.97 2007-12-22 22:00:31 jalkanen Exp $
-->

<!--
    First, we define the project.  We assign it a name,
    and the default action if no action is specified on the
    command line.  Also, all relative directory references
    in the rest of the project file should be calculated from
    the current directory.
-->
<project name="JSPWiki" default="compile" basedir=".">

  <!-- This tells us which build.properties file lies.  By default, we
       use the SVN version (which is tuned to my environment), but you
       will probably want to override this from the command line. -->
  <property name="build.properties" value="build.properties" />

  <property file="${build.properties}" />

  <property name="debug" value="true" />
  <property name="deprecation" value="false" />
  <property name="optimize" value="false" />

  <!-- This denotes the directory where the source code lies. -->
  <property name="code.src" value="src" />

  <!-- The class files are actually put in this directory.  It is
       a good habit to keep .class -files separate from the .java -files. -->
  <property name="code.build" value ="build" />

  <!-- The internationalization strings for the core JSPWiki classes -->
  <property name="code.i18n" value="etc/i18n" />
  <!-- The i18n location in which 18n templates are created -->
  <property name="tmplt.i18n.dir" value="i18n_templates" />

  <!-- The location for the JAR file for the core JSPWiki classes -->
  <property name="jarfile" value="${code.build}/${ant.project.name}.jar" />

  <!-- The location of the JAR file for the test classes -->
  <property name="testjarfile" location="${code.build}/${ant.project.name}-test.jar" />

  <!-- The location for the keystore used to sign the JAR; will be created if it doesn't exist. -->
  <property name="jks.keystore" value="${basedir}/etc/jspwiki.jks" />

  <!-- Define a temporary directory, based on the system temporary directory,
       the user name, and the project name (defined above) -->
  <property name="tmpdir" value="${basedir}/build/tmp" />

  <!-- The following three properties define the location of the
       test sources, the location of the test .class files and the
       directory where the test results are written in. -->

  <property name="tests.src" value="tests" />
  <property name="tests.build" value="tests/build" />
  <property name="tests.reports" value="tests/reports" />
  
  <!-- Web unit test properties -->
  <property name="webtests.browser"  value="*firefox" />
  <property name="webtests.reports"  value="${basedir}/tests/reports/selenium" />
  <property name="webtests.build"    value="tests/build/webtests" />
  <property name="webtests.port"     value="10024" />
  <property name="webtests.shutdown" value="19041" />
  <property name="webtests.temp"     value="${java.io.tmpdir}/webtests" />
  <property name="selenium-rc.jar"   value="tests/lib/selenium-server-1.0-beta1.jar" />

  <!-- The place where the javadocs are created -->

  <property name="docs.javadoc" value="doc/javadoc" />

  <!-- The temporary installation directory where all war-files
       are collected, for example -->
  <property name="install.fulldir" value="${tmpdir}/install" />

  <!-- The directory where the SVN sources are checked out. -->
  <property name="install.src" value="${tmpdir}/svnsrc" />

  <!-- Define the SVN properties.  These are used when building the
       source distribution.  Normally, you shouldn't have to care about these.
   -->
  <property name="svn.repository" value="http://svn.apache.org/repos/asf/incubator/jspwiki" />
  <property name="svn.tag" value="branches/JSPWIKI_2_8_BRANCH" />

  <!-- And finally, the directory where the final .zip-file is put -->
  <property name="release.dir" value="releases" />

  <!--  PATH DEFINITIONS -->

  <!-- The base path for compilation.  We include, of course, the
       already built files in the build-directory, and then we
       add all the jar files in the "lib" -directory. -->
  <path id="path.base">
     <pathelement path="${code.build}" />
     <fileset dir="lib">
        <include name="*.jar" />
     </fileset>
  </path>

  <!-- The path used for running tests.  We add the tests/etc directory
       to the base path defined above, since we put all the relevant
       .properties-files in tests/etc. -->
  <path id="path.tests">
     <pathelement location="${jarfile}" />
     <pathelement location="${testjarfile}" />
	<pathelement location="${java.home}/../lib/tools.jar" />
     <fileset dir="lib">
        <include name="*.jar" />
     </fileset>
     <fileset dir="tests/lib">
        <include name="*.jar" />
     </fileset>
     <pathelement path="${tests.src}/etc" />
  </path>

  <!-- The prefix to use when reading environment variables -->
  <property environment="env" />


  <!-- ============================================================== -->

  <!-- Initialising, cleaning, etc. -->

  <target name="init"
          description="Initializes everything, creates directories, etc."
          depends="mkpropertyfile">
     <mkdir dir="${code.build}" />
     <mkdir dir="${tests.build}" />
     <mkdir dir="${tests.reports}" />
     <mkdir dir="${@tests.pagedir@}" />
  </target>

  <target name="mkpropertyfile"
          description="Builds the correct propertyfile from the build.properties">
     <copy file="etc/jspwiki.properties.tmpl" tofile="etc/jspwiki.properties" />
     <copy file="tests/etc/jspwiki.properties.tmpl" tofile="tests/etc/jspwiki.properties" />
     <copy file="tests/etc/jspwiki_rcs.properties.tmpl" tofile="tests/etc/jspwiki_rcs.properties" />
     <copy file="tests/etc/jspwiki_vers.properties.tmpl" tofile="tests/etc/jspwiki_vers.properties" />
     <replace file="etc/jspwiki.properties"
              replacefilterfile="${build.properties}" />
     <replace file="tests/etc/jspwiki.properties"
              replacefilterfile="${build.properties}" />
     <replace file="tests/etc/jspwiki_rcs.properties"
              replacefilterfile="${build.properties}" />
     <replace file="tests/etc/jspwiki_vers.properties"
              replacefilterfile="${build.properties}" />
  </target>

  <!-- Removes the build directory and the tests build directory -->
  <target name="clean"
          description="Cleans away all generated files.">
    <delete dir="${tests.build}" />
    <delete dir="${code.build}" />
    <delete dir="${tests.reports}" />
    <delete file="etc/jspwiki.properties" />
    <delete file="tests/etc/jspwiki.properties" />
    <delete file="tests/etc/jspwiki_rcs.properties" />
    <delete file="tests/etc/jspwiki_vers.properties" />
    <delete>
      <fileset dir="." includes="**/*~" defaultexcludes="no"/>
      <fileset dir="." includes="**/#*#" defaultexcludes="no"/>
    </delete>
  </target>

  <!-- ============================================================== -->

  <!-- Compilation targets -->

  <!-- In English this means that the "init" -target must be executed
       first.  After this, the java compiler is invoked with options
       that compile every .java file in ${code.src} into .class files
       in directory ${code.build}.  The is no debugging information
       and the compiler is instructed to optimize the resulting code.

       For the classpath we use the previously defined path called
       "path.base" -->

  <target name="compile" depends="init"
          description="Builds the source code.">
    <javac srcdir="${code.src}"
           destdir="${code.build}"
           debug="${debug}"
           optimize="${optimize}"
           deprecation="${deprecation}"
           source="1.5"
           target="1.5"
           >
      <classpath refid="path.base" />
      <classpath refid="path.tests" />
    </javac>
  </target>

  <!-- This is similar to above.  We use this to compile the
       tests. -->
  <target name="compiletests" depends="init,compile"
          description="Builds the test code.">
    <javac srcdir="${tests.src}"
           destdir="${tests.build}"
           debug="true"
           deprecation="${deprecation}"
           source="1.5"
           target="1.5"
           >
      <classpath refid="path.base" />
      <classpath refid="path.tests" />
    </javac>
  </target>

  <!-- Creates javadocs -->
  <target name="javadoc"
          description="Compiles the javadocs.">

    <delete dir="${docs.javadoc}" quiet="true"/>
    <mkdir dir="${docs.javadoc}" />

    <javadoc destdir="${docs.javadoc}"
             use="yes"
             breakiterator="true"
             windowtitle="${ant.project.name}">
      <packageset dir="${code.src}">
        <include name="com/ecyrd/**" />
      </packageset>
      <link href="http://java.sun.com/j2se/1.5.0/docs/api/"/>
      <link href="http://java.sun.com/products/javamail/javadocs/"/>
      <link href="http://java.sun.com/j2ee/sdk_1.3/techdocs/api/"/>
      <link href="http://www.jdom.org/docs/apidocs/"/>
      <classpath refid="path.base" />
      <classpath refid="path.tests" />   
    </javadoc>

  </target>

  <!-- ============================================================== -->

  <!--  Installation targets -->

  <!-- This target makes sure all the necessary directories exist
       for building the installation package. -->
  <target name="installinit">
    <mkdir dir="${install.fulldir}" />
    <delete dir="${install.src}" />
    <mkdir dir="${install.src}" />
    <delete dir="${release.dir}" />
    <mkdir dir="${release.dir}" />
  </target>

  <!--  Builds the jar of all compiled class files -->

  <target name="jar" depends="compile">
  	  <!-- This is unfortunately needed, since the default property files are not otherwise
  	       used. FIXME: Figure out a better way to do this in the future. -->
  	  <copy file="${code.i18n}/CoreResources.properties" tofile="${code.i18n}/CoreResources_en.properties"/>
	  <copy file="${code.i18n}/templates/default.properties" tofile="${code.i18n}/templates/default_en.properties"/>
	  <copy file="${code.i18n}/plugin/PluginResources.properties" tofile="${code.i18n}/plugin/PluginResources_en.properties"/>
      <jar jarfile="${jarfile}">
         <fileset dir="${code.build}" includes="**/*.class" />
         <fileset dir="${code.src}" includes="com/**/*.properties" />
         <fileset dir="${code.src}" includes="templates/**/*.properties" />
         <fileset dir="${code.i18n}" />
         <fileset dir="etc" includes="ini/*.xml ini/*.properties" />
      </jar>
  </target>

  <target name="jartests" depends="compiletests">
    <jar jarfile="${testjarfile}" update="false">
      <fileset dir="${tests.build}">
        <include name="**/*.class"/>
      </fileset>
      <fileset dir="${tests.src}">
        <include name="com/**/*.properties"/>
      </fileset>
    </jar>
  </target>

  <!--  Signs the JSPWiki JAR file with a self-issued digital certificate.
        This should only be needed when your JVM starts with a global security
        policy. By this we mean a standard J2SE policy that is set at JVM startup
      	using the -Djava.security.policy=/some/policy/file VM argument. If this
      	global policy file contains references to JSPWiki permission classes
      	(PagePermission, GroupPermission, etc) **and** you set it before JSPWiki
      	is loaded, **then** you must do four things:
      	  0) run this target (signjar)
      	  1) through 3) see below
  -->

  <target name="signjar" depends="jar,sign-init" description="Signs jar: for use with global JVM security policies">
    <sign-jar jar="${jarfile}" />
    <echo>
  Congratulations -- you just signed your JAR file. We assume
  you did this because you want to create a global security
  policy for your entire JVM. That's fine, but please make
  sure you configure your JVM (and container) correctly.
  Normally, this means you should:

    1) Copy ${jarfile} to a place where its classes will be
       read at startup. (Example: for Tomcat, this is
       $CATALINA_HOME/common/lib)

    2) Copy the keystore from ${jks.keystore} to the same
       location as your global policy. (Example: Tomcat's
       policy is in $CATALINA_HOME/conf/catalina.policy,
       so you would copy it to $CATALINA_HOME/conf.)

    3) Add a reference to the keystore as the *first* line of
       the global policy. It should read

       keystore "jspwiki.jks";

       ... or something similar.

  If you have no idea what this is all about, we assume
  that you ran this target just for fun. In that case, we
  hope you enjoyed the experience.</echo>
  </target>

  <!--  Builds a Web Archive - basically a JAR file which
        also contains all of the JSP pages and can be deployed
        as-is.

        The archive gets put in the ${install.fulldir}.  The
        reason for this is that this is just a temporary
        step when building the entire distribution archive.

        We include the following things:

        1) All .jar -files in the lib-directory (except servlet-api.jar
           and jsp-api.jar, since these are provided by the servlet
           container anyway.
        2) All .class-files from the build-directory
        3) Everything from the src/webdocs -directory
        4) Everything from the etc-directory go to the WEB-INF -directory
           of the WAR-file.
   -->

  <target name="war" depends="installinit,jar,compressedjs"
          description="Builds the WAR file for installation.">

    <property name="warfile" value="build/${ant.project.name}.war" />

    <delete file="${warfile}" />

    <war warfile="${warfile}"
         webxml="etc/web.xml">
       <lib dir="lib" includes="*.jar" excludes="servlet-api.jar jsp-api.jar"/>
       <lib file="${jarfile}" />
       <lib file="tests/lib/stripes*.jar" />
       <fileset dir="${code.src}/webdocs" includes="**" excludes="**/FCK/jsp" />
       <webinf dir="etc">
         <include name="dtd/**" />
         <include name="jsp/**" />
         <include name="commons-logging.properties" />
         <include name="jspwiki.policy" />
         <include name="jspwiki.properties" />
         <include name="*.tld" />
         <include name="userdatabase.xml" />
        <include name="groupdatabase.xml" />
        <include name="geronimo-web.xml" />
       </webinf>
       <classes dir="etc" includes="oscache.properties" />
    </war>

    <war warfile="${warfile}"
         webxml="etc/web.xml" update="true">
      	<fileset dir="${tmpdir}/compress/webdocs/" includes="**/*.js" />
      	<fileset dir="${tmpdir}/compress/webdocs/" includes="**/*.css" />
    </war>

   </target>

    <!-- Defines a compression macro for the JS/CSS bits we want to transform
         into something that saves a bit of space. -->
    
    <macrodef name="compressjs">
        <attribute name="src"/>
        <attribute name="args" default=""/>   
        <sequential>
            <java jar="tests/lib/yuicompressor-2.4.2.jar"
                  output="${tmpdir}/compress/@{src}"
                  fork="true">
                <arg line="'${code.src}/@{src}' @{args}" />
            </java>
        </sequential>
    </macrodef>
    
   <!-- We compress the Javascript using yahoo's yui compressor, 
        which compresses both javascript and css files.
        If you don't want to use the compressed stuff, just copy the default
        .js files from the distro on top of the compressed ones from the WAR.
    -->
   <target name="compressedjs">
        <mkdir dir="${tmpdir}/compress/webdocs/scripts"/>
    
        <compressjs src="webdocs/scripts/jspwiki-common.js"/>
        <compressjs src="webdocs/scripts/jspwiki-edit.js"/>
        <compressjs src="webdocs/scripts/jspwiki-prefs.js"/>
        <compressjs src="webdocs/scripts/jspwiki-commonstyles.js"/>
        <compressjs src="webdocs/scripts/prettify.js"/>

        <mkdir dir="${tmpdir}/compress/webdocs/templates/default"/>

        <compressjs src="webdocs/templates/default/jspwiki.css"
                    args="--line-break 0" />
    
        <compressjs src="webdocs/templates/default/jspwiki_print.css"
                    args="--line-break 0" />   	

        <mkdir dir="${tmpdir}/compress/webdocs/templates/default/skins/OrderedList"/>   	
   	    <compressjs src="webdocs/templates/default/skins/OrderedList/skin.css"
                args="--line-break 0" />

        <mkdir dir="${tmpdir}/compress/webdocs/templates/default/skins/PlainVanilla"/>   	
   	    <compressjs src="webdocs/templates/default/skins/PlainVanilla/skin.css"
                args="--line-break 0" />

        <mkdir dir="${tmpdir}/compress/webdocs/templates/default/skins/PlainVanilla 1024x768"/>   	
        <compressjs src="webdocs/templates/default/skins/PlainVanilla 1024x768/skin.css"
                args="--line-break 0" />

   	    <mkdir dir="${tmpdir}/compress/webdocs/templates/default/skins/Smart"/>   	
        <compressjs src="webdocs/templates/default/skins/Smart/skin.css"
                args="--line-break 0" />
   </target>

  <target name="opened-war" depends="war"
   description="Creates an opened JSPWiki war hierarchy into the build dir.">

    <mkdir dir="${code.build}/${ant.project.name}" />
    <unzip src="${warfile}"
           dest="${code.build}/${ant.project.name}" />

  </target>


  <!--
       Here goes some nice Ant magic...  We build the source
       code archive by directly exporting all code from the SVN
       repository, and then zipping it to the temporary installation
       directory.

       NB: You must have the svn command line client available in
       your path before you attempt to run this task.
   -->
  <target name="srczip" depends="installinit"
          description="Builds source zip.">

  	<delete dir="${install.src}" />
  	
  	<exec executable="svn">
       <arg line="export ${svn.repository}/${svn.tag} &quot;${install.src}&quot;"/>
  	</exec>
  	
    <zip zipfile="${release.dir}/${ant.project.name}-src.zip">
        <zipfileset dir="${install.src}" />
    </zip>

  </target>

  <!-- Creates a zip of all the core pages.  The file which determines
       whether a page is a core page or not is found in src/wikipages/.corepages -->

  <target name="corepageszip" depends="installinit">
    <zip zipfile="${install.fulldir}/${ant.project.name}-corepages_en.zip"
         basedir="src/wikipages/en" includesfile="src/wikipages/.corepages">
    </zip>
  
    <zip zipfile="${install.fulldir}/${ant.project.name}-corepages_fi.zip"
         basedir="src/wikipages/fi" includesfile="src/wikipages/.corepages">
    </zip>

    <zip zipfile="${install.fulldir}/${ant.project.name}-corepages_de.zip"
         basedir="src/wikipages/de">
    </zip>

    <zip zipfile="${install.fulldir}/${ant.project.name}-corepages_zh_CN.zip"
         basedir="src/wikipages/zh_CN">
    </zip>
  	
  	<zip zipfile="${install.fulldir}/${ant.project.name}-corepages_es.zip"
         basedir="src/wikipages/es" includesfile="src/wikipages/.corepages">
    </zip>
 
    <zip zipfile="${install.fulldir}/${ant.project.name}-corepages_nl.zip"
         basedir="src/wikipages/nl">
    </zip>

    <zip zipfile="${install.fulldir}/${ant.project.name}-corepages_fr.zip"
         basedir="src/wikipages/fr">
    </zip>

    <zip zipfile="${install.fulldir}/${ant.project.name}-corepages_it.zip"
         basedir="src/wikipages/it">
    </zip>

    <zip zipfile="${install.fulldir}/${ant.project.name}-corepages_pt_BR.zip"
         basedir="src/wikipages/pt_BR">
    </zip>
 
    <!-- Add other languages here -->
    
  </target>

  <!-- Creates a full ZIP file of all document files, ignoring any resources
       which start with a dot. -->

  <target name="documentzip" depends="installinit,javadoc"
          description="Creates JSPWiki documentation zipfile">

    <zip zipfile="${install.fulldir}/${ant.project.name}-doc.zip">
        <zipfileset dir="doc" prefix="doc" />
        <zipfileset dir="src/wikipages" prefix="doc/wikipages" excludes="**/.??*"/>
    </zip>
  </target>

  <!-- Builds the entire distribution set.

       We build both the WAR-file and the source zip, then
       copy in some useful files and zip the whole thing
       into the release directory.
    -->
  <target name="dist" depends="installinit,srczip,war,corepageszip,documentzip"
          description="Builds the entire distribution archive.">
     <copy file="README" todir="${install.fulldir}" />
     <copy file="ChangeLog" todir="${install.fulldir}" />
     <copy file="ReleaseNotes" todir="${install.fulldir}" />
     <copy file="LICENSE" todir="${install.fulldir}" />
 	 <copy file="${warfile}" todir="${install.fulldir}" />

     <zip zipfile="${release.dir}/${ant.project.name}-bin.zip">
        <zipfileset dir="${install.fulldir}" prefix="${ant.project.name}" />
     </zip>

  </target>

  <!-- ============================================================== -->

  <!-- Running tests -->

  <target name="tests-init" depends="mkpropertyfile">
      <!-- Build up the /etc directory for testing -->
      <delete file="tests/etc/userdatabase.xml" />
      <delete file="tests/etc/userdatabase.xml.old" />
      <copy file="tests/etc/userdatabase.xml.tmpl" toFile="tests/etc/userdatabase.xml"/>
      <delete file="tests/etc/groupdatabase.xml" />
      <delete file="tests/etc/groupdatabase.xml.old" />
      <copy file="tests/etc/groupdatabase.xml.tmpl" toFile="tests/etc/groupdatabase.xml"/>
      <mkdir dir="tests/etc/WEB-INF" />

      <!-- Create web.xml files for testing -->
      <copy file="${basedir}/etc/web.xml" tofile="${webtests.build}/web.xml.custom" overwrite="true" />

      <!-- For web unit tests, turn off SSL (self-signed certs b0rk
           the tests) and enable JDBC refs -->
      <replace file="${webtests.build}/web.xml.custom"
               token="CONFIDENTIAL" value="NONE" />
      <replace file="${webtests.build}/web.xml.custom"
               token="&lt;!--  REMOVE ME TO ENABLE JDBC DATABASE" value="" />
      <replace file="${webtests.build}/web.xml.custom"
               token="REMOVE ME TO ENABLE JDBC DATABASE  --&gt;" value="" />

      <!-- For unit testing, turn on container auth -->
      <copy file="${webtests.build}/web.xml.custom"
          tofile="${webtests.build}/web.xml.container" overwrite="true" />
      <replace file="${webtests.build}/web.xml.container"
               token="&lt;!--  REMOVE ME TO ENABLE CONTAINER-MANAGED AUTH" value="" />
      <replace file="${webtests.build}/web.xml.container"
               token="REMOVE ME TO ENABLE CONTAINER-MANAGED AUTH  --&gt;" value="" />
      <copy file="${webtests.build}/web.xml.container"
          tofile="tests/etc/WEB-INF/web.xml" overwrite="true" />

      <!-- Copy the DTDs to the test WEB-INF -->
      <mkdir dir="tests/etc/WEB-INF/dtd" />
      <copy toDir="tests/etc/WEB-INF/dtd">
        <fileset dir="${basedir}/etc/dtd/" />
      </copy>
  </target>

  <!-- This target runs the JUnit tests that are available
       under tests/.  It generates the test result files
       into the ${tests.reports} -directory, one file per
       each tested class.  The tests are generated in
       plain text, but you can easily get XML format results
       as well, just by setting the formatter, below.

       Only tests that end with "*Test.java" are included.
       This is because then you can also use a manual
       "AllTests.java" in each directory, as per the JUnit
       Cookbook.

       This runs the tests in text mode.  If you want the
       pretty GUI you probably want to write a new target.

       If this test fails with a "cannot find task 'junit'"
       error, put the junit.jar in your CLASSPATH.

       More info http://ant.apache.org/faq.html#delegating-classloader
   -->
  <target name="tests" depends="jar,tests-init,jartests,tests-db-init"
          description="Runs the JUnit tests.">

    <junit printsummary="yes" haltonfailure="no" fork="yes">
        <classpath>
           <path refid="path.tests" />
        </classpath>
        <sysproperty key="jspwiki.tests.auth" value="true" />
        <formatter type="plain" />
        <formatter type="xml" usefile="yes" />
        <batchtest todir="${tests.reports}">
           <fileset dir="${tests.src}">
                <include name="**/*Test.java" />
                <exclude name="**/AllTest*java" />
                <include name="**/StressTestSpeed.java" if="tests.stress.enabled"/>
                <exclude name="com/ecyrd/jspwiki/web/*.*" />
                <exclude name="com/ecyrd/jspwiki/TranslatorReaderTest*" />
           </fileset>
        </batchtest>
     </junit>

  	 <junitreport todir="${tests.src}">
  	    <fileset dir="${tests.reports}">
  	       <include name="**/TEST-*.xml" />
  	    </fileset>
  	    <report format="noframes" todir="${tests.src}" />
  	 </junitreport>

  </target>

  <target name="tests-auth" depends="jar,tests-init,jartests"
          description="Runs the AuthorizationManager tests, with JDPA">

    <junit printsummary="yes" haltonfailure="no" fork="yes">
        <classpath>
           <path refid="path.tests" />
        </classpath>
        <sysproperty key="jspwiki.tests.auth" value="true" />
        <jvmarg value="-Xdebug" />
        <jvmarg value="-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y" />
        <formatter type="plain" />
        <formatter type="xml" usefile="yes" />
        <batchtest todir="${tests.reports}">
           <fileset dir="${tests.src}">
                <include name="**/AuthorizationManagerTest.java" />
           </fileset>
        </batchtest>
     </junit>

     <junitreport todir="${tests.src}">
        <fileset dir="${tests.reports}">
           <include name="**/TEST-*.xml" />
        </fileset>
        <report format="noframes" todir="${tests.src}" />
     </junitreport>

  </target>

  <target name="guitests" depends="jar,tests-init,jartests,tests-db-init"
          description="Runs the tests in a pretty window.">

     <java classname="junit.swingui.TestRunner" fork="yes" maxmemory="512m">
        <classpath>
           <path refid="path.tests" />
        </classpath>
        <sysproperty key="jspwiki.tests.auth" value="true" />
        <arg value="com.ecyrd.jspwiki.AllTests" />
     </java>

  </target>

  <!-- This target runs web unit tests using Selenium. These tests run
       using an enbedded Jetty server running on a hard-coded high port.
       The webapps deployed to Jetty contain 2 sample users:
       - 'janne' with password 'myP@5sw0rd' and role of 'Authenticated'
       - 'admin' with password 'myP@5sw0rd' and roles of 'Authenticated', 'Admin'
       These are the same as the test users in tests/com.ecyrd.jspwiki.auth.Users.
  -->
  <target name="webtests" depends="jar,tests-init,jartests,tests-db-init,war">
    <mkdir dir="${webtests.temp}" />
    <mkdir dir="${webtests.build}" />
  
    <!-- Create the master jspwiki.properties template for all webtests -->
    <copy file="tests/etc/jspwiki.properties"
        toFile="${webtests.build}/jspwiki.properties.tmpl" flatten="true" />
    <propertyfile file="${webtests.build}/jspwiki.properties.tmpl">
      <entry key="jspwiki.authorizer" value="com.ecyrd.jspwiki.auth.authorize.WebContainerAuthorizer" />
      <entry key="jspwiki.userdatabase" value="com.ecyrd.jspwiki.auth.user.XMLUserDatabase" />
      <entry key="jspwiki.groupdatabase" value="com.ecyrd.jspwiki.auth.authorize.XMLGroupDatabase" />
      <entry key="jspwiki.referenceStyle" value="relative" />
      <entry key="jspwiki.userdatabase.hashPrefix" value="false" />
      <entry key="log4j.appender.TestContainerLog.File" value="${basedir}/${webtests.build}/testcontainer.log" />
      <entry key="jspwiki-x.securityconfig.enable" value="true" />
      <entry key="jspwiki.login.throttling" value="false" />
    </propertyfile>

    <!-- Build the custom auth WAR -->
    <webtest-setup context="test-custom"
      webxml="${webtests.build}/web.xml.custom"/>

    <!-- Build the custom auth WAR (absolute URLs) -->
    <webtest-setup context="test-custom-absolute"
      webxml="${webtests.build}/web.xml.custom">
      <propertyfile-entries>
        <entry key="jspwiki.referenceStyle" value="absolute" />
        <entry key="jspwiki.baseURL" value="http://localhost:${webtests.port}/test-custom-absolute/" />
      </propertyfile-entries>
    </webtest-setup>

    <!-- Build the container auth WAR -->
    <webtest-setup context="test-container"
      webxml="${webtests.build}/web.xml.container" />

    <!-- Build the custom auth WAR (JDBC database) -->
    <webtest-setup context="test-custom-jdbc"
      webxml="${webtests.build}/web.xml.custom">
      <propertyfile-entries>
        <entry key="jspwiki.userdatabase" value="com.ecyrd.jspwiki.auth.user.JDBCUserDatabase" />
        <entry key="jspwiki.groupdatabase" value="com.ecyrd.jspwiki.auth.authorize.JDBCGroupDatabase" />
      </propertyfile-entries>
    </webtest-setup>

    <!-- Build the container auth WAR (JDBC database) and test it -->
    <webtest-setup context="test-container-jdbc"
      webxml="${webtests.build}/web.xml.container">
      <propertyfile-entries>
        <entry key="jspwiki.userdatabase" value="com.ecyrd.jspwiki.auth.user.JDBCUserDatabase" />
        <entry key="jspwiki.groupdatabase" value="com.ecyrd.jspwiki.auth.authorize.JDBCGroupDatabase" />
      </propertyfile-entries>
    </webtest-setup>

    <!-- Run each test in succession -->
    <mkdir dir="${webtests.reports}" />
    <webtest-exec context="test-custom" />
    <webtest-exec context="test-container" />
    <webtest-exec context="test-custom-jdbc" />
    <webtest-exec context="test-container-jdbc" />
    <webtest-exec context="test-custom-absolute" />
    <echo>The web unit tests have finished. You can find the test reports in ${webtests.reports}.
    
If all of the tests ran successfully, the reports will all be "green."</echo>
    
  </target>

  <macrodef name="webtest-setup">
    <attribute name="context" />
    <attribute name="webxml" />
    <attribute name="context.dir" default="${webtests.build}/@{context}" />
    <attribute name="context.path" default="${basedir}/${webtests.build}/@{context}" />
    <element name="propertyfile-entries" implicit="no" optional="true" />
    <sequential>

      <echo message="===============================================================" />
      <echo message=" Setting up web unit tests for '@{context}'" />
      <echo message="- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" />
      <echo message="" />
      <echo message="Creating Selenium test scripts..."/>
      <mkdir dir="@{context.dir}/selenium" />
      <copy flatten="true" toDir="@{context.dir}/selenium">
        <fileset dir="tests/etc/selenium/tests/all" />
        <filterset>
          <filter token="selenium.context" value="@{context}" />
        </filterset>
      </copy>

      <echo message="Creating test page repositories..."/>
      <!-- Create a wiki page directory and point jspwiki.properties to it -->
      <mkdir dir="@{context.dir}/wikipages" />
      <copy toDir="@{context.dir}/wikipages" flatten="true" >
        <fileset dir="src/wikipages/en">
          <include name="Main.*" />
          <include name="LeftMenu*.*" />
          <include name="About.*" />
          <include name="RecentChanges.*" />
          <include name="WikiEtiquette.*" />
          <include name="UnusedPages.*" />
          <include name="UndefinedPages.*" />
          <include name="PageIndex.*" />
        </fileset>
      </copy>

      <echo message="Creating test webapp..."/>
      <mkdir dir="@{context.dir}/webapp/WEB-INF/classes" />
      <mkdir dir="@{context.dir}/webapp/WEB-INF/lib" />

      <!-- Copy the WEB-INF files -->
      <copy toDir="@{context.dir}/webapp/WEB-INF">
        <fileset dir="etc">
          <include name="dtd/**" />
          <include name="commons-logging.properties" />
          <include name="jspwiki.policy" />
          <include name="*.tld" />
        </fileset>
        <fileset dir="tests/etc" includes="userdatabase.xml groupdatabase.xml" />
      </copy>
      <copy toFile="@{context.dir}/webapp/WEB-INF/web.xml" file="@{webxml}" flatten="true" />
      
      <!-- Create the jspwiki.properties file -->
      <mkdir dir="@{context.dir}/workdir" />
      <copy toFile="@{context.dir}/webapp/WEB-INF/jspwiki.properties"
        file="${webtests.build}/jspwiki.properties.tmpl" flatten="true" />
        <propertyfile file="@{context.dir}/webapp/WEB-INF/jspwiki.properties">
          <entry key="jspwiki.baseURL"                            value="http://localhost:${webtests.port}/@{context}/" />
          <entry key="jspwiki.workDir"                            value="@{context.path}/workdir" />
          <entry key="jspwiki.fileSystemProvider.pageDir"         value="@{context.path}/wikipages" />
          <entry key="jspwiki.basicAttachmentProvider.storageDir" value="@{context.path}/wikipages" />
          <entry key="jspwiki.xmlUserDatabaseFile"                value="@{context.path}/webapp/WEB-INF/userdatabase.xml" />
          <entry key="jspwiki.xmlGroupDatabaseFile"               value="@{context.path}/webapp/WEB-INF/groupdatabase.xml" />
          <entry key="log4j.appender.FileLog.File"                value="@{context.path}/jspwiki.log" />
        <propertyfile-entries/>
      </propertyfile>

      <!-- Copy the classes -->
      <copy toDir="@{context.dir}/webapp/WEB-INF/classes">
        <fileset dir="etc" includes="oscache.properties" />
      </copy>

      <!-- Copy the libraries -->
      <copy toDir="@{context.dir}/webapp/WEB-INF/lib">
        <fileset dir="lib" includes="*.jar" excludes="servlet-api.jar jsp-api.jar"/>
        <fileset file="${jarfile}"/>
        <fileset file="${jdbc.driver.jar}"/>
      </copy>

      <!-- Copy the JSPs -->
      <copy toDir="@{context.dir}/webapp">
        <fileset dir="${code.src}/webdocs" includes="**" />
      </copy>

    </sequential>
  </macrodef>
  
  <!-- ============================================================== -->
  
  <!-- Selenium execution test task -->

  <!-- This macro executes the Selenium test plans located in 
       tests/build/selenium/@context@/, based on templates stored
       in tests/etc/selenium/tests. It expects your favorite servlet
       container up & running on ${tomcat.protocol}://${tomcat.host}:${tomcat.port} 
       For this reason, these properties must be set up in your 
       build.properties file.
  -->

  <macrodef name="webtest-exec">
    <attribute name="context"/>
    <sequential>
      <!-- If already running, shut down the embedded Jetty server by pinging the shutdown port -->
      <echo message="Shutting down Jetty (if it is up)."/>
      <get src="http://localhost:${webtests.shutdown}/" dest="${webtests.temp}/shutdown.log"
        ignoreerrors="true" verbose="true" />
      <sleep seconds="2"/>

      <!-- Start Jetty with our test context -->
      <echo message="Starting Jetty."/>
      <java classname="com.ecyrd.jspwiki.web.TestContainer" fork="true" spawn="true">
        <classpath>
           <path refid="path.tests" />
        </classpath>
        <sysproperty key="java.io.tmpdir" value="${webtests.temp}" />
        <!--
        <jvmarg value="-Xdebug" />
        <jvmarg value="-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n" />
        -->
        <arg line="@{context}=${webtests.build}/@{context}/webapp" />
      </java>

      <!-- Start Selenium tests -->
      <echo message="Running web unit tests for context '@{context}'."/>
      <java jar="${selenium-rc.jar}" fork="true"
        output="${webtests.build}/@{context}/selenium/selenium.log">
        <!--
        <arg line="-browserSessionReuse" />
		<arg line="-log" />
		<arg line="${webtests.reports}/@{context}.selenium.log" />
        -->
        <arg line="-htmlSuite" />
        <arg line='"${webtests.browser}"' />
        <arg line='"http://localhost:${webtests.port}"' />
        <arg line="${basedir}/${webtests.build}/@{context}/selenium/TestSuite.html" />
        <arg line="${webtests.reports}/@{context}.html" />
      </java>
    </sequential>
  </macrodef>

  <!-- ============================================================== -->

  <!-- Tomcat war pre-compilation -->

  <!-- This target builds a WAR file that is specially pre-compiled
       for use with Tomcat. By generating and pre-compiling JSPs
       ahead of time (instead of having Tomcat do it on-the-fly
       at runtime), we provide a slight runtime speed bump. In
       addition, in security-conscious environments this means
       that we can eliminate the need for the Jasper JSP compiler,
       and can run Tomcat using just a JRE instead of a full JDK.

       Pre-compilation involves three steps:
       1) Generating the .java files that correspond to JSPWiki's JSPs.
          The generated classes are actually servlets.
       2) Compiling the .java files and creating a jar.file,
          which is added to the WAR's WEB-INF/lib directory
       3) Injecting servlet mappings into the WEB-INF/web.xml
          file so that requests for the JSPs are mapped to the
          servlets generated in step 1.

       All of these steps are performed automatically by the
       target "war-tomcat."

       To use Tomcat pre-compilation, you need to specify
       where Tomcat lives on your machine. This can be done
       two ways:
        1. Export the environment variable CATALINA_HOME, or:
        2. Set the property "tomcat.home" in build.properties to
           Tomcat's installation directory (e.g., /usr/local/tomcat)

       NOTE: The Jasper compiler on older versions of Tomcat
       (earlier than ~June 2004) is known to have bugs
       that prevent the Ant "jasper2" task from running
       successfully. So, you should probably try to use
       a relatively recent build.

       In addition to pre-compiling the servlets, "war-tomcat"
       executes a sub-target that generates a tarball containing
       all of JSPWiki's static content. This is quite handy for
       environments that use Tomcat in conjunction with a front-end
       web server such as Apache (via mod_jk/jk2 or mod_proxy).
       The target strips out the static content (images, css, etc)
       and adds it to a separate tar file that can be unpacked
       in one of Apache's content directories.

       To generate static content, set the properties
       "static.user" and "static.group" in build.properties.
       These should be set to the Unix runtime user and group
       that should own the static files, for example the
       user "apache" and "daemon" group. If the "static.user"
       property is not supplied, war-tomcat skips the static
       content generation step.
  -->

  <target name="war-tomcat"      depends="build-tomcat-war,staticzip"
    description="Builds the WAR file for Tomcat (with pre-compiled JSPs)"/>

  <target name="tomcat-init" depends="init">
    <!-- Auto-detect whether Tomcat is available -->
    <property name="war"               value="${code.build}/${ant.project.name}" />
    <property name="war.tomcat"        value="${ant.project.name}-tomcat.war" />
    <property name="tar.static"        value="${ant.project.name}-static.tar.gz" />
    <check-property prop="env.CATALINA_HOME" />
    <property name="tomcat.home" value="${env.CATALINA_HOME}" />
    <echo message="Detected Tomcat: ${tomcat.home}" />

    <!-- Set classpath for pre-compilation and deployment tasks -->
    <path id="tomcat.classpath">
      <pathelement location="${java.home}/../lib/tools.jar" />
      <fileset dir="${tomcat.home}">
        <!-- For Tomcat 5.5 -->
        <include name="bin/commons-logging-api.jar" />
        <include name="common/lib/*.jar" />
        <include name="server/lib/*.jar" />
        <!-- For Tomcat 6.0 -->
        <include name="bin/tomcat-juli.jar" />
        <include name="lib/*.jar" />
      </fileset>
    </path>
  </target>

  <!-- Use Jasper to generate Java class files for the JSPs.
       Then compile and jar 'em up. Note that Tomcat's
       Jasper task creates a web.xml "fragment" containing
       the JSP-to-servlet mappings. We need to copy this into
       our existing web.xml, which we do using a file
       copy with token substitution.                       -->

  <target name="compile-tomcat" depends="tomcat-init,opened-war">
    <mkdir dir="${code.build}/jsp-java" />
    <mkdir dir="${code.build}/jsp-classes"/>
    <taskdef classname="org.apache.jasper.JspC" name="jasper2">
      <classpath>
        <path refid="tomcat.classpath" />
        <path refid="path.base" />
      </classpath>
    </taskdef>
    <jasper2
      validateXml="false"
      uriroot="${war}"
      outputDir="${code.build}/jsp-java"
      poolingEnabled="false"
      webXmlFragment="${code.build}/web-fragment.xml" />
    <javac srcdir="${code.build}/jsp-java" destdir="${code.build}/jsp-classes">
      <classpath>
        <path refid="tomcat.classpath" />
        <path id="war.classpath">
          <fileset dir="${war}/WEB-INF/lib">
            <include name="*.jar" />
          </fileset>
        </path>
      </classpath>
    </javac>
    <jar jarfile="${code.build}/jsp.jar">
      <fileset dir="${code.build}/jsp-classes" includes="**/*.class" />
    </jar>
    <echo message="Adding JSP servlet mappings to web.xml" />
    <loadfile property="generated-web.xml" srcFile="${code.build}/web-fragment.xml"/>
    <copy file="${war}/WEB-INF/web.xml" toFile="${code.build}/web-merged.xml" overwrite="true">
      <filterset begintoken="&lt;!--" endtoken="--&gt;">
        <filter token=" PLACEHOLDER FOR PRE-COMPILED JSP SERVLETS " value="${generated-web.xml}" />
      </filterset>
    </copy>
  </target>

  <!-- Create a new war file with the new JSP jar and amended web.xml -->

  <target name="build-tomcat-war" depends="compile-tomcat">
    <war warfile="${code.build}/${war.tomcat}" webxml="${code.build}/web-merged.xml" defaultexcludes="true">
      <webinf dir="${war}/WEB-INF">
        <exclude name="web.xml" />
        <exclude name="lib/*" />
      </webinf>
      <lib dir="${war}/WEB-INF/lib" excludes="servlet-api.jar,j2ee.jar"/>
      <lib dir="${code.build}" includes="jsp.jar" />
      <fileset dir="${war}">
        <exclude name="WEB-INF/**" />
        <exclude name="**/*.jsp" />
      </fileset>
    </war>
  </target>

  <!-- Create a tarball containing the static content.
       User must set at least ${static.user} and preferably ${static.group}.
       If not present, the target is skipped.
       File permissions are owner and group read (440),
       and for directories, owner and group read
       and execute (550). -->

  <target name="staticzip" depends="build-tomcat-war" if="static.user">
    <property name="static.group" value="${static.user}" />
    <tar destfile="${code.build}/${tar.static}" longfile="fail" compression="gzip">
      <tarfileset dir="${war}" defaultexcludes="yes"
        username="${static.user}" group="${static.group}"
        mode="440" dirmode="550">
        <include name="**/*.css" />
        <include name="**/*.gif" />
        <include name="**/*.htm" />
        <include name="**/*.html" />
        <include name="**/*.jpg" />
        <include name="**/*.js" />
        <include name="**/*.png" />
      </tarfileset>
    </tar>
  </target>

  <!-- ============================================================== -->

  <!-- Targets for signing JAR files -->

  <!-- These targets collectively create a Java keystore for signing,
       and automate the jar-signing process.
  -->
  <target name="sign-init" depends="installinit,jks-init,jks-create,jks-password" />

  <target name="jks-init">
    <property name="jks.alias" value="jspwiki" />
    <available file="${jks.keystore}" property="jks.exists" />
  </target>

  <target name="jks-create" unless="jks.exists">
    <echo>
JSPWiki needs a digital certificate for code signing its JAR files.
Since you don't appear to have one, we need to generate a new certificate.
Once generated, it will be used to sign the JSPWiki.jar file. To create
the certificate, we need to ask you for your name and a few other things.

The certificate file will be generated at: ${jks.keystore}.
You should copy this file to your container's configuration directory,
or wherever your jspwiki.policy file lives.

If something in this process goes wrong, you can simply delete
${jks.keystore} and execute this target again... no harm done.
To automate the JAR signing processs, you can add the property
'jks.password' to your build.properties file.
    </echo>
    <input message="Your name (example: Simon Bar Sinister):" addproperty="jks.cn" />
    <input message="Your organization (example: ecyrd.com):" addproperty="jks.o" />
    <input message="Your country (example: US, FI, AU):" addproperty="jks.c" />
    <input message="Keystore password (>6 characters):" addproperty="jks.password" />
    <exec dir="${basedir}" executable="keytool" failonerror="true">
      <arg value="-genkey"/>
      <arg value="-keysize"/>
      <arg value="1024"/>
      <arg value="-alias"/>
      <arg value="${jks.alias}"/>
      <arg value="-keystore"/>
      <arg value="${jks.keystore}"/>
      <arg value="-storepass"/>
      <arg value="${jks.password}"/>
      <arg value="-dname"/>
      <arg value="cn=${jks.cn}, ou=JSPWiki Code Signing Division, o=${jks.o}, c=${jks.c}"/>
    </exec>
  </target>

  <target name="jks-password" unless="jks.password">
    <input message="Keystore password:" addproperty="jks.password" />
  </target>

  <macrodef name="sign-jar">
     <attribute name="jar"/>
     <sequential>
        <echo message="Signing code with this certificate: ${jks.keystore}" />
        <exec dir="${basedir}" executable="keytool" failonerror="true">
           <arg value="-list"/>
           <arg value="-v"/>
           <arg value="-alias"/>
           <arg value="${jks.alias}"/>
           <arg value="-keystore"/>
           <arg value="${jks.keystore}"/>
           <arg value="-storepass"/>
           <arg value="${jks.password}"/>
        </exec>
        <signjar jar="@{jar}" alias="jspwiki" keystore="${jks.keystore}"
        storepass="${jks.password}" verbose="false"/>
     </sequential>
  </macrodef>

  <!-- ============================================================== -->

  <!-- JDBC Support -->

  <!-- Starting with 2.3.33, JSPWiki supports JDBC DataSources for
       storing user profiles. The DataSource can be any database that
       your web container supports. In practice, most containers supply
       a generic datatbase connection pooling package that can be configured
       to use any JDBC driver.

       RUNNING JDBC UNIT TESTS
       =======================
       If you don't enable JDBC support, the JDBC-related unit test classes
       will compile fine, but will fail when the 'tests' Ant target executes.
       Don't worry about that. The JDBC-related test classes, by the way,
       are these:

          com.ecyrd.jspwiki.auth.user.JDBCUserDatabaseTest

       To run JDBC-related unit tests, you need to:

       1) Set up an external database
       2) Obtain a JDBC driver
       3) Tell JSPWiki where to find the driver, and how to
          connect to the database, via jdbc.* properties in
          your build.properties file.
       4) Provide table setup/teardown DDL scripts (executed by
          the db-setup and db-teardown targets, below)

       Step 1 is the hardest. Luckily for you, JSPWiki has built-in Ant
       scripts to automatically start and stop the embedded Hypersonic 100%
       Java database. It's small and fast, and is included
       in the JSPWiki base distribution. You can, of course, use your own
       JDBC-compliant database such as Postgresql.

       Step 2: set up your database properties in build.properties, for example:

         jdbc.driver.id=hsql
         jdbc.driver.jar=tests/lib/hsqldb.jar
         jdbc.driver.class=org.hsqldb.jdbcDriver
         jdbc.driver.url=jdbc:hsqldb:hsql://localhost/jspwiki
         jdbc.admin.id=SA
         jdbc.admin.password=
         jdbc.user.id=jspwiki
         jdbc.user.password=password

       The 'jdbc.driver.id' property is important. Its presence tells
       the Ant scripts to do JDBC testing. It also points to
       he subdirectory in etc/db that contains our setup/teardown
       scripts, which *must* contain these files at a minumum:

         userdb-setup.ddl
         userdb-teardown.ddl

       Sample scripts for Hypersonic and Postgresql are supplied.
       If you want to use a different database, create a subdirectory in etc/db
       (e.g., etc/db/oracle) and create the necessary DDL script files.

       Note that the DDL scripts contain token substitution fields where
       table and column names mappings can be plugged in. This is so you
       can customize how JSPWiki stores its data. For example, the Hypersonic
       teardown DDL looks like this:

         DROP TABLE @jspwiki.userdatabase.table@ IF EXISTS;

       The complete list of customizable table properties are found
       in etc/jspwiki.properties.tmpl. If you don't customize them,
       JSPWiki will use some sensible defaults. For unit testing purposes,
       this script will always use the defaults from 'tests/etc/jspwiki.properties',
       then apply any custom properties defined in your build.properties file.

       All of this may sound complicated, but it really isn't. If you use Hypersonic,
       the JDBC tests should Just Work. And if you specify an external database,
       they should work just fine also.

       RUNNING JSPWIKI WITH JDBC SUPPORT
       =================================
       All of the preceding tells you how to test JSPWiki with JDBC support.
       Sounds great, but how do you *run* JSPWiki with it? Simple:

       1) Configure the Jdbc.* properties in build.properties, as described
          above
       2) Configure table and column mappings in etc/jspwiki.properties.tmpl
       3) Configure your web container to create a JDBC DataSource
          (by default, the JNDI name is jdbc/UserDatabase)
       4) Put the JDBC driver jar in a place where your web container will
          find it, for example CATALINA_HOME/common/lib
       5) Build JSPWiki, and start it up!

       See the Javadoc for com.ecyrd.jspwiki.auth.user.JDBCUserDatabase
       for details and examples.
  -->

  <target name="tests-db-init" depends="db-properties,hsql-init,db-setup"/>

  <target name="db-properties" depends="init" if="jdbc.driver.id">
    <!-- Load the JDBC props we need to do table maintenance -->
    <check-property prop="jdbc.driver.jar" />
    <check-property prop="jdbc.driver.class" />
    <check-property prop="jdbc.driver.url" />
    <check-property prop="jdbc.admin.id" />
    <check-property prop="jdbc.admin.password" />

    <!-- Here's a neat trick: import the JDBC runtime props from jspwiki.properties -->
    <echo message="Getting JDBC runtime properties." />
    <loadproperties srcFile="etc/jspwiki.properties">
      <filterchain>
        <linecontainsregexp>
          <regexp pattern="^[jspwiki.userdatabase|jspwiki.groupdatabase]"/>
        </linecontainsregexp>
      </filterchain>
    </loadproperties>
    <check-property prop="jspwiki.userdatabase.datasource" />
    <check-property prop="jspwiki.userdatabase.table" />
    <check-property prop="jspwiki.userdatabase.email" />
    <check-property prop="jspwiki.userdatabase.fullName" />
    <check-property prop="jspwiki.userdatabase.loginName" />
    <check-property prop="jspwiki.userdatabase.password" />
    <check-property prop="jspwiki.userdatabase.wikiName" />
    <check-property prop="jspwiki.userdatabase.created" />
    <check-property prop="jspwiki.userdatabase.modified" />
    <check-property prop="jspwiki.userdatabase.roleTable" />
    <check-property prop="jspwiki.userdatabase.role" />
    <check-property prop="jspwiki.groupdatabase.datasource" />
    <check-property prop="jspwiki.groupdatabase.table" />
    <check-property prop="jspwiki.groupdatabase.membertable" />
    <check-property prop="jspwiki.groupdatabase.created" />
    <check-property prop="jspwiki.groupdatabase.creator" />
    <check-property prop="jspwiki.groupdatabase.name" />
    <check-property prop="jspwiki.groupdatabase.member" />
    <check-property prop="jspwiki.groupdatabase.modified" />
    <check-property prop="jspwiki.groupdatabase.modifier" />

    <!-- Check for the presence of the database driver & script dir -->
    <check-file file="etc/db/${jdbc.driver.id}"      prop="db.scripts" />
    <check-file file="${jdbc.driver.jar}"            prop="jdbc.jar.present" />

    <!-- Bulk-copy the table setup/teardown scripts -->
    <property name="tests.db.scripts" value="${tests.src}/etc/db/${jdbc.driver.id}" />
    <mkdir dir="${tests.db.scripts}" />
    <copy toDir="${tests.db.scripts}" overwrite="true">
      <fileset dir="${db.scripts}" />
      <filterset>
        <filtersfile file="tests/etc/jspwiki.properties" />
        <filtersfile file="build.properties" />
      </filterset>
    </copy>

    <!-- Check if the customized database scripts exist -->
    <check-file file="${tests.db.scripts}/userdb-setup.ddl"    prop="userdb.setup" />
    <check-file file="${tests.db.scripts}/userdb-teardown.ddl" prop="userdb.teardown" />

    <!-- If it's the Hypersonic database, set a special flag -->
    <condition property="hsql">
      <equals arg1="${jdbc.driver.id}" arg2="hsql" />
    </condition>

    <!-- Set a flag that says all of our pre-conditions are met! -->
    <property name="db.props.exist" value="true" />

    <!-- Dump all of the JDBC properties where our test scripts can find them -->
    <echoproperties prefix="jdbc." destfile="${tests.src}/etc/db/jdbc.properties" />
  </target>

  <target name="db-setup" depends="db-properties,hsql-init" if="db.props.exist">
    <echo message="Setting up the database tables." />
    <exec-sql file="${userdb.setup}" />
  </target>

  <target name="db-teardown" depends="db-properties,hsql-init" if="db.props.exist">
    <echo message="Tearing down the database tables." />
    <exec-sql file="${userdb.teardown}" />
  </target>

  <!-- Some convenience macrodefs -->
  <macrodef name="check-property">
    <attribute name="prop"/>
    <sequential>
      <fail unless="@{prop}" message="Property @{prop} is required." />
    </sequential>
  </macrodef>

  <macrodef name="check-file">
    <attribute name="file" />
    <attribute name="prop" />
    <sequential>
      <available file="@{file}" property="@{prop}" value="@{file}" />
      <fail unless="@{prop}" message="Couldn't find @{file}!" />
    </sequential>
  </macrodef>

  <macrodef name="exec-sql">
    <attribute name="file" />
    <sequential>
      <sql driver="${jdbc.driver.class}"
        classpath="${jdbc.driver.jar}" url="${jdbc.driver.url}"
        userid="${jdbc.admin.id}" password="${jdbc.admin.password}"
        src="@{file}" onerror="continue" autocommit="true" />
    </sequential>
  </macrodef>

  <!-- ============================================================== -->

  <!-- Hypersonic embedded database startup/shutdown (for testing JDBC) -->

  <!-- Special "init" target for Hypersonic -->
  <target name="hsql-init" depends="hsql-check-start,hsql-start" />

  <target name="hsql-check-start" depends="db-properties">
    <echo message="Checking to see if Hypersonic JDBC server is running already." />
    <property file="tests/etc/db/hsql/server.properties" prefix="hsql" />
    <fail unless="hsql.server.port">Failed to load Hypersonic JDBC properties from tests/etc/db/hsql/server.properties</fail>
    <condition property="hsql.up">
      <socket server="localhost" port="${hsql.server.port}" />
    </condition>
  </target>

  <target name="hsql-start" depends="hsql-check-start" unless="hsql.up"
    description="Starts the Hypersonic database for testing.">
    <echo message="Starting up Hypersonic JDBC server on localhost." />
    <delete file="tests/etc/db/hsql/jspwiki.lck"/>
    <java fork="yes" spawn="yes" classname="org.hsqldb.Server"
      dir="tests/etc/db/hsql">
      <classpath>
        <pathelement location="${jdbc.driver.jar}" />
      </classpath>
    </java>
    <sleep seconds="5" />
    <available file="tests/etc/db/hsql/jspwiki.lck" property="hsql.up"/>
    <fail unless="hsql.up">Hypersonic didn't appear to start up properly. You can start it manually from the command line as follows:
   cd tests/etc/db/hsql
   java -cp ${jdbc.driver.jar} org.hsqldb.Server
    </fail>
    <echo message="Done." />
  </target>

  <target name="hsql-stop" depends="hsql-check-start" if="hsql.up"
    description="Shuts down the Hypersonic database, if it's up.">
    <echo message="Shutting down Hypersonic JDBC server on localhost." />
    <sql driver="${jdbc.driver.class}"
      classpath="${jdbc.driver.jar}" url="${jdbc.driver.url}"
      onerror="continue" autocommit="true"
      userid="${jdbc.admin.id}" password="${jdbc.admin.password}">
      SHUTDOWN
    </sql>
    <!-- The lock file should be deleted automatically, but just in case... -->
    <delete file="tests/etc/db/hsql/jspwiki.lck" />
    <echo message="Done." />
  </target>

  <!-- ============================================================== -->
  <target name="i18n-create-template" description="Creates a given directory structure with all the needed files to make an i18n jar">
	<input message="i18n template code to generate (ie: es_ES):" addproperty="i18n.template" />

  	<mkdir dir="${tmplt.i18n.dir}/${ant.project.name}_${i18n.template}/etc/i18n/templates" />
  	<mkdir dir="${tmplt.i18n.dir}/${ant.project.name}_${i18n.template}/etc/i18n/plugin" />

  	<copy file="etc/i18n/CoreResources.properties"
  		  tofile="${tmplt.i18n.dir}/${ant.project.name}_${i18n.template}/etc/i18n/CoreResources_${i18n.template}.properties"
  		  overwrite="true"/>
  	<copy file="etc/i18n/templates/default.properties"
  		  tofile="${tmplt.i18n.dir}/${ant.project.name}_${i18n.template}/etc/i18n/templates/default_${i18n.template}.properties"
  		  overwrite="true"/>
  	<copy file="etc/i18n/plugin/PluginResources.properties"
  		  tofile="${tmplt.i18n.dir}/${ant.project.name}_${i18n.template}/etc/i18n/plugin/PluginResources_${i18n.template}.properties"
  		  overwrite="true" />

  	<echo message="Now you can start translating at ${tmplt.i18n.dir}/${ant.project.name}_${i18n.template}." />
  	<echo message="When finished, execute i18n-jar-template target to jar it" />
  </target>

  <target name="i18n-jar-template" description="Jars a given i18n directory structure">
	<input message="i18n template code to jar (ie: es_ES):" addproperty="i18n.template" />
  	<jar jarfile="${code.build}/${ant.project.name}_${i18n.template}.jar">
		<fileset dir="${tmplt.i18n.dir}/${ant.project.name}_${i18n.template}" includes="**/*.properties" />
	</jar>
	<echo message="Created ${code.build}/${ant.project.name}_${i18n.template}.jar. Drop it on your web/WEB-INF/lib folder and that should do the i18n trick" />
	<echo message="You can also upload the jar to http://jspwiki.org/wiki/ContributedLocalizations or to any page linked to it to make it available for everyone!" />
  </target>

  <target name="i18n-clean-templates" description="Deletes all i18n directory structures">
	<delete dir="${tmplt.i18n.dir}" />
  </target>
  
  <target name="i18n-check" depends="compile,compiletests" 
	      description="Run this target to check whether a translation is up to date.">
	  	 <input message="Please give the language you want to check translation for (e.g. fi, es, de)"
	  			addproperty="check.language"/>
	     <java classname="TranslationsCheck">
	       <classpath path="${tests.build}"/>
	       <classpath path="${code.build}"/>
	       <arg line="${check.language}"/>
	     </java>
  </target>
	
  <target name="api-diff" description="Compares API in JSPWiki.jar with previous version"
    depends="jar">
     <!-- Assumes that the dependencyfinder.dir property points to the
          dir containing the binary distribution of DependencyFinder -->
     <check-property prop="dependencyfinder.dir" />
     <check-property prop="jarfile.old" />
     <mkdir dir="${tests.reports}" />
     <java classname="com.jeantessier.dependencyfinder.cli.JarJarDiff"
       output="${tests.reports}/API-changes.xml">
       <classpath refid="path.tests" />
       <classpath>
         <pathelement location="${dependencyfinder.dir}/lib/DependencyFinder.jar" />
       </classpath>
       <arg value="-new" />
       <arg value="${jarfile}" />
       <arg value="-old" />
       <arg value="${jarfile.old}" />
       <arg value="-name" />
       <arg value="JSPWiki Public API Changes" />
     </java>

     <!-- Filthy hack that suppresses DTD resolution -->
     <replace file="${tests.reports}/API-changes.xml"
       token='&lt;!DOCTYPE differences SYSTEM "http://depfind.sourceforge.net/dtd/differences.dtd"&gt;'
       value=""/>
     <!-- Just to be safe, replace raw ampersands with something bogus -->
     <replace file="${tests.reports}/API-changes.xml"
       token="&amp;" value="(ampersand)"/>
     <xslt in="${tests.reports}/API-changes.xml"
       out="${tests.reports}/API-changes.html"
       style="${dependencyfinder.dir}/etc/DiffToHTML.xsl">
     </xslt>
  </target>

</project>
