<?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>libdump</annotatorImplementationName>

   <analysisEngineMetaData>
      <name>AnnotationDumpAnnotator</name>
      <description>This annotator dumps ANs and TEs of a particular type(range) out to a stream. The stream and the structure of the Output are specified by the user</description>
      <version>1.0</version>
      <vendor>IBM Corporation</vendor>

      <configurationParameters>
         <configurationParameter>
            <name>OutputFile</name>
            <description>The name of the file that will contain the dumped TCAS</description>
            <type>String</type>
            <multiValued>false</multiValued>
            <mandatory>true</mandatory>
                     </configurationParameter>

         <configurationParameter>
            <name>AppendFile</name>
            <description>If true, the result of the dump is appended to OutputFile</description>
            <type>Boolean</type>
            <multiValued>false</multiValued>
            <mandatory>true</mandatory>
                     </configurationParameter>

         <configurationParameter>
            <name>DumpDocBuffer</name>
            <description>If true, the content of the document buffer is dumped as well</description>
            <type>Boolean</type>
            <multiValued>false</multiValued>
            <mandatory>true</mandatory>
                     </configurationParameter>

         <configurationParameter>
            <name>SaveDocBuffer</name>
            <description></description>
            <type>Boolean</type>
            <multiValued>false</multiValued>
            <mandatory>true</mandatory>
                     </configurationParameter>

         <configurationParameter>
            <name>OutputStyle</name>
            <description>Determmins the format of the output. Currently, only XML is supported</description>
            <type>Integer</type>
            <multiValued>false</multiValued>
            <mandatory>true</mandatory>
                     </configurationParameter>

         <configurationParameter>
            <name>OutputTypes</name>
            <description>Used to test extraction of multi-valued parameters</description>
            <type>String</type>
            <multiValued>true</multiValued>
            <mandatory>false</mandatory>
         </configurationParameter>

      </configurationParameters>

      <configurationParameterSettings>
         <nameValuePair>
            <name>OutputFile</name>
            <value>
               <string>ANDump.xml</string>
            </value>
         </nameValuePair>
         <nameValuePair>
            <name>AppendFile</name>
            <value>
               <boolean>false</boolean>
            </value>
         </nameValuePair>
         <nameValuePair>
            <name>DumpDocBuffer</name>
            <value>
               <boolean>false</boolean>
            </value>
         </nameValuePair>
         <nameValuePair>
            <name>SaveDocBuffer</name>
            <value>
               <boolean>false</boolean>
            </value>
         </nameValuePair>
         <nameValuePair>
            <name>OutputStyle</name>
            <value>
               <integer>0</integer>
            </value>
         </nameValuePair>
         <nameValuePair>
            <name>OutputTypes</name>
            <value>
               <array>
                  <string>Four</string>
                  <string>output</string>
                  <string>type</string>
                  <string>values</string>
               </array>
            </value>
         </nameValuePair>
      </configurationParameterSettings>

      <typeSystemDescription>
         <types/>
      </typeSystemDescription>

      <fsIndexes>
      </fsIndexes>

      <capabilities>
         <capability>
            <inputs/>

            <outputs/>

            <languagesSupported>
               <language>x-unspecified</language>
            </languagesSupported>
         </capability>
      </capabilities>

   </analysisEngineMetaData>
</taeDescription>

