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.filter.DataFilter;
37
38 import java.util.Optional;
39 import java.util.stream.Stream;
40
41 import com.vaadin.data.provider.ConfigurableFilterDataProvider;
42 import com.vaadin.data.provider.HierarchicalDataProvider;
43 import com.vaadin.data.provider.HierarchicalQuery;
44 import com.vaadin.data.provider.Query;
45
46
47
48
49
50 public class FilterableHierarchicalDataProvider<T> extends HierarchicalDataProviderWrapper<T, DataFilter> implements ConfigurableFilterDataProvider<T, DataFilter, DataFilter> {
51
52 public static <T> FilterableHierarchicalDataProvider<T> wrap(HierarchicalDataProvider<T, DataFilter> src) {
53 return new FilterableHierarchicalDataProvider<>(src);
54 }
55
56 private FilterableHierarchicalDataProvider(HierarchicalDataProvider<T, DataFilter> dataProvider) {
57 super(dataProvider);
58 }
59
60 private DataFilter filter;
61
62
63
64
65 @Deprecated
66 public void setDataFilter(DataFilter dataFilter) {
67 setFilter(dataFilter);
68 }
69
70 @Override
71 public void setFilter(DataFilter filter) {
72 this.filter = filter;
73 }
74
75 @Override
76 public Stream<T> fetch(Query<T, DataFilter> t) {
77 return dataProvider.fetch(new HierarchicalQuery<>(t.getOffset(), t.getLimit(),
78 t.getSortOrders(), t.getInMemorySorting(), getFilter(t), null));
79 }
80
81 @Override
82 public Stream<T> fetchChildren(HierarchicalQuery<T, DataFilter> query) {
83 return super.fetchChildren(query)
84 .sorted(Optional.ofNullable(query.getInMemorySorting()).orElse((o1, o2) -> 0));
85 }
86
87 @Override
88 public DataFilter getFilter(Query<T, DataFilter> query) {
89 return filter;
90 }
91
92 @Override
93 public boolean hasChildren(T item) {
94 return fetchChildren(new HierarchicalQuery<>(filter, item)).count() > 0;
95 }
96 }