<!--
  ~ 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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.epam.datalab</groupId>
    <artifactId>datalab</artifactId>
    <version>1.0</version>
    <packaging>pom</packaging>

    <scm>
        <connection>scm:git:https://github.com/apache/incubator-datalab.git</connection>
        <url>scm:git:https://github.com/apache/incubator-datalab.git</url>
        <tag>HEAD</tag>
    </scm>

    <profiles>
        <profile>
            <id>aws</id>
            <modules>
                <module>services/billing-aws</module>
            </modules>
        </profile>
        <profile>
            <id>azure</id>
            <modules>
                <module>services/billing-azure</module>
            </modules>
        </profile>
        <profile>
            <id>gcp</id>
            <modules>
                <module>services/billing-gcp</module>
            </modules>
        </profile>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>
            <properties>
                <sonar.host.url>
                    http://localhost:9000/sonar
                </sonar.host.url>
                <sonar.coverage.exclusions>
                    **/*Exception.java,
                    **/BucketServiceAwsImpl.java,
                    **/BucketServiceAzureImpl.java,
                    **/BucketServiceGcpImpl.java,
                    **/*DAO.java,
                    **/*DAOImpl.java,
                    **/*Configuration.java,
                    **/*ApplicationConfiguration.java,
                    **/*Application.java,
                    src/main/java/com/epam/datalab/dto/**,
                    src/main/java/com/epam/datalab/backendapi/interceptor/**,
                    src/main/java/com/epam/datalab/backendapi/auth/**,
                    src/main/java/com/epam/datalab/backendapi/conf/**,
                    src/main/java/com/epam/datalab/backendapi/domain/**,
                    src/main/java/com/epam/datalab/backendapi/dropwizard/**,
                    src/main/java/com/epam/datalab/backendapi/healthcheck/**,
                    src/main/java/com/epam/datalab/backendapi/modules/**,
                    src/main/java/com/epam/datalab/backendapi/resources/dto/**,
                    src/main/java/com/epam/datalab/backendapi/roles/**,
                    src/main/java/com/epam/datalab/backendapi/servlet/guacamole/**,
                    src/main/java/com/epam/datalab/backendapi/util/**,
                    src/main/java/com/epam/datalab/backendapi/validation/**,
                    src/main/java/com/epam/datalab/backendapi/core/commands/**,
                    src/main/java/com/epam/datalab/process/**,
                    src/main/java/com/epam/datalab/backendapi/modules/**,
                    src/main/java/com/epam/datalab/backendapi/validation/**,
                    src/main/java/com/epam/datalab/backendapi/schedulers/**
                </sonar.coverage.exclusions>
            </properties>
        </profile>
    </profiles>

    <modules>
        <module>services/common</module>
        <module>services/provisioning-service</module>
        <module>services/self-service</module>
        <module>services/datalab-model</module>
        <module>services/datalab-utils</module>
        <module>services/datalab-webapp-common</module>
        <module>services/datalab-mongo-migration</module>
        <module>services/billing-azure</module>
        <module>services/billing-gcp</module>
        <module>services/billing-aws</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <io.dropwizard.version>1.3.21</io.dropwizard.version>
        <dropwizard.swagger.version>1.3.5-1</dropwizard.swagger.version>
        <com.google.inject.version>4.2.0</com.google.inject.version>
        <dropwizard-template-config.version>1.4.0</dropwizard-template-config.version>
        <com.aegisql.conveyor.version>1.1.7</com.aegisql.conveyor.version>
        <org.mongodb.version>3.8.2</org.mongodb.version>
        <junit.version>4.12</junit.version>
        <org.mockito.version>1.10.19</org.mockito.version>
        <java.version>1.8</java.version>
        <properties-maven-plugin.version>1.0.0</properties-maven-plugin.version>
        <maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
        <buildnumber-maven-plugin.version>1.4</buildnumber-maven-plugin.version>
        <maven-shade-plugin.version>2.4.3</maven-shade-plugin.version>
        <maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
        <lombok.version>1.16.18</lombok.version>
        <hibernate.validator.version>5.4.2.Final</hibernate.validator.version>
        <logback.version>1.2.3</logback.version>
        <commons-fileupload.version>1.3.3</commons-fileupload.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest-core</artifactId>
                <version>1.3</version>
            </dependency>
            <dependency>
                <groupId>com.epam.datalab</groupId>
                <artifactId>common</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>de.thomaskrille</groupId>
                <artifactId>dropwizard-template-config</artifactId>
                <version>${dropwizard-template-config.version}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-assets</artifactId>
                <version>${io.dropwizard.version}</version>
            </dependency>
            <dependency>
                <groupId>com.google.inject</groupId>
                <artifactId>guice</artifactId>
                <version>${com.google.inject.version}</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>${logback.version}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-jackson</artifactId>
                <version>${io.dropwizard.version}</version>
            </dependency>
            <dependency>
                <groupId>io.dropwizard</groupId>
                <artifactId>dropwizard-util</artifactId>
                <version>${io.dropwizard.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>


    </dependencies>

    <build>
        <finalName>${project.artifactId}-${datalab.version}</finalName>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.jacoco</groupId>
                    <artifactId>jacoco-maven-plugin</artifactId>
                    <version>0.8.0</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>prepare-agent</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>report</id>
                            <phase>test</phase>
                            <goals>
                                <goal>report</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.sonarsource.scanner.maven</groupId>
                    <artifactId>sonar-maven-plugin</artifactId>
                    <version>3.7.0.1746</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>properties-maven-plugin</artifactId>
                <version>${properties-maven-plugin.version}</version>
                <executions>
                    <execution>
                        <phase>initialize</phase>
                        <goals>
                            <goal>read-project-properties</goal>
                        </goals>
                        <configuration>
                            <quiet>true</quiet>
                            <files>
                                <file>../../build.properties</file>
                                <file>build.properties</file>
                            </files>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <version>${buildnumber-maven-plugin.version}</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <doCheck>false</doCheck>
                    <doUpdate>false</doUpdate>
                    <getRevisionOnlyOnce>true</getRevisionOnlyOnce>
                    <revisionOnScmFailure>none</revisionOnScmFailure>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <version>0.13</version>
                <configuration>
                    <excludes>
                        <exclude>.git/**</exclude>
                        <exclude>.idea/**</exclude>
                        <exclude>**/.gitignore</exclude>
                        <exclude>**/.idea/**</exclude>
                        <exclude>**/*.ini</exclude>
                        <exclude>**/*.ipynb</exclude>
                        <exclude>**/*.iml</exclude>
                        <exclude>**/*.json</exclude>
                        <exclude>**/*.json.tpl</exclude>
                        <exclude>**/*.r</exclude>
                        <exclude>**/__init__.py</exclude>
                        <exclude>**/*.conf</exclude>
                        <exclude>**/.gitkeep</exclude>
                        <exclude>**/*.lst</exclude>
                        <exclude>**/*template</exclude>
                        <exclude>**/*.pub</exclude>
                        <exclude>**/*.md</exclude>
                        <exclude>**/*.MD</exclude>
                        <exclude>**/*.txt</exclude>
                        <exclude>**/*.svg</exclude>
                        <exclude>**/*.MockMaker</exclude>
                        <exclude>**/*.BillingToolConfigurationFactory</exclude>
                        <exclude>**/assets/**</exclude>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <phase>verify</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <useSystemClassLoader>false</useSystemClassLoader>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
