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.pages.app.action;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.i18nsystem.SimpleTranslator;
38 import info.magnolia.jcr.util.NodeTypes;
39 import info.magnolia.objectfactory.Components;
40 import info.magnolia.pages.app.editor.ComponentContentClipboard;
41 import info.magnolia.ui.api.action.ActionExecutionException;
42 import info.magnolia.ui.api.app.SubAppEventBus;
43 import info.magnolia.ui.api.context.UiContext;
44 import info.magnolia.ui.api.event.ContentChangedEvent;
45 import info.magnolia.ui.contentapp.browser.action.CopyContentAction;
46 import info.magnolia.ui.framework.ContentClipboard;
47 import info.magnolia.ui.framework.ContentClipboardException;
48 import info.magnolia.ui.vaadin.gwt.client.shared.AreaElement;
49 import info.magnolia.ui.vaadin.gwt.client.shared.ComponentElement;
50 import info.magnolia.ui.vaadin.integration.jcr.JcrItemAdapter;
51 import info.magnolia.ui.vaadin.integration.jcr.JcrItemId;
52 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
53
54 import java.util.Arrays;
55
56 import javax.inject.Inject;
57 import javax.inject.Named;
58 import javax.jcr.Node;
59 import javax.jcr.NodeIterator;
60 import javax.jcr.RepositoryException;
61
62
63
64
65 public class CopyComponentAction extends CopyContentAction {
66
67 @Inject
68 public CopyComponentAction(CopyComponentActionDefinition definition, JcrItemAdapter source,
69 @Named(SubAppEventBus.NAME) EventBus eventBus, UiContext uiContext, ComponentContentClipboard componentContentClipboard, SimpleTranslator i18n) {
70 super(definition, Arrays.asList(source), componentContentClipboard, uiContext, eventBus, i18n);
71 }
72
73
74
75
76 public CopyComponentAction(CopyComponentActionDefinition definition, JcrItemAdapter source,
77 @Named(SubAppEventBus.NAME) EventBus eventBus, UiContext uiContext, ContentClipboard contentClipboard, SimpleTranslator i18n) {
78 this(definition, source, eventBus, uiContext, Components.getComponent(ComponentContentClipboard.class), i18n);
79 }
80
81 @Override
82 public void execute() throws ActionExecutionException {
83 try {
84 final JcrItemAdapter itemAdapter = getSource().get(0);
85 final JcrItemId itemId = itemAdapter.getItemId();
86 Node node = (Node) itemAdapter.getJcrItem();
87
88 if (NodeTypes.Area.NAME.equals(node.getPrimaryNodeType().getName())) {
89 int components = 0;
90 NodeIterator nit = node.getNodes();
91 while (nit.hasNext()) {
92 Node componentNode = nit.nextNode();
93 if (NodeTypes.Component.NAME.equals(componentNode.getPrimaryNodeType().getName())) {
94 components++;
95 }
96 }
97 getContentClipboard().copy(Arrays.asList(new AreaElement(itemAdapter.getWorkspace(), itemAdapter.getJcrItem().getPath(), null, null)));
98
99 getUiContext().openNotification(MessageStyleTypeEnum.INFO, true, getI18n().translate("actions.copyComponent.successAreaCopied", components));
100 } else if (NodeTypes.Component.NAME.equals(node.getPrimaryNodeType().getName())) {
101 getContentClipboard().copy(Arrays.asList(new ComponentElement(itemAdapter.getWorkspace(), itemAdapter.getJcrItem().getPath(), null)));
102
103 getUiContext().openNotification(MessageStyleTypeEnum.INFO, true, getI18n().translate("actions.copyComponent.successComponentCopied"));
104 }
105
106 getEventBus().fireEvent(new ContentChangedEvent(itemId));
107 } catch (RepositoryException | ContentClipboardException e) {
108 throw new ActionExecutionException(getI18n().translate("actions.copyComponent.failure"));
109 }
110 }
111 }