private AggregationContext(UserConfigurationManager manager, IAggregatedUserConfigurationReader reader, UserConfigurationManager.AggregationStats stats, ConcurrentDictionary <string, Func <SerializableDataBase> > requestedTypes)
 {
     this.manager        = manager;
     this.reader         = reader;
     this.stats          = stats;
     this.requestedTypes = requestedTypes;
     this.createdTypes   = new ConcurrentDictionary <string, SerializableDataBase>();
 }
예제 #2
0
        private static void AddToConfigurationCache(Folder folder, IList <IStorePropertyBag> items)
        {
            if (items == null || items.Count == 0)
            {
                return;
            }
            MailboxSession mailboxSession = folder.Session as MailboxSession;

            if (mailboxSession == null)
            {
                throw new NotSupportedException();
            }
            UserConfigurationManager userConfigurationManager = mailboxSession.UserConfigurationManager;
            List <VersionedId>       list = new List <VersionedId>();

            new List <int>();
            string a = null;

            for (int i = 0; i < items.Count; i++)
            {
                IStorePropertyBag storePropertyBag = items[i];
                if (PropertyError.IsPropertyError(storePropertyBag.TryGetProperty(InternalSchema.ItemClass)))
                {
                    ExTraceGlobals.StorageTracer.TraceError(0L, "The configuration data's field has been corrupted. Field = ItemClass.");
                    throw new CorruptDataException(ServerStrings.ExConfigDataCorrupted("ItemClass"));
                }
                if (PropertyError.IsPropertyError(storePropertyBag.TryGetProperty(InternalSchema.ItemId)))
                {
                    ExTraceGlobals.StorageTracer.TraceError(0L, "The configuration data's field has been corrupted. Field = Id.");
                    throw new CorruptDataException(ServerStrings.ExConfigDataCorrupted("Id"));
                }
                string b = storePropertyBag.TryGetProperty(InternalSchema.ItemClass) as string;
                if (a == b)
                {
                    list.Add((VersionedId)storePropertyBag[InternalSchema.ItemId]);
                    items.RemoveAt(i);
                    i--;
                }
                else
                {
                    string name = (string)storePropertyBag[InternalSchema.ItemClass];
                    if (UserConfigurationName.IsValidName(name, ConfigurationNameKind.ItemClass))
                    {
                        userConfigurationManager.UserConfigurationCache.Add(folder.Id.ObjectId, new UserConfigurationName(name, ConfigurationNameKind.ItemClass), ((VersionedId)storePropertyBag[InternalSchema.ItemId]).ObjectId);
                    }
                }
                a = (storePropertyBag.TryGetProperty(InternalSchema.ItemClass) as string);
            }
            if (folder.Session.LogonType == LogonType.Owner)
            {
                userConfigurationManager.UserConfigurationCache.Save();
            }
            AggregateOperationResult result = folder.Session.Delete(DeleteItemFlags.SoftDelete, list.ToArray());

            UserConfiguration.CheckOperationResults(result, "DeleteDuplicates");
        }
예제 #3
0
        internal static bool DeleteFromCalendar(MailboxSession session, StoreId folderId)
        {
            UserConfigurationManager userConfigurationManager = session.UserConfigurationManager;
            OperationResult          operationResult          = userConfigurationManager.DeleteFolderConfigurations(folderId, new string[]
            {
                "WorkHours"
            });

            ExTraceGlobals.WorkHoursTracer.TraceDebug <IExchangePrincipal, OperationResult>(0L, "DeleteFromCalendar User{0} - Result {1}.", session.MailboxOwner, operationResult);
            return(operationResult == OperationResult.Succeeded);
        }
        // Token: 0x06000FD0 RID: 4048 RVA: 0x00040BFC File Offset: 0x0003EDFC
        private void GetOrOpenConfiguration(MailboxSession mailboxSession)
        {
            UserConfigurationManager userConfigurationManager = mailboxSession.UserConfigurationManager;

            if (userConfigurationManager == null)
            {
                userConfigurationManager = new UserConfigurationManager(mailboxSession);
            }
            try
            {
                this.backendUserConfiguration = userConfigurationManager.GetMailboxConfiguration(this.configurationCacheName, UserConfigurationTypes.XML);
            }
            catch (ObjectNotFoundException)
            {
                this.backendUserConfiguration = userConfigurationManager.CreateMailboxConfiguration(this.configurationCacheName, UserConfigurationTypes.XML);
            }
        }
예제 #5
0
        internal static WorkHoursInCalendar GetFromCalendar(MailboxSession session, StoreId folderId)
        {
            WorkHoursInCalendar workHoursInCalendar = null;

            try
            {
                UserConfigurationManager userConfigurationManager = session.UserConfigurationManager;
                using (IReadableUserConfiguration readOnlyFolderConfiguration = userConfigurationManager.GetReadOnlyFolderConfiguration("WorkHours", UserConfigurationTypes.XML, folderId))
                {
                    if (readOnlyFolderConfiguration == null)
                    {
                        ExTraceGlobals.WorkHoursTracer.TraceDebug <string>(-1L, "{0}: Work hours configuration item was not found", session.MailboxOwner.MailboxInfo.DisplayName);
                    }
                    else
                    {
                        using (Stream xmlStream = readOnlyFolderConfiguration.GetXmlStream())
                        {
                            workHoursInCalendar = WorkHoursInCalendar.DeserializeObject(xmlStream);
                            if (workHoursInCalendar == null)
                            {
                                ExTraceGlobals.WorkHoursTracer.TraceDebug <string>(-1L, "{0}: Work hours configuration item was found, but no content was found", session.MailboxOwner.MailboxInfo.DisplayName);
                            }
                        }
                    }
                }
            }
            catch (ObjectNotFoundException arg)
            {
                ExTraceGlobals.WorkHoursTracer.TraceError <string, ObjectNotFoundException>(-1L, "{0}: Could not retrieve working hours. Exception information is {1}", session.MailboxOwner.MailboxInfo.DisplayName, arg);
            }
            catch (InvalidOperationException ex)
            {
                ExTraceGlobals.WorkHoursTracer.TraceError <string, InvalidOperationException>(-1L, "{0}: Malformed working hours XML in mailbox. Exception information is {1}", session.MailboxOwner.MailboxInfo.DisplayName, ex);
                throw new WorkingHoursXmlMalformedException(ServerStrings.MalformedWorkingHours(session.MailboxOwner.MailboxInfo.DisplayName, ex.ToString()), ex);
            }
            catch (XmlException ex2)
            {
                ExTraceGlobals.WorkHoursTracer.TraceError <string, XmlException>(-1L, "{0}: Hit an XmlException deserializing working hours XML in mailbox. Exception information is {1}", session.MailboxOwner.MailboxInfo.DisplayName, ex2);
                throw new WorkingHoursXmlMalformedException(ServerStrings.MalformedWorkingHours(session.MailboxOwner.MailboxInfo.DisplayName, ex2.ToString()), ex2);
            }
            return(workHoursInCalendar);
        }
예제 #6
0
        private static UserConfiguration GetOrCreateWorkingHourConfiguration(MailboxSession session, StoreId folderId)
        {
            UserConfigurationManager userConfigurationManager = session.UserConfigurationManager;
            UserConfiguration        userConfiguration        = null;

            try
            {
                userConfiguration = userConfigurationManager.GetFolderConfiguration("WorkHours", UserConfigurationTypes.XML, folderId);
            }
            catch (ObjectNotFoundException)
            {
                ExTraceGlobals.WorkHoursTracer.TraceDebug <string>(0L, "WorkHoursInCalendar::GetOrCreateWorkingHourConfiguration. GetOrCreateWorkingHourConfigurationStorageWorkingHours does not exist yet. I am going to create a new one. Mailbox = {0}.", session.MailboxOwner.MailboxInfo.DisplayName);
                userConfiguration = userConfigurationManager.CreateFolderConfiguration("WorkHours", UserConfigurationTypes.XML, folderId);
            }
            if (userConfiguration == null)
            {
                throw new WorkingHoursSaveFailedException(ServerStrings.CreateConfigurationItem(session.MailboxOwner.MailboxInfo.DisplayName));
            }
            return(userConfiguration);
        }
 public UserConfigurationManager.AggregationContext Clone(UserConfigurationManager manager)
 {
     return(new UserConfigurationManager.AggregationContext(manager, this.reader, this.stats, this.requestedTypes));
 }
 public AggregationContext(UserConfigurationManager manager, IAggregatedUserConfigurationReader reader) : this(manager, reader, new UserConfigurationManager.AggregationStats(), new ConcurrentDictionary <string, Func <SerializableDataBase> >())
 {
 }
예제 #9
0
        internal static UserConfiguration GetIgnoringCache(UserConfigurationManager manager, Folder folder, UserConfigurationName configurationName, UserConfigurationTypes freefetchType)
        {
            EnumValidator.AssertValid <UserConfigurationTypes>(freefetchType);
            UserConfiguration userConfiguration = null;

            PropertyDefinition[] columns;
            if ((freefetchType & UserConfigurationTypes.Dictionary) > (UserConfigurationTypes)0)
            {
                columns = new PropertyDefinition[]
                {
                    InternalSchema.UserConfigurationDictionary
                };
            }
            else
            {
                columns = UserConfiguration.ZeroProperties;
            }
            SortBy[] sorts = new SortBy[]
            {
                new SortBy(InternalSchema.CreationTime, SortOrder.Ascending),
                new SortBy(InternalSchema.MID, SortOrder.Ascending)
            };
            IList <IStorePropertyBag> list = null;

            try
            {
                ExTraceGlobals.UserConfigurationTracer.TraceDebug <UserConfigurationName>(0L, "UserConfiguration::GetIgnoringCache. Hit Query. ConfigName = {0}.", configurationName);
                list = UserConfiguration.QueryConfigurations(folder, sorts, configurationName, UserConfigurationSearchFlags.FullString, 2, columns);
            }
            catch (InvalidOperationException innerException)
            {
                throw new InvalidOperationException(ServerStrings.ExCannotQueryAssociatedTable, innerException);
            }
            if (list.Count <= 0)
            {
                ExTraceGlobals.StorageTracer.TraceError <UserConfigurationName, UserConfigurationTypes>(0L, "UserConfiguration::GetIgnoringCache. The configuration object was not found. Name = {0}, type = {1}.", configurationName, freefetchType);
                throw new ObjectNotFoundException(ServerStrings.ExConfigurationNotFound(configurationName.Name));
            }
            ExTraceGlobals.UserConfigurationTracer.TraceDebug <UserConfigurationName>(0L, "UserConfiguration::GetIgnoringCache. Find the config item and build user config object from it. ConfigName = {0}.", configurationName);
            bool flag = false;
            UserConfiguration result2;

            try
            {
                userConfiguration = UserConfiguration.BuildConfigurationFromQueryItem(folder, list[0], (freefetchType & UserConfigurationTypes.Dictionary) > (UserConfigurationTypes)0);
                if (list.Count > 1)
                {
                    ExTraceGlobals.UserConfigurationTracer.TraceDebug <UserConfigurationName>(0L, "UserConfiguration::GetIgnoringCache. Found duplicate items. Conflict resolution. ConfigName = {0}.", configurationName);
                    List <VersionedId> list2 = new List <VersionedId>();
                    list = UserConfiguration.QueryConfigurations(folder, sorts, configurationName, UserConfigurationSearchFlags.FullString, 100, new PropertyDefinition[0]);
                    for (int i = 1; i < list.Count; i++)
                    {
                        list2.Add((VersionedId)list[i][InternalSchema.ItemId]);
                    }
                    if (list2.Count > 0)
                    {
                        AggregateOperationResult result = folder.Session.Delete(DeleteItemFlags.HardDelete, list2.ToArray());
                        UserConfiguration.CheckOperationResults(result, "DeleteDuplicates");
                    }
                }
                flag    = true;
                result2 = userConfiguration;
            }
            finally
            {
                if (!flag && userConfiguration != null)
                {
                    userConfiguration.Dispose();
                }
            }
            return(result2);
        }