<?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.    
-->

<cpeDescription>
	<collectionReader>
		<collectionIterator>
			<descriptor>
				<import location="CSQueueCollectionReader.xml" />
			</descriptor>
			<configurationParameterSettings>
				<nameValuePair>
					<name>ServerAddress</name>
					<value>
						<string>http://localhost:8080/rest</string>
					</value>
				</nameValuePair>
				<nameValuePair>
					<name>CorpusName</name>
					<value>
						<string>enwikinews</string>
					</value>
				</nameValuePair>
				<nameValuePair>
					<name>SearchQuery</name>
					<value>
						<string>*:*</string>
					</value>
				</nameValuePair>
				<nameValuePair>
					<name>QueueName</name>
					<value>
						<string>enwikinewsnlpqueue</string>
					</value>
				</nameValuePair>
				<nameValuePair>
					<name>IdFSTypeName</name>
					<value>
						<string>org.apache.opennlp.annotations.ArticleId</string>
					</value>
				</nameValuePair>
				<nameValuePair>
					<name>IdFeatureName</name>
					<value>
						<string>id</string>
					</value>
				</nameValuePair>
			</configurationParameterSettings>
		</collectionIterator>
	</collectionReader>
	<casProcessors casPoolSize="2" processingUnitThreadCount="1">
		<casProcessor deployment="integrated" name="TokenizerAndSentdetectAAE">
			<descriptor>
				<import location="TokenizerAndSentdetectAAE.xml" />
			</descriptor>
			<deploymentParameters />
			<filter></filter>
			<errorHandling>
				<errorRateThreshold action="terminate" value="100/1000" />
				<maxConsecutiveRestarts action="terminate"
					value="30" />
				<timeout max="100000" />
			</errorHandling>
			<checkpoint batch="10000" />
		</casProcessor>
		<casProcessor deployment="integrated" name="CSWriter">
			<descriptor>
				<import location="CSCasWriter.xml" />
			</descriptor>
			<configurationParameterSettings>
				<nameValuePair>
					<name>ServerAddress</name>
					<value>
						<string>http://localhost:8080/rest</string>
					</value>
				</nameValuePair>
				<nameValuePair>
					<name>CorpusName</name>
					<value>
						<string>enwikinews</string>
					</value>
				</nameValuePair>

				<nameValuePair>
					<name>IdFSTypeName</name>
					<value>
						<string>org.apache.opennlp.annotations.ArticleId</string>
					</value>
				</nameValuePair>

				<nameValuePair>
					<name>IdFeatureName</name>
					<value>
						<string>id</string>
					</value>
				</nameValuePair>
			</configurationParameterSettings>
			<deploymentParameters />
			<filter></filter>
			<errorHandling>
				<errorRateThreshold action="terminate" value="100/1000" />
				<maxConsecutiveRestarts action="terminate"
					value="30" />
				<timeout max="100000" />
			</errorHandling>
			<checkpoint batch="10000" />
		</casProcessor>
	</casProcessors>
	<cpeConfig>
		<numToProcess>-1</numToProcess>
		<deployAs>immediate</deployAs>
		<checkpoint file="" time="300000" />
		<timerImpl></timerImpl>
	</cpeConfig>
</cpeDescription>
