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.NodeData;
38 import info.magnolia.module.InstallContext;
39
40 import java.text.MessageFormat;
41
42 import javax.jcr.Node;
43 import javax.jcr.Property;
44 import javax.jcr.RepositoryException;
45
46 import org.apache.commons.lang.StringUtils;
47
48
49
50
51
52
53
54
55 public abstract class PropertyValuesTask extends AbstractTask {
56
57 public PropertyValuesTask(String name, String description) {
58 super(name, description);
59 }
60
61
62
63
64 protected void checkAndModifyPropertyValue(InstallContext ctx, Content node, String propertyName, String expectedCurrentValue, String newValue) throws RepositoryException {
65 final NodeData prop = node.getNodeData(propertyName);
66 final String currentvalue = prop.getString();
67 if (prop.isExist() && currentvalue.equals(expectedCurrentValue)) {
68 prop.setValue(newValue);
69 } else {
70 final String msg = format("Property \"{0}\" was expected to exist at {1} with value \"{2}\" but {3,choice,0#does not exist|1#has the value \"{4}\" instead}.",
71 propertyName, node.getHandle(), expectedCurrentValue,
72 Integer.valueOf(prop.isExist() ? 1 : 0), currentvalue);
73 ctx.warn(msg);
74 }
75 }
76
77
78
79
80 protected void checkAndModifyPartOfPropertyValue(InstallContext ctx, Node node, String propertyName, String expectedValue, String newValue) throws RepositoryException {
81 if(node.hasProperty(propertyName)){
82 final Property prop = node.getProperty(propertyName);
83 final String currentvalue = prop.getString();
84 if(currentvalue.contains(expectedValue)) {
85 prop.setValue(StringUtils.replace(currentvalue, expectedValue, newValue));
86 } else {
87 final String msg = format("Property \"{0}\" was expected to exist at {1} with part string \"{2}\" but does not contain this string.",
88 propertyName, node.getPath(), expectedValue);
89 ctx.warn(msg);
90 }
91 } else {
92 final String msg = format("Property \"{0}\" was expected to exist at {1} with part string \"{2}\" but does not exist.",
93 propertyName, node.getPath(), expectedValue);
94 ctx.warn(msg);
95 }
96 }
97
98 protected void checkOrCreateProperty(InstallContext ctx, Content node, String propertyName, String expectedValue) throws RepositoryException {
99 if (node.hasNodeData(propertyName)) {
100 final NodeData prop = node.getNodeData(propertyName);
101 final String currentvalue = prop.getString();
102 if (!currentvalue.equals(expectedValue)) {
103 final String msg = format("Property \"{0}\" was expected to exist at {1} with value \"{2}\" but {3,choice,0#does not exist|1#has the value \"{4}\" instead}.",
104 propertyName, node.getHandle(), expectedValue, Integer.valueOf(prop.isExist() ? 1 : 0),
105 currentvalue);
106 ctx.warn(msg);
107 }
108 } else {
109 node.createNodeData(propertyName, expectedValue);
110 }
111 }
112
113
114
115
116 protected void newProperty(InstallContext ctx, Content node, String propertyName, String value) throws RepositoryException {
117 newProperty(ctx, node, propertyName, value, true);
118 }
119
120 protected void newProperty(InstallContext ctx, Content node, String propertyName, String value, boolean log) throws RepositoryException {
121 final NodeData prop = node.getNodeData(propertyName);
122 if (!prop.isExist()) {
123 node.createNodeData(propertyName, value);
124 } else if (log) {
125 final String msg = format("Property \"{0}\" was expected not to exist at {1}, but exists with value \"{2}\" and was going to be created with value \"{3}\".",
126 propertyName, node.getHandle(), prop.getString(), value);
127 ctx.warn(msg);
128 }
129 }
130
131
132 protected String format(String pattern, Object arg0, Object arg1, Object arg2, Object arg3, Object arg4) {
133 return MessageFormat.format(pattern, new Object[]{arg0, arg1, arg2, arg3, arg4});
134 }
135
136 protected String format(String pattern, Object arg0, Object arg1, Object arg2, Object arg3) {
137 return format(pattern, arg0, arg1, arg2, arg3, null);
138 }
139
140 protected String format(String pattern, Object arg0, Object arg1, Object arg2) {
141 return format(pattern, arg0, arg1, arg2, null);
142 }
143 }