<?xml version="1.0" encoding="UTF-8"?>
<!--* ============LICENSE_START====================================================
    * ===========================================================================
    * org.onap.aaf
    * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved.
    * ===========================================================================
    * 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.aaf.cadi.sidecar</groupId>
		<artifactId>sidecar</artifactId>
		<version>2.1.16-SNAPSHOT</version>
	</parent>

	<properties>
                <fproxy.build.dir>${project.build.directory}/${project.artifactId}-build/</fproxy.build.dir>
        </properties>

	<artifactId>fproxy</artifactId>
	<packaging>jar</packaging>

	<name>Sidecar fproxy</name>
	<description>ONAP AAF Forward Proxy Microservice For Pluggable Security</description>

	<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>

	<dependencies>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
		</dependency>

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

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</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>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-json</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

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

		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
		</dependency>
	</dependencies>

	<build>
		<finalName>fproxy</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<version>${spring.boot.version}</version>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal>
						</goals>
						<configuration>
							<classifier>exec</classifier>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>com.mycila</groupId>
				<artifactId>license-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<reuseForks>false</reuseForks>
					<forkCount>1</forkCount>
					<argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
				</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>
			<plugin>
                               	<groupId>io.fabric8</groupId>
                        	<artifactId>docker-maven-plugin</artifactId>
                        	<version>0.28.0</version>
                        	<configuration>
                            		<verbose>true</verbose>
                            		<apiVersion>${docker.apiVersion}</apiVersion>
                            		<pullRegistry>${docker.pull.registry}</pullRegistry>
                            		<pushRegistry>${docker.push.registry}</pushRegistry>
                           		<serverId>docker-hub</serverId>
                            		<dockerDirectory>${docker.location}</dockerDirectory>
                            		<imageTags>
                                		<imageTag>latest</imageTag>
                            		</imageTags>
                            		<forceTags>true</forceTags>
					<images>
                                		<image>
                                    			<name>${docker.push.registry}/onap/${project.artifactId}</name>
                                    			<build>
                                        			<cleanup>try</cleanup>
                                       				<dockerFileDir>${project.basedir}/src/main/docker</dockerFileDir>
                                        			<tags>
                                            				<tag>latest</tag>
                                        			</tags>
                                       				<assembly>
                                            				<inline>
                                                				<fileSets>
                                                    					<fileSet>
                                                        					<directory>${fproxy.build.dir}</directory>
                                                        					<outputDirectory>/${project.artifactId}</outputDirectory>
                                                    					</fileSet>
                                                				</fileSets>
                                            				</inline>
                                        			</assembly>
                                    			</build>
                                		</image>
                            		</images>
                        	</configuration>
                         	<executions>
                             		<execution>
                                 		<id>generate-images</id>
						<phase>install</phase>
						<!--unbind default goal for this phase-->
                             		</execution>
                             		<execution>
                                 		<id>push-images</id>
                                 		<phase>deploy</phase>
                                 		<goals>
                                     			<goal>push</goal>
                                		</goals>
                             		</execution>
                         	</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-deploy-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>
