<?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.directory.server</groupId>
    <artifactId>apacheds-interceptors</artifactId>
    <version>2.0.0.AM25</version>
  </parent>
  
  <artifactId>apacheds-interceptors-authn</artifactId>
  <name>ApacheDS Authentication Interceptor</name>
  <packaging>bundle</packaging>

  <description>
    Authentication interceptor
  </description>

  <dependencies>
    <dependency>
      <groupId>org.apache.directory.junit</groupId>
      <artifactId>junit-addons</artifactId>
      <scope>test</scope>
    </dependency>
    
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>apacheds-i18n</artifactId>
    </dependency>
    
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>apacheds-core-api</artifactId>
    </dependency>
    
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>apacheds-core-shared</artifactId>
    </dependency>
    
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
    </dependency>
    
    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.apache.directory.api</groupId>
      <artifactId>api-ldap-client-api</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.directory.api</groupId>
      <artifactId>api-ldap-extras-codec</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.directory.api</groupId>
      <artifactId>api-ldap-extras-codec-api</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.apache.directory.api</groupId>
      <artifactId>api-ldap-model</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.apache.directory.api</groupId>
      <artifactId>api-ldap-schema-data</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.apache.directory.api</groupId>
      <artifactId>api-util</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.apache.mina</groupId>
      <artifactId>mina-core</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration> 
          <systemPropertyVariables>
            <workingDirectory>${basedir}/target/server-work</workingDirectory>
          </systemPropertyVariables>
        </configuration>
      </plugin>
      
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-sources</id>
            <phase>verify</phase>
            <goals>
              <goal>jar-no-fork</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <manifestFile>META-INF/MANIFEST.MF</manifestFile>
            <addMavenDescriptor>false</addMavenDescriptor>
          </archive>
        </configuration>
      </plugin>
      
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <inherited>true</inherited>
        <extensions>true</extensions>
        <configuration>
          <manifestLocation>META-INF</manifestLocation>
          <instructions>
            <Bundle-SymbolicName>${project.groupId}.interceptors.authn</Bundle-SymbolicName>
            <Export-Package>
                org.apache.directory.server.core.authn;version=${project.version},
                org.apache.directory.server.core.authn.ppolicy;version=${project.version}
            </Export-Package>
            <Import-Package>
                org.apache.commons.collections.map;version=${commons.collections.version},
                org.apache.directory.api.ldap.extras.controls.ppolicy;version=${org.apache.directory.api.version},
                org.apache.directory.api.ldap.extras.controls.ppolicy_impl;version=${org.apache.directory.api.version},
                org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
                org.apache.directory.api.ldap.model.entry;version=${org.apache.directory.api.version},
                org.apache.directory.api.ldap.model.exception;version=${org.apache.directory.api.version},
                org.apache.directory.api.ldap.model.message;version=${org.apache.directory.api.version},
                org.apache.directory.api.ldap.model.name;version=${org.apache.directory.api.version},
                org.apache.directory.api.ldap.model.password;version=${org.apache.directory.api.version},
                org.apache.directory.api.ldap.model.schema;version=${org.apache.directory.api.version},
                org.apache.directory.api.util;version=${org.apache.directory.api.version},
                org.apache.directory.ldap.client.api;version=${org.apache.directory.api.version},
                org.apache.directory.server.constants;version=${project.version},
                org.apache.directory.server.core.api;version=${project.version},
                org.apache.directory.server.core.api.authn.ppolicy;version=${project.version},
                org.apache.directory.server.core.api.entry;version=${project.version},
                org.apache.directory.server.core.api.filtering;version=${project.version},
                org.apache.directory.server.core.api.interceptor;version=${project.version},
                org.apache.directory.server.core.api.interceptor.context;version=${project.version},
                org.apache.directory.server.core.api.partition;version=${project.version},
                org.apache.directory.server.core.authn.ppolicy;version=${project.version},
                org.apache.directory.server.core.shared;version=${project.version},
                org.apache.directory.server.i18n;version=${project.version},
                org.apache.mina.core.session;version=${mina.core.version},
                org.slf4j;version=${slf4j.api.bundleversion}
            </Import-Package>
          </instructions>
        </configuration>
      </plugin>
    </plugins>

    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
          <exclude>**/*.gif</exclude>
        </excludes>
      </resource>
    </resources>
  </build>
</project>

