<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 2014 Open Networking Laboratory
  ~
  ~ 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.
  -->
<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.onosproject</groupId>
        <artifactId>onos-web</artifactId>
        <version>1.4.0-rc2</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>onos-rest</artifactId>
    <packaging>bundle</packaging>

    <description>ONOS Core REST API</description>

    <dependencies>
        <dependency>
            <groupId>org.onosproject</groupId>
            <artifactId>onos-core-common</artifactId>
        </dependency>
        <dependency>
            <groupId>org.onosproject</groupId>
            <artifactId>onos-core-common</artifactId>
            <classifier>tests</classifier>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.onosproject</groupId>
            <artifactId>onos-api</artifactId>
            <scope>test</scope>
            <classifier>tests</classifier>
        </dependency>
    </dependencies>

    <properties>
        <web.context>/onos/v1</web.context>
        <api.version>1.0.0</api.version>
        <api.title>${project.description}</api.title>
        <api.description>
            Core APIs for external interactions with various ONOS subsystems.
        </api.description>
        <api.package>org.onosproject.rest.impl</api.package>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.onosproject</groupId>
                <artifactId>onos-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                    <instructions>
                        <_wab>src/main/webapp/</_wab>
                        <Include-Resource>
                            WEB-INF/classes/apidoc/swagger.json=target/swagger.json,
                            {maven-resources}
                        </Include-Resource>
                        <Bundle-SymbolicName>
                            ${project.groupId}.${project.artifactId}
                        </Bundle-SymbolicName>
                        <Import-Package>
                            org.slf4j,
                            org.osgi.framework,
                            javax.ws.rs,javax.ws.rs.core,javax.ws.rs.ext,
                            com.sun.jersey.api,
                            com.sun.jersey.spi.container.servlet,
                            com.sun.jersey.server.impl.container.servlet,
                            com.fasterxml.jackson.databind,
                            com.fasterxml.jackson.databind.node,
                            com.google.common.base.*,
                            com.google.common.collect.*,
                            com.google.common.io.*,
                            org.onlab.util.*,
                            org.onlab.osgi.*,
                            org.onlab.packet.*,
                            org.onlab.rest.*,
                            org.onosproject.*,
                            org.onlab.metrics.*,
                            com.codahale.metrics.*
                        </Import-Package>
                        <Web-ContextPath>${web.context}</Web-ContextPath>
                    </instructions>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
