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.importexport.postprocessors;
35
36 import info.magnolia.cms.core.version.VersionManager;
37 import info.magnolia.jcr.util.NodeTypes;
38 import info.magnolia.jcr.util.NodeUtil;
39 import info.magnolia.repository.RepositoryConstants;
40
41 import javax.jcr.ImportUUIDBehavior;
42 import javax.jcr.Node;
43 import javax.jcr.RepositoryException;
44 import javax.jcr.version.VersionHistory;
45
46
47
48
49 public class UpdateVersionMixinPostProcessor implements ImportPostProcessor {
50
51 private final int importMode;
52 private final VersionManager versionManager;
53
54 public UpdateVersionMixinPostProcessor(int importMode, VersionManager versionManager) {
55 this.importMode = importMode;
56 this.versionManager = versionManager;
57 }
58
59 @Override
60 public void postProcessNode(Node node) throws RepositoryException {
61 if (node.getSession().getWorkspace().getName().endsWith(RepositoryConstants.VERSION_STORE)) {
62 return;
63 }
64 NodeUtil.visit(node, nodeToVisit -> {
65 if (nodeToVisit.getName().startsWith(NodeTypes.MGNL_PREFIX) || nodeToVisit.getName().startsWith(NodeTypes.JCR_PREFIX)) {
66 return;
67 }
68
69 if (importMode == ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW) {
70 if (NodeUtil.hasMixin(nodeToVisit, NodeTypes.HasVersion.NAME)) {
71 nodeToVisit.removeMixin(NodeTypes.HasVersion.NAME);
72 }
73 } else {
74 VersionHistory versionHistory = versionManager.getVersionHistory(nodeToVisit);
75 if (versionHistory == null && NodeUtil.hasMixin(nodeToVisit, NodeTypes.HasVersion.NAME)) {
76 nodeToVisit.removeMixin(NodeTypes.HasVersion.NAME);
77 } else if (versionHistory != null && !NodeUtil.hasMixin(nodeToVisit, NodeTypes.HasVersion.NAME)) {
78 nodeToVisit.addMixin(NodeTypes.HasVersion.NAME);
79 }
80 }
81 });
82 }
83 }