예제 #1
0
        internal static QueryFilter OptimizeRecipientTypeFilter(OrFilter orFilter)
        {
            Filters.RecipientTypeBitVector32 recipientTypeBitVector = default(Filters.RecipientTypeBitVector32);
            List <QueryFilter> list = null;

            foreach (QueryFilter queryFilter in orFilter.Filters)
            {
                ComparisonFilter comparisonFilter = queryFilter as ComparisonFilter;
                if (comparisonFilter != null && comparisonFilter.ComparisonOperator == ComparisonOperator.Equal && comparisonFilter.Property == ADRecipientSchema.RecipientType)
                {
                    RecipientType index = (RecipientType)ADObject.PropertyValueFromEqualityFilter(comparisonFilter);
                    recipientTypeBitVector[index] = true;
                }
                else
                {
                    if (list == null)
                    {
                        list = new List <QueryFilter>(orFilter.FilterCount);
                    }
                    list.Add(queryFilter);
                }
            }
            QueryFilter queryFilter2 = null;

            if (!Filters.RecipientTypeFilterOptimizations.TryGetValue(recipientTypeBitVector.Data, out queryFilter2))
            {
                return(orFilter);
            }
            if (list == null)
            {
                return(queryFilter2);
            }
            list.Add(queryFilter2);
            return(new OrFilter(list.ToArray()));
        }
예제 #2
0
        private static Dictionary <int, QueryFilter> InitializeStaticRecipientTypeFilterOptimizations()
        {
            Dictionary <int, QueryFilter> dictionary = new Dictionary <int, QueryFilter>(32);

            Filters.RecipientTypeBitVector32 recipientTypeBitVector = default(Filters.RecipientTypeBitVector32);
            recipientTypeBitVector.Reset();
            recipientTypeBitVector[RecipientType.DynamicDistributionGroup] = true;
            recipientTypeBitVector[RecipientType.UserMailbox] = true;
            recipientTypeBitVector[RecipientType.MailContact] = true;
            recipientTypeBitVector[RecipientType.MailUniversalDistributionGroup] = true;
            recipientTypeBitVector[RecipientType.MailUniversalSecurityGroup]     = true;
            recipientTypeBitVector[RecipientType.MailUser] = true;
            QueryFilter value = Filters.AllMailableUsersContactsDDLsUniversalGroupsFilter;

            dictionary.Add(recipientTypeBitVector.Data, value);
            recipientTypeBitVector.Reset();
            recipientTypeBitVector[RecipientType.Contact]     = true;
            recipientTypeBitVector[RecipientType.MailContact] = true;
            value = ADObject.ObjectClassFilter(ADContact.MostDerivedClass);
            dictionary.Add(recipientTypeBitVector.Data, value);
            recipientTypeBitVector.Reset();
            recipientTypeBitVector[RecipientType.Group] = true;
            recipientTypeBitVector[RecipientType.MailNonUniversalGroup]          = true;
            recipientTypeBitVector[RecipientType.MailUniversalDistributionGroup] = true;
            recipientTypeBitVector[RecipientType.MailUniversalSecurityGroup]     = true;
            value = ADObject.ObjectCategoryFilter(ADGroup.MostDerivedClass);
            dictionary.Add(recipientTypeBitVector.Data, value);
            recipientTypeBitVector.Reset();
            recipientTypeBitVector[RecipientType.MailNonUniversalGroup]          = true;
            recipientTypeBitVector[RecipientType.MailUniversalDistributionGroup] = true;
            recipientTypeBitVector[RecipientType.MailUniversalSecurityGroup]     = true;
            value = new AndFilter(new QueryFilter[]
            {
                Filters.CreateMailEnabledFilter(true),
                ADObject.ObjectCategoryFilter(ADGroup.MostDerivedClass)
            });
            dictionary.Add(recipientTypeBitVector.Data, value);
            recipientTypeBitVector.Reset();
            recipientTypeBitVector[RecipientType.User]        = true;
            recipientTypeBitVector[RecipientType.MailUser]    = true;
            recipientTypeBitVector[RecipientType.UserMailbox] = true;
            value = ADUser.ImplicitFilterInternal;
            dictionary.Add(recipientTypeBitVector.Data, value);
            recipientTypeBitVector.Reset();
            recipientTypeBitVector[RecipientType.DynamicDistributionGroup] = true;
            recipientTypeBitVector[RecipientType.UserMailbox] = true;
            recipientTypeBitVector[RecipientType.MailContact] = true;
            recipientTypeBitVector[RecipientType.MailUniversalDistributionGroup] = true;
            recipientTypeBitVector[RecipientType.MailUniversalSecurityGroup]     = true;
            recipientTypeBitVector[RecipientType.MailUser] = true;
            recipientTypeBitVector[RecipientType.MailNonUniversalGroup] = true;
            recipientTypeBitVector[RecipientType.PublicFolder]          = true;
            value = new AndFilter(new QueryFilter[]
            {
                Filters.CreateMailEnabledFilter(true),
                new OrFilter(new QueryFilter[]
                {
                    ADObject.ObjectCategoryFilter(ADUser.ObjectCategoryNameInternal),
                    ADObject.ObjectCategoryFilter(ADDynamicGroup.ObjectCategoryNameInternal),
                    ADObject.ObjectCategoryFilter(ADGroup.MostDerivedClass),
                    ADObject.ObjectCategoryFilter(ADPublicFolder.MostDerivedClass)
                })
            });
            dictionary.Add(recipientTypeBitVector.Data, value);
            recipientTypeBitVector.Reset();
            recipientTypeBitVector[RecipientType.DynamicDistributionGroup] = true;
            recipientTypeBitVector[RecipientType.UserMailbox] = true;
            recipientTypeBitVector[RecipientType.MailContact] = true;
            recipientTypeBitVector[RecipientType.MailUniversalDistributionGroup] = true;
            recipientTypeBitVector[RecipientType.MailUniversalSecurityGroup]     = true;
            recipientTypeBitVector[RecipientType.MailUser] = true;
            recipientTypeBitVector[RecipientType.MailNonUniversalGroup]  = true;
            recipientTypeBitVector[RecipientType.PublicFolder]           = true;
            recipientTypeBitVector[RecipientType.SystemAttendantMailbox] = true;
            recipientTypeBitVector[RecipientType.SystemMailbox]          = true;
            value = new AndFilter(new QueryFilter[]
            {
                Filters.CreateMailEnabledFilter(true),
                new OrFilter(new QueryFilter[]
                {
                    ADObject.ObjectCategoryFilter(ADUser.ObjectCategoryNameInternal),
                    ADObject.ObjectCategoryFilter(ADDynamicGroup.ObjectCategoryNameInternal),
                    ADObject.ObjectCategoryFilter(ADGroup.MostDerivedClass),
                    ADObject.ObjectCategoryFilter(ADPublicFolder.MostDerivedClass),
                    ADObject.ObjectCategoryFilter(ADSystemAttendantMailbox.MostDerivedClass),
                    ADObject.ObjectCategoryFilter(ADSystemMailbox.MostDerivedClass)
                })
            });
            dictionary.Add(recipientTypeBitVector.Data, value);
            recipientTypeBitVector.Reset();
            recipientTypeBitVector[RecipientType.DynamicDistributionGroup]       = true;
            recipientTypeBitVector[RecipientType.MailUniversalDistributionGroup] = true;
            recipientTypeBitVector[RecipientType.MailUniversalSecurityGroup]     = true;
            value = new AndFilter(new QueryFilter[]
            {
                Filters.CreateMailEnabledFilter(true),
                new OrFilter(new QueryFilter[]
                {
                    ADObject.ObjectCategoryFilter(ADDynamicGroup.ObjectCategoryNameInternal),
                    new AndFilter(new QueryFilter[]
                    {
                        ADObject.ObjectCategoryFilter(ADGroup.MostDerivedClass),
                        Filters.CreateUniversalGroupFilter(true)
                    })
                })
            });
            dictionary.Add(recipientTypeBitVector.Data, value);
            recipientTypeBitVector.Reset();
            recipientTypeBitVector[RecipientType.MailContact] = true;
            recipientTypeBitVector[RecipientType.MailUser]    = true;
            value = new AndFilter(new QueryFilter[]
            {
                ADObject.ObjectCategoryFilter(ADUser.ObjectCategoryNameInternal),
                Filters.CreateMailEnabledFilter(true),
                new OrFilter(new QueryFilter[]
                {
                    ADObject.ObjectClassFilter(ADContact.MostDerivedClass),
                    Filters.CreateMailboxEnabledFilter(false)
                })
            });
            dictionary.Add(recipientTypeBitVector.Data, value);
            recipientTypeBitVector.Reset();
            return(dictionary);
        }