<?xml version="1.0" encoding="UTF-8"?>
<!--

    ============LICENSE_START=======================================================
    org.onap.aai
    ================================================================================
    Copyright (c) 2017-2019 AT&T Intellectual Property. All rights reserved.
    Copyright (c) 2017-2019 European Software Marketing Ltd.
    ================================================================================
    Licensed 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.
    ============LICENSE_END=========================================================

-->
<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>org.onap.oparent</groupId>
        <artifactId>oparent</artifactId>
        <version>2.0.0</version>
        <relativePath/>
    </parent>

    <groupId>org.onap.aai</groupId>
    <artifactId>babel</artifactId>
    <version>1.5.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>aai-babel</name>
    <description>ONAP AAI Babel Microservice</description>

    <properties>
        <!-- Spring boot version -->
        <spring.boot.version>2.1.6.RELEASE</spring.boot.version>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <aai.schema.source.folder>onap/aai_schema</aai.schema.source.folder>
        <aai.schema.target.folder>${project.build.directory}/aai-schema</aai.schema.target.folder>

        <!-- docker related properties -->
        <docker.fabric.version>0.28.0</docker.fabric.version>
        <aai.docker.version>1.0.0</aai.docker.version>
        <aai.build.directory>${project.build.directory}/${project.artifactId}-${project.version}-build/
        </aai.build.directory>
        <aai.docker.namespace>onap</aai.docker.namespace>
        <aai.base.image>alpine</aai.base.image>
        <aai.base.image.version>1.6.0</aai.base.image.version>

        <!-- Dependency Versions -->
        <common.logging.version>1.2.2</common.logging.version>
        <sdc.tosca.version>1.5.1</sdc.tosca.version>
        <commons.compress.version>1.18</commons.compress.version>
        <javax.ws.rs.version>2.1</javax.ws.rs.version>
        <mvn.jaxb2.version>0.13.2</mvn.jaxb2.version>
        <aai-schema.group.id>org.onap.aai.schema-service</aai-schema.group.id>
        <aai-schema.version>1.5.0</aai-schema.version>
        <apache.lang3.version>3.7</apache.lang3.version>
        <aai.rest.client.version>1.2.1</aai.rest.client.version>
        <sdc.distribution.client.version>1.3.0</sdc.distribution.client.version>
        <xmlunit.version>1.6</xmlunit.version>
        <logback.version>1.2.3</logback.version>
        <antrun.version>1.8</antrun.version>
        <!-- This will be used for the docker images as the default format of maven build has issues -->
        <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <profiles>
        <!-- Docker profile to be used for building docker image and pushing to nexus -->
        <profile>
            <id>docker</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>build-helper-maven-plugin</artifactId>
                        <version>3.0.0</version>
                        <executions>
                            <execution>
                                <phase>pre-clean</phase>
                                <id>parse-version</id>
                                <goals>
                                    <goal>parse-version</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.codehaus.groovy.maven</groupId>
                        <artifactId>gmaven-plugin</artifactId>
                        <version>1.0</version>
                        <executions>
                            <execution>
                                <phase>pre-clean</phase>
                                <goals>
                                    <goal>execute</goal>
                                </goals>
                                <configuration>
                                    <source>
                                        def userAaiBaseImage = session.userProperties['aai.base.image'];
                                        def userAaiCommonVersion = session.userProperties['aai.base.image.version'];
                                        if (userAaiCommonVersion != null) {
                                            project.properties['aai.base.image.version'] = userAaiCommonVersion;
                                        }
                                        if (userAaiBaseImage != null) {
                                            project.properties['aai.base.image'] = userAaiBaseImage;
                                        }
                                        log.info 'Base image flavour: ' + project.properties['aai.base.image'];
                                        log.info 'Base image version: ' + project.properties['aai.base.image.version'];
                                    </source>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>io.fabric8</groupId>
                        <artifactId>docker-maven-plugin</artifactId>
                        <version>${docker.fabric.version}</version>
                        <configuration>
                            <verbose>true</verbose>
                            <apiVersion>1.23</apiVersion>
                            <images>
                                <image>
                                    <name>${docker.push.registry}/${aai.docker.namespace}/${project.artifactId}:%l
                                    </name>
                                    <build>
                                        <filter>@</filter>
                                        <tags>
                                            <tag>latest</tag>
                                            <tag>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}-STAGING-latest</tag>
                                            <tag>${parsedVersion.majorVersion}.${parsedVersion.minorVersion}-STAGING-${maven.build.timestamp}</tag>
                                        </tags>
                                        <cleanup>try</cleanup>
                                        <dockerFileDir>${project.basedir}/src/main/docker</dockerFileDir>
                                        <assembly>
                                            <inline>
                                                <fileSets>
                                                    <fileSet>
                                                        <directory>${aai.build.directory}</directory>
                                                        <outputDirectory>/${project.artifactId}</outputDirectory>
                                                    </fileSet>
                                                </fileSets>
                                            </inline>
                                        </assembly>
                                    </build>
                                </image>
                            </images>
                        </configuration>
                        <executions>
                            <execution>
                                <id>clean-images</id>
                                <phase>pre-clean</phase>
                                <goals>
                                    <goal>remove</goal>
                                </goals>
                                <configuration>
                                    <removeAll>true</removeAll>
                                </configuration>
                            </execution>
                            <execution>
                                <id>generate-images</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>build</goal>
                                </goals>
                            </execution>
                            <execution>
                                <id>push-images</id>
                                <phase>deploy</phase>
                                <goals>
                                    <goal>push</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.onap.aai.logging-service</groupId>
            <artifactId>common-logging</artifactId>
            <version>${common.logging.version}</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version><!--$NO-MVN-MAN-VER$-->
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>${logback.version}</version><!--$NO-MVN-MAN-VER$-->
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-compress</artifactId>
            <version>${commons.compress.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
            <version>${javax.ws.rs.version}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
        </dependency>
        <dependency>
            <groupId>org.onap.sdc.sdc-tosca</groupId>
            <artifactId>sdc-tosca</artifactId>
            <version>${sdc.tosca.version}</version>
        </dependency>
        <dependency>
            <groupId>org.onap.aai</groupId>
            <artifactId>rest-client</artifactId>
            <version>${aai.rest.client.version}</version>
        </dependency>

        <!-- Testing -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.onap.sdc.sdc-distribution-client</groupId>
            <artifactId>sdc-distribution-client</artifactId>
            <version>${sdc.distribution.client.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>xmlunit</groupId>
            <artifactId>xmlunit</artifactId>
            <version>${xmlunit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
                <configuration>
                    <jvmArguments>
                        -DCONFIG_HOME=./appconfig-local
                        -DAPP_HOME=.
                        -Dtosca.mappings.config=./appconfig-local/tosca-mappings.json
                        -DKEY_STORE_PASSWORD=${KEY_STORE_PASSWORD}
                    </jvmArguments>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>unpack</id>
                        <phase>initialize</phase>
                        <goals>
                            <goal>unpack</goal>
                        </goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>${aai-schema.group.id}</groupId>
                                    <artifactId>aai-schema</artifactId>
                                    <version>${aai-schema.version}</version>
                                    <type>jar</type>
                                    <includes>${aai.schema.source.folder}/aai_schema_v**.xsd</includes>
                                    <outputDirectory>${project.build.directory}/tmp</outputDirectory>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>${antrun.version}</version>
                <executions>
                    <execution>
                        <id>Flatten XSDs</id>
                        <phase>initialize</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <target>
                                <copy todir="${aai.schema.target.folder}" flatten="true">
                                    <fileset dir="${project.build.directory}/tmp">
                                        <include name="**/*.xsd"/>
                                    </fileset>
                                </copy>
                            </target>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>${mvn.jaxb2.version}</version>
                <executions>
                    <execution>
                        <phase>process-sources</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaDirectory>${aai.schema.target.folder}</schemaDirectory>
                    <generatePackage>org.onap.aai.babel.xml.generator.xsd</generatePackage>
                    <generateDirectory>${project.build.directory}/generated-sources</generateDirectory>
                    <schemaIncludes>
                        <include>aai_schema_latest.xsd</include>
                    </schemaIncludes>
                    <extension>true</extension>
                    <args>
                        <arg>-Xannotate</arg>
                    </args>
                    <plugins>
                        <plugin>
                            <groupId>org.jvnet.jaxb2_commons</groupId>
                            <artifactId>jaxb2-basics-annotate</artifactId>
                            <version>0.6.4</version>
                        </plugin>
                        <!-- Add the dependencies with your annotations as 'plugins' below -->
                        <plugin>
                            <groupId>org.jvnet.jaxb2_commons</groupId>
                            <artifactId>jaxb2-annotate-plugin-test-annox-annotations</artifactId>
                            <version>1.0.0</version>
                        </plugin>
                    </plugins>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>exec-maven-plugin</artifactId>
                <groupId>org.codehaus.mojo</groupId>
                <version>1.5.0</version>
                <executions>
                    <execution><!-- Run our script to get latest xsd version -->
                        <id>Get latest xsd version</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <configuration>
                            <workingDirectory>${basedir}/scripts</workingDirectory>
                            <executable>bash</executable>
                            <commandlineArgs>get-latest-xsd-version.sh ${basedir}</commandlineArgs>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/descriptor.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.mycila</groupId>
                <artifactId>license-maven-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <header>License.txt</header>
                    <includes>
                        <include>src/main/java/**</include>
                        <include>src/test/java/**</include>
                        <include>pom.xml</include>
                    </includes>
                    <skipExistingHeaders>true</skipExistingHeaders>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <!-- Set goal from "check" to "format" to auto update license headers -->
                            <goal>check</goal>
                        </goals>
                        <phase>validate</phase>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <reuseForks>false</reuseForks>
                    <forkCount>1</forkCount>
                    <environmentVariables>
                        <APP_HOME>.</APP_HOME>
                        <CONFIG_HOME>src/test/resources</CONFIG_HOME>
                    </environmentVariables>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <classifier>client</classifier>
                            <includes>
                                <include>**/babel/service/data/*</include>
                            </includes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <classifier>client</classifier>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>