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

