]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fix SimpleDataProvider clean up and client-side data tracking on edit
authorTeemu Suo-Anttila <teemusa@vaadin.com>
Wed, 3 Feb 2016 11:55:00 +0000 (13:55 +0200)
committerTeemu Suo-Anttila <teemusa@vaadin.com>
Wed, 3 Feb 2016 12:08:19 +0000 (14:08 +0200)
Change-Id: I9807717df9cbae47c6532e43a58dd6bb693eaa85

client/src/com/vaadin/client/connectors/data/typed/DataSourceConnector.java
server/src/com/vaadin/server/communication/data/typed/SimpleDataProvider.java
uitest/src/com/vaadin/tests/dataprovider/DummyDataProviderTest.java

index 2636a40a3ae5475ffa1e8a01c1cb90694c8e0e26..8f9527c8e0c3e471cc7eec0f5f51bb382b9c108f 100644 (file)
@@ -109,6 +109,7 @@ public class DataSourceConnector extends AbstractExtensionConnector {
                     if (keyToJson.containsKey(key)) {
                         int index = list.indexOf(keyToJson.get(key));
                         list.set(index, json);
+                        keyToJson.put(key, json);
                     } else {
                         dropKey(key);
                     }
index e5973ff6dd950cb38790a5ad053cc84dc577e224..ebf3734f51166d00da29dfc5d64c0a7fd2f4cf21 100644 (file)
@@ -89,20 +89,17 @@ public class SimpleDataProvider<T> extends DataProvider<T> {
         if (initial || reset) {
             getRpcProxy(DataProviderClientRpc.class).resetSize(data.size());
             pushData(0, data);
-            reset = false;
-            updatedData.clear();
-        }
-
-        if (updatedData.isEmpty()) {
-            return;
+        } else if (!updatedData.isEmpty()) {
+            JsonArray dataArray = Json.createArray();
+            int i = 0;
+            for (T data : updatedData) {
+                dataArray.set(i++, getDataObject(data));
+            }
+            rpc.updateData(dataArray);
         }
 
-        JsonArray dataArray = Json.createArray();
-        int i = 0;
-        for (T data : updatedData) {
-            dataArray.set(i++, getDataObject(data));
-        }
-        rpc.updateData(dataArray);
+        reset = false;
+        updatedData.clear();
     }
 
     @Override
index 2a92743215e8f4460587a1a591818e4a2c7b00cd..3821428ab22e23d4bbc20c18af7b6590e2eb2011 100644 (file)
@@ -181,5 +181,13 @@ public class DummyDataProviderTest extends SingleBrowserTest {
 
         text = findElements(By.className("v-label")).get(1).getText();
         assertEquals("Modified data did not match", json, text);
+
+        $(ButtonElement.class).id("edit").click();
+
+        text = findElements(By.className("v-label")).get(1).getText();
+        assertEquals("Running edit again shouldn't change anything", json, text);
+
+        assertNoErrorNotifications();
+
     }
 }