|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectcom.vaadin.client.data.AbstractRemoteDataSource<T>
T - the row typepublic abstract class AbstractRemoteDataSource<T>
Base implementation for data sources that fetch data from a remote system.
This class takes care of caching data and communicating with the data source
user. An implementation of this class should override
requestRows(int, int) to trigger asynchronously loading of data.
When data is received from the server, new row data should be passed to
setRowData(int, List). #setEstimatedSize(int) should be used
based on estimations of how many rows are available.
| Nested Class Summary | |
|---|---|
protected class |
AbstractRemoteDataSource.RowHandleImpl
|
| Nested classes/interfaces inherited from interface com.vaadin.client.data.DataSource |
|---|
DataSource.RowHandle<T> |
| Field Summary | |
|---|---|
protected java.util.Collection<T> |
temporarilyPinnedRows
|
| Constructor Summary | |
|---|---|
AbstractRemoteDataSource()
|
|
| Method Summary | |
|---|---|
void |
ensureAvailability(int firstRowIndex,
int numberOfRows)
Informs the data source that data for the given range is needed. |
com.vaadin.shared.ui.grid.Range |
getCachedRange()
Gets the current range of cached rows |
DataSource.RowHandle<T> |
getHandle(T row)
Gets a DataSource.RowHandle of a row object in the cache. |
T |
getRow(int rowIndex)
Retrieves the data for the row at the given index. |
abstract java.lang.Object |
getRowKey(T row)
Gets a stable key for the row object. |
int |
indexOf(T row)
Retrieves the index for given row object. |
protected void |
insertRowData(int firstRowIndex,
int count)
Informs this data source that new data has been inserted from the server. |
protected void |
removeRowData(int firstRowIndex,
int count)
Informs this data source that the server has removed data. |
protected abstract void |
requestRows(int firstRowIndex,
int numberOfRows)
Triggers fetching rows from the remote data source. |
protected void |
resetDataAndSize(int newSize)
|
void |
setCacheStrategy(CacheStrategy cacheStrategy)
Sets the cache strategy that is used to determine how much data is fetched and cached. |
void |
setDataChangeHandler(DataChangeHandler dataChangeHandler)
Sets a data change handler to inform when data is updated, added or removed. |
protected void |
setRowData(int firstRowIndex,
java.util.List<T> rowData)
Informs this data source that updated data has been sent from the server. |
void |
transactionPin(java.util.Collection<T> rows)
Deprecated. You probably don't want to call this method unless you're writing a Renderer for a selection model. Even if you are, be very aware what this method does and how it behaves. |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Methods inherited from interface com.vaadin.client.data.DataSource |
|---|
size |
| Field Detail |
|---|
protected java.util.Collection<T> temporarilyPinnedRows
| Constructor Detail |
|---|
public AbstractRemoteDataSource()
| Method Detail |
|---|
public void ensureAvailability(int firstRowIndex,
int numberOfRows)
DataSource
This method triggers lazy loading of data if necessary. The change
handler registered using DataSource.setDataChangeHandler(DataChangeHandler)
is informed when new data has been loaded.
After any possible lazy loading and updates are done, the change handler is informed that new data is available.
ensureAvailability in interface DataSource<T>firstRowIndex - the index of the first needed rownumberOfRows - the number of needed rows
protected abstract void requestRows(int firstRowIndex,
int numberOfRows)
setRowData(int, List) should be invoked with data for the
requested rows when they have been received.
firstRowIndex - the index of the first row to fetchnumberOfRows - the number of rows to fetchpublic T getRow(int rowIndex)
DataSourcenull.
This method does not trigger loading of unavailable data.
DataSource.ensureAvailability(int, int) should be used to signal what data
will be needed.
getRow in interface DataSource<T>rowIndex - the index of the row to retrieve data for
null if no data is availablepublic int indexOf(T row)
DataSourceNote: This method does not verify that the given row object exists at all in this DataSource.
indexOf in interface DataSource<T>row - the row object
-1 if row is not availablepublic void setDataChangeHandler(DataChangeHandler dataChangeHandler)
DataSource
setDataChangeHandler in interface DataSource<T>dataChangeHandler - the data change handler
protected void setRowData(int firstRowIndex,
java.util.List<T> rowData)
firstRowIndex - the index of the first received rowrowData - a list of rows, starting from firstRowIndex
protected void removeRowData(int firstRowIndex,
int count)
firstRowIndex - the index of the first removed rowcount - the number of removed rows, starting from
firstRowIndex
protected void insertRowData(int firstRowIndex,
int count)
firstRowIndex - the destination index of the new row datacount - the number of rows insertedpublic com.vaadin.shared.ui.grid.Range getCachedRange()
public void setCacheStrategy(CacheStrategy cacheStrategy)
The new strategy is immediately used to evaluate whether currently cached rows should be discarded or new rows should be fetched.
cacheStrategy - a cache strategy implementation, not null
public DataSource.RowHandle<T> getHandle(T row)
throws java.lang.IllegalStateException
DataSourceDataSource.RowHandle of a row object in the cache.
getHandle in interface DataSource<T>row - the row object for which to retrieve a row handle
null row handle of the given row object
java.lang.IllegalStateExceptionpublic abstract java.lang.Object getRowKey(T row)
This method is a workaround for the fact that there is no means to force
proper implementations for Object.hashCode() and
Object.equals(Object) methods.
Since the same row object will be created several times for the same logical data, the DataSource needs a mechanism to be able to compare two objects, and figure out whether or not they represent the same data. Even if all the fields of an entity would be changed, it still could represent the very same thing (say, a person changes all of her names.)
A very usual and simple example what this could be, is an unique ID for this object that would also be stored in a database.
row - the row object for which to get the key
@Deprecated public void transactionPin(java.util.Collection<T> rows)
This collection of rows are intended to remain pinned if new rows are fetched from the data source, even if some of the pinned rows would fall off the cache and become inactive.
This method does nothing by itself, other than it stores the rows into a
field. The implementation needs to make all the adjustments for itself.
Check RpcDataSourceConnector.RpcDataSource.requestRows(int, int)
for an implementation example.
keys - a collection of rows to keep pinnedtemporarilyPinnedRows,
RpcDataSourceConnector.RpcDataSource.requestRows(int, int)protected void resetDataAndSize(int newSize)
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||