//Source file: pam_data.idl
//Date:  13 October 2004
//Presence and Availability Management Data Types for ES 203 915-14 V1.1.1, DES/TISPAN-01005-14-OSA, Parlay 5.0

#ifndef __PAM_DATA_DEFINED
#define __PAM_DATA_DEFINED


#include "osa.idl"

module org {
	
	module csapi {
		
		module pam {
			
			
			typedef TpInt64 TpPAMTimeInterval;
			
			
			typedef TpURN TpPAMFQName;
			
			
			typedef sequence <TpPAMFQName> TpPAMFQNameList;
			
			
			typedef TpOctetSet TpPAMCredential;
			
			
			typedef TpString TpPAMCapability;
			
			
			typedef sequence <TpPAMCapability> TpPAMCapabilityList;
			
			
			struct TpPAMAttributeDef {
				TpString Name;
				TpString Type;
				TpBoolean IsStatic;
				TpBoolean IsRevertOnExpiration;
				TpAny DefaultValues;
			};
			
			
			typedef sequence <TpPAMAttributeDef> TpPAMAttributeDefList;
			
			
			struct TpPAMAttribute {
				TpString AttributeName;
				TpAttributeValue AttributeValue;
				TpPAMTimeInterval ExpiresIn;
			};
			
			
			typedef sequence <TpPAMAttribute> TpPAMAttributeList;
			
			const TpInt64 PAM_MAX_LONGINT = 0x7fffffff;
			
			exception P_PAM_UNKNOWN_TYPE {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_UNKNOWN_MEMBER {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_UNKNOWN_IDENTITY {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_UNKNOWN_GROUP {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_UNKNOWN_CAPABILITY {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_UNKNOWN_ATTRIBUTES {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_UNKNOWN_ATTRIBUTE {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_UNKNOWN_ASSIGNMENT {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_UNKNOWN_ALIAS {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_UNKNOWN_AGENT {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_UNASSIGNED_ALIAS {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_TYPE_EXISTS {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_TYPE_ASSOCIATED {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_NOT_REGISTERED {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_NOT_MEMBER {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_NO_CAPABILITY {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_MEMBER_EXISTS {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_IS_CYCLIC {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_IDENTITY_EXISTS {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_DISASSOCIATED_TYPE {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_ATTRIBUTE_EXISTS {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_ALIAS_NOT_UNIQUE {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_ALIAS_EXISTS {
				TpString ExtraInformation;
			};
			
			
			exception P_PAM_AGENT_EXISTS {
				TpString ExtraInformation;
			};
			
			
			struct TpPAMPresenceData {
				TpString Name;
				TpString subscriberStatus;
				TpString networkStatus;
				TpPAMCapability communicationMeans;
				TpAddress contactAddress;
				TpString subscriberProvidedLocation;
				TpString networkProvidedLocation;
				TpInt32 Priority;
				TpString otherInfo;
			};
			
			
			typedef sequence <TpPAMPresenceData> TpPAMPresenceDataList;
			
			
			typedef TpString TpPAMPrivacyCode;
			
			
			struct TpPAMAvailabilityProfile {
				TpPAMPrivacyCode PrivacyCode;
				TpPAMPresenceData AvailabilityData;
			};
			
			
			typedef sequence <TpPAMAvailabilityProfile> TpPAMAvailabilityProfileList;
			
			
			enum TpPAMContextName {

				PAM_CONTEXT_ANY,
				PAM_CONTEXT_COMMUNICATION				
			};
			
			
			struct TpPAMCommunicationContext {
				TpPAMCapability CommunicationCapability;
			};
			
			
			union TpPAMContextData switch(TpPAMContextName) {
				case PAM_CONTEXT_COMMUNICATION: TpPAMCommunicationContext CommunicationContext;
				default: short Dummy;
			};
			
			
			struct TpPAMContext {
				TpPAMContextData ContextData;
				TpAttributeList AskerData;
			};
			
			
			typedef sequence <TpPAMContext> TpPAMContextList;
			
			
			enum TpPAMACLDefault {

				PAM_ACCESS_ALLOW,
				PAM_ACCESS_DENY				
			};
			
			
			struct TpPAMAccessControlData {
				TpPAMACLDefault DefaultPolicy;
				TpPAMFQNameList AllowList;
				TpPAMFQNameList DenyList;
			};
			
			
			typedef TpString TpPAMPreferenceOp;
			
			
			enum TpPAMPreferenceType {

				PAM_ACCESS_LIST,
				PAM_EXTERNAL_CONTROL				
			};
			
			
			enum TpPAMEventName {

				PAM_CE_IDENTITY_PRESENCE_SET,
				PAM_CE_AVAILABILITY_CHANGED,
				PAM_CE_WATCHERS_CHANGED,
				PAM_CE_IDENTITY_CREATED,
				PAM_CE_IDENTITY_DELETED,
				PAM_CE_GROUP_MEMBERSHIP_CHANGED,
				PAM_CE_AGENT_CREATED,
				PAM_CE_AGENT_DELETED,
				PAM_CE_AGENT_ASSIGNED,
				PAM_CE_AGENT_UNASSIGNED,
				PAM_CE_CAPABILITY_CHANGED,
				PAM_CE_AGENT_CAPABILITY_PRESENCE_SET,
				PAM_CE_AGENT_PRESENCE_SET				
			};
			
			
			typedef sequence <TpPAMEventName> TpPAMEventNameList;
			
			
			struct TpPAMICEventData {
				TpStringList IdentityType;
			};
			
			
			struct TpPAMICNotificationData {
				TpPAMFQNameList Identities;
			};
			
			
			struct TpPAMIDEventData {
				TpPAMFQNameList IdentityName;
				TpStringList IdentityType;
			};
			
			
			struct TpPAMIDNotificationData {
				TpPAMFQNameList Identities;
			};
			
			
			struct TpPAMGMCEventData {
				TpPAMFQNameList GroupName;
				TpStringList GroupType;
			};
			
			
			struct TpPAMGMCNotificationData {
				TpPAMFQNameList Groups;
			};
			
			
			struct TpPAMACEventData {
				TpStringList AgentType;
			};
			
			
			struct TpPAMACNotificationData {
				TpPAMFQNameList Agents;
			};
			
			
			struct TpPAMADEventData {
				TpPAMFQNameList AgentName;
				TpStringList AgentType;
			};
			
			
			struct TpPAMADNotificationData {
				TpPAMFQNameList Agents;
			};
			
			
			struct TpPAMAAEventData {
				TpPAMFQNameList IdentityName;
				TpStringList IdentityType;
				TpPAMFQNameList AgentName;
				TpStringList AgentType;
			};
			
			
			struct TpPAMAANotificationData {
				TpPAMFQName Identity;
				TpPAMFQName Agent;
			};
			
			
			struct TpPAMAUEventData {
				TpPAMFQNameList IdentityName;
				TpStringList IdentityType;
				TpPAMFQNameList AgentName;
				TpStringList AgentType;
			};
			
			
			struct TpPAMAUNotificationData {
				TpPAMFQName Identity;
				TpPAMFQName Agent;
			};
			
			
			struct TpPAMCCEventData {
				TpPAMFQNameList IdentityName;
				TpStringList IdentityType;
				TpPAMCapabilityList Capabilities;
			};
			
			
			struct TpPAMCCNotificationData {
				TpPAMFQName Identity;
				TpPAMCapabilityList Capabilities;
			};
			
			
			struct TpPAMACPSEventData {
				TpPAMFQNameList AgentName;
				TpStringList AgentType;
				TpPAMCapabilityList Capabilities;
				TpStringList AttributeNames;
				TpPAMTimeInterval ReportingPeriod;
			};
			
			
			struct TpPAMACPSNotificationData {
				TpPAMFQName Agent;
				TpPAMCapability Capability;
				TpStringList AttributeNames;
			};
			
			
			struct TpPAMAPSEventData {
				TpPAMFQNameList AgentName;
				TpStringList AgentType;
				TpStringList AttributeNames;
				TpPAMTimeInterval ReportingPeriod;
			};
			
			
			struct TpPAMAPSNotificationData {
				TpPAMFQName Agent;
				TpStringList AttributeNames;
			};
			
			
			struct TpPAMIPSEventData {
				TpPAMFQNameList IdentityName;
				TpStringList IdentityType;
				TpStringList AttributeNames;
				TpPAMTimeInterval ReportingPeriod;
			};
			
			
			struct TpPAMIPSNotificationData {
				TpPAMFQName Identity;
				TpPAMPresenceDataList Attributes;
			};
			
			
			struct TpPAMAVCEventData {
				TpPAMFQNameList IdentityName;
				TpStringList IdentityType;
				TpPAMContextList PAMContext;
				TpStringList AttributeNames;
				TpPAMTimeInterval ReportingPeriod;
			};
			
			
			struct TpPAMAVCNotificationData {
				TpPAMFQName Identity;
				TpPAMAvailabilityProfileList Availability;
			};
			
			
			struct TpPAMWCEventData {
				TpPAMEventNameList Events;
				TpPAMFQNameList IdentityName;
				TpStringList IdentityType;
				TpPAMTimeInterval ReportingPeriod;
			};
			
			
			union TpPAMEventInfo switch(TpPAMEventName) {
				case PAM_CE_IDENTITY_PRESENCE_SET: TpPAMIPSEventData IdentityPresenceSet;
				case PAM_CE_AVAILABILITY_CHANGED: TpPAMAVCEventData AvailabilityChanged;
				case PAM_CE_WATCHERS_CHANGED: TpPAMWCEventData WatchersChanged;
				case PAM_CE_IDENTITY_CREATED: TpPAMICEventData IdentityCreated;
				case PAM_CE_IDENTITY_DELETED: TpPAMIDEventData IdentityDeleted;
				case PAM_CE_GROUP_MEMBERSHIP_CHANGED: TpPAMGMCEventData GroupMembershipChanged;
				case PAM_CE_AGENT_CREATED: TpPAMACEventData AgentCreated;
				case PAM_CE_AGENT_DELETED: TpPAMADEventData AgentDeleted;
				case PAM_CE_AGENT_ASSIGNED: TpPAMAAEventData AgentAssigned;
				case PAM_CE_AGENT_UNASSIGNED: TpPAMAUEventData AgentUnassigned;
				case PAM_CE_CAPABILITY_CHANGED: TpPAMCCEventData CapabilityChanged;
				case PAM_CE_AGENT_CAPABILITY_PRESENCE_SET: TpPAMACPSEventData AgentCapabilityPresenceSet;
				case PAM_CE_AGENT_PRESENCE_SET: TpPAMAPSEventData AgentPresenceSet;
			};
			
			
			enum TpPAMwatcherChangeType {

				PAM_WATCHERS_PERIODIC,
				PAM_WATCHERS_ADDED,
				PAM_WATCHERS_DELETED				
			};
			
			
			struct TpPAMWCNotificationData {
				TpPAMEventName Event;
				TpPAMwatcherChangeType ChangeType;
				TpPAMFQName Identity;
				TpPAMFQNameList Watchers;
			};
			
			
			union TpPAMNotificationInfo switch(TpPAMEventName) {
				case PAM_CE_IDENTITY_PRESENCE_SET: TpPAMIPSNotificationData IdentityPresenceSetNotify;
				case PAM_CE_AVAILABILITY_CHANGED: TpPAMAVCNotificationData AvailabilityChangedNotify;
				case PAM_CE_WATCHERS_CHANGED: TpPAMWCNotificationData WatchersChangedNotify;
				case PAM_CE_IDENTITY_CREATED: TpPAMICNotificationData IdentityCreatedNotify;
				case PAM_CE_IDENTITY_DELETED: TpPAMIDNotificationData IdentityDeletedNotify;
				case PAM_CE_GROUP_MEMBERSHIP_CHANGED: TpPAMGMCNotificationData GroupMembershipChangedNotify;
				case PAM_CE_AGENT_CREATED: TpPAMACNotificationData AgentCreatedNotify;
				case PAM_CE_AGENT_DELETED: TpPAMADNotificationData AgentDeletedNotify;
				case PAM_CE_AGENT_ASSIGNED: TpPAMAANotificationData AgentAssignedNotify;
				case PAM_CE_AGENT_UNASSIGNED: TpPAMAUNotificationData AgentUnassignedNotify;
				case PAM_CE_CAPABILITY_CHANGED: TpPAMCCNotificationData CapabilityChangedNotify;
				case PAM_CE_AGENT_CAPABILITY_PRESENCE_SET: TpPAMACPSNotificationData AgentCapabilityPresenceSetNotify;
				case PAM_CE_AGENT_PRESENCE_SET: TpPAMAPSNotificationData AgentPresenceSetNotify;
			};
			
			
			typedef TpString TpPAMProvisioningInterfaceName;
			
			
			typedef TpString TpPAMPresenceAvailabilityInterfaceName;
			
			
			typedef TpString TpPAMEventInterfaceName;
			
			
			typedef sequence <TpPAMEventInfo> TpPAMEventInfoList;
			
			
			typedef sequence <TpPAMNotificationInfo> TpPAMNotificationInfoList;
			
			
			enum TpPAMErrorCause {

				P_PAM_CAUSE_UNDEFINED,
				P_PAM_CAUSE_INVALID_ADDRESS,
				P_PAM_CAUSE_SYSTEM_FAILURE,
				P_PAM_CAUSE_INFO_UNAVAILABLE,
				P_PAM_CAUSE_EVENT_REGISTRATION_CANCELLED				
			};
			
			
			struct TpPAMErrorInfo {
				TpPAMErrorCause Cause;
				TpPAMNotificationInfo ErrorData;
			};
			
			
			exception P_PAM_UNAVAILABLE_INTERFACE {
				TpString ExtraInformation;
			};
			
			
			typedef TpInt32 TpPAMClientID;
			
			
			typedef TpAssignmentID TpPAMEventID;
			
			
			exception P_PAM_INVALID_CREDENTIAL {
				TpString ExtraInformation;
			};
			
			
			const TpPAMCapability P_PAM_VOICE = "P_PAM_VOICE";
			
			const TpPAMCapability P_PAM_SMS = "P_PAM_SMS";
			
			const TpPAMCapability P_PAM_IM = "P_PAM_IM";
			
			const TpPAMCapability P_PAM_MMS = "P_PAM_MMS";
		};
		
	};
	
};

#endif
