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.admincentral.shellapp.pulse.message;
35
36 import info.magnolia.context.Context;
37 import info.magnolia.event.EventBus;
38 import info.magnolia.objectfactory.ComponentProvider;
39 import info.magnolia.ui.admincentral.shellapp.pulse.item.detail.PulseItemCategory;
40 import info.magnolia.ui.admincentral.shellapp.pulse.item.list.AbstractPulseListPresenter;
41 import info.magnolia.ui.admincentral.shellapp.pulse.item.list.PulseListPresenter;
42 import info.magnolia.ui.api.event.AdmincentralEventBus;
43 import info.magnolia.ui.api.message.Message;
44 import info.magnolia.ui.api.message.MessageType;
45 import info.magnolia.ui.api.view.View;
46 import info.magnolia.ui.framework.message.MessageEvent;
47 import info.magnolia.ui.framework.message.MessageEventHandler;
48 import info.magnolia.ui.framework.message.MessagesManager;
49
50 import java.util.Set;
51
52 import javax.inject.Inject;
53 import javax.inject.Named;
54
55
56
57
58 public final class MessagesListPresenter extends AbstractPulseListPresenter<Message, MessagesListPresenter.Listener> implements MessagesListView.Listener, MessageEventHandler {
59
60 private final EventBus admincentralEventBus;
61 private final MessagesListView view;
62 private final MessagesManager messagesManager;
63 private final ComponentProvider componentProvider;
64 private final String userId;
65
66 @Inject
67 public MessagesListPresenter(final MessagesContainer container, @Named(AdmincentralEventBus.NAME) final EventBus admincentralEventBus,
68 final MessagesListView view, final MessagesManager messagesManager, ComponentProvider componentProvider, Context context) {
69 super(container);
70 this.admincentralEventBus = admincentralEventBus;
71 this.view = view;
72 this.messagesManager = messagesManager;
73 this.componentProvider = componentProvider;
74 this.userId = context.getUser().getName();
75 }
76
77 @Override
78 public View start() {
79 view.setListener(this);
80 initView();
81 admincentralEventBus.addHandler(MessageEvent.class, this);
82 return view;
83 }
84
85 @Override
86 public View openItem(String messageId) {
87 Message message = messagesManager.getMessageById(userId, messageId);
88
89 MessageDetailPresenter messagePresenter = componentProvider.newInstance(MessageDetailPresenter.class, message);
90 messagePresenter.setListener(this);
91
92 return messagePresenter.start();
93 }
94
95 private void initView() {
96 view.setDataSource(container.getVaadinContainer());
97 for (MessageType type : MessageType.values()) {
98 doUnreadMessagesUpdate(type);
99 }
100 }
101
102 @Override
103 public void messageSent(MessageEvent event) {
104 final Message message = event.getMessage();
105 container.refresh();
106
107 final MessageType type = message.getType();
108 doUnreadMessagesUpdate(type);
109 }
110
111 @Override
112 public void messageCleared(MessageEvent event) {
113 final Message message = event.getMessage();
114 final MessageType type = message.getType();
115 doUnreadMessagesUpdate(type);
116 container.refresh();
117 }
118
119 @Override
120 public void deleteItems(final Set<String> messageIds) {
121 if (messageIds == null || messageIds.isEmpty()) {
122 return;
123 }
124 for (String messageId : messageIds) {
125 Message message = messagesManager.getMessageById(userId, messageId);
126 if (message == null) {
127 continue;
128 }
129 messagesManager.removeMessage(userId, messageId);
130 }
131 }
132
133 @Override
134 public long getTotalEntriesAmount() {
135 return container.size();
136 }
137
138 @Override
139 public void onItemClicked(String messageId) {
140 listener.openMessage(messageId);
141 messagesManager.clearMessage(userId, messageId);
142 }
143
144 @Override
145 public void updateDetailView(String itemId) {
146 listener.openMessage(itemId);
147 }
148
149 @Override
150 public void messageRemoved(MessageEvent messageEvent) {
151 container.refresh();
152 for (MessageType type : MessageType.values()) {
153 doUnreadMessagesUpdate(type);
154 }
155 }
156
157 private void doUnreadMessagesUpdate(final MessageType type) {
158 int count;
159 switch (type) {
160 case ERROR:
161 case WARNING:
162 count = messagesManager.getNumberOfUnclearedMessagesForUserAndByType(userId, MessageType.ERROR);
163 count += messagesManager.getNumberOfUnclearedMessagesForUserAndByType(userId, MessageType.WARNING);
164 view.updateCategoryBadgeCount(PulseItemCategory.PROBLEM, count);
165 break;
166 case INFO:
167 count = messagesManager.getNumberOfUnclearedMessagesForUserAndByType(userId, type);
168 view.updateCategoryBadgeCount(PulseItemCategory.INFO, count);
169 break;
170 default:
171 break;
172 }
173 }
174
175 public int getNumberOfUnclearedMessagesForCurrentUser() {
176 return messagesManager.getNumberOfUnclearedMessagesForUser(userId);
177 }
178
179
180
181
182 public interface Listener extends PulseListPresenter.Listener {
183 public void openMessage(String messageId);
184 }
185 }