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

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

    <artifactId>chemistry-opencmis-server-fileshare</artifactId>
    <name>OpenCMIS FileShare Server Implementation</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.server.fileshare</Bundle-Name>
                            <Bundle-SymbolicName>org.apache.chemistry.opencmis.server.fileshare</Bundle-SymbolicName>
                            <Bundle-Version>${project.version}</Bundle-Version>
                            <Import-Package>javax.servlet,javax.servlet.http,javax.servlet.resources</Import-Package>
                            <Bundle-Classpath>.</Bundle-Classpath>
                            <Web-ContextPath>fileshare</Web-ContextPath>
                        </manifestEntries>
                    </archive>
                    <overlays>
                        <overlay>
                        </overlay>
                        <overlay>
                            <groupId>${project.groupId}</groupId>
                            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
                            <excludes>
                                <exclude>index.html</exclude> <!-- default index page -->
                                <exclude>css/**</exclude> <!-- CSS for the default index page -->
                                <exclude>images/**</exclude> <!-- images for the default index page -->
                                <exclude>web/**</exclude> <!-- sample JavaScript application -->
                                <exclude>WEB-INF/classes/sample-repository.properties</exclude> <!-- sample server properties file -->
                                <exclude>WEB-INF/token/**</exclude>  <!-- sample Browser Binding token implementation -->
                                <exclude>WEB-INF/websphere/**</exclude> <!-- WebSphere specfic files -->
                            </excludes>
                            <includes>
                                <include>**</include>
                                <include>META-INF/THIRD-PARTY-LICENSES</include>
                            </includes>
                        </overlay>
                    </overlays>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>chemistry-opencmis-server-bindings-war</artifactId>
            <version>${project.version}</version>
            <type>war</type>
        </dependency>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>chemistry-opencmis-server-support</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>          
        </dependency>
        <!-- Uncomment for CORS support 
        <dependency>
            <groupId>com.thetransactioncompany</groupId>
            <artifactId>cors-filter</artifactId>
            <version>2.1.2</version>
        </dependency>
        -->
        <dependency><!-- for development only -->
            <groupId>${project.groupId}</groupId>
            <artifactId>chemistry-opencmis-server-bindings</artifactId>
            <version>${project.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency><!-- for development only -->
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.4</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>
