<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright (c) 2018 - 2023, Entgra (Pvt) Ltd. (http://www.entgra.io) All Rights Reserved.
  ~
  ~ Entgra (Pvt) Ltd. 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/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>io.entgra.device.mgt.core.parent</artifactId>
        <groupId>io.entgra.device.mgt.core</groupId>
        <version>4.0.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>test-coverage</artifactId>
    <name>WSO2 Carbon - Unit Test Coverage Generation</name>
    <properties>
        <target>target</target>
        <coverge-report>coverage-reports</coverge-report>
        <individual.test.report.name>jacoco-unit.exec</individual.test.report.name>
        <classes>classes</classes>
        <source>src/main/java</source>

        <!-- certificate mgt component related properties -->
        <certificate.mgt>certificate-mgt</certificate.mgt>
        <certificate.mgt.api>${basedir}/../${certificate.mgt}/io.entgra.device.mgt.core.certificate.mgt.api</certificate.mgt.api>
        <certificate.mgt.cert.admin>
            ${basedir}/../${certificate.mgt}/io.entgra.device.mgt.core.certificate.mgt.cert.admin.api
        </certificate.mgt.cert.admin>
        <certificate.mgt.core>
            ${basedir}/../${certificate.mgt}/io.entgra.device.mgt.core.certificate.mgt.core
        </certificate.mgt.core>

        <!-- Device mgt component related properties -->
        <device.mgt>device-mgt</device.mgt>
        <device.mgt.core>${basedir}/../${device.mgt}/io.entgra.device.mgt.core.device.mgt.core</device.mgt.core>
        <device.mgt.common>${basedir}/../${device.mgt}/io.entgra.device.mgt.core.device.mgt.common</device.mgt.common>
        <device.mgt.api>${basedir}/../${device.mgt}/io.entgra.device.mgt.core.device.mgt.api</device.mgt.api>
        <device.mgt.extensions>${basedir}/../${device.mgt}/io.entgra.device.mgt.core.device.mgt.extensions</device.mgt.extensions>
<!--        <device.mgt.analytics.data>${basedir}/../${device.mgt}/org.wso2.carbon.device.mgt.analytics.data.publisher-->
<!--        </device.mgt.analytics.data>-->
        <device.mgt.url.printer>
            ${basedir}/../${device.mgt}/io.entgra.device.mgt.core.device.mgt.url.printer
        </device.mgt.url.printer>

        <!-- api-mgt extensions component related properties -->
        <api.extensions>apimgt-extensions</api.extensions>
        <api.extension.application>
            ${basedir}/../${api.extensions}/io.entgra.device.mgt.core.apimgt.application.extension
        </api.extension.application>
        <api.extension.application.api>
            ${basedir}/../${api.extensions}/io.entgra.device.mgt.core.apimgt.application.extension.api
        </api.extension.application.api>
<!--        <api.extension.handlers>${basedir}/../${api.extensions}/org.wso2.carbon.apimgt.handlers</api.extension.handlers>-->
<!--        <api.extension.client>-->
<!--            ${basedir}/../${api.extensions}/org.wso2.carbon.apimgt.integration.client-->
<!--        </api.extension.client>-->
        <api.extension.webapp>
            ${basedir}/../${api.extensions}/io.entgra.device.mgt.core.apimgt.webapp.publisher
        </api.extension.webapp>

        <!-- device-mgt extensions component related properties -->
        <device.extensions>device-mgt-extensions</device.extensions>
        <device.extensions.deployer>
            ${basedir}/../${device.extensions}/io.entgra.device.mgt.core.device.mgt.extensions.device.type.deployer
        </device.extensions.deployer>
        <device.extensions.pull>
            ${basedir}/../${device.extensions}/io.entgra.device.mgt.core.device.mgt.extensions.pull.notification
        </device.extensions.pull>
        <device.extensions.fcm>
            ${basedir}/../${device.extensions}/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm
        </device.extensions.fcm>
        <device.extensions.http>
            ${basedir}/../${device.extensions}/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.http
        </device.extensions.http>
        <device.extensions.mqtt>
            ${basedir}/../${device.extensions}/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.mqtt
        </device.extensions.mqtt>
        <device.extensions.xmpp>
            ${basedir}/../${device.extensions}/io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.xmpp
        </device.extensions.xmpp>

        <!-- Email Sender component related properties -->
        <email.sender.core>${basedir}/../email-sender/io.entgra.device.mgt.core.transport.mgt.email.sender.core</email.sender.core>

        <!-- identity extensions component related properties -->
        <identity.extensions>identity-extensions</identity.extensions>
        <identity.oauth.extension>
            ${basedir}/../${identity.extensions}/io.entgra.device.mgt.core.device.mgt.oauth.extensions
        </identity.oauth.extension>
<!--        <identity.backend.extension>-->
<!--            ${basedir}/../${identity.extensions}/org.wso2.carbon.identity.authenticator.backend.oauth-->
<!--        </identity.backend.extension>-->
        <identity.jwt.extension>
            ${basedir}/../${identity.extensions}/io.entgra.device.mgt.core.identity.jwt.client.extension
        </identity.jwt.extension>

        <!-- Policy Management component related properties -->
        <policy.mgt>policy-mgt</policy.mgt>
<!--        <policy.mgt.complex.point>-->
<!--            ${basedir}/../${policy.mgt}/org.wso2.carbon.complex.policy.decision.point-->
<!--        </policy.mgt.complex.point>-->
        <policy.mgt.decision.point>
            ${basedir}/../${policy.mgt}/io.entgra.device.mgt.core.policy.decision.point
        </policy.mgt.decision.point>
        <policy.mgt.information.point>
            ${basedir}/../${policy.mgt}/io.entgra.device.mgt.core.policy.information.point
        </policy.mgt.information.point>
        <policy.mgt.common>${basedir}/../${policy.mgt}/io.entgra.device.mgt.core.policy.mgt.common</policy.mgt.common>
        <policy.mgt.core>${basedir}/../${policy.mgt}/io.entgra.device.mgt.core.policy.mgt.core</policy.mgt.core>

        <!-- Webapp authenticator framework component related properties -->
        <webapp.authenticatore.frmework>
            ${basedir}/../webapp-authenticator-framework/io.entgra.device.mgt.core.webapp.authenticator.framework
        </webapp.authenticatore.frmework>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>

                        <configuration>
                            <target name="mergeReports">
                                <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="maven.plugin.classpath" />
                                <if>
                                    <and>
                                        <available file="${certificate.mgt.core}/${target}/${coverge-report}/${individual.test.report.name}" />
                                        <available file="${device.mgt.core}/${target}/${coverge-report}/${individual.test.report.name}" />
                                        <available file="${email.sender.core}/${target}/${coverge-report}/${individual.test.report.name}" />
                                        <available file="${policy.mgt.core}/${target}/${coverge-report}/${individual.test.report.name}" />
                                        <available file="${webapp.authenticatore.frmework}/${target}/${coverge-report}/${individual.test.report.name}" />
                                        <available file="${device.mgt.extensions}/${target}/${coverge-report}/${individual.test.report.name}" />
                                        <!-- After adding the test cases need to list the exec files here-->

                                    </and>
                                    <then>
                                        <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="${certificate.mgt.core}/${target}/${coverge-report}">
                                                    <include name="${individual.test.report.name}" />
                                                </fileset>
                                                <fileset dir="${device.mgt.core}/${target}/${coverge-report}">
                                                    <include name="${individual.test.report.name}" />
                                                </fileset>
                                                <fileset dir="${email.sender.core}/${target}/${coverge-report}">
                                                    <include name="${individual.test.report.name}" />
                                                </fileset>
                                                <fileset dir="${policy.mgt.core}/${target}/${coverge-report}">
                                                    <include name="${individual.test.report.name}" />
                                                </fileset>
                                                <fileset dir="${webapp.authenticatore.frmework}/${target}/${coverge-report}">
                                                    <include name="${individual.test.report.name}" />
                                                </fileset>
                                                <fileset dir="${device.mgt.extensions}/${target}/${coverge-report}">
                                                    <include name="${individual.test.report.name}" />
                                                </fileset>
                                                <fileset dir="${api.extension.webapp}/${target}/${coverge-report}">
                                                    <include name="${individual.test.report.name}" />
                                                </fileset>
<!--                                                <fileset dir="${device.mgt.analytics.data}/${target}/${coverge-report}">-->
<!--                                                    <include name="${individual.test.report.name}" />-->
<!--                                                </fileset>-->
                                                <fileset dir="${identity.jwt.extension}/${target}/${coverge-report}">
                                                    <include name="${individual.test.report.name}" />
                                                </fileset>
<!--                                                <fileset dir="${api.extension.handlers}/${target}/${coverge-report}">-->
<!--                                                    <include name="${individual.test.report.name}" />-->
<!--                                                </fileset>-->
                                                <fileset dir="${device.extensions.deployer}/${target}/${coverge-report}">
                                                    <include name="${individual.test.report.name}" />
                                                </fileset>
                                                <fileset dir="${device.extensions.mqtt}/${target}/${coverge-report}">
                                                    <include name="${individual.test.report.name}" />
                                                </fileset>
                                                <fileset dir="${device.mgt.api}/${target}/${coverge-report}">
                                                    <include name="${individual.test.report.name}" />
                                                </fileset>
                                                
                                                <!-- Need to list the newly added exec files here -->
                                            </executiondata>
                                            <structure name="Carbon Device Management Component Coverage Report">
                                                <group name="certificate-mgt">
                                                    <group name="io.entgra.device.mgt.core.certificate.mgt.core">
                                                        <classfiles>
                                                            <fileset dir="${certificate.mgt.core}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${certificate.mgt.core}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.certificate.mgt.api">
                                                        <classfiles>
                                                            <fileset dir="${certificate.mgt.api}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${certificate.mgt.api}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.certificate.mgt.cert.admin.api">
                                                        <classfiles>
                                                            <fileset dir="${certificate.mgt.cert.admin}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${certificate.mgt.cert.admin}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                </group>
                                                <group name="device-mgt">
<!--                                                    <group name="org.wso2.carbon.device.mgt.analytics.data.publisher">-->
<!--                                                        <classfiles>-->
<!--                                                            <fileset dir="${device.mgt.analytics.data}/${target}/${classes}" />-->
<!--                                                        </classfiles>-->
<!--                                                        <sourcefiles encoding="UTF-8">-->
<!--                                                            <fileset dir="${device.mgt.analytics.data}/${source}" />-->
<!--                                                        </sourcefiles>-->
<!--                                                    </group>-->
                                                    <group name="io.entgra.device.mgt.core.device.mgt.api">
                                                        <classfiles>
                                                            <fileset dir="${device.mgt.api}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${device.mgt.api}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.device.mgt.common">
                                                        <classfiles>
                                                            <fileset dir="${device.mgt.common}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${device.mgt.common}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.device.mgt.core">
                                                        <classfiles>
                                                            <fileset dir="${device.mgt.core}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${device.mgt.core}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.device.mgt.extensions">
                                                        <classfiles>
                                                            <fileset dir="${device.mgt.extensions}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${device.mgt.extensions}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.device.mgt.url.printer">
                                                        <classfiles>
                                                            <fileset dir="${device.mgt.url.printer}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${device.mgt.url.printer}/${source}" />
                                                        </sourcefiles>

                                                    </group>
                                                </group>
                                                <group name="apimgt-extensions">
<!--                                                    <group name="org.wso2.carbon.apimgt.integration.client">-->
<!--                                                        <classfiles>-->
<!--                                                            <fileset dir="${api.extension.client}/${target}/${classes}" />-->
<!--                                                        </classfiles>-->
<!--                                                        <sourcefiles encoding="UTF-8">-->
<!--                                                            <fileset dir="${api.extension.client}/${source}" />-->
<!--                                                        </sourcefiles>-->
<!--                                                    </group>-->
                                                    <group name="io.entgra.device.mgt.core.apimgt.application.extension">
                                                        <classfiles>
                                                            <fileset dir="${api.extension.application}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${api.extension.application}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.apimgt.application.extension.api">
                                                        <classfiles>
                                                            <fileset dir="${api.extension.application.api}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${api.extension.application.api}/${source}" />
                                                        </sourcefiles>
                                                    </group>
<!--                                                    <group name="org.wso2.carbon.apimgt.handlers">-->
<!--                                                        <classfiles>-->
<!--                                                            <fileset dir="${api.extension.handlers}/${target}/${classes}" />-->
<!--                                                        </classfiles>-->
<!--                                                        <sourcefiles encoding="UTF-8">-->
<!--                                                            <fileset dir="${api.extension.handlers}/${source}" />-->
<!--                                                        </sourcefiles>-->
<!--                                                    </group>-->
                                                    <group name="io.entgra.device.mgt.core.apimgt.webapp.publisher">
                                                        <classfiles>
                                                            <fileset dir="${api.extension.webapp}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${api.extension.webapp}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                </group>
                                                <group name="device-mgt-extensions">
                                                    <group name="io.entgra.device.mgt.core.device.mgt.extensions.device.type.deployer">
                                                        <classfiles>
                                                            <fileset dir="${device.extensions.deployer}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${device.extensions.deployer}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.fcm">
                                                        <classfiles>
                                                            <fileset dir="${device.extensions.fcm}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${device.extensions.fcm}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.http">
                                                        <classfiles>
                                                            <fileset dir="${device.extensions.http}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${device.extensions.http}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.mqtt">
                                                        <classfiles>
                                                            <fileset dir="${device.extensions.mqtt}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${device.extensions.mqtt}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.device.mgt.extensions.push.notification.provider.xmpp">
                                                        <classfiles>
                                                            <fileset dir="${device.extensions.xmpp}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${device.extensions.xmpp}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.device.mgt.extensions.pull.notification">
                                                        <classfiles>
                                                            <fileset dir="${device.extensions.pull}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${device.extensions.pull}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                </group>
                                                <group name="email-sender">
                                                    <classfiles>
                                                        <fileset dir="${email.sender.core}/${target}/${classes}" />
                                                    </classfiles>
                                                    <sourcefiles encoding="UTF-8">
                                                        <fileset dir="${email.sender.core}/${source}" />
                                                    </sourcefiles>
                                                </group>

                                                <group name="identity-extensions">
                                                    <group name="io.entgra.device.mgt.core.device.mgt.oauth.extensions">
                                                        <classfiles>
                                                            <fileset dir="${identity.oauth.extension}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${identity.oauth.extension}/${source}" />
                                                        </sourcefiles>
                                                    </group>
<!--                                                    <group name="org.wso2.carbon.identity.authenticator.backend.oauth">-->
<!--                                                        <classfiles>-->
<!--                                                            <fileset dir="${identity.backend.extension}/${target}/${classes}" />-->
<!--                                                        </classfiles>-->
<!--                                                        <sourcefiles encoding="UTF-8">-->
<!--                                                            <fileset dir="${identity.backend.extension}/${source}" />-->
<!--                                                        </sourcefiles>-->
<!--                                                    </group>-->
                                                    <group name="io.entgra.device.mgt.core.identity.jwt.client.extension">
                                                        <classfiles>
                                                            <fileset dir="${identity.jwt.extension}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${identity.jwt.extension}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                </group>
                                                <group name="policy-mgt">
<!--                                                    <group name="org.wso2.carbon.complex.policy.decision.point">-->
<!--                                                        <classfiles>-->
<!--                                                            <fileset dir="${policy.mgt.complex.point}/${target}/${classes}" />-->
<!--                                                        </classfiles>-->
<!--                                                        <sourcefiles encoding="UTF-8">-->
<!--                                                            <fileset dir="${policy.mgt.complex.point}/${source}" />-->
<!--                                                        </sourcefiles>-->
<!--                                                    </group>-->
                                                    <group name="io.entgra.device.mgt.core.policy.decision.point">
                                                        <classfiles>
                                                            <fileset dir="${policy.mgt.decision.point}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${policy.mgt.decision.point}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.policy.information.point">
                                                        <classfiles>
                                                            <fileset dir="${policy.mgt.information.point}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${policy.mgt.information.point}/${source}" />

                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.policy.mgt.common">
                                                        <classfiles>
                                                            <fileset dir="${policy.mgt.common}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${policy.mgt.common}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                    <group name="io.entgra.device.mgt.core.policy.mgt.core">
                                                        <classfiles>
                                                            <fileset dir="${policy.mgt.core}/${target}/${classes}" />
                                                        </classfiles>
                                                        <sourcefiles encoding="UTF-8">
                                                            <fileset dir="${policy.mgt.core}/${source}" />
                                                        </sourcefiles>
                                                    </group>
                                                </group>


                                                <group name="webapp-authentictor-framework">
                                                    <classfiles>
                                                        <fileset dir="${webapp.authenticatore.frmework}/${target}/${classes}" />
                                                    </classfiles>
                                                    <sourcefiles encoding="UTF-8">
                                                        <fileset dir="${webapp.authenticatore.frmework}/${source}" />
                                                    </sourcefiles>
                                                </group>
                                            </structure>

                                            <html destdir="${basedir}/target/coverage-report/site" />
                                        </report>
                                    </then>
                                </if>
                            </target>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.jacoco</groupId>
                        <artifactId>org.jacoco.ant</artifactId>
                        <version>${jacoco.ant.verision}</version>
                    </dependency>
                    <dependency>
                        <groupId>ant-contrib</groupId>
                        <artifactId>ant-contrib</artifactId>
                        <version>${ant.contrib.version}</version>
                        <exclusions>
                            <exclusion>
                                <groupId>ant</groupId>
                                <artifactId>ant</artifactId>
                            </exclusion>
                        </exclusions>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>
