<!--
  ~ 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
	    org.apache.felix.composite http://felix.apache.org/ipojo/schemas/SNAPSHOT/composite.xsd"
	xmlns="org.apache.felix.ipojo"
	xmlns:comp="org.apache.felix.ipojo.composite">
	<!-- Used component type -->
	<component
		classname="org.apache.felix.ipojo.runtime.core.components.FooProviderType1"
		name="COMPO-FooProviderType-1" architecture="true">
		<provides />
	</component>
	<component
		classname="org.apache.felix.ipojo.runtime.core.components.FooProviderType1"
		name="COMPO-FooProviderType-2" architecture="true">
		<provides>
			<property name="int" type="int" value="2" />
			<property name="long" type="long" value="40" />
			<property name="string" type="java.lang.String" value="foo" />
			<property name="strAProp" type="java.lang.String[]"
				value="{foo, bar}" />
			<property name="intAProp" type="int[]" value="{1,2,3}" />
		</provides>
	</component>
	<component
		classname="org.apache.felix.ipojo.runtime.core.components.FooProviderTypeDyn"
		name="COMPO-FooProviderType-Dyn" architecture="true">
		<provides>
			<property name="int" field="intProp" value="2" />
			<property name="boolean" field="boolProp" value="false" />
			<property name="string" field="strProp" value="foo" />
			<property name="strAProp" field="strAProp"
				value="{foo, bar}" />
			<property name="intAProp" field="intAProp" value="{ 1,2,3}" />
		</provides>
	</component>
	<component
		classname="org.apache.felix.ipojo.runtime.core.components.FooProviderTypeDyn2"
		name="COMPO-FooProviderType-Dyn2" architecture="true">
		<provides>
			<property name="int" field="intProp" value="4" />
			<property name="boolean" field="boolProp" />
			<property name="string" field="strProp" />
			<property name="strAProp" field="strAProp" />
			<property name="intAProp" field="intAProp"
				value="{1, 2,3 }" />
		</provides>
	</component>
	<component
		classname="org.apache.felix.ipojo.runtime.core.components.CheckServiceProvider"
		name="COMPO-SimpleCheckServiceProvider" architecture="true">
		<requires field="fs" />
		<provides />
	</component>
	<component
		classname="org.apache.felix.ipojo.runtime.core.components.FooBarProviderType1"
		name="COMPO-FooBarProviderType-1" architecture="true">
		<provides />
	</component>
	<component
		classname="org.apache.felix.ipojo.runtime.core.components.FooBarProviderType1"
		name="COMPO-FooBarProviderType-2" architecture="true">
		<provides
			specifications="{org.apache.felix.ipojo.test.composite.service.FooService, org.apache.felix.ipojo.test.composite.service.BarService }" />
	</component>
	<component
		classname="org.apache.felix.ipojo.runtime.core.components.FooBarProviderType1"
		name="COMPO-FooBarProviderType-3" architecture="true">
		<provides
			specifications="{org.apache.felix.ipojo.test.composite.service.FooService}">
			<property name="baz" type="java.lang.String" value="foo" />
		</provides>
		<provides
			specifications="{org.apache.felix.ipojo.test.composite.service.BarService}">
			<property name="baz" type="java.lang.String" value="bar" />
		</provides>
	</component>

	<component
		classname="org.apache.felix.ipojo.runtime.core.components.BazProviderType1"
		name="BazProviderType">
		<provides />
	</component>

	<component
		classname="org.apache.felix.ipojo.runtime.core.components.TataProvider"
		name="tata">
		<provides />
	</component>

	<component
		classname="org.apache.felix.ipojo.runtime.core.components.TotoProvider"
		name="toto" architecture="true">
		<provides />
	</component>

	<component
		classname="org.apache.felix.ipojo.runtime.core.components.TotoProviderGlue"
		name="totoglue">
		<requires field="m_toto" scope="composite" />
	</component>

	<!--  Composite -->
	<comp:composite name="composite.empty" architecture="true">
	</comp:composite>

	<component classname="org.apache.felix.ipojo.runtime.core.components.Baz2CheckProvider" name="Baz2CheckProvider" architecture="true">
		<requires field="fs" scope="composite"/>
		<provides/>
	</component>

</ipojo>
