private void Save(SearchObjectBase instance)
        {
            if (instance == null)
            {
                throw new ArgumentNullException("instance");
            }
            MailboxDataProvider.Tracer.TraceDebug <SearchObjectId>((long)this.GetHashCode(), "Saving search object {0}", instance.Id);
            if (instance.ObjectState == ObjectState.Deleted)
            {
                throw new InvalidOperationException("Calling Save() on a deleted object is not permitted. Delete() should be used instead.");
            }
            if (instance.ObjectState == ObjectState.Unchanged)
            {
                return;
            }
            bool flag = false;

            if (instance.ObjectState == ObjectState.New && (instance.Id == null || instance.Id.IsEmpty))
            {
                instance.SetId(base.ADUser.Id, Guid.NewGuid());
                flag = true;
            }
            ValidationError[] array = instance.Validate();
            if (array.Length > 0)
            {
                throw new DataValidationException(array[0]);
            }
            using (MailboxDataStore mailboxDataStore = this.OpenMailboxStore())
            {
                if (flag)
                {
                    while (mailboxDataStore.Exists(instance.Id))
                    {
                        instance.SetId(base.ADUser.Id, Guid.NewGuid());
                    }
                }
                instance.OnSaving();
                mailboxDataStore.Save(instance);
            }
            instance.ResetChangeTracking(true);
            this.LogSaveEvent(instance);
        }
Exemple #2
0
 public void Save(SearchObjectBase savedObject)
 {
     this.CheckDisposed("Save");
     if (savedObject == null)
     {
         throw new ArgumentNullException("savedObject");
     }
     using (UserConfiguration userConfiguration = this.OpenFaiMessage(savedObject.Id.ConfigurationName, true))
     {
         bool flag = savedObject.IsChanged(SearchObjectBaseSchema.Name);
         using (Stream stream = userConfiguration.GetStream())
         {
             savedObject.ResetChangeTracking(true);
             IFormatter formatter = ExchangeBinaryFormatterFactory.CreateBinaryFormatter(null);
             formatter.Serialize(stream, savedObject);
             MailboxDataStore.Tracer.TraceDebug <SearchObjectBase, IExchangePrincipal>((long)this.GetHashCode(), "Saved {0} from discovery mailbox {1}.", savedObject, this.MailboxSession.MailboxOwner);
         }
         ConflictResolutionResult conflictResolutionResult = userConfiguration.Save(SaveMode.ResolveConflicts);
         if (conflictResolutionResult.SaveStatus == SaveResult.IrresolvableConflict)
         {
             throw new SaveConflictException(ServerStrings.ErrorSavingSearchObject(savedObject.Id.ToString()), conflictResolutionResult);
         }
         if (flag)
         {
             using (ConfigurationItem configurationItem = (ConfigurationItem)Item.Bind(this.MailboxSession, userConfiguration.Id, new PropertyDefinition[]
             {
                 ItemSchema.Subject
             }))
             {
                 configurationItem.OpenAsReadWrite();
                 configurationItem.Subject = savedObject.Name;
                 configurationItem.Save(SaveMode.FailOnAnyConflict);
             }
         }
     }
 }