public class QueryTreeBuilder extends java.lang.Object implements QueryBuilder
FieldableNode
interface - by its class,
it keeps checking the class and all the interfaces and classes this class
implements/extends until it finds a builder for that class/interface
This class always check if there is a builder for the field name before it
checks for the node class. So, field name builders have precedence over class
builders.
When a builder is found for a node, it's called and the node is passed to the
builder. If the returned built object is not null
, it's tagged
on the node using the tag QUERY_TREE_BUILDER_TAGID
.
The children are usually built before the parent node. However, if a builder
associated to a node is an instance of QueryTreeBuilder
, the node is
delegated to this builder and it's responsible to build the node and its
children.QueryBuilder
Modifier and Type | Field and Description |
---|---|
private java.util.HashMap<java.lang.String,QueryBuilder> |
fieldNameBuilders |
static java.lang.String |
QUERY_TREE_BUILDER_TAGID
This tag is used to tag the nodes in a query tree with the built objects
produced from their own associated builder.
|
private java.util.HashMap<java.lang.Class<? extends QueryNode>,QueryBuilder> |
queryNodeBuilders |
Constructor and Description |
---|
QueryTreeBuilder()
QueryTreeBuilder constructor. |
Modifier and Type | Method and Description |
---|---|
java.lang.Object |
build(QueryNode queryNode)
Builds some kind of object from a query tree.
|
private QueryBuilder |
getBuilder(QueryNode node) |
private QueryBuilder |
getQueryBuilder(java.lang.Class<?> clazz) |
private void |
process(QueryNode node) |
private void |
processNode(QueryNode node,
QueryBuilder builder) |
void |
setBuilder(java.lang.CharSequence fieldName,
QueryBuilder builder)
Associates a field name with a builder.
|
void |
setBuilder(java.lang.Class<? extends QueryNode> queryNodeClass,
QueryBuilder builder)
Associates a class with a builder
|
public static final java.lang.String QUERY_TREE_BUILDER_TAGID
private java.util.HashMap<java.lang.Class<? extends QueryNode>,QueryBuilder> queryNodeBuilders
private java.util.HashMap<java.lang.String,QueryBuilder> fieldNameBuilders
public QueryTreeBuilder()
QueryTreeBuilder
constructor.public void setBuilder(java.lang.CharSequence fieldName, QueryBuilder builder)
fieldName
- the field namebuilder
- the builder to be associatedpublic void setBuilder(java.lang.Class<? extends QueryNode> queryNodeClass, QueryBuilder builder)
queryNodeClass
- the classbuilder
- the builder to be associatedprivate void process(QueryNode node) throws QueryNodeException
QueryNodeException
private QueryBuilder getBuilder(QueryNode node)
private void processNode(QueryNode node, QueryBuilder builder) throws QueryNodeException
QueryNodeException
private QueryBuilder getQueryBuilder(java.lang.Class<?> clazz)
public java.lang.Object build(QueryNode queryNode) throws QueryNodeException
build
in interface QueryBuilder
queryNode
- the query tree root nodeQueryNodeException
- if some node builder throws a
QueryNodeException
or if there is a node which had no
builder associated to it