<?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.v20210213-M16</version>
    <relativePath>../pom-first.xml</relativePath>
  </parent>

  <artifactId>org.apache.directory.studio.combinededitor</artifactId>
  <name>Apache Directory Studio Combined Editor</name>
  <packaging>bundle</packaging>
  <description/>

  <build>
    <plugins>
      <!-- MANIFEST.MF Generation -->
      <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.combinededitor.CombinedEditorPlugin</Bundle-Activator>
            <Require-Bundle>
              org.eclipse.core.runtime,
              org.eclipse.ui,
              org.eclipse.ui.forms,
              org.eclipse.jface.text,
              org.apache.directory.api.ldap.model,
              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.ldapbrowser.ui,
              org.apache.directory.studio.ldifparser,
              org.apache.directory.studio.ldifeditor,
              org.apache.directory.studio.valueeditors,
              org.apache.directory.studio.templateeditor
            </Require-Bundle>
            <Export-Package>
              org.apache.directory.studio.combinededitor,
              org.apache.directory.studio.combinededitor.actions,
              org.apache.directory.studio.combinededitor.editor,
              org.apache.directory.studio.combinededitor.preferences
            </Export-Package>
          </instructions>
        </configuration>
        <executions>
          <execution>
            <phase>process-classes</phase>
            <goals>    
              <goal>manifest</goal>
            </goals>   
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>
