in vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewImporter.java [1268:1322]
private boolean setUnprotectedProperties(@NotNull EffectiveNodeType effectiveNodeType, @NotNull Node node, @NotNull DocViewNode2 ni, boolean overwriteExistingProperties, @Nullable VersioningState vs) throws RepositoryException {
boolean isAtomicCounter = false;
for (String mixin : ni.getMixinTypes()) {
if ("mix:atomicCounter".equals(mixin)) {
isAtomicCounter = true;
}
}
boolean modified = false;
// add properties
for (DocViewProperty2 prop : ni.getProperties()) {
String name = npResolver.getJCRName(prop.getName());
if (prop != null && !isPropertyProtected(effectiveNodeType, prop) && (overwriteExistingProperties || !node.hasProperty(name)) && wspFilter.includesProperty(node.getPath() + "/" + npResolver.getJCRName(prop.getName()))) {
// check if property is allowed
try {
modified |= prop.apply(node);
} catch (RepositoryException e) {
try {
if (vs == null) {
throw e;
}
// try again with checked out node
vs.ensureCheckedOut();
modified |= prop.apply(node);
} catch (RepositoryException e1) {
// be lenient in case of mode != replace
if (wspFilter.getImportMode(node.getPath()) != ImportMode.REPLACE) {
log.warn("Error while setting property {} (ignore due to mode {}): {}", prop.getName(), wspFilter.getImportMode(node.getPath()), e1);
} else {
throw e;
}
}
}
}
}
// adjust oak atomic counter
if (isAtomicCounter && wspFilter.includesProperty(node.getPath() + "/" + npResolver.getJCRName(NAME_OAK_COUNTER))) {
long previous = 0;
if (node.hasProperty(NAME_OAK_COUNTER.toString())) {
previous = node.getProperty(NAME_OAK_COUNTER.toString()).getLong();
}
long counter = 0;
try {
counter = ni.getPropertyValue(NAME_OAK_COUNTER).map(Long::valueOf).orElse(0L);
} catch (NumberFormatException e) {
// ignore
}
if (counter != previous) {
node.setProperty("oak:increment", counter - previous);
modified = true;
}
}
return modified;
}