<?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.
	 ***************************************************************
   -->
   
<!--
	Descriptor for a primitive TAE that uses the TutorialDateTime annotator
-->
<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
	<frameworkImplementation>org.apache.uima.java</frameworkImplementation>
	<primitive>true</primitive>
	<annotatorImplementationName>org.apache.uima.tutorial.ex4.MeetingAnnotator</annotatorImplementationName>


	<analysisEngineMetaData>
		<name>Meeting Annotator</name>
		<description>Detects meetings from co-occurrences of room numbers, dates, and
			times</description>
		<version>1.0</version>
		<vendor>The Apache Software Foundation</vendor>
		
		<configurationParameters>
			<configurationParameter>
				<name>WindowSize</name>
				<description>Maximum number of characters within which a room number, a
					date, and two times must occur for a meeting annotation to be
					created.</description>
				<type>Integer</type>
				<multiValued>false</multiValued>
				<mandatory>true</mandatory>
			</configurationParameter>
		</configurationParameters>
		
		<configurationParameterSettings>
			<nameValuePair>
				<name>WindowSize</name>
				<value>
					<integer>200</integer>
				</value>
			</nameValuePair>
		</configurationParameterSettings>
		
		<!--
		TypeSystem Definition
		-->
		
		<typeSystemDescription>
			<imports>
				<import location="TutorialTypeSystem.xml"/>
			</imports>
		</typeSystemDescription>
		
		<!--
		Capabilities: Inputs, Outputs, and Preconditions
		-->
		<capabilities>
			<capability>
				<inputs>
					<type allAnnotatorFeatures="true">
						org.apache.uima.tutorial.RoomNumber</type>
					<type allAnnotatorFeatures="true">
						org.apache.uima.tutorial.TimeAnnot</type>
					<type allAnnotatorFeatures="true">
						org.apache.uima.tutorial.DateAnnot</type>
				</inputs>
				<outputs>
					<type allAnnotatorFeatures="true">
						org.apache.uima.tutorial.Meeting</type>
				</outputs>
				<languagesSupported>
					<language>en</language>
				</languagesSupported>
			</capability>
		</capabilities>
		<operationalProperties>
			<modifiesCas>true</modifiesCas>
			<multipleDeploymentAllowed>true</multipleDeploymentAllowed>
			<outputsNewCASes>false</outputsNewCASes>
		</operationalProperties>
	</analysisEngineMetaData>
</analysisEngineDescription>
