<?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="BlueJTestMultiplier1">
      <import location="../multiplier/SimpleCasGenerator.xml"/>
    </delegateAnalysisEngine>

    <delegateAnalysisEngine key="BlueJTestMultiplier2">
      <import location="../multiplier/SimpleCasGenerator.xml"/>
    </delegateAnalysisEngine>
	  

	<delegateAnalysisEngine key="BlueJInnerRemoteCMAggregate">
      <import location="SimpleTestCMAggregateWithCollocatedCM.xml"/>
    </delegateAnalysisEngine>
	  
	  
	<delegateAnalysisEngine key="BlueJNoOpCandidateAnswerCM">
      <!-- <import location="BlueJNoOpCandidateAnswer.xml"/> -->
      <import location="../multiplier/SimpleCasGenerator.xml"/>
    </delegateAnalysisEngine>
	  
    <delegateAnalysisEngine key="BlueJNoOpCC">
      <import location="BlueJNoOpCC.xml"/>
    </delegateAnalysisEngine>
	  
  </delegateAnalysisEngineSpecifiers>
  <analysisEngineMetaData>
    <name>Test 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>BlueJTestMultiplier1/NumberToGenerate</parameter>
          <parameter>BlueJTestMultiplier2/NumberToGenerate</parameter>
        </overrides>
      </configurationParameter>
    </configurationParameters>
    <configurationParameterSettings>
      <nameValuePair>
        <name>NumberToGenerate</name>
        <value>
          <integer>3</integer>
        </value>
      </nameValuePair>
    </configurationParameterSettings>

    <flowConstraints>
      <fixedFlow>
        <node>BlueJTestMultiplier1</node>
        <node>BlueJTestMultiplier2</node>
        <node>BlueJInnerRemoteCMAggregate</node>
        <node>BlueJNoOpCandidateAnswerCM</node>
        <node>BlueJNoOpCC</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>
