Package org.refcodes.criteria

The refcodes-criteria framework allows the construction of criteria for selecting or filtering or identifying issues (such issues could be the selection of entries from a database).

This implies the creation of query statements from the criteria which can be applied to data sinks; such as databases (SQL like statements). In turn, this also implies parsing of criteria trees from a query statement (provided as logical operators in your code). Such parsable query statement can look as follows:

 ( ( ( City = 'Berlin' ) OR ( City = 'Munich' ) ) AND ( Surname = 'Miller' ) )
A dedicated CriteriaFactory implementation is required (and already provided) for parsing the above query statement.

The refcodes-criteria framework consists of the following components:

A Criteria represents an atomic query or atomic logical operator with which complex queries can be constructed in an object oriented manner by combining the Criteria instances in a tree structure. From this tree structure, query statements can be generated. In turn, a query statement provided as logical operators can be parsed for the construction of a Criteria tree (see example above)s.

This means that a Criteria query is constructed from a Criteria tree with CriteriaNode node instances and CriteriaLeaf leaf instances. A node may contain other node instances and/or other leaf instances, all of which being the node's children.


A CriteriaNode tree node may represent a logical AND or a logical OR or a logical NOT applied on the node's children Criteria (CriteriaNode instances and CriteriaLeaf instances).


A CriteriaLeaf tree leaf is an expression usually relating to a key (for example identifying a table's column in a database) and a value, both of which consolidating an expression (for example "City = 'Munich'").


A special specialization of the CriteriaNode, allowing just one child. This is required for nodes representing for example a logical NOT.


The Criteria itself is the base definition of functionality which the CriteriaNode and CriteriaLeaf implementations are to support. Mainly, a Criteria is to have a name (for example "AND", "OR", "LESS_THAN" and so on).


DeclarativeCreteria is a utility class which may be statically imported in order to allow declarative definitions of Criteria trees. In the Java code this may look as follows (simplified): import static org.refcodes.criteria.CriteriaSugar.*; ... Criteria theCriteria = and( or( equalWith( "City", "Berlin" ), equalWith( "City", "Munich" ) ), equalWith( "Surname", "Miller" ) ); ...


The CriteriaFactory constructs a Criteria (tree) from the provided query. The syntax of the query is implementation specific and may look as follows:
 ( ( ( City = 'Berlin' ) OR ( City = 'Munich' ) ) AND ( Surname = 'Miller' ) )
CAUTION: The syntax supported for the query statement is implementation depended!

The ExpressionCriteriaFactoryImpl implements a CriteriaFactory being capable of parsing the above query.


The QueryFactory generates a query from the provided Criteria (tree). The resulting query may be targeted at a database and therefore be SQL like.

CAUTION: The syntax supported for the query statement is implementation depended!