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.Context;
40 import info.magnolia.i18nsystem.SimpleTranslator;
41 import info.magnolia.task.Task;
42 import info.magnolia.task.TasksManager;
43 import info.magnolia.ui.api.action.AbstractAction;
44 import info.magnolia.ui.api.action.ActionExecutionException;
45 import info.magnolia.ui.api.context.UiContext;
46 import info.magnolia.ui.api.message.Message;
47 import info.magnolia.ui.api.message.MessageType;
48 import info.magnolia.ui.framework.message.MessagesManager;
49 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
50
51 import java.util.List;
52 import java.util.Map;
53
54 import javax.inject.Inject;
55
56 import org.apache.commons.lang3.StringUtils;
57
58
59
60
61
62
63
64
65 public class ClaimTasksAction extends AbstractAction<ClaimTasksActionDefinition> {
66
67 private final UiContext uiContext;
68 private final List<String> taskIds;
69 private final Context context;
70 private final TasksManager tasksManager;
71 private final MessagesManager messagesManager;
72 private final SimpleTranslator i18n;
73 private SecuritySupport securitySupport;
74
75 @Inject
76 public ClaimTasksAction(final ClaimTasksActionDefinition definition, final List<String> taskIds, final TasksManager taskManager, final UiContext uiContext, Context context, MessagesManager messagesManager, SimpleTranslator i18n, SecuritySupport securitySupport) {
77 super(definition);
78 this.tasksManager = taskManager;
79 this.uiContext = uiContext;
80 this.taskIds = taskIds;
81 this.context = context;
82 this.messagesManager = messagesManager;
83 this.i18n = i18n;
84 this.securitySupport = securitySupport;
85 }
86
87 @Override
88 public void execute() throws ActionExecutionException {
89 final String userId = context.getUser().getName();
90 for (String taskId : taskIds) {
91 Task task = tasksManager.getTaskById(taskId);
92
93 switch (task.getStatus()) {
94 case Created:
95 tasksManager.claim(taskId, userId);
96 break;
97
98 case InProgress:
99 tasksManager.claim(taskId, userId);
100
101 if (getDefinition().isNotifyPreviousAssignee()) {
102 notifyPreviousAssignee(task, userId);
103 }
104 break;
105
106 default:
107 break;
108
109 }
110 }
111
112 uiContext.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 }