<?xml version="1.0" encoding="UTF-8"?>
<!--
    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 
    xmlns:j="jelly:core"
    xmlns:ant="jelly:ant"
    xmlns:maven="jelly:maven"
    xmlns:u="jelly:util"
    >

    <!-- ==================== -->
    <!-- Default Global Goals -->
    <!-- ==================== -->

    <goal name="help">
        <echo>Custom goals for this project are:</echo>
        <echo>  jdo11.build   - builds all JDO1 projects</echo>
        <echo>  jdo11.default - calls the default goal for all JDO1 projects</echo>
        <echo>  jdo11.clean   - cleans all JDO1 projects</echo>
        <echo>  jdo2.build   - builds all JDO2 projects</echo>
        <echo>  jdo2.default - calls the default goal for  all JDO2 projects</echo>
        <echo>  jdo2.clean   - cleans all JDO2 projects</echo>
        <echo>  tck2.build   - builds tck2 and dependent JDO2 projects</echo>
        <echo>  tck2.default - calls the default goal for tck2 and dependent JDO2 projects</echo>
        <echo>  tck2.clean   - cleans tck2 and dependent JDO2 projects</echo>
        <echo>  tck2.dist    - creates distributions of tck2 and dependent JDO2 projects</echo>
        <echo>  fostore20.clean   - cleans fostore20 and dependencies</echo>
        <echo>  fostore20.build   - builds fostore20 and dependencies</echo>
        <echo>  fostore20.default - calls the default goal for fostore20 and dependencies</echo>
        <echo>Please check README.txt for more details.</echo>
    </goal>

    <!-- ========== -->
    <!-- JDO1 Goals -->
    <!-- ========== -->

    <goal name="jdo11.build" 
          description="Builds all JDO1 projects">
        <j:set var="maven.multiproject.includes">${jdo11.projects}</j:set>
        <j:set var="goal">build</j:set>
        <attainGoal name="multiproject:goal"/>
    </goal>

    <goal name="jdo11.default" 
          description="Calls the default goal for all JDO1 projects">
        <j:set var="maven.multiproject.includes">${jdo11.projects}</j:set>
        <j:set var="goal">default</j:set>
        <attainGoal name="multiproject:goal"/>
    </goal>

    <goal name="jdo11.clean" 
          description="Cleans all JDO1 projects">
        <j:set var="maven.multiproject.includes">${jdo11.projects}</j:set>
        <attainGoal name="multiproject:clean"/>
    </goal>

    <!-- ========== -->
    <!-- JDO2 Goals -->
    <!-- ========== -->

    <goal name="jdo2.build"
          description="Builds all JDO2 projects">
        <j:set var="maven.multiproject.includes">${jdo2.projects}</j:set>
        <j:set var="goal">build</j:set>
        <attainGoal name="multiproject:goal"/>
    </goal>

    <goal name="jdo2.default"
          description="Calls the default goal for all JDO2 projects">
        <j:set var="maven.multiproject.includes">${jdo2.projects}</j:set>
        <j:set var="goal">default</j:set>
        <attainGoal name="multiproject:goal"/>
    </goal>

    <goal name="jdo2.clean"
          description="Cleans all JDO2 projects">
        <j:set var="maven.multiproject.includes">${jdo2.projects}</j:set>
        <attainGoal name="multiproject:clean"/>
    </goal>

    <goal name="tck2.build"
          description="Builds tck2 and dependent JDO2 projects">
        <j:set var="maven.multiproject.includes">${tck2.projects}</j:set>
        <j:set var="goal">build</j:set>
        <attainGoal name="multiproject:goal"/>
    </goal>

    <goal name="tck2.default"
          description="Calls the default goal for tck2 and dependent JDO2 projects">
        <j:set var="maven.multiproject.includes">${tck2.projects}</j:set>
        <j:set var="goal">default</j:set>
        <attainGoal name="multiproject:goal"/>
    </goal>

    <goal name="tck2.clean"
          description="Cleans tck2 and dependent JDO2 projects">
        <j:set var="maven.multiproject.includes">${tck2.projects}</j:set>
        <attainGoal name="multiproject:clean"/>
    </goal>

    <goal name="tck2.dist"
          description="Creates distributions of tck2 and dependent JDO2 projects">
        <j:set var="maven.multiproject.includes">${tck2.projects}</j:set>
        <j:set var="goal">dist</j:set>
        <attainGoal name="multiproject:goal"/>
    </goal> 

    <goal name="fostore20.build"
      description="Builds fostore20 and dependencies">
        <j:set var="maven.multiproject.includes">${fostore20.projects}</j:set>
        <j:set var="goal">build</j:set>
        <attainGoal name="multiproject:goal"/>
    </goal>

    <goal name="fostore20.default"
      description="Calls the default goal for fostore20 and dependencies">
        <j:set var="maven.multiproject.includes">${fostore20.projects}</j:set>
        <j:set var="goal">default</j:set>
        <attainGoal name="multiproject:goal"/>
    </goal>

    <goal name="fostore20.clean"
    description="Cleans fostore20 and dependencies">
        <j:set var="maven.multiproject.includes">${fostore20.projects}</j:set>
        <attainGoal name="multiproject:clean"/>
    </goal>
  

    <!-- ==== -->
    <!-- Misc -->
    <!-- ==== -->

    <goal name="multiproject:clean">
        <attainGoal name="multiproject:projects-init"/>
        <maven:reactor
            basedir="${maven.multiproject.basedir}"
            banner="Gathering project list"
            includes="${maven.multiproject.includes}"
            excludes="${maven.multiproject.excludes}"
            postProcessing="true"
            ignoreFailures="${maven.multiproject.ignoreFailures}"
            collectionVar="reactorProjects"
            collectOnly="true" />
        <j:forEach var="reactorProject" items="${reactorProjects}">
            <j:set var="_clean_dir">${reactorProject.context.getVariable("maven.build.dest")}</j:set>
            <ant:delete dir="${_clean_dir}" failonerror="false" />
            <j:set var="_clean_dir">${reactorProject.context.getVariable("maven.build.dir")}</j:set>
            <ant:delete dir="${_clean_dir}" failonerror="false" />
            <j:set var="_basedir">${reactorProject.context.getVariable("basedir")}</j:set>
            <ant:delete file="${_basedir}/velocity.log" quiet="true" failonerror="false" />
            <ant:delete file="${_basedir}/velocity.log.1" quiet="true" failonerror="false" />
            <ant:delete file="${_basedir}/jcoverage.ser" quiet="true" failonerror="false" />
        </j:forEach>
    </goal>

    <!-- ==================== -->
    <!-- Distribution support -->
    <!-- ==================== -->

    <preGoal name="dist:build-src">
        <echo>Copying top-level project.xml, project.properties, LICENSE.txt, NOTICE.txt, and README.txt to ${maven.dist.src.archive.dir}</echo>
        <copy toDir="${maven.dist.src.archive.dir}">
             <fileset dir="${basedir}/..">
                 <include name="project.properties"/>
                 <include name="project.xml"/>
                 <include name="README.txt"/>
                 <include name="LICENSE.txt"/>
                 <include name="NOTICE.txt"/>
             </fileset>
        </copy>
        <echo>Creating ${maven.dist.src.archive.dir}/lib/ext</echo>
        <mkdir dir="${maven.dist.src.archive.dir}/lib/ext"/>
    </preGoal>

    <preGoal name="dist:build-bin">
        <echo>Copying top-level LICENSE.txt, NOTICE.txt, and README.txt to ${maven.dist.bin.archive.dir}</echo>
        <copy toDir="${maven.dist.bin.archive.dir}">
             <fileset dir="${basedir}/..">
                 <include name="README.txt"/>
                 <include name="LICENSE.txt"/>
                 <include name="NOTICE.txt"/>
             </fileset>
        </copy>
    </preGoal>

    <postGoal name="dist">
        <attainGoal name="copy-release-artifacts"/>
    </postGoal>

    <goal name="copy-release-artifacts">
        <attainGoal name="copy-distribution"/>
        <attainGoal name="copy-dependency-artifacts"/>
    </goal>

    <goal name="copy-dependency-artifacts">
        <mkdir dir="${jdo.releases.dist.dir}/java-repository/${pom.groupId}/jars"/>
        <mkdir dir="${jdo.releases.dist.dir}/java-repository/${pom.groupId}/poms"/>

        <!-- Copy the artifacts for the remote repository -->
        <copy file="${maven.build.dir}/${maven.final.name}.jar" 
              todir="${jdo.releases.dist.dir}/java-repository/${pom.groupId}/jars"/>
        <copy file="project.xml" 
              toFile="${jdo.releases.dist.dir}/java-repository/${pom.groupId}/poms/${maven.final.name}.pom" />
    </goal>

    <goal name="copy-distribution">
        <mkdir dir="${jdo.releases.dist.dir}/db/jdo/${pom.currentVersion}"/>
         <!-- Copy distributions -->
        <copy todir="${jdo.releases.dist.dir}/db/jdo/${pom.currentVersion}">
            <fileset dir="${maven.build.dir}/distributions"/>
        </copy>
    </goal>

</project>
