<?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.
  -->

<component-set>
  <components>
    <component>
      <role>org.codehaus.modello.plugin.ModelloGenerator</role>
      <role-hint>registry-reader</role-hint>
      <implementation>org.apache.archiva.redback.components.registry.modello.RegistryReaderGenerator</implementation>
      <requirements>
        <requirement>
          <role>org.codehaus.plexus.velocity.VelocityComponent</role>
        </requirement>
      </requirements>
    </component>
    <component>
      <role>org.codehaus.modello.plugin.ModelloGenerator</role>
      <role-hint>registry-writer</role-hint>
      <implementation>org.apache.archiva.redback.components.registry.modello.RegistryWriterGenerator</implementation>
      <requirements>
        <requirement>
          <role>org.codehaus.plexus.velocity.VelocityComponent</role>
        </requirement>
      </requirements>
    </component>
  </components>
</component-set>
