public final class QueryBuilder extends ObjectHere is the language structure: Query ::= Filter? ('ASC(path)' | 'DESC(path)')* Filter ::= 'NOT'? SimpleFilter ( ('AND'|'OR') 'NOT'? SimpleFilter )* SimpleFilter ::= PrimitiveFilter | 'BLOCK' Filter 'END-BLOCK' | 'TYPE(type)' Filter | 'EXISTS(path)' Filter PrimitiveFilter ::= 'ALL' | 'NONE' | 'UNDEFINED' | ('ITEM(path)' ( ValueComparisonCondition | 'IS-NULL' | ( ItemComparisonCondition 'ITEM(path)') ) ) | ('ID(values)') | ('OWNER-ID(values)') ValueComparisonCondition ::= 'EQ(value)' | 'GT(value)' | 'GE(value)' | 'LT(value)' | 'LE(value)' | 'STARTSWITH(value)' | 'ENDSWITH(value)' | 'CONTAINS(value)' | 'REF(value)' | 'ORG(value)' ItemComparisonCondition ::= 'EQ' | 'GT' | 'GE' | 'LT' | 'LE' It can be visualized e.g. using http://www.bottlecaps.de/rr/ui
Individual keywords ('AND', 'OR', 'BLOCK', ...) are mapped to methods. Connections between these keywords are mapped to interfaces. It can be viewed as interfaces = states, keywords = transitions. (Or vice versa, but this is more natural.) The interfaces have names starting with S_ (for "state").
Interfaces are implemented by classes that aggregate state of the query being created. This is quite hacked for now... to be implemented more seriously.
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description
queryFor(Class<? extends Containerable> queryClass, PrismContext prismContext)