From 4b7b21d35cbf80ddfa6e16f62bc4ff65008a4cd5 Mon Sep 17 00:00:00 2001 From: Teemu Suo-Anttila Date: Tue, 2 Feb 2016 12:46:56 +0200 Subject: Add simple data update support to DataProvider This patch adds the option of updating an existing data object. Update is done on the next client response to catch any possible changes before and after the update is initiated. Change-Id: I30ca4803dd7c47befcb8e5ae761860c09cbdb8bd --- .../communication/data/typed/DataProvider.java | 26 ++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'server/src') diff --git a/server/src/com/vaadin/server/communication/data/typed/DataProvider.java b/server/src/com/vaadin/server/communication/data/typed/DataProvider.java index 9417d0a1f0..66489fe627 100644 --- a/server/src/com/vaadin/server/communication/data/typed/DataProvider.java +++ b/server/src/com/vaadin/server/communication/data/typed/DataProvider.java @@ -199,6 +199,7 @@ public class DataProvider extends AbstractExtension { private Collection> generators = new LinkedHashSet>(); private boolean reset = false; + private final Set updatedData = new HashSet(); private Collection data; private DataProviderClientRpc rpc; @@ -233,7 +234,19 @@ public class DataProvider extends AbstractExtension { getRpcProxy(DataProviderClientRpc.class).resetSize(data.size()); pushData(0, data); reset = false; + updatedData.clear(); } + + if (updatedData.isEmpty()) { + return; + } + + JsonArray dataArray = Json.createArray(); + int i = 0; + for (T data : updatedData) { + dataArray.set(i++, getDataObject(data)); + } + rpc.updateData(dataArray); } /** @@ -369,4 +382,17 @@ public class DataProvider extends AbstractExtension { markAsDirty(); } + /** + * Informs the DataProvider that a data object has been updated. + * + * @param data + * updated data object + */ + public void refresh(T data) { + if (updatedData.isEmpty()) { + markAsDirty(); + } + + updatedData.add(data); + } } -- cgit v1.2.3