internal static void Delete(Folder folder, string searchString, UserConfigurationSearchFlags searchFlags) { EnumValidator.AssertValid <UserConfigurationSearchFlags>(searchFlags); if (searchFlags != UserConfigurationSearchFlags.SubString && searchFlags != UserConfigurationSearchFlags.FullString && searchFlags != UserConfigurationSearchFlags.Prefix) { ExTraceGlobals.StorageTracer.TraceError <UserConfigurationSearchFlags>(0L, "UserConfiguration::FindItems. The search flag is not supported. searchFlags = {0}.", searchFlags); throw new NotSupportedException(); } IList <IStorePropertyBag> list = null; try { list = UserConfiguration.QueryConfigurations(folder, null, new UserConfigurationName(searchString, ConfigurationNameKind.PartialName), searchFlags, StorageLimits.Instance.UserConfigurationMaxSearched, new PropertyDefinition[0]); } catch (InvalidOperationException innerException) { throw new InvalidOperationException(ServerStrings.ExCannotQueryAssociatedTable, innerException); } List <VersionedId> list2 = new List <VersionedId>(); for (int i = 0; i < list.Count; i++) { list2.Add((VersionedId)list[i][InternalSchema.ItemId]); if (i == list.Count - 1 || list2.Count > 100) { AggregateOperationResult result = folder.Session.Delete(DeleteItemFlags.SoftDelete, list2.ToArray()); UserConfiguration.CheckOperationResults(result, "Delete"); list2.Clear(); } } }
internal static IComparer GetCustomComparer(UserConfigurationSearchFlags searchFlags) { return(new UserConfigurationName.CustomConfigNameComparer(searchFlags)); }
internal CustomConfigNameComparer(UserConfigurationSearchFlags searchFlags) { this.searchFlags = searchFlags; }
private ICollection <UserConfiguration> InternalFindUserConfigurations(Folder folder, string searchString, UserConfigurationSearchFlags searchFlags) { EnumValidator.ThrowIfInvalid <UserConfigurationSearchFlags>(searchFlags, "searchFlags"); if (searchString == null) { ExTraceGlobals.StorageTracer.TraceError <string>((long)this.GetHashCode(), "Folder::FindUserConfigurations. Argument {0} is Null.", "searchString"); throw new ArgumentNullException(ServerStrings.ExNullParameter("searchString", 1)); } return(UserConfiguration.Find(folder, searchString, searchFlags)); }
public ICollection <UserConfiguration> FindFolderConfigurations(string searchString, UserConfigurationSearchFlags searchFlags, StoreId folderId) { ICollection <UserConfiguration> result; using (Folder folder = Folder.Bind(this.mailboxSession, folderId)) { result = this.InternalFindUserConfigurations(folder, searchString, searchFlags); } return(result); }
public ICollection <UserConfiguration> FindMailboxConfigurations(string searchString, UserConfigurationSearchFlags searchFlags) { ICollection <UserConfiguration> result; using (Folder folder = Folder.Bind(this.mailboxSession, this.GetDefaultFolderId(DefaultFolderType.Configuration))) { result = this.InternalFindUserConfigurations(folder, searchString, searchFlags); } return(result); }
private static IList <IStorePropertyBag> QueryConfigurations(Folder folder, SortBy[] sorts, UserConfigurationName configurationName, UserConfigurationSearchFlags searchFlags, int maxRow, params PropertyDefinition[] columns) { List <IStorePropertyBag> list = new List <IStorePropertyBag>(); columns = UserConfiguration.BuildPrefetchProperties(columns); IList <IStorePropertyBag> list2 = UserConfiguration.FetchAllConfigurations(folder, sorts, 10000, columns); IComparer customComparer = UserConfigurationName.GetCustomComparer(searchFlags); foreach (IStorePropertyBag storePropertyBag in list2) { string x = storePropertyBag.TryGetProperty(InternalSchema.ItemClass) as string; if (customComparer.Compare(x, configurationName) == 0) { list.Add(storePropertyBag); } } if (folder.Session is MailboxSession) { if (folder.Session.LogonType == LogonType.Owner) { UserConfiguration.AddToConfigurationCache(folder, list); } else { UserConfiguration.AddToConfigurationCache(folder, list2); } } return(list); }
internal static ICollection <UserConfiguration> Find(Folder folder, string searchString, UserConfigurationSearchFlags searchFlags) { EnumValidator.AssertValid <UserConfigurationSearchFlags>(searchFlags); List <UserConfiguration> list = new List <UserConfiguration>(); if (searchFlags != UserConfigurationSearchFlags.SubString && searchFlags != UserConfigurationSearchFlags.FullString && searchFlags != UserConfigurationSearchFlags.Prefix) { ExTraceGlobals.StorageTracer.TraceError <UserConfigurationSearchFlags>(0L, "UserConfiguration::FindItems. The search flag is not supported. searchFlags = {0}.", searchFlags); throw new NotSupportedException(ServerStrings.ExNotSupportedConfigurationSearchFlags(searchFlags.ToString())); } IList <IStorePropertyBag> list2 = null; try { list2 = UserConfiguration.QueryConfigurations(folder, null, new UserConfigurationName(searchString, ConfigurationNameKind.PartialName), searchFlags, StorageLimits.Instance.UserConfigurationMaxSearched + 1, new PropertyDefinition[0]); } catch (InvalidOperationException innerException) { throw new InvalidOperationException(ServerStrings.ExCannotQueryAssociatedTable, innerException); } if (list2.Count > StorageLimits.Instance.UserConfigurationMaxSearched) { ExTraceGlobals.StorageTracer.TraceError <int, int>(0L, "UserConfiguration::FindItems. There are too many user configuration objects created with the same name. Max. = {0}, Find = {1}.", StorageLimits.Instance.UserConfigurationMaxSearched, list2.Count); throw new TooManyConfigurationObjectsException(ServerStrings.ExTooManyObjects(searchString, list2.Count, StorageLimits.Instance.UserConfigurationMaxSearched)); } if (list2.Count > 0) { UserConfiguration.BuildConfigurationsFromFilterQuery(list2, folder, list); } return(list); }