public class SelectClauseStateObject extends AbstractSelectClauseStateObject implements ListHolderStateObject<StateObject>
SELECT statement queries data from entities, which determines the type of
the objects or values to be selected.
BNF: select_clause ::= SELECT [DISTINCT] select_expression {, select_expression}*
select_expression ::= single_valued_path_expression |
aggregate_expression |
identification_variable |
OBJECT(identification_variable) |
constructor_expressionSelectStatementStateObject,
SelectClause| Modifier and Type | Field and Description |
|---|---|
static java.lang.String |
SELECT_ITEMS_LIST
A constant used to notify the list of select expressions has changed.
|
DISTINCT_PROPERTY| Constructor and Description |
|---|
SelectClauseStateObject(SelectStatementStateObject parent)
Creates a new
SelectClauseStateObject. |
| Modifier and Type | Method and Description |
|---|---|
void |
accept(StateObjectVisitor visitor)
Visits this
StateObject by the given visitor. |
protected void |
addChildren(java.util.List<StateObject> children)
Adds the children of this
StateObject to the given list. |
<S extends StateObject> |
addItem(S item)
Adds the given
StateObject as a child of this one. |
ResultVariableStateObject |
addItem(StateObject stateObject,
java.lang.String resultVariable)
Adds the given
StateObject as a select item. |
StateObject |
addItem(java.lang.String jpqlFragment)
Adds the given path as a select item, which can either be an identification variable or a
state-field path expression.
|
ResultVariableStateObject |
addItem(java.lang.String jpqlFragment,
java.lang.String resultVariable)
Adds the given expression as a select item.
|
ResultVariableStateObject |
addItemAs(StateObject stateObject,
java.lang.String resultVariable)
Adds the given
StateObject as a select item. |
ResultVariableStateObject |
addItemAs(java.lang.String jpqlFragment,
java.lang.String resultVariable)
Adds the given JPQL fragment as a select item.
|
void |
addItems(java.util.List<? extends StateObject> items)
Adds the given list of
StateObjects as children of this one. |
void |
addListChangeListener(java.lang.String listName,
IListChangeListener<StateObject> listener)
Registers the given
IListChangeListener for the specified list. |
protected boolean |
areChildrenEquivalent(SelectClauseStateObject stateObject)
Determines whether the children of this
StateObject are equivalent to the children
of the given one, i.e. the information of the StateObjects is the same. |
boolean |
canMoveDown(StateObject item)
Determines whether the given
StateObject can be moved down by one position in the
list owned by its parent. |
boolean |
canMoveUp(StateObject item)
Determines whether the given
StateObject can be moved up by one position in the list
owned by its parent. |
ISelectExpressionStateObjectBuilder |
getBuilder()
Creates and returns a new
ISelectExpressionStateObjectBuilder that can be used to
programmatically create a single select expression and once the expression is complete,
ISelectExpressionStateObjectBuilder.commit() will push the StateObject
representation of that expression as this clause's select expression. |
SelectClause |
getExpression()
Returns the actual parsed object if this
StateObject representation of the JPQL query
was created by parsing an existing JPQL query. |
FromClauseStateObject |
getFromClause()
Returns the
AbstractFromClauseStateObject representing the FROM clause. |
StateObject |
getItem(int index)
Returns the
StateObject at the given positions from the list |
SelectStatementStateObject |
getParent()
Returns the parent of this
StateObject. |
boolean |
hasItems()
Determines whether this
StateObject has any children. |
boolean |
hasSelectItem()
Determines whether this
SELECT clause has a select item defined (only one
can be set for a subquery's SELECT clause and many for a top-level query). |
protected void |
initialize()
Initializes this state object.
|
boolean |
isEquivalent(StateObject stateObject)
Determines whether the given
StateObject is equivalent to this one, i.e. the
information of both StateObject is the same. |
ListIterable<StateObject> |
items()
Returns an
ListIterable over the children. |
int |
itemsSize()
Returns the number of children this list holder has.
|
StateObject |
moveDown(StateObject item)
Moves the given
StateObject down by one position in the list owned by its parent. |
StateObject |
moveUp(StateObject item)
Moves the given
StateObject up by one position in the list owned by its parent. |
void |
parse(java.lang.String jpqlFragment)
Parses the given JPQL fragment and create the select item.
|
void |
removeItem(StateObject stateObject)
Removes the given
StateObject from the list of children. |
void |
removeItems(java.util.Collection<StateObject> items)
Removes the given
StateObject from the list of children. |
void |
removeListChangeListener(java.lang.String listName,
IListChangeListener<StateObject> listener)
Unregisters the given
IListChangeListener that was registered for the specified list. |
void |
setExpression(SelectClause expression)
Keeps a reference of the
parsed object object, which should only be
done when this object is instantiated during the conversion of a parsed JPQL query into
StateObjects. |
void |
setItems(java.util.List<StateObject> stateObjects)
Sets the select expression to be those contained on the given collection.
|
protected void |
toTextInternal(java.lang.Appendable writer)
Prints out a string representation of this
StateObject, which should not be used to
define a true string representation of a JPQL query but should be used for
debugging purposes. |
hasDistinct, setDistinct, toggleDistinctacceptUnknownVisitor, acceptUnknownVisitor, addProblems, addPropertyChangeListener, areEquivalent, buildProblem, buildProblem, buildStateObject, buildStateObjects, checkParent, children, decorate, equals, findIdentificationVariable, firePropertyChanged, getChangeSupport, getDeclaration, getDecorator, getGrammar, getManagedTypeProvider, getQueryBuilder, getRoot, getType, getType, getTypeHelper, getTypeRepository, hashCode, isDecorated, parent, parent, parent, removePropertyChangeListener, setExpression, setParent, toString, toString, toStringInternal, toStringItems, toTextclone, finalize, getClass, notify, notifyAll, wait, wait, waitaddPropertyChangeListener, children, decorate, findIdentificationVariable, getDeclaration, getDecorator, getGrammar, getManagedTypeProvider, getQueryBuilder, getRoot, isDecorated, removePropertyChangeListener, setParent, toString, toTextpublic static final java.lang.String SELECT_ITEMS_LIST
public SelectClauseStateObject(SelectStatementStateObject parent)
SelectClauseStateObject.parent - The parent of this state object, which cannot be nulljava.lang.NullPointerException - The given parent cannot be nullpublic void accept(StateObjectVisitor visitor)
StateObject by the given visitor.accept in interface StateObjectvisitor - The visitor to visit this objectprotected void addChildren(java.util.List<StateObject> children)
StateObject to the given list.addChildren in class AbstractStateObjectchildren - The list used to store the childrenpublic ResultVariableStateObject addItem(StateObject stateObject, java.lang.String resultVariable)
StateObject as a select item.stateObject - The StateObject representing the select expressionresultVariable - The result variable identifying the select expressionResultVariableStateObjectpublic StateObject addItem(java.lang.String jpqlFragment)
jpqlFragment - The select expression to parse as a select itemStateObject encapsulating the given pathpublic ResultVariableStateObject addItem(java.lang.String jpqlFragment, java.lang.String resultVariable)
jpqlFragment - The select expression to parse as a select itemresultVariable - The result variable identifying the select expressionResultVariableStateObjectpublic <S extends StateObject> S addItem(S item)
StateObject as a child of this one.addItem in interface ListHolderStateObject<StateObject>item - The child StateObject to become a child of this one
return The given itempublic ResultVariableStateObject addItemAs(StateObject stateObject, java.lang.String resultVariable)
StateObject as a select item.stateObject - The StateObject representing the select expressionresultVariable - The result variable identifying the select expressionResultVariableStateObjectpublic ResultVariableStateObject addItemAs(java.lang.String jpqlFragment, java.lang.String resultVariable)
jpqlFragment - The portion of a JPQL query that represents a select expressionresultVariable - The result variable identifying the select expressionResultVariableStateObjectpublic void addItems(java.util.List<? extends StateObject> items)
StateObjects as children of this one.addItems in interface ListHolderStateObject<StateObject>items - The StateObjects to become children of this onepublic void addListChangeListener(java.lang.String listName,
IListChangeListener<StateObject> listener)
IListChangeListener for the specified list. The listener will be
notified only when items are added, removed, moved from the list.addListChangeListener in interface ListHolderStateObject<StateObject>listName - The name of the list for which the listener will be notified when the content
of the list has changedlistener - The listener to be notified upon changesprotected boolean areChildrenEquivalent(SelectClauseStateObject stateObject)
StateObject are equivalent to the children
of the given one, i.e. the information of the StateObjects is the same.stateObject - The StateObject to compare its children to this one's childrentrue if both have equivalent children; false otherwisepublic boolean canMoveDown(StateObject item)
StateObject can be moved down by one position in the
list owned by its parent.canMoveDown in interface ListHolderStateObject<StateObject>item - The StateObject that could potentially be moved downtrue if the object can be moved down by one unit; false
otherwisepublic boolean canMoveUp(StateObject item)
StateObject can be moved up by one position in the list
owned by its parent.canMoveUp in interface ListHolderStateObject<StateObject>item - The StateObject that could potentially be moved uptrue if the object can be moved up by one unit; false
otherwisepublic ISelectExpressionStateObjectBuilder getBuilder()
ISelectExpressionStateObjectBuilder that can be used to
programmatically create a single select expression and once the expression is complete,
ISelectExpressionStateObjectBuilder.commit() will push the StateObject
representation of that expression as this clause's select expression.public SelectClause getExpression()
StateObject representation of the JPQL query
was created by parsing an existing JPQL query.getExpression in interface StateObjectgetExpression in class AbstractSelectClauseStateObjectStateObject
or null when the JPQL query is manually created (i.e. not from a string)public FromClauseStateObject getFromClause()
AbstractFromClauseStateObject representing the FROM clause.getFromClause in class AbstractSelectClauseStateObjectpublic StateObject getItem(int index)
StateObject at the given positions from the listgetItem in interface ListHolderStateObject<StateObject>index - The position of the StateObject to retrieveStateObject at the given positionpublic SelectStatementStateObject getParent()
StateObject.getParent in interface StateObjectgetParent in class AbstractSelectClauseStateObjectStateObject, which is null only when
this is the root of the hierarchypublic boolean hasItems()
StateObject has any children.hasItems in interface ListHolderStateObject<StateObject>true if this StateObject has children; false otherwisepublic boolean hasSelectItem()
SELECT clause has a select item defined (only one
can be set for a subquery's SELECT clause and many for a top-level query).hasSelectItem in class AbstractSelectClauseStateObjecttrue if this state object has children; false otherwiseprotected void initialize()
initialize in class AbstractStateObjectpublic boolean isEquivalent(StateObject stateObject)
StateObject is equivalent to this one, i.e. the
information of both StateObject is the same.isEquivalent in interface StateObjectisEquivalent in class AbstractSelectClauseStateObjectstateObject - The StateObject to compare its content to this onetrue if both object are equivalent; false otherwisepublic ListIterable<StateObject> items()
ListIterable over the children.items in interface ListHolderStateObject<StateObject>ListIterable that is iterating over the childrenpublic int itemsSize()
itemsSize in interface ListHolderStateObject<StateObject>StateObjects that are children of this onepublic StateObject moveDown(StateObject item)
StateObject down by one position in the list owned by its parent.moveDown in interface ListHolderStateObject<StateObject>item - The StateObject to move down in the listpublic StateObject moveUp(StateObject item)
StateObject up by one position in the list owned by its parent.moveUp in interface ListHolderStateObject<StateObject>item - The StateObject to move up in the listpublic void parse(java.lang.String jpqlFragment)
parse in class AbstractSelectClauseStateObjectjpqlFragment - The portion of the query representing one or several select itemspublic void removeItem(StateObject stateObject)
StateObject from the list of children.removeItem in interface ListHolderStateObject<StateObject>stateObject - The child StateObject to not longer be a childpublic void removeItems(java.util.Collection<StateObject> items)
StateObject from the list of children.removeItems in interface ListHolderStateObject<StateObject>items - The StateObjects to remove from this onepublic void removeListChangeListener(java.lang.String listName,
IListChangeListener<StateObject> listener)
IListChangeListener that was registered for the specified list.
The listener will no longer be notified only when items are added, removed, moved from the
list.removeListChangeListener in interface ListHolderStateObject<StateObject>listName - The name of the list for which the listener was registeredlistener - The listener to unregisterpublic void setExpression(SelectClause expression)
parsed object object, which should only be
done when this object is instantiated during the conversion of a parsed JPQL query into
StateObjects.expression - The parsed object representing a SELECT
clausepublic void setItems(java.util.List<StateObject> stateObjects)
stateObjects - The new select expressionsprotected void toTextInternal(java.lang.Appendable writer)
throws java.io.IOException
StateObject, which should not be used to
define a true string representation of a JPQL query but should be used for
debugging purposes.toTextInternal in class AbstractStateObjectwriter - The writer used to print out the string representationjava.io.IOException - This should never happens, it is only required because Appendable
is used instead of any concrete class