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.badge;
35
36 import info.magnolia.context.Context;
37 import info.magnolia.event.EventBus;
38 import info.magnolia.i18nsystem.SimpleTranslator;
39 import info.magnolia.ui.api.event.AdmincentralEventBus;
40 import info.magnolia.ui.api.location.DefaultLocation;
41 import info.magnolia.ui.api.location.Location;
42 import info.magnolia.ui.api.location.LocationController;
43 import info.magnolia.ui.api.message.Message;
44 import info.magnolia.ui.api.shell.CloseAppEvent;
45 import info.magnolia.ui.framework.message.MessagesManager;
46
47 import java.util.Optional;
48
49 import javax.inject.Inject;
50 import javax.inject.Named;
51
52
53
54
55 public class NotificationBadge extends AbstractBadge implements MessagesManager.MessageListener {
56
57 private final MessagesManager messagesManager;
58 private final EventBus eventBus;
59
60 @Inject
61 NotificationBadge(LocationController controller, Context context, SimpleTranslator i18n, MessagesManager messagesManager,
62 @Named(AdmincentralEventBus.NAME) EventBus eventBus) {
63 super(controller, context, i18n);
64 this.messagesManager = messagesManager;
65 this.messagesManager.registerMessagesListener(getUserName(), this);
66 this.eventBus = eventBus;
67
68 update();
69 }
70
71 @Deprecated
72 NotificationBadge(LocationController controller, Context context, SimpleTranslator i18n, MessagesManager messagesManager) {
73 this(controller, context, i18n, messagesManager, null);
74 }
75
76 @Override
77 Status getStatus() {
78
79 int count = messagesManager.getNumberOfUnclearedMessagesForUser(getUserName());
80 String description = getI18n().translate("badge.notification.description", count);
81 return new Status(count > 0, count, description);
82 }
83
84 @Override
85 public void messageSent(Message message) {
86 update();
87 }
88
89 @Override
90 public void messageCleared(Message message) {
91 update();
92 }
93
94 @Override
95 public void messageRemoved(String id) {
96 update();
97 }
98
99 @Override
100 public String getCaption() {
101 return getI18n().translate("notifications.app.caption");
102 }
103
104 @Override
105 Location getLocation() {
106 return new DefaultLocation("app", "notifications");
107 }
108
109 @Override
110 public void detach() {
111 messagesManager.unregisterMessagesListener(getUserName(), this);
112 super.detach();
113 }
114
115 @Override
116 protected void onBadgeDeselected() {
117 Optional.ofNullable(eventBus).ifPresent(eb -> eventBus.fireEvent(new CloseAppEvent()));
118 }
119 }