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.ui.contentapp.setup.for5_3;
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.module.InstallContext;
40 import info.magnolia.module.delta.NodeVisitorTask;
41 import info.magnolia.repository.RepositoryConstants;
42
43 import javax.jcr.Node;
44 import javax.jcr.Property;
45 import javax.jcr.RepositoryException;
46
47 import org.apache.commons.lang3.StringUtils;
48 import org.slf4j.Logger;
49 import org.slf4j.LoggerFactory;
50
51
52
53
54
55
56
57 public class MigrateAvailabilityRulesTask extends NodeVisitorTask {
58
59 private static final Logger log = LoggerFactory.getLogger(MigrateAvailabilityRulesTask.class);
60
61 protected static final String RULE_CLASS = "ruleClass";
62 protected static final String RULES = "rules";
63
64 public MigrateAvailabilityRulesTask(String path) {
65 super("Migrate availability rules", "Substitute availability rule class property with multiple availability rule definitions", RepositoryConstants.CONFIG, path);
66 }
67
68 public MigrateAvailabilityRulesTask() {
69 this("/");
70 }
71
72 @Override
73 protected boolean nodeMatches(Node node) {
74 try {
75 return node.getPrimaryNodeType().getName().equals(NodeTypes.ContentNode.NAME) && node.getName().equals("availability");
76 } catch (RepositoryException e) {
77 log.error("Couldn't evaluate visited node's name or node-type", e);
78 }
79 return false;
80 }
81
82 @Override
83 protected void operateOnNode(InstallContext installContext, Node node) {
84 try {
85 if (node.hasProperty(RULE_CLASS)) {
86 Property ruleClassProperty = node.getProperty(RULE_CLASS);
87 String ruleClass = ruleClassProperty.getString();
88
89 Node ruleNode = NodeUtil.createPath(node, RULES + "/" + resolveRuleName(ruleClass), NodeTypes.ContentNode.NAME);
90 ruleNode.setProperty("implementationClass", ruleClass);
91
92 ruleClassProperty.remove();
93 }
94 } catch (RepositoryException e) {
95 throw new RuntimeRepositoryException("Failed to migrate availability-rules.",e);
96 }
97 }
98
99 private String resolveRuleName(String ruleClass) {
100 return StringUtils.substringAfterLast(ruleClass, ".");
101 }
102 }