<?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">
    <parent>
        <artifactId>fintech-examples</artifactId>
        <groupId>de.adorsys.opba</groupId>
        <version>0.30.0.1</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <properties>
        <!-- Hard reference to root directory. Used to reference pmd anc checkstyle files from root.
        Change this if depth changes. Current: /open-banking-gateway/core -->
        <main.basedir>${project.parent.parent.basedir}</main.basedir>
        <tpp-bank-search-location>
            ${main.basedir}/opba-banking-rest-api-ymls/src/main/resources/static/tpp_banking_api_bank_search.yml
        </tpp-bank-search-location>
        <tpp-bank-search-prefix>de.adorsys.opba.tpp.banksearch</tpp-bank-search-prefix>
        <tpp-ais-location>
            ${main.basedir}/opba-banking-rest-api-ymls/src/main/resources/static/tpp_banking_api_ais.yml
        </tpp-ais-location>
        <tpp-ais-prefix>de.adorsys.opba.tpp.ais</tpp-ais-prefix>
        <tpp-pis-location>
            ${main.basedir}/opba-banking-rest-api-ymls/src/main/resources/static/tpp_banking_api_pis.yml
        </tpp-pis-location>
        <tpp-pis-prefix>de.adorsys.opba.tpp.pis</tpp-pis-prefix>
        <open-banking-api-spec-location>
            ${main.basedir}/opba-banking-rest-api-ymls/src/main/resources/static/tpp_banking_api_token.yml
        </open-banking-api-spec-location>
        <tpp-token-prefix>de.adorsys.opba.tpp.token</tpp-token-prefix>
    </properties>

    <name>fintech-examples/fintech-impl</name>
    <artifactId>fintech-impl</artifactId>

    <dependencies>
        <!-- project dependencies -->
        <dependency>
            <groupId>de.adorsys.opba</groupId>
            <artifactId>fintech-api</artifactId>
            <version>${project.version}</version>
        </dependency>

        <!-- Spring dependencies -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring-web.version}</version>
        </dependency>

        <dependency>
            <groupId>de.adorsys.opba</groupId>
            <artifactId>opba-api-security</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>de.adorsys.opba</groupId>
            <artifactId>opba-banking-rest-api</artifactId>
            <version>${project.version}</version>
            <scope>compile</scope>
        </dependency>

        <!-- DB dependencies -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-java8</artifactId>
        </dependency>

        <!-- Other dependencies -->
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${mapstruct.version}</version>
        </dependency>

        <!-- Email based Oauth2 -->
        <dependency>
            <groupId>com.nimbusds</groupId>
            <artifactId>oauth2-oidc-sdk</artifactId>
            <version>${nimbus.version}</version>
        </dependency>


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

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>${commons-codec.version}</version>
        </dependency>

        <!-- MOCKS not in test, but mock in main -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>${google.gson.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io.version}</version>
        </dependency>

        <!-- TEST -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring-framework-spring-tests.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>${h2.database.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>io.swagger.codegen.v3</groupId>
                <artifactId>swagger-codegen-maven-plugin</artifactId>
                <version>${swagger-codegen-maven-plugin.version}</version>
                <executions>
                    <execution>
                        <id>bankSearch</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${tpp-bank-search-location}</inputSpec>
                            <language>spring</language>
                            <output>${project.build.directory}/generated-sources/open-api/</output>
                            <generateApiTests>false</generateApiTests>
                            <generateModelTests>false</generateModelTests>
                            <configOptions>
                                <sourceFolder>src/main/java</sourceFolder>
                                <basePackage>${tpp-bank-search-prefix}.api.generated</basePackage>
                                <configPackage>${tpp-bank-search-prefix}.api.config.generated</configPackage>
                                <modelPackage>${tpp-bank-search-prefix}.api.model.generated</modelPackage>
                                <apiPackage>${tpp-bank-search-prefix}.api.resource.generated</apiPackage>
                                <invokerPackage>${tpp-bank-search-prefix}.client.generated</invokerPackage>
                                <interfaceOnly>true</interfaceOnly>
                                <skipOverwrite>true</skipOverwrite>
                                <dateLibrary>java8</dateLibrary>
                                <java8>false</java8>
                                <useTags>true</useTags>
                                <defaultInterfaces>false</defaultInterfaces>
                                <implicitHeaders>false</implicitHeaders>
                                <generateForOpenFeign>true</generateForOpenFeign>
                                <library>spring-cloud</library>
                                <swaggerDocketConfig>false</swaggerDocketConfig>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>ais</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${tpp-ais-location}</inputSpec>
                            <language>spring</language>
                            <output>${project.build.directory}/generated-sources/open-api/</output>
                            <generateApiTests>false</generateApiTests>
                            <generateModelTests>false</generateModelTests>
                            <configOptions>
                                <sourceFolder>src/main/java</sourceFolder>
                                <basePackage>${tpp-ais-prefix}.api.generated</basePackage>
                                <configPackage>${tpp-ais-prefix}.api.config.generated</configPackage>
                                <modelPackage>${tpp-ais-prefix}.api.model.generated</modelPackage>
                                <apiPackage>${tpp-ais-prefix}.api.resource.generated</apiPackage>
                                <invokerPackage>${tpp-ais-prefix}.client.generated</invokerPackage>
                                <interfaceOnly>true</interfaceOnly>
                                <skipOverwrite>true</skipOverwrite>
                                <dateLibrary>java8</dateLibrary>
                                <java8>false</java8>
                                <useTags>true</useTags>
                                <defaultInterfaces>false</defaultInterfaces>
                                <implicitHeaders>false</implicitHeaders>
                                <generateForOpenFeign>true</generateForOpenFeign>
                                <library>spring-cloud</library>
                                <swaggerDocketConfig>false</swaggerDocketConfig>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>pis</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${tpp-pis-location}</inputSpec>
                            <language>spring</language>
                            <output>${project.build.directory}/generated-sources/open-api/</output>
                            <generateApiTests>false</generateApiTests>
                            <generateModelTests>false</generateModelTests>
                            <configOptions>
                                <sourceFolder>src/main/java</sourceFolder>
                                <basePackage>${tpp-pis-prefix}.api.generated</basePackage>
                                <configPackage>${tpp-pis-prefix}.api.config.generated</configPackage>
                                <modelPackage>${tpp-pis-prefix}.api.model.generated</modelPackage>
                                <apiPackage>${tpp-pis-prefix}.api.resource.generated</apiPackage>
                                <invokerPackage>${tpp-pis-prefix}.client.generated</invokerPackage>
                                <interfaceOnly>true</interfaceOnly>
                                <skipOverwrite>true</skipOverwrite>
                                <dateLibrary>java8</dateLibrary>
                                <java8>false</java8>
                                <useTags>true</useTags>
                                <defaultInterfaces>false</defaultInterfaces>
                                <implicitHeaders>false</implicitHeaders>
                                <generateForOpenFeign>true</generateForOpenFeign>
                                <library>spring-cloud</library>
                                <swaggerDocketConfig>false</swaggerDocketConfig>
                            </configOptions>
                        </configuration>
                    </execution>
                    <execution>
                        <id>token</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                        <configuration>
                            <inputSpec>${open-banking-api-spec-location}</inputSpec>
                            <language>spring</language>
                            <output>${project.build.directory}/generated-sources/open-api/</output>
                            <generateApiTests>false</generateApiTests>
                            <generateModelTests>false</generateModelTests>
                            <configOptions>
                                <sourceFolder>src/main/java</sourceFolder>
                                <basePackage>${tpp-token-prefix}.api.generated</basePackage>
                                <configPackage>${tpp-token-prefix}.api.config.generated</configPackage>
                                <modelPackage>${tpp-token-prefix}.api.model.generated</modelPackage>
                                <apiPackage>${tpp-token-prefix}.api.resource.generated</apiPackage>
                                <invokerPackage>${tpp-token-prefix}.client.generated</invokerPackage>
                                <interfaceOnly>true</interfaceOnly>
                                <skipOverwrite>true</skipOverwrite>
                                <dateLibrary>java8</dateLibrary>
                                <java8>false</java8>
                                <useTags>true</useTags>
                                <defaultInterfaces>false</defaultInterfaces>
                                <implicitHeaders>false</implicitHeaders>
                                <generateForOpenFeign>true</generateForOpenFeign>
                                <library>spring-cloud</library>
                                <swaggerDocketConfig>false</swaggerDocketConfig>
                            </configOptions>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>io.swagger.codegen.v3</groupId>
                        <artifactId>swagger-codegen-generators</artifactId>
                        <version>${swagger-codegen-generators.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>
