<?xml version="1.0" encoding="UTF-8"?>
<definitions targetNamespace="http://aggregate.geni.net/services/api/" xmlns:tns="http://aggregate.geni.net/services/api/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/">
  <types>
    <xs:schema elementFormDefault="qualified" targetNamespace="http://aggregate.geni.net/services/api/" xmlns:tns="http://aggregate.geni.net/services/api/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

			<xs:annotation>
				<xs:documentation xml:lang="en">
					GENI Aggregate Manager Interface: 
				</xs:documentation>
			</xs:annotation>


<!--  **************************************************************** -->
<!--  ***************** common types ********************************* -->
<!--  **************************************************************** -->


			<xs:complexType name="CapabilityType">
				<xs:sequence>
					<xs:element name="name" type="xs:string"/>
					<xs:element name="id" type="xs:string"/>
					<xs:element name="description" type="xs:string"/>
					<xs:element name="controllerURL" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<xs:complexType name="NodeDescriptorType">
				<xs:sequence>
					<xs:element name="urn" type="xs:string"/>
					<xs:element name="id" type="xs:string"/>
					<xs:element minOccurs="0" name="description" type="xs:string"/>
					<xs:sequence>
						<xs:element maxOccurs="unbounded" name="capability" type="tns:CapabilityType"/>
					</xs:sequence>
				</xs:sequence>
			</xs:complexType>

			<xs:complexType name="SliceStatusType">
				<xs:sequence>
					<xs:element name="id" type="xs:string"/>
					<xs:element name="status" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<!-- Fault -->
			<xs:element name="AggregateFault">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="msg" type="xs:string"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>

<!--  **************************************************************** -->
<!--  ************************ nodes and capabilities **************** -->
<!--  **************************************************************** -->

			<!-- ListCapabilities request definitions -->
			<xs:element name="ListCapabilities" type="tns:ListCapabilitiesType"/>
			<xs:complexType name="ListCapabilitiesType">
				<xs:sequence minOccurs="0">
					<xs:element name="filter" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<!-- ListCapabilities response definitions -->
			<xs:element name="ListCapabilitiesResponse" type="tns:ListCapabilitiesResponseType"/>
			<xs:complexType name="ListCapabilitiesResponseType">
				<xs:sequence maxOccurs="unbounded">
					<xs:element name="capability" type="tns:CapabilityType"/>
				</xs:sequence>
			</xs:complexType>

			<!-- ListNodes request definitions -->
			<xs:element name="ListNodes" type="tns:ListNodesType"/>
			<xs:complexType name="ListNodesType">
				<xs:sequence maxOccurs="unbounded">
					<xs:element name="capability" type="tns:CapabilityType"/>
				</xs:sequence>
			</xs:complexType>

			<!-- ListNodes response definitions -->
			<xs:element name="ListNodesResponse" type="tns:ListNodesResponseType"/>
			<xs:complexType name="ListNodesResponseType">
				<xs:sequence maxOccurs="unbounded">
					<xs:element name="node" type="tns:NodeDescriptorType"/>
				</xs:sequence>
			</xs:complexType>

<!--  **************************************************************** -->
<!--  ************************ slice manipulation ******************** -->
<!--  **************************************************************** -->

			<!-- CreateSlice request definitions -->
			<xs:element name="CreateSlice" type="tns:CreateSliceType"/>
			<xs:complexType name="CreateSliceType">
				<xs:sequence>
					<xs:element maxOccurs="unbounded" name="node" type="tns:NodeDescriptorType"/>
					<xs:element name="start" type="xs:int"/>
					<xs:element name="end" type="xs:int"/>
				</xs:sequence>
			</xs:complexType>

			<!-- CreateSlice response definitions -->
			<xs:element name="CreateSliceResponse" type="tns:CreateSliceResponseType"/>
			<xs:complexType name="CreateSliceResponseType">
				<xs:sequence>
					<xs:element name="sliceID" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<!-- DeleteSlice request definitions -->
			<xs:element name="DeleteSlice" type="tns:DeleteSliceType"/>
			<xs:complexType name="DeleteSliceType">
				<xs:sequence>
					<xs:element maxOccurs="unbounded" name="sliceID" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<!-- DeleteSlice response definitions -->
			<xs:element name="DeleteSliceResponse" type="tns:DeleteSliceResponseType"/>
			<xs:complexType name="DeleteSliceResponseType">
				<xs:sequence>
					<xs:element name="status" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<!-- UpdateSlice request definitions -->
			<xs:element name="UpdateSlice" type="tns:UpdateSliceType"/>
			<xs:complexType name="UpdateSliceType">
				<xs:sequence>
					<xs:element name="sliceID" type="xs:string"/>
					<xs:element maxOccurs="unbounded" name="node" type="tns:NodeDescriptorType"/>
				</xs:sequence>
			</xs:complexType>

			<!-- UpdateSlice response definitions -->
			<xs:element name="UpdateSliceResponse" type="tns:UpdateSliceResponseType"/>
			<xs:complexType name="UpdateSliceResponseType">
				<xs:sequence>
					<xs:element name="status" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

<!--  **************************************************************** -->
<!--  ************************ slice actions ************************* -->
<!--  **************************************************************** -->

			<!-- StartSlice request definitions -->
			<xs:element name="StartSlice" type="tns:StartSliceType"/>
			<xs:complexType name="StartSliceType">
				<xs:sequence>
					<xs:element maxOccurs="unbounded" name="sliceID" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<!-- StartSlice response definitions -->
			<xs:element name="StartSliceResponse" type="tns:StartSliceResponseType"/>
			<xs:complexType name="StartSliceResponseType">
				<xs:sequence>
					<xs:element name="status" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<!-- StopSlice request definitions -->
			<xs:element name="StopSlice" type="tns:StopSliceType"/>
			<xs:complexType name="StopSliceType">
				<xs:sequence>
					<xs:element maxOccurs="unbounded" name="sliceID" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<!-- StopSlice response definitions -->
			<xs:element name="StopSliceResponse" type="tns:StopSliceResponseType"/>
			<xs:complexType name="StopSliceResponseType">
				<xs:sequence>
					<xs:element name="status" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<!-- ResetSlice request definitions -->
			<xs:element name="ResetSlice" type="tns:ResetSliceType"/>
			<xs:complexType name="ResetSliceType">
				<xs:sequence>
					<xs:element maxOccurs="unbounded" name="sliceID" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<!-- ResetSlice response definitions -->
			<xs:element name="ResetSliceResponse" type="tns:ResetSliceResponseType"/>
			<xs:complexType name="ResetSliceResponseType">
				<xs:sequence>
					<xs:element name="status" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<!-- QuerySlice request definitions -->
			<xs:element name="QuerySlice" type="tns:QuerySliceType"/>
			<xs:complexType name="QuerySliceType">
				<xs:sequence>
					<xs:element maxOccurs="unbounded" name="sliceID" type="xs:string"/>
				</xs:sequence>
			</xs:complexType>

			<!-- QuerySlice response definitions -->
			<xs:element name="QuerySliceResponse" type="tns:QuerySliceResponseType"/>
			<xs:complexType name="QuerySliceResponseType">
				<xs:sequence>
					<xs:element name="status" type="tns:SliceStatusType"/>
				</xs:sequence>
			</xs:complexType>
		</xs:schema>
  </types>
  <message name="ListNodesResponseMsg">
    <part name="ListNodesMsgResp" element="tns:ListNodesResponse">
    </part>
  </message>
  <message name="CreateSliceRequestMsg">
    <part name="CreateSliceMsgReq" element="tns:CreateSlice">
    </part>
  </message>
  <message name="UpdateSliceRequestMsg">
    <part name="UpdateSliceMsgReq" element="tns:UpdateSlice">
    </part>
  </message>
  <message name="StartSliceRequestMsg">
    <part name="StartSliceMsgReq" element="tns:StartSlice">
    </part>
  </message>
  <message name="ListCapabilitiesResponseMsg">
    <part name="ListCapabilitiesMsgResp" element="tns:ListCapabilitiesResponse">
    </part>
  </message>
  <message name="ResetSliceResponseMsg">
    <part name="ResetSliceMsgResp" element="tns:ResetSliceResponse">
    </part>
  </message>
  <message name="ListNodesRequestMsg">
    <part name="ListNodesMsgReq" element="tns:ListNodes">
    </part>
  </message>
  <message name="DeleteSliceResponseMsg">
    <part name="DeleteSliceMsgResp" element="tns:DeleteSliceResponse">
    </part>
  </message>
  <message name="QuerySliceRequestMsg">
    <part name="QuerySliceMsgReq" element="tns:QuerySlice">
    </part>
  </message>
  <message name="StopSliceResponseMsg">
    <part name="StopSliceMsgResp" element="tns:StopSliceResponse">
    </part>
  </message>
  <message name="ListCapabilitiesRequestMsg">
    <part name="ListCapabilitiesMsgReq" element="tns:ListCapabilities">
    </part>
  </message>
  <message name="StopSliceRequestMsg">
    <part name="StopSliceMsgReq" element="tns:StopSlice">
    </part>
  </message>
  <message name="CreateSliceResponseMsg">
    <part name="CreateSliceMsgResp" element="tns:CreateSliceResponse">
    </part>
  </message>
  <message name="QuerySliceResponseMsg">
    <part name="QuerySliceMsgResp" element="tns:QuerySliceResponse">
    </part>
  </message>
  <message name="StartSliceResponseMsg">
    <part name="StartSliceMsgResp" element="tns:StartSliceResponse">
    </part>
  </message>
  <message name="AggregateFaultMessage">
    <part name="fault" element="tns:AggregateFault">
    </part>
  </message>
  <message name="DeleteSliceRequestMsg">
    <part name="DeleteSliceMsgReq" element="tns:DeleteSlice">
    </part>
  </message>
  <message name="ResetSliceRequestMsg">
    <part name="ResetSliceMsgReq" element="tns:ResetSlice">
    </part>
  </message>
  <message name="UpdateSliceResponseMsg">
    <part name="UpdateSliceMsgResp" element="tns:UpdateSliceResponse">
    </part>
  </message>
  <portType name="AggregateGENIPortType">
    <operation name="ListCapabilities">
      <input message="tns:ListCapabilitiesRequestMsg">
    </input>
      <output message="tns:ListCapabilitiesResponseMsg">
    </output>
      <fault name="AggregateException" message="tns:AggregateFaultMessage">
    </fault>
    </operation>
    <operation name="ListNodes">
      <input message="tns:ListNodesRequestMsg">
    </input>
      <output message="tns:ListNodesResponseMsg">
    </output>
      <fault name="AggregateException" message="tns:AggregateFaultMessage">
    </fault>
    </operation>
    <operation name="CreateSlice">
      <input message="tns:CreateSliceRequestMsg">
    </input>
      <output message="tns:CreateSliceResponseMsg">
    </output>
      <fault name="AggregateException" message="tns:AggregateFaultMessage">
    </fault>
    </operation>
    <operation name="DeleteSlice">
      <input message="tns:DeleteSliceRequestMsg">
    </input>
      <output message="tns:DeleteSliceResponseMsg">
    </output>
      <fault name="AggregateException" message="tns:AggregateFaultMessage">
    </fault>
    </operation>
    <operation name="UpdateSlice">
      <input message="tns:UpdateSliceRequestMsg">
    </input>
      <output message="tns:UpdateSliceResponseMsg">
    </output>
      <fault name="AggregateException" message="tns:AggregateFaultMessage">
    </fault>
    </operation>
    <operation name="StartSlice">
      <input message="tns:StartSliceRequestMsg">
    </input>
      <output message="tns:StartSliceResponseMsg">
    </output>
      <fault name="AggregateException" message="tns:AggregateFaultMessage">
    </fault>
    </operation>
    <operation name="StopSlice">
      <input message="tns:StopSliceRequestMsg">
    </input>
      <output message="tns:StopSliceResponseMsg">
    </output>
      <fault name="AggregateException" message="tns:AggregateFaultMessage">
    </fault>
    </operation>
    <operation name="ResetSlice">
      <input message="tns:ResetSliceRequestMsg">
    </input>
      <output message="tns:ResetSliceResponseMsg">
    </output>
      <fault name="AggregateException" message="tns:AggregateFaultMessage">
    </fault>
    </operation>
    <operation name="QuerySlice">
      <input message="tns:QuerySliceRequestMsg">
    </input>
      <output message="tns:QuerySliceResponseMsg">
    </output>
      <fault name="AggregateException" message="tns:AggregateFaultMessage">
    </fault>
    </operation>
  </portType>
  <binding name="AggregateGENIBinding" type="tns:AggregateGENIPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="ListCapabilities">
      <soap:operation soapAction="ListCapabilities"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
      <fault name="AggregateException">
        <soap:fault name="AggregateException" use="literal"/>
      </fault>
    </operation>
    <operation name="ListNodes">
      <soap:operation soapAction="ListNodes"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
      <fault name="AggregateException">
        <soap:fault name="AggregateException" use="literal"/>
      </fault>
    </operation>
    <operation name="CreateSlice">
      <soap:operation soapAction="CreateSlice"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
      <fault name="AggregateException">
        <soap:fault name="AggregateException" use="literal"/>
      </fault>
    </operation>
    <operation name="DeleteSlice">
      <soap:operation soapAction="DeleteSlice"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
      <fault name="AggregateException">
        <soap:fault name="AggregateException" use="literal"/>
      </fault>
    </operation>
    <operation name="UpdateSlice">
      <soap:operation soapAction="UpdateSlice"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
      <fault name="AggregateException">
        <soap:fault name="AggregateException" use="literal"/>
      </fault>
    </operation>
    <operation name="StartSlice">
      <soap:operation soapAction="StartSlice"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
      <fault name="AggregateException">
        <soap:fault name="AggregateException" use="literal"/>
      </fault>
    </operation>
    <operation name="StopSlice">
      <soap:operation soapAction="StopSlice"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
      <fault name="AggregateException">
        <soap:fault name="AggregateException" use="literal"/>
      </fault>
    </operation>
    <operation name="ResetSlice">
      <soap:operation soapAction="ResetSlice"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
      <fault name="AggregateException">
        <soap:fault name="AggregateException" use="literal"/>
      </fault>
    </operation>
    <operation name="QuerySlice">
      <soap:operation soapAction="QuerySlice"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
      <fault name="AggregateException">
        <soap:fault name="AggregateException" use="literal"/>
      </fault>
    </operation>
  </binding>
  <service name="AggregateGENI">
    <port name="AggregateGENIPort" binding="tns:AggregateGENIBinding">
      <soap:address location="http://geni.dragon.maxgigapop.net:8080/"/>
    </port>
  </service>
</definitions>
