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 import com.vaadin.ui.UI;
53
54
55
56
57 public class LocalTaskDispatcher implements TaskEventDispatcher {
58
59 private final User user;
60 private final Locale locale;
61 private final UI ui;
62 private EventBus eventBus;
63 private ComponentProvider componentProvider;
64
65 @Inject
66 public LocalTaskDispatcher(@Named(AdmincentralEventBus.NAME) final EventBus eventBus, UI ui, Context context, ComponentProvider componentProvider) {
67 this.eventBus = eventBus;
68 this.componentProvider = componentProvider;
69 this.user = context.getUser();
70 this.locale = context.getLocale();
71 this.ui = ui;
72 }
73
74
75
76
77 @Deprecated
78 public LocalTaskDispatcher(final EventBus eventBus, VaadinSession vaadinSession, Context context, ComponentProvider componentProvider) {
79 this(eventBus, UI.getCurrent(), context, componentProvider);
80 }
81
82 @Override
83 public void onTaskEvent(final TaskEvent taskEvent) {
84 if (!ui.isAttached()) {
85 return;
86 }
87
88 ui.access(() -> {
89 boolean hasContext = MgnlContext.hasInstance();
90 if (!hasContext) {
91 MgnlContext.setInstance(new SimpleContext(componentProvider.getComponent(SystemContext.class)) {
92 @Override
93 public User getUser() {
94 return LocalTaskDispatcher.this.user;
95 }
96
97 @Override
98 public Locale getLocale() {
99 return LocalTaskDispatcher.this.locale;
100 }
101 });
102 }
103 try {
104 eventBus.fireEvent(taskEvent);
105 } catch (Exception ignore) {
106 } finally {
107 if (!hasContext) {
108 MgnlContext.setInstance(null);
109 }
110 }
111 });
112 }
113 }