<?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="TestMultiplier">
      <import location="../multiplier/SimpleCasGeneratorProducing10Cases.xml"/>
    </delegateAnalysisEngine>
    <delegateAnalysisEngine key="NoOp">
      <import location="NoOpAnnotator.xml"/>
    </delegateAnalysisEngine>
  </delegateAnalysisEngineSpecifiers>
  <flowController key="BuggyAdvancedFixedFlowController">
    <import location="../flow/BuggyAdvancedFixedFlowController.xml"/>
  </flowController>
  <analysisEngineMetaData>
    <name>Test Aggregate TAE</name>
    <description>Detects Nothing</description>
    <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>BuggyAdvancedFixedFlowController/Flow</parameter>
        </overrides>
      </configurationParameter>
      <configurationParameter>
        <name>AllowContinueOnFailure</name>
        <description/>
        <type>String</type>
        <multiValued>true</multiValued>
        <mandatory>false</mandatory>
        <overrides>
          <parameter>BuggyAdvancedFixedFlowController/AllowContinueOnFailure</parameter>
        </overrides>
      </configurationParameter>
      <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>
        <overrides>
          <parameter>BuggyAdvancedFixedFlowController/ActionAfterCasMultiplier</parameter>
        </overrides>
      </configurationParameter>
    </configurationParameters>
    <configurationParameterSettings>
      <nameValuePair>
        <name>Flow</name>
        <value>
          <array>
            <string>TestMultiplier</string>
            <string>NoOp</string>
          </array>
        </value>
      </nameValuePair>
      <nameValuePair>
        <name>AllowContinueOnFailure</name>
        <value>
          <array>
            <string>TestMultiplier</string>
          </array>
        </value>
      </nameValuePair>
      <nameValuePair>
        <name>ActionAfterCasMultiplier</name>
        <value>
          <string>invalid</string>
        </value>
      </nameValuePair>
    </configurationParameterSettings>
    <flowConstraints>
      <fixedFlow>
        <node>TestMultiplier</node>
        <node>NoOp</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>
