package com.vaadin.data.provider; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; import com.vaadin.server.SerializablePredicate; import com.vaadin.shared.data.sort.SortDirection; public class BackendDataProviderTest extends DataProviderTestBase>> { private static Map> propertyToComparatorMap = new HashMap<>(); static { propertyToComparatorMap.put("value", Comparator.comparing(StrBean::getValue)); propertyToComparatorMap.put("id", Comparator.comparing(StrBean::getId)); propertyToComparatorMap.put("randomNumber", Comparator.comparing(StrBean::getRandomNumber)); } private static Comparator getComparator(SortOrder so) { Comparator comparator = propertyToComparatorMap .get(so.getSorted()); if (so.getDirection() == SortDirection.DESCENDING) { comparator = comparator.reversed(); } return comparator; } public static class StrBeanBackEndDataProvider extends CallbackDataProvider> { public StrBeanBackEndDataProvider(List data) { super(query -> { Stream stream = data.stream().filter( t -> query.getFilter().orElse(s -> true).test(t)); if (!query.getSortOrders().isEmpty()) { Comparator sorting = query.getSortOrders().stream() .map(BackendDataProviderTest::getComparator) .reduce((c1, c2) -> c1.thenComparing(c2)).get(); stream = stream.sorted(sorting); } List list = stream.skip(query.getOffset()) .limit(query.getLimit()).collect(Collectors.toList()); list.forEach(s -> System.err.println(s.toString())); return list.stream(); }, query -> (int) data.stream() .filter(t -> query.getFilter().orElse(s -> true).test(t)) .count()); } } @Override protected BackEndDataProvider> createDataProvider() { return dataProvider = new StrBeanBackEndDataProvider(data); } @Override protected void setSortOrder(List sortOrder, Comparator comp) { getDataProvider().setSortOrders(sortOrder); } }