<!--
  ~ 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>
    <parent>
        <groupId>com.epam.datalab</groupId>
        <artifactId>datalab</artifactId>
        <version>1.0</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <repositories>
        <repository>
            <id>michaelklishin</id>
            <url>https://dl.bintray.com/michaelklishin/maven/</url>
        </repository>
    </repositories>

    <artifactId>self-service</artifactId>

    <properties>
        <com.fiestacabin.dropwizard.quartz.version>0.7.1</com.fiestacabin.dropwizard.quartz.version>
        <com.jcraft.jsch.version>0.1.54</com.jcraft.jsch.version>
        <org.glassfish.jersey.media.version>2.23.1</org.glassfish.jersey.media.version>
        <com.github.oshi.core.version>3.8.0</com.github.oshi.core.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>de.ahus1.keycloak.dropwizard</groupId>
            <artifactId>keycloak-dropwizard</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>com.novemberain</groupId>
            <artifactId>quartz-mongodb</artifactId>
            <version>2.1.0</version>
        </dependency>

        <dependency>
            <groupId>com.epam.datalab</groupId>
            <artifactId>common</artifactId>
        </dependency>
        <dependency>
            <groupId>de.thomaskrille</groupId>
            <artifactId>dropwizard-template-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>${org.mongodb.version}</version>
        </dependency>
        <dependency>
            <groupId>io.dropwizard</groupId>
            <artifactId>dropwizard-assets</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <version>${org.mockito.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.dropwizard</groupId>
            <artifactId>dropwizard-forms</artifactId>
            <version>${io.dropwizard.version}</version>
        </dependency>

        <dependency>
            <groupId>com.fiestacabin.dropwizard.quartz</groupId>
            <artifactId>dropwizard-quartz</artifactId>
            <version>${com.fiestacabin.dropwizard.quartz.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.quartz-scheduler</groupId>
                    <artifactId>quartz</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-core</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-jaxrs2</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-integration</artifactId>
            <version>2.0.1</version>
        </dependency>

        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>${com.jcraft.jsch.version}</version>
        </dependency>
        <dependency>
            <groupId>com.epam.datalab</groupId>
            <artifactId>datalab-model</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <dependency>
            <groupId>com.epam.datalab</groupId>
            <artifactId>datalab-utils</artifactId>
            <version>${project.parent.version}</version>
        </dependency>

        <dependency>
            <groupId>com.epam.datalab</groupId>
            <artifactId>datalab-webapp-common</artifactId>
            <version>${project.parent.version}</version>
        </dependency>

        <dependency>
            <groupId>com.epam.datalab</groupId>
            <artifactId>datalab-mongo-migration</artifactId>
            <version>${project.parent.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.dropwizard</groupId>
            <artifactId>dropwizard-testing</artifactId>
            <version>${io.dropwizard.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.github.oshi</groupId>
            <artifactId>oshi-core</artifactId>
            <version>${com.github.oshi.core.version}</version>
        </dependency>
        <dependency>
            <groupId>com.jcabi</groupId>
            <artifactId>jcabi-manifests</artifactId>
            <version>1.1</version>
        </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
            <artifactId>jersey-test-framework-provider-grizzly2</artifactId>
            <version>${org.glassfish.jersey.media.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.servlet</groupId>
                    <artifactId>javax.servlet-api</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                </exclusion>
            </exclusions>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.guacamole</groupId>
            <artifactId>guacamole-common</artifactId>
            <version>1.0.0</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.4</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>${commons-fileupload.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-shade-plugin</artifactId>
                <version>${maven-shade-plugin.version}</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <filters>
                                <filter>
                                    <artifact>*:*</artifact>
                                    <excludes>
                                        <exclude>META-INF/*.SF</exclude>
                                        <exclude>META-INF/*.DSA</exclude>
                                        <exclude>META-INF/*.RSA</exclude>
                                    </excludes>
                                </filter>
                            </filters>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                            <transformers>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                                <transformer
                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.epam.datalab.backendapi.SelfServiceApplication</mainClass>
                                    <manifestEntries>
                                        <Created-By>&lt;EPAM&gt; Systems</Created-By>
                                        <Name>com/epam/datalab</Name>
                                        <Implementation-Title>DataLab Self-Service</Implementation-Title>
                                        <DataLab-Version>${datalab.version}</DataLab-Version>
                                        <Implementation-Vendor>&lt;EPAM&gt; Systems</Implementation-Vendor>
                                        <Build-Time>${maven.build.timestamp}</Build-Time>
                                        <Build-OS>${os.name}</Build-OS>
                                        <GIT-Branch>${scmBranch}</GIT-Branch>
                                        <GIT-Commit>${buildNumber}</GIT-Commit>
                                    </manifestEntries>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>**/*Configuration.*</exclude>
                        <exclude>**/*Module.*</exclude>
                        <exclude>**/*Form.*</exclude>
                        <exclude>com/epam/datalab/dto/**/*</exclude>
                        <exclude>com/epam/datalab/backendapi/auth/**/*</exclude>
                        <exclude>com/epam/datalab/backendapi/conf/**/*</exclude>
                        <exclude>com/epam/datalab/backendapi/domain/**/*</exclude>
                        <exclude>com/epam/datalab/backendapi/dropwizard/**/*</exclude>
                        <exclude>com/epam/datalab/backendapi/healthcheck/**/*</exclude>
                        <exclude>com/epam/datalab/backendapi/modules/**/*</exclude>
                        <exclude>com/epam/datalab/backendapi/resources/dto/**/*</exclude>
                        <exclude>com/epam/datalab/backendapi/roles/**/*</exclude>
                        <exclude>com/epam/datalab/backendapi/servlet/guacamole/**/*</exclude>
                        <exclude>com/epam/datalab/backendapi/util/**/*</exclude>
                        <exclude>com/epam/datalab/backendapi/validation/**/*</exclude>
                    </excludes>
                </configuration>
            </plugin>
            <plugin>
                <groupId>io.swagger.core.v3</groupId>
                <artifactId>swagger-maven-plugin</artifactId>
                <version>2.0.10</version>
                <configuration>
                    <outputFileName>datalab-api</outputFileName>
                    <outputPath>${project.build.directory}/classes/webapp/dist/assets</outputPath>
                    <outputFormat>JSONANDYAML</outputFormat>
                    <resourcePackages>
                        <package>com.epam.datalab.backendapi.resources</package>
                    </resourcePackages>
                    <prettyPrint>true</prettyPrint>
                </configuration>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>resolve</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

    </build>
</project>