<?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>

  <artifactId>org.apache.directory.studio.ldapbrowser.ui</artifactId>
  <name>Apache Directory Studio LDAP Browser UI</name>
  <description/>
  <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.ldapbrowser.ui.BrowserUIPlugin</Bundle-Activator>
            
            <Export-Package>org.apache.directory.studio.entryeditors,
 org.apache.directory.studio.ldapbrowser.ui,
 org.apache.directory.studio.ldapbrowser.ui.actions,
 org.apache.directory.studio.ldapbrowser.ui.actions.proxy,
 org.apache.directory.studio.ldapbrowser.ui.dialogs,
 org.apache.directory.studio.ldapbrowser.ui.dialogs.preferences,
 org.apache.directory.studio.ldapbrowser.ui.dialogs.properties,
 org.apache.directory.studio.ldapbrowser.ui.editors.entry,
 org.apache.directory.studio.ldapbrowser.ui.editors.schemabrowser,
 org.apache.directory.studio.ldapbrowser.ui.editors.searchresult,
 org.apache.directory.studio.ldapbrowser.ui.perspective,
 org.apache.directory.studio.ldapbrowser.ui.search,
 org.apache.directory.studio.ldapbrowser.ui.views.browser,
 org.apache.directory.studio.ldapbrowser.ui.views.connection,
 org.apache.directory.studio.ldapbrowser.ui.views.modificationlogs,
 org.apache.directory.studio.ldapbrowser.ui.views.searchlogs,
 org.apache.directory.studio.ldapbrowser.ui.wizards</Export-Package>
 
            <Import-Package>
 org.apache.commons.lang
            </Import-Package>
            
            <Require-Bundle>
 org.apache.directory.api.ldap.model;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.common.ui,
 org.apache.directory.studio.connection.core,
 org.apache.directory.studio.connection.ui,
 org.apache.directory.studio.ldapbrowser.core,
 org.apache.directory.studio.ldapbrowser.common,
 org.apache.directory.studio.ldifeditor,
 org.apache.directory.studio.ldifparser,
 org.eclipse.core.resources,
 org.eclipse.core.runtime,
 org.eclipse.jface.text,
 org.eclipse.ui,
 org.eclipse.ui.editors,
 org.eclipse.ui.forms,
 org.eclipse.ui.ide,
 org.eclipse.ui.views,
 org.eclipse.ui.workbench.texteditor,
 org.eclipse.search
            </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>

