in src/main/java/org/apache/jackrabbit/ocm/manager/impl/ObjectContentManagerImpl.java [431:472]
public void remove(Query query) {
try {
String jcrExpression = this.queryManager.buildJCRExpression(query);
log.debug("Remove Objects with expression : " + jcrExpression);
// Since only nodes are sufficient for us to remove,
// getObjects(query, language) method is not called here.
@SuppressWarnings("deprecation")
NodeIterator nodeIterator = getNodeIterator(jcrExpression, javax.jcr.query.Query.XPATH);
List nodes = new ArrayList();
while (nodeIterator.hasNext()) {
Node node = nodeIterator.nextNode();
if (node == null) {
// node has been removed possibly by another thread during iterating through the results
continue;
}
log.debug("Remove node : " + node.getPath());
// it is not possible to remove nodes from an NodeIterator
// So, we add the node found in a collection to remove them
// after
nodes.add(node);
}
// Remove all collection nodes
for (int i = 0; i < nodes.size(); i++) {
Node node = (Node) nodes.get(i);
checkIfNodeLocked(node.getPath());
try {
node.remove();
} catch (javax.jcr.RepositoryException re) {
throw new ObjectContentManagerException("Cannot remove node at path " + node.getPath() + " returned from query " + jcrExpression, re);
}
}
} catch (InvalidQueryException iqe) {
throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Invalid query expression", iqe);
} catch (RepositoryException e) {
throw new org.apache.jackrabbit.ocm.exception.RepositoryException("Impossible to get the object collection", e);
}
}