<?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.as.deployeditor"
      label="UIMA-AS Deployment Descriptor Editor"
      version="2.3.0.incubating"
      provider-name="Apache Software Foundation">

   <description url="http://incubator.apache.org/uima">
      This feature adds to the UIMA Component Descriptor
      Editor (CDE) the ability to edit the Deployment
      Descriptor used by UIMA-AS to deploy
      UIMA components using Asynchronous Scaleout
   </description>

   <copyright url="http://incubator.apache.org/uima">
      Copyright the Apache Software Foundation and others; see License
and NOTICE files
   </copyright>

   <license url="http://www.apache.org/licenses/LICENSE-2.0">
      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
&quot;License&quot;); 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
&quot;AS IS&quot; 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.
   </license>

   <url>
      <discovery label="UIMA Eclipse Plugins update site" url="http://www.apache.org/dist/incubator/uima/eclipse-update-site/"/>
   </url>

   <requires>
      <import plugin="org.apache.uima.runtime" version="2.3.0" match="greaterOrEqual"/>
      <import plugin="org.apache.uima.desceditor" version="2.3.0" match="greaterOrEqual"/>
   </requires>

   <plugin
         id="org.apache.uima.deployeditor"
         download-size="0"
         install-size="0"
         version="2.3.0.incubating"
         unpack="false"/>

   <plugin
         id="org.apache.uima.runtime.fragments.deployeditor"
         download-size="0"
         install-size="0"
         version="2.3.0.incubating"
         fragment="true"
         unpack="false"/>

</feature>
