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.form.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 @Deprecated
71 public class SaveFormAction extends AbstractAction<SaveFormActionDefinition> {
72
73 private static final Logger log = LoggerFactory.getLogger(SaveFormAction.class);
74
75 protected final JcrNodeAdapter item;
76 protected final EditorCallback callback;
77 protected final EditorValidator validator;
78
79 public SaveFormAction(SaveFormActionDefinition definition, JcrNodeAdapter item, EditorCallback callback, EditorValidator validator) {
80 super(definition);
81 this.item = item;
82 this.callback = callback;
83 this.validator = validator;
84 }
85
86 @Override
87 public void execute() throws ActionExecutionException {
88 if (validateForm()) {
89 try {
90 final Node node = item.applyChanges();
91 setNodeName(node, item);
92 node.getSession().save();
93 } catch (final RepositoryException e) {
94 throw new ActionExecutionException(e);
95 }
96 callback.onSuccess(getDefinition().getName());
97 }
98 }
99
100 protected boolean validateForm() {
101 boolean isValid = validator.isValid();
102 validator.showValidation(!isValid);
103 if (!isValid) {
104 log.info("Validation error(s) occurred. No save performed.");
105 }
106 return isValid;
107 }
108
109
110
111
112
113
114 protected void setNodeName(Node node, JcrNodeAdapter item) throws RepositoryException {
115 String propertyName = "name";
116 if (node.hasProperty(propertyName) && !node.hasProperty(ModelConstants.JCR_NAME)) {
117 Property property = node.getProperty(propertyName);
118 String newNodeName = property.getString();
119 if (!node.getName().equals(Path.getValidatedLabel(newNodeName))) {
120 newNodeName = Path.getUniqueLabel(node.getSession(), node.getParent().getPath(), Path.getValidatedLabel(newNodeName));
121 item.setNodeName(newNodeName);
122 NodeUtil.renameNode(node, newNodeName);
123 }
124 }
125 }
126 }