Exemple #1
0
        /// <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);
        }
Exemple #3
0
        /// <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));
        }