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

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

    <copy todir="${maven.dist.bin.assembly.dir}">
      <fileset file='${basedir}/NOTICE.txt'/>
      <fileset file="${basedir}/RELEASE-NOTES.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}/build.properties.sample"/>
      <fileset file="${basedir}/checkstyle.xml"/>
      <fileset file="${basedir}/license-header.txt"/>
      <fileset file="${basedir}/pom.xml"/>
    </copy>

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

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

  </postGoal>

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

       <!-- Create a versioned pom -->
       <copy file="${basedir}/project.xml" tofile="${maven.dist.dir}/${maven.final.name}.pom"/>

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

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

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

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

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

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

    </postGoal>
  
</project>
