<?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>true</primitive>
  <annotatorImplementationName>org.apache.uima.ae.noop.NoOpAnnotator</annotatorImplementationName>
  <analysisEngineMetaData>
    <name>NoOpAnnotator</name>
    <description>Annotator That Does Nothin</description>
    <version>1.0</version>
    <vendor>The Apache Software Foundation</vendor>
    
    <configurationParameters>
      <configurationParameter>
        <name>ErrorFrequency</name>
        <description>Frequency of Generated Errors</description>
        <type>Integer</type>
        <multiValued>false</multiValued>
        <mandatory>true</mandatory>
      </configurationParameter>

      <configurationParameter>
        <name>ProcessDelay</name>
        <description>Process Delay</description>
        <type>Integer</type>
        <multiValued>false</multiValued>
        <mandatory>true</mandatory>
      </configurationParameter>
    
      <configurationParameter>
        <name>FailDuringInitialization</name>
        <description>Causes Failure During Initialization</description>
        <type>Integer</type>
        <multiValued>false</multiValued>
        <mandatory>true</mandatory>
      </configurationParameter>

    </configurationParameters>
    
    <configurationParameterSettings>
      <nameValuePair>
        <name>ErrorFrequency</name>
        <value>
          <integer>0</integer>
        </value>
      </nameValuePair>

      <nameValuePair>
        <name>ProcessDelay</name>
        <value>
          <integer>0</integer>
        </value>
      </nameValuePair>
    
      <nameValuePair>
        <name>FailDuringInitialization</name>
        <value>
          <integer>0</integer>
        </value>
      </nameValuePair>

    </configurationParameterSettings>
    
    <typeSystemDescription>
    </typeSystemDescription>
    
    <capabilities>
    </capabilities>
	
    <operationalProperties>
		<modifiesCas>true</modifiesCas>
		<multipleDeploymentAllowed>true</multipleDeploymentAllowed>
		<outputsNewCASes>false</outputsNewCASes>
	</operationalProperties>	  
  </analysisEngineMetaData>
</analysisEngineDescription>
