<!--
 ! 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.9.8</version>
  </parent>

  <properties>
    <root.dir>${basedir}/..</root.dir>
  </properties>

  <profiles>
    <profile>
      <id>coverage</id>
      <activation>
        <property>
          <name>coverage</name>
        </property>
      </activation>
      <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}/../.." />

                    <!-- gather all of the source dirs -->
                    <pathconvert property="source.dirs" pathsep=",">
                      <dirset dir="${asterix.dir}">
                        <include name="**/src/main/java" />
                      </dirset>
                    </pathconvert>

                    <echo message="asterix dir: ${asterix.dir}/" />
                    <echo message="asterix source dirs: ${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" />
                            </fileset>
                          </classfiles>
                          <sourcefiles encoding="UTF-8">
                            <multirootfileset basedirs="${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>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>${jacoco.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>merge</goal>
                </goals>
                <phase>test</phase>
                <configuration>
                  <fileSets>
                    <fileSet>
                      <directory>${session.executionRootDirectory}</directory>
                      <includes>
                        <include>**/target/jacoco.exec</include>
                        <include>**/target/jacoco-it.exec</include>
                      </includes>
                    </fileSet>
                  </fileSets>
                  <destFile>${session.executionRootDirectory}/target/jacoco-merged.exec</destFile>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

</project>
