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.framework.message.MessagesManager;
48 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
49
50 import java.util.Map;
51
52 import javax.inject.Inject;
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 @Inject
66 public ClaimTaskAction(ClaimTaskActionDefinition definition, Task task, TasksManager tasksManager, DefaultTaskDetailPresenter taskPresenter, Shell shell, MessagesManager messagesManager, SimpleTranslator i18n, SecuritySupport securitySupport) {
67 super(definition, task, tasksManager, taskPresenter, shell);
68 this.messagesManager = messagesManager;
69 this.i18n = i18n;
70 this.securitySupport = securitySupport;
71 }
72
73 @Override
74 protected void executeTask(TasksManager taskManager, Task task) {
75 final String userId = MgnlContext.getUser().getName();
76 log.debug("User [{}] is claiming workflow human task named [{}]", userId, task.getName());
77
78 switch (task.getStatus()) {
79 case Created:
80 claimTask(taskManager, task, userId);
81 break;
82
83 case InProgress:
84 claimTask(taskManager, task, userId);
85
86 if (getDefinition().isNotifyPreviousAssignee()) {
87 notifyPreviousAssignee(task, userId);
88 }
89 break;
90
91 default:
92 break;
93 }
94 }
95
96 private void claimTask(TasksManager taskManager, Task task, String userId) {
97 String taskId = task.getId();
98 taskManager.claim(taskId, userId);
99 getTaskPresenter().onUpdateDetailView(String.valueOf(taskId));
100
101 getShell().openNotification(MessageStyleTypeEnum.INFO, true, getDefinition().getSuccessMessage());
102 }
103
104 private void notifyPreviousAssignee(Task task, String userId) {
105 if (task.getContent() != null) {
106 Map<String, Object> taskContent = task.getContent();
107 String repository = taskContent.containsKey("repository") ? taskContent.get("repository").toString() : "";
108 String path = taskContent.containsKey("path") ? taskContent.get("path").toString() : "";
109 Message message = new Message(MessageType.INFO, i18n.translate("pulse.tasks.reclaim.subject"), i18n.translate("pulse.tasks.reclaim.message", getTaskName(task), repository, path, getUsername(userId)));
110 messagesManager.sendMessage(task.getActorId(), message);
111 }
112 }
113
114 private String getUsername(String userId) {
115 UserManager userManager = securitySupport.getUserManager();
116 User user = userManager.getUser(userId);
117 return StringUtils.isNotEmpty(user.getProperty("title")) ? user.getProperty("title") : userId;
118 }
119
120 private String getTaskName(Task task) {
121 String taskNameKey = "pulse.tasks.reclaim." + task.getName();
122 String taskName = i18n.translate(taskNameKey);
123 return StringUtils.isEmpty(taskName) || taskNameKey.equals(taskName) ? String.format("'%s'", task.getName()) : taskName;
124 }
125 }