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.cms.security.SecuritySupport;
37 import info.magnolia.cms.security.User;
38 import info.magnolia.cms.security.UserManager;
39 import info.magnolia.context.MgnlContext;
40 import info.magnolia.i18nsystem.SimpleTranslator;
41 import info.magnolia.task.Task;
42 import info.magnolia.task.TasksManager;
43 import info.magnolia.ui.admincentral.shellapp.pulse.task.DefaultTaskDetailPresenter;
44 import info.magnolia.ui.api.message.Message;
45 import info.magnolia.ui.api.message.MessageType;
46 import info.magnolia.ui.api.shell.Shell;
47 import info.magnolia.ui.contentapp.browser.context.ValueContext;
48 import info.magnolia.ui.framework.datasource.components.SelectedItems;
49 import info.magnolia.ui.framework.message.MessagesManager;
50 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
51
52 import java.util.Map;
53
54 import org.apache.commons.lang3.StringUtils;
55
56
57
58
59 public class ClaimTaskAction extends AbstractTaskAction<ClaimTaskActionDefinition> {
60
61 private final MessagesManager messagesManager;
62 private final SimpleTranslator i18n;
63 private SecuritySupport securitySupport;
64
65 public ClaimTaskAction(ClaimTaskActionDefinition definition, SelectedItems<Task> selectedItems, TasksManager tasksManager, Shell shell, MessagesManager messagesManager, SimpleTranslator i18n, SecuritySupport securitySupport, ValueContext<Task> valueContext) {
66 super(definition, selectedItems.getFirst().get(), tasksManager, shell, valueContext);
67 this.messagesManager = messagesManager;
68 this.i18n = i18n;
69 this.securitySupport = securitySupport;
70 }
71
72
73
74
75 @Deprecated
76 public ClaimTaskAction(ClaimTaskActionDefinition definition, Task task, TasksManager tasksManager, DefaultTaskDetailPresenter taskPresenter, Shell shell, MessagesManager messagesManager, SimpleTranslator i18n, SecuritySupport securitySupport) {
77 super(definition, task, tasksManager, taskPresenter, shell);
78 this.messagesManager = messagesManager;
79 this.i18n = i18n;
80 this.securitySupport = securitySupport;
81 }
82
83 @Override
84 protected void executeTask(TasksManager taskManager, Task task) {
85 final String userId = MgnlContext.getUser().getName();
86 log.debug("User [{}] is claiming workflow human task named [{}]", userId, task.getName());
87
88 switch (task.getStatus()) {
89 case Created:
90 claimTask(taskManager, task, userId);
91 break;
92
93 case InProgress:
94 claimTask(taskManager, task, userId);
95
96 if (getDefinition().isNotifyPreviousAssignee()) {
97 notifyPreviousAssignee(task, userId);
98 }
99 break;
100
101 default:
102 break;
103 }
104 }
105
106 private void claimTask(TasksManager taskManager, Task task, String userId) {
107 String taskId = task.getId();
108 taskManager.claim(taskId, userId);
109 if (getTaskPresenter() != null) {
110 getTaskPresenter().onUpdateDetailView(String.valueOf(taskId));
111 }
112
113 getShell().openNotification(MessageStyleTypeEnum.INFO, true, getDefinition().getSuccessMessage());
114 }
115
116 private void notifyPreviousAssignee(Task task, String userId) {
117 if (task.getContent() != null) {
118 Map<String, Object> taskContent = task.getContent();
119 String repository = taskContent.containsKey("repository") ? taskContent.get("repository").toString() : "";
120 String path = taskContent.containsKey("path") ? taskContent.get("path").toString() : "";
121 Message message = new Message(MessageType.INFO, i18n.translate("pulse.tasks.reclaim.subject"), i18n.translate("pulse.tasks.reclaim.message", getTaskName(task), repository, path, getUsername(userId)));
122 messagesManager.sendMessage(task.getActorId(), message);
123 }
124 }
125
126 private String getUsername(String userId) {
127 UserManager userManager = securitySupport.getUserManager();
128 User user = userManager.getUser(userId);
129 return StringUtils.isNotEmpty(user.getProperty("title")) ? user.getProperty("title") : userId;
130 }
131
132 private String getTaskName(Task task) {
133 String taskNameKey = "pulse.tasks.reclaim." + task.getName();
134 String taskName = i18n.translate(taskNameKey);
135 return StringUtils.isEmpty(taskName) || taskNameKey.equals(taskName) ? String.format("'%s'", task.getName()) : taskName;
136 }
137 }