<!--
   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>
  <groupId>org.apache.uima</groupId>
  <artifactId>uimaj-ep-deployeditor</artifactId>
  <packaging>bundle</packaging>
  <version>${uimaj-as-release-eclipse-version}</version>
  <name>Apache UIMA Deployment Descriptor Editor Eclipse Plugin</name>
  <url>http://incubator.apache.org/uima</url>
  <parent>
    <groupId>org.apache.uima</groupId>
    <artifactId>uimaj-as-eclipse-plugins</artifactId>
    <version>2.3.0.incubating</version> <!-- this comment is a flag for changeVersion -->
    <relativePath>../uimaj-as/eclipse-plugin-superPom</relativePath>
  </parent>

  <dependencies>

    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-ep-configurator</artifactId>
      <version>${uimaj-release-eclipse-version}</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-core</artifactId>
      <version>${uimaj-release-version}</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-tools</artifactId>
      <version>${uimaj-release-version}</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-ep-runtime-deployeditor</artifactId>
      <version>${uimaj-as-release-eclipse-version}</version>
      <scope>provided</scope>
    </dependency>

        <!-- Eclipse dependencies -->

    <!-- Some of these are probably not needed.
         If you take out too many, the bundle plugin 
         doesn't include enough of the core.runtime,
         that is, it generates a sub-import of the form
         org.eclipse.core.runtime;common=split
         which breaks things.
      -->

    <!-- core -->
    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>org.eclipse.core.runtime</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>org.eclipse.core.runtime.compatibility</artifactId>
      <version>3.1.100</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>org.eclipse.core.resources</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- ui -->
        <!-- next one causes NPE with maven 2.0.7.
      Might be related to http://jira.codehaus.org/browse/MNG-3086
      Workaround - change version from 3.2.0 to 3.2.1  as of 2/2008 is OK-->
    <dependency>
      <groupId>org.eclipse.ui</groupId>
      <artifactId>org.eclipse.ui</artifactId>
      <version>3.2.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.eclipse.ui</groupId>
      <artifactId>org.eclipse.ui.editors</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.eclipse.ui</groupId>
      <artifactId>org.eclipse.ui.forms</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.eclipse.ui</groupId>
      <artifactId>org.eclipse.ui.ide</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.eclipse.ui</groupId>
      <artifactId>org.eclipse.ui.workbench.texteditor</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- jdt -->
    <dependency>
      <groupId>org.eclipse.jdt</groupId>
      <artifactId>org.eclipse.jdt.core</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- added in Feb 2008 rework -->
    <dependency>
      <groupId>org.eclipse.jdt</groupId>
      <artifactId>org.eclipse.jdt.launching</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.eclipse.jdt</groupId>
      <artifactId>org.eclipse.jdt.ui</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>

    <!-- misc -->
    <dependency>
      <groupId>org.eclipse.jface</groupId>
      <artifactId>org.eclipse.jface.text</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.eclipse.pde</groupId>
      <artifactId>org.eclipse.pde.ui</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.eclipse.swt</groupId>
      <artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
      <version>3.2.0</version>
      <scope>provided</scope>
    </dependency>

  </dependencies>

  <build>
    <finalName>org.apache.uima.deployeditor_${uimaj-release-eclipse-version}</finalName>

    <!-- needed to copy resources, icons, and the plugin.xml to the result -->
    <resources>
      <resource>   <!-- copy the license, notices, disclaimer -->
        <directory>src/main/resources</directory>
      </resource>
      <resource>
        <directory>.</directory>
        <includes>
          <include>plugin.xml</include>
          <include>icons/*.*</include>
        </includes>
      </resource>
    </resources>

    <plugins>
      <!--plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <executions>
          <execution>
            <id>bin</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
            <configuration>
              <descriptors>
                <descriptor>
                  src/main/assembly/assemble-plugin.xml</descriptor>
              </descriptors>
              <finalName>
                org.apache.uima.deployeditor_${uimaj-release-eclipse-version}</finalName>
              <appendAssemblyId>false</appendAssemblyId>
            </configuration>
          </execution>
        </executions>
      </plugin-->

      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <!-- version 1.4.0 to support _nouses instruction -->
        <version>1.4.0</version>
        <extensions>true</extensions>
        <configuration>
          <manifestLocation>META-INF</manifestLocation>
          <instructions>
            <!-- turn off "uses" generation because Eclipse 3.2.x doesn't work with them -->
            <_nouses>true</_nouses>
            <Export-Package>
              org.apache.uima.dde.internal,
              org.apache.uima.dde.internal.details,
              org.apache.uima.dde.internal.hover,
              org.apache.uima.dde.internal.page,
              org.apache.uima.dde.internal.provider,
              org.apache.uima.dde.internal.wizards,
              org.apache.uima.editors.dde.internal,
              org.apache.uima.tools.images.internal,
              org.apache.uima.tools.internal.cde.uima.util,
              org.apache.uima.tools.internal.ui.forms,
              org.apache.uima.tools.internal.uima.util
            </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)
            -->
            <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.jface.text,
              !org.eclipse.jface.text,
              !org.eclipse.jface.text.link,
              !org.eclipse.jface.text.source,
              !org.eclipse.jface.text.templates,
              !org.eclipse.ui.texteditor,
              !org.eclipse.ui,
              !org.eclipse.ui.actions,
              !org.eclipse.ui.dialogs,
              !org.eclipse.ui.model,
              !org.eclipse.ui.part, 
              *,
              org.apache.uima.taeconfigurator.editors.ui.dialogs,
              org.apache.uima.taeconfigurator.files,
              org.apache.uima.application.util
            </Import-Package>

            <!--Import-Package>*,
              org.eclipse.core.runtime,
              org.eclipse.core.runtime.jobs,
              org.eclipse.core.commands.common,
              org.eclipse.jface.operation,
              org.eclipse.jface.window,
              org.eclipse.jdt.launching,
              org.apache.uima.taeconfigurator.editors.ui.dialogs
            </Import-Package-->

            <Bundle-Activator>org.apache.uima.editors.dde.internal.Activator</Bundle-Activator>
            <Bundle-SymbolicName>org.apache.uima.deployeditor;singleton:=true</Bundle-SymbolicName>

            <Eclipse-LazyStart>true</Eclipse-LazyStart>
          </instructions>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-eclipse-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <manifest>.ignore</manifest>
          <pde>true</pde>
          <useProjectReferences>false</useProjectReferences>
        </configuration>
      </plugin>

    </plugins>
  </build>
</project>
