<!--
  ~ 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.
  -->

<component-set>
  <components>

    <!--
    |
    | Purge Task Queue
    |
    |-->

    <component>
      <role>org.codehaus.plexus.taskqueue.TaskQueue</role>
      <role-hint>purge</role-hint>
      <implementation>org.codehaus.plexus.taskqueue.DefaultTaskQueue</implementation>
      <lifecycle-handler>plexus-configurable</lifecycle-handler>
      <configuration>
        <task-entry-evaluators>
        </task-entry-evaluators>
        <task-exit-evaluators>
        </task-exit-evaluators>
        <task-viability-evaluators>
        </task-viability-evaluators>
      </configuration>
    </component>

    <component>
      <role>org.codehaus.plexus.taskqueue.execution.TaskExecutor</role>
      <role-hint>purge</role-hint>
      <implementation>org.apache.continuum.purge.task.PurgeTaskExecutor</implementation>
      <requirements>
        <requirement>
          <role>org.apache.continuum.purge.PurgeConfigurationService</role>
          <role-hint>default</role-hint>
        </requirement>
        <requirement>
          <role>org.apache.continuum.purge.repository.scanner.RepositoryScanner</role>
          <role-hint>repository-scanner</role-hint>
        </requirement>
      </requirements>
    </component>

    <component>
      <role>org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor</role>
      <role-hint>purge</role-hint>
      <implementation>org.codehaus.plexus.taskqueue.execution.ThreadedTaskQueueExecutor</implementation>
      <instantiation-strategy>singleton</instantiation-strategy>
      <requirements>
        <requirement>
          <role>org.codehaus.plexus.taskqueue.execution.TaskExecutor</role>
          <role-hint>purge</role-hint>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.taskqueue.TaskQueue</role>
          <role-hint>purge</role-hint>
        </requirement>
      </requirements>
      <configuration>
        <name>purge</name>
      </configuration>
    </component>

    <component>
      <role>org.apache.continuum.purge.repository.utils.FileTypes</role>
      <role-hint>file-types</role-hint>
      <implementation>org.apache.continuum.purge.repository.utils.FileTypes</implementation>
      <configuration>
        <artifactFileTypePatterns>
          <artifactFileTypePattern>**/*.pom</artifactFileTypePattern>
          <artifactFileTypePattern>**/*.jar</artifactFileTypePattern>
          <artifactFileTypePattern>**/*.ear</artifactFileTypePattern>
          <artifactFileTypePattern>**/*.war</artifactFileTypePattern>
          <artifactFileTypePattern>**/*.car</artifactFileTypePattern>
          <artifactFileTypePattern>**/*.sar</artifactFileTypePattern>
          <artifactFileTypePattern>**/*.mar</artifactFileTypePattern>
          <artifactFileTypePattern>**/*.rar</artifactFileTypePattern>
          <artifactFileTypePattern>**/*.dtd</artifactFileTypePattern>
          <artifactFileTypePattern>**/*.tld</artifactFileTypePattern>
          <artifactFileTypePattern>**/*.tar.gz</artifactFileTypePattern>
          <artifactFileTypePattern>**/*.tar.bz2</artifactFileTypePattern>
          <artifactFileTypePattern>**/*.zip</artifactFileTypePattern>
        </artifactFileTypePatterns>
      </configuration>
    </component>
  </components>
</component-set>