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.clipboard;
35
36 import info.magnolia.i18nsystem.SimpleTranslator;
37 import info.magnolia.ui.api.action.AbstractAction;
38 import info.magnolia.ui.api.action.ActionExecutionException;
39 import info.magnolia.ui.ValueContext;
40 import info.magnolia.ui.framework.ContentClipboard;
41 import info.magnolia.ui.framework.ContentClipboardException;
42
43 import java.util.HashSet;
44 import java.util.List;
45 import java.util.Objects;
46
47 import javax.inject.Inject;
48
49 import com.vaadin.ui.Notification;
50
51
52
53
54
55 public class PasteContentAction<T> extends AbstractAction<PasteContentActionDefinition> {
56
57 private final ContentClipboard<T> contentClipboard;
58 private final ValueContext<T> valueContext;
59 private final SimpleTranslator simpleTranslator;
60
61 @Inject
62 public PasteContentAction(PasteContentActionDefinition definition, ValueContext<T> valueContext, ContentClipboard<T> contentClipboard, SimpleTranslator simpleTranslator) {
63 super(definition);
64 this.contentClipboard = contentClipboard;
65 this.valueContext = valueContext;
66 this.simpleTranslator = simpleTranslator;
67 }
68
69 @Override
70 public void execute() throws ActionExecutionException {
71 try {
72 List<T> pastedItems = valueContext.getSingle()
73 .map(contentClipboard::paste)
74 .orElseGet(contentClipboard::pasteToRoot);
75
76 Notification.show(simpleTranslator.translate("ui-framework.actions.pasteItem.success", pastedItems.size(), valueContext.getSingle().map(Objects::toString).orElse("/")), Notification.Type.HUMANIZED_MESSAGE);
77 valueContext.set(new HashSet<>(pastedItems));
78 } catch (ContentClipboardException e) {
79 throw new ActionExecutionException(simpleTranslator.translate("ui-framework.actions.pasteItem.failure"), e);
80 }
81 }
82 }