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.admincentral.apps.notifications;
35
36 import static java.util.stream.Collectors.toMap;
37
38 import info.magnolia.context.MgnlContext;
39 import info.magnolia.ui.api.message.Message;
40 import info.magnolia.ui.contentapp.DataFilter;
41 import info.magnolia.ui.framework.message.MessagesManager;
42
43 import java.util.Map;
44 import java.util.stream.Stream;
45
46 import javax.inject.Inject;
47
48 import org.apache.commons.lang3.StringUtils;
49
50 import com.vaadin.data.provider.AbstractDataProvider;
51 import com.vaadin.data.provider.Query;
52 import com.vaadin.data.provider.QuerySortOrder;
53 import com.vaadin.shared.data.sort.SortDirection;
54
55
56
57
58 public class NotificationDataProvider extends AbstractDataProvider<Message, DataFilter> {
59
60 private final MessagesManager messagesManager;
61 private NotificationDataSourceDefinition definition;
62
63 @Inject
64 public NotificationDataProvider(MessagesManager messagesManager, NotificationDataSourceDefinition definition) {
65 this.messagesManager = messagesManager;
66 this.definition = definition;
67 }
68
69 @Override
70 public boolean isInMemory() {
71 return true;
72 }
73
74 @Override
75 public int size(Query<Message, DataFilter> query) {
76 Long size = messagesManager.getMessagesAmount(MgnlContext.getUser().getName(), this.definition.getRelevantMessageTypes());
77 return size.intValue();
78 }
79
80 @Override
81 public Stream<Message> fetch(Query<Message, DataFilter> query) {
82
83 final Map<String, Boolean> sortCriteria = query.getSortOrders().stream()
84 .collect(toMap(
85 QuerySortOrder::getSorted,
86 so -> so.getDirection() == SortDirection.ASCENDING,
87 (a, b) -> b));
88
89
90 if (sortCriteria.isEmpty()) {
91 sortCriteria.put("timestamp", true);
92 }
93 int limit = query.getLimit();
94 int offset = query.getOffset();
95
96 if (query.getFilter().isPresent() && query.getFilter().get().getPropertyFilters().containsKey("id")) {
97 String id = query.getFilter().get().getPropertyFilters().get("id").toString();
98 if (StringUtils.isNotEmpty(id)) {
99 return Stream.of(messagesManager.getMessageById(MgnlContext.getUser().getName(), id));
100 }
101 }
102
103 return messagesManager.getMessageBatch(MgnlContext.getUser().getName(), this.definition.getRelevantMessageTypes(), sortCriteria, limit, offset).stream();
104 }
105 }
106