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