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.resources.app.action;
35
36 import info.magnolia.jcr.RuntimeRepositoryException;
37 import info.magnolia.jcr.util.NodeTypes;
38 import info.magnolia.jcr.util.NodeUtil;
39 import info.magnolia.jcr.util.PropertyUtil;
40 import info.magnolia.resourceloader.Resource;
41 import info.magnolia.resourceloader.jcr.JcrResourceOrigin;
42 import info.magnolia.resources.app.data.ResourceHelper;
43 import info.magnolia.resources.app.data.ResourcePropertySetFactory;
44 import info.magnolia.ui.CloseHandler;
45 import info.magnolia.ui.ValueContext;
46 import info.magnolia.ui.contentapp.Datasource;
47 import info.magnolia.ui.contentapp.action.CommitAction;
48 import info.magnolia.ui.contentapp.action.CommitActionDefinition;
49 import info.magnolia.ui.editor.EditorView;
50 import info.magnolia.ui.editor.FormView;
51 import info.magnolia.ui.observation.DatasourceObservation;
52
53 import java.util.Optional;
54
55 import javax.inject.Inject;
56 import javax.jcr.Node;
57 import javax.jcr.RepositoryException;
58
59 import org.apache.commons.lang3.StringUtils;
60
61
62
63
64 public class ResourceCommitAction extends CommitAction<Resource> implements ResourceHelper {
65 @Inject
66 public ResourceCommitAction(CommitActionDefinition definition,
67 CloseHandler closeHandler,
68 ValueContext<Resource> valueContext,
69 EditorView<Resource> form,
70 Datasource<Resource> datasource,
71 DatasourceObservation.Manual datasourceObservation) {
72 super(definition, closeHandler, valueContext, form, datasource, datasourceObservation);
73 }
74
75 @Override
76 protected void write() {
77 try {
78 Resource resource = getValueContext().getSingleOrThrow();
79 Node rootNode = getJcrNode(resource.getOrigin().getRoot()).orElseThrow(() -> new IllegalStateException("Can't " +
80 "retrieve root node from " + resource));
81
82 Node parent = NodeUtil.createPath(rootNode, StringUtils.substringBeforeLast(resource.getPath(), "/"), NodeTypes.Folder.NAME);
83 Node childNode = NodeUtil.createPath(parent, StringUtils.substringAfterLast(resource.getPath(), "/"),
84 NodeTypes.Content.NAME);
85 Optional<String> contentValue = ((FormView<Resource>) getForm()).getPropertyValue(ResourcePropertySetFactory.CONTENT);
86
87 if (contentValue.isPresent()) {
88 PropertyUtil.setProperty(childNode, JcrResourceOrigin.TEXT_PROPERTY, contentValue.get());
89 NodeTypes.LastModified.update(childNode);
90 childNode.getSession().save();
91 getDatasourceObservation().trigger();
92 }
93 } catch (RepositoryException e) {
94 throw new RuntimeRepositoryException(e);
95 }
96 }
97 }