<?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.
   ***************************************************************
   -->
<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
  <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
  <primitive>false</primitive>
  <delegateAnalysisEngineSpecifiers>
    <delegateAnalysisEngine key="WriterAnnotatorC">
      <import location="WriterAnnotatorC.xml"/>
    </delegateAnalysisEngine>
    <delegateAnalysisEngine key="WriterAnnotatorB">
      <import location="WriterAnnotatorB.xml"/>
    </delegateAnalysisEngine>
    <delegateAnalysisEngine key="WriterAnnotatorA">
      <import location="WriterAnnotatorA.xml"/>
    </delegateAnalysisEngine>
    <delegateAnalysisEngine key="TestMultiplier">
      <import location="../multiplier/SimpleCasGenerator.xml"/>
    </delegateAnalysisEngine>
  </delegateAnalysisEngineSpecifiers>
  <flowController key="AdvancedFixedFlowController">
    <import location="../flow/AdvancedFixedFlowController.xml"/>
  </flowController>
  <analysisEngineMetaData>
    <name>testContinueOnRetryFailure</name>
    <description>Tests maxRetries and continueOnRetryFailure settings</description>
    <version/>
    <vendor/>
    <configurationParameters searchStrategy="language_fallback">
      <configurationParameter>
        <name>Flow</name>
        <description>Specifies the flow. This is an array of strings where each string is either a single Analysis
          Engine key or a comma-separated list of Analysis Engine keys that should be executed in parallel.</description>
        <type>String</type>
        <multiValued>true</multiValued>
        <mandatory>true</mandatory>
        <overrides>
          <parameter>AdvancedFixedFlowController/Flow</parameter>
        </overrides>
      </configurationParameter>
      <configurationParameter>
        <name>AllowContinueOnFailure</name>
        <description>Specifies for which AnalysisEngines the Flow should continue when an exception occurs. This
          parameter takes an array of Strings as its value. Each String is the key of AnalysisEngine for which
          continuing on failure should be allowed.</description>
        <type>String</type>
        <multiValued>true</multiValued>
        <mandatory>false</mandatory>
        <overrides>
          <parameter>AdvancedFixedFlowController/AllowContinueOnFailure</parameter>
        </overrides>
      </configurationParameter>
      <configurationParameter>
        <name>AllowDropOnFailure</name>
        <description/>
        <type>String</type>
        <multiValued>true</multiValued>
        <overrides>
          <parameter>AdvancedFixedFlowController/AllowDropOnFailure</parameter>
        </overrides>
      </configurationParameter>
      <configurationParameter>
	        <name>ExceptionsToIgnore</name>
	        <description>Specifies which exceptions to ignore.</description>
	        <type>String</type>
	        <multiValued>true</multiValued>
	        <mandatory>false</mandatory>
	        <overrides>
	          <parameter>AdvancedFixedFlowController/ExceptionsToIgnore</parameter>
	        </overrides>
      </configurationParameter>
    </configurationParameters>
    <configurationParameterSettings>
      <nameValuePair>
        <name>Flow</name>
        <value>
          <array>
            <string>TestMultiplier</string>
            <string>WriterAnnotatorA</string>
            <string>WriterAnnotatorB</string>
            <string>WriterAnnotatorC</string>
          </array>
        </value>
      </nameValuePair>
      <nameValuePair>
        <name>AllowContinueOnFailure</name>
        <value>
          <array>
            <string>WriterAnnotatorA</string>
          </array>
        </value>
      </nameValuePair>
      <!-- This specifies for which AEs we can drop when an error occurs -->
      <nameValuePair>
        <name>AllowDropOnFailure</name>
        <value>
          <array>
            <string>WriterAnnotatorB</string>
          </array>
        </value>
      </nameValuePair>
      <nameValuePair>
	        <name>ExceptionsToIgnore</name>
	        <value>
	          <array>
              <string>java.lang.IndexOutOfBoundsException</string>
	          </array>
	        </value>
      </nameValuePair>
    </configurationParameterSettings>
    <flowConstraints>
      <fixedFlow>
        <node>TestMultiplier</node>
        <node>WriterAnnotatorA</node>
        <node>WriterAnnotatorB</node>
        <node>WriterAnnotatorC</node>
      </fixedFlow>
    </flowConstraints>
    <capabilities>
      <capability>
        <inputs/>
        <outputs/>
        <languagesSupported>
          <language>en</language>
        </languagesSupported>
      </capability>
    </capabilities>
    <operationalProperties>
      <modifiesCas>true</modifiesCas>
      <multipleDeploymentAllowed>true</multipleDeploymentAllowed>
      <outputsNewCASes>false</outputsNewCASes>
    </operationalProperties>
  </analysisEngineMetaData>
</analysisEngineDescription>
