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.module.InstallContext;
39 import info.magnolia.module.delta.NodeVisitorTask;
40 import info.magnolia.repository.RepositoryConstants;
41
42 import java.util.Collections;
43 import java.util.HashMap;
44 import java.util.Map;
45
46 import javax.jcr.Node;
47 import javax.jcr.RepositoryException;
48
49 import org.slf4j.Logger;
50 import org.slf4j.LoggerFactory;
51
52
53
54
55
56
57
58
59 public class ChangeAvailabilityRuleClassesTask extends NodeVisitorTask {
60
61 private static final Logger log = LoggerFactory.getLogger(ChangeAvailabilityRuleClassesTask.class);
62
63 private static final String RULE_CLASS = "ruleClass";
64
65 private Map<String, String> classMappings;
66
67 public ChangeAvailabilityRuleClassesTask(String path) {
68 super("Update rule classes to ui-framework", "This task changes availability@ruleClass properties for classes which have been moved from package info.magnolia.ui.api.availability to package info.magnolia.ui.framework.availability.", RepositoryConstants.CONFIG, path);
69 }
70
71 public ChangeAvailabilityRuleClassesTask() {
72 this("/");
73 }
74
75 @Override
76 protected boolean nodeMatches(Node node) {
77 try {
78 return node.getPrimaryNodeType().getName().equals(NodeTypes.ContentNode.NAME) && node.getName().equals("availability");
79 } catch (RepositoryException e) {
80 log.error("Couldn't evaluate visited node's name or node-type", e);
81 }
82 return false;
83 }
84
85 @Override
86 protected void operateOnNode(InstallContext installContext, Node node) {
87 try {
88 if (node.hasProperty(RULE_CLASS)) {
89 String classRulePropertyValue = node.getProperty(RULE_CLASS).getString();
90 if (getClassMapping().containsKey(classRulePropertyValue)) {
91 node.setProperty(RULE_CLASS, getClassMapping().get(classRulePropertyValue));
92 }
93 }
94 } catch (RepositoryException e) {
95 throw new RuntimeRepositoryException("Failed to change availability-rule-classes.", e);
96 }
97 }
98
99 private Map<String, String> getClassMapping() {
100 if (classMappings == null) {
101 classMappings = new HashMap<String, String>();
102 classMappings.put("info.magnolia.ui.api.availability.HasVersionsRule", "info.magnolia.ui.framework.availability.HasVersionsRule");
103 classMappings.put("info.magnolia.ui.api.availability.IsDeletedRule", "info.magnolia.ui.framework.availability.IsDeletedRule");
104 classMappings.put("info.magnolia.ui.api.availability.IsNotDeletedRule", "info.magnolia.ui.framework.availability.IsNotDeletedRule");
105 classMappings.put("info.magnolia.ui.api.availability.IsNotVersionedRule", "info.magnolia.ui.framework.availability.IsNotVersionedRule");
106 classMappings = Collections.unmodifiableMap(classMappings);
107 }
108 return classMappings;
109 }
110
111
112 }