static void Initialize() {
            try {
                //Get the feature's configuration info
                var qc =
                    ConfigurationManager.GetSection("FilterProvider") as FilterProviderConfiguration;

                if (qc == null)
                    return;
                if (qc.DefaultProvider == null)
                    throw new ProviderException("You must specify a valid default provider.");

                //Instantiate the providers
                providerCollection = new FilterProviderCollection();
                ProvidersHelper.InstantiateProviders(qc.Providers, providerCollection, typeof (FilterProviderBase));
                providerCollection.SetReadOnly();
                defaultProvider = providerCollection[qc.DefaultProvider];
                if (defaultProvider == null) {
                    PropertyInformation information = qc.ElementInformation.Properties["defaultProvider"];
                    if (information != null)
                        throw new ConfigurationErrorsException(
                            "You must specify a default provider for the feature.",
                            information.Source,
                            information.LineNumber);
                }
            }
            catch (Exception ex) {
                isInitialized = true;

                Tracing.Tracer.LogError(ex);
                throw;
            }

            isInitialized = true; //error-free initialization
        }
 public static void CreateMember(ITypeInfo typeInfo , FilterProviderBase provider)
 {
     var attributes = new List<Attribute>{new BrowsableAttribute(false),new MemberDesignTimeVisibilityAttribute(
                                                                                                       false)};
     
     IMemberInfo member = typeInfo.CreateMember(provider.FilterMemberName, provider.FilterMemberType);
     if (provider.FilterMemberIndexed)
         attributes.Add(new IndexedAttribute());
     if (provider.FilterMemberSize!=SizeAttribute.DefaultStringMappingFieldSize)
         attributes.Add(new SizeAttribute(provider.FilterMemberSize));
     foreach (var attribute in attributes)
         member.AddAttribute(attribute);
 }
 public void CopyTo(FilterProviderBase[] array, int index)
 {
     base.CopyTo(array, index);
 }
 static bool HasFilterValue(FilterProviderBase provider) {
     return provider.FilterValue == null || (provider.FilterValue is ICollection && ((ICollection) provider.FilterValue).Count==0);
 }
 string GetNodeAlias(SelectStatement statement, FilterProviderBase providerBase) {
     return statement.Operands.OfType<QueryOperand>().Where(operand 
         => operand.ColumnName == providerBase.FilterMemberName).Select(operand 
             => operand.NodeAlias).FirstOrDefault() ?? statement.Alias;
 }
 IEnumerable<BinaryOperator> GetBinaryOperators(CriteriaOperatorExtractor extractor, FilterProviderBase providerBase) {
     return extractor.BinaryOperators.Where(
                                               @operator =>
                                               @operator.RightOperand is OperandValue &&
                                               ReferenceEquals(((OperandValue) @operator.RightOperand).Value, providerBase.FilterMemberName));
 }
 void ApplyCondition(SelectStatement statement, FilterProviderBase providerBase, string nodeAlias) {
     if (providerBase.FilterValue is IEnumerable) {
         CriteriaOperator criteriaOperator = ((IEnumerable) providerBase.FilterValue).Cast<object>().Aggregate<object, CriteriaOperator>(null, (current, value) 
             => current | new QueryOperand(providerBase.FilterMemberName, nodeAlias) == value.ToString());
         criteriaOperator = new GroupOperator(criteriaOperator);
         statement.Condition &= criteriaOperator;
     }
     else
         statement.Condition &= new QueryOperand(providerBase.FilterMemberName, nodeAlias) == (providerBase.FilterValue == null ? null : providerBase.FilterValue.ToString());
     Tracing.Tracer.LogVerboseValue("new_statement", statement);
 }