<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://iperity.com/compass"
	xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
	xmlns="http://iperity.com/compass" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
	jxb:version="1.0">

	<xs:complexType name="properties">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:any processContents="lax" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="dataObject">
		<xs:attribute name="id" type="xs:string" use="required" />
	</xs:complexType>

	<xs:simpleType name="callSide">
		<xs:restriction base="xs:string">
			<xs:enumeration value="SOURCE" />
			<xs:enumeration value="DESTINATION" />
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="callpoint">
		<xs:complexContent>
			<xs:extension base="dataObject">
				<xs:sequence>
					<xs:element name="timeCreated" type="xs:long" />
					<xs:element name="timeStarted" type="xs:long" minOccurs="0" />
					<xs:element name="timeEnded" type="xs:long" minOccurs="0" />
					<xs:element name="state" type="callpointState"/>
					<xs:element name="properties" type="properties" />
				</xs:sequence>
				<xs:attribute name="type" type="xs:string" use="required" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:element name="callpoint" type="callpoint" />

	<xs:complexType name="callpointExternal">
		<xs:complexContent>
			<xs:extension base="callpoint">
				<xs:sequence>
					<xs:element name="number" type="xs:string" />
					<xs:element name="name" type="xs:string" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="callpointDialplan">
		<xs:complexContent>
			<xs:extension base="callpoint">
				<xs:sequence>
					<xs:element name="exten" type="xs:string" />
					<xs:element name="description" type="xs:string" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="callpointResource">
		<xs:complexContent>
			<xs:extension base="callpoint">
				<xs:sequence>
					<xs:element name="resourceType" type="xs:string" />
					<xs:element name="resourceId" type="xs:string" />
					<xs:element name="name" type="xs:string" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="callpointUser">
		<xs:complexContent>
			<xs:extension base="callpoint">
				<xs:sequence>
					<xs:element name="userId" type="xs:string" />
					<xs:element name="userName" type="xs:string" />
					<xs:element name="identityId" type="xs:long" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="callpointQueue">
		<xs:complexContent>
			<xs:extension base="callpoint">
				<xs:sequence>
					<xs:element name="queueId" type="xs:string" />
					<xs:element name="queueName" type="xs:string" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="callpointListenIn">
		<xs:complexContent>
			<xs:extension base="callpoint">
				<xs:sequence>
					<xs:element name="listenedToCallId" type="xs:string" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:simpleType name="callpointState">
		<xs:restriction base="xs:string">
			<xs:enumeration value="CONNECTING"/>
			<xs:enumeration value="RINGING"/>
			<xs:enumeration value="ANSWERED"/>
			<xs:enumeration value="INACTIVE"/>
			<xs:enumeration value="DISCONNECTED"/>
		</xs:restriction>
	</xs:simpleType>
	
	<xs:complexType name="call">
		<xs:complexContent>
			<xs:extension base="dataObject">
				<xs:sequence>
					<xs:element name="source" type="callpoint" />
					<xs:element name="destination" type="callpoint" />
					<xs:element name="state" type="callState" />
					<xs:element name="properties" type="properties" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:element name="call" type="call" />

	<xs:simpleType name="callState">
		<xs:restriction base="xs:string">
			<xs:enumeration value="CONNECTING" />
			<xs:enumeration value="RINGING" />
			<xs:enumeration value="ANSWERED" />
			<xs:enumeration value="ON_HOLD" />
			<xs:enumeration value="DISCONNECTED" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="callUpdateType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="SOURCE" />
			<xs:enumeration value="DESTINATION" />
			<xs:enumeration value="BOTH" />
			<xs:enumeration value="STATE" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="callEndReason">
		<xs:restriction base="xs:string">
			<xs:enumeration value="SOURCE_HANGUP" />
			<xs:enumeration value="DESTINATION_HANGUP" />
			<xs:enumeration value="DESTINATION_BUSY" />
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="queueCall">
		<xs:sequence>
			<xs:element name="callId" type="xs:string" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="queueMember">
		<xs:sequence>
			<xs:element name="queueId" type="xs:string" />
			<xs:element name="userId" type="xs:string" />
			<xs:element name="priority" type="xs:int" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="queueMemberList">
		<xs:sequence>
			<xs:element name="entry" type="queueMember" minOccurs="0"
				maxOccurs="unbounded">
			</xs:element>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="idList">
		<xs:sequence>
			<xs:element name="id" type="xs:string" minOccurs="0"
				maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="propertyChange">
		<xs:sequence>
			<xs:element name="name" type="xs:string" />
			<!-- these are only present if they have a non-null value -->
			<xs:element name="oldValue" type="xs:string" minOccurs="0" />
			<xs:element name="newValue" type="xs:string" minOccurs="0" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="queue">
		<xs:complexContent>
			<xs:extension base="dataObject">
				<xs:sequence>
					<xs:element name="name" type="xs:string" />
					<xs:element name="userEntries" type="queueMemberList"/>
					<xs:element name="callIds" type="idList"/>
					<xs:any processContents="lax" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:element name="queue" type="queue" />
	
	<xs:complexType name="recording">
		<xs:complexContent>
			<xs:extension base="dataObject">
				<xs:sequence>
					<xs:element name="identityId" type="xs:long" minOccurs="0" />
					<xs:element name="resourceId" type="xs:long" minOccurs="0" />
					<xs:element name="callId" type="xs:string" />
					<xs:element name="startTime" type="xs:string" />
					<xs:element name="endTime" type="xs:string" />
					<xs:element name="duration" type="xs:long" />
					<xs:element name="callerId" type="xs:string" />
					<xs:element name="calleeId" type="xs:string" />
					<xs:element name="inbound" type="xs:boolean" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:element name="recording" type="recording" />
	
	<xs:complexType name="wrapupState">
		<xs:sequence>
			<xs:element name="callId" type="xs:string" />
			<xs:element name="endTime" type="xs:long" minOccurs="0" />
		</xs:sequence>
	</xs:complexType>
	
	<xs:simpleType name="receiveCalls">
		<xs:restriction base="xs:string">
			<xs:enumeration value="ALL" />
			<xs:enumeration value="NONE" />
			<xs:enumeration value="ONLY_DIRECT" />
		</xs:restriction>
	</xs:simpleType>

	<xs:complexType name="user">
		<xs:complexContent>
			<xs:extension base="dataObject">
				<xs:sequence>
					<xs:element name="identifiers" type="properties" />
					<xs:element name="queueEntries" type="queueMemberList" />
					
					<xs:element name="name" type="xs:string" />
					<xs:element name="loggedIn" type="xs:boolean" />
					
					<xs:element name="extensions" type="xs:string" />
					<xs:element name="contact" type="xs:string" />
					<xs:element name="language" type="xs:string" />
					<xs:element name="location" type="xs:string" minOccurs="0" />

					<xs:element name="receiveCalls" type="receiveCalls" />
					<xs:element name="displayStatus" type="xs:string" minOccurs="0" />
					<xs:element name="wrapupState" type="wrapupState" minOccurs="0" />
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:element name="user" type="user" />

	<xs:complexType name="queueList">
		<xs:sequence>
			<xs:element name="queue" type="queue" minOccurs="0"
				maxOccurs="unbounded">
			</xs:element>
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="userList">
		<xs:sequence>
			<xs:element name="user" type="user" minOccurs="0"
				maxOccurs="unbounded">
			</xs:element>
		</xs:sequence>
	</xs:complexType>

</xs:schema>