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.framework.action;
35
36 import info.magnolia.i18nsystem.SimpleTranslator;
37 import info.magnolia.jcr.predicate.AbstractPredicate;
38 import info.magnolia.jcr.util.NodeTypes;
39 import info.magnolia.jcr.util.NodeUtil;
40 import info.magnolia.ui.api.action.ActionExecutor;
41 import info.magnolia.ui.api.context.UiContext;
42 import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnector;
43 import info.magnolia.ui.vaadin.integration.contentconnector.JcrContentConnector;
44 import info.magnolia.ui.vaadin.integration.contentconnector.NodeTypeDefinition;
45 import info.magnolia.ui.vaadin.integration.jcr.JcrItemAdapter;
46
47 import java.util.List;
48
49 import javax.inject.Inject;
50 import javax.jcr.Node;
51 import javax.jcr.RepositoryException;
52
53 import org.apache.commons.lang3.StringUtils;
54 import org.slf4j.Logger;
55 import org.slf4j.LoggerFactory;
56
57 import com.machinezoo.noexception.Exceptions;
58 import com.vaadin.v7.data.Item;
59
60
61
62
63
64
65
66 @Deprecated
67 public class DeleteConfirmationAction<D extends DeleteConfirmationActionDefinition> extends ConfirmationAction<D> {
68
69 private static final Logger log = LoggerFactory.getLogger(DeleteConfirmationAction.class);
70 private static final String NL = "<br />";
71
72 private ModifiedSubNodesWithNodeTypePredicate predicate = null;
73
74 @Inject
75 public DeleteConfirmationAction(D definition, List<? extends JcrItemAdapter> items, UiContext uiContext, ActionExecutor actionExecutor, SimpleTranslator i18n, ContentConnector contentConnector) {
76 super(definition, items, uiContext, actionExecutor, i18n, contentConnector);
77 if (contentConnector instanceof JcrContentConnector) {
78 this.predicate = new ModifiedSubNodesWithNodeTypePredicate(((JcrContentConnector) contentConnector).getContentConnectorDefinition().getNodeTypes());
79 }
80 }
81
82 @Override
83 protected String getConfirmationMessage() throws Exception {
84 if (predicate == null) {
85 return super.getConfirmationMessage();
86 }
87 StringBuilder label = new StringBuilder();
88
89
90 label.append(super.getConfirmationMessage());
91
92 boolean warningAlreadySet = false;
93 for (Item item : getItems()) {
94 JcrItemAdapternfo/magnolia/ui/vaadin/integration/jcr/JcrItemAdapter.html#JcrItemAdapter">JcrItemAdapter jcrItemAdapter = (JcrItemAdapter) item;
95 if (!jcrItemAdapter.isNode()) {
96 continue;
97 }
98 Node node = (Node) jcrItemAdapter.getJcrItem();
99 String modifiedSubNodesPaths = getModifiedSubNodesMessage(node);
100 if (StringUtils.isNotEmpty(modifiedSubNodesPaths)) {
101 if (!warningAlreadySet) {
102 label.append(NL).append(NL);
103 label.append(getSimpleTranslator().translate("confirmation.delete.modified.message"));
104 label.append(NL);
105 warningAlreadySet = true;
106 }
107 label.append(modifiedSubNodesPaths);
108 }
109 }
110 return label.toString();
111 }
112
113 private String getModifiedSubNodesMessage(Node parent) throws RepositoryException {
114 StringBuilder stringBuilder = new StringBuilder();
115 Iterable<Node> nodes = NodeUtil.collectAllChildren(parent, predicate);
116 for (Node node : nodes) {
117 stringBuilder.append(node.getPath());
118 stringBuilder.append(NL);
119 }
120 return stringBuilder.toString();
121 }
122
123 private static class ModifiedSubNodesWithNodeTypePredicate extends AbstractPredicate<Node> {
124
125 private final List<NodeTypeDefinition> nodeTypes;
126
127 private ModifiedSubNodesWithNodeTypePredicate(List<NodeTypeDefinition> nodeTypes) {
128 this.nodeTypes = nodeTypes;
129 }
130
131 @Override
132 public boolean evaluateTyped(Node node) {
133 return nodeTypes.stream()
134 .filter(Exceptions.wrap().predicate(nodeType -> NodeUtil.isNodeType(node, nodeType.getName())))
135 .findFirst()
136 .map(Exceptions.wrap().function(nodeType -> NodeTypes.Activatable.ACTIVATION_STATUS_MODIFIED == NodeTypes.Activatable.getActivationStatus(node)))
137 .orElse(false);
138 }
139 }
140 }