<!--
   Copyright 2001-2005 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:ant="jelly:ant">

  <!-- ================================================================== -->
  <!-- Copy into the binary distribution                                  -->
  <!-- ================================================================== -->
  <postGoal name="dist:prepare-bin-filesystem">

    <!-- Copy the NOTICE -->
    <copy todir="${maven.dist.bin.assembly.dir}">
      <fileset file='${basedir}/NOTICE.txt'/>
    </copy>

  </postGoal>

  <!-- ================================================================== -->
  <!-- Copy into the source distribution                                  -->
  <!-- ================================================================== -->
  <postGoal name="dist:prepare-src-filesystem">

    <!-- Copy the NOTICE -->
    <copy todir="${maven.dist.src.assembly.dir}">
      <fileset file='${basedir}/NOTICE.txt'/>
      <fileset file="${basedir}/RELEASE-NOTES.txt"/>
      <fileset file="${basedir}/fileupload_basic.xml"/>
      <fileset file="${basedir}/fileupload_checks.xml"/>
      <fileset file="${basedir}/license-header.txt"/>
    </copy>

    <!-- Copy xdoc files -->
    <copy todir="${maven.dist.src.assembly.dir}/xdocs">
      <fileset dir="${basedir}/xdocs"/>
    </copy>

  </postGoal>

  <!-- ================================================================== -->
  <!-- Create MD5 Check Sums                                              -->
  <!-- ================================================================== -->
  <postGoal name="dist">

    <!-- create checksum for jar -->
    <ant:checksum file="${maven.build.dir}/${pom.artifactId}-${pom.currentVersion}.jar" property="jar.md5"/>
    <ant:echo message="${jar.md5} *${pom.artifactId}-${pom.currentVersion}.jar" 
              file="${maven.build.dir}/${pom.artifactId}-${pom.currentVersion}.jar.md5" />

    <!-- create checksum for binary zip -->
    <ant:checksum file="${maven.dist.dir}/${pom.artifactId}-${pom.currentVersion}.zip" property="zip.md5"/>
    <ant:echo message="${zip.md5} *${pom.artifactId}-${pom.currentVersion}.zip" 
              file="${maven.dist.dir}/${pom.artifactId}-${pom.currentVersion}.zip.md5" />

    <!-- create checksum for binary tar.gz -->
    <ant:checksum file="${maven.dist.dir}/${pom.artifactId}-${pom.currentVersion}.tar.gz" property="tar.gz.md5"/>
    <ant:echo message="${tar.gz.md5} *${pom.artifactId}-${pom.currentVersion}.tar.gz" 
              file="${maven.dist.dir}/${pom.artifactId}-${pom.currentVersion}.tar.gz.md5" />

    <!-- create checksum for source zip -->
    <ant:checksum file="${maven.dist.dir}/${pom.artifactId}-${pom.currentVersion}-src.zip" property="src.zip.md5"/>
    <ant:echo message="${src.zip.md5} *${pom.artifactId}-${pom.currentVersion}-src.zip" 
              file="${maven.dist.dir}/${pom.artifactId}-${pom.currentVersion}-src.zip.md5" />

    <!-- create checksum for source tar.gz -->
    <ant:checksum file="${maven.dist.dir}/${pom.artifactId}-${pom.currentVersion}-src.tar.gz" property="src.tar.gz.md5"/>
    <ant:echo message="${src.tar.gz.md5} *${pom.artifactId}-${pom.currentVersion}-src.tar.gz" 
              file="${maven.dist.dir}/${pom.artifactId}-${pom.currentVersion}-src.tar.gz.md5" />

  </postGoal>

</project>
