aboutsummaryrefslogtreecommitdiffstats
path: root/server/src
diff options
context:
space:
mode:
authorTeemu Suo-Anttila <teemusa@vaadin.com>2016-02-02 12:46:56 +0200
committerTeemu Suo-Anttila <teemusa@vaadin.com>2016-02-03 12:23:25 +0200
commit4b7b21d35cbf80ddfa6e16f62bc4ff65008a4cd5 (patch)
tree8a16cd09fd01eeb8e2f9be2ff63af66c7eeca302 /server/src
parente25dd72efe36de7e59780cda0de472c1183be028 (diff)
downloadvaadin-framework-4b7b21d35cbf80ddfa6e16f62bc4ff65008a4cd5.tar.gz
vaadin-framework-4b7b21d35cbf80ddfa6e16f62bc4ff65008a4cd5.zip
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
Diffstat (limited to 'server/src')
-rw-r--r--server/src/com/vaadin/server/communication/data/typed/DataProvider.java26
1 files changed, 26 insertions, 0 deletions
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<T> extends AbstractExtension {
private Collection<TypedDataGenerator<T>> generators = new LinkedHashSet<TypedDataGenerator<T>>();
private boolean reset = false;
+ private final Set<T> updatedData = new HashSet<T>();
private Collection<T> data;
private DataProviderClientRpc rpc;
@@ -233,7 +234,19 @@ public class DataProvider<T> 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<T> 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);
+ }
}