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