T - data typeF - filter typepublic interface DataProvider<T,F> extends Serializable
DataProvider
interface is used by listing components implementing HasDataProvider
or HasFilterableDataProvider. The listing component will provide a
Query object with request information, and the data provider uses
this information to return a stream containing requested beans.
Vaadin comes with a ready-made solution for in-memory data, known as
ListDataProvider which can be created using static create
methods in this interface. For custom backends such as SQL, EntityManager,
REST APIs or SpringData, use a BackEndDataProvider or its subclass.
ofCollection(Collection),
ofItems(Object...),
fromStream(Stream),
#fromCallbacks(FetchCallback, CountCallback),
#fromFilteringCallbacks(FetchCallback, CountCallback),
ListDataProvider,
BackEndDataProvider| Modifier and Type | Method and Description |
|---|---|
Registration |
addDataProviderListener(DataProviderListener<T> listener)
Adds a data provider listener.
|
Stream<T> |
fetch(Query<T,F> query)
Fetches data from this DataProvider using given
query. |
static <T> CallbackDataProvider<T,Void> |
fromCallbacks(CallbackDataProvider.FetchCallback<T,Void> fetchCallback,
CallbackDataProvider.CountCallback<T,Void> countCallback)
Creates a new data provider that uses callbacks for fetching and counting
items from any backing store.
|
static <T,F> CallbackDataProvider<T,F> |
fromFilteringCallbacks(CallbackDataProvider.FetchCallback<T,F> fetchCallback,
CallbackDataProvider.CountCallback<T,F> countCallback)
Creates a new data provider that uses filtering callbacks for fetching
and counting items from any backing store.
|
static <T> ListDataProvider<T> |
fromStream(Stream<T> items)
Creates a new data provider from the given stream.
|
default Object |
getId(T item)
Gets an identifier for the given item.
|
boolean |
isInMemory()
Gets whether the DataProvider content all available in memory or does it
use some external backend.
|
static <T> ListDataProvider<T> |
ofCollection(Collection<T> items)
Creates a new data provider backed by a collection.
|
static <T> ListDataProvider<T> |
ofItems(T... items)
Creates a new data provider from the given items.
|
void |
refreshAll()
Refreshes all data based on currently available data in the underlying
provider.
|
void |
refreshItem(T item)
Refreshes the given item.
|
int |
size(Query<T,F> query)
Gets the amount of data in this DataProvider.
|
default ConfigurableFilterDataProvider<T,Void,F> |
withConfigurableFilter()
Wraps this data provider to create a data provider that supports
programmatically setting a filter but no filtering through the query.
|
default <Q,C> ConfigurableFilterDataProvider<T,Q,C> |
withConfigurableFilter(SerializableBiFunction<Q,C,F> filterCombiner)
Wraps this data provider to create a data provider that supports
programmatically setting a filter that will be combined with a filter
provided through the query.
|
default <C> DataProvider<T,C> |
withConvertedFilter(SerializableFunction<C,F> filterConverter)
Wraps this data provider to create a data provider that uses a different
filter type.
|
boolean isInMemory()
true if all data is in memory; false if notint size(Query<T,F> query)
query - query with sorting and filteringStream<T> fetch(Query<T,F> query)
query.query - given query to request datanullvoid refreshItem(T item)
DataProviderListeners that an item has been
updated or replaced with a new instance.
For this to work properly, the item must either implement
#equals(Object) and #hashCode() to consider both the old
and the new item instances to be equal, or alternatively
getId(Object) should be implemented to return an appropriate
identifier.
item - the item to refreshgetId(Object)void refreshAll()
default Object getId(T item)
Default is to use item itself as its own identifier. If the item has
Object.equals(Object) and Object.hashCode() implemented
in a way that it can be compared to other items, no changes are required.
Note: This method will be called often by the Framework. It should not do any expensive operations.
item - the item to get identifier for; not nullnullRegistration addDataProviderListener(DataProviderListener<T> listener)
The refreshAll() method fires DataChangeEvent each time
when it's called. It allows to update UI components when user changes
something in the underlying data.
listener - the data change listener, not nullrefreshAll()default <C> DataProvider<T,C> withConvertedFilter(SerializableFunction<C,F> filterConverter)
For example receiving a String from ComboBox and making a Predicate based on it:
DataProvider<Person, Predicate<Person>> dataProvider;
// ComboBox uses String as the filter type
DataProvider<Person, String> wrappedProvider = dataProvider
.withConvertedFilter(filterText -> {
SerializablePredicate<Person> predicate = person -> person
.getName().startsWith(filterText);
return predicate;
});
comboBox.setDataProvider(wrappedProvider);
C - the filter type that the wrapped data provider accepts;
typically provided by a ComponentfilterConverter - callback that converts the filter in the query of the wrapped
data provider into a filter supported by this data provider.
Will only be called if the query contains a filter. Not
nullnulldefault <Q,C> ConfigurableFilterDataProvider<T,Q,C> withConfigurableFilter(SerializableBiFunction<Q,C,F> filterCombiner)
filterCombiner - a callback for combining and the configured filter with the
filter from the query to get a filter to pass to the wrapped
provider. Either parameter might be null, but the
callback will not be invoked at all if both would be
null. Not null.nullwithConfigurableFilter(),
ConfigurableFilterDataProvider.setFilter(Object)default ConfigurableFilterDataProvider<T,Void,F> withConfigurableFilter()
nullwithConfigurableFilter(SerializableBiFunction),
ConfigurableFilterDataProvider.setFilter(Object)static <T> ListDataProvider<T> ofCollection(Collection<T> items)
The collection is used as-is. Changes in the collection will be visible via the created data provider. The caller should copy the collection if necessary.
T - the data item typeitems - the collection of data, not null@SafeVarargs static <T> ListDataProvider<T> ofItems(T... items)
The items are copied into a new backing list, so structural changes to the provided array will not be visible via the created data provider.
T - the data item typeitems - the data itemsstatic <T> ListDataProvider<T> fromStream(Stream<T> items)
This is a shorthand for using ofCollection(Collection) after
collecting the items in the stream to a list with e.g.
stream.collect(Collectors.toList));.
Using big streams is not recommended, you should instead use a
lazy data provider. See
#fromCallbacks(FetchCallback, CountCallback) or
BackEndDataProvider for more info.
T - the data item typeitems - a stream of data items, not nullstatic <T,F> CallbackDataProvider<T,F> fromFilteringCallbacks(CallbackDataProvider.FetchCallback<T,F> fetchCallback, CallbackDataProvider.CountCallback<T,F> countCallback)
The query that is passed to each callback may contain a filter value that is provided by the component querying for data.
fetchCallback - function that returns a stream of items from the back end for
a querycountCallback - function that returns the number of items in the back end for
a querystatic <T> CallbackDataProvider<T,Void> fromCallbacks(CallbackDataProvider.FetchCallback<T,Void> fetchCallback, CallbackDataProvider.CountCallback<T,Void> countCallback)
The query that is passed to each callback will not contain any filter values.
fetchCallback - function that returns a stream of items from the back end for
a querycountCallback - function that returns the number of items in the back end for
a queryCopyright © 2018 Vaadin Ltd. All rights reserved.