public class ResultSet extends RecordList implements HasDataArrivedHandlers
com.smartgwt.client.data.List interface that automatically fetches DataSource records when items are requested from the List. ResultSets provide robust, customizable, high-performance cache management for ListGrids and other built-in Smart GWT components, and can be used as cache managers by custom components. ResultSets manage data paging, that is, loading records in batches as the user navigates the data set. A ResultSet will switch to using client-side sorting and filtering when possible to improve responsiveness and reduce server load. ResultSets also participate in automatic cache synchronization, observing operations on DataSources and automatically updating their caches.
Creation
A ResultSet can be passed to any component that expects a List, and the List APIs can be called directly on the ResultSet as long as the caller is able to deal with asynchronous loading; see getRange().
Generally ResultSets do not need to be created directly, but are created by DataBound components as an automatic consequence of calling DataBound Component Methods. For example, the ListGrid.fetchData() causes ListGrid.data to become an automatically created ResultSet object. Automatically created ResultSets can be customized via properties on ListGrids such as ListGrid.dataPageSize and ListGrid.dataProperties. All ResultSets for a given DataSource may also be customized via setting DataSource.resultSetClass to the name of a ResultSet subclass in which defaults have been changed.
A ResultSet defaults to using data paging, setting DSRequest.startRow and DSRequest.endRow in issued dsRequests. Server code may always return more rows than the ResultSet requests and the ResultSet will correctly integrate those rows based on DSResponse.startRow/endRow. Hence the server can always avoid paging mode by simply returning all matching rows.
A ResultSet can be created directly with just the ID of a DataSource:
ResultSet resultSet = new ResultSet();
resultSet.setDataSource(dataSourceID);
Directly created ResultSets are typically used by custom components, or as a means of managing datasets that will be used by several components.
When created directly rather than via a dataBoundComponent, a newly created ResultSet will not issue it's first "fetch" DSRequest until data is accessed (for example, via get()).
Paging and total dataset length
When using data paging, the server communicates the total number of records that match the current search criteria by setting DSResponse.totalRows. The ResultSet will then return this number from getLength(), and ListGrids and other components will show a scrollbar that allows the user to jump to the end of the dataset directly.
However, the ResultSet does not require that the server calculate the true length of the dataset, which can be costly for an extremely large, searchable dataset. Instead, the server may simply advertise a totalRows value that is one page larger than the last row loaded. This results in a UI sometimes called "progressive loading", where the user may load more rows by scrolling past the end of the currently loaded rows, but is not allowed to skip to the end of the dataset.
No client-side settings are required to enable this mode - it is entirely server-driven. However, it is usually coupled with disabling sorting, since server-side sorting would also force the server to traverse the entire dataset. Note also the progressiveLoading flag, which can be applied at a DataSource, operation, request, component or ResultSet level; if you are using the built-in server-side DataSource implementations with Pro or better, this tells Smart GWT Server to use its pre-built progressive loading mode for that DataSource, operation, request, component or ResultSet.
Client-side Sorting and Filtering
If a ResultSet obtains a full cache for the current set of filter criteria, it will automatically switch to client-side sorting, and will also use client-side filtering if the filter criteria are later changed but appear to be more restrictive than the criteria in use when the ResultSet obtained a full cache.
The useClientSorting and useClientFiltering flags can be used to disable client-side sorting and filtering respectively if these behaviors don't match server-based sorting and filtering. However, because client-side sorting and filtering radically improve responsiveness and reduce server load, it is better to customize the ResultSet so that it can match server-side sorting and filtering behaviors.
Sorting behavior is primarily customized via the "sort normalizer" passed to sortByProperty(), either via direct calls on a standalone ResultSet, or via ListGridField.sortNormalizer() for a ListGrid-managed ResultSet.
By default, client-side filtering interprets the criteria passed to setCriteria() as a set of field values that records must match (similarly to the built-in SQL/Hibernate connectors built into the Smart GWT Server). Custom client-side filtering logic can be implemented by overriding applyFilter(). Overriding compareCriteria() allows you to control when the ResultSet uses client-side vs server-side filtering, and the ResultSet has two default criteria policies built-in.
Modifying ResultSets
Records cannot be directly added or removed from a ResultSet via com.smartgwt.client.data.List APIs such as removeAt(), since this would break the consistency of server and client row numbering needed for data paging, and also create some issues with automatic cache synchronization.
Use DataSource.addData()/removeData() to add/remove rows from the DataSource, and the ResultSet will reflect the changes automatically. Alternatively, the DataSource.updateCaches() method may be called to only update local caches of the DataSource in question, without generating any server traffic.
To create a locally modifiable cache of Records from a DataSource, you can use DataSource.fetchData() to retrieve a List of Records which can be modified directly, or you can create a client-only DataSource from the retrieved data to share a modifiable cache between several DataBoundComponents.
Updates and Automatic Cache Synchronization
Once a ResultSet has retrieved data or has been initialized with data, the ResultSet will observe any successful "update", "add" or "remove" dsRequests against their DataSource, regardless of the component that initiated them. A ResultSet with a full cache for the current filter criteria will integrate updates into the cache automatically.
Updated rows that no longer match the current filter criteria will be removed automatically. To prevent this, you can set neverDropUpdatedRows. Added rows will similarly be added to the cache only if they match current filter criteria.
Note that the client-side filtering described above is also used to determine whether updated or added rows should be in the cache. If any aspect of automated cache update is ever incorrect, dropCacheOnUpdate can be set for the ResultSet or DSResponse.invalidateCache can be set for an individual dsResponse.
If automatic cache synchronization isn't working, troubleshoot the problem using the steps suggested in the FAQ.
Regarding operationIds and how they affect caching, take into account that cache sync is based on the fetch used - any add or update operation uses a fetch to retrieve updated data, and the operationId of that fetch can be set via cacheSyncOperation. If the operationId of the cache is different from the operationId of the cache update data, it won't be used to update the cache, since the fields included and other aspects of the data are allowed to be different across different operationIds. This allows to maintain distinct caches on a per component basis, so when two components are using separate operationIds they are assumed to have distinct caches, because updates performed with one operationId will not affect the cache obtained via another operationId. Also, take into account that operationId must be unique per DataSource, across all operationTypes for that DataSource.
Data Paging with partial cache
When in paging mode with a partial cache, a ResultSet relies on server side sorting, setting DSRequest.sortBy to the current sort field and direction. In order for the cache to remain coherent, row numbering must continue to agree between server and client as new fetches are issued, otherwise, duplicate rows or missing rows may occur.
If concurrent modifications by other users are allowed, generally the server should set DSResponse.invalidateCache to clear the cache when concurrent modification is detected.
In paging mode with a partial cache, any successful "update" or "add" operation may cause client and server row numbering to become out of sync. This happens because the update may affect the sort order, and client and server cannot be guaranteed to match for sets of records that have equivalent values for the sort field.
For this reason, after an "add" or "update" operation with a partial cache, the ResultSet will automatically mark cache for invalidation the next time a fetch operation is performed. Alternatively, if updatePartialCache is set to false, the ResultSet will simply invalidate cache immediately in this circumstance.
RecordList.SortNormalizerjsObjconfig, configOnly, factoryCreated, factoryProperties, id, scClassName| Constructor and Description |
|---|
ResultSet() |
ResultSet(DataSource dataSource) |
ResultSet(com.google.gwt.core.client.JavaScriptObject jsObj) |
| Modifier and Type | Method and Description |
|---|---|
com.google.gwt.event.shared.HandlerRegistration | addDataArrivedHandler(DataArrivedHandler handler) Add a dataArrived handler. |
boolean | allMatchingRowsCached() Do we have a complete client-side cache of records for the current filter criteria? |
boolean | allRowsCached() Do we have a complete client-side cache of all records for this DataSource? |
static ResultSet | asSGWTComponent(com.google.gwt.core.client.JavaScriptObject jsObj) Returns the existing SGWT ResultSet, or creates and returns one if none exist, associated with the supplied JavaScriptObject. |
int | compareCriteria(Criteria newCriteria, Criteria oldCriteria) Default behavior is to call DataSource.compareCriteria(com.smartgwt.client.data.Criteria, com.smartgwt.client.data.Criteria) to determine whether new criteria is guaranteed more restrictive, equivalent to the old criteria, or not guaranteed more restrictive, returning 1, 0 or -1 respectively. |
int | compareCriteria(Criteria newCriteria, Criteria oldCriteria, DSRequest requestProperties, java.lang.String policy) Default behavior is to call DataSource.compareCriteria(com.smartgwt.client.data.Criteria, com.smartgwt.client.data.Criteria) to determine whether new criteria is guaranteed more restrictive, equivalent to the old criteria, or not guaranteed more restrictive, returning 1, 0 or -1 respectively. |
protected com.google.gwt.core.client.JavaScriptObject | create() |
void | dataArrived(int startRow, int endRow) Deprecated. This method is not an override point in SmartGWT. Use addDataArrivedHandler(com.smartgwt.client.data.events.DataArrivedHandler) instead. |
void | ensureCreated() Ensures that the underlying SmartClient ResultSet object is created for this ResultSet instance. |
void | filterLocalData() Derive the current filtered set of data from the cache of all matching rows. |
Record | find(java.util.Map properties) Checks only loaded rows and will not trigger a fetch. |
Record | find(java.lang.String propertyName, java.lang.Object value) |
Record[] | findAll(AdvancedCriteria adCriteria) Filters all objects according to the AdvancedCriteria passed and will not trigger a fetch. |
Record[] | findAll(java.util.Map properties) Checks only loaded rows and will not trigger a fetch. |
Record[] | findAll(java.lang.String propertyName, boolean value) Checks only loaded rows and will not trigger a fetch. |
Record[] | findAll(java.lang.String propertyName, java.util.Date value) Find all objects where property == value in the object. |
Record[] | findAll(java.lang.String propertyName, float value) Checks only loaded rows and will not trigger a fetch. |
Record[] | findAll(java.lang.String propertyName, int value) Checks only loaded rows and will not trigger a fetch. |
Record[] | findAll(java.lang.String propertyName, java.lang.Long value) Checks only loaded rows and will not trigger a fetch. |
Record[] | findAll(java.lang.String propertyName, java.lang.String value) Checks only loaded rows and will not trigger a fetch. |
Record | findByKey(java.lang.String keyValue) Attempt to find the record in the resultSet that has a primary key value that matches the passed in parameter value. |
int | findIndex(java.util.Map properties) |
int | findIndex(java.lang.String propertyName, boolean value) |
int | findIndex(java.lang.String propertyName, java.util.Date value) |
int | findIndex(java.lang.String propertyName, float value) |
int | findIndex(java.lang.String propertyName, int value) |
int | findIndex(java.lang.String propertyName, java.lang.Long value) |
int | findIndex(java.lang.String propertyName, java.lang.String value) |
int | findNextIndex(int startIndex, java.util.Map properties) |
int | findNextIndex(int startIndex, java.lang.String propertyName) |
int | findNextIndex(int startIndex, java.lang.String propertyName, boolean value, int endIndex) |
int | findNextIndex(int startIndex, java.lang.String propertyName, java.util.Date value, int endIndex) |
int | findNextIndex(int startIndex, java.lang.String propertyName, float value, int endIndex) |
int | findNextIndex(int startIndex, java.lang.String propertyName, int value, int endIndex) |
int | findNextIndex(int startIndex, java.lang.String propertyName, java.lang.Long value, int endIndex) |
int | findNextIndex(int startIndex, java.lang.String propertyName, java.lang.String value, int endIndex) |
Record | get(int pos) Returns the record at the specified position. |
RecordList | getAllCachedRows() Returns a list of all rows that have been cached. |
RecordList | getAllVisibleRows() Returns a list of the currently visible data, that is, all rows that match the current criteria, with null entries or loading markers for rows that are not yet loaded or in the process of loading, respectively. |
java.lang.Boolean | getAlwaysRequestVisibleRows() If true, records requested only for visible area. |
Criteria | getCriteria() Filter criteria used whenever records are retrieved. |
CriteriaPolicy | getCriteriaPolicy() Decides under what conditions the cache should be dropped when the Criteria changes. |
DataSource | getDataSource() What DataSource is this resultSet associated with? |
java.lang.Boolean | getDisableCacheSync() By default when the data of this ResultSet's dataSource is modified, the ResultSet will be updated to display these changes. |
java.lang.Boolean | getDropCacheOnUpdate() Whether to discard all cached rows when a modification operation (add, update, remove) occurs on the ResultSet's DataSource. |
int | getFetchDelay() Delay in milliseconds before fetching rows. |
FetchMode | getFetchMode() Mode of fetching records from the server. |
java.lang.String | getFetchOperation() Operation this dataModel should use to fetch sets of objects |
int | getLength() Return the total number of records that match the current filter criteria. |
static Record | getLoadingMarker() Returns the singleton marker object that is used as a placeholder for records that are being loaded from the server. |
java.lang.Boolean | getNeverDropUpdatedRows() By default when a a row is returned by the server, the current setCriteria(com.smartgwt.client.data.Criteria) are applied to it, and it may disappear from the cache. |
static ResultSet | getOrCreateRef(com.google.gwt.core.client.JavaScriptObject jsObj) |
java.util.Map | getPaletteDefaults() This method returns a Map of config properties suitable for use as the "defaults" attribute of a PaletteNode. |
java.lang.Boolean | getProgressiveLoading() Sets progressive loading mode for this ResultSet. |
Record[] | getRange(int start, int end) Return the items between position start and end, non-inclusive at the end, possibly containing markers for records that haven't loaded yet. |
RecordList | getRangeAsRecordList(int start, int end) Return a RecordList with the items between position start and end, non-inclusive at the end. |
boolean | getRememberDynamicProgressiveLoading() If progressiveLoading is not explicitly set, but the ResultSet recieves a response from the server where DSResponse.progressiveLoading is set to true, should subsequent requests for other rows in the same data set explicitly request progressiveLoading via DSRequest.progressiveLoading, as long as the criteria are unchanged and the cache is not explicitly invalidated? |
int | getResultSize() How many rows to retrieve at once. |
java.lang.Boolean | getUpdateCacheFromRequest() When a successful Add, Update or Remove type operation fires on this ResultSet's dataSource, if data is unset, should we integrate the submitted data values (from the request) into our data-set? This attribute will be passed to DataSource#getUpdatedData as the useDataFromRequest parameter. |
java.lang.Boolean | getUpdatePartialCache() If set to true, updated and added rows will be integrated into the client-side cache even if paging is enabled and cache is partial. |
java.lang.Boolean | getUseClientFiltering() Whether to filter data locally when all DataSource records have been loaded (that is, criteria is blank and cache is complete). |
java.lang.Boolean | getUseClientSorting() Whether to sort data locally when all records matching the current criteria have been cached. |
java.util.Map | getValueMap(java.lang.String idField, java.lang.String displayField) Get a map of the form { item[idField] -> item[displayField] }, for all items in the list. |
int | indexOf(Record record) Return the position in the list of the first instance of the specified object. |
int | indexOf(Record record, int pos, int endPos) Return the position in the list of the first instance of the specified object. |
void | invalidateCache() Manually invalidate this ResultSet's cache. |
static boolean | isResultSet(com.google.gwt.core.client.JavaScriptObject data) |
java.lang.Boolean | lengthIsKnown() Whether the ResultSet actually knows how many records are available from the server. |
java.lang.Boolean | rangeIsLoaded(int startRow, int endRow) Whether the given range of rows has been loaded. |
java.lang.Boolean | rowIsLoaded(int rowNum) Whether the given row has been loaded. |
ResultSet | setAllRows(Record[] allRows) If the complete set of records for a resultSet is available when the resultSet is created, it can be made available to the resultSet via this property at initialization time. |
void | setAlwaysRequestVisibleRows(java.lang.Boolean alwaysRequestVisibleRows) If true, records requested only for visible area. |
void | setCriteria(Criteria criteria) Filter criteria used whenever records are retrieved. |
void | setCriteriaPolicy(CriteriaPolicy criteriaPolicy) Decides under what conditions the cache should be dropped when the Criteria changes. |
ResultSet | setDataSource(DataSource dataSource) What DataSource is this resultSet associated with? |
void | setDisableCacheSync(java.lang.Boolean disableCacheSync) By default when the data of this ResultSet's dataSource is modified, the ResultSet will be updated to display these changes. |
void | setDropCacheOnUpdate(java.lang.Boolean dropCacheOnUpdate) Whether to discard all cached rows when a modification operation (add, update, remove) occurs on the ResultSet's DataSource. |
void | setFetchDelay(int fetchDelay) Delay in milliseconds before fetching rows. |
void | setFetchMode(FetchMode fetchMode) Mode of fetching records from the server. |
void | setFetchOperation(java.lang.String fetchOperation) Operation this dataModel should use to fetch sets of objects |
void | setInitialData(Record[] initialData) Initial set of data for the ResultSet. |
void | setInitialLength(java.lang.Integer initialLength) Initial value of the data set length. |
void | setInitialSort(SortSpecifier... sortSpecifiers) Initial multi property sort specification for this ResultSet's data. |
void | setNeverDropUpdatedRows(java.lang.Boolean neverDropUpdatedRows) By default when a a row is returned by the server, the current setCriteria(com.smartgwt.client.data.Criteria) are applied to it, and it may disappear from the cache. |
ResultSet | setProgressiveLoading(java.lang.Boolean progressiveLoading) Sets progressive loading mode for this ResultSet. |
ResultSet | setRememberDynamicProgressiveLoading(boolean rememberDynamicProgressiveLoading) If progressiveLoading is not explicitly set, but the ResultSet recieves a response from the server where DSResponse.progressiveLoading is set to true, should subsequent requests for other rows in the same data set explicitly request progressiveLoading via DSRequest.progressiveLoading, as long as the criteria are unchanged and the cache is not explicitly invalidated? |
void | setResultSize(int resultSize) How many rows to retrieve at once. |
void | setUpdateCacheFromRequest(java.lang.Boolean updateCacheFromRequest) When a successful Add, Update or Remove type operation fires on this ResultSet's dataSource, if data is unset, should we integrate the submitted data values (from the request) into our data-set? This attribute will be passed to DataSource#getUpdatedData as the useDataFromRequest parameter. |
void | setUpdatePartialCache(java.lang.Boolean updatePartialCache) If set to true, updated and added rows will be integrated into the client-side cache even if paging is enabled and cache is partial. |
void | setUseClientFiltering(java.lang.Boolean useClientFiltering) Whether to filter data locally when all DataSource records have been loaded (that is, criteria is blank and cache is complete). |
void | setUseClientSorting(java.lang.Boolean useClientSorting) Whether to sort data locally when all records matching the current criteria have been cached. |
java.lang.Boolean | usingFilteredData() Determine whether the ResultSet is showing a filtered, proper subset of the cached rows. |
java.lang.Boolean | willFetchData(Criteria newCriteria) Will changing the criteria for this resultSet require fetching new data from the server, or can the new criteria be satisfied from data already cached on the client? Second textMatchStyle parameter determines whether a change of text-match style will require a server fetch - for example if filter is being changed between an exact match (from e.g: ListGrid.fetchData()) and a substring match (from e.g: ListGrid.filterData()).This method can be used to determine whether ListGrid.fetchData() or ListGrid.filterData() would cause a server side fetch when passed a certain set of criteria. |
java.lang.Boolean | willFetchData(Criteria newCriteria, java.lang.String textMatchStyle) Will changing the criteria for this resultSet require fetching new data from the server, or can the new criteria be satisfied from data already cached on the client? Second textMatchStyle parameter determines whether a change of text-match style will require a server fetch - for example if filter is being changed between an exact match (from e.g: ListGrid.fetchData()) and a substring match (from e.g: ListGrid.filterData()).This method can be used to determine whether ListGrid.fetchData() or ListGrid.filterData() would cause a server side fetch when passed a certain set of criteria. |
add, addAt, addDataChangedHandler, addList, addList, addListAt, contains, contains, containsAll, duplicate, equals, find, find, find, find, findIndex, findNextIndex, findNextIndex, first, getItems, getJsObj, getOrCreateJsObj, getProperty, getRangeList, intersect, isARecordList, isCreated, isEmpty, last, lastIndexOf, lastIndexOf, remove, removeAt, removeList, set, setLength, setSort, sort, sort, sortByProperty, sortByProperty, toArrayaddDynamicProperty, addDynamicProperty, addDynamicProperty, addDynamicProperty, applyFactoryProperties, clearDynamicProperty, createJsObj, destroy, doAddHandler, doInit, error, error, errorIfNotCreated, fireEvent, getAttribute, getAttributeAsBoolean, getAttributeAsDate, getAttributeAsDouble, getAttributeAsElement, getAttributeAsFloat, getAttributeAsInt, getAttributeAsJavaScriptObject, getAttributeAsMap, getAttributeAsString, getAttributeAsStringArray, getClassName, getConfig, getHandlerCount, getID, getRef, getRuleScope, getScClassName, getTestInstance, hasAutoAssignedID, hasDynamicProperty, internalSetID, internalSetID, isConfigOnly, isFactoryCreated, onBind, onInit, registerID, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setAttribute, setConfig, setConfigOnly, setFactoryCreated, setID, setJavaScriptObject, setProperty, setProperty, setProperty, setProperty, setRuleScope, setScClassNamepublic ResultSet()
public ResultSet(DataSource dataSource)
public ResultSet(com.google.gwt.core.client.JavaScriptObject jsObj)
public static ResultSet getOrCreateRef(com.google.gwt.core.client.JavaScriptObject jsObj)
protected com.google.gwt.core.client.JavaScriptObject create()
create in class RecordListpublic static ResultSet asSGWTComponent(com.google.gwt.core.client.JavaScriptObject jsObj)
JavaScriptObject. If the supplied object is not a SmartClient ResultSet, a warning will be logged and null returned; otherwise the SGWT ResultSet will be returned.jsObj - SmartClient ResultSet whose wrapper is wantedpublic void ensureCreated()
throws java.lang.IllegalStateException isc.ResultSet.create() function is executed to create the SmartClient ResultSet object wrapped by this instance. This method is required to be called for standalone usage of a ResultSet. In addition, it can only be called after all initial configuration (dataSource, allRows if being used, etc.) has been set.
java.lang.IllegalStateException - if no dataSource has been setpublic java.util.Map getPaletteDefaults()
PaletteNode. Use it when you need to work with PaletteNodes indirectly, such when setting up TileRecords that will be used in a TilePalette. See the dev tools overview for examples of how to assemble and acquire a suitable defaults object when you are creating a PaletteNode indirectlypublic void setFetchMode(FetchMode fetchMode) throws java.lang.IllegalStateException
"local" if allRows is specified, otherwise "paged". Note : This is an advanced setting
fetchMode - fetchMode Default value is nulljava.lang.IllegalStateException - this property cannot be changed after the underlying component has been createdpublic FetchMode getFetchMode()
"local" if allRows is specified, otherwise "paged".public void setInitialData(Record[] initialData) throws java.lang.IllegalStateException
This data will be treated exactly as though it were the data returned from the ResultSet's first server fetch.
By default, initialData will be considered a complete response (all rows that match the Criteria which the ResultSet was initialized with).
Set initialLength to treat initialData as a partial response, equivalent to receiving a DSResponse with startRow:0, endRow:initialData.length and totalRows:initialLength. Normal data paging will then occur if data is requested for row indices not filled via initialData.
Note : This is an advanced setting
initialData - initialData Default value is nulljava.lang.IllegalStateException - this property cannot be changed after the underlying component has been createdpublic void setInitialLength(java.lang.Integer initialLength)
throws java.lang.IllegalStateException To create a ResultSet with it's cache partly filled, see initialData.
Note : This is an advanced setting
initialLength - initialLength Default value is nulljava.lang.IllegalStateException - this property cannot be changed after the underlying component has been createdpublic void setInitialSort(SortSpecifier... sortSpecifiers)
setInitialData(Record[]), this method may be used to notify the ResultSet that the data is already sorted such that a call to RecordList.setSort(SortSpecifier...) will not require a new fetch unless additional data beyond the ends of the specified initialData are required.sortSpecifiers - Initial sort specificationpublic ResultSet setAllRows(Record[] allRows) throws java.lang.IllegalStateException
invalidateCache(). Note : This is an advanced setting
allRows - allRows Default value is nullResultSet instance, for chaining setter callsjava.lang.IllegalStateException - this property cannot be changed after the underlying component has been createdpublic void setResultSize(int resultSize)
Applicable only with fetchMode: "paged". When a paged ResultSet is asked for rows that have not yet been loaded, it will fetch adjacent rows that are likely to be required soon, in batches of this size.
Note : This is an advanced setting
resultSize - resultSize Default value is 75public int getResultSize()
Applicable only with fetchMode: "paged". When a paged ResultSet is asked for rows that have not yet been loaded, it will fetch adjacent rows that are likely to be required soon, in batches of this size.
public void setFetchDelay(int fetchDelay)
When a get() or getRange() call asked for rows that haven't been loaded, the ResultSet will wait before actually triggering the request. If, during the delay, more get() or getRange() calls are made for missing rows, the final fetch to the server will reflect the most recently requested rows.
The intent of this delay is to avoid triggering many unnecessary fetches during drag-scrolling and similar user interactions.
Note : This is an advanced setting
fetchDelay - fetchDelay Default value is 0public int getFetchDelay()
When a get() or getRange() call asked for rows that haven't been loaded, the ResultSet will wait before actually triggering the request. If, during the delay, more get() or getRange() calls are made for missing rows, the final fetch to the server will reflect the most recently requested rows.
The intent of this delay is to avoid triggering many unnecessary fetches during drag-scrolling and similar user interactions.
public ResultSet setDataSource(DataSource dataSource) throws java.lang.IllegalStateException
DataSource is this resultSet associated with?dataSource - dataSource Default value is nullResultSet instance, for chaining setter callsjava.lang.IllegalStateException - this property cannot be changed after the underlying component has been createdpublic DataSource getDataSource()
DataSource is this resultSet associated with?public void setFetchOperation(java.lang.String fetchOperation)
fetchOperation - fetchOperation Default value is nulljava.lang.IllegalStateException - this property cannot be changed after the underlying component has been createdpublic java.lang.String getFetchOperation()
public void setCriteria(Criteria criteria)
Use setCriteria(com.smartgwt.client.data.Criteria) to change the criteria after initialization. Set the filter criteria to use when fetching rows.
Setting new criteria will invalidate the current cache, if any.
Note: any field values in the criteria explicitly specified as null will be passed to the server. By default the server then returns only records whose value is null for that field. This differs from certain higher level methods such as ListGrid.fetchData() which prune null criteria fields before performing a fetch operation.
criteria - the filter criteria. Default value is nullpublic Criteria getCriteria()
Use setCriteria(com.smartgwt.client.data.Criteria) to change the criteria after initialization.
public void setCriteriaPolicy(CriteriaPolicy criteriaPolicy)
Criteria changes. Note : This is an advanced setting
criteriaPolicy - criteriaPolicy Default value is nullpublic CriteriaPolicy getCriteriaPolicy()
Criteria changes.public void setUseClientSorting(java.lang.Boolean useClientSorting)
This may need to be disabled if client-side sort order differs from server-side sort order in a way that affects functionality or is surprising.
Note : This is an advanced setting
useClientSorting - useClientSorting Default value is truepublic java.lang.Boolean getUseClientSorting()
This may need to be disabled if client-side sort order differs from server-side sort order in a way that affects functionality or is surprising.
public void setUseClientFiltering(java.lang.Boolean useClientFiltering)
This may need to be disabled if client-side filtering differs from server-side filtering in a way that affects functionality or is surprising.
This setting is distinct from fetchMode:"local", which explicitly loads all available DataSource records up front.
See ResultSet#applyFilter for default filtering behavior.
NOTE: even with useClientFiltering false, client-side filtering will be used during cache sync to determine if an updated or added row matches the current criteria. To avoid relying on client-side filtering in this case, either:
- avoid returning update data when the updated row doesn't match the current filter
- set dropCacheOnUpdate
Note : This is an advanced setting
useClientFiltering - useClientFiltering Default value is truepublic java.lang.Boolean getUseClientFiltering()
This may need to be disabled if client-side filtering differs from server-side filtering in a way that affects functionality or is surprising.
This setting is distinct from fetchMode:"local", which explicitly loads all available DataSource records up front.
See ResultSet#applyFilter for default filtering behavior.
NOTE: even with useClientFiltering false, client-side filtering will be used during cache sync to determine if an updated or added row matches the current criteria. To avoid relying on client-side filtering in this case, either:
- avoid returning update data when the updated row doesn't match the current filter
- set dropCacheOnUpdate
public void setUpdateCacheFromRequest(java.lang.Boolean updateCacheFromRequest)
throws java.lang.IllegalStateException data is unset, should we integrate the submitted data values (from the request) into our data-set? This attribute will be passed to DataSource#getUpdatedData as the useDataFromRequest parameter. Note : This is an advanced setting
updateCacheFromRequest - updateCacheFromRequest Default value is truejava.lang.IllegalStateException - this property cannot be changed after the underlying component has been createdpublic java.lang.Boolean getUpdateCacheFromRequest()
data is unset, should we integrate the submitted data values (from the request) into our data-set? This attribute will be passed to DataSource#getUpdatedData as the useDataFromRequest parameter.public void setDropCacheOnUpdate(java.lang.Boolean dropCacheOnUpdate)
throws java.lang.IllegalStateException A ResultSet that has a complete cache for the current filter criteria can potentially incorporate a newly created or updated row based on the data that the server returns when a modification operation completes. However this is not always possible for ResultSets that show some types of joins, or when the server cannot easily return update data. In this case set dropCacheOnUpdate to cause the cache to be discarded when an update occurs.
dropCacheOnUpdate can be set either directly on a ResultSet, or on a DataSource in order to affect all ResultSets on that DataSource.
Note : This is an advanced setting
dropCacheOnUpdate - dropCacheOnUpdate Default value is falsejava.lang.IllegalStateException - this property cannot be changed after the underlying component has been createdpublic java.lang.Boolean getDropCacheOnUpdate()
A ResultSet that has a complete cache for the current filter criteria can potentially incorporate a newly created or updated row based on the data that the server returns when a modification operation completes. However this is not always possible for ResultSets that show some types of joins, or when the server cannot easily return update data. In this case set dropCacheOnUpdate to cause the cache to be discarded when an update occurs.
dropCacheOnUpdate can be set either directly on a ResultSet, or on a DataSource in order to affect all ResultSets on that DataSource.
public void setDisableCacheSync(java.lang.Boolean disableCacheSync)
throws java.lang.IllegalStateException Note : This is an advanced setting
disableCacheSync - disableCacheSync Default value is falsejava.lang.IllegalStateException - this property cannot be changed after the underlying component has been createdpublic java.lang.Boolean getDisableCacheSync()
public void setNeverDropUpdatedRows(java.lang.Boolean neverDropUpdatedRows)
throws java.lang.IllegalStateException setCriteria(com.smartgwt.client.data.Criteria) are applied to it, and it may disappear from the cache. Set this flag to true to disable this behavior.
Note : This is an advanced setting
neverDropUpdatedRows - neverDropUpdatedRows Default value is falsejava.lang.IllegalStateException - this property cannot be changed after the underlying component has been createdpublic java.lang.Boolean getNeverDropUpdatedRows()
setCriteria(com.smartgwt.client.data.Criteria) are applied to it, and it may disappear from the cache. Set this flag to true to disable this behavior.
public void setUpdatePartialCache(java.lang.Boolean updatePartialCache)
throws java.lang.IllegalStateException updatePartialCache is false, the cache will be invalidated and new data fetched. If updatePartialCache is enabled and an "add" or "update" operation succeeds with a partial cache:
Note : This is an advanced setting
updatePartialCache - updatePartialCache Default value is truejava.lang.IllegalStateException - this property cannot be changed after the underlying component has been createdpublic java.lang.Boolean getUpdatePartialCache()
updatePartialCache is false, the cache will be invalidated and new data fetched. If updatePartialCache is enabled and an "add" or "update" operation succeeds with a partial cache:
public void setAlwaysRequestVisibleRows(java.lang.Boolean alwaysRequestVisibleRows)
throws java.lang.IllegalStateException alwaysRequestVisibleRows - alwaysRequestVisibleRows Default value is falsejava.lang.IllegalStateException - this property cannot be changed after the underlying component has been createdpublic java.lang.Boolean getAlwaysRequestVisibleRows()
public boolean allMatchingRowsCached()
Returns false if this is a paged data set, and the entire set of records that match the current criteria has not been retrieved from the server.
public boolean allRowsCached()
Becomes true only when the ResultSet obtains a complete cache after a fetch with empty criteria.
public java.util.Map getValueMap(java.lang.String idField,
java.lang.String displayField) { item[idField] -> item[displayField] }, for all items in the list. If more than one item has the same idProperty, the value for the later item in the list will clobber the value for the earlier item. If this method is called when the allMatchingRowsCached(), it will trigger fetches, and will return a valueMap reflecting only the currently loaded rows.
getValueMap in class RecordListidField - Property to use as ID (data value) in the valueMapdisplayField - Property to use a display value in the valueMappublic int getLength()
This length can only be known, even approximately, when the first results are retrieved from the server. Before then, the ResultSet returns a large length in order to encourage viewers to ask for rows. lengthIsKnown() can be called to determine whether an actual length is known.
getLength in class RecordListpublic int indexOf(Record record)
If pos is specified, starts looking after that position.
Returns -1 if not found.
NOTE: ResultSet.indexOf() only inspects the current cache of records, so it is only appropriate for temporary presentation purposes. For example, it would not be appropriate to hold onto a record and attempt to use indexOf() to determine if it had been deleted.
indexOf in class RecordListrecord - object to look forpublic int indexOf(Record record, int pos, int endPos)
If pos is specified, starts looking after that position.
Returns -1 if not found.
NOTE: ResultSet.indexOf() only inspects the current cache of records, so it is only appropriate for temporary presentation purposes. For example, it would not be appropriate to hold onto a record and attempt to use indexOf() to determine if it had been deleted.
indexOf in class RecordListrecord - object to look forpos - earliest index to considerendPos - last index to considerpublic Record get(int pos)
All List access methods of the ResultSet have the semantics described in getRange().
get in class RecordListpos - position of the element to getpublic Record[] getRange(int start, int end)
Calling getRange for records that have not yet loaded will trigger an asynchronous fetch. The returned data will contain the loading marker as a placeholder for records being fetched. If any rows needed to be fetched, dataArrived() will fire when they arrive.
getRange in class RecordListstart - start positionend - end positionpublic RecordList getRangeAsRecordList(int start, int end)
start - start positionend - end positionpublic RecordList getAllVisibleRows()
loading markers for rows that are not yet loaded or in the process of loading, respectively. This method will not trigger a fetch to load more records. getAllVisibileRows() will return null if lengthIsKnown() is false.
Records are returned in a new List but the Records within it are the same instances that the ResultSet is holding onto. Hence it's safe to add or remove records from the List without affecting the ResultSet but modifying the Records themselves is a direct modification of the client-side cache.
public java.lang.Boolean usingFilteredData()
client filtering is enabled. Rows may have been loaded from the server when a more restrictive criteria is applied such that filtering could be performed on the client side. This method returns false if data is not loaded yet.
getAllCachedRows()public RecordList getAllCachedRows()
getAllVisibleRows() if the ResultSet is using client-side filtering to display a subset of loaded rows (see the ResultSet overview). If usingFilteredData() returns false, this is the same list as would be returned by getAllVisibleRows().
This method will not trigger a fetch to load more records. getAllCachedRows() will return null if lengthIsKnown() is false.
Records are returned in a new List but the Records within it are the same instances that the ResultSet is holding onto. Hence it's safe to add or remove records from the List without affecting the ResultSet but modifying the Records themselves is a direct modification of the client-side cache.
public java.lang.Boolean lengthIsKnown()
getLength() will be an arbitrary, large value if the actual length is not known.public java.lang.Boolean rowIsLoaded(int rowNum)
Unlike get(), will not trigger a server fetch.
rowNum - row to checkpublic java.lang.Boolean rangeIsLoaded(int startRow,
int endRow) startRow - start position, inclusiveendRow - end position, exclusivepublic Record findByKey(java.lang.String keyValue)
'dataSource'.keyValue - primary key value to search forpublic int compareCriteria(Criteria newCriteria, Criteria oldCriteria)
DataSource.compareCriteria(com.smartgwt.client.data.Criteria, com.smartgwt.client.data.Criteria) to determine whether new criteria is guaranteed more restrictive, equivalent to the old criteria, or not guaranteed more restrictive, returning 1, 0 or -1 respectively. Override this method or DataSource.compareCriteria(com.smartgwt.client.data.Criteria, com.smartgwt.client.data.Criteria) to implement your own client-side filtering behavior.
newCriteria - new filter criteriaoldCriteria - old filter criteriapublic int compareCriteria(Criteria newCriteria, Criteria oldCriteria, DSRequest requestProperties, java.lang.String policy)
DataSource.compareCriteria(com.smartgwt.client.data.Criteria, com.smartgwt.client.data.Criteria) to determine whether new criteria is guaranteed more restrictive, equivalent to the old criteria, or not guaranteed more restrictive, returning 1, 0 or -1 respectively. Override this method or DataSource.compareCriteria(com.smartgwt.client.data.Criteria, com.smartgwt.client.data.Criteria) to implement your own client-side filtering behavior.
newCriteria - new filter criteriaoldCriteria - old filter criteriarequestProperties - dataSource request propertiespolicy - overrides CriteriaPolicypublic java.lang.Boolean willFetchData(Criteria newCriteria)
textMatchStyle parameter determines whether a change of text-match style will require a server fetch - for example if filter is being changed between an exact match (from e.g: ListGrid.fetchData()) and a substring match (from e.g: ListGrid.filterData()).ListGrid.fetchData() or ListGrid.filterData() would cause a server side fetch when passed a certain set of criteria.newCriteria - new criteria to test.public java.lang.Boolean willFetchData(Criteria newCriteria, java.lang.String textMatchStyle)
textMatchStyle parameter determines whether a change of text-match style will require a server fetch - for example if filter is being changed between an exact match (from e.g: ListGrid.fetchData()) and a substring match (from e.g: ListGrid.filterData()).ListGrid.fetchData() or ListGrid.filterData() would cause a server side fetch when passed a certain set of criteria.newCriteria - new criteria to test.textMatchStyle - New text match style. If not passed assumes textMatchStyle will not be modified.public void filterLocalData()
This method is automatically called by setCriteria(com.smartgwt.client.data.Criteria) when criteria have actually changed, as well as in various other situations. You could only need to call this method directly if:
useClientFiltering:true) and active allMatchingRowsCached(). get(int)) public void invalidateCache()
Generally a ResultSet will observe and incorporate updates to the DataSource that provides it's records, but when this is not possible, invalidateCache() allows manual cache invalidation.
invalidateCache() fires dataChanged(), which may cause components which as using this ResultSet to request new data for display, triggering server fetches.
public void dataArrived(int startRow,
int endRow) addDataArrivedHandler(com.smartgwt.client.data.events.DataArrivedHandler) instead. When dataArrived() fires, an immediate call to getRange() with the startRow and endRow passed as arguments will return a List with no loading markers.
startRow - starting index of rows that have just loadedendRow - ending index of rows that have just loaded, non-inclusivepublic Record[] findAll(java.util.Map properties)
findAll in class RecordListproperties - set of properties and values to matchpublic Record[] findAll(java.lang.String propertyName, java.lang.String value)
findAll in class RecordListpropertyName - property to matchvalue - value to compare against (if propertyName is a string)public Record[] findAll(java.lang.String propertyName, int value)
findAll in class RecordListpropertyName - property to matchvalue - value to compare against (if propertyName is a string)public Record[] findAll(java.lang.String propertyName, java.lang.Long value)
Note: JavaScript has no long type, so the long value becomes a JavaScript Number, which has a lesser range than Java long. The range for integer numbers in Javascript is [-9007199254740992,9007199254740992] or [-Math.pow(2,53),Math.pow(2,53)].
findAll in class RecordListpropertyName - property to matchvalue - value to compare against (if propertyName is a string)public Record[] findAll(java.lang.String propertyName, float value)
findAll in class RecordListpropertyName - property to matchvalue - value to compare against (if propertyName is a string)public Record[] findAll(java.lang.String propertyName, boolean value)
findAll in class RecordListpropertyName - property to matchvalue - value to compare against (if propertyName is a string)public Record[] findAll(java.lang.String propertyName, java.util.Date value)
findAll in class RecordListpropertyName - property to matchvalue - value to compare against (if propertyName is a string)public Record[] findAll(AdvancedCriteria adCriteria)
findAll in class RecordListadCriteria - AdvancedCriteria to use to filter resultspublic Record find(java.util.Map properties)
properties - set of properties and values to matchpublic Record find(java.lang.String propertyName, java.lang.Object value)
RecordList.find(java.lang.String, java.lang.Object). Checks only loaded rows and will not trigger a fetch.find in class RecordListpropertyName - property to matchvalue - value to compare against (if propertyName is a string)public int findIndex(java.util.Map properties)
RecordList.findIndex(java.util.Map). Checks only loaded rows and will not trigger a fetch.findIndex in class RecordListproperties - set of properties and values to matchpublic int findIndex(java.lang.String propertyName,
java.lang.String value) RecordList.findIndex(java.util.Map). Checks only loaded rows and will not trigger a fetch.findIndex in class RecordListpropertyName - property to matchvalue - value to compare againstpublic int findIndex(java.lang.String propertyName,
int value) RecordList.findIndex(java.util.Map). Checks only loaded rows and will not trigger a fetch.findIndex in class RecordListpropertyName - property to matchvalue - value to compare againstpublic int findIndex(java.lang.String propertyName,
java.lang.Long value) RecordList.findIndex(java.util.Map). Checks only loaded rows and will not trigger a fetch. Note: JavaScript has no long type, so the long value becomes a JavaScript Number, which has a lesser range than Java long. The range for integer numbers in Javascript is [-9007199254740992,9007199254740992] or [-Math.pow(2,53),Math.pow(2,53)].
findIndex in class RecordListpropertyName - property to matchvalue - value to compare againstpublic int findIndex(java.lang.String propertyName,
float value) RecordList.findIndex(java.util.Map). Checks only loaded rows and will not trigger a fetch.findIndex in class RecordListpropertyName - property to matchvalue - value to compare againstpublic int findIndex(java.lang.String propertyName,
boolean value) RecordList.findIndex(java.util.Map). Checks only loaded rows and will not trigger a fetch.findIndex in class RecordListpropertyName - property to matchvalue - value to compare againstpublic int findIndex(java.lang.String propertyName,
java.util.Date value) RecordList.findIndex(java.util.Map). Checks only loaded rows and will not trigger a fetch.findIndex in class RecordListpropertyName - property to matchvalue - value to compare againstpublic int findNextIndex(int startIndex,
java.lang.String propertyName) RecordList.findNextIndex(int, java.lang.String). Checks only loaded rows and will not trigger a fetch.findNextIndex in class RecordListstartIndex - first index to considerpropertyName - property to matchpublic int findNextIndex(int startIndex,
java.util.Map properties) RecordList.findNextIndex(int, java.lang.String). Checks only loaded rows and will not trigger a fetch.findNextIndex in class RecordListstartIndex - first index to considerproperties - set of properties and values to matchpublic int findNextIndex(int startIndex,
java.lang.String propertyName,
java.lang.String value,
int endIndex) RecordList.findNextIndex(int, java.lang.String). Checks only loaded rows and will not trigger a fetch.findNextIndex in class RecordListstartIndex - first index to considerpropertyName - property to matchvalue - value to compare against (if propertyName is a string)endIndex - last index to considerpublic int findNextIndex(int startIndex,
java.lang.String propertyName,
int value,
int endIndex) RecordList.findNextIndex(int, java.lang.String). Checks only loaded rows and will not trigger a fetch.findNextIndex in class RecordListstartIndex - first index to considerpropertyName - property to matchvalue - value to compare against (if propertyName is a string)endIndex - last index to considerpublic int findNextIndex(int startIndex,
java.lang.String propertyName,
java.lang.Long value,
int endIndex) RecordList.findNextIndex(int, java.lang.String). Checks only loaded rows and will not trigger a fetch. Note: JavaScript has no long type, so the long value becomes a JavaScript Number, which has a lesser range than Java long. The range for integer numbers in Javascript is [-9007199254740992,9007199254740992] or [-Math.pow(2,53),Math.pow(2,53)].
findNextIndex in class RecordListstartIndex - first index to considerpropertyName - property to matchvalue - value to compare against (if propertyName is a string)endIndex - last index to considerpublic int findNextIndex(int startIndex,
java.lang.String propertyName,
float value,
int endIndex) RecordList.findNextIndex(int, java.lang.String). Checks only loaded rows and will not trigger a fetch.findNextIndex in class RecordListstartIndex - first index to considerpropertyName - property to matchvalue - value to compare against (if propertyName is a string)endIndex - last index to considerpublic int findNextIndex(int startIndex,
java.lang.String propertyName,
boolean value,
int endIndex) RecordList.findNextIndex(int, java.lang.String). Checks only loaded rows and will not trigger a fetch.findNextIndex in class RecordListstartIndex - first index to considerpropertyName - property to matchvalue - value to compare against (if propertyName is a string)endIndex - last index to considerpublic int findNextIndex(int startIndex,
java.lang.String propertyName,
java.util.Date value,
int endIndex) RecordList.findNextIndex(int, java.lang.String). Checks only loaded rows and will not trigger a fetch.findNextIndex in class RecordListstartIndex - first index to considerpropertyName - property to matchvalue - value to compare against (if propertyName is a string)endIndex - last index to considerpublic ResultSet setProgressiveLoading(java.lang.Boolean progressiveLoading)
progressive loading mode for this ResultSet. Any DSRequests issued by this ResultSet will copy this setting onto the request, overriding the OperationBinding- and DataSource-level settings. This setting is applied automatically by DataBoundComponents that have their own explicit setting for progressiveLoading
See also the rememberDynamicProgressiveLoading attribute.
progressiveLoading - New progressiveLoading value. Default value is nullResultSet instance, for chaining setter callsDataSource.setProgressiveLoading(java.lang.Boolean), OperationBinding.progressiveLoading, DSRequest.setProgressiveLoading(java.lang.Boolean), Progressive Loadingpublic java.lang.Boolean getProgressiveLoading()
progressive loading mode for this ResultSet. Any DSRequests issued by this ResultSet will copy this setting onto the request, overriding the OperationBinding- and DataSource-level settings. This setting is applied automatically by DataBoundComponents that have their own explicit setting for progressiveLoading
See also the rememberDynamicProgressiveLoading attribute.
DataSource.getProgressiveLoading(), OperationBinding.progressiveLoading, DSRequest.getProgressiveLoading(), Progressive Loadingpublic ResultSet setRememberDynamicProgressiveLoading(boolean rememberDynamicProgressiveLoading)
progressiveLoading is not explicitly set, but the ResultSet recieves a response from the server where DSResponse.progressiveLoading is set to true, should subsequent requests for other rows in the same data set explicitly request progressiveLoading via DSRequest.progressiveLoading, as long as the criteria are unchanged and the cache is not explicitly invalidated? This property is useful for the case where the server side DataSource.progressiveLoadingThreshold enabled progressive loading after the row-count query determined that the requested data set was very large. By explicitly requesting progressive loading for subsequent fetches the server is able to avoid an unnecessary and potentially expensive row-count query while returning other rows from the same data set.
rememberDynamicProgressiveLoading - New rememberDynamicProgressiveLoading value. Default value is trueResultSet instance, for chaining setter callsProgressive Loadingpublic boolean getRememberDynamicProgressiveLoading()
progressiveLoading is not explicitly set, but the ResultSet recieves a response from the server where DSResponse.progressiveLoading is set to true, should subsequent requests for other rows in the same data set explicitly request progressiveLoading via DSRequest.progressiveLoading, as long as the criteria are unchanged and the cache is not explicitly invalidated? This property is useful for the case where the server side DataSource.progressiveLoadingThreshold enabled progressive loading after the row-count query determined that the requested data set was very large. By explicitly requesting progressive loading for subsequent fetches the server is able to avoid an unnecessary and potentially expensive row-count query while returning other rows from the same data set.
Progressive Loadingpublic com.google.gwt.event.shared.HandlerRegistration addDataArrivedHandler(DataArrivedHandler handler)
Notification fired when data has arrived from the server and has been successfully integrated into the cache.
When dataArrived() fires, an immediate call to getRange() with the startRow and endRow passed as arguments will return a List with no loading markers.
addDataArrivedHandler in interface HasDataArrivedHandlershandler - the dataArrived handlerHandlerRegistration used to remove this handlerpublic static boolean isResultSet(com.google.gwt.core.client.JavaScriptObject data)
public static Record getLoadingMarker()