<?xml version="1.0" encoding="UTF-8"?>
<!--
    ============LICENSE_START=======================================================
    org.onap.aai
    ================================================================================
    Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
    Copyright © 2017-2018 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.1.0</version>
		<relativePath />
	</parent>

	<groupId>org.onap.aai.model-loader</groupId>
	<artifactId>model-loader</artifactId>
	<name>aai-model-loader</name>
	<version>1.9.3-SNAPSHOT</version>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-dependencies</artifactId>
				<version>${spring-boot.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<properties>
		<start-class>org.onap.aai.modelloader.service.ModelLoaderApplication</start-class>
		<nexusproxy>https://nexus.onap.org</nexusproxy>
		<docker.location>${basedir}/target</docker.location>
		<spring-boot.version>2.1.12.RELEASE</spring-boot.version>
		<apache.commons-text.version>1.8</apache.commons-text.version>
		<commons-compress.version>1.19</commons-compress.version>
		<hamcrest-all.version>1.3</hamcrest-all.version>
		<babel.version>1.9.4</babel.version>
		<aai.rest.client.version>1.2.1</aai.rest.client.version>
		<sdc-distribution-client.version>1.4.1</sdc-distribution-client.version>
		<logback.version>1.2.3</logback.version>
		<!-- 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.8.1</aai.base.image.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>

		<sonar.jacoco.reportPath />
		<sonar.jacoco.itReportPath />
		<sonar.jacoco.reportMissing.force.zero />

		<jacoco.line.coverage.limit>0.75</jacoco.line.coverage.limit>
		<jacoco.version>0.8.5</jacoco.version>
		<sonar-jacoco-listeners.version>3.2</sonar-jacoco-listeners.version>
		<sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
		<sonar.coverage.jacoco.xmlReportPaths>${project.reporting.outputDirectory}/jacoco-ut/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
		<sonar.exclusions>**/gen/**,**/generated-sources/**,**/yang-gen**,**/pax/**</sonar.exclusions>

		<sonar.scanner.version>3.7.0.1746</sonar.scanner.version>

		<maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version>
		<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
		<maven-compiler-plugin.source>11</maven-compiler-plugin.source>
		<maven-compiler-plugin.target>11</maven-compiler-plugin.target>
		<maven-compiler-plugin.test.source>11</maven-compiler-plugin.test.source>
		<maven-compiler-plugin.test.target>11</maven-compiler-plugin.test.target>
	</properties>

	<distributionManagement>
		<repository>
			<id>ecomp-releases</id>
			<name>ECOMP Release Repository</name>
			<url>${nexusproxy}/content/repositories/releases/</url>
		</repository>
		<snapshotRepository>
			<id>ecomp-snapshots</id>
			<name>ECOMP Snapshot Repository</name>
			<url>${nexusproxy}/content/repositories/snapshots/</url>
		</snapshotRepository>
	</distributionManagement>

	<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-web</artifactId>
			<exclusions>
			  <exclusion>
			    <groupId>org.springframework.boot</groupId>
			    <artifactId>spring-boot-starter-tomcat</artifactId>
			  </exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.onap.aai</groupId>
			<artifactId>babel</artifactId>
			<version>${babel.version}</version>
			<classifier>client</classifier>
			<exclusions>
				<exclusion>
					<groupId>*</groupId>
					<artifactId>*</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.core</groupId>
			<artifactId>jersey-common</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.onap.aai</groupId>
			<artifactId>rest-client</artifactId>
			<version>${aai.rest.client.version}</version>
		</dependency>
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
		</dependency>

		<!-- Test dependencies -->
		<!-- https://mvnrepository.com/artifact/com.mikesamuel/json-sanitizer -->
		<dependency>
			<groupId>com.mikesamuel</groupId>
			<artifactId>json-sanitizer</artifactId>
			<version>1.2.0</version>
		</dependency>

		<!-- Common logging framework -->
		<dependency>
			<groupId>org.onap.aai.logging-service</groupId>
			<artifactId>common-logging</artifactId>
			<version>1.5.0</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>org.onap.sdc.sdc-distribution-client</groupId>
			<artifactId>sdc-distribution-client</artifactId>
			<version>${sdc-distribution-client.version}</version>
		</dependency>
		<dependency>
			<groupId>org.json</groupId>
			<artifactId>json</artifactId>
			<version>20131018</version><!--$NO-MVN-MAN-VER$ -->
		</dependency>
		<dependency>
			<groupId>org.eclipse.jetty</groupId>
			<artifactId>jetty-security</artifactId>
		</dependency>
		<dependency>
			<groupId>jline</groupId>
			<artifactId>jline</artifactId>
			<version>2.12.1</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-compress</artifactId>
			<version>${commons-compress.version}</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.11.0</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-text</artifactId>
			<version>${apache.commons-text.version}</version>
		</dependency>

		<!-- Test dependencies -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest-all</artifactId>
			<version>${hamcrest-all.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-core</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<!-- Plugins and repositories -->
	<pluginRepositories>
		<pluginRepository>
			<id>central</id>
			<url>http://repo1.maven.org/maven2</url>
		</pluginRepository>
		<pluginRepository>
			<id>EvoSuite</id>
			<name>EvoSuite Repository</name>
			<url>http://www.evosuite.org/m2</url>
		</pluginRepository>
	</pluginRepositories>

	<repositories>
		<repository>
			<id>central</id>
			<name>Maven 2 repository 2</name>
			<url>http://repo2.maven.org/maven2/</url>
		</repository>
		<repository>
			<id>ecomp-releases</id>
			<name>ECOMP Release Repository</name>
			<url>${nexusproxy}/content/repositories/releases/</url>
		</repository>
		<repository>
			<id>ecomp-snapshots</id>
			<name>ECOMP Snapshot Repository</name>
			<url>${nexusproxy}/content/repositories/snapshots/</url>
		</repository>
		<repository>
			<id>ecomp-staging</id>
			<name>ECOMP Staging Repository</name>
			<url>${nexusproxy}/content/repositories/staging/</url>
		</repository>
	</repositories>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>${maven-compiler-plugin.version}</version>
				<inherited>true</inherited>
				<configuration>
					<source>${maven-compiler-plugin.source}</source>
					<target>${maven-compiler-plugin.target}</target>
					<testSource>${maven-compiler-plugin.test.source}</testSource>
					<testTarget>${maven-compiler-plugin.test.target}</testTarget>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<version>${spring-boot.version}</version>
				<configuration>
					<executable>true</executable>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>repackage</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>version/properties</include>
						<include>pom.xml</include>
					</includes>
					<skipExistingHeaders>true</skipExistingHeaders>
				</configuration>
				<executions>
					<execution>
						<goals>
							<!-- Set goal to "format" to auto update license headers -->
							<goal>check</goal>
						</goals>
						<phase>process-sources</phase>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-deploy-plugin</artifactId>
				<configuration>
					<classifier>client</classifier>
				</configuration>
			</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>

			<!-- once we connect aai-parent or oparent 3.0+ we can take out this
			     whole section -->

			<plugin>
			  <groupId>org.jacoco</groupId>
			  <artifactId>jacoco-maven-plugin</artifactId>
			  <version>${jacoco.version}</version>
			  <configuration>
			    <!-- Note: This exclusion list should match <sonar.exclusions> property
				 above -->
			    <excludes>
			      <exclude>**/gen/**</exclude>
			      <exclude>**/generated-sources/**</exclude>
			      <exclude>**/yang-gen/**</exclude>
			      <exclude>**/pax/**</exclude>
			    </excludes>
			  </configuration>
			  <executions>
			    <!-- Prepares the property pointing to the JaCoCo runtime agent which
				 is passed as VM argument when Maven the Surefire plugin is executed. -->
			    <execution>
			      <id>pre-unit-test</id>
			      <goals>
				<goal>prepare-agent</goal>
			      </goals>
			      <configuration>
				<!-- Sets the path to the file which contains the execution data
				     . -->
				<destFile>${project.build.directory}/code-coverage/jacoco-ut.exec</destFile>
				<!-- Sets the name of the property containing the settings for JaCoCo
				     runtime agent. -->
				<propertyName>surefireArgLine</propertyName>
			      </configuration>
			    </execution>
			    <!-- Ensures that the code coverage report for unit tests is created
				 after unit tests have been run. -->
			    <execution>
			      <id>post-unit-test</id>
			      <phase>test</phase>
			      <goals>
				<goal>report</goal>
			      </goals>
			      <configuration>
				<!-- Sets the path to the file which contains the execution data
				     . -->
				<dataFile>${project.build.directory}/code-coverage/jacoco-ut.exec</dataFile>
				<!-- Sets the output directory for the code coverage report. -->
				<outputDirectory>${project.reporting.outputDirectory}/jacoco-ut</outputDirectory>
			      </configuration>
			    </execution>
			    <execution>
			      <id>pre-integration-test</id>
			      <phase>pre-integration-test</phase>
			      <goals>
				<goal>prepare-agent</goal>
			      </goals>
			      <configuration>
				<!-- Sets the path to the file which contains the execution data
				     . -->
				<destFile>${project.build.directory}/code-coverage/jacoco-it.exec</destFile>
				<!-- Sets the name of the property containing the settings for JaCoCo
				     runtime agent. -->
				<propertyName>failsafeArgLine</propertyName>
			      </configuration>
			    </execution>
			    <!-- Ensures that the code coverage report for integration tests after
				 integration tests have been run. -->
			    <execution>
			      <id>post-integration-test</id>
			      <phase>post-integration-test</phase>
			      <goals>
				<goal>report</goal>
			      </goals>
			      <configuration>
				<!-- Sets the path to the file which contains the execution data
				     . -->
				<dataFile>${project.build.directory}/code-coverage/jacoco-it.exec</dataFile>
				<!-- Sets the output directory for the code coverage report. -->
				<outputDirectory>${project.reporting.outputDirectory}/jacoco-it</outputDirectory>
			      </configuration>
			    </execution>
			    <execution>
			      <id>default-check</id>
			      <goals>
				<goal>check</goal>
			      </goals>
			      <configuration>
				<dataFile>${project.build.directory}/code-coverage/jacoco-ut.exec</dataFile>
				<rules>
				  <rule implementation="org.jacoco.maven.RuleConfiguration">
				    <element>BUNDLE</element>
				    <limits>
				      <limit implementation="org.jacoco.report.check.Limit">
					<counter>LINE</counter>
					<value>COVEREDRATIO</value>
					<minimum>${jacoco.line.coverage.limit}</minimum>
				      </limit>
				    </limits>
				  </rule>
				</rules>
			      </configuration>
			    </execution>
			  </executions>
			</plugin>
			<plugin>
			  <groupId>org.apache.maven.plugins</groupId>
			  <artifactId>maven-surefire-plugin</artifactId>
			  <version>3.0.0-M4</version>
			  <configuration>
			    <!-- Sets the VM argument line used when unit tests are run. -->
			    <argLine>${surefireArgLine}</argLine>
			    <!-- Excludes integration tests when unit tests are run. -->
			    <excludes>
			      <exclude>**/IT*.java</exclude>
			    </excludes>
			  </configuration>
			</plugin>
			<plugin>
			  <groupId>org.apache.maven.plugins</groupId>
			  <artifactId>maven-failsafe-plugin</artifactId>
			  <version>3.0.0-M4</version>
			  <executions>
			    <!-- Ensures that both integration-test and verify goals of the Failsafe
				 Maven plugin are executed. -->
			    <execution>
			      <id>integration-tests</id>
			      <goals>
				<goal>integration-test</goal>
				<goal>verify</goal>
			      </goals>
			      <configuration>
				<!-- Sets the VM argument line used when integration tests are run. -->
				<argLine>${failsafeArgLine}</argLine>
			      </configuration>
			    </execution>
			  </executions>
			</plugin>
			<plugin>
			  <groupId>org.sonarsource.scanner.maven</groupId>
			  <artifactId>sonar-maven-plugin</artifactId>
			  <version>${sonar.scanner.version}</version>
			</plugin>
			<!-- end removable sonar config -->



		</plugins>
	</build>
</project>
