]> source.dussan.org Git - vaadin-framework.git/commitdiff
Make getValueProvider return ValueProvider (#8983)
authorLeif Åstrand <legioth@gmail.com>
Fri, 31 Mar 2017 12:48:13 +0000 (15:48 +0300)
committerPekka Hyvönen <pekka@vaadin.com>
Fri, 31 Mar 2017 12:48:13 +0000 (15:48 +0300)
* Make getValueProvider return ValueProvider

The instance can only be a ValueProvider, but the getter previously
returned a less specific type. Making the getter return ValueProvider
makes it easier to reuse the provider in other contexts that require
ValueProvider, e.g. when adding filters to a ListDataProvider.

server/src/main/java/com/vaadin/ui/Grid.java
server/src/test/java/com/vaadin/tests/components/grid/GridValueProvider.java

index 872e14a44fcec73b15139b4fb6b778f66699f9d9..d90539c7780126a7e75245c691c5d157500c83e4 100644 (file)
@@ -69,7 +69,6 @@ import com.vaadin.server.EncodeResult;
 import com.vaadin.server.Extension;
 import com.vaadin.server.JsonCodec;
 import com.vaadin.server.SerializableComparator;
-import com.vaadin.server.SerializableFunction;
 import com.vaadin.server.SerializableSupplier;
 import com.vaadin.server.Setter;
 import com.vaadin.server.VaadinServiceClassLoaderUtil;
@@ -820,7 +819,7 @@ public class Grid<T> extends AbstractListing<T> implements HasComponents,
      */
     public static class Column<T, V> extends AbstractGridExtension<T> {
 
-        private final SerializableFunction<T, ? extends V> valueProvider;
+        private final ValueProvider<T, V> valueProvider;
 
         private SortOrderProvider sortOrderProvider = direction -> {
             String id = getId();
@@ -1126,7 +1125,7 @@ public class Grid<T> extends AbstractListing<T> implements HasComponents,
          *
          * @since 8.0.3
          */
-        public SerializableFunction<T, ? extends V> getValueProvider() {
+        public ValueProvider<T, V> getValueProvider() {
             return valueProvider;
         }
 
index 09108b6746e6605c3674f59c0d369cedf1988bc2..27ba971127770db9ab6e99b2216ffc243187cd0f 100644 (file)
  */
 package com.vaadin.tests.components.grid;
 
+import java.util.List;
+import java.util.Locale;
+import java.util.stream.Collectors;
+
 import org.junit.Assert;
 import org.junit.Test;
 
+import com.vaadin.data.provider.DataProvider;
+import com.vaadin.data.provider.ListDataProvider;
+import com.vaadin.data.provider.Query;
 import com.vaadin.tests.data.bean.Person;
 import com.vaadin.tests.data.bean.Sex;
 import com.vaadin.ui.Grid;
@@ -45,4 +52,26 @@ public class GridValueProvider {
         Assert.assertEquals("eeemaaail", col.getValueProvider().apply(person));
 
     }
+
+    @Test
+    public void reuseValueProviderForFilter() {
+        Grid<Person> grid = new Grid<>(Person.class);
+        Column<Person, String> col = (Column<Person, String>) grid
+                .getColumn("email");
+
+        Person lowerCasePerson = new Person("first", "last", "email", 123,
+                Sex.UNKNOWN, null);
+        Person upperCasePerson = new Person("FIRST", "LAST", "EMAIL", 123,
+                Sex.UNKNOWN, null);
+        ListDataProvider<Person> persons = DataProvider.ofItems(lowerCasePerson,
+                upperCasePerson);
+
+        persons.addFilter(col.getValueProvider(),
+                value -> value.toUpperCase(Locale.ENGLISH).equals(value));
+
+        List<Person> queryPersons = persons.fetch(new Query<>())
+                .collect(Collectors.toList());
+        Assert.assertEquals(1, queryPersons.size());
+        Assert.assertSame(upperCasePerson, queryPersons.get(0));
+    }
 }