1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.contentapp;
35
36 import info.magnolia.ui.framework.ioc.Destructible;
37
38 import java.util.stream.Stream;
39
40 import com.vaadin.data.provider.DataProvider;
41 import com.vaadin.data.provider.DataProviderWrapper;
42 import com.vaadin.data.provider.Query;
43
44
45
46
47
48 public class FilterableListDataProvider<T> extends DataProviderWrapper<T, DataFilter, DataFilter> implements FilterableDataProvider<T>, Destructible {
49
50 private Runnable preFetchProcessor = () -> {};
51
52 public static <T> FilterableListDataProvider<T> wrap(DataProvider<T, DataFilter> src) {
53 return new FilterableListDataProvider<>(src);
54 }
55
56 private FilterableListDataProvider(DataProvider<T, DataFilter> dataProvider) {
57 super(dataProvider);
58 }
59
60 private DataFilter filter;
61
62 @Override
63 public void setDataFilter(DataFilter dataFilter) {
64 this.filter = dataFilter;
65 }
66
67 public void setPreFetchProcessor(Runnable preFetchProcessor) {
68 this.preFetchProcessor = preFetchProcessor;
69 }
70
71 @Override
72 public Stream<T> fetch(Query<T, DataFilter> query) {
73 preFetchProcessor.run();
74 return super.fetch(query)
75 .sorted(getComparator(query));
76 }
77
78 @Override
79 public DataFilter getFilter(Query<T, DataFilter> query) {
80 return filter;
81 }
82
83 @Override
84 public void destroy() {
85 if (dataProvider instanceof Destructible) {
86 ((Destructible) dataProvider).destroy();
87 }
88 }
89 }