diff --git a/flow-data/src/main/java/com/vaadin/flow/data/provider/AbstractDataView.java b/flow-data/src/main/java/com/vaadin/flow/data/provider/AbstractDataView.java index 8b5ff3f33a4..80f0293bab2 100644 --- a/flow-data/src/main/java/com/vaadin/flow/data/provider/AbstractDataView.java +++ b/flow-data/src/main/java/com/vaadin/flow/data/provider/AbstractDataView.java @@ -131,6 +131,11 @@ public void refreshItem(T item) { //@formatter:on } + @Override + public void refreshAll() { + dataProviderSupplier.get().refreshAll(); + } + @Override public void setIdentifierProvider( IdentifierProvider identifierProvider) { diff --git a/flow-data/src/main/java/com/vaadin/flow/data/provider/DataView.java b/flow-data/src/main/java/com/vaadin/flow/data/provider/DataView.java index 52d0c0e8280..757e1a3ce38 100644 --- a/flow-data/src/main/java/com/vaadin/flow/data/provider/DataView.java +++ b/flow-data/src/main/java/com/vaadin/flow/data/provider/DataView.java @@ -73,6 +73,11 @@ public interface DataView extends Serializable { */ void refreshItem(T item); + /** + * Notifies the component that all the items should be refreshed. + */ + void refreshAll(); + /** * Add an item count change listener that is fired when the item count * changes. This can happen for instance when filtering the items. diff --git a/flow-data/src/test/java/com/vaadin/flow/data/provider/AbstractDataViewTest.java b/flow-data/src/test/java/com/vaadin/flow/data/provider/AbstractDataViewTest.java index ef1fe790ffa..0f9e4fa2606 100644 --- a/flow-data/src/test/java/com/vaadin/flow/data/provider/AbstractDataViewTest.java +++ b/flow-data/src/test/java/com/vaadin/flow/data/provider/AbstractDataViewTest.java @@ -20,6 +20,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Stream; import com.vaadin.flow.component.Component; @@ -88,6 +89,19 @@ public void addItemCountChangeListener_fireEvent_listenerNotified() { Assert.assertEquals(10, fired.get()); } + @Test + public void refreshAll_listenersNotified() { + AtomicReference> refreshAllEvent = + new AtomicReference<>(); + dataProvider.addDataProviderListener(event -> { + Assert.assertNull(refreshAllEvent.get()); + refreshAllEvent.set(event); + }); + dataView.refreshAll(); + Assert.assertNotNull(refreshAllEvent.get()); + Assert.assertEquals(dataProvider, refreshAllEvent.get().getSource()); + } + /** * setIdentifierProvider is tested in AbstractListDataView since it * has the container(T item) method. diff --git a/flow-data/src/test/java/com/vaadin/flow/data/provider/hierarchy/HasHierarchicalDataProviderTest.java b/flow-data/src/test/java/com/vaadin/flow/data/provider/hierarchy/HasHierarchicalDataProviderTest.java index e9db3aa0767..9031223f294 100644 --- a/flow-data/src/test/java/com/vaadin/flow/data/provider/hierarchy/HasHierarchicalDataProviderTest.java +++ b/flow-data/src/test/java/com/vaadin/flow/data/provider/hierarchy/HasHierarchicalDataProviderTest.java @@ -120,6 +120,11 @@ public TestListDataView addItemBefore(String item, String before) { public void refreshItem(String item) { } + @Override + public void refreshAll() { + + } + @Override public TestListDataView addItems(Collection items) { return null;