Class SelectClauseStateObject
- java.lang.Object
-
- org.eclipse.persistence.jpa.jpql.tools.model.query.AbstractStateObject
-
- org.eclipse.persistence.jpa.jpql.tools.model.query.AbstractSelectClauseStateObject
-
- org.eclipse.persistence.jpa.jpql.tools.model.query.SelectClauseStateObject
-
- All Implemented Interfaces:
ListHolderStateObject<StateObject>,StateObject
public class SelectClauseStateObject extends AbstractSelectClauseStateObject implements ListHolderStateObject<StateObject>
TheSELECTstatement 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_expression- Version:
- 2.4
- See Also:
SelectStatementStateObject,SelectClause- Author:
- Pascal Filion
- Since:
- 2.4
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringSELECT_ITEMS_LISTA constant used to notify the list of select expressions has changed.-
Fields inherited from class org.eclipse.persistence.jpa.jpql.tools.model.query.AbstractSelectClauseStateObject
DISTINCT_PROPERTY
-
-
Constructor Summary
Constructors Constructor Description SelectClauseStateObject(SelectStatementStateObject parent)Creates a newSelectClauseStateObject.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaccept(StateObjectVisitor visitor)Visits thisStateObjectby the givenvisitor.protected voidaddChildren(java.util.List<StateObject> children)Adds the children of thisStateObjectto the given list.StateObjectaddItem(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.ResultVariableStateObjectaddItem(java.lang.String jpqlFragment, java.lang.String resultVariable)Adds the given expression as a select item.ResultVariableStateObjectaddItem(StateObject stateObject, java.lang.String resultVariable)Adds the givenStateObjectas a select item.<S extends StateObject>
SaddItem(S item)Adds the givenStateObjectas a child of this one.ResultVariableStateObjectaddItemAs(java.lang.String jpqlFragment, java.lang.String resultVariable)Adds the given JPQL fragment as a select item.ResultVariableStateObjectaddItemAs(StateObject stateObject, java.lang.String resultVariable)Adds the givenStateObjectas a select item.voidaddItems(java.util.List<? extends StateObject> items)Adds the given list ofStateObjectsas children of this one.voidaddListChangeListener(java.lang.String listName, IListChangeListener<StateObject> listener)Registers the givenIListChangeListenerfor the specified list.protected booleanareChildrenEquivalent(SelectClauseStateObject stateObject)Determines whether the children of thisStateObjectare equivalent to the children of the given one, i.e. the information of theStateObjectsis the same.booleancanMoveDown(StateObject item)Determines whether the givenStateObjectcan be moved down by one position in the list owned by its parent.booleancanMoveUp(StateObject item)Determines whether the givenStateObjectcan be moved up by one position in the list owned by its parent.ISelectExpressionStateObjectBuildergetBuilder()Creates and returns a newISelectExpressionStateObjectBuilderthat can be used to programmatically create a single select expression and once the expression is complete,ISelectExpressionStateObjectBuilder.commit()will push theStateObjectrepresentation of that expression as this clause's select expression.SelectClausegetExpression()Returns the actual parsed object if thisStateObjectrepresentation of the JPQL query was created by parsing an existing JPQL query.FromClauseStateObjectgetFromClause()Returns theAbstractFromClauseStateObjectrepresenting the FROM clause.StateObjectgetItem(int index)Returns theStateObjectat the given positions from the listSelectStatementStateObjectgetParent()Returns the parent of thisStateObject.booleanhasItems()Determines whether thisStateObjecthas any children.booleanhasSelectItem()Determines whether thisSELECTclause has a select item defined (only one can be set for a subquery'sSELECTclause and many for a top-level query).protected voidinitialize()Initializes this state object.booleanisEquivalent(StateObject stateObject)Determines whether the givenStateObjectis equivalent to this one, i.e. the information of bothStateObjectis the same.ListIterable<StateObject>items()Returns anListIterableover the children.intitemsSize()Returns the number of children this list holder has.StateObjectmoveDown(StateObject item)Moves the givenStateObjectdown by one position in the list owned by its parent.StateObjectmoveUp(StateObject item)Moves the givenStateObjectup by one position in the list owned by its parent.voidparse(java.lang.String jpqlFragment)Parses the given JPQL fragment and create the select item.voidremoveItem(StateObject stateObject)Removes the givenStateObjectfrom the list of children.voidremoveItems(java.util.Collection<StateObject> items)Removes the givenStateObjectfrom the list of children.voidremoveListChangeListener(java.lang.String listName, IListChangeListener<StateObject> listener)Unregisters the givenIListChangeListenerthat was registered for the specified list.voidsetExpression(SelectClause expression)Keeps a reference of theparsed objectobject, which should only be done when this object is instantiated during the conversion of a parsed JPQL query intoStateObjects.voidsetItems(java.util.List<StateObject> stateObjects)Sets the select expression to be those contained on the given collection.protected voidtoTextInternal(java.lang.Appendable writer)Prints out a string representation of thisStateObject, which should not be used to define atruestring representation of a JPQL query but should be used for debugging purposes.-
Methods inherited from class org.eclipse.persistence.jpa.jpql.tools.model.query.AbstractSelectClauseStateObject
hasDistinct, setDistinct, toggleDistinct
-
Methods inherited from class org.eclipse.persistence.jpa.jpql.tools.model.query.AbstractStateObject
acceptUnknownVisitor, 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, toText
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.eclipse.persistence.jpa.jpql.tools.model.query.StateObject
addPropertyChangeListener, children, decorate, findIdentificationVariable, getDeclaration, getDecorator, getGrammar, getManagedTypeProvider, getQueryBuilder, getRoot, isDecorated, removePropertyChangeListener, setParent, toString, toText
-
-
-
-
Field Detail
-
SELECT_ITEMS_LIST
public static final java.lang.String SELECT_ITEMS_LIST
A constant used to notify the list of select expressions has changed.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
SelectClauseStateObject
public SelectClauseStateObject(SelectStatementStateObject parent)
Creates a newSelectClauseStateObject.- Parameters:
parent- The parent of this state object, which cannot benull- Throws:
java.lang.NullPointerException- The given parent cannot benull
-
-
Method Detail
-
accept
public void accept(StateObjectVisitor visitor)
Visits thisStateObjectby the givenvisitor.- Specified by:
acceptin interfaceStateObject- Parameters:
visitor- Thevisitorto visit this object
-
addChildren
protected void addChildren(java.util.List<StateObject> children)
Adds the children of thisStateObjectto the given list.- Overrides:
addChildrenin classAbstractStateObject- Parameters:
children- The list used to store the children
-
addItem
public ResultVariableStateObject addItem(StateObject stateObject, java.lang.String resultVariable)
Adds the givenStateObjectas a select item.- Parameters:
stateObject- TheStateObjectrepresenting the select expressionresultVariable- The result variable identifying the select expression- Returns:
- The newly created
ResultVariableStateObject
-
addItem
public 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.- Parameters:
jpqlFragment- The select expression to parse as a select item- Returns:
- The
StateObjectencapsulating the given path
-
addItem
public ResultVariableStateObject addItem(java.lang.String jpqlFragment, java.lang.String resultVariable)
Adds the given expression as a select item.- Parameters:
jpqlFragment- The select expression to parse as a select itemresultVariable- The result variable identifying the select expression- Returns:
- The newly created
ResultVariableStateObject
-
addItem
public <S extends StateObject> S addItem(S item)
Adds the givenStateObjectas a child of this one.- Specified by:
addItemin interfaceListHolderStateObject<StateObject>- Parameters:
item- The childStateObjectto become a child of this one return The given item
-
addItemAs
public ResultVariableStateObject addItemAs(StateObject stateObject, java.lang.String resultVariable)
Adds the givenStateObjectas a select item.- Parameters:
stateObject- TheStateObjectrepresenting the select expressionresultVariable- The result variable identifying the select expression- Returns:
- The newly created
ResultVariableStateObject
-
addItemAs
public ResultVariableStateObject addItemAs(java.lang.String jpqlFragment, java.lang.String resultVariable)
Adds the given JPQL fragment as a select item.- Parameters:
jpqlFragment- The portion of a JPQL query that represents a select expressionresultVariable- The result variable identifying the select expression- Returns:
- The newly created
ResultVariableStateObject
-
addItems
public void addItems(java.util.List<? extends StateObject> items)
Adds the given list ofStateObjectsas children of this one.- Specified by:
addItemsin interfaceListHolderStateObject<StateObject>- Parameters:
items- TheStateObjectsto become children of this one
-
addListChangeListener
public void addListChangeListener(java.lang.String listName, IListChangeListener<StateObject> listener)Registers the givenIListChangeListenerfor the specified list. The listener will be notified only when items are added, removed, moved from the list.- Specified by:
addListChangeListenerin interfaceListHolderStateObject<StateObject>- Parameters:
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 changes
-
areChildrenEquivalent
protected boolean areChildrenEquivalent(SelectClauseStateObject stateObject)
Determines whether the children of thisStateObjectare equivalent to the children of the given one, i.e. the information of theStateObjectsis the same.- Parameters:
stateObject- TheStateObjectto compare its children to this one's children- Returns:
trueif both have equivalent children;falseotherwise
-
canMoveDown
public boolean canMoveDown(StateObject item)
Determines whether the givenStateObjectcan be moved down by one position in the list owned by its parent.- Specified by:
canMoveDownin interfaceListHolderStateObject<StateObject>- Parameters:
item- TheStateObjectthat could potentially be moved down- Returns:
trueif the object can be moved down by one unit;falseotherwise
-
canMoveUp
public boolean canMoveUp(StateObject item)
Determines whether the givenStateObjectcan be moved up by one position in the list owned by its parent.- Specified by:
canMoveUpin interfaceListHolderStateObject<StateObject>- Parameters:
item- TheStateObjectthat could potentially be moved up- Returns:
trueif the object can be moved up by one unit;falseotherwise
-
getBuilder
public ISelectExpressionStateObjectBuilder getBuilder()
Creates and returns a newISelectExpressionStateObjectBuilderthat can be used to programmatically create a single select expression and once the expression is complete,ISelectExpressionStateObjectBuilder.commit()will push theStateObjectrepresentation of that expression as this clause's select expression.- Returns:
- A new builder that can be used to quickly create a select expression
-
getExpression
public SelectClause getExpression()
Returns the actual parsed object if thisStateObjectrepresentation of the JPQL query was created by parsing an existing JPQL query.- Specified by:
getExpressionin interfaceStateObject- Overrides:
getExpressionin classAbstractSelectClauseStateObject- Returns:
- The parsed object when a JPQL query is parsed and converted into a
StateObjectornullwhen the JPQL query is manually created (i.e. not from a string)
-
getFromClause
public FromClauseStateObject getFromClause()
Returns theAbstractFromClauseStateObjectrepresenting the FROM clause.- Overrides:
getFromClausein classAbstractSelectClauseStateObject- Returns:
- The state object representing the FROM clause
-
getItem
public StateObject getItem(int index)
Returns theStateObjectat the given positions from the list- Specified by:
getItemin interfaceListHolderStateObject<StateObject>- Parameters:
index- The position of theStateObjectto retrieve- Returns:
- The
StateObjectat the given position
-
getParent
public SelectStatementStateObject getParent()
Returns the parent of thisStateObject.- Specified by:
getParentin interfaceStateObject- Overrides:
getParentin classAbstractSelectClauseStateObject- Returns:
- Returns the parent of this
StateObject, which isnullonly when this is the root of the hierarchy
-
hasItems
public boolean hasItems()
Determines whether thisStateObjecthas any children.- Specified by:
hasItemsin interfaceListHolderStateObject<StateObject>- Returns:
trueif thisStateObjecthas children;falseotherwise
-
hasSelectItem
public boolean hasSelectItem()
Determines whether thisSELECTclause has a select item defined (only one can be set for a subquery'sSELECTclause and many for a top-level query).- Specified by:
hasSelectItemin classAbstractSelectClauseStateObject- Returns:
trueif this state object has children;falseotherwise
-
initialize
protected void initialize()
Initializes this state object.- Overrides:
initializein classAbstractStateObject
-
isEquivalent
public boolean isEquivalent(StateObject stateObject)
Determines whether the givenStateObjectis equivalent to this one, i.e. the information of bothStateObjectis the same.- Specified by:
isEquivalentin interfaceStateObject- Overrides:
isEquivalentin classAbstractSelectClauseStateObject- Parameters:
stateObject- TheStateObjectto compare its content to this one- Returns:
trueif both object are equivalent;falseotherwise
-
items
public ListIterable<StateObject> items()
Returns anListIterableover the children.- Specified by:
itemsin interfaceListHolderStateObject<StateObject>- Returns:
- An
ListIterablethat is iterating over the children
-
itemsSize
public int itemsSize()
Returns the number of children this list holder has.- Specified by:
itemsSizein interfaceListHolderStateObject<StateObject>- Returns:
- The count of
StateObjectsthat are children of this one
-
moveDown
public StateObject moveDown(StateObject item)
Moves the givenStateObjectdown by one position in the list owned by its parent.- Specified by:
moveDownin interfaceListHolderStateObject<StateObject>- Parameters:
item- TheStateObjectto move down in the list- Returns:
- The given item
-
moveUp
public StateObject moveUp(StateObject item)
Moves the givenStateObjectup by one position in the list owned by its parent.- Specified by:
moveUpin interfaceListHolderStateObject<StateObject>- Parameters:
item- TheStateObjectto move up in the list- Returns:
- The given item
-
parse
public void parse(java.lang.String jpqlFragment)
Parses the given JPQL fragment and create the select item. For the top-level query, the fragment can contain several select items but for a subquery, it can represent only one.- Specified by:
parsein classAbstractSelectClauseStateObject- Parameters:
jpqlFragment- The portion of the query representing one or several select items
-
removeItem
public void removeItem(StateObject stateObject)
Removes the givenStateObjectfrom the list of children.- Specified by:
removeItemin interfaceListHolderStateObject<StateObject>- Parameters:
stateObject- The childStateObjectto not longer be a child
-
removeItems
public void removeItems(java.util.Collection<StateObject> items)
Removes the givenStateObjectfrom the list of children.- Specified by:
removeItemsin interfaceListHolderStateObject<StateObject>- Parameters:
items- TheStateObjectsto remove from this one
-
removeListChangeListener
public void removeListChangeListener(java.lang.String listName, IListChangeListener<StateObject> listener)Unregisters the givenIListChangeListenerthat was registered for the specified list. The listener will no longer be notified only when items are added, removed, moved from the list.- Specified by:
removeListChangeListenerin interfaceListHolderStateObject<StateObject>- Parameters:
listName- The name of the list for which the listener was registeredlistener- The listener to unregister
-
setExpression
public void setExpression(SelectClause expression)
Keeps a reference of theparsed objectobject, which should only be done when this object is instantiated during the conversion of a parsed JPQL query intoStateObjects.- Parameters:
expression- Theparsed objectrepresenting aSELECTclause
-
setItems
public void setItems(java.util.List<StateObject> stateObjects)
Sets the select expression to be those contained on the given collection. If any select items were already set, they will be removed.- Parameters:
stateObjects- The new select expressions
-
toTextInternal
protected void toTextInternal(java.lang.Appendable writer) throws java.io.IOExceptionPrints out a string representation of thisStateObject, which should not be used to define atruestring representation of a JPQL query but should be used for debugging purposes.- Specified by:
toTextInternalin classAbstractStateObject- Parameters:
writer- The writer used to print out the string representation- Throws:
java.io.IOException- This should never happens, it is only required becauseAppendableis used instead of any concrete class
-
-