<?xml version="1.0"?>
<!--
    /*
    * ============LICENSE_START===================================================
    * Copyright (c) 2017 Cloudify.co.  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>
  <packaging>pom</packaging>
  <groupId>org.onap.aria</groupId>
  <artifactId>ariarest</artifactId>
  <name>ariarest</name>
  <version>0.1.0-SNAPSHOT</version>
  <description>ARIA REST API wheel build</description>
  <parent>
    <groupId>org.onap.oparent</groupId>
    <artifactId>oparent</artifactId>
    <version>1.1.0-SNAPSHOT</version>
  </parent>

  <properties>
    <python_version>2</python_version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <wheel.name>${project.artifactId}-${project.version}-py${python_version}-none-any.whl</wheel.name>
    <python.sourceDirectory>${project.basedir}/src/main/python/aria-rest</python.sourceDirectory>
    <onap.nexus.pypiserver.baseurl>http://192.168.33.1:8081/repository/pypi-internal/</onap.nexus.pypiserver.baseurl>
    <onap.nexus.pypiserver.serverid>ecomp-snapshots</onap.nexus.pypiserver.serverid>
  </properties>
  <build>
    <plugins>
      <plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>build-helper-maven-plugin</artifactId>
	<version>3.0.0</version>
	<executions>
	  <execution>
	    <id>write-python-version</id>
	    <goals>
	      <goal>regex-property</goal>
	    </goals>
	    <phase>initialize</phase>
	    <configuration>
	      <name>python_version</name>
	      <regex>-SNAPSHOT</regex>
	      <value>${project.version}</value>
	      <replacement>\.dev0</replacement>
	      <failIfNoMatch>false</failIfNoMatch>
	    </configuration>
	  </execution>
	</executions>
      </plugin>
      <plugin>
	<groupId>org.codehaus.mojo</groupId>
	<artifactId>exec-maven-plugin</artifactId>
	<version>1.6.0</version>
	<executions>
	  <execution>
            <id>package</id>
	    <phase>package</phase>
	    <goals><goal>exec</goal></goals>
	    <configuration>
              <executable>python</executable>
              <arguments>
		<argument>${project.basedir}/build.py</argument>
	      </arguments>
	      <environmentVariables>
		<MVN_PHASE>package</MVN_PHASE>
		<WHEEL_NAME>${wheel.name}</WHEEL_NAME>
		<INPUT_DIR>${project.basedir}/src/main/python/aria-rest</INPUT_DIR>
		<OUTPUT_DIR>${project.build.directory}</OUTPUT_DIR>
              </environmentVariables>
	    </configuration>
	  </execution>
          <execution>
            <id>deploy</id>
	    <phase>deploy</phase>
	    <goals><goal>exec</goal></goals>
	    <configuration>
              <executable>python</executable>
	      <arguments>
	        <argument>${project.basedir}/build.py</argument>
	      </arguments>
	      <environmentVariables>
		<MVN_PHASE>deploy</MVN_PHASE>
                <PROJECT_VERSION>${project.version}</PROJECT_VERSION>
	        <DOCKERREGISTRY_SNAPSHOT>${onap.nexus.dockerregistry.snapshot}</DOCKERREGISTRY_SNAPSHOT>
	        <DOCKERREGISTRY_RELEASE>${onap.nexus.dockerregistry.release}</DOCKERREGISTRY_RELEASE>
                <PYPI_SERVER_BASEURL>${onap.nexus.pypiserver.baseurl}</PYPI_SERVER_BASEURL>
	        <PYPI_SERVERID>${onap.nexus.pypiserver.serverid}</PYPI_SERVERID>
	        <WHEEL_PATH>${project.build.directory}/${wheel.name}</WHEEL_PATH>
	      </environmentVariables>
	    </configuration>
          </execution>   
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

