summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeemu Suo-Anttila <teemusa@vaadin.com>2016-11-25 16:05:29 +0200
committerTeemu Suo-Anttila <teemusa@vaadin.com>2016-11-28 15:05:36 +0200
commitb89b7f2d05dd66ce588311720a9ec6121a39d83c (patch)
tree6c1823dbae50a04bb1ad13f00e22523bdecd27f7
parent411b8dedb02be7ed1a9332fc1f965e583bd313cc (diff)
downloadvaadin-framework-b89b7f2d05dd66ce588311720a9ec6121a39d83c.tar.gz
vaadin-framework-b89b7f2d05dd66ce588311720a9ec6121a39d83c.zip
Add filter type to DataCommunicator
Change-Id: Id7948e2f81b6a9c593ce8b71bb3a61b578344af9
-rw-r--r--server/src/main/java/com/vaadin/server/data/DataCommunicator.java41
-rw-r--r--server/src/main/java/com/vaadin/ui/AbstractListing.java10
-rw-r--r--server/src/main/java/com/vaadin/ui/AbstractSingleSelect.java2
-rw-r--r--server/src/main/java/com/vaadin/ui/ComboBox.java18
-rw-r--r--server/src/test/java/com/vaadin/server/data/DataCommunicatorTest.java7
5 files changed, 39 insertions, 39 deletions
diff --git a/server/src/main/java/com/vaadin/server/data/DataCommunicator.java b/server/src/main/java/com/vaadin/server/data/DataCommunicator.java
index 88624cee22..2628c79058 100644
--- a/server/src/main/java/com/vaadin/server/data/DataCommunicator.java
+++ b/server/src/main/java/com/vaadin/server/data/DataCommunicator.java
@@ -24,13 +24,11 @@ import java.util.LinkedHashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
-import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.vaadin.server.AbstractExtension;
import com.vaadin.server.KeyMapper;
-import com.vaadin.server.SerializablePredicate;
import com.vaadin.shared.Range;
import com.vaadin.shared.Registration;
import com.vaadin.shared.data.DataCommunicatorClientRpc;
@@ -49,10 +47,12 @@ import elemental.json.JsonObject;
*
* @param <T>
* the bean type
+ * @param <F>
+ * the filter type
*
* @since 8.0
*/
-public class DataCommunicator<T> extends AbstractExtension {
+public class DataCommunicator<T, F> extends AbstractExtension {
private Registration dataProviderUpdateRegistration;
@@ -183,7 +183,7 @@ public class DataCommunicator<T> extends AbstractExtension {
private final ActiveDataHandler handler = new ActiveDataHandler();
/** Empty default data provider */
- private DataProvider<T, ?> dataProvider = new BackEndDataProvider<>(
+ private DataProvider<T, F> dataProvider = new BackEndDataProvider<>(
q -> Stream.of(), q -> 0);
private final DataKeyMapper<T> keyMapper;
@@ -192,8 +192,8 @@ public class DataCommunicator<T> extends AbstractExtension {
private int minPushSize = 40;
private Range pushRows = Range.withLength(0, minPushSize);
+ private F filter;
private Comparator<T> inMemorySorting;
- private SerializablePredicate<T> inMemoryFilter;
private final List<SortOrder<String>> backEndSorting = new ArrayList<>();
private final DataCommunicatorClientRpc rpc;
@@ -229,14 +229,7 @@ public class DataCommunicator<T> extends AbstractExtension {
}
if (initial || reset) {
- int dataProviderSize;
- if (getDataProvider().isInMemory() && inMemoryFilter != null) {
- dataProviderSize = (int) getDataProvider().fetch(new Query<>())
- .filter(inMemoryFilter).count();
- } else {
- // TODO: Apply filter
- dataProviderSize = getDataProvider().size(new Query<>());
- }
+ int dataProviderSize = getDataProvider().size(new Query<>(filter));
rpc.reset(dataProviderSize);
}
@@ -247,18 +240,16 @@ public class DataCommunicator<T> extends AbstractExtension {
Stream<T> rowsToPush;
if (getDataProvider().isInMemory()) {
+ // TODO: Move in-memory sorting to Query.
// We can safely request all the data when in memory
- rowsToPush = getDataProvider().fetch(new Query<>());
- if (inMemoryFilter != null) {
- rowsToPush = rowsToPush.filter(inMemoryFilter);
- }
+ rowsToPush = getDataProvider().fetch(new Query<>(filter));
if (inMemorySorting != null) {
rowsToPush = rowsToPush.sorted(inMemorySorting);
}
rowsToPush = rowsToPush.skip(offset).limit(limit);
} else {
rowsToPush = getDataProvider().fetch(
- new Query<>(offset, limit, backEndSorting, null));
+ new Query<>(offset, limit, backEndSorting, filter));
}
pushData(offset, rowsToPush);
}
@@ -405,13 +396,13 @@ public class DataCommunicator<T> extends AbstractExtension {
}
/**
- * Sets the {@link Predicate} to use with in-memory filtering.
+ * Sets the filter to use.
*
- * @param predicate
- * predicate used to filter data
+ * @param filter
+ * the filter
*/
- public void setInMemoryFilter(SerializablePredicate<T> predicate) {
- inMemoryFilter = predicate;
+ public void setFilter(F filter) {
+ this.filter = filter;
reset();
}
@@ -465,7 +456,7 @@ public class DataCommunicator<T> extends AbstractExtension {
*
* @return the data provider
*/
- public DataProvider<T, ?> getDataProvider() {
+ public DataProvider<T, F> getDataProvider() {
return dataProvider;
}
@@ -475,7 +466,7 @@ public class DataCommunicator<T> extends AbstractExtension {
* @param dataProvider
* the data provider to set, not null
*/
- public void setDataProvider(DataProvider<T, ?> dataProvider) {
+ public void setDataProvider(DataProvider<T, F> dataProvider) {
Objects.requireNonNull(dataProvider, "data provider cannot be null");
this.dataProvider = dataProvider;
detachDataProviderListener();
diff --git a/server/src/main/java/com/vaadin/ui/AbstractListing.java b/server/src/main/java/com/vaadin/ui/AbstractListing.java
index 8578b18673..2f455fa27b 100644
--- a/server/src/main/java/com/vaadin/ui/AbstractListing.java
+++ b/server/src/main/java/com/vaadin/ui/AbstractListing.java
@@ -119,7 +119,7 @@ public abstract class AbstractListing<T> extends AbstractComponent {
}
}
- private final DataCommunicator<T> dataCommunicator;
+ private final DataCommunicator<T, ?> dataCommunicator;
/**
* Creates a new {@code AbstractListing} with a default data communicator.
@@ -147,7 +147,7 @@ public abstract class AbstractListing<T> extends AbstractComponent {
* @param dataCommunicator
* the data communicator to use, not null
*/
- protected AbstractListing(DataCommunicator<T> dataCommunicator) {
+ protected AbstractListing(DataCommunicator<T, ?> dataCommunicator) {
Objects.requireNonNull(dataCommunicator,
"dataCommunicator cannot be null");
@@ -155,8 +155,10 @@ public abstract class AbstractListing<T> extends AbstractComponent {
addExtension(dataCommunicator);
}
+ @SuppressWarnings({ "rawtypes", "unchecked" })
protected void internalSetDataProvider(DataProvider<T, ?> dataProvider) {
- getDataCommunicator().setDataProvider(dataProvider);
+ // cast needed by compiler
+ getDataCommunicator().setDataProvider((DataProvider) dataProvider);
}
protected DataProvider<T, ?> internalGetDataProvider() {
@@ -248,7 +250,7 @@ public abstract class AbstractListing<T> extends AbstractComponent {
*
* @return the data communicator, not null
*/
- public DataCommunicator<T> getDataCommunicator() {
+ public DataCommunicator<T, ?> getDataCommunicator() {
return dataCommunicator;
}
diff --git a/server/src/main/java/com/vaadin/ui/AbstractSingleSelect.java b/server/src/main/java/com/vaadin/ui/AbstractSingleSelect.java
index 0f2d6c81bc..6510b5305a 100644
--- a/server/src/main/java/com/vaadin/ui/AbstractSingleSelect.java
+++ b/server/src/main/java/com/vaadin/ui/AbstractSingleSelect.java
@@ -88,7 +88,7 @@ public abstract class AbstractSingleSelect<T> extends AbstractListing<T>
* @param dataCommunicator
* the data communicator to use, not null
*/
- protected AbstractSingleSelect(DataCommunicator<T> dataCommunicator) {
+ protected AbstractSingleSelect(DataCommunicator<T, ?> dataCommunicator) {
super(dataCommunicator);
init();
}
diff --git a/server/src/main/java/com/vaadin/ui/ComboBox.java b/server/src/main/java/com/vaadin/ui/ComboBox.java
index b9630766cb..f0f90eab22 100644
--- a/server/src/main/java/com/vaadin/ui/ComboBox.java
+++ b/server/src/main/java/com/vaadin/ui/ComboBox.java
@@ -132,15 +132,11 @@ public class ComboBox<T> extends AbstractSingleSelect<T>
@Override
public void setFilter(String filterText) {
filterstring = filterText;
- if (filterText != null) {
- getDataCommunicator().setInMemoryFilter(
- item -> filter.apply(filterstring, item));
- } else {
- getDataCommunicator().setInMemoryFilter(null);
- }
+ getDataCommunicator().setFilter(filterText);
}
};
+ // TODO: Check if this can be removed.
private String filterstring;
/**
@@ -166,7 +162,7 @@ public class ComboBox<T> extends AbstractSingleSelect<T>
* {@link #setItems(Collection)}
*/
public ComboBox() {
- super(new DataCommunicator<T>() {
+ super(new DataCommunicator<T, String>() {
@Override
protected DataKeyMapper<T> createKeyMapper() {
return new KeyMapper<T>() {
@@ -611,6 +607,7 @@ public class ComboBox<T> extends AbstractSingleSelect<T>
}
@Override
+ @SuppressWarnings("unchecked")
public DataProvider<T, String> getDataProvider() {
return (DataProvider<T, String>) internalGetDataProvider();
}
@@ -620,4 +617,11 @@ public class ComboBox<T> extends AbstractSingleSelect<T>
internalSetDataProvider(dataProvider);
}
+ @Override
+ @SuppressWarnings("unchecked")
+ public DataCommunicator<T, String> getDataCommunicator() {
+ // Not actually an unsafe cast. DataCommunicator is final and set by
+ // ComboBox.
+ return (DataCommunicator<T, String>) super.getDataCommunicator();
+ }
}
diff --git a/server/src/test/java/com/vaadin/server/data/DataCommunicatorTest.java b/server/src/test/java/com/vaadin/server/data/DataCommunicatorTest.java
index 4c40c1a654..36238a2bdc 100644
--- a/server/src/test/java/com/vaadin/server/data/DataCommunicatorTest.java
+++ b/server/src/test/java/com/vaadin/server/data/DataCommunicatorTest.java
@@ -22,6 +22,7 @@ import org.junit.Test;
import org.mockito.Mockito;
import com.vaadin.server.MockVaadinSession;
+import com.vaadin.server.SerializablePredicate;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinService;
import com.vaadin.server.VaadinSession;
@@ -62,7 +63,8 @@ public class DataCommunicatorTest {
}
@Override
- public Registration addDataProviderListener(DataProviderListener listener) {
+ public Registration addDataProviderListener(
+ DataProviderListener listener) {
registration = super.addDataProviderListener(listener);
return this;
}
@@ -79,7 +81,8 @@ public class DataCommunicatorTest {
}
- private static class TestDataCommunicator extends DataCommunicator<Object> {
+ private static class TestDataCommunicator
+ extends DataCommunicator<Object, SerializablePredicate<Object>> {
protected void extend(UI ui) {
super.extend(ui);
}