private void SetNotificationMessage(MessageItem notificationMessage, UnifiedPolicyNotificationBase notification)
 {
     notificationMessage.PropertyBag[MessageItemSchema.UnifiedPolicyNotificationId] = notification.Identity.ToString();
     using (Stream stream = notificationMessage.PropertyBag.OpenPropertyStream(MessageItemSchema.UnifiedPolicyNotificationData, PropertyOpenMode.Create))
     {
         byte[] array = notification.GetWorkItem().Serialize();
         stream.Write(array, 0, array.Length);
     }
 }
        protected override void InternalSave(ConfigurableObject instance)
        {
            if (instance == null)
            {
                throw new ArgumentNullException("instance");
            }
            UnifiedPolicyNotificationBase unifiedPolicyNotificationBase = instance as UnifiedPolicyNotificationBase;

            if (unifiedPolicyNotificationBase == null)
            {
                throw new NotSupportedException("Save: " + instance.GetType().FullName);
            }
            switch (unifiedPolicyNotificationBase.ObjectState)
            {
            case ObjectState.New:
                using (Folder folder = Folder.Bind(base.MailboxSession, base.MailboxSession.GetDefaultFolderId(DefaultFolderType.Inbox)))
                {
                    using (MessageItem messageItem = MessageItem.CreateAssociated(base.MailboxSession, folder.Id))
                    {
                        this.SetNotificationMessage(messageItem, unifiedPolicyNotificationBase);
                        messageItem.Save(SaveMode.NoConflictResolutionForceSave);
                        messageItem.Load();
                        unifiedPolicyNotificationBase.StoreObjectId = messageItem.Id;
                    }
                    return;
                }
                break;

            case ObjectState.Unchanged:
                return;

            case ObjectState.Changed:
                break;

            case ObjectState.Deleted:
                goto IL_FE;

            default:
                return;
            }
            if (unifiedPolicyNotificationBase.StoreObjectId == null)
            {
                throw new ArgumentException("notification.StoreObjectId is null when saving for an update.");
            }
            using (MessageItem messageItem2 = MessageItem.Bind(base.MailboxSession, unifiedPolicyNotificationBase.StoreObjectId))
            {
                this.SetNotificationMessage(messageItem2, unifiedPolicyNotificationBase);
                messageItem2.Save(SaveMode.NoConflictResolutionForceSave);
                messageItem2.Load();
                return;
            }
IL_FE:
            throw new InvalidOperationException(ServerStrings.ExceptionObjectHasBeenDeleted);
        }
        private UnifiedPolicyNotificationBase GetNotificationFromStoreId(StoreId storeId)
        {
            UnifiedPolicyNotificationBase unifiedPolicyNotificationBase = null;

            using (MessageItem messageItem = MessageItem.Bind(base.MailboxSession, storeId))
            {
                WorkItemBase workItemBase = null;
                using (Stream stream = messageItem.PropertyBag.OpenPropertyStream(MessageItemSchema.UnifiedPolicyNotificationData, PropertyOpenMode.ReadOnly))
                {
                    if (stream.Length > 0L)
                    {
                        byte[] array = new byte[stream.Length];
                        stream.Position = 0L;
                        stream.Read(array, 0, array.Length);
                        workItemBase = WorkItemBase.Deserialize(array);
                    }
                }
                unifiedPolicyNotificationBase               = UnifiedPolicyNotificationFactory.Create(workItemBase, base.MailboxSession.MailboxOwner.ObjectId);
                workItemBase.WorkItemId                     = storeId.ToBase64String();
                workItemBase.HasPersistentBackUp            = true;
                unifiedPolicyNotificationBase.StoreObjectId = messageItem.Id;
            }
            return(unifiedPolicyNotificationBase);
        }
        protected override void InternalDelete(ConfigurableObject instance)
        {
            if (instance == null)
            {
                throw new ArgumentNullException("instance");
            }
            UnifiedPolicyNotificationBase unifiedPolicyNotificationBase = instance as UnifiedPolicyNotificationBase;

            if (unifiedPolicyNotificationBase == null)
            {
                throw new NotSupportedException("Delete: " + instance.GetType().FullName);
            }
            if (unifiedPolicyNotificationBase.StoreObjectId == null)
            {
                throw new ArgumentException("notification.StoreObjectId is null when deleting the instance.");
            }
            using (Folder folder = Folder.Bind(base.MailboxSession, base.MailboxSession.GetDefaultFolderId(DefaultFolderType.Inbox)))
            {
                folder.DeleteObjects(DeleteItemFlags.HardDelete, new StoreId[]
                {
                    unifiedPolicyNotificationBase.StoreObjectId
                });
            }
        }