final NodeId[] predecessorIds)
throws VersionException, InvalidItemStateException, UnsupportedRepositoryOperationException, RepositoryException {
final SessionInfoImpl sInfo = getSessionInfoImpl(sessionInfo);
executeWithLocalEvents(new Callable() {
public Object run() throws RepositoryException {
Node node = getNode(nodeId, sInfo);
Version version = null;
boolean cancel;
NamePathResolver resolver = sInfo.getNamePathResolver();
List<NodeId> l = Arrays.asList(mergeFailedIds);
Property mergeFailed = node.getProperty(resolver.getJCRName(NameConstants.JCR_MERGEFAILED));
for (Value value : mergeFailed.getValues()) {
String uuid = value.getString();
if (!l.contains(idFactory.createNodeId(uuid))) {
version = (Version) sInfo.getSession().getNodeByIdentifier(uuid);
break;
}
}
l = new ArrayList<NodeId>(predecessorIds.length);
l.addAll(Arrays.asList(predecessorIds));
Property predecessors = node.getProperty(resolver.getJCRName(NameConstants.JCR_PREDECESSORS));
for (Value value : predecessors.getValues()) {
NodeId vId = idFactory.createNodeId(value.getString());
l.remove(vId);
}
cancel = l.isEmpty();
if (cancel) {
node.cancelMerge(version);
} else {
node.doneMerge(version);
}
return null;
}
}, sInfo);
}