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.NodeUtil;
38 import info.magnolia.module.googlesitemap.GoogleSiteMapConfiguration;
39 import info.magnolia.ui.admincentral.dialog.action.SaveDialogAction;
40 import info.magnolia.ui.form.EditorCallback;
41 import info.magnolia.ui.form.EditorValidator;
42 import info.magnolia.ui.vaadin.integration.jcr.JcrNodeAdapter;
43
44 import javax.jcr.Node;
45 import javax.jcr.RepositoryException;
46
47 import org.apache.commons.lang.StringUtils;
48
49 import com.vaadin.data.Item;
50
51
52
53
54 public class SaveSiteMapAction extends SaveDialogAction<SaveSiteMapActionDefinition> {
55
56 public SaveSiteMapAction(SaveSiteMapActionDefinition definition, Item item, EditorValidator validator, EditorCallback callback) {
57 super(definition, item, validator, callback);
58 }
59
60 @Override
61 protected void setNodeName(Node node, JcrNodeAdapter item) throws RepositoryException {
62 JcrNodeAdapter itemChanged = item;
63
64 String siteMapName = StringUtils.EMPTY;
65 String propertyName = GoogleSiteMapConfiguration.SITE_MAP_DISPLAY_NAME_PROPERTY_NAME;
66 if (node.hasProperty(propertyName) && StringUtils.isNotBlank(node.getProperty(propertyName).getString())) {
67 siteMapName = node.getProperty(propertyName).getString();
68 }
69
70
71 if (StringUtils.isNotBlank(siteMapName)) {
72 node.setProperty("name", siteMapName);
73 if (!node.getName().equals(siteMapName)) {
74 String newNodeName = generateUniqueNodeNameForAsset(node, siteMapName);
75 itemChanged.setNodeName(newNodeName);
76 NodeUtil.renameNode(node, newNodeName);
77 }
78 }
79 }
80
81
82
83
84 private String generateUniqueNodeNameForAsset(final Node node, String newNodeName) throws RepositoryException {
85 return Path.getUniqueLabel(node.getSession(), node.getParent().getPath(), Path.getValidatedLabel(newNodeName));
86 }
87 }