<?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.
	 ***************************************************************
   -->
   
<!-- For testing only. -->

<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier">
<frameworkImplementation>org.apache.uima.java</frameworkImplementation>
<primitive>true</primitive>
<annotatorImplementationName>org.apache.uima.examples.casMultiplier.SimpleTextSegmenter</annotatorImplementationName>
 
<analysisEngineMetaData>
	<name>Simple Text Segmenter</name>
	<description>Splits a text document into pieces. Approximate size of the segments as
		determined by the SegmentSize parameter, but the break between segments will always
		occur at a newline character, so segments will not be exactly that
		size.</description>
	<version>1.0</version>
	<vendor>The Apache Software Foundation</vendor>
	
	<configurationParameters>
		<configurationParameter>
			<name>SegmentSize</name>
			<description>Approximate number of characters that should be in each segment.</description>
			<type>Integer</type>
			<multiValued>false</multiValued>
			<mandatory>true</mandatory>
		</configurationParameter>
	</configurationParameters>
	<configurationParameterSettings>
		<nameValuePair>
			<name>SegmentSize</name>
			<value>
				<integer>100000</integer>
			</value>
		</nameValuePair>
	</configurationParameterSettings>

	<typeSystemDescription>
	  <imports>
		<import name="org.apache.uima.examples.SourceDocumentInformation"/>
	  </imports>
	</typeSystemDescription>
		
	<capabilities>
		<capability>
			<outputs/>
		</capability>
	</capabilities>
	
	<operationalProperties>
		<modifiesCas>false</modifiesCas>
		<multipleDeploymentAllowed>true</multipleDeploymentAllowed>
		<outputsNewCASes>true</outputsNewCASes>
	</operationalProperties>
	
</analysisEngineMetaData>
</analysisEngineDescription>