<?xml version="1.0"?>
<!--
  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.
-->
<!-- $Id$ -->
<role-list>

    <!-- default indexer -->
  <role name="org.apache.cocoon.components.search.components.Indexer/default" shorthand="default_indexer"
default-class="org.apache.cocoon.components.search.components.impl.DefaultIndexerImpl"/>

    <!-- parallel indexer -->
  <role name="org.apache.cocoon.components.search.components.Indexer/parallel" shorthand="parallel_indexer"
default-class="org.apache.cocoon.components.search.components.impl.ParallelIndexerImpl"/>

	<!-- analyzer manager -->
  <role name="org.apache.cocoon.components.search.components.AnalyzerManager" shorthand="analyzer_manager"
default-class="org.apache.cocoon.components.search.components.impl.AnalyzerManagerImpl"/>

	<!-- index manager -->
  <role name="org.apache.cocoon.components.search.components.IndexManager" shorthand="index_manager"
default-class="org.apache.cocoon.components.search.components.impl.IndexManagerImpl"/>

</role-list>
