示例#1
0
        public void Topic_MessageFromKnownParticipant()
        {
            var participantsChanged = false;

            topic.PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == "Participants")
                {
                    participantsChanged = true;
                }
            };

            var message =
                new Message {
                TimeStamp = DateTime.UtcNow.AddMonths(-1), Sender = me, Text = "Salut ce faci?", Topic = "Default"
            };

            topic.Add(message);

            Assert.IsFalse(participantsChanged);
        }
    static void Main()
    {
        TopicModel t = new TopicModel {
            Id = "T101", Author = "Harry"
        };
        CommentModel c = new CommentModel {
            Id = "C101", Content = "Comment 01"
        };

        using (var topic = new Topic())
        {
            topic.Add <IModel>(t, c);
        }

        Console.ReadLine();
    }
示例#3
0
        /// <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);
        }