in src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProvider.java [128:169]
public void delete(final ResourceResolver resolver, final String path)
throws PersistenceException {
final String[] info = this.extractResourceInfo(path);
if ( info != null ) {
boolean deletedResource = false;
if ( !deletedResources.contains(path) ) {
final Resource rsrc = this.getResource(resolver, path, info);
if ( rsrc instanceof MongoDBResource ) {
this.deletedResources.add(path);
this.changedResources.remove(path);
final DBCollection col = this.getCollection(info[0]);
final String pattern = "^" + Pattern.quote(info[1]) + "/";
final DBObject query = QueryBuilder.start(getPROP_PATH()).regex(Pattern.compile(pattern)).get();
final DBCursor cur = col.find(query);
while ( cur.hasNext() ) {
final DBObject dbObj = cur.next();
final String childPath = info[0] + '/' + dbObj.get(getPROP_PATH());
this.deletedResources.add(childPath);
this.changedResources.remove(childPath);
}
deletedResource = true;
}
} else {
deletedResource = true;
}
if ( deletedResource ) {
final String prefix = path + "/";
final Iterator<Map.Entry<String, MongoDBResource>> i = this.changedResources.entrySet().iterator();
while ( i.hasNext() ) {
final Map.Entry<String, MongoDBResource> entry = i.next();
if ( entry.getKey().startsWith(prefix) ) {
i.remove();
}
}
return;
}
}
throw new PersistenceException("Unable to delete resource at {}" + path, null, path, null);
}