Class QueryBuilder
java.lang.Object
com.evolveum.midpoint.prism.impl.query.builder.QueryBuilder
Here is the language structure:
Query ::= Filter? ('ASC(path)' | 'DESC(path)')* 'OFFSET(n)'? 'MAX-SIZE(n)'?
Filter ::= 'ALL'
| 'NONE'
| 'UNDEFINED'
| 'NOT' Filter
| Filter ('AND'|'OR') Filter
| 'BLOCK' Filter? 'END-BLOCK'
| 'TYPE(type)' Filter?
| 'EXISTS(path)' Filter?
| 'REF(path, values*?)' Filter?
| 'REFERENCED-BY(class, path, relation?)' Filter?
| 'OWNED-BY(class, path?)' Filter?
| 'FULLTEXT(value)'
| 'ITEM(path)' ValueComparisonCondition
| 'ITEM(path)' ItemComparisonCondition 'ITEM(path)'
| 'ITEM(path)' 'IS-NULL'
| 'ID(values)'
| 'OWNER-ID(values)'
| OrgFilter
ValueComparisonCondition ::= 'EQ(value)' | 'GT(value)' | 'GE(value)' | 'LT(value)' | 'LE(value)'
| 'STARTS-WITH(value)' | 'ENDS-WITH(value)' | 'CONTAINS(value)'
| 'REF(value)'
| 'ORG(value)'
ItemComparisonCondition ::= 'EQ' | 'GT' | 'GE' | 'LT' | 'LE'
OrgFilter ::= 'IS-ROOT'
| 'IS-DIRECT-CHILD-OF(value)'
| 'IS-CHILD-OF(value)'
| 'IS-PARENT-OF(value)'
| 'IS-IN-SCOPE-OF(value, scope)'
It can be visualized e.g. using https://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.-
Method Summary
Modifier and TypeMethodDescription@NotNull PrismContextstatic S_FilterEntryOrEmptyqueryFor(Class<? extends Containerable> queryClass) static S_FilterEntryOrEmptyqueryFor(Class<? extends Containerable> queryClass, ItemDefinitionResolver itemDefinitionResolver) static S_FilterEntryOrEmptyqueryForReferenceOwnedBy(Class<? extends Containerable> ownerClass, ItemPath referencePath) Creates a builder for reference search defined by specified owner and reference path.
-
Method Details
-
getPrismContext
-
queryFor
public static S_FilterEntryOrEmpty queryFor(Class<? extends Containerable> queryClass, ItemDefinitionResolver itemDefinitionResolver) -
queryFor
-
queryForReferenceOwnedBy
public static S_FilterEntryOrEmpty queryForReferenceOwnedBy(Class<? extends Containerable> ownerClass, ItemPath referencePath) Creates a builder for reference search defined by specified owner and reference path. This creates the necessary owned-by filter and one can immediately write owner nested filter, or continue withS_FilterExit.and()to add additional ref filter for self path, or finish the query withS_QueryExit.build().
-