diff options
6 files changed, 90 insertions, 15 deletions
diff --git a/server/src/main/java/com/vaadin/data/HasDataProvider.java b/server/src/main/java/com/vaadin/data/HasDataProvider.java index 0dc0fc1c2c..c853f5c092 100644 --- a/server/src/main/java/com/vaadin/data/HasDataProvider.java +++ b/server/src/main/java/com/vaadin/data/HasDataProvider.java @@ -37,13 +37,6 @@ import com.vaadin.data.provider.DataProvider; public interface HasDataProvider<T> extends HasItems<T> { /** - * Returns the source of data items used by this listing. - * - * @return the data provider, not null - */ - public DataProvider<T, ?> getDataProvider(); - - /** * Sets the data provider for this listing. The data provider is queried for * displayed items as needed. * diff --git a/server/src/main/java/com/vaadin/data/HasFilterableDataProvider.java b/server/src/main/java/com/vaadin/data/HasFilterableDataProvider.java index 4d2964b2e5..e84349c794 100644 --- a/server/src/main/java/com/vaadin/data/HasFilterableDataProvider.java +++ b/server/src/main/java/com/vaadin/data/HasFilterableDataProvider.java @@ -38,13 +38,6 @@ import com.vaadin.server.SerializableFunction; public interface HasFilterableDataProvider<T, F> extends HasItems<T> { /** - * Returns the source of data items used by this listing. - * - * @return the data provider, not <code>null</code> - */ - public DataProvider<T, ?> getDataProvider(); - - /** * Sets the data provider for this listing. The data provider is queried for * displayed items as needed. * diff --git a/server/src/main/java/com/vaadin/data/HasItems.java b/server/src/main/java/com/vaadin/data/HasItems.java index 16ae8a2d25..03e85be6fd 100644 --- a/server/src/main/java/com/vaadin/data/HasItems.java +++ b/server/src/main/java/com/vaadin/data/HasItems.java @@ -22,6 +22,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import com.vaadin.data.provider.BackEndDataProvider; +import com.vaadin.data.provider.DataProvider; +import com.vaadin.data.provider.ListDataProvider; import com.vaadin.ui.Component; /** @@ -33,9 +35,33 @@ import com.vaadin.ui.Component; * the type of the displayed item */ public interface HasItems<T> extends Component, Serializable { + + /** + * Returns the source of data items used by this listing. + * + * @return the data provider, not null + */ + public DataProvider<T, ?> getDataProvider(); + /** * Sets the data items of this component provided as a collection. * <p> + * The provided items are wrapped into a {@link ListDataProvider} and this + * instance is used as a data provider for the + * {@link #setDataProvider(DataProvider)} method. It means that the items + * collection can be accessed later on via + * {@link ListDataProvider#getItems()}: + * + * <pre> + * <code> + * HasDataProvider<String> listing = new CheckBoxGroup<>(); + * listing.setItems(Arrays.asList("a","b")); + * ... + * + * Collection<String> collection = ((ListDataProvider<String>)listing.getDataProvider()).getItems(); + * </code> + * </pre> + * <p> * The provided collection instance may be used as-is. Subsequent * modification of the collection might cause inconsistent data to be shown * in the component unless it is explicitly instructed to read the data @@ -49,7 +75,26 @@ public interface HasItems<T> extends Component, Serializable { /** * Sets the data items of this listing. - * + * <p> + * The provided items are wrapped into a {@link ListDataProvider} and this + * instance is used as a data provider for the + * {@link #setDataProvider(DataProvider)} method. It means that the items + * collection can be accessed later on via + * {@link ListDataProvider#getItems()}: + * + * <pre> + * <code> + * HasDataProvider<String> listing = new CheckBoxGroup<>(); + * listing.setItems(Arrays.asList("a","b")); + * ... + * + * Collection<String> collection = ((ListDataProvider<String>)listing.getDataProvider()).getItems(); + * </code> + * </pre> + * <p> + * + * @see #setItems(Collection) + * * @param items * the data items to display */ @@ -65,6 +110,25 @@ public interface HasItems<T> extends Component, Serializable { * instead of its array and Collection variations, doesn't save any memory. * If you have a large data set to bind, using a lazy data provider is * recommended. See {@link BackEndDataProvider} for more info. + * <p> + * The provided items are wrapped into a {@link ListDataProvider} and this + * instance is used as a data provider for the + * {@link #setDataProvider(DataProvider)} method. It means that the items + * collection can be accessed later on via + * {@link ListDataProvider#getItems()}: + * + * <pre> + * <code> + * HasDataProvider<String> listing = new CheckBoxGroup<>(); + * listing.setItems(Arrays.asList("a","b")); + * ... + * + * Collection<String> collection = ((ListDataProvider<String>)listing.getDataProvider()).getItems(); + * </code> + * </pre> + * <p> + * + * @see #setItems(Collection) * * @param streamOfItems * the stream of data items to display, not {@code null} diff --git a/server/src/main/java/com/vaadin/data/provider/ListDataProvider.java b/server/src/main/java/com/vaadin/data/provider/ListDataProvider.java index b452a16383..039366418a 100644 --- a/server/src/main/java/com/vaadin/data/provider/ListDataProvider.java +++ b/server/src/main/java/com/vaadin/data/provider/ListDataProvider.java @@ -72,6 +72,15 @@ public class ListDataProvider<T> sortOrder = null; } + /** + * Returns the underlying data items. + * + * @return the underlying data items + */ + public Collection<T> getItems() { + return backend; + } + @Override public Stream<T> fetch(Query<T, SerializablePredicate<T>> query) { Stream<T> stream = getFilteredStream(query); diff --git a/server/src/test/java/com/vaadin/ui/AbstractMultiSelectTest.java b/server/src/test/java/com/vaadin/ui/AbstractMultiSelectTest.java index 7c7be05aae..0dcef85579 100644 --- a/server/src/test/java/com/vaadin/ui/AbstractMultiSelectTest.java +++ b/server/src/test/java/com/vaadin/ui/AbstractMultiSelectTest.java @@ -39,6 +39,7 @@ import org.junit.runners.Parameterized.Parameters; import org.mockito.Mockito; import com.vaadin.data.HasValue.ValueChangeEvent; +import com.vaadin.data.provider.DataProvider; import com.vaadin.event.selection.MultiSelectionEvent; import com.vaadin.event.selection.MultiSelectionListener; import com.vaadin.server.ServerRpcManager; @@ -268,6 +269,11 @@ public class AbstractMultiSelectTest<S extends AbstractMultiSelect<String>> { throw new UnsupportedOperationException( "Not implemented for this test"); } + + @Override + public DataProvider<String, ?> getDataProvider() { + return null; + } }; Assert.assertSame(set, select.getValue()); @@ -337,6 +343,11 @@ public class AbstractMultiSelectTest<S extends AbstractMultiSelect<String>> { throw new UnsupportedOperationException( "Not implemented for this test"); } + + @Override + public DataProvider<String, ?> getDataProvider() { + return null; + } }; AtomicReference<ValueChangeEvent<?>> event = new AtomicReference<>(); diff --git a/server/src/test/java/com/vaadin/ui/AbstractSingleSelectTest.java b/server/src/test/java/com/vaadin/ui/AbstractSingleSelectTest.java index 6097ab3af7..5796f01cc5 100644 --- a/server/src/test/java/com/vaadin/ui/AbstractSingleSelectTest.java +++ b/server/src/test/java/com/vaadin/ui/AbstractSingleSelectTest.java @@ -272,6 +272,11 @@ public class AbstractSingleSelectTest { throw new UnsupportedOperationException( "Not needed in this test"); } + + @Override + public DataProvider<String, ?> getDataProvider() { + return null; + } }; AtomicReference<ValueChangeEvent<?>> event = new AtomicReference<>(); |