<?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.    
-->
<feature
      id="org.apache.uima.ruta.feature"
      label="UIMA Ruta Workbench"
      version="${parsedVersion.osgiVersion}"
      provider-name="Apache Software Foundation">

   <description url="http://uima.apache.org">
      This feature packages the Apache UIMA Ruta Workbench
   </description>

   <copyright url="http://www.apache.org/licenses/LICENSE-2.0">
      Copyright the Apache Software Foundation and others; see License
and NOTICE files
   </copyright>

   <license url="%licenseURL">
      %license
   </license>

   <url>
      <discovery label="UIMA Eclipse Plugins update site" url="http://www.apache.org/dist/uima/eclipse-update-site/"/>
   </url>

   <requires>
      <import feature="org.apache.uima.tools" version="2.9.0" match="greaterOrEqual"/>
      <import feature="org.eclipse.dltk.core" version="3.0.0" match="greaterOrEqual"/>
   </requires>

   <plugin
         id="org.apache.uima.ruta.addons"
         download-size="0"
         install-size="0"
         version="${parsedVersion.osgiVersion}"
         unpack="false"/>

   <plugin
         id="org.apache.uima.ruta.caseditor"
         download-size="0"
         install-size="0"
         version="${parsedVersion.osgiVersion}"
         unpack="false"/>

   <plugin
         id="org.apache.uima.ruta.engine"
         download-size="0"
         install-size="0"
         version="${parsedVersion.osgiVersion}"
         unpack="false"/>

   <plugin
         id="org.apache.uima.ruta.ide"
         download-size="0"
         install-size="0"
         version="${parsedVersion.osgiVersion}"
         unpack="false"/>

   <plugin
         id="org.apache.uima.ruta.ide.ui"
         download-size="0"
         install-size="0"
         version="${parsedVersion.osgiVersion}"
         unpack="false"/>

   <plugin
         id="org.apache.uima.ruta.textruler"
         download-size="0"
         install-size="0"
         version="${parsedVersion.osgiVersion}"
         unpack="false"/>

   <plugin
         id="org.apache.uima.ruta.core.ext"
         download-size="0"
         install-size="0"
         version="${parsedVersion.osgiVersion}"
         unpack="false"/>

</feature>
