|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjavax.faces.model.DataModel
org.apache.myfaces.trinidad.model.CollectionModel
public abstract class CollectionModel
The data model that is used by the Trinidad Table and Iterator components. This extends the Faces DataModel class and adds on support for rowKeys and sorting. Ordinary DataModels are still supported, and will automatically be wrapped into CollectionModels, but without the added functionality.
In the Faces DataModel, rows are identified entirely by index. This causes major problems if the underlying data changes from one request to the next - a user request to delete one row may delete a different row because a row got added by another user, etc. To work around this, CollectionModel is based around row keys instead of indices. An implementation of CollectionModel must implement getRowKey() and setRowKey(), and handle conversion from integer indices to row keys. A trivial implementation might simply use Integer objects as the row keys, but a better version could use a unique ID in the row.
Nested Class Summary |
---|
Nested classes/interfaces inherited from interface org.apache.myfaces.trinidad.model.LocalRowKeyIndex |
---|
LocalRowKeyIndex.Confidence, LocalRowKeyIndex.LocalCachingStrategy |
Constructor Summary | |
---|---|
CollectionModel()
|
Method Summary | |
---|---|
void |
addRowKeyChangeListener(RowKeyChangeListener listener)
Adds the listener to the Set of RowKeyChangeListeners on the Collection. |
boolean |
areRowsAvailable(int rowsToCheck)
Check if a range of rows is available starting from the current row. |
boolean |
areRowsAvailable(int startIndex,
int rowsToCheck)
Check if a range of rows is available from a starting index. |
boolean |
areRowsAvailable(Object startRowKey,
int rowsToCheck)
Check if a range of rows is available from a starting row key This method makes the row with the given row key current and calls #areRowsAvailable(rowsToCheck) . |
boolean |
areRowsLocallyAvailable(int rowsToCheck)
Check if a range of rows is locally available starting from current position. |
boolean |
areRowsLocallyAvailable(int startIndex,
int rowsToCheck)
Check if a range of rows is locally available starting from a row index. |
boolean |
areRowsLocallyAvailable(Object startRowKey,
int rowsToCheck)
Check if a range of rows is locally available starting from a row key. |
void |
clearCachedRow(int index)
Clears the row with the given index from local cache. |
void |
clearCachedRow(Object rowKey)
Clears the row with the given row key from local cache. |
void |
clearCachedRows(int startingIndex,
int rowsToClear)
Clears a range of rows from local cache starting from a row index. |
void |
clearCachedRows(Object startingRowKey,
int rowsToClear)
Clears a range of rows from local cache starting from a row key This is a do nothing implemenation. |
void |
clearLocalCache()
Clears the local cache. |
protected void |
fireRowKeyChange(RowKeyChangeEvent event)
Fire an existing RowKeyChangeEvent to any registered listeners. |
LocalRowKeyIndex.LocalCachingStrategy |
getCachingStrategy()
Returns the row caching strategy used by this implemenation. |
int |
getEstimatedRowCount()
Convenient API to return a row count estimate. |
LocalRowKeyIndex.Confidence |
getEstimatedRowCountConfidence()
Helper API to determine if the row count returned from getEstimatedRowCount()
is EXACT, or an ESTIMATE. |
Object |
getRowData(int rowIndex)
Gets the rowData at the given index. |
Object |
getRowData(Object rowKey)
Returns the rowData for the given rowKey without changing model currency. |
abstract Object |
getRowKey()
Gets the rowKey of the current row. |
List<SortCriterion> |
getSortCriteria()
Gets the criteria that this collection is sorted by. |
boolean |
isRowAvailable(int rowIndex)
Checks to see if the row at the given index is available. |
boolean |
isRowAvailable(Object rowKey)
Check for an available row by row key. |
boolean |
isRowLocallyAvailable(int rowIndex)
Given a row index, check if the row is locally available. |
boolean |
isRowLocallyAvailable(Object rowKey)
Given a row key, check if the row is locally available. |
boolean |
isSortable(String property)
Return true if this collection is sortable by the given property. |
void |
removeRowKeyChangeListener(RowKeyChangeListener listener)
Remove an existing listener from the Set of RowKeyChangeListeners on the Collection. |
abstract void |
setRowKey(Object key)
Finds the row with the matching key and makes it current |
void |
setSortCriteria(List<SortCriterion> criteria)
Sorts this collection by the given criteria. |
Methods inherited from class javax.faces.model.DataModel |
---|
addDataModelListener, getDataModelListeners, getRowCount, getRowData, getRowIndex, getWrappedData, isRowAvailable, iterator, removeDataModelListener, setRowIndex, setWrappedData |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Methods inherited from interface org.apache.myfaces.trinidad.model.RowKeyIndex |
---|
getRowCount, getRowData, getRowIndex, isRowAvailable, setRowIndex |
Constructor Detail |
---|
public CollectionModel()
Method Detail |
---|
public abstract Object getRowKey()
Object.equals(java.lang.Object)
and Object.hashCode()
as they will be used
as keys in hashtables. rowKeys should also be Serializable, so that the
application can run under all JSF state-saving schemes.
getRowKey
in interface RowKeyIndex
setRowKey(java.lang.Object)
public abstract void setRowKey(Object key)
setRowKey
in interface RowKeyIndex
key
- the rowKey, previously obtained from getRowKey()
.public boolean isRowAvailable(int rowIndex)
DataModel.isRowAvailable()
.
Finally, the row that was current before this method was called
is made current again.
isRowAvailable
in interface RowKeyIndex
rowIndex
- the index of the row to check.
DataModel.isRowAvailable()
public boolean isRowAvailable(Object rowKey)
DataModel.isRowAvailable()
.
Finally, the row that was current before this method was called
is made current again.
isRowAvailable
in interface RowKeyIndex
rowKey
- the row key for the row to check.
DataModel.isRowAvailable()
public Object getRowData(int rowIndex)
DataModel.getRowData()
.
Finally, the row that was current before this method was called
is made current again.
getRowData
in interface RowKeyIndex
rowIndex
- the index of the row to get data from.
DataModel.getRowData()
public Object getRowData(Object rowKey)
getRowData
in interface RowKeyIndex
rowKey
- the row key of the row to get data from.
DataModel.getRowData()
public boolean isSortable(String property)
public List<SortCriterion> getSortCriteria()
SortCriterion
public void setSortCriteria(List<SortCriterion> criteria)
criteria
- Each element in this List must be of type SortCriterion.
The empty list may be used to cancel any sort order. null should be treated
the same as an empty list.SortCriterion
public boolean areRowsAvailable(int startIndex, int rowsToCheck)
areRowsAvailable
in interface RowKeyIndex
startIndex
- the starting index for the rangerowsToCheck
- number of rows to check. If rowsToCheck < 0 set
startIndex = startIndex - abs(rowsToCheck) + 1. This
allows for checking for row availability from the end position. For example
to check for availability of n rows from the end, call
isRangeAvailable(getRowCount()-1, -n)
false
public boolean areRowsAvailable(Object startRowKey, int rowsToCheck)
#areRowsAvailable(rowsToCheck)
.
The current row does not change after this call
areRowsAvailable
in interface RowKeyIndex
startRowKey
- the starting row key for the rangerowsToCheck
- number of rows to check
areRowsAvailable(int).
public boolean areRowsAvailable(int rowsToCheck)
areRowsAvailable
in interface RowKeyIndex
rowsToCheck
- number of rows to check
public void addRowKeyChangeListener(RowKeyChangeListener listener)
Adds the listener to the Set of RowKeyChangeListeners on the Collection.
The same listener instance may be added multiple times, but will only be called once per change.
Since the Collection may have a lifetime longer than Request, the listener implementation
should take care not to maintain any references to objects only valid in the current Request.
For example, if a UIComponent wishes to listen on a Collection, the UIComponent cannot use a
listener that maintains a Java reference to the UIComponent instance because UIComponent
instances are only valid for the current request (this also precludes the use of a non-static
inner class for the listener). Instead, the UIComponent would need to use an indirect
reference such as ComponentReference
to dynamically find the correct instance to use.
In the case where the Collection has a short lifetime, the code that adds the listener needs to
ensure that it executes every time the Collection instance is reinstantiated.
listener
- The listener for RowKeyChangeEvents to add to the CollectionremoveRowKeyChangeListener(org.apache.myfaces.trinidad.model.RowKeyChangeListener)
public void removeRowKeyChangeListener(RowKeyChangeListener listener)
Remove an existing listener from the Set of RowKeyChangeListeners on the Collection.
The same listener instance may be removed multiple times wihtout failure.
listener
- The listener for RowKeyChangeEvents to remove from the Collectionprotected void fireRowKeyChange(RowKeyChangeEvent event)
event
- The RowKeyChangeEvent object.public boolean areRowsLocallyAvailable(int startIndex, int rowsToCheck)
areRowsLocallyAvailable
in interface LocalRowKeyIndex
startIndex
- starting row index to checkrowsToCheck
- number of rows to check
false
areRowsAvailable(int, int)
public boolean areRowsLocallyAvailable(Object startRowKey, int rowsToCheck)
areRowsLocallyAvailable
in interface LocalRowKeyIndex
startRowKey
- starting row key to checkrowsToCheck
- number of rows to check
false
areRowsAvailable(Object, int)
public boolean areRowsLocallyAvailable(int rowsToCheck)
areRowsLocallyAvailable(startIndex, rowsToCheck)
areRowsLocallyAvailable
in interface LocalRowKeyIndex
rowsToCheck
- number of rows to check
false
areRowsLocallyAvailable(startIndex, rowsToCheck)
public boolean isRowLocallyAvailable(int rowIndex)
isRowLocallyAvailable
in interface LocalRowKeyIndex
rowIndex
- row index to check
false
public boolean isRowLocallyAvailable(Object rowKey)
isRowLocallyAvailable
in interface LocalRowKeyIndex
rowKey
- row key to check
false
public int getEstimatedRowCount()
getEstimatedRowCount
in interface LocalRowKeyIndex
DataModel.getRowCount()
public LocalRowKeyIndex.Confidence getEstimatedRowCountConfidence()
getEstimatedRowCount()
is EXACT, or an ESTIMATE.
getEstimatedRowCountConfidence
in interface LocalRowKeyIndex
DataModel.getRowCount()
public void clearCachedRow(int index)
clearCachedRow
in interface LocalRowKeyIndex
index
- row index for the row to remove from cacheclearCachedRows(int, int)
public void clearCachedRow(Object rowKey)
clearCachedRow
in interface LocalRowKeyIndex
rowKey
- row key for the row to remove from cacheclearCachedRows(Object, int)
public void clearCachedRows(int startingIndex, int rowsToClear)
clearCachedRows
in interface LocalRowKeyIndex
startingIndex
- starting row index to clear the local cache fromrowsToClear
- number of rows to clearclearLocalCache()
public void clearCachedRows(Object startingRowKey, int rowsToClear)
clearCachedRows
in interface LocalRowKeyIndex
startingRowKey
- starting row key to clear the local cache fromrowsToClear
- number of rows to clearclearLocalCache()
public void clearLocalCache()
clearLocalCache
in interface LocalRowKeyIndex
public LocalRowKeyIndex.LocalCachingStrategy getCachingStrategy()
getCachingStrategy
in interface LocalRowKeyIndex
LocalRowKeyIndex.LocalCachingStrategy
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |