private boolean updateProperty()

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;
    }