Class Filter
- java.lang.Object
-
- org.forgerock.opendj.ldap.Filter
-
public final class Filter extends Object
A search filter as defined in RFC 4511. In addition this class also provides support for the absolute true and absolute false filters as defined in RFC 4526.The RFC 4515 string representation of a filter can be generated using the
toString()methods and parsed using thevalueOf(String)factory method.Filters can be constructed using the various factory methods. For example, the following code illustrates how to create a filter having the string representation "
(&(cn=bjensen)(age>=21))":import static org.forgerock.opendj.Filter.*; Filter filter = and(equality("cn", "bjensen"), greaterOrEqual("age", 21)); // Alternatively use a filter template: Filter filter = Filter.format("(&(cn=%s)(age>=%s))", "bjensen", 21);
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classFilter.FilterTypeThis enumeration defines the set of possible filter types that may be used for search filters.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static FilteralwaysFalse()Returns theabsolute falsefilter as defined in RFC 4526 which is comprised of anorfilter containing zero components.static FilteralwaysTrue()Returns theabsolute truefilter as defined in RFC 4526 which is comprised of anandfilter containing zero components.static Filterand(Collection<Filter> subFilters)Creates an optimized newandfilter using the provided list of sub-filters.static Filterand(Collection<Filter> subFilters, boolean optimize)Creates a newandfilter using the provided list of sub-filters.static Filterand(Filter... subFilters)Creates a newandfilter using the provided list of sub-filters.static Filterapproximate(String attributeDescription, Object assertionValue)Creates a newapproximate matchfilter using the provided attribute description and assertion value.static Filterequality(String attributeDescription, Object assertionValue)Creates a newequality matchfilter using the provided attribute description and assertion value.booleanequals(Object obj)This method does not perform any normalization, other than lowercasing attribute descriptions, and will only returntruewhen two filters are identical.static StringescapeAssertionValue(Object assertionValue)Returns the LDAP string representation of the provided filter assertion value in a form suitable for substitution directly into a filter string.static Filterextensible(String matchingRule, String attributeDescription, Object assertionValue, boolean dnAttributes)Creates a newextensible matchfilter.static Filterformat(String template, Object... assertionValues)Creates a new filter using the provided filter template and unescaped assertion values.ByteStringgetAssertionValue()Returns the assertion value for this comparison filter.StringgetAttributeDescription()Returns the attribute description for this comparison filter, which may benullif the filter is an extensible match filter and theextensible matching ruleis specified.StringgetExtensibleMatchingRule()Returns the name of the extensible matching rule which should be used for comparing values, which may benullif theattribute descriptionis provided (in which case equality matching will be performed).Filter.FilterTypegetFilterType()Returns the type of this filter.FiltergetNotSubFilter()Returns the sub-filter for this NOT filter.List<Filter>getSubFilters()Returns an unmodifiable list containing the sub-filters for this AND or OR filter.List<ByteString>getSubstringsAny()Returns an unmodifiable list containing any intermediate substring assertion values for this substrings filter, which may be an empty if the substrings filter did not include an intermediate substrings.ByteStringgetSubstringsFinal()Returns the final substring assertion value for this substrings filter, ornullif the substrings filter did not include an final substring.ByteStringgetSubstringsInitial()Returns the initial substring assertion value for this substrings filter, ornullif the substrings filter did not include an initial substring.ByteStringgetUnrecognizedFilterBytes()Returns the ASN.1 content associated with this unrecognized filter.bytegetUnrecognizedFilterTag()Returns the ASN.1 tag associated with this unrecognized filter.static FiltergreaterOrEqual(String attributeDescription, Object assertionValue)Creates a newgreater or equalfilter using the provided attribute description and assertion value.static FiltergreaterThan(String attributeDescription, Object assertionValue)Creates a newgreater thanfilter using the provided attribute description and assertion value.inthashCode()This method produces a hash-code of the literal filter representation without performing any normalization other than lowercasing attribute descriptions.booleanisDnAttributes()Returns whether extensible matching should be performed against attributes in an entry's DN.static FilterlessOrEqual(String attributeDescription, Object assertionValue)Creates a newless or equalfilter using the provided attribute description and assertion value.static FilterlessThan(String attributeDescription, Object assertionValue)Creates a newless thanfilter using the provided attribute description and assertion value.Matchermatcher()Returns aMatcherwhich can be used to compare thisFilteragainst entries using the default schema.Matchermatcher(Schema schema)Returns aMatcherwhich can be used to compare thisFilteragainst entries using the providedSchema.ConditionResultmatches(Entry entry)Indicates whether thisFiltermatches the providedEntryusing the default schema.static Filternot(Filter subFilter)Creates an optimized newnotfilter using the provided sub-filter.static Filternot(Filter subFilter, boolean optimize)Creates a newnotfilter using the provided sub-filter.static FilterobjectClassPresent()Returns theobjectClasspresence filter(objectClass=*).static Filteror(Collection<Filter> subFilters)Creates an optimized neworfilter using the provided list of sub-filters.static Filteror(Collection<Filter> subFilters, boolean optimize)Creates a neworfilter using the provided list of sub-filters.static Filteror(Filter... subFilters)Creates a neworfilter using the provided list of sub-filters.static Filterpresent(String attributeDescription)Creates a newpresentfilter using the provided attribute description.static Filtersubstrings(String attributeDescription, Object initialSubstring, Collection<?> anySubstrings, Object finalSubstring)Creates a newsubstringsfilter using the provided attribute description,initial,final, andanysub-strings.StringtoString()Returns aStringwhose contents is the LDAP string representation of thisFilter.static Filterunrecognized(byte filterTag, ByteString filterBytes)Creates a newunrecognizedfilter using the provided ASN1 filter tag and content.static FiltervalueOf(boolean bool)static FiltervalueOf(String string)Parses the provided LDAP string representation of a filter as aFilter.
-
-
-
Method Detail
-
alwaysFalse
public static Filter alwaysFalse()
Returns theabsolute falsefilter as defined in RFC 4526 which is comprised of anorfilter containing zero components.- Returns:
- The absolute false filter.
- See Also:
- RFC 4526
-
alwaysTrue
public static Filter alwaysTrue()
Returns theabsolute truefilter as defined in RFC 4526 which is comprised of anandfilter containing zero components.- Returns:
- The absolute true filter.
- See Also:
- RFC 4526
-
and
public static Filter and(Collection<Filter> subFilters, boolean optimize)
Creates a newandfilter using the provided list of sub-filters.Creating a new
andfilter with anullor empty list of sub-filters is equivalent to callingalwaysTrue().- Parameters:
subFilters- The list of sub-filters, may be empty ornull.optimize- Whether to optimize the filter.- Returns:
- The newly created
andfilter.
-
and
public static Filter and(Collection<Filter> subFilters)
Creates an optimized newandfilter using the provided list of sub-filters. This method is equivalent to callingand(subFilters, true).- Parameters:
subFilters- The list of sub-filters, may be empty ornull.- Returns:
- The newly created
andfilter.
-
and
public static Filter and(Filter... subFilters)
Creates a newandfilter using the provided list of sub-filters.Creating a new
andfilter with anullor empty list of sub-filters is equivalent to callingalwaysTrue().- Parameters:
subFilters- The list of sub-filters, may be empty ornull.- Returns:
- The newly created
andfilter.
-
approximate
public static Filter approximate(String attributeDescription, Object assertionValue)
Creates a newapproximate matchfilter using the provided attribute description and assertion value.If
assertionValueis not an instance ofByteStringthen it will be converted using theByteString.valueOfObject(Object)method.- Parameters:
attributeDescription- The attribute description.assertionValue- The assertion value.- Returns:
- The newly created
approximate matchfilter.
-
equality
public static Filter equality(String attributeDescription, Object assertionValue)
Creates a newequality matchfilter using the provided attribute description and assertion value.If
assertionValueis not an instance ofByteStringthen it will be converted using theByteString.valueOfObject(Object)method.- Parameters:
attributeDescription- The attribute description.assertionValue- The assertion value.- Returns:
- The newly created
equality matchfilter.
-
escapeAssertionValue
public static String escapeAssertionValue(Object assertionValue)
Returns the LDAP string representation of the provided filter assertion value in a form suitable for substitution directly into a filter string. This method may be useful in cases where a filter is to be constructed from a filter template usingString#format(String, Object...). The following example illustrates two approaches to constructing an equality filter:// This may contain user input. String assertionValue = ...; // Using the equality filter constructor: Filter filter = Filter.equality("cn", assertionValue); // Using a String template: String filterTemplate = "(cn=%s)"; String filterString = String.format(filterTemplate, Filter.escapeAssertionValue(assertionValue)); Filter filter = Filter.valueOf(filterString);IfassertionValueis not an instance ofByteStringthen it will be converted using theByteString.valueOfObject(Object)method.Note: assertion values do not and should not be escaped before passing them to constructors like
equality(String, Object). Escaping is only required when creating filter strings.- Parameters:
assertionValue- The assertion value.- Returns:
- The LDAP string representation of the provided filter assertion value in a form suitable for substitution directly into a filter string.
- See Also:
format(String, Object...)
-
extensible
public static Filter extensible(String matchingRule, String attributeDescription, Object assertionValue, boolean dnAttributes)
Creates a newextensible matchfilter.If
assertionValueis not an instance ofByteStringthen it will be converted using theByteString.valueOfObject(Object)method.- Parameters:
matchingRule- The matching rule name, may benullifattributeDescriptionis specified.attributeDescription- The attribute description, may benullifmatchingRuleis specified.assertionValue- The assertion value.dnAttributes- Indicates whether DN matching should be performed.- Returns:
- The newly created
extensible matchfilter.
-
greaterOrEqual
public static Filter greaterOrEqual(String attributeDescription, Object assertionValue)
Creates a newgreater or equalfilter using the provided attribute description and assertion value.If
assertionValueis not an instance ofByteStringthen it will be converted using theByteString.valueOfObject(Object)method.- Parameters:
attributeDescription- The attribute description.assertionValue- The assertion value.- Returns:
- The newly created
greater or equalfilter.
-
greaterThan
public static Filter greaterThan(String attributeDescription, Object assertionValue)
Creates a newgreater thanfilter using the provided attribute description and assertion value.If
assertionValueis not an instance ofByteStringthen it will be converted using theByteString.valueOfObject(Object)method.NOTE: since LDAP does not support
greater thancomparisons, this method returns a filter of the form(&(type>=value)(!(type=value))). An alternative is to return a filter of the form(!(type<=value)), however the outernotfilter will often prevent directory servers from optimizing the search using indexes.- Parameters:
attributeDescription- The attribute description.assertionValue- The assertion value.- Returns:
- The newly created
greater thanfilter.
-
lessOrEqual
public static Filter lessOrEqual(String attributeDescription, Object assertionValue)
Creates a newless or equalfilter using the provided attribute description and assertion value.If
assertionValueis not an instance ofByteStringthen it will be converted using theByteString.valueOfObject(Object)method.- Parameters:
attributeDescription- The attribute description.assertionValue- The assertion value.- Returns:
- The newly created
less or equalfilter.
-
lessThan
public static Filter lessThan(String attributeDescription, Object assertionValue)
Creates a newless thanfilter using the provided attribute description and assertion value.If
assertionValueis not an instance ofByteStringthen it will be converted using theByteString.valueOfObject(Object)method.NOTE: since LDAP does not support
less thancomparisons, this method returns a filter of the form(&(type<=value)(!(type=value))). An alternative is to return a filter of the form(!(type>=value)), however the outernotfilter will often prevent directory servers from optimizing the search using indexes.- Parameters:
attributeDescription- The attribute description.assertionValue- The assertion value.- Returns:
- The newly created
less thanfilter.
-
not
public static Filter not(Filter subFilter)
Creates an optimized newnotfilter using the provided sub-filter. This method is equivalent to callingnot(subFilter, true).- Parameters:
subFilter- The sub-filter.- Returns:
- The newly created
notfilter.
-
not
public static Filter not(Filter subFilter, boolean optimize)
Creates a newnotfilter using the provided sub-filter.- Parameters:
subFilter- The sub-filter.optimize- Whether to optimize the filter.- Returns:
- The newly created
notfilter.
-
objectClassPresent
public static Filter objectClassPresent()
Returns theobjectClasspresence filter(objectClass=*).A call to this method is equivalent to but more efficient than the following code:
Filter.present("objectClass");- Returns:
- The
objectClasspresence filter(objectClass=*).
-
or
public static Filter or(Collection<Filter> subFilters, boolean optimize)
Creates a neworfilter using the provided list of sub-filters.Creating a new
orfilter with anullor empty list of sub-filters is equivalent to callingalwaysFalse().- Parameters:
subFilters- The list of sub-filters, may be empty ornull.optimize- Whether to optimize the filter.- Returns:
- The newly created
orfilter.
-
or
public static Filter or(Collection<Filter> subFilters)
Creates an optimized neworfilter using the provided list of sub-filters. This method is equivalent to callingor(subFilters, true).Creating a new
orfilter with anullor empty list of sub-filters is equivalent to callingalwaysFalse().- Parameters:
subFilters- The list of sub-filters, may be empty ornull.- Returns:
- The newly created
orfilter.
-
or
public static Filter or(Filter... subFilters)
Creates a neworfilter using the provided list of sub-filters.Creating a new
orfilter with anullor empty list of sub-filters is equivalent to callingalwaysFalse().- Parameters:
subFilters- The list of sub-filters, may be empty ornull.- Returns:
- The newly created
orfilter.
-
present
public static Filter present(String attributeDescription)
Creates a newpresentfilter using the provided attribute description.- Parameters:
attributeDescription- The attribute description.- Returns:
- The newly created
presentfilter.
-
substrings
public static Filter substrings(String attributeDescription, Object initialSubstring, Collection<?> anySubstrings, Object finalSubstring)
Creates a newsubstringsfilter using the provided attribute description,initial,final, andanysub-strings.Any substrings which are not instances of
ByteStringwill be converted using theByteString.valueOfObject(Object)method.- Parameters:
attributeDescription- The attribute description.initialSubstring- The initial sub-string, may benullif eitherfinalSubstringoranySubstringsare specified.anySubstrings- The intermediate sub-strings, may benullor empty if eitherfinalSubstringorinitialSubstringare specified.finalSubstring- The final sub-string, may benullif eitherinitialSubstringoranySubstringsare specified.- Returns:
- The newly created
substringsfilter.
-
unrecognized
public static Filter unrecognized(byte filterTag, ByteString filterBytes)
Creates a newunrecognizedfilter using the provided ASN1 filter tag and content. This type of filter should be used for filters which are not part of the standard filter definition.- Parameters:
filterTag- The ASN.1 tag.filterBytes- The filter content.- Returns:
- The newly created
unrecognizedfilter.
-
valueOf
public static Filter valueOf(boolean bool)
- Parameters:
bool- The boolean representation of a filter.- Returns:
alwaysTrue()ifboolistrue. Otherwise, returnsalwaysFalse().
-
valueOf
public static Filter valueOf(String string)
Parses the provided LDAP string representation of a filter as aFilter.- Parameters:
string- The LDAP string representation of a filter.- Returns:
- The parsed
Filter. - Throws:
LocalizedIllegalArgumentException- Ifstringis not a valid LDAP string representation of a filter.- See Also:
format(String, Object...)
-
format
public static Filter format(String template, Object... assertionValues)
Creates a new filter using the provided filter template and unescaped assertion values. This method first escapes each of the assertion values and then substitutes them into the template usingString.format(String, Object...). Finally, the formatted string is parsed as an LDAP filter usingvalueOf(String).This method may be useful in cases where the structure of a filter is not known at compile time, for example, it may be obtained from a configuration file. Example usage:
String template = "(|(cn=%s)(uid=user.%s))"; Filter filter = Filter.format(template, "alice", 123);
Any assertion values which are not instances ofByteStringwill be converted using theByteString.valueOfObject(Object)method.- Parameters:
template- The filter template.assertionValues- The assertion values to be substituted into the template.- Returns:
- The formatted template parsed as a
Filter. - Throws:
LocalizedIllegalArgumentException- If the formatted template is not a valid LDAP string representation of a filter.- See Also:
escapeAssertionValue(Object)
-
getFilterType
public Filter.FilterType getFilterType()
Returns the type of this filter.- Returns:
- The type of this filter.
-
getSubFilters
public List<Filter> getSubFilters()
Returns an unmodifiable list containing the sub-filters for this AND or OR filter.- Returns:
- An unmodifiable list containing the sub-filters for this AND or OR filter.
- Throws:
UnsupportedOperationException- If this filter is not an AND or OR filter.
-
getNotSubFilter
public Filter getNotSubFilter()
Returns the sub-filter for this NOT filter.- Returns:
- The sub-filter for this NOT filter.
- Throws:
UnsupportedOperationException- If this filter is not a NOT filter.
-
getAttributeDescription
public String getAttributeDescription()
Returns the attribute description for this comparison filter, which may benullif the filter is an extensible match filter and theextensible matching ruleis specified.- Returns:
- The attribute description for this comparison filter, which may be
nullif the filter is an extensible match filter. - Throws:
UnsupportedOperationException- If this filter is not an equality, greater than, less than, approximate, presence, substrings, or extensible match filter.
-
getAssertionValue
public ByteString getAssertionValue()
Returns the assertion value for this comparison filter.- Returns:
- The assertion value for this comparison filter.
- Throws:
UnsupportedOperationException- If this filter is not an equality, greater than, less than, approximate, or extensible match filter.
-
getSubstringsInitial
public ByteString getSubstringsInitial()
Returns the initial substring assertion value for this substrings filter, ornullif the substrings filter did not include an initial substring.- Returns:
- The initial substring assertion value for this substrings filter, or
nullif the substrings filter did not include an initial substring. - Throws:
UnsupportedOperationException- If this filter is not a substrings filter.
-
getSubstringsAny
public List<ByteString> getSubstringsAny()
Returns an unmodifiable list containing any intermediate substring assertion values for this substrings filter, which may be an empty if the substrings filter did not include an intermediate substrings.- Returns:
- An unmodifiable list containing any intermediate substring assertion values for this substrings filter
- Throws:
UnsupportedOperationException- If this filter is not a substrings filter.
-
getSubstringsFinal
public ByteString getSubstringsFinal()
Returns the final substring assertion value for this substrings filter, ornullif the substrings filter did not include an final substring.- Returns:
- The final substring assertion value for this substrings filter, or
nullif the substrings filter did not include an final substring. - Throws:
UnsupportedOperationException- If this filter is not a substrings filter.
-
getExtensibleMatchingRule
public String getExtensibleMatchingRule()
Returns the name of the extensible matching rule which should be used for comparing values, which may benullif theattribute descriptionis provided (in which case equality matching will be performed).- Returns:
- The name of the extensible matching rule which should be used for comparing values, which may be
null. - Throws:
UnsupportedOperationException- If this filter is not an extensible match filter.
-
isDnAttributes
public boolean isDnAttributes()
Returns whether extensible matching should be performed against attributes in an entry's DN.- Returns:
- Whether extensible matching should be performed against attributes in an entry's DN.
- Throws:
UnsupportedOperationException- If this filter is not an extensible match filter.
-
getUnrecognizedFilterTag
public byte getUnrecognizedFilterTag()
Returns the ASN.1 tag associated with this unrecognized filter.- Returns:
- The ASN.1 tag associated with this unrecognized filter.
- Throws:
UnsupportedOperationException- If this filter is not an unrecognized filter.
-
getUnrecognizedFilterBytes
public ByteString getUnrecognizedFilterBytes()
Returns the ASN.1 content associated with this unrecognized filter.- Returns:
- The ASN.1 content associated with this unrecognized filter.
- Throws:
UnsupportedOperationException- If this filter is not an unrecognized filter.
-
equals
public boolean equals(Object obj)
This method does not perform any normalization, other than lowercasing attribute descriptions, and will only returntruewhen two filters are identical. In particular, the attribute descriptions "cn" and "commonName" will be treated as different, as will AND/OR filters containing the same sub-filters in a different order. In order to compare filters for equivalence useMatcher.equals(Object).
-
hashCode
public int hashCode()
This method produces a hash-code of the literal filter representation without performing any normalization other than lowercasing attribute descriptions. In particular, the attribute descriptions "cn" and "commonName" will be treated as different, as will AND/OR filters containing the same sub-filters in a different order. In order to compare filters for equivalence useMatcher.hashCode().
-
matcher
public Matcher matcher()
Returns aMatcherwhich can be used to compare thisFilteragainst entries using the default schema.- Returns:
- The
Matcher.
-
matcher
public Matcher matcher(Schema schema)
Returns aMatcherwhich can be used to compare thisFilteragainst entries using the providedSchema.- Parameters:
schema- The schema which theMatchershould use for comparisons.- Returns:
- The
Matcher.
-
matches
public ConditionResult matches(Entry entry)
Indicates whether thisFiltermatches the providedEntryusing the default schema.Calling this method is equivalent to the following:
matcher().matches(entry);
- Parameters:
entry- The entry to be matched.- Returns:
- The result of matching the provided
Entryagainst thisFilterusing the default schema.
-
-