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.admincentral.shellapp.pulse.task.action;
35
36 import info.magnolia.task.Task;
37 import info.magnolia.task.TasksManager;
38 import info.magnolia.ui.admincentral.shellapp.pulse.task.DefaultTaskDetailPresenter;
39 import info.magnolia.ui.api.action.AbstractAction;
40 import info.magnolia.ui.api.action.ActionDefinition;
41 import info.magnolia.ui.api.action.ActionExecutionException;
42 import info.magnolia.ui.api.shell.Shell;
43 import info.magnolia.ui.contentapp.browser.context.ValueContext;
44 import info.magnolia.ui.framework.datasource.components.SelectedItems;
45 import info.magnolia.ui.framework.ioc.AdmincentralFlavour;
46 import info.magnolia.ui.framework.ioc.BeanStore;
47 import info.magnolia.ui.framework.ioc.CurrentUiContextReference;
48 import info.magnolia.ui.framework.ioc.SessionStore;
49
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
52
53
54
55
56
57
58 public abstract class AbstractTaskAction<D extends ActionDefinition> extends AbstractAction<D> {
59 protected static final Logger log = LoggerFactory.getLogger(AbstractTaskAction.class);
60
61 protected static final String DECISION = "decision";
62 protected static final String ACTOR_ID = "actorId";
63
64 private Task task;
65 private TasksManager tasksManager;
66 private DefaultTaskDetailPresenter taskPresenter;
67 private Shell shell;
68
69 private final ValueContext<Task> valueContext;
70
71 protected AbstractTaskAction(D definition, Task task, TasksManager tasksManager, Shell shell, ValueContext<Task> valueContext) {
72 super(definition);
73 this.task = task;
74 this.tasksManager = tasksManager;
75 this.shell = shell;
76 this.valueContext = valueContext;
77 }
78
79
80
81
82 @Deprecated
83 public AbstractTaskAction(D definition, Task task, TasksManager tasksManager, DefaultTaskDetailPresenter taskPresenter, Shell shell) {
84 super(definition);
85 this.task = task;
86 this.tasksManager = tasksManager;
87 this.taskPresenter = taskPresenter;
88 this.shell = shell;
89 if (!AdmincentralFlavour.get().isM5()) {
90 this.valueContext = accessViewBeanStore().get(ValueContext.class);
91 } else {
92 this.valueContext = null;
93 }
94 }
95
96 @Override
97 public final void execute() throws ActionExecutionException {
98 log.debug("About to execute Task [{}]", task);
99 try {
100 canExecuteTask(task);
101 executeTask(tasksManager, task);
102 updateView();
103 } catch (Exception ex) {
104 log.error("An error occurred while trying to execute task [{}]", task, ex);
105 shell.showError("Error: " + ex.getMessage(), ex);
106 }
107 }
108
109
110
111
112 protected abstract void executeTask(TasksManager tasksManager, Task task);
113
114
115
116
117
118
119
120
121
122
123
124
125 @Deprecated
126 protected void canExecuteTask(Task task) throws IllegalStateException {
127
128 }
129
130
131
132
133 protected Shell getShell() {
134 return shell;
135 }
136
137
138
139
140 protected DefaultTaskDetailPresenter getTaskPresenter() {
141 return taskPresenter;
142 }
143
144 private BeanStore accessViewBeanStore() {
145 return SessionStore.access().getBeanStore(CurrentUiContextReference.get().getUiContextReference());
146 }
147
148 protected void updateView() {
149 if (valueContext != null) {
150 valueContext.current().set(SelectedItems.of(tasksManager.getTaskById(task.getId())));
151 }
152 }
153 }