<?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.
-->
<!--
  @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
-->
<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.studio</groupId>
    <artifactId>org.apache.directory.studio.plugins-parent</artifactId>
    <version>2.0.0.qualifier</version>
    <relativePath>../pom-first.xml</relativePath>
  </parent>

  <name>Apache Directory Studio Connection Core</name>
  <artifactId>org.apache.directory.studio.connection.core</artifactId>
  <packaging>bundle</packaging>

  <build>
     <!-- MANIFEST.MF Generation -->
    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <manifestLocation>META-INF</manifestLocation>
          <instructions>
            <Bundle-SymbolicName>${project.artifactId};singleton:=true</Bundle-SymbolicName>
            <Bundle-Localization>plugin</Bundle-Localization>
            <Eclipse-LazyStart>true</Eclipse-LazyStart>
            <Bundle-Activator>org.apache.directory.studio.connection.core.ConnectionCorePlugin</Bundle-Activator>
            
            <Export-Package>org.apache.directory.studio.connection.core,
 org.apache.directory.studio.connection.core.event,
 org.apache.directory.studio.connection.core.io,
 org.apache.directory.studio.connection.core.io.api,
 org.apache.directory.studio.connection.core.jobs</Export-Package>
            
            <Import-Package>
 org.apache.commons.lang3,
 org.apache.commons.lang3.exception,
 org.apache.commons.codec.digest,
 org.apache.http.conn.ssl,
 org.dom4j,
 org.dom4j.io
            </Import-Package>
            
            <Require-Bundle>
 org.apache.directory.api.asn1.api;bundle-version="${org.apache.directory.api.bundleversion}",
 org.apache.directory.api.ldap.client.api;bundle-version="${org.apache.directory.api.bundleversion}",
 org.apache.directory.api.ldap.codec.core;bundle-version="${org.apache.directory.api.bundleversion}",
 org.apache.directory.api.ldap.extras.codec;bundle-version="${org.apache.directory.api.bundleversion}",
 org.apache.directory.api.ldap.extras.codec.api;bundle-version="${org.apache.directory.api.bundleversion}",
 org.apache.directory.api.ldap.model;bundle-version="${org.apache.directory.api.bundleversion}",
 org.apache.directory.api.ldap.net.mina;bundle-version="${org.apache.directory.api.bundleversion}",
 org.apache.directory.api.util;bundle-version="${org.apache.directory.api.bundleversion}",
 org.apache.directory.studio.common.core,
 org.apache.directory.studio.ldifparser,
 org.eclipse.core.runtime,
 org.eclipse.ui
            </Require-Bundle>
          </instructions>
        </configuration>
        <executions>
          <execution>
            <id>generate-manifest</id>
            <phase>process-classes</phase>
            <goals>
              <goal>manifest</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>

