<!--
  ~ 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"
    xsi:schemaLocation="org.apache.felix.ipojo http://felix.apache.org/ipojo/schemas/SNAPSHOT/core.xsd"
    xmlns="org.apache.felix.ipojo">

  <!--  Simple Filter Dependencies -->
  <component
    classname="org.apache.felix.ipojo.runtime.core.test.components.filter.FilterCheckProvider"
    name="SimpleFilterCheckServiceProvider" architecture="true">
    <provides>
      <property field="m_toto" name="toto" value="A" />
    </provides>
  </component>

  <component
    classname="org.apache.felix.ipojo.runtime.core.test.components.filter.FilterCheckSubscriber"
    name="SimpleFilterCheckServiceSubscriber" architecture="true">
    <requires field="m_foo" filter="(toto=B)" id="id1" proxy="false">
      <callback type="bind" method="Bind" />
      <callback type="unbind" method="Unbind" />
    </requires>
    <provides />
  </component>
  
  <component
    classname="org.apache.felix.ipojo.runtime.core.test.components.filter.FilterCheckSubscriber"
    name="SimpleFromCheckServiceSubscriber" architecture="true">
    <requires field="m_foo" from="A" id="id1" proxy="false">
      <callback type="bind" method="Bind" />
      <callback type="unbind" method="Unbind" />
    </requires>
    <provides />
  </component>
  
  <component
    classname="org.apache.felix.ipojo.runtime.core.test.components.filter.FilterCheckProvider"
    name="SimplePIDCheckServiceProvider" architecture="true">
    <provides>
      <property type="String" name="service.pid" />
    </provides>
  </component>

  <component
    classname="org.apache.felix.ipojo.runtime.core.test.components.filter.FilterCheckSubscriber"
    name="SimpleFilterCheckServiceSubscriber2" architecture="true">
    <requires field="m_foo" id="id2" proxy="false">
      <callback type="bind" method="Bind" />
      <callback type="unbind" method="Unbind" />
    </requires>
    <provides />
  </component>

  <!--  Optional Simple Filter Dependencies -->
  <component
    classname="org.apache.felix.ipojo.runtime.core.test.components.filter.FilterCheckSubscriber"
    name="OptionalSimpleFilterCheckServiceSubscriber"
    architecture="true">
    <requires field="m_foo" filter="(toto=B)" id="id1"
      optional="true" proxy="false">
      <callback type="bind" method="Bind" />
      <callback type="unbind" method="Unbind" />
    </requires>
    <provides />
  </component>

  <component
    classname="org.apache.felix.ipojo.runtime.core.test.components.filter.FilterCheckSubscriber"
    name="OptionalSimpleFilterCheckServiceSubscriber2"
    architecture="true">
    <requires field="m_foo" id="id2" optional="true" proxy="false">
      <callback type="bind" method="Bind" />
      <callback type="unbind" method="Unbind" />
    </requires>
    <provides />
  </component>

  <!-- Aggregate filter Dependencies-->
  <component
    classname="org.apache.felix.ipojo.runtime.core.test.components.filter.MultipleFilterCheckSubscriber"
    name="MultipleFilterCheckServiceSubscriber" architecture="true">
    <requires field="m_foo" filter="(toto=B)" id="id1" proxy="false">
      <callback type="bind" method="Bind" />
      <callback type="unbind" method="Unbind" />
    </requires>
    <provides />
  </component>

  <component
    classname="org.apache.felix.ipojo.runtime.core.test.components.filter.MultipleFilterCheckSubscriber"
    name="MultipleFilterCheckServiceSubscriber2" architecture="true">
    <requires field="m_foo" id="id2" proxy="false">
      <callback type="bind" method="Bind" />
      <callback type="unbind" method="Unbind" />
    </requires>
    <provides />
  </component>

  <!--  Optional Aggregate Filter Dependencies -->
  <component
    classname="org.apache.felix.ipojo.runtime.core.test.components.filter.MultipleFilterCheckSubscriber"
    name="OptionalMultipleFilterCheckServiceSubscriber"
    architecture="true">
    <requires field="m_foo" filter="(toto=B)" id="id1" proxy="false"
      optional="true">
      <callback type="bind" method="Bind" />
      <callback type="unbind" method="Unbind" />
    </requires>
    <provides />
  </component>

  <component
    classname="org.apache.felix.ipojo.runtime.core.test.components.filter.MultipleFilterCheckSubscriber"
    name="OptionalMultipleFilterCheckServiceSubscriber2"
    architecture="true">
    <requires field="m_foo" id="id2" optional="true" proxy="false">
      <callback type="bind" method="Bind" />
      <callback type="unbind" method="Unbind" />
    </requires>
    <provides />
  </component>

</ipojo>
