protected void doUpdateCollection()

in src/main/java/org/apache/jackrabbit/ocm/manager/collectionconverter/impl/ResidualNodesCollectionConverterImpl.java [88:131]


    protected void doUpdateCollection(Session session, Node parentNode,
            CollectionDescriptor collectionDescriptor,
            ManageableObjects objects) throws RepositoryException {

        String jcrName = getCollectionJcrName(collectionDescriptor);
        if (!(objects instanceof ManageableMap)) {
            for (NodeIterator ni=parentNode.getNodes(jcrName); ni.hasNext(); ) {
                ni.nextNode().remove();
            }
            return;
        }

        Map map = (Map) objects.getObjects();
        Set updatedItems = new HashSet();
        for (Iterator ei=map.entrySet().iterator(); ei.hasNext(); ) {
            Map.Entry entry = (Map.Entry) ei.next();
            String elementJcrName = String.valueOf(entry.getKey());
            Object item = entry.getValue();

            // Update existing JCR Nodes
            if (parentNode.hasNode(elementJcrName)) {
                objectConverter.update(session, parentNode, elementJcrName, item);
            }
            else {
                // Add new collection elements
                objectConverter.insert(session, parentNode, elementJcrName, item);
            }

            updatedItems.add(elementJcrName);
        }

        // Delete JCR nodes that are not present in the collection
        NodeIterator nodeIterator = parentNode.getNodes(jcrName);
        List removeNodes = new ArrayList();
        while (nodeIterator.hasNext()) {
            Node child = nodeIterator.nextNode();
            if (!updatedItems.contains(child.getName())) {
                removeNodes.add(child);
            }
        }
        for(int i = 0; i < removeNodes.size(); i++) {
            ((Node) removeNodes.get(i)).remove();
        }
    }