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.contentapp.browser.context.ValueContext;
47 import info.magnolia.ui.framework.message.MessagesManager;
48
49 import java.util.Map;
50
51 import javax.inject.Inject;
52
53 import org.apache.commons.lang3.StringUtils;
54
55 import com.vaadin.ui.Notification;
56
57
58
59
60
61
62
63
64 public class ClaimTasksAction extends AbstractAction<ClaimTasksActionDefinition> {
65
66 private final Context context;
67 private final TasksManager tasksManager;
68 private final MessagesManager messagesManager;
69 private final SimpleTranslator i18n;
70 private final SecuritySupport securitySupport;
71 private final ValueContext<Task> valueContext;
72
73 @Inject
74 public ClaimTasksAction(final ClaimTasksActionDefinition definition, final TasksManager taskManager, Context context, MessagesManager messagesManager, SimpleTranslator i18n, SecuritySupport securitySupport, ValueContext<Task> valueContext) {
75 super(definition);
76 this.tasksManager = taskManager;
77 this.context = context;
78 this.messagesManager = messagesManager;
79 this.i18n = i18n;
80 this.securitySupport = securitySupport;
81 this.valueContext = valueContext;
82 }
83
84 @Override
85 public void execute() {
86 final String userId = context.getUser().getName();
87 valueContext.get().forEach(task -> {
88 switch (task.getStatus()) {
89 case Created:
90 tasksManager.claim(task.getId(), userId);
91 Notification.show(getDefinition().getSuccessMessage(), Notification.Type.HUMANIZED_MESSAGE);
92 break;
93
94 case InProgress:
95 tasksManager.claim(task.getId(), userId);
96 Notification.show(getDefinition().getSuccessMessage(), Notification.Type.HUMANIZED_MESSAGE);
97
98 if (getDefinition().isNotifyPreviousAssignee()) {
99 notifyPreviousAssignee(task, userId);
100 }
101 break;
102
103 default:
104 break;
105
106 }
107 }
108
109 );
110 valueContext.clear();
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("tasks.reclaim.subject"), i18n.translate("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 = "tasks.reclaim." + task.getName();
131 String taskName = i18n.translate(taskNameKey);
132 return taskNameKey.equals(taskName) ? String.format("'%s'", task.getName()) : taskName;
133 }
134 }