<?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.
	 ***************************************************************
   -->
   
<collectionReaderDescription  xmlns="http://uima.apache.org/resourceSpecifier">
    <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
    <implementationName>org.apache.opennlp.corpus_server.connector.CSQueueCollectionReader</implementationName>
    <processingResourceMetaData>
        <name>Corpus Server Collection Reader</name>
        <description>Reads CASes from a Corpus Server Queue.</description>
        <version>1.0</version>
        <vendor>The Apache Software Foundation</vendor>
        <configurationParameters>
            <configurationParameter>
                <name>ServerAddress</name>
                <description>The location of the server.</description>
                <type>String</type>
                <multiValued>false</multiValued>
                <mandatory>true</mandatory>
            </configurationParameter>
            <configurationParameter>
                <name>CorpusName</name>
                <description>The id of the corpus which should be processed.</description>
                <type>String</type>
                <multiValued>false</multiValued>
                <mandatory>true</mandatory>
            </configurationParameter>
            <configurationParameter>
                <name>SearchQuery</name>
                <description>The query to populate the queue.</description>
                <type>String</type>
                <multiValued>false</multiValued>
                <mandatory>true</mandatory>
            </configurationParameter>
            <configurationParameter>
                <name>QueueName</name>
                <description>Name of the queue to create with the search query.</description>
                <type>String</type>
                <multiValued>false</multiValued>
                <mandatory>true</mandatory>
            </configurationParameter>
        </configurationParameters>
		<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>status-token:true</string>
		        </value>
		    </nameValuePair>
		    <nameValuePair>
		        <name>QueueName</name>
		        <value>
		            <string>EnglishTokenizerTraining</string>
		        </value>
		    </nameValuePair>
		</configurationParameterSettings>
		
		<!-- Type System must be compatible with the one used for the corpus. -->
        <typeSystemDescription>
          <imports>
            <import location="TypeSystem.xml"/>
          </imports>
        </typeSystemDescription>

        <capabilities>
          	<capability>
          		<inputs/>
          		<outputs/>
          	</capability>
        </capabilities>
		<operationalProperties>
			<modifiesCas>true</modifiesCas>
			<multipleDeploymentAllowed>false</multipleDeploymentAllowed>
			<outputsNewCASes>true</outputsNewCASes>
		</operationalProperties>		
    </processingResourceMetaData>
</collectionReaderDescription>
