<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.vmware.com/vcloud/extensibility/v1.0"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:meta="http://www.vmware.com/vcloud/meta"
    jaxb:extensionBindingPrefixes="meta" elementFormDefault="qualified"
    targetNamespace="http://www.vmware.com/vcloud/extensibility/v1.0"
    version="1.0">

    <!-- Add documentation. Added in/... -->
    <xs:include schemaLocation="extensibility-core.xsd" />

    <xs:annotation>
        <xs:documentation xml:lang="en">
            Schema for platform extensibility's network fabric extension point.
        </xs:documentation>
    </xs:annotation>

    <xs:complexType name="ErrorType">
        <xs:sequence>
            <xs:element name="ErrorCode" type="xs:int" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        Error code returned by extension
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="ErrorMessage" type="xs:string" minOccurs = "1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        Error message returned by extension
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="NetworkExtensionOperationStatus">
        <xs:sequence>
            <xs:element name="Success" type="xs:boolean" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        Status of the response
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="Error" type="ErrorType" minOccurs = "0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        Error returned by extension
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="NetworkIdType">
        <xs:sequence>
            <xs:element name="NetworkId" type="xs:string" minOccurs="1"
                maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        Moref of the network
                        for which information is required
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="NetworkBackingsType">
        <xs:sequence>
            <xs:element name="NetworkBacking" type="NetworkBackingType" minOccurs="1"
                maxOccurs="unbounded">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        Networks information which contains network id, virtual wire id and dvpg moref
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="NetworkBackingType">
        <xs:sequence>
            <xs:element name="NetworkId" type="xs:string" minOccurs="1"
                maxOccurs="1">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        NetworkId
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="VirtualWireId" type="xs:string" minOccurs="1"
                maxOccurs="1">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        Virtual wire id for the corresponding network id
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="DvpgMoRef" type="xs:string" minOccurs="1"
                maxOccurs="1">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        Dvpg moref for the corresponding network id
                    </xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:element name="ResolveNetworksBackingRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="TransportZoneId" type="xs:string" minOccurs="1"
                    maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation source="modifiable">none</xs:documentation>
                        <xs:documentation xml:lang="en">
                            Transport Zone ID.
                        </xs:documentation>
                        <xs:documentation source="required">false</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="ResourcePool" type="xs:anyURI" minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            The resource pool backing the VM represented as a URI.
                            Example:
                            moref://vcenter-id/ResourcePool#resource-pool-moref
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="NetworkIds" type="NetworkIdType"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            IDs of networks for which the backing information is required
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="ResolveNetworksBackingResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Status" type="NetworkExtensionOperationStatus" minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Status of the ResolveNetworksBackingRequest
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="ResourcePool" type="xs:anyURI" minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            The resource pool backing the VM represented as a URI.
                            Example:
                            moref://vcenter-id/ResourcePool#resource-pool-moref
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="NetworksInformation" type="NetworkBackingsType" minOccurs="0"
                    maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            All the resolved networks backing information
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>


    <xs:element name="NetworkCreationResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Status" type="NetworkExtensionOperationStatus" minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Status of the ResolveNetworksBackingRequest
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="NetworkId" type="xs:string" minOccurs="0"
                    maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of the network created
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>


    <xs:element name="NetworkDeletionRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="NetworkId" type="xs:string" minOccurs="1"
                    maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of the network to
                            be deleted
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="NetworkDeletionResponse">
        <xs:complexType>
            <xs:sequence>
            	<xs:element name="NetworkId" type="xs:string" minOccurs="1"
                    maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of the deleted network
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Status" type="NetworkExtensionOperationStatus" minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Status of the Network Deltion Request
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="CreateTransportZoneRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ProviderVdcId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of provider VDC.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="NetworkPoolId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of network pool for which transport zone is being created.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Name" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Name of network pool.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Description" type="xs:string"
                    minOccurs="0" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Description of network pool.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Hubs">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Hub" minOccurs="1"
                                maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:attribute name="hubUri"
                                        use="required" type="xs:anyURI">
                                        <xs:annotation>
                                            <xs:documentation
                                                xml:lang="en">
                                                The resource pool backing the provider VDC represented as a URI.
                                                Example:
                                                moref://vcenter-id/ResourcePool#resource-pool-moref
                                            </xs:documentation>
                                        </xs:annotation>
                                    </xs:attribute>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="UpdateTransportZoneRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="NetworkPoolId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of network pool.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="TransportZoneId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of transport zone.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Hubs">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="Hub" minOccurs="1"
                                maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:attribute name="hubUri"
                                        use="required" type="xs:anyURI">
                                        <xs:annotation>
                                            <xs:documentation
                                                xml:lang="en">
                                                The resource pool backing the provider VDC represented as a URI.
                                                Example:
                                                moref://vcenter-id/ResourcePool#resource-pool-moref
                                            </xs:documentation>
                                        </xs:annotation>
                                    </xs:attribute>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="UpdateTransportZoneResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="NetworkPoolId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of network pool.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="TransportZoneId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of transport zone.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                    <xs:element name="Status" type="NetworkExtensionOperationStatus" minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Status of the update transport zone operation.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="DeleteTransportZoneRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="NetworkPoolId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of network pool.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="TransportZoneId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of transport zone.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="DeleteTransportZoneResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="NetworkPoolId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of network pool.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="TransportZoneId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of transport zone.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Status" type="NetworkExtensionOperationStatus" minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Status of the delete transport zone operation.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="CreateTransportZoneResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="NetworkPoolId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of network pool for which transport zone is being created.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="TransportZoneId" type="xs:string"
                    minOccurs="0" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of transport zone created.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Status" type="NetworkExtensionOperationStatus" minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Status of the CreateVxlanNetworkPoolResponse
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="MergeTransportZonesRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="TargetNetworkPoolId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of network pool.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="TargetTransportZoneId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of transport zone that is the target for merge operation.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="SourceTransportZones">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="SourceTransportZoneId" minOccurs="1"
                                maxOccurs="unbounded" type="xs:string">
                                <xs:annotation>
                                    <xs:documentation xml:lang="en">
                                        ID of transport zone to merge with target transport zone.
                                    </xs:documentation>
                                </xs:annotation>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="MergeTransportZonesResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="TargetNetworkPoolId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of network pool.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="TargetTransportZoneId" type="xs:string"
                    minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            ID of transport zone that is the target for merge operation.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Status" type="NetworkExtensionOperationStatus" minOccurs="1" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Status of the merge transport zones operations.
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="NetworkCreationRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="TransportZoneId" type="xs:string" minOccurs="1"
                    maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Transport Zone ID
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Name" type="xs:string" minOccurs="1"
                    maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Network name
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="Description" type="xs:string"
                    minOccurs="0" maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Network description
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="TenantId" type="xs:string" minOccurs="0"
                    maxOccurs="1">
                    <xs:annotation>
                        <xs:documentation xml:lang="en">
                            Tenant ID
                        </xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>