<!--
 ! Copyright 2009-2013 by The Regents of the University of California
 ! 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 from
 ! 
 !     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>
    <target name="instrument">
        <antcall target="instrumentAModule">
            <param name="module" value="asterix-aql"/>
            <param name="module" value="asterix-om"/>
            <param name="module" value="asterix-metadata"/>
            <param name="module" value="asterix-tools"/>
            <param name="module" value="asterix-common"/>
            <param name="module" value="asterix-transactions"/>
        </antcall>
    </target>

    <target name="report" depends="merge">
        <property name="src.dir" value="src/main/java/"/>
        <cobertura-report datafile="sum.ser"
                          format="html"
                          destdir="./target/report">
            <!-- Add all modules that should be included below -->
            <!-- fileset dir="./MODULE_NAME_TO_REPLACE/${src.dir}"/ -->
            <fileset dir="./asterix-aql/${src.dir}"/>
            <fileset dir="./asterix-om/${src.dir}"/>
            <fileset dir="./asterix-metadata/${src.dir}"/>
            <fileset dir="./asterix-tools/${src.dir}"/>
            <fileset dir="./asterix-common/${src.dir}"/>
            <fileset dir="./asterix-runtime/${src.dir}"/>
            <fileset dir="./asterix-transactions/${src.dir}"/>
        </cobertura-report>
    </target>

    <target name="merge">
        <cobertura-merge datafile="sum.ser">
            <fileset dir=".">
                <include name="**/cobertura.ser"/>
            </fileset>
        </cobertura-merge>
    </target>

    <target name="instrumentAModule">
        <property name="classes.dir" value="target/classes"/>
        <cobertura-instrument todir="./${module}/${classes.dir}">
            <fileset dir="./asterix-aql/target/classes">
                <include name="**/*.class"/>
            </fileset>
            <fileset dir="./asterix-om/target/classes">
                <include name="**/*.class"/>
            </fileset>
            <fileset dir="./asterix-metadata/target/classes">
                <include name="**/*.class"/>
            </fileset>
            <fileset dir="./asterix-tools/target/classes">
                <include name="**/*.class"/>
            </fileset>
            <fileset dir="./asterix-common/target/classes">
                <include name="**/*.class"/>
            </fileset>
            <fileset dir="./asterix-runtime/target/classes">
                <include name="**/*.class"/>
            </fileset>
            <fileset dir="./asterix-transactions/target/classes">
                <include name="**/*.class"/>
            </fileset>
        </cobertura-instrument>
    </target>

<property environment="env"/>
    <property name="COBERTURA_HOME" value="../../.m2/repository/net/sourceforge/cobertura/cobertura/1.9.4.1"/>
    <property name="cobertura.dir" value="${COBERTURA_HOME}"/>
    <path id="cobertura.classpath">
        <fileset dir="${cobertura.dir}">
            <include name="cobertura.jar"/>
            <include name="lib/**/*.jar"/>
        </fileset>
    </path>
    <taskdef classpathref="cobertura.classpath" resource="tasks.properties"/>
</project>
