public QueryFilterBuilder(LocalizedKeywordMapping keywordMapping, KqlParser.ParseOption parseOptions, RescopedAll rescopedAll, IRecipientResolver recipientResolver, IPolicyTagProvider policyTagProvider, CultureInfo culture) { this.culture = culture; this.parseOptions = parseOptions; this.AllowedKeywords = PropertyKeywordHelper.AllPropertyKeywords; this.keywordMapping = keywordMapping; this.recipientResolver = recipientResolver; this.policyTagProvider = policyTagProvider; this.rescopedAll = rescopedAll; }
private static HashSet <PropertyKeyword> GetSupportedProperties(KqlParser.ParseOption parseOption) { if ((parseOption & KqlParser.ParseOption.UseCiKeywordOnly) != KqlParser.ParseOption.None) { return(PropertyKeywordHelper.CiPropertyKeywords); } if ((parseOption & KqlParser.ParseOption.UseBasicKeywordsOnly) != KqlParser.ParseOption.None) { return(PropertyKeywordHelper.BasicPropertyKeywords); } return(PropertyKeywordHelper.AllPropertyKeywords); }
private QueryFilter GetQueryFilter(string queryString, IRecipientSession recipientSession, IConfigurationSession configurationSession, out QueryFilter nonDiscoveryQueryFilter) { SearchCriteria.RecipientIdentityResolver recipientResolver = null; if (recipientSession != null) { recipientResolver = new SearchCriteria.RecipientIdentityResolver(recipientSession); } PolicyTagAdProvider policyTagProvider = null; if (configurationSession != null) { policyTagProvider = new PolicyTagAdProvider(configurationSession); } KqlParser.ParseOption parseOption = KqlParser.ParseOption.ImplicitOr | KqlParser.ParseOption.UseCiKeywordOnly | KqlParser.ParseOption.DisablePrefixMatch | KqlParser.ParseOption.AllowShortWildcards; nonDiscoveryQueryFilter = KqlParser.ParseAndBuildQuery(queryString, parseOption, this.queryCulture, RescopedAll.Default, recipientResolver, policyTagProvider); parseOption |= KqlParser.ParseOption.EDiscoveryMode; return(KqlParser.ParseAndBuildQuery(queryString, parseOption, this.queryCulture, RescopedAll.Default, recipientResolver, policyTagProvider)); }
public static QueryFilter ParseAndBuildQuery(string query, KqlParser.ParseOption parseOption, CultureInfo cultureInfo, RescopedAll rescopedAll, IRecipientResolver recipientResolver, IPolicyTagProvider policyTagProvider) { KqlParser kqlParser = new KqlParser(); LocalizedKeywordMapping mapping = LocalizedKeywordMapping.GetMapping(cultureInfo); TreeNode treeNode = kqlParser.Parse(query, parseOption, cultureInfo, mapping); QueryFilterBuilder queryFilterBuilder = new QueryFilterBuilder(mapping, parseOption, rescopedAll, recipientResolver, policyTagProvider, cultureInfo); queryFilterBuilder.AllowedKeywords = KqlParser.GetSupportedProperties(parseOption); QueryFilter queryFilter = queryFilterBuilder.Build(treeNode); if (queryFilter == null) { if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None) { throw new ParserException(new ParserErrorInfo(ParserErrorCode.ParserError)); } queryFilter = queryFilterBuilder.BuildAllFilter(query); } return(queryFilter); }
internal TreeNode Parse(string query, KqlParser.ParseOption parseOption, CultureInfo cultureInfo, LocalizedKeywordMapping keywordMapping) { if (string.IsNullOrEmpty(query)) { throw new ArgumentNullException("query"); } if (cultureInfo == null) { throw new ArgumentNullException("cultureInfo"); } if ((parseOption & KqlParser.ParseOption.UseBasicKeywordsOnly) != KqlParser.ParseOption.None && (parseOption & KqlParser.ParseOption.UseCiKeywordOnly) != KqlParser.ParseOption.None) { throw new ArgumentException("GetBasicKeywordOnly can not be combined with UseCIKeywordOnly"); } List <ParserErrorInfo> list = ((parseOption & KqlParser.ParseOption.SuppressError) != KqlParser.ParseOption.None) ? null : new List <ParserErrorInfo>(); KqlParser kqlParser = new KqlParser(); ParsingContext parsingContext = new ParsingContext { CultureInfo = cultureInfo, ImplicitAndBehavior = ((parseOption & KqlParser.ParseOption.ImplicitOr) == KqlParser.ParseOption.None), PropertyLookup = new PropertyLookup(keywordMapping, KqlParser.GetSupportedProperties(parseOption), list), SpecialPropertyHandler = new SpecialPropertyHandler(keywordMapping, list) }; TreeNode treeNode = null; try { KqlParser.VerifyQuery(query); query = KqlParser.NormalizeQuery(query); treeNode = kqlParser.Parse(query, parsingContext); } catch (FormatException innerException) { if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None) { throw new ParserException(new ParserErrorInfo(ParserErrorCode.KqlParseException), innerException); } } catch (ParseException innerException2) { if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None) { throw new ParserException(new ParserErrorInfo(ParserErrorCode.KqlParseException), innerException2); } } catch (ParserException ex) { if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None) { throw ex; } } if (list != null && list.Count > 0) { throw new ParserException(list); } if ((parseOption & KqlParser.ParseOption.SuppressError) == KqlParser.ParseOption.None && treeNode == null) { throw new ParserException(new ParserErrorInfo(ParserErrorCode.ParserError)); } return(treeNode); }
public static QueryFilter ParseAndBuildQuery(string query, KqlParser.ParseOption parseOption, CultureInfo cultureInfo, IRecipientResolver recipientResolver, IPolicyTagProvider policyTagProvider) { return(KqlParser.ParseAndBuildQuery(query, parseOption, cultureInfo, RescopedAll.Default, recipientResolver, policyTagProvider)); }
private static IEnumerable <PropertyDefinition> GetModifiedRecipientPropertiesForEDiscovery(KqlParser.ParseOption parseOption, IEnumerable <PropertyDefinition> properties) { if ((parseOption & KqlParser.ParseOption.EDiscoveryMode) == KqlParser.ParseOption.None) { return(properties); } List <PropertyDefinition> list = new List <PropertyDefinition>(); List <PropertyDefinition> list2 = new List <PropertyDefinition>(); foreach (PropertyDefinition propertyDefinition in properties) { list.Add(propertyDefinition); if (propertyDefinition == ItemSchema.SearchRecipientsTo) { list2.Add(MessageItemSchema.ToGroupExpansionRecipients); } else if (propertyDefinition == ItemSchema.SearchRecipientsCc) { list2.Add(MessageItemSchema.CcGroupExpansionRecipients); } else if (propertyDefinition == ItemSchema.SearchRecipientsBcc) { list2.Add(MessageItemSchema.BccGroupExpansionRecipients); } else if (propertyDefinition == ItemSchema.SearchRecipients) { list2.Add(MessageItemSchema.ToGroupExpansionRecipients); list2.Add(MessageItemSchema.CcGroupExpansionRecipients); list2.Add(MessageItemSchema.BccGroupExpansionRecipients); } } if (list2.Count > 0) { list.AddRange(list2); } return(list); }