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 @Override
83 protected void doExecute(InstallContext ctx) throws RepositoryException, TaskExecutionException {
84 final HierarchyManager hm = ctx.getConfigHierarchyManager();
85 if (!hm.isExist(originalParentNode)) {
86 ctx.warn("Can't find node at " + originalParentNode + ". Please create its replacement at " + newParentNode + " with a property named " + newPropertyName + " and a value of " + newDefaultValue);
87 return;
88 }
89 final Content originalNode = hm.getContent(originalParentNode);
90 final NodeData originalProp = originalNode.getNodeData(originalPropertyName);
91 final String currentValue = originalProp.getString();
92 if (originalProp.isExist()) {
93 originalProp.delete();
94 }
95
96 final String newValue;
97 if (StringUtils.isEmpty(currentValue) || currentValue.equals(originalDefaultValue)) {
98 newValue = newDefaultValue;
99 } else {
100 newValue = modifyCurrentValue(currentValue);
101 }
102
103 if (!hm.isExist(newParentNode)) {
104 ctx.warn("Can't find node at " + newParentNode + ". Please create it with a property named " + newPropertyName + " and a value of " + newDefaultValue);
105 return;
106 }
107 final Content newNode = hm.getContent(newParentNode);
108 if (newNode.hasNodeData(newPropertyName)) {
109 final NodeData newProp = newNode.getNodeData(newPropertyName);
110 ctx.info("Replacing property " + newPropertyName + " at " + newParentNode + " with value " + newValue + ". Previous value was " + newProp.getString());
111 newProp.setValue(newValue);
112 } else {
113 newNode.createNodeData(newPropertyName, newValue);
114 }
115 }
116
117 protected String modifyCurrentValue(String currentValue) {
118 return currentValue;
119 }
120 }