<!--
  ~ 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"
>
	<component classname="org.apache.felix.ipojo.runtime.core.test.components.comparator.GradedFooServiceProvider"
		name="COMPARATOR-gradedFooProvider">
		<provides>
			<property field="grade"/>
		</provides>
	</component>
	
	
	<component classname="org.apache.felix.ipojo.runtime.core.test.components.comparator.CheckServiceProvider"
		name="COMPARATOR-DynamicCheckService">
		<provides/>
		<requires field="fs" comparator="org.apache.felix.ipojo.runtime.core.test.components.comparator.GradeComparator"/>
		<requires field="fss" comparator="org.apache.felix.ipojo.runtime.core.test.components.comparator.GradeComparator"/>
		<requires comparator="org.apache.felix.ipojo.runtime.core.test.components.comparator.GradeComparator">
			<callback type="bind" method="bind"/>
			<callback type="unbind" method="unbind"/>
		</requires>
	</component>
	
	<component classname="org.apache.felix.ipojo.runtime.core.test.components.comparator.CheckServiceProvider"
		name="COMPARATOR-DynamicPriorityCheckService">
		<provides/>
		<requires policy="dynamic-priority" field="fs" comparator="org.apache.felix.ipojo.runtime.core.test.components.comparator.GradeComparator"/>
		<requires policy="dynamic-priority" field="fss" comparator="org.apache.felix.ipojo.runtime.core.test.components.comparator.GradeComparator"/>
		<requires policy="dynamic-priority" comparator="org.apache.felix.ipojo.runtime.core.test.components.comparator.GradeComparator">
			<callback type="bind" method="bind"/>
			<callback type="unbind" method="unbind"/>
		</requires>
	</component>
	
</ipojo>
