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

    <!-- Create a jar file containing the sources -->
    <jar destfile="${maven.build.dir}/${maven.final.name}-sources.jar">
      <zipfileset prefix="META-INF" dir="${basedir}"
        includes="LICENSE*, NOTICE*"/>
      <fileset dir="${basedir}/src/java" includes="**/*.java"/>
    </jar>

    <!-- Create a jar file containing the Javadocs -->
    <jar destfile="${maven.build.dir}/${maven.final.name}-javadoc.jar">
      <zipfileset prefix="META-INF" dir="${basedir}"
        includes="LICENSE*, NOTICE*"/>
      <fileset dir="${basedir}/target/docs/apidocs"/>
    </jar>

    <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}/checkstyle.properties"/>
    </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" />

         <copy todir="${maven.dist.dir}">
             <fileset file='${maven.build.dir}/${maven.final.name}.jar'/>
             <fileset file='${maven.build.dir}/${maven.final.name}-sources.jar'/>
             <fileset file='${maven.build.dir}/${maven.final.name}-javadoc.jar'/>
         </copy>

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

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

         <!-- create checksum for javadoc jar -->
         <ant:checksum file="${maven.dist.dir}/${maven.final.name}-javadoc.jar" property="javadoc.jar.md5"/>
         <ant:echo message="${javadoc.jar.md5} *${maven.final.name}-javadoc.jar" 
                   file="${maven.dist.dir}/${maven.final.name}-javadoc.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>
