*/
public void remove(QPath rootPath)
{
for (int i = items.size() - 1; i >= 0; i--)
{
ItemState item = items.get(i);
QPath qPath = item.getData().getQPath();
if (qPath.isDescendantOf(rootPath) || item.getAncestorToSave().isDescendantOf(rootPath)
|| item.getAncestorToSave().equals(rootPath) || qPath.equals(rootPath))
{
items.remove(i);
index.remove(item.getData().getIdentifier());
index.remove(item.getData().getQPath());
index.remove(new ParentIDQPathBasedKey(item));
index.remove(new IDStateBasedKey(item.getData().getIdentifier(), item.getState()));
childNodesInfo.remove(item.getData().getIdentifier());
lastChildNodeStates.remove(item.getData().getIdentifier());
lastChildPropertyStates.remove(item.getData().getIdentifier());
if (item.isNode() && item.isPersisted())
{
int childInfo[] = childNodesInfo.get(item.getData().getParentIdentifier());
if (childInfo != null)
{
if (item.isDeleted())
{
++childInfo[CHILD_NODES_COUNT_INDEX];
}
else if (item.isAdded())
{
--childInfo[CHILD_NODES_COUNT_INDEX];
}
childNodesInfo.put(item.getData().getParentIdentifier(), childInfo);
}
}
if (item.getData().isNode())
{
Map<String, ItemState> children = lastChildNodeStates.get(item.getData().getParentIdentifier());
if (children != null)
children.remove(item.getData().getIdentifier());
}
else
{
Map<String, ItemState> children = lastChildPropertyStates.get(item.getData().getParentIdentifier());
if (children != null)
children.remove(item.getData().getIdentifier());
}
}
}
}