<?xml version="1.0" encoding="UTF-8"?>
<!--
  ============LICENSE_START=======================================================
  ONAP : APPC
  ================================================================================
  Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  ================================================================================
  Copyright (C) 2017 Amdocs
  =============================================================================
  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>
  <parent>
    <artifactId>appc-oam</artifactId>
    <groupId>org.onap.appc</groupId>
    <version>1.4.0-SNAPSHOT</version>
  </parent>

   <name>APPC OAM - Features</name>
    <artifactId>appc-oam-features</artifactId>
    <packaging>jar</packaging>

  <dependencies>
    <dependency>
      <groupId>org.onap.appc</groupId>
      <artifactId>appc-oam-model</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>org.onap.appc</groupId>
      <artifactId>appc-oam-bundle</artifactId>
      <classifier>config</classifier>
      <type>xml</type>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>org.onap.appc</groupId>
      <artifactId>appc-oam-bundle</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>org.opendaylight.mdsal</groupId>
      <artifactId>features-mdsal</artifactId>
      <classifier>features</classifier>
      <type>xml</type>

      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>org.opendaylight.yangtools</groupId>
      <artifactId>features-yangtools</artifactId>
      <classifier>features</classifier>
      <type>xml</type>
      <scope>runtime</scope>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <filtering>true</filtering>
        <directory>src/main/resources</directory>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <executions>
          <execution>
            <id>filter</id>
            <goals>
              <goal>resources</goal>
            </goals>
            <phase>generate-resources</phase>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <!-- launches the feature test, which validates that your karaf feature
          can be installed inside of a karaf container. It doesn't validate that your
          functionality works correctly, just that you have all of the dependent bundles
          defined correctly. -->
        <!-- Skipping ODL feature test -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <systemPropertyVariables>
            <karaf.distro.groupId>org.opendaylight.controller</karaf.distro.groupId>
            <karaf.distro.artifactId>opendaylight-karaf-empty</karaf.distro.artifactId>
            <karaf.distro.version>${odl.karaf.empty.distro.version}</karaf.distro.version>
          </systemPropertyVariables>
          <dependenciesToScan>
            <dependency>org.opendaylight.yangtools:features-test</dependency>
          </dependenciesToScan>
          <classpathDependencyExcludes>
            <!-- The dependencies which bring in AbstractDataBrokerTest class
              brings in a second PaxExam container which results in the feature tests failing
              with a message similar to: "ERROR o.ops4j.pax.exam.spi.PaxExamRuntime - Ambiguous
              TestContainer ..." This excludes the container we don't want to use. -->
            <classpathDependencyExcludes>org.ops4j.pax.exam:pax-exam-container-native</classpathDependencyExcludes>
          </classpathDependencyExcludes>
          <skipTests>true</skipTests>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-artifacts</id>
            <goals>
              <goal>attach-artifact</goal>
            </goals>
            <phase>package</phase>
            <configuration>
              <artifacts>
                <artifact>
                  <file>${project.build.directory}/classes/${features.file}</file>
                  <type>xml</type>
                  <classifier>features</classifier>
                </artifact>
              </artifacts>
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>
  </build>
</project>
