private void setNodeProperties()

in src/main/java/org/apache/sling/jcr/repoinit/impl/NodePropertiesVisitor.java [280:307]


    private void setNodeProperties(String nodePath, List<PropertyLine> propertyLines) throws RepositoryException {
        log.info("Setting properties on nodePath '{}'", nodePath);
        Node n = session.getNode(nodePath);
        for (PropertyLine pl : propertyLines) {
            final String pName = pl.getPropertyName();
            if (needToSetProperty(n, pl)) {
                final int newType =
                        PropertyType.valueFromName(pl.getPropertyType().name());
                Value[] newValues = convertToValues(pl.getPropertyValues());
                Property oldProperty = n.hasProperty(pName) ? n.getProperty(pName) : null;
                // only set property if type and/or values change
                // note: Node#setProperty() touches the node even if the property value is unchanged
                //       and thus needs to be explicitly avoided
                if (hasPropertyChange(oldProperty, newType, newValues)) {
                    if (newValues.length == 1 && !pl.isMultiple()) {
                        n.setProperty(pName, newValues[0], newType);
                    } else {
                        n.setProperty(pName, newValues, newType);
                    }
                }
            } else {
                log.info(
                        "Property '{}' already set on path '{}', existing value will not be overwritten in 'default' mode",
                        pName,
                        nodePath);
            }
        }
    }