<!--
  ~ 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.
  -->

<ipojo
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="org.apache.felix.ipojo"
>

    <!--  Inherited Provides -->
    <component
     classname="org.apache.felix.ipojo.runtime.core.components.inherited.ProcessImplementation1"
     name="PS-PI1" architecture="true">
        <provides/>
    </component>

    <component
     classname="org.apache.felix.ipojo.runtime.core.components.inherited.ProcessImplementation1"
     name="PS-PI1-1" architecture="true">
        <provides
         specifications="org.apache.felix.ipojo.runtime.core.services.ParentParentInterface"/>
    </component>

    <component
     classname="org.apache.felix.ipojo.runtime.core.components.inherited.ProcessImplementation1"
     name="PS-PI1-2" architecture="true">
        <provides
         specifications="{org.apache.felix.ipojo.runtime.core.services.ParentParentInterface, org.apache.felix.ipojo.runtime.core.services.ParentInterface2}"/>
    </component>

    <component
     classname="org.apache.felix.ipojo.runtime.core.components.inherited.ProcessImplementation2"
     name="PS-PI2" architecture="true">
        <provides/>
    </component>

    <component
     classname="org.apache.felix.ipojo.runtime.core.components.inherited.ProcessImplementation2"
     name="PS-PI2-1" architecture="true">
        <provides
         specifications="org.apache.felix.ipojo.runtime.core.services.ParentParentInterface"/>
    </component>

    <component
     classname="org.apache.felix.ipojo.runtime.core.components.inherited.ProcessImplementation3"
     name="PS-PI3" architecture="true">
        <provides/>
    </component>
</ipojo>
