<?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.java</frameworkImplementation>
    <primitive>true</primitive>
    <annotatorImplementationName>org.apache.uima.collection.impl.cpm.utils.ErrorTestAnnotator</annotatorImplementationName>
    <analysisEngineMetaData>
        <name>ErrorTestAnnotator</name>
        <description>Annotator is used to cause predefined errors</description>
        <version>1.0</version>
        <vendor>The Apache Software Foundation Corporation</vendor>
        <configurationParameters defaultGroup="default" searchStrategy="default_fallback">
            <commonParameters>
                <configurationParameter>
                    <name>ErrorCount</name>
                    <description>Number of calls until the given Exception is thrown</description>
                    <type>Integer</type>
                    <multiValued>false</multiValued>
                    <mandatory>false</mandatory>
                </configurationParameter>
                <configurationParameter>
                    <name>Exception</name>
                    <description>the Exception to throw on Errors, f.i. AnnotatorProcessException (only defined functions may be thrown!)</description>
                    <type>String</type>
                    <multiValued>false</multiValued>
                    <mandatory>false</mandatory>
                </configurationParameter>
            </commonParameters>
            <configurationGroup names="default">
                <configurationParameter>
                    <name>TestAnnotator</name>
                    <description>Should the annotator be tested</description>
                    <type>Boolean</type>
                    <multiValued>false</multiValued>
                    <mandatory>false</mandatory>
                </configurationParameter>
            </configurationGroup>
            <configurationGroup names="process initialize reconfigure"/>
        </configurationParameters>
        <configurationParameterSettings>
            <settingsForGroup name="default">
                <nameValuePair>
                    <name>TestAnnotator</name>
                    <value>
                        <boolean>false</boolean>
                    </value>
                </nameValuePair>
            </settingsForGroup>
        </configurationParameterSettings>
        <flowConstraints>
            <fixedFlow/>
        </flowConstraints>
        <typeSystemDescription/>
        <fsIndexCollection/>
        <capabilities>
            <capability>
                <inputs/>
                <outputs/>
                <languagesSupported/>
            </capability>
        </capabilities>
    </analysisEngineMetaData>
</taeDescription>
