<?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>
  <parent>
    <groupId>org.apache.uima</groupId>
    <artifactId>ruta-ep-parent</artifactId>
    <version>2.6.1</version>
    <relativePath>../ruta-ep-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/tags/ruta-2.6.1/ruta-ep-caseditor</url>
    <connection>scm:svn:http://svn.apache.org/repos/asf/uima/ruta/tags/ruta-2.6.1/ruta-ep-caseditor</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/uima/ruta/tags/ruta-2.6.1/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.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>
      <scope>provided</scope>
    </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>JavaSE-1.7</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,
                  org.apache.uima.caseditor.ide,
                  org.junit4;bundle-version="4.5.0";resolution:=optional
                </Require-Bundle>
                <Import-Package>
                  !org.eclipse.ui,
                  !org.eclipse.ui.part,
                  !org.eclipse.core.runtime,
                  !org.osgi.framework,
                  !org.apache.uima.caseditor.editor,
                  *
                </Import-Package>
              </instructions>
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>
  </build>
</project>