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.delta;
35
36 import info.magnolia.cms.core.Content;
37 import info.magnolia.cms.core.HierarchyManager;
38 import info.magnolia.cms.core.NodeData;
39 import info.magnolia.module.InstallContext;
40 import org.apache.commons.lang.StringUtils;
41
42 import javax.jcr.RepositoryException;
43
44
45
46
47
48
49
50
51
52
53
54
55
56 public class MoveAndRenamePropertyTask extends AbstractRepositoryTask {
57 private final String originalParentNode;
58 private final String originalPropertyName;
59 private final String originalDefaultValue;
60
61 private final String newParentNode;
62 private final String newPropertyName;
63 private final String newDefaultValue;
64
65 public MoveAndRenamePropertyTask(String name, String originalParentNode, String originalPropertyName, String newParentNode, String newPropertyName) {
66 this(name, originalParentNode, originalPropertyName, null, newParentNode, newPropertyName, null);
67 }
68
69 public MoveAndRenamePropertyTask(String name, String originalParentNode, String originalPropertyName, String originalDefaultValue, String newParentNode, String newPropertyName, String newDefaultValue) {
70 super(name, "The property at " + originalParentNode + "/" + originalPropertyName +
71 " is now at " + newParentNode + "/" + newPropertyName +
72 (originalDefaultValue != null ? (", and its default value is now \"" + newDefaultValue + "\" instead of \"" + originalDefaultValue + "\"") : "")
73 + ".");
74 this.originalParentNode = originalParentNode;
75 this.originalPropertyName = originalPropertyName;
76 this.originalDefaultValue = originalDefaultValue;
77 this.newParentNode = newParentNode;
78 this.newPropertyName = newPropertyName;
79 this.newDefaultValue = newDefaultValue;
80 }
81
82 protected void doExecute(InstallContext ctx) throws RepositoryException, TaskExecutionException {
83 final HierarchyManager hm = ctx.getConfigHierarchyManager();
84 if (!hm.isExist(originalParentNode)) {
85 ctx.warn("Can't find node at " + originalParentNode + ". Please create its replacement at " + newParentNode + " with a property named " + newPropertyName + " and a value of " + newDefaultValue);
86 return;
87 }
88 final Content originalNode = hm.getContent(originalParentNode);
89 final NodeData originalProp = originalNode.getNodeData(originalPropertyName);
90 final String currentValue = originalProp.getString();
91 if (originalProp.isExist()) {
92 originalProp.delete();
93 }
94
95 final String newValue;
96 if (StringUtils.isEmpty(currentValue) || currentValue.equals(originalDefaultValue)) {
97 newValue = newDefaultValue;
98 } else {
99 newValue = modifyCurrentValue(currentValue);
100 }
101
102 if (!hm.isExist(newParentNode)) {
103 ctx.warn("Can't find node at " + newParentNode + ". Please create it with a property named " + newPropertyName + " and a value of " + newDefaultValue);
104 return;
105 }
106 final Content newNode = hm.getContent(newParentNode);
107 if (newNode.hasNodeData(newPropertyName)) {
108 final NodeData newProp = newNode.getNodeData(newPropertyName);
109 ctx.info("Replacing property " + newPropertyName + " at " + newParentNode + " with value " + newValue + ". Previous value was " + newProp.getString());
110 newProp.setValue(newValue);
111 } else {
112 newNode.createNodeData(newPropertyName, newValue);
113 }
114 }
115
116 protected String modifyCurrentValue(String currentValue) {
117 return currentValue;
118 }
119 }