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.DataProviderWrapper;
41 import com.vaadin.data.provider.HierarchicalDataProvider;
42 import com.vaadin.data.provider.HierarchicalQuery;
43
44
45
46
47
48
49
50
51
52
53
54 public abstract class HierarchicalDataProviderWrapper<T, F> extends DataProviderWrapper<T, F, F> implements HierarchicalDataProvider<T, F>, Destructible {
55
56 private Runnable preFetchProcessor = () -> {};
57
58 protected HierarchicalDataProviderWrapper(HierarchicalDataProvider<T, F> dataProvider) {
59 super(dataProvider);
60 }
61
62 protected HierarchicalDataProvider<T, F> dataProvider() {
63 return (HierarchicalDataProvider<T, F>) dataProvider;
64 }
65
66 public void setPreFetchProcessor(Runnable preFetchProcessor) {
67 this.preFetchProcessor = preFetchProcessor;
68 }
69
70 @Override
71 public int getChildCount(HierarchicalQuery<T, F> query) {
72 return dataProvider().getChildCount(new HierarchicalQuery<>(
73 query.getOffset(),
74 query.getLimit(),
75 query.getSortOrders(),
76 query.getInMemorySorting(),
77 getFilter(query),
78 query.getParent()));
79 }
80
81 @Override
82 public Stream<T> fetchChildren(HierarchicalQuery<T, F> query) {
83 preFetchProcessor.run();
84 return dataProvider().fetchChildren(new HierarchicalQuery<>(
85 query.getOffset(),
86 query.getLimit(),
87 query.getSortOrders(),
88 query.getInMemorySorting(),
89 getFilter(query),
90 query.getParent()));
91 }
92
93 @Override
94 public boolean hasChildren(T item) {
95 return dataProvider().hasChildren(item);
96 }
97
98
99
100 @Override
101 public void destroy() {
102 if (dataProvider instanceof Destructible) {
103 ((Destructible) dataProvider).destroy();
104 }
105 }
106 }