in core/src/main/java/org/apache/sling/cms/core/internal/operations/BulkReplaceOperation.java [148:193]
private boolean updateProperty(Resource resource, Pattern rfind, String find, String replace,
ModifiableValueMap properties, boolean updated, Entry<String, Object> entry) {
log.trace("Checking property {}@{}", resource.getPath(), entry.getKey());
if (properties.get(entry.getKey()) instanceof String) {
String value = (String) entry.getValue();
if (rfind == null && (value.contains(find) || value.equals(find))) {
value = value.replace(find, replace);
log.trace("Value after replacement: {}", value);
properties.put(entry.getKey(), value);
updated = true;
} else if (rfind != null) {
Matcher m = rfind.matcher(value);
if (m.find()) {
value = rfind.matcher(value).replaceAll(replace);
log.trace("Value after replacement: {}", value);
properties.put(entry.getKey(), value);
updated = true;
}
}
} else if (properties.get(entry.getKey()) instanceof String[]) {
log.trace("Found array value");
boolean arrUpdated = false;
String[] v = (String[]) entry.getValue();
for (int i = 0; i < v.length; i++) {
String value = v[i];
if (rfind == null && (value.contains(find) || value.equals(find))) {
v[i] = value.replace(find, replace);
arrUpdated = true;
} else if (rfind != null) {
Matcher m = rfind.matcher(value);
if (m.find()) {
v[i] = rfind.matcher(value).replaceAll(replace);
arrUpdated = true;
}
}
}
if (arrUpdated) {
if (log.isTraceEnabled()) {
log.trace("Value after replacement: {}", Arrays.toString(v));
}
properties.put(entry.getKey(), v);
updated = true;
}
}
return updated;
}