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