<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema xmlns="http://www.mulesource.com/schema/mule/retry/2.0"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:mule="http://www.mulesource.org/schema/mule/core/2.0"
            xmlns:spring="http://www.springframework.org/schema/beans"
            xmlns:schemadoc="http://www.mulesource.org/schema/mule/schemadoc/2.0"
            targetNamespace="http://www.mulesource.com/schema/mule/retry/2.0"
            elementFormDefault="qualified"
            attributeFormDefault="unqualified">

    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
    <xsd:import namespace="http://www.mulesource.org/schema/mule/core/2.0"
                schemaLocation="http://www.mulesource.org/schema/mule/core/2.0/mule.xsd"/>
    <xsd:import namespace="http://www.springframework.org/schema/beans"
                schemaLocation="http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"/>
 
    <xsd:annotation>
        <xsd:documentation>Support for Retry Policies only available as part of Mule Enterprise</xsd:documentation>
        <xsd:appinfo>
            <schemadoc:short-name>retry-ee</schemadoc:short-name>
            <schemadoc:page-title>Retry Policies</schemadoc:page-title>
        </xsd:appinfo>
    </xsd:annotation>

    <xsd:element name="simple-policy" type="simpleRetryPolicyType"
                 substitutionGroup="mule:abstract-retry-policy">
        <xsd:annotation>
            <xsd:documentation>
                This policy allows the user to configure how many times a retry should 
                be attempted and how much time to wait between retries.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:complexType name="simpleRetryPolicyType">
        <xsd:complexContent>
            <xsd:extension base="mule:abstractRetryPolicyType">
                <xsd:attribute name="frequency" type="mule:substitutableLong" default="2000">
                    <xsd:annotation>
                        <xsd:documentation>How often (in ms) to retry</xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute>
                <xsd:attribute name="count" type="mule:substitutableInt" default="2">
                    <xsd:annotation>
                        <xsd:documentation>How many times to retry</xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:element name="forever-policy" type="foreverRetryPolicyType"
                 substitutionGroup="mule:abstract-retry-policy">
        <xsd:annotation>
            <xsd:documentation>
                Retry an infinite amount of times at the specified frequency.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:complexType name="foreverRetryPolicyType">
        <xsd:complexContent>
            <xsd:extension base="mule:abstractRetryPolicyType">
                <xsd:attribute name="frequency" type="mule:substitutableLong" default="2000">
                    <xsd:annotation>
                        <xsd:documentation>How often (in ms) to retry</xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:element name="custom-policy" type="customRetryPolicyType"
                 substitutionGroup="mule:abstract-retry-policy">
        <xsd:annotation>
            <xsd:documentation>
                A user-defined retry policy.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:complexType name="customRetryPolicyType">
        <xsd:complexContent>
            <xsd:extension base="mule:abstractRetryPolicyType">
                <xsd:sequence>
                    <xsd:element ref="spring:property" minOccurs="0" maxOccurs="unbounded"/>
                </xsd:sequence>
                <xsd:attribute name="class" type="mule:substitutableClass" use="required">
                    <xsd:annotation>
                        <xsd:documentation>A class that implements the RetryPolicyFactory interface.</xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:element name="connect-notifier" type="connectNotifierType"
                 substitutionGroup="mule:abstract-retry-notifier">
        <xsd:annotation>
            <xsd:documentation>
                Fires a ConnectionNotification when the Retry Policy succeeds or fails.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:complexType name="connectNotifierType">
        <xsd:complexContent>
            <xsd:extension base="mule:abstractRetryNotifierType"/>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:element name="custom-notifier" type="customNotifierType"
                 substitutionGroup="mule:abstract-retry-notifier">
        <xsd:annotation>
            <xsd:documentation>
                A user-defined retry notifier.
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:complexType name="customNotifierType">
        <xsd:complexContent>
            <xsd:extension base="mule:abstractRetryNotifierType">
                <xsd:sequence>
                    <xsd:element ref="spring:property" minOccurs="0" maxOccurs="unbounded"/>
                </xsd:sequence>
                <xsd:attribute name="class" type="mule:substitutableClass" use="required">
                    <xsd:annotation>
                        <xsd:documentation>A class that implements the RetryPolicyFactory interface.</xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

</xsd:schema>
