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.action;
35
36 import info.magnolia.i18nsystem.SimpleTranslator;
37 import info.magnolia.i18nsystem.util.MessageFormatterUtils;
38 import info.magnolia.ui.api.action.AbstractAction;
39 import info.magnolia.ui.api.action.ActionExecutionException;
40 import info.magnolia.ui.api.context.UiContext;
41 import info.magnolia.ui.api.overlay.ConfirmationCallback;
42 import info.magnolia.ui.contentapp.browser.ActionExecutionService;
43 import info.magnolia.ui.contentapp.browser.context.ValueContext;
44 import info.magnolia.ui.framework.datasource.components.SelectedItems;
45 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
46
47 import java.util.stream.Stream;
48
49 import javax.inject.Inject;
50
51 import org.slf4j.Logger;
52 import org.slf4j.LoggerFactory;
53
54 import lombok.AccessLevel;
55 import lombok.Getter;
56
57
58
59
60
61
62
63
64 @Getter(AccessLevel.PROTECTED)
65 public class ConfirmationAction<D extends ConfirmationActionDefinition, T> extends AbstractAction<D> {
66
67 private static final Logger log = LoggerFactory.getLogger(ConfirmationAction.class);
68
69 private final SimpleTranslator simpleTranslator;
70 private final ValueContext<T> valueContext;
71 private final UiContext uiContext;
72 private final ActionExecutionService actionExecutionService;
73
74 @Inject
75 public ConfirmationAction(D definition, UiContext uiContext, ActionExecutionService actionExecutionService, SimpleTranslator i18n, ValueContext valueContext) {
76 super(definition);
77 this.valueContext = valueContext;
78 this.uiContext = uiContext;
79 this.actionExecutionService = actionExecutionService;
80 this.simpleTranslator = i18n;
81 }
82
83 @Override
84 public void execute() throws ActionExecutionException {
85 try {
86 uiContext.openConfirmation(
87 MessageStyleTypeEnum.WARNING, getConfirmationHeader(), getConfirmationMessage(), getDefinition().getProceedLabel(), getDefinition().getCancelLabel(), getDefinition().isDefaultCancel(),
88 new ConfirmationCallback() {
89 @Override
90 public void onSuccess() {
91 if (getDefinition().getSuccessActionName() != null) {
92 actionExecutionService.executeAction(getDefinition().getSuccessActionName(), valueContext.current().nullableValue());
93 }
94 }
95
96 @Override
97 public void onCancel() {
98 if (getDefinition().getCancelActionName() != null) {
99 actionExecutionService.executeAction(getDefinition().getCancelActionName(), valueContext.current().nullableValue());
100 }
101 }
102 });
103 } catch (Exception e) {
104 throw new ActionExecutionException(e);
105 }
106 }
107
108 protected String getConfirmationHeader() {
109 return formatMessage(getDefinition().getConfirmationHeader());
110 }
111
112 protected String getConfirmationMessage() {
113 return formatMessage(getDefinition().getConfirmationMessage());
114 }
115
116 private String formatMessage(final String message) {
117 long howMany = valueContext.current().value().map(SelectedItems::stream).map(Stream::count).orElse(0L);
118 return MessageFormatterUtils.format(message, howMany, howMany);
119 }
120 }