<?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
  
  https://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.api</groupId>
    <artifactId>api-ldap-codec-parent</artifactId>
    <version>2.1.0-SNAPSHOT</version>
  </parent>
  
  <artifactId>api-ldap-codec-core</artifactId>
  <name>Apache Directory LDAP API Codec Core</name>
  <packaging>bundle</packaging>
  <description>LDAP Codec used by clients and servers</description>

  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>api-util</artifactId>
    </dependency> 

    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>api-asn1-api</artifactId>
    </dependency> 

    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>api-asn1-ber</artifactId>
    </dependency> 

    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>api-i18n</artifactId>
    </dependency> 

    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>api-ldap-model</artifactId>
    </dependency> 

    <dependency>
      <groupId>org.apache.mina</groupId>
      <artifactId>mina-core</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-collections4</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.osgi</groupId>
      <artifactId>org.osgi.core</artifactId>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <phase>generate-sources</phase>
            <configuration />
            <goals>
              <goal>run</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-ActivationPolicy>lazy</Bundle-ActivationPolicy -->
            <Bundle-SymbolicName>${project.groupId}.ldap.codec.core</Bundle-SymbolicName>
            <Export-Package>
              org.apache.directory.api.ldap.codec;version=${project.version};-noimport:=true,
              org.apache.directory.api.ldap.codec.actions;version=${project.version};-noimport:=true,
              org.apache.directory.api.ldap.codec.actions.*;version=${project.version};-noimport:=true,
              org.apache.directory.api.ldap.codec.api;version=${project.version};-noimport:=true,
              org.apache.directory.api.ldap.codec.controls;version=${project.version};-noimport:=true,
              org.apache.directory.api.ldap.codec.controls.*;version=${project.version};-noimport:=true,
              org.apache.directory.api.ldap.codec.osgi;version=${project.version};-noimport:=true,
              org.apache.directory.api.ldap.codec.search;version=${project.version};-noimport:=true
            </Export-Package>
            <Import-Package>
              javax.naming,
              javax.naming.ldap,
              org.apache.directory.api.asn1;version=${project.version},
              org.apache.directory.api.asn1.actions;version=${project.version},
              org.apache.directory.api.asn1.ber;version=${project.version},
              org.apache.directory.api.asn1.ber.grammar;version=${project.version},
              org.apache.directory.api.asn1.ber.tlv;version=${project.version},
              org.apache.directory.api.asn1.util;version=${project.version},
              org.apache.directory.api.i18n;version=${project.version},
              org.apache.directory.api.ldap.model.constants;version=${project.version},
              org.apache.directory.api.ldap.model.entry;version=${project.version},
              org.apache.directory.api.ldap.model.exception;version=${project.version},
              org.apache.directory.api.ldap.model.filter;version=${project.version},
              org.apache.directory.api.ldap.model.message;version=${project.version},
              org.apache.directory.api.ldap.model.message.controls;version=${project.version},
              org.apache.directory.api.ldap.model.name;version=${project.version},
              org.apache.directory.api.ldap.model.schema;version=${project.version},
              org.apache.directory.api.ldap.model.url;version=${project.version},
              org.apache.directory.api.util;version=${project.version},
              org.apache.directory.api.util.exception;version=${project.version},
              org.apache.mina.core.buffer;version=${mina.core.version},
              org.apache.mina.core.filterchain;version=${mina.core.version},
              org.apache.mina.core.future;version=${mina.core.version},
              org.apache.mina.core.service;version=${mina.core.version},
              org.apache.mina.core.session;version=${mina.core.version},
              org.apache.mina.core.write;version=${mina.core.version},
              org.apache.mina.filter.codec;version=${mina.core.version},
              org.apache.mina.util;version=${mina.core.version},
              org.osgi.framework;version="[1.0.0,2.0.0)",
              org.slf4j;version=${slf4j.api.bundleversion}
            </Import-Package>
            <Bundle-Activator>
              org.apache.directory.api.ldap.codec.osgi.DefaultActivator
            </Bundle-Activator>
            <Automatic-Module-Name>apache.directory.ldap.api.extras.codec.core</Automatic-Module-Name>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
