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 info.magnolia.context.Context;
37 import info.magnolia.objectfactory.ComponentProvider;
38 import info.magnolia.ui.api.message.Message;
39 import info.magnolia.ui.contentapp.FilterableListDataProvider;
40 import info.magnolia.ui.contentapp.browser.ActionExecutionService;
41 import info.magnolia.ui.contentapp.browser.ItemInteractionAvailability;
42 import info.magnolia.ui.contentapp.browser.ListPresenter;
43 import info.magnolia.ui.contentapp.configuration.GridViewDefinition;
44 import info.magnolia.ui.framework.message.MessagesManager;
45
46 import javax.inject.Inject;
47
48 import com.vaadin.data.BeanPropertySet;
49 import com.vaadin.data.PropertySet;
50
51
52
53
54 public class NotificationListPresenter extends ListPresenter<Message> {
55
56 private final NotificationDataSourceDefinition dataSourceDefinition;
57 private final MessagesManager.MessageListener messageListener;
58 private final MessagesManager messagesManager;
59 private final String userName;
60 private final ItemInteractionAvailability<Message> itemInteractionAvailability;
61
62 @Inject
63 public NotificationListPresenter(
64 Context context,
65 GridViewDefinition<Message> viewDefinition,
66 ComponentProvider componentProvider,
67 ActionExecutionService actionExecutionService,
68 NotificationDataSourceDefinition dataSourceDefinition,
69 MessagesManager messagesManager) {
70 super(viewDefinition, componentProvider, actionExecutionService);
71 this.dataSourceDefinition = dataSourceDefinition;
72 this.messagesManager = messagesManager;
73 this.userName = context.getUser().getName();
74 this.itemInteractionAvailability = new NotificationInteractionAvailability(messagesManager, dataSourceDefinition.getRelevantMessageTypes());
75
76 this.messageListener = new MessagesManager.MessageListener() {
77 @Override
78 public void messageSent(Message message) {
79 grid().getDataProvider().refreshAll();
80 }
81
82 @Override
83 public void messageCleared(Message message) {
84 grid().getDataProvider().refreshAll();
85 }
86
87 @Override
88 public void messageRemoved(String id) {
89 grid().getDataProvider().refreshAll();
90 }
91 };
92 this.messagesManager.registerMessagesListener(userName, messageListener);
93 }
94
95 @Override
96 protected FilterableListDataProvider<Message> createDataProvider() {
97 return FilterableListDataProvider.wrap(new NotificationDataProvider(messagesManager, dataSourceDefinition));
98 }
99
100 @Override
101 protected PropertySet<Message> createPropertySet() {
102 return BeanPropertySet.get(Message.class);
103 }
104
105 @Override
106 public boolean isItemAvailable(Message item) {
107 return itemInteractionAvailability.isItemAvailable(item);
108 }
109
110 @Override
111 public void destroy() {
112 this.messagesManager.unregisterMessagesListener(this.userName, this.messageListener);
113 }
114 }