<?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.
    ***************************************************************
   -->

<taeDescription
   xmlns="http://uima.apache.org/resourceSpecifier"
   >
   <frameworkImplementation>org.apache.uima.cpp</frameworkImplementation>
<primitive>true</primitive>
   <annotatorImplementationName>libtest</annotatorImplementationName>

   <analysisEngineMetaData>
      <name>TestAnnotator</name>
      <description>Test annotator for dump annotator</description>
      <version>1.0</version>
      <vendor>IBM Corporation</vendor>

      <configurationParameters>
         <configurationParameter>
            <name>ProcessUnspecifiedTerritories</name>
            <description></description>
            <type>Boolean</type>
            <multiValued>false</multiValued>
            <mandatory>false</mandatory>
                     </configurationParameter>
      </configurationParameters>

      <configurationParameterSettings>
         <nameValuePair>
            <name>ProcessUnspecifiedTerritories</name>
            <value>
               <boolean>true</boolean>
            </value>
         </nameValuePair>

      </configurationParameterSettings>

      <typeSystemDescription>
         <imports>
             <import location="tt_typesystem.xml"/>
         </imports>
	   <types>
            <typeDescription>
               <name>TestDump</name>
               <description>Created for test reasons</description>
               <supertypeName>uima.cas.TOP</supertypeName>
            </typeDescription>
         </types>
      </typeSystemDescription>

      <fsIndexes>
      </fsIndexes>

      <capabilities>
         <capability>
            <inputs/>

            <outputs>
               <type>TestDump</type>
            </outputs>

            <languagesSupported>
               <language>en-us</language>
               <language>ar</language>
               <language>de</language>
               <language>en-ca</language>
               <language>it-it</language>
            </languagesSupported>
         </capability>
      </capabilities>

   </analysisEngineMetaData>
</taeDescription>

