/// <summary> /// Creates an abstract item description for an item of the specified type. /// </summary> /// <param name="id">The ID of the item description.</param> /// <param name="itemType">The type of the item.</param> /// <returns>An abstract item description.</returns> public ItemDescription CreateItemDescription(int id, ItemType itemType) { ItemDescription item = null; switch (itemType) { case ItemType.Letter: { item = new ColoredLetterDescription(this); } break; case ItemType.SimpleItem: { item = new SimpleItemDescription(this); } break; default: throw new ArgumentException("Unknown item type: " + itemType.ToString()); } item.ID = id; item.Instance = this; ItemDescriptions.Add(item); // Determine volatile ID int volatileID = 0; while (_volatileItemDescriptionIDs.Contains(volatileID)) { volatileID++; } item.VolatileID = volatileID; _volatileItemDescriptionIDs.Add(item.VolatileID); // Maintain actual ID if (_idToItemDescription.ContainsKey(item.ID)) { throw new ArgumentException("Already have an item with this ID: " + id); } _idToItemDescription[item.ID] = item; return(item); }
/// <summary> /// Initializes _instance structure. /// </summary> static void Initialize() { _instance = new PACSTopicSet(); SimpleItemDescription doorToken = new SimpleItemDescription("DoorToken", "ReferenceToken", PTNAMESPACE); // Door //Door Topic door = new Topic(PacsTopic.DOOR, ONVIFEVENTS, TNS1, false); _instance._door = door; //Door/State Topic doorState = new Topic("State", null, null, false); Topic doorControl = new Topic(PacsTopic.DOORCONTROL, null, null); _instance._doorControl = doorControl; //DoorControl/DoorMode[topic] Topic doorMode = new Topic(PacsTopic.DOORMODE, null, null, true); _instance._doorMode = doorMode; doorMode.MessageDescription.IsProperty = true; doorMode.MessageDescription.SourceItems.Add(doorToken); doorMode.MessageDescription.DataItems.Add(new SimpleItemDescription("State", "DoorMode", TDCNAMESPACE)); //DoorControl/DoorPhysicalState[topic] Topic doorPhysicalState = new Topic(PacsTopic.DOORPHYSICALSTATE, null, null, true); _instance._doorPhysicalState = doorPhysicalState; doorPhysicalState.MessageDescription.IsProperty = true; doorPhysicalState.MessageDescription.SourceItems.Add(doorToken); doorPhysicalState.MessageDescription.DataItems.Add(new SimpleItemDescription("State", "DoorPhysicalState", TDCNAMESPACE)); //DoorControl/DoubleLockPhysicalState[topic] Topic doubleLockPhysicalState = new Topic(PacsTopic.DOUBLELOCKPHYSICALSTATE, null, null, true); _instance._doubleLockPhysicalState = doubleLockPhysicalState; doubleLockPhysicalState.MessageDescription.IsProperty = true; doubleLockPhysicalState.MessageDescription.SourceItems.Add(doorToken); doubleLockPhysicalState.MessageDescription.DataItems.Add(new SimpleItemDescription("State", "LockPhysicalState", TDCNAMESPACE)); //DoorControl/LockPhysicalState[topic] Topic lockPhysicalState = new Topic(PacsTopic.LOCKPHYSICALSTATE, null, null, true); _instance._lockPhysicalState = lockPhysicalState; lockPhysicalState.MessageDescription.IsProperty = true; lockPhysicalState.MessageDescription.SourceItems.Add(doorToken); lockPhysicalState.MessageDescription.DataItems.Add(new SimpleItemDescription("State", "LockPhysicalState", TDCNAMESPACE)); //DoorControl/DoorTamper[topic] Topic doorTamper = new Topic(PacsTopic.DOORTAMPER, null, null, true); _instance._doorTamper = doorTamper; doorTamper.MessageDescription.IsProperty = true; doorTamper.MessageDescription.SourceItems.Add(doorToken); doorTamper.MessageDescription.DataItems.Add(new SimpleItemDescription("State", "DoorTamperState", TDCNAMESPACE)); //DoorControl/DoorAlarm[topic] Topic doorAlarm = new Topic(PacsTopic.DOORALARM, null, null, true); _instance._doorAlarm = doorAlarm; doorAlarm.MessageDescription.IsProperty = true; doorAlarm.MessageDescription.SourceItems.Add(doorToken); doorAlarm.MessageDescription.DataItems.Add(new SimpleItemDescription("State", "DoorAlarmState", TDCNAMESPACE)); //Door/State/DoorFault[topic] Topic doorFault = new Topic(PacsTopic.DOORFAULT, null, null, true); _instance._doorFault = doorFault; doorFault.MessageDescription.IsProperty = true; doorFault.MessageDescription.SourceItems.Add(doorToken); doorFault.MessageDescription.DataItems.Add(new SimpleItemDescription("State", "DoorFaultState", TDCNAMESPACE)); doorFault.MessageDescription.DataItems.Add(new SimpleItemDescription("Reason", "string", XSNAMESPACE)); //Door/Set[topic] Topic doorChanged = new Topic(PacsTopic.CHANGED, null, null, true); _instance._doorSet = doorChanged; doorChanged.MessageDescription.IsProperty = false; doorChanged.MessageDescription.SourceItems.Add(doorToken); //Door/Removed[topic] Topic doorRemoved = new Topic(PacsTopic.REMOVED, null, null, true); _instance._doorRemoved = doorRemoved; doorRemoved.MessageDescription.IsProperty = false; doorRemoved.MessageDescription.SourceItems.Add(doorToken); Topic configurationDoor = new Topic(PacsTopic.DOOR, null, null, false); ///////////////////////////////////////////////////////////////////////////////// // AccessControl // ///////////////////////////////////////////////////////////////////////////////// #region AccessControl // SimpleItemDescriptions var accessPointToken = new SimpleItemDescription("AccessPointToken", "ReferenceToken", PTNAMESPACE); var areaToken = new SimpleItemDescription("AreaToken", "ReferenceToken", PTNAMESPACE); var credentialToken = new SimpleItemDescription("CredentialToken", "ReferenceToken", PTNAMESPACE); var credentialsHolder = new SimpleItemDescription("CredentialHolderName", "string", XSNAMESPACE); var reason = new SimpleItemDescription("Reason", "string", XSNAMESPACE); var clientUpdated = new SimpleItemDescription("ClientUpdated", "boolean", XSNAMESPACE); var card = new SimpleItemDescription("Card", "string", XSNAMESPACE); var external = new SimpleItemDescription("External", "boolean", XSNAMESPACE); Topic accessControl = new Topic(PacsTopic.ACCESSCONTROL, ONVIFEVENTS, TNS1); _instance._accessControl = accessControl; //AccessControl/AccessGranted Topic accessControlAccessGranted = new Topic(PacsTopic.ACCESSGRANTED, null, null); _instance._accessControlAccessGranted = accessControlAccessGranted; //AccessControl/AccessGranted/Anonymous [topic] Topic accessGrantedAnonymous = new Topic(PacsTopic.ANONYMOUS, null, null, true); _instance._accessGrantedAnonymous = accessGrantedAnonymous; accessGrantedAnonymous.MessageDescription.IsProperty = false; accessGrantedAnonymous.MessageDescription.SourceItems.Add(accessPointToken); accessGrantedAnonymous.MessageDescription.DataItems.Add(external); ////AccessControl/AccessGranted/Anonymous/External [topic] //Topic accessGrantedAnonymousExternal = new Topic(PacsTopic.EXTERNAL, null, null, true); //_instance._accessGrantedAnonymousExternal = accessGrantedAnonymousExternal; //accessGrantedAnonymousExternal.MessageDescription.IsProperty = false; //accessGrantedAnonymousExternal.MessageDescription.SourceItems.Add(accessPointToken); //AccessControl/AccessGranted/Credential [topic] Topic accessGrantedCredential = new Topic(PacsTopic.CREDENTIAL, null, null, true); _instance._accessGrantedCredential = accessGrantedCredential; accessGrantedCredential.MessageDescription.IsProperty = false; accessGrantedCredential.MessageDescription.SourceItems.Add(accessPointToken); accessGrantedCredential.MessageDescription.DataItems.Add(credentialToken); accessGrantedCredential.MessageDescription.DataItems.Add(credentialsHolder); accessGrantedCredential.MessageDescription.DataItems.Add(external); ////AccessControl/AccessGranted/Credential/External [topic] //Topic accessGrantedCredentialExternal = new Topic(PacsTopic.EXTERNAL, null, null, true); //_instance._accessGrantedCredentialExternal = accessGrantedCredentialExternal; //accessGrantedCredentialExternal.MessageDescription.IsProperty = false; //accessGrantedCredentialExternal.MessageDescription.SourceItems.Add(accessPointToken); //accessGrantedCredentialExternal.MessageDescription.DataItems.Add(credentialToken); //accessGrantedCredentialExternal.MessageDescription.DataItems.Add(credentialsHolder); // AccessControl/AccessTaken Topic accessTaken = new Topic(PacsTopic.ACCESSTAKEN, null, null); // AccessControl/AccessTaken/Anonymous Topic accessTakenAnonymous = new Topic(PacsTopic.ANONYMOUS, null, null, true); accessTakenAnonymous.MessageDescription.IsProperty = false; accessTakenAnonymous.MessageDescription.SourceItems.Add(accessPointToken); // AccessControl/AccessTaken/Credential Topic accessTakenCredential = new Topic(PacsTopic.CREDENTIAL, null, null, true); accessTakenCredential.MessageDescription.IsProperty = false; accessTakenCredential.MessageDescription.SourceItems.Add(accessPointToken); accessTakenCredential.MessageDescription.DataItems.Add(credentialToken); accessTakenCredential.MessageDescription.DataItems.Add(credentialsHolder); // AccessControl/AccessNotTaken Topic accessNotTaken = new Topic(PacsTopic.ACCESSSNOTTAKEN, null, null); // AccessControl/AccessNotTaken/Anonymous Topic accessNotTakenAnonymous = new Topic(PacsTopic.ANONYMOUS, null, null, true); accessNotTakenAnonymous.MessageDescription.IsProperty = false; accessNotTakenAnonymous.MessageDescription.SourceItems.Add(accessPointToken); // AccessControl/AccessNotTaken/Credential Topic accessNotTakenCredential = new Topic(PacsTopic.CREDENTIAL, null, null, true); accessNotTakenCredential.MessageDescription.IsProperty = false; accessNotTakenCredential.MessageDescription.SourceItems.Add(accessPointToken); accessNotTakenCredential.MessageDescription.DataItems.Add(credentialToken); accessNotTakenCredential.MessageDescription.DataItems.Add(credentialsHolder); // AccessControl/Denied - TOPICS NAMESPACE Topic denied = new Topic(PacsTopic.DENIED, null, null); // AccessControl/Denied/Credential - TOPICS NAMESPACE Topic deniedCredential = new Topic(PacsTopic.CREDENTIAL, null, null, true); // AccessControl/Denied/Credential _instance._deniedCredential = deniedCredential; deniedCredential.MessageDescription.IsProperty = false; deniedCredential.MessageDescription.SourceItems.Add(accessPointToken); deniedCredential.MessageDescription.DataItems.Add(credentialToken); deniedCredential.MessageDescription.DataItems.Add(credentialsHolder); deniedCredential.MessageDescription.DataItems.Add(reason); deniedCredential.MessageDescription.DataItems.Add(external); //// AccessControl/Denied/Credential/CredentialNotEnabled //Topic deniedCredentialNotEnabled = new Topic(PacsTopic.CREDENTIALNOTENABLED, null, null, true); //deniedCredentialNotEnabled.MessageDescription.IsProperty = false; //deniedCredentialNotEnabled.MessageDescription.SourceItems.Add(accessPointToken); //deniedCredentialNotEnabled.MessageDescription.DataItems.Add(credentialToken); //deniedCredentialNotEnabled.MessageDescription.DataItems.Add(credentialsHolder); //deniedCredentialNotEnabled.MessageDescription.DataItems.Add(reason); //// AccessControl/Denied/Credential/CredentialNotActive //Topic deniedCredentialNotActive = new Topic(PacsTopic.CREDENTIALNOTACTIVE, null, null, true); //deniedCredentialNotActive.MessageDescription.IsProperty = false; //deniedCredentialNotActive.MessageDescription.SourceItems.Add(accessPointToken); //deniedCredentialNotActive.MessageDescription.DataItems.Add(credentialToken); //deniedCredentialNotActive.MessageDescription.DataItems.Add(credentialsHolder); //// AccessControl/Denied/Credential/CredentialExpired //Topic deniedCredentialExpired = new Topic(PacsTopic.CREDENTIALEXPIRED, null, null, true); //deniedCredentialExpired.MessageDescription.IsProperty = false; //deniedCredentialExpired.MessageDescription.SourceItems.Add(accessPointToken); //deniedCredentialExpired.MessageDescription.DataItems.Add(credentialToken); //deniedCredentialExpired.MessageDescription.DataItems.Add(credentialsHolder); //// AccessControl/Denied/Credential/InvalidPin //Topic deniedCredentialInvalidPin = new Topic(PacsTopic.INVALIDPIN, null, null, true); //deniedCredentialInvalidPin.MessageDescription.IsProperty = false; //deniedCredentialInvalidPin.MessageDescription.SourceItems.Add(accessPointToken); //deniedCredentialInvalidPin.MessageDescription.DataItems.Add(credentialToken); //deniedCredentialInvalidPin.MessageDescription.DataItems.Add(credentialsHolder); //// AccessControl/Denied/Credential/NotPermittedAtThisTime //Topic deniedCredentialNotPermittedAtThisTime = new Topic(PacsTopic.NOTPERMITTEDATTHISTIME, null, null, true); //deniedCredentialNotPermittedAtThisTime.MessageDescription.IsProperty = false; //deniedCredentialNotPermittedAtThisTime.MessageDescription.SourceItems.Add(accessPointToken); //deniedCredentialNotPermittedAtThisTime.MessageDescription.DataItems.Add(credentialToken); //deniedCredentialNotPermittedAtThisTime.MessageDescription.DataItems.Add(credentialsHolder); //deniedCredentialNotPermittedAtThisTime.MessageDescription.DataItems.Add(reason); //// AccessControl/Denied/Credential/Unathorized //Topic deniedCredentialUnathorized = new Topic(PacsTopic.UNAUTHORIZED, null, null, true); //deniedCredentialUnathorized.MessageDescription.IsProperty = false; //deniedCredentialUnathorized.MessageDescription.SourceItems.Add(accessPointToken); //deniedCredentialUnathorized.MessageDescription.DataItems.Add(credentialToken); //deniedCredentialUnathorized.MessageDescription.DataItems.Add(credentialsHolder); //// AccessControl/Denied/Credential/External //Topic deniedCredentialExternal = new Topic(PacsTopic.EXTERNAL, null, null, true); //_instance._deniedCredentialExternal = deniedCredentialExternal; //deniedCredentialExternal.MessageDescription.IsProperty = false; //deniedCredentialExternal.MessageDescription.SourceItems.Add(accessPointToken); //deniedCredentialExternal.MessageDescription.DataItems.Add(credentialToken); //deniedCredentialExternal.MessageDescription.DataItems.Add(credentialsHolder); //deniedCredentialExternal.MessageDescription.DataItems.Add(reason); //// AccessControl/Denied/Credential/Other //Topic deniedCredentialOther = new Topic(PacsTopic.OTHER, null, null, true); //deniedCredentialOther.MessageDescription.IsProperty = false; //deniedCredentialOther.MessageDescription.SourceItems.Add(accessPointToken); //deniedCredentialOther.MessageDescription.DataItems.Add(credentialToken); //deniedCredentialOther.MessageDescription.DataItems.Add(credentialsHolder); //deniedCredentialOther.MessageDescription.DataItems.Add(reason); //deniedCredentialOther.MessageDescription.DataItems.Add(card); ////deniedCredentialOther.MessageDescription.DataItems.Add(new SimpleItemDescription("", "...", XSNAMESPACE)); // AccessControl/Denied/CredentialNotFound Topic deniedCredentialNotFound = new Topic(PacsTopic.CREDENTIALNOTFOUND, null, null); // AccessControl/Denied/Credential/CredentialNotFound/Card Topic deniedCredentialNotFoundCard = new Topic(PacsTopic.CARD, null, null, true); deniedCredentialNotFoundCard.MessageDescription.IsProperty = false; deniedCredentialNotFoundCard.MessageDescription.SourceItems.Add(accessPointToken); deniedCredentialNotFoundCard.MessageDescription.DataItems.Add(card); // AccessControl/Denied/Anonymous Topic deniedAnonymous = new Topic(PacsTopic.ANONYMOUS, null, null, true); _instance._deniedAnonymous = deniedAnonymous; deniedAnonymous.MessageDescription.IsProperty = false; deniedAnonymous.MessageDescription.SourceItems.Add(accessPointToken); deniedAnonymous.MessageDescription.DataItems.Add(reason); deniedAnonymous.MessageDescription.DataItems.Add(external); //// AccessControl/Denied/Anonymous/NotPermittedAtThisTime //Topic deniedAnonymousNotPermitted = new Topic(PacsTopic.NOTPERMITTEDATTHISTIME, null, null, true); //deniedAnonymousNotPermitted.MessageDescription.IsProperty = false; //deniedAnonymousNotPermitted.MessageDescription.SourceItems.Add(accessPointToken); //deniedAnonymousNotPermitted.MessageDescription.DataItems.Add(reason); //// AccessControl/Denied/Anonymous/Unauthorised //Topic deniedAnonymousUnauthorised = new Topic(PacsTopic.UNAUTHORIZED, null, null, true); //deniedAnonymousUnauthorised.MessageDescription.IsProperty = false; //deniedAnonymousUnauthorised.MessageDescription.SourceItems.Add(accessPointToken); //deniedAnonymousUnauthorised.MessageDescription.DataItems.Add(reason); //// AccessControl/Denied/Anonymous/External //Topic deniedAnonymousExternal = new Topic(PacsTopic.EXTERNAL, null, null, true); //_instance._deniedAnonymousExternal = deniedAnonymousExternal; //deniedAnonymousExternal.MessageDescription.IsProperty = false; //deniedAnonymousExternal.MessageDescription.SourceItems.Add(accessPointToken); //deniedAnonymousExternal.MessageDescription.DataItems.Add(reason); //// AccessControl/Denied/Anonymous/Other //Topic deniedAnonymousOther = new Topic(PacsTopic.OTHER, null, null, true); //deniedAnonymousOther.MessageDescription.IsProperty = false; //deniedAnonymousOther.MessageDescription.SourceItems.Add(accessPointToken); //deniedAnonymousOther.MessageDescription.DataItems.Add(reason); // AccessControl/Duress Topic duress = new Topic(PacsTopic.DURESS, null, null, true); duress.MessageDescription.IsProperty = false; duress.MessageDescription.SourceItems.Add(accessPointToken); duress.MessageDescription.DataItems.Add(credentialToken); duress.MessageDescription.DataItems.Add(credentialsHolder); duress.MessageDescription.DataItems.Add(reason); //// AccessControl/Duress/Anonymous //Topic duressAnonymous = new Topic(PacsTopic.ANONYMOUS, null, null, true); //duressAnonymous.MessageDescription.IsProperty = false; //duressAnonymous.MessageDescription.SourceItems.Add(accessPointToken); //duressAnonymous.MessageDescription.DataItems.Add(reason); //// AccessControl/Duress/Credential //Topic duressCredential = new Topic(PacsTopic.CREDENTIAL, null, null, true); //duressCredential.MessageDescription.IsProperty = false; //duressCredential.MessageDescription.SourceItems.Add(accessPointToken); //duressCredential.MessageDescription.DataItems.Add(credentialToken); //duressCredential.MessageDescription.DataItems.Add(credentialsHolder); //duressCredential.MessageDescription.DataItems.Add(reason); // AccessControl/Request Topic request = new Topic(PacsTopic.REQUEST, null, null); // AccessControl/Request/Anonymous Topic requestAnonymous = new Topic(PacsTopic.ANONYMOUS, null, null, true); requestAnonymous.MessageDescription.IsProperty = false; requestAnonymous.MessageDescription.SourceItems.Add(accessPointToken); // AccessControl/Request/Credential Topic requestCredential = new Topic(PacsTopic.CREDENTIAL, null, null, true); requestCredential.MessageDescription.IsProperty = false; requestCredential.MessageDescription.SourceItems.Add(accessPointToken); requestCredential.MessageDescription.DataItems.Add(credentialToken); requestCredential.MessageDescription.DataItems.Add(credentialsHolder); // AccessControl/Request/Timeout Topic requestTimeout = new Topic(PacsTopic.TIMEOUT, null, null, true); //_instance._requestTimeoutAnonymous = requestTimeoutAnonymous; requestTimeout.MessageDescription.IsProperty = false; requestTimeout.MessageDescription.SourceItems.Add(accessPointToken); //// AccessControl/Request/Timeout/Anonymous //Topic requestTimeoutAnonymous = new Topic(PacsTopic.ANONYMOUS, null, null, true); //_instance._requestTimeoutAnonymous = requestTimeoutAnonymous; //requestTimeoutAnonymous.MessageDescription.IsProperty = false; //requestTimeoutAnonymous.MessageDescription.SourceItems.Add(accessPointToken); //// AccessControl/Request/Timeout/Credential //Topic requestTimeoutCredential = new Topic(PacsTopic.CREDENTIAL, null, null, true); //_instance._requestTimeoutCredential = requestTimeoutCredential; //requestTimeoutCredential.MessageDescription.IsProperty = false; //requestTimeoutCredential.MessageDescription.SourceItems.Add(accessPointToken); //requestTimeoutCredential.MessageDescription.DataItems.Add(credentialToken); // AccessPoint Topic accessPoint = new Topic(PacsTopic.ACCESSPOINT, ONVIFEVENTS, TNS1, false); _instance._accessControlAccessPoint = accessPoint; Topic configurationAccessPoint = new Topic(PacsTopic.ACCESSPOINT, null, null, false); // AccessPoint/Changed Topic configurationAccessPointChanged = new Topic(PacsTopic.CHANGED, null, null, true); configurationAccessPointChanged.MessageDescription.IsProperty = false; configurationAccessPointChanged.MessageDescription.SourceItems.Add(accessPointToken); //// AccessPoint/Set //Topic configurationAccessPointSet = new Topic(PacsTopic.CHANGED, null, null, true); //configurationAccessPointSet.MessageDescription.IsProperty = false; //configurationAccessPointSet.MessageDescription.SourceItems.Add(accessPointToken); //configurationAccessPointSet.MessageDescription.DataItems.Add(reason); //// AccessPoint/Removed Topic configurationAccessPointRemoved = new Topic(PacsTopic.REMOVED, null, null, true); configurationAccessPointRemoved.MessageDescription.IsProperty = false; configurationAccessPointRemoved.MessageDescription.SourceItems.Add(accessPointToken); Topic configuration = new Topic(PacsTopic.CONFIGURATION, ONVIFEVENTS, TNS1, false); // Area Topic area = new Topic(PacsTopic.AREA, null, null, false); // Area/Changed Topic configurationAreaChanged = new Topic(PacsTopic.CHANGED, null, null, true); configurationAreaChanged.MessageDescription.IsProperty = false; configurationAreaChanged.MessageDescription.SourceItems.Add(areaToken); // Area/Removed Topic configurationAreaRemoved = new Topic(PacsTopic.REMOVED, null, null, true); configurationAreaRemoved.MessageDescription.IsProperty = false; configurationAreaRemoved.MessageDescription.SourceItems.Add(areaToken); //// Area/Set //Topic configurationAreaSet = new Topic(PacsTopic.CHANGED, null, null, true); //configurationAreaSet.MessageDescription.IsProperty = false; //configurationAreaSet.MessageDescription.SourceItems.Add(areaToken); //configurationAreaSet.MessageDescription.DataItems.Add(reason); //// Area/Removed //Topic configurationAreaRemoved = new Topic(PacsTopic.REMOVED, null, null, true); //configurationAreaRemoved.MessageDescription.IsProperty = false; //configurationAreaRemoved.MessageDescription.SourceItems.Add(areaToken); //configurationAreaRemoved.MessageDescription.DataItems.Add(reason); // Property events // AccessPoint/State Topic accessPointState = new Topic("State", null, null, false); //AccessControl/AccessPoint/Enabled [topic] Topic accessControlAccessPointEnabled = new Topic(PacsTopic.ENABLED, null, null, true); _instance._accessControlAccessPointEnabled = accessControlAccessPointEnabled; accessControlAccessPointEnabled.MessageDescription.IsProperty = true; accessControlAccessPointEnabled.MessageDescription.SourceItems.Add(accessPointToken); accessControlAccessPointEnabled.MessageDescription.DataItems.Add(new SimpleItemDescription("State", "boolean", XSNAMESPACE)); //accessControlAccessPointEnabled.MessageDescription.DataItems.Add(reason); //AccessControl/AccessPoint/Tampering [topic] //Topic accessControlAccessPointTampering = new Topic(PacsTopic.TAMPERING, null, null, true); //_instance._accessControlAccessPointTampering = accessControlAccessPointTampering; //accessControlAccessPointTampering.MessageDescription.IsProperty = true; //accessControlAccessPointTampering.MessageDescription.SourceItems.Add(accessPointToken); //accessControlAccessPointTampering.MessageDescription.DataItems.Add(new SimpleItemDescription("State", "boolean", XSNAMESPACE)); //accessControlAccessPointTampering.MessageDescription.DataItems.Add(reason); #endregion ///////////////////////////////////////////////////////////////////////////////// // Credentials // ///////////////////////////////////////////////////////////////////////////////// #region Credentials // SimpleItemDescriptions var state = new SimpleItemDescription("State", "boolean", XSNAMESPACE); var apbViolation = new SimpleItemDescription("ApbViolation", "boolean", XSNAMESPACE); //Credential Topic credential = new Topic(PacsTopic.CREDENTIAL, ONVIFEVENTS, TNS1, false); _instance._credential = credential; //Credential/State Topic credentialState = new Topic(PacsTopic.STATE, null, null, false); _instance._credentialState = credentialState; //Credential/State/Enabled [topic] Topic credentialStateEnabled = new Topic(PacsTopic.ENABLED, null, null, true); _instance._credentialStateEnabled = credentialStateEnabled; credentialStateEnabled.MessageDescription.IsProperty = false; credentialStateEnabled.MessageDescription.SourceItems.Add(credentialToken); credentialStateEnabled.MessageDescription.DataItems.Add(state); credentialStateEnabled.MessageDescription.DataItems.Add(reason); credentialStateEnabled.MessageDescription.DataItems.Add(clientUpdated); //Credential/State/ApbViolation [topic] Topic credentialStateApbViolation = new Topic(PacsTopic.APBVIOLATION, null, null, true); _instance._credentialStateApbViolation = credentialStateApbViolation; credentialStateApbViolation.MessageDescription.IsProperty = false; credentialStateApbViolation.MessageDescription.SourceItems.Add(credentialToken); credentialStateApbViolation.MessageDescription.DataItems.Add(apbViolation); credentialStateApbViolation.MessageDescription.DataItems.Add(clientUpdated); //Configuration/Credential Topic configurationCredential = new Topic(PacsTopic.CREDENTIAL, null, null, false); _instance._configurationCredential = configurationCredential; //Configuration/Credential/Changed [topic] Topic configurationCredentialChanged = new Topic(PacsTopic.CHANGED, null, null, true); _instance._configurationCredentialChanged = configurationCredentialChanged; configurationCredentialChanged.MessageDescription.IsProperty = false; configurationCredentialChanged.MessageDescription.SourceItems.Add(credentialToken); //Configuration/Credential/Removed [topic] Topic configurationCredentialRemoved = new Topic(PacsTopic.REMOVED, null, null, true); _instance._configurationCredentialRemoved = configurationCredentialRemoved; configurationCredentialRemoved.MessageDescription.IsProperty = false; configurationCredentialRemoved.MessageDescription.SourceItems.Add(credentialToken); #endregion ///////////////////////////////////////////////////////////////////////////////// // Access Rules // ///////////////////////////////////////////////////////////////////////////////// #region AccessRules var accessProfileToken = new SimpleItemDescription("AccessProfileToken", "ReferenceToken", PTNAMESPACE); //Configuration/AccessProfile Topic configurationAccessProfile = new Topic(PacsTopic.ACCESSPROFILE, null, null, false); _instance._configurationAccessProfile = configurationAccessProfile; //Configuration/AccessProfile/Changed [topic] Topic configurationAccessProfileChanged = new Topic(PacsTopic.CHANGED, null, null, true); _instance._configurationAccessProfileChanged = configurationAccessProfileChanged; configurationAccessProfileChanged.MessageDescription.IsProperty = false; configurationAccessProfileChanged.MessageDescription.SourceItems.Add(accessProfileToken); //Configuration/AccessProfile/Removed [topic] Topic configurationAccessProfileRemoved = new Topic(PacsTopic.REMOVED, null, null, true); _instance._configurationAccessProfileRemoved = configurationAccessProfileRemoved; configurationAccessProfileRemoved.MessageDescription.IsProperty = false; configurationAccessProfileRemoved.MessageDescription.SourceItems.Add(accessProfileToken); #endregion ///////////////////////////////////////////////////////////////////////////////// // Schedule // ///////////////////////////////////////////////////////////////////////////////// #region Schedule var scheduleToken = new SimpleItemDescription("ScheduleToken", "ReferenceToken", PTNAMESPACE); var specialDaysToken = new SimpleItemDescription("SpecialDaysToken", "ReferenceToken", PTNAMESPACE); var name = new SimpleItemDescription("Name", "string", XSNAMESPACE); var active = new SimpleItemDescription("Active", "boolean", XSNAMESPACE); var specialDay = new SimpleItemDescription("SpecialDay", "boolean", XSNAMESPACE); //Schedule Topic schedule = new Topic(PacsTopic.SCHEDULE, ONVIFEVENTS, TNS1, false); _instance._schedule = schedule; //Schedule/State Topic scheduleState = new Topic(PacsTopic.STATE, null, null, false); //Schedule/State/Active [topic] Topic scheduleStateActive = new Topic(PacsTopic.ACTIVE, null, null, true); _instance._scheduleStateActive = scheduleStateActive; scheduleStateActive.MessageDescription.IsProperty = true; scheduleStateActive.MessageDescription.SourceItems.Add(scheduleToken); scheduleStateActive.MessageDescription.SourceItems.Add(name); scheduleStateActive.MessageDescription.DataItems.Add(active); scheduleStateActive.MessageDescription.DataItems.Add(specialDay); //Configuration/Schedule Topic configurationSchedule = new Topic(PacsTopic.SCHEDULE, null, null, false); _instance._configurationSchedule = configurationSchedule; //Configuration/Schedule/Changed [topic] Topic configurationScheduleChanged = new Topic(PacsTopic.CHANGED, null, null, true); _instance._configurationScheduleChanged = configurationScheduleChanged; configurationScheduleChanged.MessageDescription.IsProperty = false; configurationScheduleChanged.MessageDescription.SourceItems.Add(scheduleToken); //Configuration/Schedule/Removed [topic] Topic configurationScheduleRemoved = new Topic(PacsTopic.REMOVED, null, null, true); _instance._configurationScheduleRemoved = configurationScheduleRemoved; configurationScheduleRemoved.MessageDescription.IsProperty = false; configurationScheduleRemoved.MessageDescription.SourceItems.Add(scheduleToken); //Configuration/SpecialDays Topic configurationSpecialDays = new Topic(PacsTopic.SPECIALDAYS, null, null, false); _instance._configurationSpecialDays = configurationSpecialDays; //Configuration/SpecialDays/Changed [topic] Topic configurationSpecialDaysChanged = new Topic(PacsTopic.CHANGED, null, null, true); _instance._configurationSpecialDaysChanged = configurationSpecialDaysChanged; configurationSpecialDaysChanged.MessageDescription.IsProperty = false; configurationSpecialDaysChanged.MessageDescription.SourceItems.Add(specialDaysToken); //Configuration/SpecialDays/Removed [topic] Topic configurationSpecialDaysRemoved = new Topic(PacsTopic.REMOVED, null, null, true); _instance._configurationSpecialDaysRemoved = configurationSpecialDaysRemoved; configurationSpecialDaysRemoved.MessageDescription.IsProperty = false; configurationSpecialDaysRemoved.MessageDescription.SourceItems.Add(specialDaysToken); #endregion // Create Tree _instance.AddTopic(door); door.Add(doorState); doorState.Add(doorMode, doorPhysicalState, doubleLockPhysicalState, lockPhysicalState, doorTamper, doorAlarm, doorFault); _instance.AddTopic(accessControl); accessControl.Add(accessControlAccessGranted, accessTaken, accessNotTaken, denied, duress, request); accessControlAccessGranted.Add(accessGrantedAnonymous, accessGrantedCredential); accessTaken.Add(accessTakenAnonymous, accessTakenCredential); accessNotTaken.Add(accessNotTakenAnonymous, accessNotTakenCredential); denied.Add(deniedCredential, deniedAnonymous, deniedCredentialNotFound); deniedCredentialNotFound.Add(deniedCredentialNotFoundCard); request.Add(requestAnonymous, requestCredential, requestTimeout); configuration.Add(configurationAccessPoint); configuration.Add(configurationDoor); configuration.Add(area); configuration.Add(configurationCredential); configuration.Add(configurationAccessProfile); configuration.Add(configurationSchedule); configuration.Add(configurationSpecialDays); configurationDoor.Add(doorChanged, doorRemoved); area.Add(configurationAreaChanged, configurationAreaRemoved); accessPoint.Add(accessPointState); configurationAccessPoint.Add(configurationAccessPointChanged, configurationAccessPointRemoved); accessPointState.Add(accessControlAccessPointEnabled); configurationSchedule.Add(configurationScheduleChanged, configurationScheduleRemoved); configurationSpecialDays.Add(configurationSpecialDaysChanged, configurationSpecialDaysRemoved); configurationCredential.Add(configurationCredentialChanged); configurationCredential.Add(configurationCredentialRemoved); configurationAccessProfile.Add(configurationAccessProfileChanged); configurationAccessProfile.Add(configurationAccessProfileRemoved); _instance.AddTopic(accessPoint); _instance.AddTopic(configuration); _instance.AddTopic(credential); credential.Add(credentialState); credentialState.Add(credentialStateApbViolation); credentialState.Add(credentialStateEnabled); _instance.AddTopic(schedule); schedule.Add(scheduleState); scheduleState.Add(scheduleStateActive); }
/// <summary> /// Generates a complete configuration for the simple item generator. /// </summary> /// <param name="preConfig">The pre-configuration defining characteristics of the actual configuration.</param> /// <returns>The complete configuration.</returns> public static SimpleItemGeneratorConfiguration GenerateSimpleItemConfiguration(SimpleItemGeneratorPreConfiguration preConfig) { // Init SimpleItemGeneratorConfiguration config = new SimpleItemGeneratorConfiguration() { DefaultWeight = preConfig.DefaultWeight, DefaultCoWeight = preConfig.DefaultCoWeight, ProbToUseCoWeight = preConfig.ProbToUseCoWeight }; RandomizerSimple randomizer = new RandomizerSimple(0); List <SimpleItemDescription> itemDescriptions = new List <SimpleItemDescription>(); List <Tuple <SimpleItemDescription, double> > itemDescriptionWeights = new List <Tuple <SimpleItemDescription, double> >(); List <Tuple <SimpleItemDescription, SimpleItemDescription, double> > itemDescriptionCoWeights = new List <Tuple <SimpleItemDescription, SimpleItemDescription, double> >(); // Add comment config.Description = string.Join(",", typeof(SimpleItemGeneratorPreConfiguration).GetFields().Select(f => { string fieldValue; if (f.GetValue(preConfig) is double) { fieldValue = ((double)f.GetValue(preConfig)).ToString(IOConstants.FORMATTER); } else { fieldValue = f.GetValue(preConfig).ToString(); } return(f.Name + "=" + fieldValue); })); // Generate a set of item-descriptions for (int i = 0; i < preConfig.ItemDescriptionCount; i++) { // Generate next item SimpleItemDescription description = new SimpleItemDescription(null) { ID = i }; // Randomly weight the item double itemDescriptionWeight = 0; switch (preConfig.WeightDistributionType) { case ItemDescriptionWeightDistributionType.Normal: itemDescriptionWeight = randomizer.NextNormalDouble(preConfig.ItemWeightMu, preConfig.ItemWeightSigma, preConfig.ItemWeightLB, preConfig.ItemWeightUB); break; case ItemDescriptionWeightDistributionType.Uniform: itemDescriptionWeight = randomizer.NextDouble(preConfig.ItemWeightLB, preConfig.ItemWeightUB); break; default: throw new ArgumentException("Unknown distribution: " + preConfig.WeightDistributionType); } description.Weight = itemDescriptionWeight; // Randomly determine bundle size of the item if (preConfig.SupplyBundleSize) { int itemDescriptionBundleSize = 0; switch (preConfig.BundleSizeDistributionType) { case ItemDescriptionBundleSizeDistributionType.Normal: itemDescriptionBundleSize = randomizer.NextNormalInt(preConfig.BundleSizeMu, preConfig.BundleSizeSigma, preConfig.BundleSizeLB, preConfig.BundleSizeUB); break; case ItemDescriptionBundleSizeDistributionType.Uniform: itemDescriptionBundleSize = randomizer.NextInt(preConfig.BundleSizeLB, preConfig.BundleSizeUB + 1); break; default: throw new ArgumentException("Unknown distribution: " + preConfig.BundleSizeDistributionType); } description.BundleSize = itemDescriptionBundleSize; } // Add a random hue value to distinguish the item from others description.Hue = randomizer.NextDouble(360); // Add it itemDescriptions.Add(description); // Set a weight for the probability of the item double weight = 0; switch (preConfig.ProbWeightDistributionType) { case ItemDescriptionProbabilityWeightDistributionType.Constant: weight = preConfig.ProbabilityWeightConstant; break; case ItemDescriptionProbabilityWeightDistributionType.Uniform: weight = randomizer.NextDouble(preConfig.ProbabilityWeightUniformMin, preConfig.ProbabilityWeightUniformMax); break; case ItemDescriptionProbabilityWeightDistributionType.Normal: weight = randomizer.NextNormalDouble(preConfig.ProbabilityWeightNormalMu, preConfig.ProbabilityWeightNormalSigma, preConfig.ProbabilityWeightLB, preConfig.ProbabilityWeightUB); break; case ItemDescriptionProbabilityWeightDistributionType.Exponential: weight = randomizer.NextExponentialDouble(preConfig.ProbabilityWeightExpLambda, preConfig.ProbabilityWeightLB, preConfig.ProbabilityWeightUB); break; case ItemDescriptionProbabilityWeightDistributionType.Gamma: weight = randomizer.NextGammaDouble(preConfig.ProbabilityWeightGammaK, preConfig.ProbabilityWeightGammaTheta, preConfig.ProbabilityWeightLB, preConfig.ProbabilityWeightUB); break; default: throw new ArgumentException("Unknown distribution: " + preConfig.ProbWeightDistributionType); } itemDescriptionWeights.Add(new Tuple <SimpleItemDescription, double>(description, weight)); } // Equally distribute items over two-dimensional space Dictionary <SimpleItemDescription, Tuple <double, double> > itemDescriptionPosition = new Dictionary <SimpleItemDescription, Tuple <double, double> >(); foreach (var description in itemDescriptions) { itemDescriptionPosition[description] = new Tuple <double, double>(randomizer.NextDouble(), randomizer.NextDouble()); } // Plot the distribution for reference GnuPlotter.Plot2DPoints( "itemdistribution", new List <Tuple <string, IEnumerable <Tuple <double, double> > > >() { new Tuple <string, IEnumerable <Tuple <double, double> > >("Item locations in 2D", itemDescriptionPosition.Values) }, "item distribution for co-probability emulation"); // Set conditional weights double maxDistance = Distances.CalculateEuclid(0, 0, 1, 1); foreach (var description in itemDescriptions.OrderBy(d => randomizer.NextDouble()).Take((int)(itemDescriptions.Count * preConfig.GivenCoWeights))) { foreach (var otherDescription in itemDescriptions.OrderBy(d => randomizer.NextDouble()).Take((int)(itemDescriptions.Count * preConfig.GivenCoWeights))) { itemDescriptionCoWeights.Add(new Tuple <SimpleItemDescription, SimpleItemDescription, double>( description, otherDescription, maxDistance - Distances.CalculateEuclid( itemDescriptionPosition[description].Item1, itemDescriptionPosition[description].Item2, itemDescriptionPosition[otherDescription].Item1, itemDescriptionPosition[otherDescription].Item2))); } } // Submit all config.ItemDescriptions = itemDescriptions.Select(d => new Skvp <int, double>() { Key = d.ID, Value = d.Hue }).ToList(); config.ItemDescriptionWeights = itemDescriptions.Select(d => new Skvp <int, double>() { Key = d.ID, Value = d.Weight }).ToList(); if (preConfig.SupplyBundleSize) { config.ItemDescriptionBundleSizes = itemDescriptions.Select(d => new Skvp <int, int>() { Key = d.ID, Value = d.BundleSize }).ToList(); } config.ItemWeights = itemDescriptionWeights.Select(d => new Skvp <int, double>() { Key = d.Item1.ID, Value = d.Item2 }).ToList(); config.ItemCoWeights = itemDescriptionCoWeights.Select(d => new Skkvt <int, int, double>() { Key1 = d.Item1.ID, Key2 = d.Item2.ID, Value = d.Item3 }).ToList(); // Name it config.Name = config.GetMetaInfoBasedName(); // Return it return(config); }