Class FilterImpl
- All Implemented Interfaces:
org.osgi.framework.Filter
- Direct Known Subclasses:
FilterImpl.And
,FilterImpl.Item
,FilterImpl.Not
,FilterImpl.Or
The syntax of a filter string is the string representation of LDAP search filters as defined in RFC 1960: A String Representation of LDAP Search Filters (available at http://www.ietf.org/rfc/rfc1960.txt). It should be noted that RFC 2254: A String Representation of LDAP Search Filters (available at http://www.ietf.org/rfc/rfc2254.txt) supersedes RFC 1960 but only adds extensible matching and is not applicable for this API.
The string representation of an LDAP search filter is defined by the following grammar. It uses a prefix format.
<filter> ::= '(' <filtercomp> ')' <filtercomp> ::= <and> | <or> | <not> | <item> <and> ::= '&' <filterlist> <or> ::= '|' <filterlist> <not> ::= '!' <filter> <filterlist> ::= <filter> | <filter> <filterlist> <item> ::= <simple> | <present> | <substring> <simple> ::= <attr> <filtertype> <value> <filtertype> ::= <equal> | <approx> | <greater> | <less> <equal> ::= '=' <approx> ::= '˜=' <greater> ::= '>=' <less> ::= '<=' <present> ::= <attr> '=*' <substring> ::= <attr> '=' <initial> <any> <final> <initial> ::= NULL | <value> <any> ::= '*' <starval> <starval> ::= NULL | <value> '*' <starval> <final> ::= NULL | <value>
<attr>
is a string representing an attribute, or key, in the
properties objects of the registered services. Attribute names are not case
sensitive; that is cn and CN both refer to the same attribute.
<value>
is a string representing the value, or part of one, of
a key in the properties objects of the registered services. If a
<value>
must contain one of the characters ' *
' or
'(
' or ')
', these characters should be escaped by preceding
them with the backslash '\
' character. Note that although both the
<substring>
and <present>
productions can produce
the 'attr=*'
construct, this construct is used only to denote a
presence filter.
Examples of LDAP filters are:
"(cn=Babs Jensen)" "(!(cn=Tim Howes))" "(&(" + Constants.OBJECTCLASS + "=Person)(|(sn=Jensen)(cn=Babs J*)))" "(o=univ*of*mich*)"
The approximate match (~=
) is implementation specific but should at
least ignore case and white space differences. Optional are codes like
soundex or other smart "closeness" comparisons.
Comparison of values is not straightforward. Strings are compared differently than numbers and it is possible for a key to have multiple values. Note that that keys in the match argument must always be strings. The comparison is defined by the object type of the key's value. The following rules apply for comparison:
A filter matches a key that has multiple values if it matches at least one of those values. For example,Note: arrays of primitives are also supported.
Property Value Type Comparison Type String String comparison Integer, Long, Float, Double, Byte, Short, BigInteger, BigDecimal numerical comparison Character character comparison Boolean equality comparisons only [] (array) recursively applied to values Collection recursively applied to values
Dictionary d = new Hashtable(); d.put("cn", new String[] { "a", "b", "c" });d will match
(cn=a)
and also (cn=b)
A filter component that references a key having an unrecognizable data type
will evaluate to false
.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static final class
(package private) static final class
private static final class
This Map is used for case-insensitive key lookup during filter evaluation.private static class
This Map is used for key lookup during filter evaluation.(package private) static class
(package private) static final class
(package private) static class
(package private) static final class
(package private) static final class
(package private) static final class
private static final class
Parser class for OSGi filter strings.(package private) static final class
private static final class
This Map is used for key lookup from a ServiceReference during filter evaluation.(package private) static final class
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) static FilterImpl
createFilter
(String filterString) Creates aFilterImpl
object.boolean
Compares thisFilter
to anotherFilter
.int
hashCode()
Returns the hashCode for thisFilter
.boolean
match
(Dictionary<String, ?> dictionary) Filter using aDictionary
with case insensitive key lookup.boolean
match
(org.osgi.framework.ServiceReference<?> reference) Filter using a service's properties.boolean
matchCase
(Dictionary<String, ?> dictionary) Filter using aDictionary
.boolean
Filter using aMap
.(package private) abstract boolean
(package private) abstract StringBuilder
Returns thisFilter
's normalized filter string.toString()
Returns thisFilter
's filter string.
-
Field Details
-
filterString
-
-
Constructor Details
-
FilterImpl
FilterImpl()
-
-
Method Details
-
createFilter
static FilterImpl createFilter(String filterString) throws org.osgi.framework.InvalidSyntaxException Creates aFilterImpl
object. This filter object may be used to match aServiceReference
or a Dictionary.If the filter cannot be parsed, an
InvalidSyntaxException
will be thrown with a human readable message where the filter became unparsable.- Parameters:
filterString
- the filter string.- Throws:
org.osgi.framework.InvalidSyntaxException
- If the filter parameter contains an invalid filter string that cannot be parsed.
-
match
public boolean match(org.osgi.framework.ServiceReference<?> reference) Filter using a service's properties.This
Filter
is executed using the keys and values of the referenced service's properties. The keys are looked up in a case insensitive manner.- Specified by:
match
in interfaceorg.osgi.framework.Filter
- Parameters:
reference
- The reference to the service whose properties are used in the match.- Returns:
true
if the service's properties match thisFilter
;false
otherwise.
-
match
Filter using aDictionary
with case insensitive key lookup. ThisFilter
is executed using the specifiedDictionary
's keys and values. The keys are looked up in a case insensitive manner.- Specified by:
match
in interfaceorg.osgi.framework.Filter
- Parameters:
dictionary
- TheDictionary
whose key/value pairs are used in the match.- Returns:
true
if theDictionary
's values match this filter;false
otherwise.- Throws:
IllegalArgumentException
- Ifdictionary
contains case variants of the same key name.
-
matchCase
Filter using aDictionary
. ThisFilter
is executed using the specifiedDictionary
's keys and values. The keys are looked up in a normal manner respecting case.- Specified by:
matchCase
in interfaceorg.osgi.framework.Filter
- Parameters:
dictionary
- TheDictionary
whose key/value pairs are used in the match.- Returns:
true
if theDictionary
's values match this filter;false
otherwise.- Since:
- 1.3
-
matches
Filter using aMap
. ThisFilter
is executed using the specifiedMap
's keys and values. The keys are looked up in a normal manner respecting case.- Specified by:
matches
in interfaceorg.osgi.framework.Filter
- Parameters:
map
- TheMap
whose key/value pairs are used in the match. Maps withnull
key or values are not supported. Anull
value is considered not present to the filter.- Returns:
true
if theMap
's values match this filter;false
otherwise.- Since:
- 1.6
-
matches0
-
toString
Returns thisFilter
's filter string.The filter string is normalized by removing whitespace which does not affect the meaning of the filter.
-
normalize
Returns thisFilter
's normalized filter string.The filter string is normalized by removing whitespace which does not affect the meaning of the filter.
- Returns:
- This
Filter
's filter string.
-
equals
Compares thisFilter
to anotherFilter
.This implementation returns the result of calling
this.toString().equals(obj.toString()
. -
hashCode
public int hashCode()Returns the hashCode for thisFilter
.This implementation returns the result of calling
this.toString().hashCode()
.
-