<?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-parent</artifactId>
    <version>2.3.0</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/tags/ruta-2.3.0/ruta-ep-caseditor</url>
    <connection>scm:svn:http://svn.apache.org/repos/asf/uima/ruta/tags/ruta-2.3.0/ruta-ep-caseditor</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/uima/ruta/tags/ruta-2.3.0/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.3.0,2.0.0)</version>
      <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.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,
                  *
                </Import-Package>
              </instructions>
            </configuration>
          </execution>
        </executions>
      </plugin>

    </plugins>
  </build>
</project>