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.task.app.actions;
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.message.Message;
45 import info.magnolia.ui.api.message.MessageType;
46 import info.magnolia.ui.ValueContext;
47 import info.magnolia.ui.framework.message.MessagesManager;
48
49 import java.util.HashSet;
50 import java.util.Map;
51
52 import javax.inject.Inject;
53
54 import org.apache.commons.lang3.StringUtils;
55
56 import com.vaadin.ui.Notification;
57
58
59
60
61
62
63
64
65 public class ClaimTasksAction extends AbstractAction<ClaimTasksActionDefinition> {
66
67 private final Context context;
68 private final TasksManager tasksManager;
69 private final MessagesManager messagesManager;
70 private final SimpleTranslator i18n;
71 private final SecuritySupport securitySupport;
72 private final ValueContext<Task> valueContext;
73
74 @Inject
75 public ClaimTasksAction(final ClaimTasksActionDefinition definition, final TasksManager taskManager, Context context, MessagesManager messagesManager, SimpleTranslator i18n, SecuritySupport securitySupport, ValueContext<Task> valueContext) {
76 super(definition);
77 this.tasksManager = taskManager;
78 this.context = context;
79 this.messagesManager = messagesManager;
80 this.i18n = i18n;
81 this.securitySupport = securitySupport;
82 this.valueContext = valueContext;
83 }
84
85 @Override
86 public void execute() {
87 final String userId = context.getUser().getName();
88 valueContext.current().update(tasks -> {
89 tasks.forEach(task -> {
90 switch (task.getStatus()) {
91 case Created:
92 tasksManager.claim(task.getId(), userId);
93 Notification.show(getDefinition().getSuccessMessage(), Notification.Type.HUMANIZED_MESSAGE);
94 break;
95
96 case InProgress:
97 tasksManager.claim(task.getId(), userId);
98 Notification.show(getDefinition().getSuccessMessage(), Notification.Type.HUMANIZED_MESSAGE);
99
100 if (getDefinition().isNotifyPreviousAssignee()) {
101 notifyPreviousAssignee(task, userId);
102 }
103 break;
104
105 default:
106 break;
107
108 }
109 });
110 return new HashSet<>();
111 });
112 }
113
114 private void notifyPreviousAssignee(Task task, String userId) {
115 if (task.getContent() != null) {
116 Map<String, Object> taskContent = task.getContent();
117 String repository = taskContent.containsKey("repository") ? taskContent.get("repository").toString() : "";
118 String path = taskContent.containsKey("path") ? taskContent.get("path").toString() : "";
119 Message message = new Message(MessageType.INFO, i18n.translate("tasks.reclaim.subject"), i18n.translate("tasks.reclaim.message", getTaskName(task), repository, path, getUsername(userId)));
120 messagesManager.sendMessage(task.getActorId(), message);
121 }
122 }
123
124 private String getUsername(String userId) {
125 UserManager userManager = securitySupport.getUserManager();
126 User user = userManager.getUser(userId);
127 return StringUtils.isNotEmpty(user.getProperty("title")) ? user.getProperty("title") : userId;
128 }
129
130 private String getTaskName(Task task) {
131 String taskNameKey = "tasks.reclaim." + task.getName();
132 String taskName = i18n.translate(taskNameKey);
133 return taskNameKey.equals(taskName) ? String.format("'%s'", task.getName()) : taskName;
134 }
135 }