<!--
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:j="jelly:core">

  <!-- need various bits in the src build. Binary build is handled by Ant -->
  <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 Files -->
    <copy todir="${maven.dist.src.assembly.dir}">
      <fileset dir=".">
        <include name="RELEASE-NOTES*.txt"/>
        <include name="NOTICE.txt"/>
        <include name="STATUS.html"/>
        <include name="default.properties"/>
        <include name="checkstyle.xml"/>
        <include name="pom.xml"/>
      </fileset>
    </copy>

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

  </postGoal>

  <!-- Release process uses ant for Binary build, however for completeness... -->
  <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>
  
</project>
