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