<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <artifactId>ruta-ep-caseditor</artifactId>
  <version>2.2.1-SNAPSHOT</version>
  <parent>
    <groupId>org.apache.uima</groupId>
    <artifactId>ruta-parent</artifactId>
    <version>2.2.1-SNAPSHOT</version>
    <relativePath>../ruta-parent/pom.xml</relativePath>
  </parent>
  <properties>
    <uimaScmProject>${project.artifactId}</uimaScmProject>
  </properties>
  <name>Apache UIMA Ruta Eclipse: ${project.artifactId}</name>
  <url>${uimaWebsiteUrl}</url>
  <description>Provides additional views for the CAS Editor</description>
  <scm>
    <url>http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-caseditor</url>
    <connection>scm:svn:http://svn.apache.org/repos/asf/uima/ruta/trunk/ruta-ep-caseditor</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/uima/ruta/trunk/ruta-ep-caseditor</developerConnection>
  </scm>
  <dependencies>
    <dependency>
      <groupId>org.apache.uima</groupId>
      <artifactId>uimaj-ep-cas-editor</artifactId>
      <version>${uimaVersion}</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>runtime</artifactId>
      <version>[3.3.0,5.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.core</groupId>
      <artifactId>resources</artifactId>
      <version>[3.3.0,5.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse</groupId>
      <artifactId>ui</artifactId>
      <version>[3.3.0,5.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.swt.win32.win32</groupId>
      <artifactId>x86</artifactId>
      <version>[3.2.0,5.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.ui</groupId>
      <artifactId>ide</artifactId>
      <version>[3.3.0.0,5.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.ui</groupId>
      <artifactId>views</artifactId>
      <version>[3.3.0.0,5.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.ui.workbench</groupId>
      <artifactId>texteditor</artifactId>
      <version>[3.3.0.0,5.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.ui</groupId>
      <artifactId>workbench</artifactId>
      <version>[3.3.0.0,5.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jface</groupId>
      <artifactId>text</artifactId>
      <version>[3.3.0.0,5.0.0)</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.equinox</groupId>
      <artifactId>app</artifactId>
      <version>[1.0.0,1.4.0)</version>
    </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.1</version>
    </dependency>
  </dependencies>

  <build>
    <!-- don't use artifactId as first part of finalName, follow instead the eclipse convention -->
    <finalName>org.apache.uima.ruta.caseditor_${parsedVersion.osgiVersion}</finalName>
    <resources>
      <resource>
        <directory>.</directory>
        <includes>
          <include>plugin.xml</include>
          <include>icons/**/*.*</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
      <resource>
        <directory>src/main/readme_src</directory>
      </resource>
    </resources>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.rat</groupId>
          <artifactId>apache-rat-plugin</artifactId>
          <executions>
            <execution>
              <id>default-cli</id>
              <configuration>
                <excludes>
                  <exclude>release.properties</exclude> <!-- release generated artifact -->
                  <exclude>src/test/resources/ManualTests/*</exclude> <!-- test data -->
                  <exclude>marker-file-identifying-*</exclude>
                  <exclude>issuesFixed/**</exclude>
                </excludes>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>

    <plugins>
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <executions>
          <execution>
            <id>uima-bundle</id>
            <configuration>
              <instructions>
                <Bundle-SymbolicName>org.apache.uima.ruta.caseditor;singleton:=true</Bundle-SymbolicName>
                <Bundle-Activator>org.apache.uima.ruta.caseditor.RutaCasEditorPlugin</Bundle-Activator>
                <Bundle-RequiredExecutionEnvironment>J2SE-1.5</Bundle-RequiredExecutionEnvironment>
                <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
                <_nouses>true</_nouses>
                <Export-Package>
                  org.apache.uima.ruta.caseditor.*
                </Export-Package>
                <Require-Bundle>
                  org.eclipse.jface.text,
                  org.eclipse.text,
                  org.eclipse.ui.editors,
                  org.eclipse.ui.workbench.texteditor,
                  org.eclipse.ui,
                  org.eclipse.ui.ide,
                  org.eclipse.ui.workbench,
                  org.eclipse.core.runtime,
                  org.eclipse.core.resources,
                  org.apache.uima.caseditor.ide,
                  org.junit4;bundle-version="4.5.0";resolution:=optional
                </Require-Bundle>
                <Import-Package>
                  !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.eclipse.core.runtime,
                  *
                </Import-Package>
              </instructions>
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>
  </build>
</project>