<?xml version="1.0" encoding="UTF-8"?>

    <!--
        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.apache.chemistry.opencmis</groupId>
        <artifactId>chemistry-opencmis</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>


    <artifactId>chemistry-opencmis-test-browser-app</artifactId>
    <name>OpenCMIS Browser Application</name>
    <packaging>war</packaging>
    
    <properties>
        <parentBasedir>../../</parentBasedir>
    </properties>
    

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <archive>
                        <!--
                            OSGi Bundle Support
                        -->
                        <manifestEntries>
                            <Bundle-Name>org.apache.chemistry.opencmis.browser</Bundle-Name>
                            <Bundle-SymbolicName>org.apache.chemistry.opencmis.browser</Bundle-SymbolicName>
                            <Bundle-Version>0.0.1</Bundle-Version>
                            <Import-Package>javax.servlet,javax.servlet.http,javax.servlet.resources</Import-Package>
                            <Bundle-Classpath>.</Bundle-Classpath>
                            <Web-ContextPath>browser</Web-ContextPath>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>


    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>chemistry-opencmis-test-browser</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.4</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>
