in src/main/java/org/apache/jackrabbit/ocm/manager/collectionconverter/impl/DefaultCollectionConverterImpl.java [306:346]
private void updateManagableMap(Session session, Node parentNode,
CollectionDescriptor collectionDescriptor,
ManageableObjects objects, String jcrName)
throws PathNotFoundException, RepositoryException,
VersionException, LockException, ConstraintViolationException,
ItemExistsException {
ClassDescriptor elementClassDescriptor = mapper.getClassDescriptorByClass( ReflectionUtils.forName(collectionDescriptor.getElementClassName()));
Node collectionNode = parentNode.getNode(jcrName);
Map map = (Map) objects.getObjects();
Map updatedItems = new HashMap();
for (Object key : map.keySet())
{
Object item = map.get(key);
// Update existing JCR Nodes
if (collectionNode.hasNode(key.toString())) {
objectConverter.update(session, collectionNode, key.toString(), item);
}
else {
// Add new collection elements
objectConverter.insert(session, collectionNode, key.toString(), item);
}
updatedItems.put(key.toString(), item);
}
// Delete the nodes that are not present in the Map
NodeIterator nodeIterator = collectionNode.getNodes();
List removeNodes = new ArrayList();
while (nodeIterator.hasNext()) {
Node child = nodeIterator.nextNode();
if (!updatedItems.containsKey(child.getName())) {
removeNodes.add(child);
}
}
for(int i = 0; i < removeNodes.size(); i++) {
((Node) removeNodes.get(i)).remove();
}
}