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.module.googlesitemap.app.actions;
35
36 import info.magnolia.cms.core.Path;
37 import info.magnolia.jcr.util.NodeTypes;
38 import info.magnolia.jcr.util.NodeUtil;
39 import info.magnolia.module.googlesitemap.SiteMapNodeTypes;
40 import info.magnolia.ui.admincentral.dialog.action.SaveDialogAction;
41 import info.magnolia.ui.form.EditorCallback;
42 import info.magnolia.ui.form.EditorValidator;
43 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
44
45 import javax.jcr.Node;
46 import javax.jcr.RepositoryException;
47
48 import com.vaadin.data.Item;
49
50
51
52
53 public class SaveSiteMapAction extends SaveDialogAction<SaveSiteMapActionDefinition> {
54
55 public SaveSiteMapAction(SaveSiteMapActionDefinition definition, Item item, EditorValidator validator, EditorCallback callback) {
56 super(definition, item, validator, callback);
57 }
58
59 @Override
60 protected void setNodeName(Node node, JcrNodeAdapter item) throws RepositoryException {
61 JcrNodeAdapter itemChanged = item;
62
63 String siteMapName = node.getProperty(SiteMapNodeTypes.SiteMap.DISPLAY_NAME).getString();
64
65 if (!node.getName().equals(siteMapName)) {
66 String newNodeName = generateUniqueNodeNameForAsset(node, siteMapName);
67 itemChanged.setNodeName(newNodeName);
68 NodeUtil.renameNode(node, newNodeName);
69 NodeTypes.LastModified.update(node);
70 }
71 }
72
73
74
75
76 private String generateUniqueNodeNameForAsset(final Node node, String newNodeName) throws RepositoryException {
77 return Path.getUniqueLabel(node.getSession(), node.getParent().getPath(), Path.getValidatedLabel(newNodeName));
78 }
79 }