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);
        }