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.tools.jcr;
35
36 import info.magnolia.ui.api.action.AbstractAction;
37 import info.magnolia.ui.api.action.ActionDefinition;
38 import info.magnolia.ui.api.action.ActionExecutionException;
39 import info.magnolia.ui.api.context.UiContext;
40 import info.magnolia.ui.form.EditorValidator;
41 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
42 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
43
44 import javax.inject.Inject;
45 import javax.jcr.Node;
46 import javax.jcr.RepositoryException;
47
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50
51
52
53
54 public class JcrNodeFormSaveAction extends AbstractAction<ActionDefinition> {
55
56 private final static Logger log = LoggerFactory.getLogger(JcrNodeFormSaveAction.class);
57
58 private final UiContext uiContext;
59 private JcrNodeAdapter item;
60 private EditorValidator validator;
61
62 @Inject
63 public JcrNodeFormSaveAction(UiContext uiContext, ActionDefinition actionDefinition, JcrNodeAdapter item, EditorValidator validator) {
64 super(actionDefinition);
65 this.uiContext = uiContext;
66 this.item = item;
67 this.validator = validator;
68 }
69
70 @Override
71 public void execute() throws ActionExecutionException {
72 if (validateForm()) {
73 try {
74 final Node node = item.applyChanges();
75 node.getSession().save();
76 uiContext.openNotification(MessageStyleTypeEnum.INFO, true, getDefinition().getSuccessMessage());
77 } catch (RepositoryException e) {
78 log.error("Failed while fetching, applying changes or saving a a JCR node.");
79 uiContext.openNotification(MessageStyleTypeEnum.ERROR, false, e.getMessage());
80 }
81 }
82 }
83
84 private boolean validateForm() {
85 boolean isValid = validator.isValid();
86 validator.showValidation(!isValid);
87 return isValid;
88 }
89
90 }