summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorPekka Hyvönen <pekka@vaadin.com>2016-12-05 15:17:30 +0200
committerGitHub <noreply@github.com>2016-12-05 15:17:30 +0200
commit5b0919ce9e3f8899fb5b0c5331afd9ffa2a56c0c (patch)
tree383a7687d7b26c38dfeb36ab14548279bfa4a7b9 /server
parentd70cd4c2b616b3243aabcc3e12f3388d4453bbf2 (diff)
downloadvaadin-framework-5b0919ce9e3f8899fb5b0c5331afd9ffa2a56c0c.tar.gz
vaadin-framework-5b0919ce9e3f8899fb5b0c5331afd9ffa2a56c0c.zip
Add Listing.setItems(Stream) (#90)
* Add Listings.setItems(Stream) Fixes vaadin/framework8-issues#447 Change-Id: I4d557d346117d308b80a20effbf5359bebe1e8bb
Diffstat (limited to 'server')
-rw-r--r--server/src/main/java/com/vaadin/data/Listing.java27
-rw-r--r--server/src/main/java/com/vaadin/server/data/DataProvider.java24
2 files changed, 50 insertions, 1 deletions
diff --git a/server/src/main/java/com/vaadin/data/Listing.java b/server/src/main/java/com/vaadin/data/Listing.java
index 527c913912..0ecc13b3fb 100644
--- a/server/src/main/java/com/vaadin/data/Listing.java
+++ b/server/src/main/java/com/vaadin/data/Listing.java
@@ -17,7 +17,9 @@ package com.vaadin.data;
import java.io.Serializable;
import java.util.Collection;
+import java.util.stream.Stream;
+import com.vaadin.server.data.BackEndDataProvider;
import com.vaadin.server.data.DataProvider;
/**
@@ -51,7 +53,7 @@ public interface Listing<T, D extends DataProvider<T, ?>> extends Serializable {
void setDataProvider(D dataProvider);
/**
- * Sets the collection of data items of this listing.
+ * Sets the data items of this listing provided as a collection.
* <p>
* <strong>Note for component developers: </strong> If the component
* implementing this interface uses a custom data provider and/or filter
@@ -83,4 +85,27 @@ public interface Listing<T, D extends DataProvider<T, ?>> extends Serializable {
setDataProvider((D) DataProvider.create(items));
}
+ /**
+ * Sets the data items of this listing provided as a stream.
+ * <p>
+ * This is just a shorthand for {@link #setItems(Collection)}, by
+ * <b>collecting all the items in the stream to a list</b>.
+ * <p>
+ * <strong>Using big streams is not recommended, you should instead use a
+ * lazy data provider.</strong> See {@link BackEndDataProvider} for more
+ * info.
+ * <p>
+ * <strong>Note for component developers: </strong> If the component
+ * implementing this interface uses a custom data provider and/or filter
+ * types, this method should be overridden to provide the same functionality
+ * with the correct data provider type. This might require filter conversion
+ * or a completely custom implementation.
+ *
+ * @param streamOfItems
+ * the stream of data items to display, not {@code null}
+ */
+ default void setItems(Stream<T> streamOfItems) {
+ setDataProvider((D) DataProvider.create(streamOfItems));
+ }
+
}
diff --git a/server/src/main/java/com/vaadin/server/data/DataProvider.java b/server/src/main/java/com/vaadin/server/data/DataProvider.java
index ef71378b8f..ad6185b51a 100644
--- a/server/src/main/java/com/vaadin/server/data/DataProvider.java
+++ b/server/src/main/java/com/vaadin/server/data/DataProvider.java
@@ -19,6 +19,7 @@ import java.io.Serializable;
import java.util.Arrays;
import java.util.Collection;
import java.util.Objects;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.vaadin.server.SerializableFunction;
@@ -168,4 +169,27 @@ public interface DataProvider<T, F> extends Serializable {
public static <T> ListDataProvider<T> create(T... items) {
return new ListDataProvider<>(Arrays.asList(items));
}
+
+ /**
+ * This method creates a new {@link ListDataProvider} from the given stream.
+ * The ListDataProvider <b>collects all the items in the stream to a
+ * list</b>.
+ * <p>
+ * This is just a shorthand for using {@link #create(Collection)} after
+ * collecting the items in the stream to a list with e.g.
+ * {@code stream.collect(Collectors.toList));}.
+ * <p>
+ * <strong>Using big streams is not recommended, you should instead use a
+ * lazy data provider.</strong> See {@link BackEndDataProvider} for more
+ * info.
+ *
+ * @param <T>
+ * the data item type
+ * @param items
+ * a stream of data items, not {@code null}
+ * @return a new list data provider
+ */
+ public static <T> ListDataProvider<T> create(Stream<T> items) {
+ return new ListDataProvider<>(items.collect(Collectors.toList()));
+ }
}