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.datasource.components.SelectedItems;
48 import info.magnolia.ui.framework.message.MessagesManager;
49
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 SelectedItems<Task> selectedItems;
68 private final Context context;
69 private final TasksManager tasksManager;
70 private final MessagesManager messagesManager;
71 private final SimpleTranslator i18n;
72 private final SecuritySupport securitySupport;
73 private final ValueContext<Task> valueContext;
74
75 @Inject
76 public ClaimTasksAction(final ClaimTasksActionDefinition definition, final SelectedItems<Task> selectedItems, final TasksManager taskManager, Context context, MessagesManager messagesManager, SimpleTranslator i18n, SecuritySupport securitySupport, ValueContext<Task> valueContext) {
77 super(definition);
78 this.tasksManager = taskManager;
79 this.selectedItems = selectedItems;
80 this.context = context;
81 this.messagesManager = messagesManager;
82 this.i18n = i18n;
83 this.securitySupport = securitySupport;
84 this.valueContext = valueContext;
85 }
86
87 @Override
88 public void execute() {
89 final String userId = context.getUser().getName();
90 selectedItems.stream().forEach(task -> {
91 switch (task.getStatus()) {
92 case Created:
93 tasksManager.claim(task.getId(), userId);
94 Notification.show(getDefinition().getSuccessMessage(), Notification.Type.HUMANIZED_MESSAGE);
95 break;
96
97 case InProgress:
98 tasksManager.claim(task.getId(), userId);
99 Notification.show(getDefinition().getSuccessMessage(), Notification.Type.HUMANIZED_MESSAGE);
100
101 if (getDefinition().isNotifyPreviousAssignee()) {
102 notifyPreviousAssignee(task, userId);
103 }
104 break;
105
106 default:
107 break;
108
109 }
110 }
111
112 );
113 valueContext.current().set(SelectedItems.empty());
114 }
115
116 private void notifyPreviousAssignee(Task task, String userId) {
117 if(task.getContent() != null) {
118 Map<String, Object> taskContent = task.getContent();
119 String repository = taskContent.containsKey("repository") ? taskContent.get("repository").toString() : "";
120 String path = taskContent.containsKey("path") ? taskContent.get("path").toString() : "";
121 Message message = new Message(MessageType.INFO, i18n.translate("tasks.reclaim.subject"), i18n.translate("tasks.reclaim.message", getTaskName(task), repository, path, getUsername(userId)));
122 messagesManager.sendMessage(task.getActorId(), message);
123 }
124 }
125
126 private String getUsername(String userId) {
127 UserManager userManager = securitySupport.getUserManager();
128 User user = userManager.getUser(userId);
129 return StringUtils.isNotEmpty(user.getProperty("title")) ? user.getProperty("title") : userId;
130 }
131
132 private String getTaskName(Task task) {
133 String taskNameKey = "tasks.reclaim." + task.getName();
134 String taskName = i18n.translate(taskNameKey);
135 return taskNameKey.equals(taskName) ? String.format("'%s'", task.getName()) : taskName;
136 }
137 }