/// <summary> /// Creates a filter using the specified query objects /// </summary> /// <param name="objectType">The object type to query</param> /// <param name="queryOperator">The operator used to compare the query elements</param> /// <param name="queries">The query elements</param> /// <returns>An XPath query string</returns> internal static string CreateFilter(string objectType, GroupOperator queryOperator, IEnumerable <IXPathQueryObject> queries) { XPathQueryGroup group = new XPathQueryGroup(queryOperator, queries); group.GroupOperator = queryOperator; return(XPathFilterBuilder.CreateFilter(objectType, group)); }
private static XPathQueryGroup ReadQueryGroup(StringTokenizer tokenizer, bool negate) { XPathQueryGroup group = new XPathQueryGroup(); Token t = tokenizer.CurrentToken; switch (t.Kind) { case TokenKind.Ampersand: group.GroupOperator = GroupOperator.And; break; case TokenKind.Pipe: group.GroupOperator = GroupOperator.Or; break; case TokenKind.Exclamation: group.GroupOperator = GroupOperator.And; group.Negate = true; break; default: throw new LdapFilterParserException(new TokenError("Unexpected group operator", t.Line, t.Column, t.Value, tokenizer.ToString())); } do { t = tokenizer.NextNonWhiteSpace(); if (t.Kind == TokenKind.CloseBracket) { break; } if (t.Kind != TokenKind.OpenBracket) { throw new LdapFilterParserException(new TokenError("Unexpected value", t.Line, t.Column, t.Value, tokenizer.ToString())); } t = tokenizer.NextNonWhiteSpace(); if (t.Kind == TokenKind.Word) { group.Queries.Add(ReadQuery(tokenizer, false)); //t = tokenizer.Next(); } else { group.Queries.Add(ReadQueryGroup(tokenizer, false)); //t = tokenizer.Next(); } }while (tokenizer.CurrentToken.Kind == TokenKind.CloseBracket); return(group); }
/// <summary> /// Creates a filter that dereferences a matching expression, and returns the resulting values from the referenced attribute /// </summary> /// <param name="searchObjectType">The object type to query</param> /// <param name="keyValuePairs">The list to attribute and value pairs to query for</param> /// <param name="valueComparisonOperator">The operator used to compare the attribute and value pairs</param> /// <param name="groupOperator">The operator to use to join the attribute value pair comparisons together</param> /// <param name="referenceAttributeName">The name of the attribute used to dereference the expression</param> /// <returns>An XPath query string</returns> public static string CreateDereferenceFilter(string searchObjectType, Dictionary <string, object> keyValuePairs, ComparisonOperator valueComparisonOperator, GroupOperator groupOperator, string referenceAttributeName) { XPathQueryGroup predicate = new XPathQueryGroup(groupOperator, keyValuePairs, valueComparisonOperator); return(XPathFilterBuilder.CreateDereferenceFilter(searchObjectType, predicate, referenceAttributeName)); }