<!--
  ============LICENSE_START=======================================================
  ONAP Policy Engine - Drools PDP
  ================================================================================
  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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.onap.oparent</groupId>
		<artifactId>oparent</artifactId>
		<version>0.1.1</version>
		<relativePath/>
	</parent>

	<groupId>org.onap.policy.drools-pdp</groupId>
	<artifactId>drools-pdp</artifactId>
	<version>1.2.0-SNAPSHOT</version>
	<packaging>pom</packaging>
	<name>policy-drools-pdp</name>

	<description>The ONAP Policy Engine drools-based PDP Project</description>

	<properties>
		<project.source.version>1.8</project.source.version>
		<project.target.version>1.8</project.target.version>
		<dmaap.version>1.0.0</dmaap.version>
		<cambria.version>0.0.1</cambria.version>
		<jersey.version>2.25.1</jersey.version>
		<jersey.swagger.version>1.5.16</jersey.swagger.version>
		<jackson.version>2.9.1</jackson.version>
		<http.client.version>4.5.2</http.client.version>
		<http.core.version>4.4.4</http.core.version>
		<logback.version>1.2.3</logback.version>
		<junit.version>4.12</junit.version>
		<eclipselink.version>2.7.0</eclipselink.version>
		<mariadb.jdbc.version>2.1.0</mariadb.jdbc.version>
		<hibernate.core.version>5.2.10.Final</hibernate.core.version>
		<hibernate.commons.annotations.version>5.0.1.Final</hibernate.commons.annotations.version>
		<commons.io.version>2.5</commons.io.version>
		<guava.version>23.0</guava.version>
		<xml.apis.version>1.4.01</xml.apis.version>

		<nexusproxy>https://nexus.onap.org</nexusproxy>
		<sitePath>/content/sites/site/${project.groupId}/${project.artifactId}/${project.version}</sitePath>
		<releases.path>content/repositories/releases/</releases.path>
		<snapshots.path>content/repositories/snapshots/</snapshots.path>
		<staging.path>content/repositories/staging/</staging.path>
	</properties>

	<modules>
		<module>policy-utils</module>
		<module>policy-core</module>
		<module>policy-endpoints</module>
		<module>policy-management</module>
		<module>feature-healthcheck</module>
		<module>feature-eelf</module>
		<module>feature-session-persistence</module>
		<module>feature-test-transaction</module>
		<module>api-state-management</module>
		<module>feature-state-management</module>
		<module>api-active-standby-management</module>
		<module>feature-active-standby-management</module>
		<module>packages</module>
	</modules>

	<distributionManagement>
		<repository>
			<id>ecomp-releases</id>
			<name>ONAP Release Repository</name>
			<url>${nexusproxy}/${releases.path}</url>
		</repository>
		<snapshotRepository>
			<id>ecomp-snapshots</id>
			<name>ONAP Snapshot Repository</name>
			<url>${nexusproxy}/${snapshots.path}</url>
		</snapshotRepository>
		<site>
			<id>ecomp-site</id>
			<url>dav:${nexusproxy}${sitePath}</url>
		</site>
	</distributionManagement>

        <repositories>
                <!-- LF repositories -->
                <repository>
                        <id>ecomp-releases</id>
                        <name>Release Repository</name>
                        <url>${nexusproxy}/content/repositories/releases/</url>
                </repository>
                <repository>
                        <id>ecomp-staging</id>
                        <name>Staging Repository</name>
                        <url>${nexusproxy}/content/repositories/staging/</url>
                </repository>
                <repository>
                        <id>ecomp-snapshots</id>
                        <name>Snapshots Repository</name>
                        <url>${nexusproxy}/content/repositories/snapshots/</url>
                </repository>
                <repository>
                        <id>ecomp-public</id>
                        <name>Public Repository</name>
                        <url>${nexusproxy}/content/repositories/public/</url>
                </repository>
                <!-- LF repositories END-->
        </repositories>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>com.google.guava</groupId>
				<artifactId>guava</artifactId>
				<version>${guava.version}</version>
			</dependency>
			<dependency>
				<groupId>javax.ws.rs</groupId>
				<artifactId>javax.ws.rs-api</artifactId>
				<version>2.0.1</version>
			</dependency>
			<dependency>
				<groupId>org.glassfish.hk2.external</groupId>
				<artifactId>javax.inject</artifactId>
				<version>2.4.0-b31</version>
			</dependency>
			<dependency>
				<groupId>com.fasterxml.jackson.jaxrs</groupId>
				<artifactId>jackson-jaxrs-base</artifactId>
				<version>${jackson.version}</version>
			</dependency>
			<dependency>
				<groupId>com.fasterxml.jackson.jaxrs</groupId>
				<artifactId>jackson-jaxrs-json-provider</artifactId>
				<version>${jackson.version}</version>
			</dependency>
			<dependency>
				<groupId>com.fasterxml.jackson.dataformat</groupId>
				<artifactId>jackson-dataformat-xml</artifactId>
				<version>${jackson.version}</version>
			</dependency>
			<dependency>
				<groupId>com.fasterxml.jackson.dataformat</groupId>
				<artifactId>jackson-dataformat-yaml</artifactId>
				<version>${jackson.version}</version>
			</dependency>
			<dependency>
				<groupId>com.fasterxml.jackson.datatype</groupId>
				<artifactId>jackson-datatype-joda</artifactId>
				<version>${jackson.version}</version>
			</dependency>
			<dependency>
				<groupId>org.glassfish.jersey.containers</groupId>
				<artifactId>jersey-common</artifactId>
				<version>${jersey.version}</version>
			</dependency>
			<dependency>
				<groupId>org.glassfish.jersey.containers</groupId>
				<artifactId>jersey-container-servlet-core</artifactId>
				<version>${jersey.version}</version>
			</dependency>
			<dependency>
				<groupId>io.swagger</groupId>
				<artifactId>swagger-jersey2-jaxrs</artifactId>
				<version>${jersey.swagger.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.httpcomponents</groupId>
				<artifactId>httpclient</artifactId>
				<version>${http.client.version}</version>
			</dependency>
			<dependency>
				<groupId>org.apache.httpcomponents</groupId>
				<artifactId>httpcore</artifactId>
				<version>${http.core.version}</version>
			</dependency>
			<dependency>
				<groupId>ch.qos.logback</groupId>
				<artifactId>logback-classic</artifactId>
				<version>${logback.version}</version>
			</dependency>
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>${junit.version}</version>
			</dependency>
			<dependency>
				<groupId>org.eclipse.persistence</groupId>
				<artifactId>eclipselink</artifactId>
				<version>${eclipselink.version}</version>
			</dependency>
			<dependency>
				<groupId>org.eclipse.persistence</groupId>
				<artifactId>org.eclipse.persistence.jpa</artifactId>
				<version>${eclipselink.version}</version>
			</dependency>
			<dependency>
			    <groupId>org.mariadb.jdbc</groupId>
			    <artifactId>mariadb-java-client</artifactId>
			    <version>${mariadb.jdbc.version}</version>
			</dependency>
			<dependency>
			    <groupId>org.hibernate</groupId>
			    <artifactId>hibernate-core</artifactId>
			    <version>${hibernate.core.version}</version>
			</dependency>
			<dependency>
			    <groupId>org.hibernate.common</groupId>
			    <artifactId>hibernate-commons-annotations</artifactId>
			    <version>${hibernate.commons.annotations.version}</version>
			</dependency>
			<dependency>
			    <groupId>commons-io</groupId>
			    <artifactId>commons-io</artifactId>
			    <version>${commons.io.version}</version>
			</dependency>
			<dependency>
			    <groupId>xml-apis</groupId>
			    <artifactId>xml-apis</artifactId>
			    <version>${xml.apis.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>
	
	<build>
		<plugins>
			<plugin>
				<groupId>org.sonatype.plugins</groupId>
				<artifactId>nexus-staging-maven-plugin</artifactId>
				<extensions>true</extensions>
				<configuration>
					<nexusUrl>${nexusproxy}</nexusUrl>
					<stagingProfileId>176c31dfe190a</stagingProfileId>
					<serverId>ecomp-staging</serverId>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-deploy-plugin</artifactId>
				<configuration>
					<skip />
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.0</version>
				<configuration>
					<encoding>${project.encoding}</encoding>
					<source>${project.source.version}</source>
					<target>${project.target.version}</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<encoding>${project.encoding}</encoding>
				</configuration>
			</plugin>

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

			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
			</plugin>

			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>sonar-maven-plugin</artifactId>
			</plugin>	
			
		</plugins>
		<pluginManagement>
			<plugins>
               <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-checkstyle-plugin</artifactId>
                                        <versionRange>2.17,)</versionRange>
                                        <goals>
                                            <goal>check</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                    <action>
                                        <ignore />
                                    </action>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
			</plugins>
		</pluginManagement>
	</build>
	<reporting>
	  <plugins>
	    <plugin>
	      <groupId>org.apache.maven.plugins</groupId>
	      <artifactId>maven-javadoc-plugin</artifactId>
	      <version>2.10.4</version>
	      <configuration>
		<failOnError>false</failOnError>
		<doclet>org.umlgraph.doclet.UmlGraphDoc</doclet>
		<docletArtifact>
		  <groupId>org.umlgraph</groupId>
		  <artifactId>umlgraph</artifactId>
		  <version>5.6</version>
		</docletArtifact>
		<additionalparam>-views</additionalparam>
		<useStandardDocletOptions>true</useStandardDocletOptions>
	      </configuration>
	    </plugin>
	  </plugins>
	</reporting>

</project>
