<!--
   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="java: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>
