<?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.templateeditor</artifactId>
  <name>Apache Directory Studio Template 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.templateeditor.EntryTemplatePlugin</Bundle-Activator>
            <Export-Package>org.apache.directory.studio.templateeditor,
              org.apache.directory.studio.templateeditor.actions,
              org.apache.directory.studio.templateeditor.editor,
              org.apache.directory.studio.templateeditor.editor.widgets,
              org.apache.directory.studio.templateeditor.model,
              org.apache.directory.studio.templateeditor.model.parser,
              org.apache.directory.studio.templateeditor.model.widgets,
              org.apache.directory.studio.templateeditor.view,
              org.apache.directory.studio.templateeditor.view.preferences,
              org.apache.directory.studio.templateeditor.view.wizards
            </Export-Package>
            
            <Import-Package>
              org.apache.commons.collections4,
              org.apache.commons.collections4.multimap,
              org.dom4j,
              org.dom4j.io,
              org.slf4j
            </Import-Package>
            
            <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.api.util,
              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
            </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>
