<!--
  ~ 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.
  -->
<xs:schema targetNamespace="org.apache.felix.ipojo.handler.temporal"
	xmlns="org.apache.felix.ipojo.handler.temporal"
	xmlns:xs="http://www.w3.org/2001/XMLSchema"
	elementFormDefault="qualified">
	<xs:element name="requires" type="TemporalServiceDependencyType"></xs:element>

	<xs:complexType name="TemporalServiceDependencyType">

        <xs:annotation>
        	<xs:documentation>Description of a temporal dependency.</xs:documentation>
        </xs:annotation>
        <xs:attribute name="field" type="xs:string" use="required">
        	<xs:annotation>
        		<xs:documentation>The implementation field supporting the dependency.</xs:documentation>
        	</xs:annotation></xs:attribute>
        <xs:attribute name="id" type="xs:string" use="optional">
        	<xs:annotation>
        		<xs:documentation>The dependency id</xs:documentation>
        	</xs:annotation></xs:attribute>
		<xs:attribute name="filter" type="xs:string" use="optional">
			<xs:annotation>
				<xs:documentation>Filter use to discover matching filter.</xs:documentation></xs:annotation></xs:attribute>
		<xs:attribute name="timeout" type="xs:int" use="optional">
			<xs:annotation>
				<xs:documentation>Specifies the timeout after which the onTimeout policy is executed. The value is the time in ms to wait. -1 is used to indicate an infinite wait.</xs:documentation>
			</xs:annotation></xs:attribute>
		<xs:attribute name="onTimeout" use="optional" type="xs:string">
            <xs:annotation>
            	<xs:documentation>Specifies the onTimeout policy. This determines the object to inject when the service stills unavailable when the timeout expires. Several values are supported: 'nullable' means that a Nullable object will be injected, 'empty-array' injects an empty array (only for aggregate dependency), 'null' injects Null, any other value are interpreted as the default implementation class to use. If the onTimetout attribute is not specified, a RuntimeException is thrown when the timeout is reached.</xs:documentation>
            </xs:annotation>
		</xs:attribute>
		<xs:attribute name="proxy" use="optional" type="xs:boolean">
            <xs:annotation>
            	<xs:documentation>Enables or Disables the proxy injection</xs:documentation>
            </xs:annotation>
		</xs:attribute>
		<xs:attribute name="specification" use="optional" type="xs:string">
            <xs:annotation>
            	<xs:documentation>Specifies the looked service specification. This attribute is mandatory when injecting in a Collection</xs:documentation>
            </xs:annotation>
		</xs:attribute>
	</xs:complexType>
</xs:schema>