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.contentapp.browser;
35
36 import info.magnolia.ui.api.action.ActionExecutionException;
37 import info.magnolia.ui.api.action.ActionExecutor;
38 import info.magnolia.ui.api.availability.AvailabilityChecker;
39 import info.magnolia.ui.api.availability.AvailabilityDefinition;
40 import info.magnolia.ui.api.ioc.UiContextScoped;
41 import info.magnolia.ui.api.message.Message;
42 import info.magnolia.ui.api.message.MessageType;
43 import info.magnolia.ui.framework.datasource.components.SelectedItems;
44 import info.magnolia.ui.framework.message.MessagesManager;
45
46 import java.util.function.Predicate;
47 import java.util.stream.Collectors;
48
49 import javax.inject.Inject;
50
51 import org.slf4j.Logger;
52 import org.slf4j.LoggerFactory;
53
54
55
56
57
58
59 @UiContextScoped
60 public class ActionExecutionService {
61
62 private static final Logger log = LoggerFactory.getLogger(ActionExecutionService.class);
63
64 private final ActionExecutor actionExecutor;
65 private final MessagesManager messagesManager;
66 private final AvailabilityChecker availabilityChecker;
67
68 @Inject
69 public ActionExecutionService(
70 ActionExecutor actionExecutor,
71 MessagesManager messagesManager,
72 AvailabilityChecker availabilityChecker) {
73 this.actionExecutor = actionExecutor;
74 this.messagesManager = messagesManager;
75 this.availabilityChecker = availabilityChecker;
76 }
77
78 public <T> Predicate<AvailabilityDefinition> getAvailabilityFilter(SelectedItems<T> selectedItems) {
79 return actionDefinition -> availabilityChecker.isAvailable(actionDefinition, selectedItems.stream().collect(Collectors.toList()));
80 }
81
82 public void executeAction(String actionName, Object... parameters) {
83 try {
84 actionExecutor.execute(actionName, parameters);
85 } catch (ActionExecutionException e) {
86 Message error = new Message(MessageType.ERROR, "An error occurred while executing an action.", e.getMessage());
87 log.error("An error occurred while executing action [{}]", actionName, e);
88 messagesManager.sendLocalMessage(error);
89 }
90 }
91 }