<?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">
  <primitive>true</primitive>
  <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
  <annotatorImplementationName>org.apache.uima.solrcas.SolrCASConsumer</annotatorImplementationName>
  <processingResourceMetaData>
    <name>SolrcasAE</name>
    <description/>
    <version>0.1</version>
    <vendor>ASF</vendor>
    <configurationParameters>
      <configurationParameter>
        <name>mappingFile</name>
        <description>path to the mapping file</description>
        <type>String</type>
        <multiValued>false</multiValued>
        <mandatory>true</mandatory>
      </configurationParameter>
      <configurationParameter>
        <name>solrInstanceType</name>
        <description>type of Solr instance, one of http or embedded</description>
        <type>String</type>
        <multiValued>false</multiValued>
        <mandatory>true</mandatory>
      </configurationParameter>
      <configurationParameter>
        <name>solrPath</name>
        <description>If the Solr instance is of HTTP type this represents the URL otherwise this is
          the Solr home directory</description>
        <type>String</type>
        <multiValued>false</multiValued>
        <mandatory>true</mandatory>
      </configurationParameter>
      <configurationParameter>
        <name>autoCommit</name>
        <description>true if Solr autocommit is enabled</description>
        <type>Boolean</type>
        <multiValued>false</multiValued>
        <mandatory>true</mandatory>
      </configurationParameter>
    </configurationParameters>
    <configurationParameterSettings>
      <nameValuePair>
        <name>mappingFile</name>
        <value>
          <string>/solrmapping.xml</string>
        </value>
      </nameValuePair>
      <nameValuePair>
        <name>solrInstanceType</name>
        <value>
          <string>http</string>
        </value>
      </nameValuePair>
      <nameValuePair>
        <name>solrPath</name>
        <value>
          <string>http://localhost:8983/solr</string>
        </value>
      </nameValuePair>
      <nameValuePair>
        <name>autoCommit</name>
        <value>
          <boolean>false</boolean>
        </value>
      </nameValuePair>
    </configurationParameterSettings>
    <typeSystemDescription/>
    <typePriorities/>
    <fsIndexCollection/>
    <capabilities>
      <capability>
        <inputs/>
        <outputs/>
        <languagesSupported/>
      </capability>
    </capabilities>
    <operationalProperties>
      <modifiesCas>false</modifiesCas>
      <multipleDeploymentAllowed>true</multipleDeploymentAllowed>
      <outputsNewCASes>false</outputsNewCASes>
    </operationalProperties>
  </processingResourceMetaData>
</analysisEngineDescription>
