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.dialog.action;
35
36 import info.magnolia.cms.core.Path;
37 import info.magnolia.jcr.util.NodeUtil;
38 import info.magnolia.ui.api.action.AbstractAction;
39 import info.magnolia.ui.api.action.ActionExecutionException;
40 import info.magnolia.ui.form.EditorCallback;
41 import info.magnolia.ui.form.EditorValidator;
42 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
43 import info.magnolia.ui.vaadin.integration.jcr.ModelConstants;
44
45 import javax.jcr.Node;
46 import javax.jcr.Property;
47 import javax.jcr.RepositoryException;
48
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51
52 import com.vaadin.v7.data.Item;
53
54
55
56
57
58
59
60
61 @Deprecated
62 public class SaveDialogAction<T extends SaveDialogActionDefinition> extends AbstractAction<T> {
63
64 private static final Logger log = LoggerFactory.getLogger(SaveDialogAction.class);
65
66 protected final Item item;
67 protected final EditorCallback callback;
68 protected final EditorValidator validator;
69
70 public SaveDialogAction(T definition, Item item, EditorValidator validator, EditorCallback callback) {
71 super(definition);
72 this.item = item;
73 this.callback = callback;
74 this.validator = validator;
75 }
76
77 @Override
78 public void execute() throws ActionExecutionException {
79 if (validateForm()) {
80 final JcrNodeAdapter../../../info/magnolia/ui/vaadin/integration/jcr/JcrNodeAdapter.html#JcrNodeAdapter">JcrNodeAdapter item = (JcrNodeAdapter) this.item;
81 try {
82 final Node node = item.applyChanges();
83 setNodeName(node, item);
84 node.getSession().save();
85 } catch (final RepositoryException e) {
86 throw new ActionExecutionException(e);
87 }
88 callback.onSuccess(getDefinition().getName());
89 }
90 }
91
92 protected boolean validateForm() {
93 boolean isValid = validator.isValid();
94 validator.showValidation(!isValid);
95 if (!isValid) {
96 log.info("Validation error(s) occurred. No save performed.");
97 }
98 return isValid;
99 }
100
101
102
103
104
105
106 protected void setNodeName(Node node, JcrNodeAdapter item) throws RepositoryException {
107 String propertyName = "name";
108 if (node.hasProperty(propertyName) && !node.hasProperty(ModelConstants.JCR_NAME)) {
109 Property property = node.getProperty(propertyName);
110 String newNodeName = property.getString();
111 if (!node.getName().equals(Path.getValidatedLabel(newNodeName))) {
112 newNodeName = Path.getUniqueLabel(node.getSession(), node.getParent().getPath(), Path.getValidatedLabel(newNodeName));
113 item.setNodeName(newNodeName);
114 NodeUtil.renameNode(node, newNodeName);
115 }
116 }
117 }
118 }