<!--
 ! 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>
    <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>
