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.messages;
35
36 import info.magnolia.context.MgnlContext;
37 import info.magnolia.ui.api.app.AppContext;
38 import info.magnolia.ui.api.app.AppView;
39 import info.magnolia.ui.api.app.SubAppDescriptor;
40 import info.magnolia.ui.api.location.DefaultLocation;
41 import info.magnolia.ui.api.location.Location;
42 import info.magnolia.ui.api.message.Message;
43 import info.magnolia.ui.framework.app.BaseApp;
44 import info.magnolia.ui.framework.message.MessagesManager;
45
46 import javax.inject.Inject;
47
48
49
50
51 public class MessageContentApp extends BaseApp {
52
53 private final MessagesManager.MessageListener messageListener;
54 private final MessagesManager messagesManager;
55 private final String userName;
56
57 @Inject
58 public MessageContentApp(AppContext appContext, AppView view, MessagesManager messagesManager) {
59 super(appContext, view);
60 view.asVaadinComponent().addStyleName("message-content-app");
61 this.messagesManager = messagesManager;
62
63 messageListener = new MessagesManager.MessageListener() {
64 @Override
65 public void messageSent(Message message) {
66 updateMessagesSubAppCaption(appContext, view);
67 }
68
69 @Override
70 public void messageCleared(Message message) {
71 updateMessagesSubAppCaption(appContext, view);
72 }
73
74 @Override
75 public void messageRemoved(String id) {
76 updateMessagesSubAppCaption(appContext, view);
77 }
78 };
79 this.userName = MgnlContext.getUser().getName();
80 }
81
82 @Override
83 public void start(Location location) {
84 this.appContext.getAppDescriptor().getSubApps().values()
85 .stream()
86 .filter((descriptor) -> !descriptor.isClosable())
87 .forEach(this::openSubApp);
88 super.start(location);
89 this.messagesManager.registerMessagesListener(userName, messageListener);
90 }
91
92 @Override
93 public void stop() {
94 this.messagesManager.registerMessagesListener(this.userName, messageListener);
95 super.stop();
96
97 }
98
99 private void openSubApp(SubAppDescriptor subAppDescriptor) {
100 String appName = this.getAppContext().getAppDescriptor().getName();
101 String subAppId = subAppDescriptor.getName();
102 this.getAppContext().openSubApp(new DefaultLocation("app", appName, subAppId));
103 }
104
105 private void updateMessagesSubAppCaption(AppContext appContext, AppView view) {
106 appContext.getSubAppContexts().stream().forEach(subAppContext -> view.updateCaption(subAppContext.getInstanceId(), subAppContext.getSubApp().getCaption()));
107 }
108 }