<?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.
***************************************************************
-->

<flowControllerDescription xmlns="http://uima.apache.org/resourceSpecifier">
  <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
  <implementationName>org.apache.uima.ee.test.flow.AdvancedFixedFlowController</implementationName>
  <processingResourceMetaData>
    <name>Advanced Fixed Flow Controller</name>
    <description>An extension of the FixedFlowController that can also do ParallelSteps and can continue after
      errors. It is configured via the "Flow" configuration parameter rather than using the flowConstraints
      element of the aggregate descriptor.</description>
    <version>1.0</version>
    <vendor>The Apache Software Foundation</vendor>
    <configurationParameters>
      <configurationParameter>
        <name>ActionAfterCasMultiplier</name>
        <description>The action to be taken after a CAS has been input to a CAS Multiplier and the CAS Multiplier has
          finished processing it. Valid values are: continue - the CAS continues on to the next element in the flow
          stop - the CAS will no longer continue in the flow, and will be returned from the aggregate if possible. drop -
          the CAS will no longer continue in the flow, and will be dropped (not returned from the aggregate) if
          possible. dropIfNewCasProduced (the default) - if the CAS multiplier produced a new CAS as a result of
          processing this CAS, then this CAS will be dropped. If not, then this CAS will continue. </description>
        <type>String</type>
        <multiValued>false</multiValued>
        <mandatory>false</mandatory>
      </configurationParameter>
      
      <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>
      </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>
      </configurationParameter>

      <configurationParameter>
        <name>AllowDropOnFailure</name>
        <description> Specifies for which AnalysisEngines a failed CAS can be dropped when an exception occurs. This
          only applies to internally created CASes and prevents the exception from being transferred to their parent. This 
          parameter takes an array of Strings as its value. Each String is the key of AnalysisEngine for which
          dropping on failure should be allowed. </description>
        <type>String</type>
        <multiValued>true</multiValued>
        <mandatory>false</mandatory>
      </configurationParameter>

      <configurationParameter>
        <name>ExceptionsToIgnore</name>
        <description>Specifies which exceptions to ignore.</description>
        <type>String</type>
        <multiValued>true</multiValued>
        <mandatory>false</mandatory>
      </configurationParameter>
    </configurationParameters>
    <configurationParameterSettings>
      <nameValuePair>
        <name>ActionAfterCasMultiplier</name>
        <value>
          <string>dropIfNewCasProduced</string>
        </value>
      </nameValuePair>
    </configurationParameterSettings>
    <capabilities>
      <capability>
        <inputs/>
        <outputs/>
      </capability>
    </capabilities>
  </processingResourceMetaData>
</flowControllerDescription>
