<?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="Multiplier1">
      <import location="../multiplier/SimpleCasGenerator.xml"/>
    </delegateAnalysisEngine>

    <delegateAnalysisEngine key="Multiplier2">
      <import location="../multiplier/SimpleCasGenerator.xml"/>
    </delegateAnalysisEngine>
    
     <delegateAnalysisEngine key="BadNoOp">
     <import location="NoOpAnnotatorWithInitFailure.xml"/>
    </delegateAnalysisEngine>
  </delegateAnalysisEngineSpecifiers>
  <analysisEngineMetaData>
    <name>Third Level Aggregate TAE</name>
    <description>Detects Nothing</description>
   <configurationParameters searchStrategy="language_fallback">
      <configurationParameter>
        <name>NumberToGenerate</name>
        <description>Approximate number of CASes to create.</description>
        <type>Integer</type>
        <multiValued>false</multiValued>
        <mandatory>true</mandatory>
        <overrides>
          <parameter>Multiplier2/NumberToGenerate</parameter>
        </overrides>
      </configurationParameter>
    </configurationParameters>
    <configurationParameterSettings>
      <nameValuePair>
        <name>NumberToGenerate</name>
        <value>
          <integer>10</integer>
        </value>
      </nameValuePair>
    </configurationParameterSettings>

    <flowConstraints>
      <fixedFlow>
        <node>Multiplier1</node>
        <node>Multiplier2</node>
         <node>BadNoOp</node>
      </fixedFlow>
    </flowConstraints>
    <capabilities>
      <capability>
        <inputs/>
        <outputs/>
        <languagesSupported>
          <language>en</language>
        </languagesSupported>
      </capability>
    </capabilities>
    <operationalProperties>
      <modifiesCas>true</modifiesCas>
      <multipleDeploymentAllowed>true</multipleDeploymentAllowed>
      <outputsNewCASes>true</outputsNewCASes>
    </operationalProperties>
  </analysisEngineMetaData>
</analysisEngineDescription>
