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

    <!--
     |
     | Build Project Task Queue
     |
     |-->

    <component>
      <role>org.codehaus.plexus.taskqueue.TaskQueue</role>
      <role-hint>build-project</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-evaluator>build-project</task-viability-evaluator>
        </task-viability-evaluators>
      </configuration>
    </component>

    <component>
      <role>org.codehaus.plexus.taskqueue.TaskViabilityEvaluator</role>
      <role-hint>build-project</role-hint>
      <implementation>
        org.apache.maven.continuum.buildqueue.evaluator.BuildProjectTaskViabilityEvaluator</implementation>
      <configuration>
        <required-buildInterval>1000</required-buildInterval>
      </configuration>
    </component>

    <component>
      <role>org.codehaus.plexus.taskqueue.execution.TaskExecutor</role>
      <role-hint>build-project</role-hint>
      <implementation>org.apache.maven.continuum.buildcontroller.BuildProjectTaskExecutor</implementation>
      <requirements>
        <requirement>
          <role>org.apache.maven.continuum.buildcontroller.BuildController</role>
        </requirement>
      </requirements>
    </component>

    <component>
      <role>org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor</role>
      <role-hint>build-project</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>build-project</role-hint>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.taskqueue.TaskQueue</role>
          <role-hint>build-project</role-hint>
        </requirement>
      </requirements>
      <configuration>
        <name>build-project</name>
      </configuration>
    </component>

    <!--
     |
     | Check Out Task Queue
     |
     |-->

    <component>
      <role>org.codehaus.plexus.taskqueue.TaskQueue</role>
      <role-hint>check-out-project</role-hint>
      <implementation>org.codehaus.plexus.taskqueue.DefaultTaskQueue</implementation>
      <lifecycle-handler>plexus-configurable</lifecycle-handler>
    </component>


    <component>
      <role>org.codehaus.plexus.taskqueue.execution.TaskQueueExecutor</role>
      <role-hint>check-out-project</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>check-out-project</role-hint>
        </requirement>
        <requirement>
          <role>org.codehaus.plexus.taskqueue.TaskQueue</role>
          <role-hint>check-out-project</role-hint>
        </requirement>
      </requirements>
      <configuration>
        <name>check-out-project</name>
      </configuration>
    </component>


  </components>
</component-set>
