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.detail.action;
35
36 import info.magnolia.jcr.util.NodeTypes;
37 import info.magnolia.pages.app.detail.PageEditorStatus;
38 import info.magnolia.ui.ValueContext;
39 import info.magnolia.ui.api.action.AbstractAction;
40 import info.magnolia.ui.observation.DatasourceObservation;
41 import info.magnolia.ui.vaadin.gwt.client.shared.AbstractElement;
42 import info.magnolia.ui.vaadin.gwt.client.shared.AreaElement;
43 import info.magnolia.ui.vaadin.gwt.client.shared.ComponentElement;
44 import info.magnolia.ui.vaadin.gwt.client.shared.PageElement;
45
46 import javax.inject.Inject;
47 import javax.jcr.Node;
48 import javax.jcr.RepositoryException;
49
50 import org.apache.commons.lang3.StringUtils;
51
52 import com.machinezoo.noexception.Exceptions;
53
54
55
56
57
58
59 public class DeleteElementAction<D extends DeleteElementActionDefinition> extends AbstractAction<D> {
60
61 private final ValueContext<Node> valueContext;
62 private final DatasourceObservation.Manual datasourceObservation;
63 private final PageEditorStatus pageEditorStatus;
64
65 @Inject
66 public DeleteElementAction(D definition,
67 ValueContext<Node> valueContext,
68 DatasourceObservation.Manual datasourceObservation,
69 PageEditorStatus pageEditorStatus) {
70 super(definition);
71 this.valueContext = valueContext;
72 this.datasourceObservation = datasourceObservation;
73 this.pageEditorStatus = pageEditorStatus;
74 }
75
76 @Override
77 public void execute() {
78 valueContext.getSingle()
79 .ifPresent(Exceptions.wrap().consumer(node -> {
80 Node parent = node.getParent();
81 node.remove();
82 node.getSession().save();
83 pageEditorStatus.setSelectedElement(getElementFrom(parent));
84 datasourceObservation.trigger();
85 }));
86 }
87
88 protected AbstractElement getElementFrom(Node node) throws RepositoryException {
89 AbstractElement selectedElement;
90 String workspace = node.getSession().getWorkspace().getName();
91 switch (node.getPrimaryNodeType().getName()) {
92 case NodeTypes.Component.NAME:
93 selectedElement = new ComponentElement(workspace, node.getPath(), StringUtils.EMPTY);
94 break;
95 case NodeTypes.Area.NAME:
96 selectedElement = new AreaElement(workspace, node.getPath(), StringUtils.EMPTY, StringUtils.EMPTY);
97 break;
98 case NodeTypes.Page.NAME:
99 selectedElement = new PageElement(workspace, node.getPath(), StringUtils.EMPTY);
100 break;
101 default:
102 throw new IllegalArgumentException("Unidentified node type found: " + node.getPrimaryNodeType().getName());
103 }
104 return selectedElement;
105 }
106
107 protected DatasourceObservation.Manual getDatasourceObservation() {
108 return datasourceObservation;
109 }
110
111 protected PageEditorStatus getPageEditorStatus() {
112 return pageEditorStatus;
113 }
114 }