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

    <delegateAnalysisEngine key="TestMultiplier2">
      <import location="../multiplier/SimpleCasGenerator.xml"/>
    </delegateAnalysisEngine>
    <delegateAnalysisEngine key="TestMultiplier3">
      <import location="../multiplier/SimpleCasGenerator.xml"/>
    </delegateAnalysisEngine>
    <delegateAnalysisEngine key="TestMultiplier4">
      <import location="../multiplier/SimpleCasGenerator.xml"/>
    </delegateAnalysisEngine>

      <delegateAnalysisEngine key="NoOp2">
      <import location="NoOpAnnotator.xml"/>
    </delegateAnalysisEngine>
  
  </delegateAnalysisEngineSpecifiers>
  <analysisEngineMetaData>
    <name>Inner Test Aggregate TAE 2</name>
    <description>Detects Nothing</description>
    <configurationParameters/>
    <configurationParameterSettings/>
    <flowConstraints>
      <fixedFlow>
      
        <node>TestMultiplier1</node>
        <node>TestMultiplier2</node>
        <node>TestMultiplier3</node>
        <node>TestMultiplier4</node>
        <node>NoOp2</node> 
      </fixedFlow>
    </flowConstraints>
    <capabilities>
      <capability>
        <inputs/>
        <outputs>
        </outputs>
        <languagesSupported>
          <language>en</language>
        </languagesSupported>
      </capability>
    </capabilities>
	<operationalProperties>
		<modifiesCas>true</modifiesCas>
		<multipleDeploymentAllowed>true</multipleDeploymentAllowed>
		<outputsNewCASes>true</outputsNewCASes>
	</operationalProperties>
  </analysisEngineMetaData>
</analysisEngineDescription>
