<?xml version="1.0"?>
<!--
  ============LICENSE_START==========================================
  org.onap.dmaap
  ===================================================================
  Copyright © 2018 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============================================
  ECOMP is a trademark and service mark of AT&T Intellectual Property.
-->
<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.onap.dmaap.buscontroller</groupId>
  <artifactId>dbc-client</artifactId>
  <version>${artifact.version}</version>
  <name>dbc-client</name>
  <parent>
    <groupId>org.onap.oparent</groupId>
    <artifactId>oparent</artifactId>
    <version>2.0.0</version>
    <relativePath/>
  </parent>
  <build>
    <finalName>dbc-client</finalName>

    <plugins>



      <!-- for Distribution management -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-site-plugin</artifactId>
        <dependencies>
          <dependency>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-webdav-jackrabbit</artifactId>
            <version>2.10</version>
          </dependency>
        </dependencies>
      </plugin>

    </plugins>
    <pluginManagement>
      <plugins>
        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <versionRange>[2.10,)</versionRange>
                    <phase>install</phase>
                    <goals>
                      <goal>copy-dependencies</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore/>
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
  <profiles>
      <profile>
        <id>docker</id>
        <properties>
            <skipDockerBuild>false</skipDockerBuild>
            <skipDockerTag>false</skipDockerTag>
            <skipTests>true</skipTests>
        </properties>
        <build>
            <!-- Copy files to docker-stage to be included in image -->        
            <resources>
                <resource>
                    <targetPath>${basedir}/target/docker-stage</targetPath>
                    <directory>${basedir}/src/main/resources</directory>
                        <includes>
                            <include>Dockerfile</include>
                        </includes>
                </resource>
                 <resource>
                    <targetPath>${basedir}/target/docker-stage/opt/app/dbc-client/etc</targetPath>
                    <directory>${multiproject.basedir}/certs</directory>
                        <includes>
                          <include>org.onap.dmaap-bc.cred.props</include>
                          <include>org.onap.dmaap-bc.crontab.sh</include>
                          <include>org.onap.dmaap-bc.jks</include>
                          <include>org.onap.dmaap-bc.keyfile</include>
                          <include>org.onap.dmaap-bc.location.props</include>
                          <include>org.onap.dmaap-bc.p12</include>
                          <include>org.onap.dmaap-bc.props</include>
                          <include>org.onap.dmaap-bc.showpass</include>
                          <include>org.onap.dmaap-bc.trust.jks</include>
			  <include>ca.pem</include>
                          <include>client.pem</include>
			  <include>key.pem</include>
                        </includes>
                </resource>

                 <resource>
                    <targetPath>${basedir}/target/docker-stage/opt/app/dbc-client/bin</targetPath>
                    <directory>${basedir}/misc</directory>
                        <includes>
                          <include>dbc-client</include>
                        </includes>
                </resource>
                 <resource>
                    <targetPath>${basedir}/target/docker-stage/opt/app/dbc-client/etc</targetPath>
                    <directory>${multiproject.basedir}</directory>
                        <includes>
                            <include>version.properties</include>
                        </includes>
                </resource>
                 <resource>
                    <targetPath>${basedir}/target/docker-stage/opt/app/dbc-client/misc</targetPath>
                    <directory>${multiproject.basedir}/misc</directory>
                        <includes>
                            <include>cert-client-init.sh</include>
                            <include>aaf-ca.crt</include>
                        </includes>
                </resource>
              </resources>
            <plugins>

                <!-- Copy jar to docker-stage to be included in image -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>2.7</version>
                    <executions>
                       <execution>
                            <id>copy-jar</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${basedir}/target/docker-stage/opt/app/dmaapbc/lib</outputDirectory>
                                <resources>
                                    <resource>
                                        <directory>${multiproject.basedir}/dbc-client/target</directory>
                                        <includes>
                                            <include>dbc-client.jar</include>
                                        </includes>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

                <!-- Setup image tags per https://wiki.onap.org/display/DW/Independent+Versioning+and+Release+Process#IndependentVersioningandReleaseProcess-StandardizedDockerTagging -->
                <plugin>
                  <groupId>org.codehaus.groovy.maven</groupId>
                  <artifactId>gmaven-plugin</artifactId>
                  <executions>
                      <execution>
                          <phase>validate</phase>
                          <goals>
                              <goal>execute</goal>
                          </goals>
                          <configuration>
                              <properties>
                                  <ver>${project.version}</ver>
                                  <timestamp>${maven.build.timestamp}</timestamp>
                              </properties>
                              <source>
                                  println 'ver: ' + project.properties['ver'];
                                  if ( project.properties['ver'].endsWith("-SNAPSHOT") ) {
                                      project.properties['dockertag1']=project.properties['ver'] + "-latest";
                                      project.properties['dockertag2']=project.properties['ver'] + "-" + project.properties['timestamp'];
                                  } else {
                                      project.properties['dockertag1']=project.properties['ver'] + "-STAGING-latest";
                                      project.properties['dockertag2']=project.properties['ver'] + "-STAGING-" + project.properties['timestamp'];
                                  }
                                  println 'docker tag 1: ' + project.properties['dockertag1'];
                                  println 'docker tag 2: ' + project.properties['dockertag2'];
                              </source>
                          </configuration>
                      </execution>
                  </executions>
                </plugin>

                <plugin>
                    <groupId>io.fabric8</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>0.28.0</version>  
                    <configuration>
                        <verbose>${docker.verbose}</verbose>
                        <apiVersion>${docker.apiVersion}</apiVersion>
                        <pullRegistry>${docker.pull.registry}</pullRegistry>
                        <pushRegistry>${docker.push.registry}</pushRegistry>
                        <images>
                            <image>                            
                                <name>${docker.image}</name>
                                <build>
                                    <cleanup>try</cleanup>
                                    <dockerFileDir>${basedir}/target/docker-stage</dockerFileDir>
                                    <dockerFile>Dockerfile</dockerFile>
                                    <tags>
                                        <tag>${dockertag1}</tag>
                                        <tag>${dockertag2}</tag>
                                    </tags>
                                </build>
                            </image>
                        </images>
                    </configuration>
                     <executions>
                         <execution>
                             <id>generate-images</id>
                             <phase>install</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>
  <dependencyManagement>
  </dependencyManagement>

  <properties>
    <multiproject.basedir>${basedir}/..</multiproject.basedir>
    <docker.maven.plugin.version>1.0.0</docker.maven.plugin.version>
    <jersey.version>2.16</jersey.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <jettyVersion>9.4.12.RC2</jettyVersion>
    <eelf.version>1.0.0</eelf.version>
    <swagger.version>1.5.19</swagger.version>
    <artifact.version>2.0.2-SNAPSHOT</artifact.version>
    <!--  SONAR  -->
    <jacoco.version>0.7.7.201606060606</jacoco.version>
    <sonar-jacoco-listeners.version>3.2</sonar-jacoco-listeners.version>
    <sonar.core.codeCoveragePlugin>jacoco</sonar.core.codeCoveragePlugin>
    <!-- Default Sonar configuration -->
    <sonar.jacoco.reportPath>target/code-coverage/jacoco-ut.exec</sonar.jacoco.reportPath>
    <sonar.jacoco.itReportPath>target/code-coverage/jacoco-it.exec</sonar.jacoco.itReportPath>
    <!-- Note: This list should match jacoco-maven-plugin's exclusion list below -->
    <sonar.exclusions>**/gen/**,**/generated-sources/**,**/yang-gen**,**/pax/**</sonar.exclusions>

    <!-- docker image -->
    <docker.image>onap/dmaap/dbc-client</docker.image>

    <nexusproxy>https://nexus.onap.org</nexusproxy>
    <docker.push.registry>nexus3.onap.org:10003</docker.push.registry>

    <!-- for Distribution Management -->
    <sitePath>/content/sites/site/org/onap/dmaap/dbc-client/${artifact.version}</sitePath>

    <timestamp>${maven.build.timestamp}</timestamp>
    <maven.build.timestamp.format>yyyyMMdd'T'HHmmss'Z'</maven.build.timestamp.format>

  </properties>
  <description>Packaging Platform (DMaaP) HTTP Client for Bus Controller Provisioning.</description>
</project>
