<!--
 ! 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="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>asterix-coverage</artifactId>
  <packaging>pom</packaging>
  <name>asterix-coverage</name>

  <parent>
    <groupId>org.apache.asterix</groupId>
    <artifactId>apache-asterixdb</artifactId>
    <version>0.8.9-SNAPSHOT</version>
  </parent>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.8</version>
        <executions>
          <execution>
            <phase>test</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target if="coverage" unless="skipTests">
                <echo message="Generating JaCoCo Reports" />
                <property name="asterix.dir" location="${basedir}/.."/>
                <!-- special case for jenkins -->
                <condition property="hyracks.dir" value="${asterix.dir}/hyracks">
                  <available file="${asterix.dir}/hyracks/pom.xml"/>
                </condition>
                <pathconvert property="hyracks.dir">
                  <first>
                    <dirset dir="${asterix.dir}/..">
                      <include name="*hyracks"/>
                    </dirset>
                  </first>
                </pathconvert>
                <!-- gather all of the source dirs -->
                <pathconvert property="source.dirs" pathsep=",">
                  <dirset dir="${asterix.dir}">
                    <include name="**/src/main/java"/>
                    <!-- special case for jenkins -->
                    <exclude name="hyracks/**"/>
                  </dirset>
                </pathconvert>
                <pathconvert property="hyracks.source.dirs" pathsep=",">
                  <dirset dir="${hyracks.dir}">
                    <include name="**/src/main/java"/>
                  </dirset>
                </pathconvert>
                <echo message="asterix dir: ${asterix.dir}/"/>
                <echo message="hyracks dir: ${hyracks.dir}"/>
                <echo message="asterix source dirs: ${source.dirs}/"/>
                <echo message="hyracks source dirs: ${hyracks.source.dirs}/"/>

                <taskdef name="report" classname="org.jacoco.ant.ReportTask">
                  <classpath path="${basedir}/target/jacoco-jars/org.jacoco.ant.jar" />
                </taskdef>
                <mkdir dir="${basedir}/target/coverage-report" />
                <report>
                  <executiondata>
                    <fileset dir="${asterix.dir}">
                      <include name="**/jacoco.exec" />
                    </fileset>
                  </executiondata>
                  <structure name="AsterixDB Coverage Project">
                    <group name="AsterixDB">
                      <classfiles>
                        <fileset dir="${asterix.dir}">
                          <include name="**/target/classes/**/*.class"/>
                          <!-- special case for jenkins -->
                          <exclude name="hyracks/**"/>
                        </fileset>
                      </classfiles>
                      <sourcefiles encoding="UTF-8">
                        <multirootfileset basedirs="${source.dirs}" type="file">
                          <include name="**/*.java"/>
                        </multirootfileset>
                      </sourcefiles>
                    </group>
                    <group name="Hyracks">
                      <classfiles>
                        <fileset dir="${hyracks.dir}">
                          <include name="**/target/classes/**/*.class"/>
                          <exclude name="hyracks/hyracks-hdfs/hyracks-hdfs-1.x/**"/>
                        </fileset>
                      </classfiles>
                      <sourcefiles encoding="UTF-8">
                        <multirootfileset basedirs="${hyracks.source.dirs}" type="file">
                          <include name="**/*.java"/>
                        </multirootfileset>
                      </sourcefiles>
                    </group>
                  </structure>
                  <html destdir="${basedir}/target/coverage-report/html" />
                  <xml destfile="${basedir}/target/coverage-report/coverage-report.xml" />
                  <csv destfile="${basedir}/target/coverage-report/coverage-report.csv" />
                </report>
              </target>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.jacoco</groupId>
            <artifactId>org.jacoco.ant</artifactId>
            <version>${jacoco.version}</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>
</project>
