<?xml version="1.0" encoding="UTF-8"?>
<!--
    Copyright 2005 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="help"
    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>  jdo20.build   - builds all JDO2 projects</echo>
        <echo>  jdo20.default - calls the default goal for  all JDO2 projects</echo>
        <echo>  jdo20.clean   - cleans all JDO2 projects</echo>
        <echo>  tck20.build   - builds tck20 and dependent JDO2 projects</echo>
        <echo>  tck20.default - calls the default goal for tck20 and dependent JDO2 projects</echo>
        <echo>  tck20.clean   - cleans tck20 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="jdo20.build"
          description="Builds all JDO2 projects">
        <j:set var="maven.multiproject.includes">${jdo20.projects}</j:set>
        <j:set var="goal">build</j:set>
        <attainGoal name="multiproject:goal"/>
    </goal>

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

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

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

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

    <goal name="tck20.clean"
          description="Cleans tck20 and dependent JDO2 projects">
        <j:set var="maven.multiproject.includes">${tck20.projects}</j:set>
        <attainGoal name="multiproject:clean"/>
    </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>

</project>
