<!--
   Copyright 2003-2004 The Apache Software Foundation

   Licensed 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.
-->
<project default="jar:jar" 
  xmlns:maven="jelly:maven"
  xmlns:j="jelly:core" 
  xmlns:ant="jelly:ant">

  <!-- ================================================================== -->
  <!-- START : C O M M O N S - B U I L D                                  -->
  <!-- ================================================================== -->
  <!-- Required: Look and Feel for documentation within distributions     -->
  <!-- ================================================================== -->
  <postGoal name="xdoc:copy-resources">  
    <copy todir="${basedir}/target/docs/style/" failonerror="false">
      <fileset dir="${basedir}/../commons-build/xdocs/style">
      	<include name='**/*'/>
      	<exclude name='**/CVS/**'/>
      </fileset>
    </copy>
  </postGoal>
  <!-- ================================================================== -->
  <!-- END: C O M M O N S - B U I L D                                     -->
  <!-- ================================================================== -->

  <!-- ================================================================== -->
  <!-- T E S T : F U N C T I O N A L                                      -->
  <!-- ================================================================== -->
  <!-- Run any tests with FunctionalTest as the suffix.  These are for    -->
  <!-- longer running tests or test that rely on external systems.        -->
  <!-- ================================================================== -->

  <goal name="test:functional">
    <j:set var="testmatch" value="*FunctionalTest"/>
    <attainGoal name="test:match"/>
  </goal>

  <!-- ================================================================== -->
  <!-- Post goal to copy the NOTICE.txt into the source and binary        -->
  <!-- distributions.                                                     -->
  <!-- ================================================================== -->

  <postGoal
    name="dist:prepare-bin-filesystem">
    <j:set 
      var="maven.dist.bin.assembly.dir" 
      value="${pom.getPluginContext('maven-dist-plugin').getVariable('maven.dist.bin.assembly.dir')}" />

    <copy file="${basedir}/NOTICE.txt"
          tofile="${maven.dist.bin.assembly.dir}/NOTICE.txt"
          overwrite="yes"/>

  </postGoal>

  <postGoal
    name="dist:prepare-src-filesystem">
    <j:set 
      var="maven.dist.src.assembly.dir" 
      value="${pom.getPluginContext('maven-dist-plugin').getVariable('maven.dist.src.assembly.dir')}" />

    <copy file="${basedir}/NOTICE.txt"
          tofile="${maven.dist.src.assembly.dir}/NOTICE.txt"
          overwrite="yes"/>

  </postGoal>

  <!-- ================================================================== -->
  <!-- Post goal to create the md5 checksums for the source and binary    -->
  <!-- distributions.                                                     -->
  <!-- ================================================================== -->
  
  <postGoal name="dist:build-bin">
    <j:set var="distDir" value="${pom.getPluginContext('maven-dist-plugin').getVariable('maven.dist.dir')}"/>
    <j:set var="finalName" value="${pom.getPluginContext('maven-dist-plugin').getVariable('maven.final.name')}"/>
    <ant:checksum file="${distDir}/${finalName}.tar.gz"/>
    <ant:checksum file="${distDir}/${finalName}.zip"/>
  </postGoal>
  
  <postGoal name="dist:build-src">
    <j:set var="distDir" value="${pom.getPluginContext('maven-dist-plugin').getVariable('maven.dist.dir')}"/>
    <j:set var="finalName" value="${pom.getPluginContext('maven-dist-plugin').getVariable('maven.final.name')}"/>
    <ant:checksum file="${distDir}/${finalName}-src.tar.gz"/>
    <ant:checksum file="${distDir}/${finalName}-src.zip"/>
  </postGoal>

</project>
