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.setup;
35
36 import info.magnolia.cms.util.QueryUtil;
37 import info.magnolia.jcr.util.NodeUtil;
38 import info.magnolia.module.InstallContext;
39 import info.magnolia.module.delta.AbstractRepositoryTask;
40 import info.magnolia.module.delta.TaskExecutionException;
41 import info.magnolia.repository.RepositoryConstants;
42 import info.magnolia.repository.RepositoryManager;
43
44 import java.util.List;
45 import java.util.stream.Collectors;
46
47 import javax.jcr.Node;
48 import javax.jcr.NodeIterator;
49 import javax.jcr.RepositoryException;
50 import javax.jcr.query.Query;
51
52 import org.apache.commons.lang3.StringUtils;
53
54
55
56
57 public class RenameVersionNodesTask extends AbstractRepositoryTask {
58
59 private final RepositoryManager repositoryManager;
60
61 public RenameVersionNodesTask(RepositoryManager repositoryManager) {
62 super("Rename version nodes", "Rename version nodes to avoid same name sibling conflicts");
63 this.repositoryManager = repositoryManager;
64 }
65
66 @Override
67 protected void doExecute(InstallContext installContext) throws RepositoryException, TaskExecutionException {
68 List<String> versionWorkspaces = repositoryManager.getWorkspaceNames().stream().filter(input -> StringUtils.endsWith(input, RepositoryConstants.VERSION_STORE)).collect(Collectors.toList());
69 for (String workspace : versionWorkspaces) {
70 String xpath = "//element(*, mgnl:folder)/element(*, mgnl:folder)/element(*, mgnl:folder)/*";
71 NodeIterator nodeIterator = QueryUtil.search(workspace, xpath, Query.XPATH);
72 while (nodeIterator.hasNext()) {
73 Node node = nodeIterator.nextNode();
74 if (node.getDepth() == 4 && !StringUtils.equals(node.getName(), node.getIdentifier())) {
75 NodeUtil.renameNode(node, node.getIdentifier());
76 }
77 }
78 }
79 }
80 }