<!--
   Copyright 2003-2004 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">


  <!-- ================================================================== -->
  <!-- START : C O M M O N S - B U I L D                                  -->
  <!-- ================================================================== -->
  <!-- Required: Look and Feel for documentation within distributions     -->
  <!-- ================================================================== -->
  <postGoal name="xdoc:copy-resources">  
    <copy todir="${maven.build.dir}/docs/style/" failonerror="false">
      <fileset dir="${basedir}/../commons-build/xdocs/style">
      	<include name='**/*'/>
      	<exclude name='**/CVS/**'/>
      </fileset>
    </copy>
  </postGoal>
  <!-- ================================================================== -->
  <!-- END: C O M M O N S - B U I L D                                     -->
  <!-- ================================================================== -->

  <preGoal name="xdoc:jelly-transform">
    <attainGoal name="html2xdoc"/>
  </preGoal>

  <postGoal name="java:compile">
    
    <copy todir="${maven.build.dir}/classes/">
      <fileset dir="${pom.build.sourceDirectory}"
          excludes="**/*.java"/>
    </copy>

    <copy todir="${maven.build.dir}/classes/org/apache/commons/validator/resources/">
      <fileset dir="${basedir}/conf/share"
          includes="validator*.dtd"/>
    </copy>

    <copy todir="${maven.build.dir}/classes/">
      <fileset dir="src/javascript"
          includes="**/*.js"/>
    </copy>

  </postGoal>

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

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

    <!-- Copy configuration files -->
    <copy todir="${maven.dist.src.assembly.dir}/conf/share">
      <fileset dir="./conf/share">
        <include name="*.xml"/>
        <include name="*.dtd"/>
      </fileset>
    </copy>

  </postGoal>

</project>

