<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
    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]
    |   |
    |   |___org
    |       |___[...and the rest of the source code files]
    |
    |___docs
    |
    |___lib
    |
    |___tests
        |___org
            |___[...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 Java source code lies. -->
  <property name="code.src" value="src/main/java" />

  <!-- This denotes the directory where the source code resources lie. -->
  <property name="code.resources" 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="src/test/java" />
  <property name="tests.resources" value="tests" />
  <property name="tests.build" value="tests/build" />
  <property name="tests.reports" value="tests/reports" />
  <property name="doc.rat" value="doc/rat" />
	
  <!-- dirs holding libs -->
  <property name="libs.main" value="lib" />
  <property name="libs.tests" value="tests/lib" />
  <property name="libs.opt" value="tests/libs-opt" />
	
  <property name="central.url" value="http://repo.maven.apache.org/maven2" />
  
  <!-- 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.temp"     value="${java.io.tmpdir}/webtests" />
  <property name="selenium-rc.jar"   value="tests/lib/selenium-server-standalone-2.25.0.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="tags/jspwiki_2_9_1_incubating_rc2" />

  <!-- 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="${libs.main}">
        <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="${libs.main}">
        <include name="*.jar" />
     </fileset>
     <fileset dir="${libs.tests}">
        <include name="*.jar" />
     </fileset>
     <!-- Standard Maven location for test resources; note ini folder
          present both below and in ${jarfile} (can cause conflict? bug?) -->
     <pathelement path="${tests.src}/../resources" />
     <!-- Below line temporary until all test resources in Maven location -->
     <pathelement path="${tests.resources}/etc" />
  </path>

  <!-- Path holding (L)GPL jars and their dependencies -->
  <path id="path.optional">
    <fileset dir="${libs.opt}">
      <include name="*.jar" />
    </fileset>
    <path refid="path.base" />
    <path refid="path.tests" />
  </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@}" />
     <mkdir dir="${libs.main}" />
     <mkdir dir="${libs.tests}" />
     <mkdir dir="${libs.opt}" />
     <download-deps />
  </target>
  
  <target name="test-file-exists">
     <echo message="Testing  for ${download-to-file}" level="debug"/>
     <available file="${download-to-file}" property="exists" />
  </target>
	    
  <target name="download-lib" unless="exists" depends="test-file-exists">
    <get src="${download-url}" dest="${download-to-file}" />
  </target>
  
  <macrodef name="get-element">
    <attribute name="to-file" />
    <attribute name="url" />
    <sequential>
       <antcall target="download-lib">
          <param name="download-to-file" value="@{to-file}"/>
       	  <param name="download-url" value="@{url}" />
       </antcall>
    </sequential>
  </macrodef>

  <macrodef name="download-deps">
     <sequential>
     	<!-- main dependencies  -->
     	<get-element to-file="${libs.main}/activation-1.1.jar" url="${central.url}/javax/activation/activation/1.1/activation-1.1.jar" />
     	<get-element to-file="${libs.main}/akismet-java-1.02.jar" url="${central.url}/net/sourceforge/akismet-java/1.02/akismet-java-1.02.jar" />
        <get-element to-file="${libs.main}/commons-codec-1.3.jar" url="${central.url}/commons-codec/commons-codec/1.3/commons-codec-1.3.jar" />
        <get-element to-file="${libs.main}/commons-fileupload-1.2.1.jar" 
                     url="${central.url}/commons-fileupload/commons-fileupload/1.2.1/commons-fileupload-1.2.1.jar" />
        <get-element to-file="${libs.main}/commons-httpclient-3.1.jar" 
                     url="${central.url}/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.jar" />
        <get-element to-file="${libs.main}/commons-io-1.4.jar" url="${central.url}/commons-io/commons-io/1.4/commons-io-1.4.jar" />
        <get-element to-file="${libs.main}/commons-lang-2.6.jar" url="${central.url}/commons-lang/commons-lang/2.6/commons-lang-2.6.jar" />
        <get-element to-file="${libs.main}/commons-logging-api-1.0.4.jar" 
                     url="${central.url}/commons-logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.jar" />
        <get-element to-file="${libs.main}/ecs-1.4.2.jar" url="${central.url}/ecs/ecs/1.4.2/ecs-1.4.2.jar" />
        <get-element to-file="${libs.main}/freshcookies-security-0.60.jar" 
                     url="${central.url}/org/freshcookies/freshcookies-security/0.60/freshcookies-security-0.60.jar" />
        <get-element to-file="${libs.main}/standard-1.1.2.jar" url="${central.url}/taglibs/standard/1.1.2/standard-1.1.2.jar" />
        <get-element to-file="${libs.main}/jstl-1.1.2.jar" url="${central.url}/javax/servlet/jstl/1.1.2/jstl-1.1.2.jar" />
        <get-element to-file="${libs.main}/jaxen-1.1-beta-6.jar" url="${central.url}/jaxen/jaxen/1.1-beta-6/jaxen-1.1-beta-6.jar"/>
        <get-element to-file="${libs.main}/jdom-1.0.jar" url="${central.url}/jdom/jdom/1.0/jdom-1.0.jar" />
        <get-element to-file="${libs.main}/jrcs-diff-0.4.2.jar" 
                     url="${central.url}/org/jvnet/hudson/org.suigeneris.jrcs.diff/0.4.2/org.suigeneris.jrcs.diff-0.4.2.jar" />
        <get-element to-file="${libs.main}/jsonrpc-1.0.jar" url="${central.url}/com/metaparadigm/json-rpc/1.0/json-rpc-1.0.jar" />
        <get-element to-file="${libs.main}/jsp-api-2.0.jar" url="${central.url}/javax/servlet/jsp/jsp-api/2.0/jsp-api-2.0.jar" />
        <get-element to-file="${libs.main}/log4j-1.2.14.jar" url="${central.url}/log4j/log4j/1.2.14/log4j-1.2.14.jar" />
        <get-element to-file="${libs.main}/lucene-core-3.6.0.jar" url="${central.url}/org/apache/lucene/lucene-core/3.6.0/lucene-core-3.6.0.jar" />
        <get-element to-file="${libs.main}/lucene-highlighter-3.6.0.jar" 
                     url="${central.url}/org/apache/lucene/lucene-highlighter/3.6.0/lucene-highlighter-3.6.0.jar" />
        <get-element to-file="${libs.main}/lucene-memory-3.6.0.jar" 
                     url="${central.url}/org/apache/lucene/lucene-memory/3.6.0/lucene-memory-3.6.0.jar" />
        <get-element to-file="${libs.main}/mail-1.4.jar" url="${central.url}/javax/mail/mail/1.4/mail-1.4.jar" />
        <get-element to-file="${libs.main}/nekohtml-0.9.4.jar" url="${central.url}/nekohtml/nekohtml/0.9.4/nekohtml-0.9.4.jar" />
        <get-element to-file="${libs.main}/oro-2.0.7.jar" url="${central.url}/oro/oro/2.0.7/oro-2.0.7.jar" />
        <get-element to-file="${libs.main}/oscache-2.3.jar" url="${central.url}/opensymphony/oscache/2.3/oscache-2.3.jar" />
        <get-element to-file="${libs.main}/sandler-0.5.jar" url="${central.url}/net/sourceforge/sandler/0.5/sandler-0.5.jar" />
        <get-element to-file="${libs.main}/servlet-api-2.4.jar" url="${central.url}/javax/servlet/servlet-api/2.4/servlet-api-2.4.jar" />
        <get-element to-file="${libs.main}/xmlrpc-2.0.1.jar" url="${central.url}/xmlrpc/xmlrpc/2.0.1/xmlrpc-2.0.1.jar" />
     
     	<!-- tests dependencies  -->
     	<get-element to-file="${libs.tests}/commons-el-1.0.jar" url="${central.url}/commons-el/commons-el/1.0/commons-el-1.0.jar" />
     	<get-element to-file="${libs.tests}/hsqldb-1.8.0.10.jar" url="${central.url}/org/hsqldb/hsqldb/1.8.0.10/hsqldb-1.8.0.10.jar" />
        <get-element to-file="${libs.tests}/jetty-all-7.6.7.v20120910.jar" 
                     url="${central.url}/org/eclipse/jetty/aggregate/jetty-all/7.6.7.v20120910/jetty-all-7.6.7.v20120910.jar" />
        <get-element to-file="${libs.tests}/junit-3.8.2.jar" url="${central.url}/junit/junit/3.8.2/junit-3.8.2.jar" />
        <get-element to-file="${libs.tests}/selenium-server-standalone-2.25.0.jar" 
                     url="http://selenium.googlecode.com/files/selenium-server-standalone-2.25.0.jar" />
        <get-element to-file="${libs.tests}/stripes-1.5.7.jar" url="${central.url}/net/sourceforge/stripes/stripes/1.5.7/stripes-1.5.7.jar" />
        <get-element to-file="${libs.tests}/yuicompressor-2.4.7.jar" 
                     url="${central.url}/com/yahoo/platform/yui/yuicompressor/2.4.7/yuicompressor-2.4.7.jar" />
     	
     	<!-- other dependencies ((L)GPL dependencies and jars needed by these) -->
     	<get-element to-file="${libs.opt}/cobertura-1.9.4.1.jar" url="${central.url}/net/sourceforge/cobertura/cobertura/1.9.4.1/cobertura-1.9.4.1.jar" />
     	<get-element to-file="${libs.opt}/asm-3.0.jar" url="${central.url}/asm/asm/3.0/asm-3.0.jar" />
     	<get-element to-file="${libs.opt}/asm-tree-3.0.jar" url="${central.url}/asm/asm-tree/3.0/asm-tree-3.0.jar" />
     	<get-element to-file="${libs.opt}/sonar-ant-task-2.0.jar" url="${central.url}/org/codehaus/sonar-plugins/sonar-ant-task/2.0/sonar-ant-task-2.0.jar" />
     </sequential>
  </macrodef>
  
  <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 file="cobertura.ser" />
  	<delete dir="${tests.build}" />
    <delete dir="${code.build}" />
    <delete dir="${tests.reports}" />
  	<delete dir="${docs.javadoc}" />
    <delete dir="${doc.rat}" />
  	<delete file="etc/jspwiki.properties" />
    <delete file="etc/i18n/CoreResources_en.properties" />
    <delete file="etc/i18n/plugin/PluginResources_en.properties" />
    <delete file="etc/i18n/templates/default_en.properties" />
    <delete file="tests/etc/groupdatabase.xml" />
    <delete file="tests/etc/userdatabase.xml" />
    <delete file="tests/etc/jspwiki.properties" />
    <delete file="tests/etc/jspwiki_rcs.properties" />
    <delete file="tests/etc/jspwiki_vers.properties" />
    <delete dir="tests/etc/db" />
    <delete dir="tests/etc/WEB-INF/dtd" />
    <delete file="tests/etc/WEB-INF/web.xml" />
    <delete>
      <fileset dir="." includes="**/*~" defaultexcludes="no"/>
      <fileset dir="." includes="**/#*#" defaultexcludes="no"/>
    </delete>
  </target>
	
  <!-- Removes all lib directories -->
  <target name="clean-deps"
          description="Cleans away all downloaded files.">
    <delete dir="${libs.main}" />
    <delete dir="${libs.tests}" />
    <delete dir="${libs.opt}" />
  </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.6"
           target="1.6"
    	   includeantruntime="false"
           >
      <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.6"
           target="1.6"
     	   includeantruntime="false"
           >
      <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="org/apache/wiki/**" />
      </packageset>
      <link href="http://docs.oracle.com/javase/6/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="buildjar" unless="check_jar_has_been_built">
  	  <!-- 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="org/**/*.properties" />
         <fileset dir="${code.resources}" includes="templates/**/*.properties" />
         <fileset dir="${code.i18n}" />
         <fileset dir="src/main/resources" includes="ini/*.*" />
      </jar>
  </target>

  <target name="jar" depends="compile">
    <condition property="check_jar_has_been_built">
      <available file="${jarfile}"/>
    </condition>
  	<antcall target="buildjar" /> <!-- needed to avoid circular references when invoking tests target -->
  	<!-- comment out the following line if you only want to run the webtests and not the normal tests -->
    <antcall target="tests" />
  </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="org/**/*.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="${libs.main}" includes="*.jar" excludes="servlet-api-*.jar jsp-api-*.jar"/>
       <lib file="${jarfile}" />
       <!--lib file="${libs.tests}/stripes*.jar"/-->
       <fileset dir="${code.resources}/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.7.jar"
                  output="${tmpdir}/compress/@{src}"
                  fork="true">
                <arg line="'${code.resources}/@{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}" prefix="${ant.project.name}-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" excludes="rat/**" />
        <zipfileset dir="src/wikipages" prefix="doc/wikipages" excludes="**/.??*" />
    </zip>
  </target>

  <target name="version" depends="jar"
          description="Reads the current code base's version string.">
    <java outputproperty="jspwiki.version" classname="org.apache.wiki.Release">
      <classpath>
        <pathelement location="build/JSPWiki.jar"/>
      </classpath>
    </java>
  </target>

  <!-- Builds the entire distribution artifacts without checksums and signatures.

       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="clean-deps,installinit,srczip,war,corepageszip,documentzip,version"
          description="Builds the entire distribution artifacts without checksums and signatures.">

    <!-- binary distribution -->
    <copy file="ChangeLog"    todir="${install.fulldir}" />
    <copy file="LICENSE"      todir="${install.fulldir}" />
    <copy file="NOTICE"       todir="${install.fulldir}" />
    <copy file="README"       todir="${install.fulldir}" />
    <copy file="ReleaseNotes" todir="${install.fulldir}" />
    <copy file="UPGRADING"    todir="${install.fulldir}" />
    <copy file="${warfile}"   todir="${install.fulldir}" />
    <zip zipfile="${release.dir}/${ant.project.name}-${jspwiki.version}-bin.zip">
      <zipfileset dir="${install.fulldir}" prefix="${ant.project.name}-bin" />
    </zip>

    <!-- source distribution -->
    <move file="${release.dir}/${ant.project.name}-src.zip"
        tofile="${release.dir}/${ant.project.name}-${jspwiki.version}-src.zip"/>

  </target>

  <!-- Nabbed from solr -->
  <macrodef name="sign-artifact" description="Signs an artifact.">
    <attribute name="input.file"/>
    <attribute name="output.file" default="@{input.file}.asc"/>
    <sequential>
      <echo>Signing @{input.file} Sig File: @{output.file}</echo>
      <exec executable="gpg">
        <arg value="--armor"/>
        <arg value="--output"/>
        <arg value="@{output.file}"/>
        <arg value="--detach-sig"/>
        <arg value="@{input.file}"/>
      </exec>
    </sequential>
  </macrodef>

  <!-- Generate signatures and checksums for the distribution artifacts. -->
  <target name="signeddist" depends="dist" description="Generate signatures and checksums for the release artifacts.">

  	<echo>Generating checksums for the release artifacts.</echo>
    <checksum algorithm="MD5" fileext=".md5" format="MD5SUM" forceoverwrite="yes">
      <fileset dir="${release.dir}"><include name="*.zip"/></fileset>
    </checksum>
    <checksum algorithm="SHA" fileext=".sha1" format="MD5SUM" forceoverwrite="yes">
      <fileset dir="${release.dir}"><include name="*.zip"/></fileset>
    </checksum>
    <checksum algorithm="SHA-512" fileext=".sha512" format="MD5SUM" forceoverwrite="yes">
      <fileset dir="${release.dir}"><include name="*.zip"/></fileset>
    </checksum>

  	<sequential>
      <sign-artifact input.file="${release.dir}/${ant.project.name}-${jspwiki.version}-bin.zip" />
      <sign-artifact input.file="${release.dir}/${ant.project.name}-${jspwiki.version}-src.zip" />
    </sequential>

  </target>

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

  <!-- Running tests -->

  <target name="tests-init" depends="init">
      <!-- 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="tests-init,jartests,tests-db-init" unless="jspwiki.test.skip"
          description="Runs the JUnit tests.">

    <condition property="check_jar_has_been_built"> <!-- build main jar if it has not been created yet; should -->
      <available file="${jarfile}"/>                <!-- only happen if this target is invoked directly        -->
    </condition>
    <antcall target="buildjar" />
    
    <junit printsummary="yes" haltonfailure="no" fork="yes" failureproperty="test.failed">
        <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"/>
                <include name="**/StressTestVersioningProvider.java" if="tests.stress.enabled"/>
                <exclude name="org/apache/wiki/web/*.*" />
                <exclude name="org/apache/wiki/TranslatorReaderTest*" />
           </fileset>
        </batchtest>
     </junit>

  	 <junitreport todir="${tests.reports}">
  	    <fileset dir="${tests.reports}">
  	       <include name="**/TEST-*.xml" />
  	    </fileset>
  	    <report format="noframes" todir="${tests.reports}" />
  	 </junitreport>
     
     <antcall target="fail-build-if-junit-fails">
       <param name="test.failed" value="${test.failed}"/>
     </antcall>
  </target>
	
  <target name="fail-build-if-junit-fails" unless="continue_even_with_test_failures">
  	<fail message="Test failure(s) detected, check test results." if="${test.failed}" />
  </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.resources}">
        <fileset dir="${tests.reports}">
           <include name="**/TEST-*.xml" />
        </fileset>
        <report format="noframes" todir="${tests.resources}" />
     </junitreport>
  </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/org.apache.wiki.auth.Users.
  -->
  <target name="webtests" depends="jar,tests-init,jartests,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="org.apache.wiki.auth.authorize.WebContainerAuthorizer" />
      <entry key="jspwiki.userdatabase" value="org.apache.wiki.auth.user.XMLUserDatabase" />
      <entry key="jspwiki.groupdatabase" value="org.apache.wiki.auth.authorize.XMLGroupDatabase" />
      <entry key="jspwiki.referenceStyle" value="relative" />
      <entry key="jspwiki.userdatabase.hashPrefix" value="false" />
      <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="org.apache.wiki.auth.user.JDBCUserDatabase" />
        <entry key="jspwiki.groupdatabase" value="org.apache.wiki.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="org.apache.wiki.auth.user.JDBCUserDatabase" />
        <entry key="jspwiki.groupdatabase" value="org.apache.wiki.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" />  
  	
    <!-- Shut down the embedded Jetty server by sending the shutdown command -->
    <echo message="Shutting down Jetty (if it is up)."/>
    <get src="http://localhost:${webtests.port}/GO_AWAY/" dest="${webtests.temp}/shutdown.log" ignoreerrors="true" verbose="true" />

    <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.resources}/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 sending the shutdown command -->
      <echo message="Shutting down Jetty (if it is up)."/>
      <get src="http://localhost:${webtests.port}/GO_AWAY/" dest="${webtests.temp}/shutdown.log" ignoreerrors="true" verbose="true" />
      <sleep seconds="3"/>

      <!-- Start Jetty with our test context -->
      <echo message="Starting Jetty."/>
        <java classname="org.apache.wiki.web.StreamRedirector" fork="true" spawn="true">
        <!--java classname="org.apache.wiki.web.TestContainer" fork="true" spawn="true"-->
        <arg value="org.apache.wiki.web.TestContainer"/>
        <arg value="/tmp/jetty-redirectedoutput.log"/>
      	<!--jvmarg value="-Dlog4j.debug=yesplease"/-->  <!-- to enable log4j debugging-->
      	<jvmarg value="-Dorg.eclipse.jetty.LEVEL=info"/>  <!-- to enable jetty debugging-->
        <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}"' />
        <!-- pre-filtered TestSuite.htmlin tests/etc/selenium/tests/all -->
        <arg line="${basedir}/${webtests.build}/@{context}/selenium/TestSuite.html" />
        <arg line="${webtests.reports}/@{context}.html" />
      </java>
    </sequential>
  </macrodef>
  
  <!-- ============================================================== -->

  <!-- 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:

          org.apache.wiki.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: If desired, modify the database properties in
       tests/etc/jdbc.properties.impl.  The defaults given should be sufficient 
       for JDBC testing using hsql on any developer's local machine.

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

         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 the build.properties file
       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 org.apache.wiki.auth.user.JDBCUserDatabase
       for details and examples.
  -->

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

  <target name="db-properties" depends="init" if="jdbc.driver.id">

    <!-- 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.resources}/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" />

    <!-- Copying the testing jdbc.properties file -->
    <copy file="${tests.resources}/etc/jdbc.properties.tmpl" toFile="${tests.resources}/etc/db/jdbc.properties" overwrite="true"/>
  </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>

  <!-- ============================================================== -->
  <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="org.apache.wiki.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>
	
  <target name="coverage-tests" depends="compile,tests">
  	<!-- delete previous info, if any -->
    <delete file="cobertura.ser" />
    <delete dir="${tests.build}/instrumented-classes" />
  	<!-- bootstrap cobertura ant-tasks -->
    <taskdef classpathref="path.optional" resource="tasks.properties" />
  	<cobertura-instrument todir="${tests.build}/instrumented-classes">
      <fileset dir="${code.build}">
        <include name="**/*.class"/>
      </fileset>
    </cobertura-instrument>
  	<junit haltonfailure="no" fork="yes">
      <classpath>
        <path location="${tests.build}/instrumented-classes" />
        <path refid="path.optional" />
      </classpath>
      <formatter type="xml" />
      <sysproperty key="jspwiki.tests.auth" value="true" />
      <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="org/apache/wiki/web/*.*" />
          <exclude name="org/apache/wiki/TranslatorReaderTest*" />
        </fileset>
      </batchtest>
    </junit>
  </target>
  
  <target name="coverage-reports" depends="coverage-tests,version">
  	<cobertura-report srcdir="${code.src}" destdir="${tests.build}/cobertura" />
  </target>
	
	
	    
  <target name="sonar-bootstrap" depends="clean" description="sonar ant task build configuration">
  	<!-- bootstrap sonar ant tasks -->
    <typedef resource="org/sonar/ant/antlib.xml" 
             uri="antlib:org.sonar.ant" 
             classpathref="path.optional" />
  	    
    <!-- list of Sonar project configuration properties -->
    <property name="sonar.projectKey" value="org.apache.jspwiki:jspwiki" />
    <property name="sonar.projectName" value="Apache JSPWiki (incubating)" />
    <property name="sonar.projectVersion" value="${jspwiki.version}" />
    <property name="sonar.sources" value="${code.src}" />
    <property name="sonar.scm.url" value="scm:svn:http://svn.apache.org/repos/asf/incubator/jspwiki/trunk/" />
  	
    <!-- list of optional Sonar properties -->
    <property name="sonar.binaries" value="${code.build}" />
    <property name="sonar.tests" value="${tests.resources}" />
    
    <!-- list of advanced properties -->
    <property name="sonar.core.codeCoveragePlugin" value="cobertura"/>
    <property name="sonar.surefire.reportsPath" value="./tests/reports" />
    <property name="sonar.cobertura.reportPath" value="${tests.build}/cobertura/coverage.xml" />
    <property name="sonar.dynamicAnalysis" value="reuseReports" />
    
    <!-- Used by PMD only -->
    <property name="sonar.java.source" value="1.6" />
    <property name="sonar.java.target" value="1.6" />
    
    <!-- other interesting properties that can be overriden -->
    <!-- <property name="sonar.jdbc.driverClassName" value="org.apache.derby.jdbc.ClientDriver" /> -->
    <!-- <property name="sonar.jdbc.username" value="sonar" /> -->
    <!-- <property name="sonar.jdbc.password" value="sonar" /> -->
    <!-- <property name="sonar.jdbc.url" value="jdbc:derby://localhost:1527/sonar" /> -->
    <!-- <property name="sonar.host.url" value="http://localhost:9000" /> -->
    
    <!-- don't break the build if there are test failures -->
  	<property name="continue_even_with_test_failures" value="true" />
  </target>
  
  <target name="sonar" depends="sonar-bootstrap,coverage-tests,version">
  	<!-- Sonar needs an xml type cobertura report -->
  	<cobertura-report format="xml" 
  	                  srcdir="${code.src}" 
  	                  destdir="${tests.build}/cobertura" />
    
    <sonar:sonar xmlns:sonar="antlib:org.sonar.ant"/>
  </target>
  
  <target name="rat-report" description="Generate an Apache Rat report.">
    <mkdir dir="${doc.rat}/lib" />
    <get-element to-file="${doc.rat}/lib/apache-rat-tasks-0.8.jar" 
                 url="${central.url}/org/apache/rat/apache-rat-tasks/0.8/apache-rat-tasks-0.8.jar" />
    <get-element to-file="${doc.rat}/lib/apache-rat-core-0.8.jar" 
                 url="${central.url}/org/apache/rat/apache-rat-core/0.8/apache-rat-core-0.8.jar" />
    <get-element to-file="${doc.rat}/lib/commons-cli-1.2.jar" 
                 url="${central.url}/commons-cli/commons-cli/1.2/commons-cli-1.2.jar" />
    <get-element to-file="${doc.rat}/lib/commons-collections-3.2.jar" 
                 url="${central.url}/commons-collections/commons-collections/3.2/commons-collections-3.2.jar" />
    <get-element to-file="${doc.rat}/lib/commons-lang-2.1.jar" url="${central.url}/commons-lang/commons-lang/2.1/commons-lang-2.1.jar" />
    <get-element to-file="${doc.rat}/lib/commons-compress-1.0.jar" 
                 url="${central.url}/org/apache/commons/commons-compress/1.0/commons-compress-1.0.jar" />
    <get-element to-file="${doc.rat}/lib/commons-io-1.4.jar" url="${central.url}/commons-io/commons-io/1.4/commons-io-1.4.jar" />
    
    <path id="rat.libs.path">
      <fileset dir="${doc.rat}/lib">
        <include name="*.jar" />
      </fileset>
    </path>
    <taskdef resource="org/apache/rat/anttasks/antlib.xml">
      <classpath refid="rat.libs.path" />
    </taskdef>

  	<!-- If you want the RAT run to automatically add license headers where needed, set addLicenseHeaders="true".
  	     However, afterwards, you will have to manually double-check every single modified file regarding the
  	     ASF Source Header and Copyright Notice Policy!
  	     Exclusions and their reasons:
  	     - .* and .*/** are automatically created configuration files
  	     - doc/LICENSE.* are third-party licenses
  	     - ${code.src}/wikipages/** are default wiki pages for use in JSPWiki installations
  	     - all others are directories which contain generated output and third-party binary libraries
  	-->
    <report reportFile="${doc.rat}/rat-report.txt" addLicenseHeaders="false">
        <fileset dir="."
        	excludes=".*, .*/**,
        	doc/LICENSE.*,
        	${code.resources}/wikipages/**,
        	${code.build}/**,
        	${tests.build}/**,
        	${tests.reports}/**,
        	${doc.rat}/**,
        	${libs.main}/**,
        	${libs.tests}/**,
        	${libs.opt}/**,
        	${docs.javadoc}/**,
        	${release.dir}/**" />
<!--
      <fileset dir="src/org"/>
      <fileset dir="src/webdocs" 
               excludes="**/SilkIconSet-readme.txt,**/fckconfig.js,**/mootools.js,**/posteditor.js" />
      <fileset dir="tests/org"/>
      -->
    </report>
  </target>

</project>
