<?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.
-->
<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-dsml-parent</artifactId>
    <version>2.0.1-SNAPSHOT</version>
  </parent>

  <artifactId>api-dsml-parser</artifactId>
  <name>Apache Directory LDAP API DSML Parser</name>
  <packaging>bundle</packaging>

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

    <dependency>
      <groupId>org.junit.platform</groupId>
      <artifactId>junit-platform-runner</artifactId>
      <scope>test</scope>
    </dependency>
    
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>api-ldap-codec-standalone</artifactId>
      <scope>test</scope>
    </dependency>
    
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>api-ldap-codec-core</artifactId>
    </dependency>
    
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>api-ldap-model</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.apache.servicemix.bundles</groupId>
      <artifactId>org.apache.servicemix.bundles.dom4j</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.servicemix.bundles</groupId>
      <artifactId>org.apache.servicemix.bundles.xpp3</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <groupId>org.apache.maven.plugins</groupId>
        <configuration>
          <systemPropertyVariables>
            <workingDirectory>${basedir}/target</workingDirectory>
            <felix.cache.rootdir>
              ${project.build.directory}
            </felix.cache.rootdir>
            <felix.cache.locking>
              false
            </felix.cache.locking>
            <org.osgi.framework.storage>
              osgi-cache
            </org.osgi.framework.storage>
          </systemPropertyVariables>
          <parallel>all</parallel>
          <threadCount>10</threadCount>
          <properties>
            <configurationParameters>
              junit.jupiter.execution.parallel.enabled=true
            </configurationParameters>
          </properties>
        </configuration>
      </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-SymbolicName>${project.groupId}.dsmlv2.parser</Bundle-SymbolicName>
            <Export-Package>
              org.apache.directory.api.dsmlv2;version=${project.version};-noimport:=true,
              org.apache.directory.api.dsmlv2.response;version=${project.version};-noimport:=true,
              org.apache.directory.api.dsmlv2.request;version=${project.version};-noimport:=true
            </Export-Package>
            <Import-Package>
              javax.xml.transform,
              javax.xml.transform.stream,
              org.apache.directory.api.asn1;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.codec.api;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.ldif;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.url;version=${project.version},
              org.apache.directory.api.util;version=${project.version},
              org.dom4j;version=${dom4j.version},
              org.dom4j.io;version=${dom4j.version},
              org.dom4j.tree;version=${dom4j.version},
              org.slf4j;version=${slf4j.api.bundleversion},
              org.xmlpull.v1;version=${xpp3.version}
            </Import-Package>
            <Automatic-Module-Name>apache.directory.ldap.api.dsml.parser</Automatic-Module-Name>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
