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.objectfactory.Components;
42 import info.magnolia.task.Task;
43 import info.magnolia.task.TasksManager;
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 javax.inject.Inject;
54
55 import org.apache.commons.lang3.StringUtils;
56
57
58
59
60 public class ClaimTaskAction extends AbstractTaskAction<ClaimTaskActionDefinition> {
61
62 private final MessagesManager messagesManager;
63 private final SimpleTranslator i18n;
64 private SecuritySupport securitySupport;
65
66 @Inject
67 public ClaimTaskAction(ClaimTaskActionDefinition definition, Task task, TasksManager tasksManager, DefaultTaskDetailPresenter taskPresenter, Shell shell, MessagesManager messagesManager, SimpleTranslator i18n, SecuritySupport securitySupport) {
68 super(definition, task, tasksManager, taskPresenter, shell);
69 this.messagesManager = messagesManager;
70 this.i18n = i18n;
71 this.securitySupport = securitySupport;
72 }
73
74
75
76
77 @Deprecated
78 public ClaimTaskAction(ClaimTaskActionDefinition definition, Task task, TasksManager tasksManager, DefaultTaskDetailPresenter taskPresenter, Shell shell) {
79 this(definition, task, tasksManager, taskPresenter, shell, Components.getComponent(MessagesManager.class), Components.getComponent(SimpleTranslator.class), Components.getComponent(SecuritySupport.class));
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 getTaskPresenter().onUpdateDetailView(String.valueOf(taskId));
109
110 getShell().openNotification(MessageStyleTypeEnum.INFO, true, getDefinition().getSuccessMessage());
111 }
112
113 private void notifyPreviousAssignee(Task task, String userId) {
114 if (task.getContent() != null) {
115 Map<String, Object> taskContent = task.getContent();
116 String repository = taskContent.containsKey("repository") ? taskContent.get("repository").toString() : "";
117 String path = taskContent.containsKey("path") ? taskContent.get("path").toString() : "";
118 Message message = new Message(MessageType.INFO, i18n.translate("pulse.tasks.reclaim.subject"), i18n.translate("pulse.tasks.reclaim.message", getTaskName(task), repository, path, getUsername(userId)));
119 messagesManager.sendMessage(task.getActorId(), message);
120 }
121 }
122
123 private String getUsername(String userId) {
124 UserManager userManager = securitySupport.getUserManager();
125 User user = userManager.getUser(userId);
126 return StringUtils.isNotEmpty(user.getProperty("title")) ? user.getProperty("title") : userId;
127 }
128
129 private String getTaskName(Task task) {
130 String taskNameKey = "pulse.tasks.reclaim." + task.getName();
131 String taskName = i18n.translate(taskNameKey);
132 return StringUtils.isEmpty(taskName) || taskNameKey.equals(taskName) ? String.format("'%s'", task.getName()) : taskName;
133 }
134 }