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.view;
35
36 import info.magnolia.admincentral.apps.notifications.NotificationDataSourceDefinition;
37 import info.magnolia.context.MgnlContext;
38 import info.magnolia.i18nsystem.SimpleTranslator;
39 import info.magnolia.ui.api.app.SubAppContext;
40 import info.magnolia.ui.api.app.SubAppDescriptor;
41 import info.magnolia.ui.api.message.MessageType;
42 import info.magnolia.ui.contentapp.ContentBrowserSubApp;
43 import info.magnolia.ui.contentapp.configuration.BrowserDescriptor;
44 import info.magnolia.ui.framework.message.MessagesManager;
45
46 import java.util.Collections;
47 import java.util.List;
48 import java.util.Optional;
49
50 import javax.inject.Inject;
51
52
53
54
55 public class NotificationBrowserSubApp extends ContentBrowserSubApp {
56
57 private final SimpleTranslator i18n;
58 private final MessagesManager messagesManager;
59 private final String username;
60 private final NotificationDataSourceDefinition datasourceDefinition;
61
62 @Inject
63 public NotificationBrowserSubApp(SubAppContext subAppContext, SimpleTranslator i18n, MessagesManager messagesManager, NotificationDataSourceDefinition datasourceDefinition, BrowserDescriptor browserDescriptor) {
64 super(subAppContext, browserDescriptor);
65 this.i18n = i18n;
66 this.messagesManager = messagesManager;
67 this.username = MgnlContext.getUser().getName();
68 this.datasourceDefinition = datasourceDefinition;
69 }
70
71 @Override
72 public String getCaption() {
73 long unclearedNotifications = getUnclearedNotifications();
74 String unclearedAsString = unclearedNotifications >= 100 ? "99+" : String.valueOf(unclearedNotifications);
75
76 return i18n.translate(getSubAppContext().getSubAppDescriptor().getLabel(), unclearedAsString);
77 }
78
79 private long getUnclearedNotifications() {
80 List<String> notificationTypes = getConfiguredNotificationTypes();
81 if (notificationTypes == null || notificationTypes.isEmpty()) {
82 return messagesManager.getNumberOfUnclearedMessagesForUser(username);
83 }
84
85 long numberOfUnclearedNotifications = 0;
86 for (String notificationType : notificationTypes) {
87 numberOfUnclearedNotifications += messagesManager.getNumberOfUnclearedMessagesForUserAndByType(username, MessageType.valueOf(notificationType));
88 }
89
90 return numberOfUnclearedNotifications;
91 }
92
93 private List<String> getConfiguredNotificationTypes() {
94 return Optional.ofNullable(this.datasourceDefinition.getMessageTypes())
95 .orElse(Collections.emptyList());
96 }
97
98 public String getTitle() {
99 SubAppDescriptor subAppDescriptor = getSubAppContext().getSubAppDescriptor();
100 if (subAppDescriptor instanceof NotificationBrowserDescriptor) {
101 return i18n.translate(((NotificationBrowserDescriptor) subAppDescriptor).getTitle(), getUnclearedNotifications());
102 }
103
104 return getCaption();
105 }
106
107 }