<?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.uima</groupId>
    <artifactId>uimaj-parent</artifactId>
    <version>2.11.0</version>
    <relativePath>../uimaj-parent/pom.xml</relativePath>
  </parent>

  <artifactId>uimaj-ep-pear-packager</artifactId>
  <packaging>jar</packaging>
  <name>Apache UIMA Eclipse: ${project.artifactId}</name>
  <description>Provides an Eclipse Wizard to construct
    a PEAR package</description>
  <url>${uimaWebsiteUrl}</url>

  <properties>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
  </properties>

  <dependencies>
    <!-- UIMA dependencies -->
    <!-- depending on the ep-runtime doesn't work without manual intervention because
      eclipse:eclipse on the ep-runtime doesn't mark the embedded things as "exported".
      It doesn't matter which scope - compile or provided - is used, both fail

      Other posts indicate that plugins should have explicit dependencies, anyway.
      And, it lets these plugins work when the library plugin is "open" in the same workspace.
    -->
    <!--dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-ep-runtime</artifactId>
      <version>${uimaj-release-eclipse-version}</version>
      <scope>compile</scope>
      </dependency -->

    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-core</artifactId>
      <version>${project.parent.version}</version>
      <scope>compile</scope>
    </dependency>

    <!-- Eclipse dependencies -->
    <dependency>
      <groupId>${eclipseP2RepoId}</groupId>
      <artifactId>org.eclipse.jdt.core</artifactId>
      <version>[3.12.0, 4.0.0)</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>${eclipseP2RepoId}</groupId>
      <artifactId>org.eclipse.jface</artifactId>
      <version>[3.13.0, 4.0.0)</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>${eclipseP2RepoId}</groupId>
      <artifactId>org.eclipse.jdt.ui</artifactId>
      <version>[3.12.0,4.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>${eclipseP2RepoId}</groupId>
      <artifactId>org.eclipse.ui</artifactId>
      <version>[3.108.1, 4.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>${eclipseP2RepoId}</groupId>
      <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
      <version>[3.2.0,5.0.0)</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <build>
    <!-- don't use artifactId as first part of finalName, follow instead the eclipse convention -->
    <finalName>org.apache.uima.pear_${parsedVersion.osgiVersion}</finalName>

    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <configuration>
          <instructions>
            <!-- turn off "uses" generation because Eclipse 3.2.x doesn't work with them -->
            <_nouses>true</_nouses>
            <Export-Package>
              org.apache.uima.pear,
              org.apache.uima.pear.actions,
              org.apache.uima.pear.generate,
              org.apache.uima.pear.insd.edit,
              org.apache.uima.pear.insd.edit.vars,
              org.apache.uima.pear.nature
            </Export-Package>
                
            <!-- handle split packages in Eclipse.
              We do this by using Require-Bundle, and excluding from the Import-Package those
                split packages covered by those bundles - this is required by OSGi.
                               
               There are 4 packages in org.eclipse.jface.* that are "split" between bundles 
                  org.eclipse.jface.text and org.eclipse.text.
                 Packages:
                  org.eclipse.jface.text
                  org.eclipse.jface.text.link
                  org.eclipse.jface.text.source
                  org.eclipse.jface.text.templates 
               org.eclipse.ui.texteditor is split between 
                 org.eclipse.ui.editors and org.eclipse.ui.workbench.texteditor.
                 Packages: 
                  org.eclipse.ui.texteditor
               There are 5 packages in org.eclipse.ui.*  that are split between 
                 org.eclipse.ui.ide and org.eclipse.ui.workbench.  
                 The Notes say not to require org.eclipse.ui.workbench, but instead just require
                    org.eclipse.ui (which imports and reexports org.eclipse.ui.workbench packages).
                 Packages:
                  org.eclipse.ui
                  org.eclipse.ui.actions
                  org.eclipse.ui.dialogs
                  org.eclipse.ui.model
                  org.eclipse.ui.part
               org.eclipse.core.runtime has combined apis (that were split in later 
                 point releases of 3.x)
            -->
            <!-- NOTE: ANY CONTINUATION LINES for Require-Bundle MUST START IN Col1 else manifest is potentially wrong -->            
            <Require-Bundle>
org.eclipse.jface.text,
org.eclipse.text,
org.eclipse.ui.editors,
org.eclipse.ui.workbench.texteditor,
org.eclipse.ui.ide,
org.eclipse.ui,
org.eclipse.ui.workbench,
org.eclipse.core.runtime
            </Require-Bundle>
            <Import-Package>              
              !org.eclipse.core.runtime,
              !org.eclipse.ui,
              !org.eclipse.ui.dialogs,
              !org.eclipse.ui.model, 
              *
            </Import-Package> 
    
            <Bundle-Activator>org.apache.uima.pear.PearPlugin</Bundle-Activator>
            <Bundle-SymbolicName>org.apache.uima.pear;singleton:=true</Bundle-SymbolicName>
            
            <Eclipse-AutoStart>true</Eclipse-AutoStart>
          </instructions>
        </configuration>
      </plugin>  
		</plugins>
	</build>
</project>