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.framework.task;
35
36 import info.magnolia.cms.security.User;
37 import info.magnolia.context.Context;
38 import info.magnolia.context.MgnlContext;
39 import info.magnolia.context.SimpleContext;
40 import info.magnolia.context.SystemContext;
41 import info.magnolia.event.EventBus;
42 import info.magnolia.objectfactory.ComponentProvider;
43 import info.magnolia.task.event.TaskEvent;
44 import info.magnolia.ui.api.event.AdmincentralEventBus;
45
46 import java.util.Locale;
47
48 import javax.inject.Inject;
49 import javax.inject.Named;
50
51 import com.vaadin.server.VaadinSession;
52
53
54
55
56 public class LocalTaskDispatcher implements TaskEventDispatcher {
57
58 private final User user;
59 private final Locale locale;
60 private EventBus eventBus;
61 private VaadinSession vaadinSession;
62 private ComponentProvider componentProvider;
63
64 @Inject
65 public LocalTaskDispatcher(@Named(AdmincentralEventBus.NAME) final EventBus eventBus, VaadinSession vaadinSession, Context context, ComponentProvider componentProvider) {
66 this.eventBus = eventBus;
67 this.vaadinSession = vaadinSession;
68 this.componentProvider = componentProvider;
69 this.user = context.getUser();
70 this.locale = context.getLocale();
71 }
72
73 @Override
74 public void onTaskEvent(final TaskEvent taskEvent) {
75 vaadinSession.access(new Runnable() {
76 @Override
77 public void run() {
78 boolean hasContext = MgnlContext.hasInstance();
79 if (!hasContext) {
80 MgnlContext.setInstance(new SimpleContext(componentProvider.getComponent(SystemContext.class)) {
81 @Override
82 public User getUser() {
83 return LocalTaskDispatcher.this.user;
84 }
85
86 @Override
87 public Locale getLocale() {
88 return LocalTaskDispatcher.this.locale;
89 }
90 });
91 }
92 try {
93 eventBus.fireEvent(taskEvent);
94 } catch (Exception ignore) {
95 } finally {
96 if (!hasContext) {
97 MgnlContext.setInstance(null);
98 }
99 }
100 }
101 });
102 }
103 }