<?xml version="1.0" encoding="UTF-8"?>
<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>net.leanix.poms</groupId>
        <artifactId>common-parent</artifactId>
        <version>2.0.1</version>
        <relativePath />
    </parent>

    <artifactId>sdk-parent</artifactId>
    <packaging>pom</packaging>

    <version>2.0.3</version>

    <description>
        Parent pom for leanIX SDKs. This pom contains all dependencies and plugins needed to generate a leanix java service SDK. The SDK code generation is realized with the
    </description>

    <organization>
        <name>LeanIX GmbH</name>
        <url>https://www.leanix.net</url>
    </organization>

    <licenses>
        <license>
            <name>MIT License</name>
            <url>http://www.opensource.org/licenses/mit-license.php</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <properties>
        <swagger-core-version>1.6.1</swagger-core-version>
        <jackson.version>2.13.1</jackson.version>
        <jersey.version>2.35</jersey.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>${swagger-core-version}</version>
        </dependency>

        <!-- HTTP client: jersey-client -->
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>${jersey.version}</version>
        </dependency>
		<dependency>
			  <groupId>org.glassfish.jersey.connectors</groupId>
			  <artifactId>jersey-apache-connector</artifactId>
			  <version>${jersey.version}</version>
		</dependency>
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-multipart</artifactId>
            <version>${jersey.version}</version>
        </dependency>

        <!-- Replace jackson-jaxrs-base which comes transitive from jersey-media-json-jackson with version 2.6.3 -->
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <version>${jersey.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>com.fasterxml.jackson.jaxrs</groupId>
                    <artifactId>jackson-jaxrs-base</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- JSON processing: jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jsr310</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.jaxrs</groupId>
            <artifactId>jackson-jaxrs-base</artifactId>
            <version>${jackson.version}</version>
        </dependency>

        <!-- Base64 encoding that works in both JVM and Android. Unfortunately this used in swagger generated class 'HttpBasicAuth' -->
        <dependency>
            <groupId>com.brsanthu</groupId>
            <artifactId>migbase64</artifactId>
            <version>2.2</version>
        </dependency>

        <!-- Test scopes -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>3.18.1</version>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>
                                ${project.build.directory}/lib
                            </outputDirectory>
                            <includeScope>runtime</includeScope>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>

        <!-- This profile is used to generate the Client SDK completely new -->
        <profile>
            <id>codegen</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-clean-plugin</artifactId>
                        <configuration>
                            <filesets>
                                <fileset>
                                    <!-- presume only generated sources have been copied here, so delete them on a clean in this profile -->
                                    <directory>src/main/java/net/leanix</directory>
                                    <includes>
                                        <include>**/*</include>
                                    </includes>
                                </fileset>
                                <fileset>
                                    <!-- presume only generated test sources have been copied here, so delete them on a clean in this 
                                        profile -->
                                    <directory>src/test/java/net/leanix</directory>
                                    <includes>
                                        <include>**/*</include>
                                    </includes>
                                </fileset>
                            </filesets>
                        </configuration>
                    </plugin>

                    <!-- 1.) Generate sdk code with swagger's codegen tool -->
                    <plugin>
                        <groupId>io.swagger</groupId>
                        <artifactId>swagger-codegen-maven-plugin</artifactId>
                        <version>2.2.3</version>
                        <configuration>
                            <inputSpec>${swagger-inputSpec}</inputSpec>
                            <language>java</language>
                            <apiPackage>net.leanix.${sdk-name}.api</apiPackage>
                            <modelPackage>net.leanix.${sdk-name}.api.models</modelPackage>
                            <addCompileSourceRoot>false</addCompileSourceRoot>
                            <configOptions>
                                <groupId>net.leanix</groupId>
                                <artifactId>leanix-${sdk-name}-sdk-java</artifactId>
                                <invokerPackage>net.leanix.dropkit.apiclient</invokerPackage>
                                <hideGenerationTimestamp>true</hideGenerationTimestamp>
                                <library>jersey2</library>
                                <dateLibrary>java8</dateLibrary>
                                <type-mappings>DateTime=Instant,date=LocalDate</type-mappings>
                                <import-mappings>Instant=java.time.Instant,LocalDate=java.time.LocalDate</import-mappings>
                            </configOptions>
                            <!-- used to get help from cli that describes possible configOptions -->
                            <!--configHelp>true</configHelp -->
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>generate</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- 2.) Replace some generated classes and add additional stuff here which comes from the dropkit-sdk-utils artifact -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <version>2.10</version>
                        <executions>
                            <execution>
                                <id>getAdaptedJavaSources</id>
                                <phase>generate-sources</phase>
                                <goals>
                                    <goal>unpack</goal>
                                </goals>
                                <configuration>
                                    <artifactItems>
                                        <artifactItem>
                                            <groupId>net.leanix</groupId>
                                            <artifactId>leanix-dropkit-sdk-utils</artifactId>
                                            <version>${leanix-dropkit-sdk-utils-version}</version>
                                            <type>jar</type>
                                            <overWrite>true</overWrite>
                                            <outputDirectory>${project.build.directory}/adapted-sources</outputDirectory>
                                            <includes>java/**/*.java</includes>
                                        </artifactItem>
                                    </artifactItems>
                                    <includes>**/*.java</includes>
                                    <excludes>**/*.properties</excludes>
                                    <overWriteReleases>true</overWriteReleases>
                                    <overWriteSnapshots>true</overWriteSnapshots>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- 3.) copy swagger's generated sources + adapted sources into /src/main/java folder -->
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.8</version>
                        <executions>
                            <execution>
                                <phase>generate-sources</phase>
                                <configuration>
                                    <target>
                                        <copy todir="src" overwrite="true">
                                            <fileset dir="target/generated-sources/swagger/src" includes="**" />
                                        </copy>
                                        <copy todir="src/main" overwrite="true">
                                            <fileset dir="target/adapted-sources" includes="**" />
                                        </copy>
                                    </target>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

</project>
