<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
	license agreements. See the NOTICE file distributed with this work for additional 
	information regarding copyright ownership. The ASF licenses this file to 
	you 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.apache.felix</groupId>
		<artifactId>felix-parent</artifactId>
		<version>2.1</version>
		<relativePath>../../../pom/pom.xml</relativePath>
	</parent>

	<artifactId>org.apache.felix.webconsole.plugins.upnp</artifactId>
	<packaging>bundle</packaging>
	<version>1.0.3-SNAPSHOT</version>

	<name>Apache Felix Web Console UPnP Plugin</name>
	<description>
        This is a plugin for the Apache Felix OSGi web console for displaying
        UPnP devices.
    </description>

	<scm>
		<connection>scm:svn:http://svn.apache.org/repos/asf/felix/trunk/webconsole-plugins/upnp</connection>
		<developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/trunk/webconsole-plugins/upnp</developerConnection>
		<url>http://svn.apache.org/viewvc/felix/trunk/webconsole-plugins/upnp</url>
	</scm>

	<build>

		<!-- add UTF-8-to-ISO translated resources -->
		<resources>
			<resource>
				<directory>${basedir}/src/main/resources</directory>
			</resource>
			<resource>
				<directory>target/classes</directory>
				<includes>
					<include>OSGI-INF/**</include>
				</includes>
				<filtering>false</filtering>
			</resource>
		</resources>

		<plugins>
			<!-- translate UTF-8 encoded properties files to ISO-8859-1 -->
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>native2ascii-maven-plugin</artifactId>
				<version>1.0-beta-1</version>
				<executions>
					<execution>
						<goals>
							<goal>native2ascii</goal>
						</goals>
						<configuration>
							<encoding>UTF-8</encoding>
						</configuration>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.apache.felix</groupId>
				<artifactId>maven-bundle-plugin</artifactId>
				<version>2.3.4</version>
				<extensions>true</extensions>
				<configuration>
					<instructions>
						<Bundle-SymbolicName>
							${project.artifactId}
                        </Bundle-SymbolicName>
						<Private-Package>
							org.apache.felix.webconsole.plugins.upnp.*
                        </Private-Package>
						<Bundle-Activator>
							org.apache.felix.webconsole.plugins.upnp.internal.Activator
                        </Bundle-Activator>
					</instructions>
				</configuration>
			</plugin>
            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <configuration>
                    <includes>
                        <include>src/**</include>
                    </includes>
                    <excludes>
                        <exclude>src/main/appended-resources/**</exclude>
                        <exclude>src/main/resources/res/jquery-treeview-1.4/**</exclude>
                        <exclude>src/main/resources/res/upnp.*</exclude>
                    </excludes>
                </configuration>
            </plugin>
		</plugins>


	</build>

	<dependencies>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.4</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.core</artifactId>
			<version>4.0.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.osgi</groupId>
			<artifactId>org.osgi.compendium</artifactId>
			<version>4.0.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.felix</groupId>
			<artifactId>org.apache.felix.webconsole</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.json</groupId>
			<artifactId>json</artifactId>
			<version>20070829</version>
			<scope>compile</scope>
			<optional>true</optional>
		</dependency>
	</dependencies>
</project>
