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.action;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.i18nsystem.SimpleTranslator;
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.event.AdmincentralEventBus;
42 import info.magnolia.ui.api.event.ContentChangedEvent;
43 import info.magnolia.ui.framework.ContentClipboard;
44 import info.magnolia.ui.framework.ContentClipboardException;
45 import info.magnolia.ui.vaadin.integration.jcr.JcrItemAdapter;
46 import info.magnolia.ui.vaadin.integration.jcr.JcrItemId;
47 import info.magnolia.ui.vaadin.integration.jcr.JcrItemUtil;
48 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
49
50 import java.util.ArrayList;
51 import java.util.List;
52
53 import javax.inject.Inject;
54 import javax.inject.Named;
55 import javax.jcr.RepositoryException;
56
57
58
59
60 public class CopyContentAction extends AbstractAction<CopyContentActionDefinition> {
61
62 private final ContentClipboard contentClipboard;
63 private final UiContext uiContext;
64 private final EventBus eventBus;
65 private final SimpleTranslator i18n;
66 private final List<JcrItemAdapter> source;
67
68 @Inject
69 public CopyContentAction(CopyContentActionDefinition definition, List<JcrItemAdapter> source,
70 ContentClipboard contentClipboard,
71 UiContext uiContext,
72 @Named(AdmincentralEventBus.NAME) EventBus eventBus,
73 SimpleTranslator i18n) {
74 super(definition);
75 this.contentClipboard = contentClipboard;
76 this.i18n = i18n;
77 this.source = source;
78 this.eventBus = eventBus;
79 this.uiContext = uiContext;
80 }
81
82 @Override
83 public void execute() throws ActionExecutionException {
84 try {
85 List<JcrItemId> copiedItemIds = new ArrayList<>();
86 for (JcrItemAdapter itemAdapter : source) {
87 copiedItemIds.add(JcrItemUtil.getItemId(itemAdapter.getJcrItem()));
88 }
89 contentClipboard.copy(copiedItemIds);
90
91 uiContext.openNotification(MessageStyleTypeEnum.INFO, true, getSuccessMessage());
92
93 eventBus.fireEvent(new ContentChangedEvent(copiedItemIds));
94 } catch (RepositoryException | ContentClipboardException e) {
95 throw new ActionExecutionException(i18n.translate("ui-framework.actions.pasteItem.failure"));
96 }
97 }
98
99 protected String getSuccessMessage() {
100 if (source.size() == 1) {
101 return i18n.translate("ui-framework.actions.copyItem.successOneItemCopied");
102 } else {
103 return i18n.translate("ui-framework.actions.copyItem.successManyItemsCopied", source.size());
104 }
105 }
106
107 protected ContentClipboard getContentClipboard() {
108 return contentClipboard;
109 }
110
111 protected UiContext getUiContext() {
112 return uiContext;
113 }
114
115 protected EventBus getEventBus() {
116 return eventBus;
117 }
118
119 protected SimpleTranslator getI18n() {
120 return i18n;
121 }
122
123 protected List<JcrItemAdapter> getSource() {
124 return source;
125 }
126
127 }