<?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.0.1-SNAPSHOT</version>
  <description>ARIA REST API wheel build</description>
  <parent>
    <groupId>org.onap.oparent</groupId>
    <artifactId>oparent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>

  <pluginRepositories>
    <pluginRepository>
      <id>jitpack.io</id>
      <url>https://jitpack.io</url>
    </pluginRepository> 
  </pluginRepositories>

  <properties>
    <python_version>2.7</python_version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <wheel.name>${project.artifactId}-${python_version}-py2-none-any.whl</wheel.name>
    <python.sourceDirectory>${project.basedir}/src/main/python/aria-rest</python.sourceDirectory>
  </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>
	  <execution>
	    <id>attach-artifacts</id>
	    <phase>package</phase>
	    <goals>
	      <goal>attach-artifact</goal>
	    </goals>
	    <configuration>
	      <artifacts>
		<artifact>
		  <file>${project.build.directory}/maven-python/dist/${wheel.name}</file>
		  <type>whl</type>
		</artifact>
	      </artifacts>
	    </configuration>
	  </execution>
	</executions>
      </plugin>
      <plugin>
	<groupId>com.github.UltimateDogg</groupId>
	<artifactId>maven-python-distribute-plugin</artifactId>
	<version>0.2.0</version>
	<configuration>
	  <packageVersion>${python_version}</packageVersion>
	  <sourceDirectory>${python.sourceDirectory}</sourceDirectory>
	  <distributionType>wheel</distributionType>
	</configuration>
	<executions>
	  <execution>
	    <id>package</id>
	    <phase>prepare-package</phase>
	    <goals>
	      <goal>package</goal>
	    </goals>
	  </execution>
	  <execution>
	    <id>process</id>
	    <phase>process-sources</phase>
	    <goals>
	      <goal>process-sources</goal>
	    </goals>
	  </execution>
	</executions>
      </plugin>
    </plugins>
  </build>
</project>

