public static void ProcessContentFilter(string contentFilter, int contentFilterLCID, PSCmdlet cmdlet, IFilterBuilderHelper mapper, out RestrictionData restriction, out string normalizedFilter) { Exception ex = null; try { QueryParser queryParser = new QueryParser(contentFilter, ObjectSchema.GetInstance <ContentFilterSchema>(), QueryParser.Capabilities.All, (cmdlet != null) ? new QueryParser.EvaluateVariableDelegate(cmdlet.GetVariableValue) : null, new QueryParser.ConvertValueFromStringDelegate(ContentFilterBuilder.ConvertValueFromString)); QueryFilter parseTree = queryParser.ParseTree; Restriction restriction2 = ContentFilterBuilder.BuildRestriction(parseTree, mapper); restriction = RestrictionData.GetRestrictionData(restriction2); restriction.LCID = contentFilterLCID; normalizedFilter = parseTree.GenerateInfixString(FilterLanguage.Monad); return; } catch (InvalidCastException ex2) { ex = ex2; } catch (ParsingException ex3) { ex = ex3; } catch (ArgumentOutOfRangeException ex4) { ex = ex4; } throw new InvalidContentFilterPermanentException(ex.Message, ex); }
private static Restriction BuildRestriction(QueryFilter filter, IFilterBuilderHelper helper) { CompositeFilter compositeFilter = filter as CompositeFilter; if (compositeFilter != null) { Restriction[] array = new Restriction[compositeFilter.FilterCount]; int num = 0; foreach (QueryFilter filter2 in compositeFilter.Filters) { array[num++] = ContentFilterBuilder.BuildRestriction(filter2, helper); } if (compositeFilter is AndFilter) { return(Restriction.And(array)); } if (compositeFilter is OrFilter) { return(Restriction.Or(array)); } throw ContentFilterBuilder.UnexpectedFilterType(filter); } else { NotFilter notFilter = filter as NotFilter; if (notFilter != null) { return(Restriction.Not(ContentFilterBuilder.BuildRestriction(notFilter.Filter, helper))); } SinglePropertyFilter singlePropertyFilter = filter as SinglePropertyFilter; if (singlePropertyFilter == null) { throw ContentFilterBuilder.UnexpectedFilterType(filter); } ContentFilterSchema.ContentFilterPropertyDefinition contentFilterPropertyDefinition = singlePropertyFilter.Property as ContentFilterSchema.ContentFilterPropertyDefinition; if (contentFilterPropertyDefinition == null) { throw ContentFilterBuilder.UnexpectedFilterType(filter); } return(contentFilterPropertyDefinition.ConvertToRestriction(singlePropertyFilter, helper)); } }