in src/main/java/org/apache/sling/mongodb/impl/MongoDBResourceProvider.java [256:324]
public Iterator<Resource> listChildren(final Resource parent) {
final String[] info = this.extractResourceInfo(parent.getPath());
if ( info != null ) {
if ( info.length == 0 ) {
// all collections
final Set<String> names = new HashSet<String>(context.getDatabase().getCollectionNames());
names.removeAll(this.context.getFilterCollectionNames());
final Iterator<String> i = names.iterator();
return new Iterator<Resource>() {
public boolean hasNext() {
return i.hasNext();
}
public Resource next() {
final String name = i.next();
return new MongoDBCollectionResource(parent.getResourceResolver(), parent.getPath() + '/' + name);
}
public void remove() {
throw new UnsupportedOperationException("remove");
}
};
}
final DBCollection col = this.getCollection(info[0]);
if ( col != null ) {
final String pattern;
if ( info.length == 1 ) {
pattern = "^([^/])*$";
} else {
pattern = "^" + Pattern.quote(info[1]) + "/([^/])*$";
}
final DBObject query = QueryBuilder.start(getPROP_PATH()).regex(Pattern.compile(pattern)).get();
final DBCursor cur = col.find(query).
sort(BasicDBObjectBuilder.start(getPROP_PATH(), 1).get());
return new Iterator<Resource>() {
public boolean hasNext() {
return cur.hasNext();
}
public Resource next() {
final DBObject obj = cur.next();
final String objPath = obj.get(getPROP_PATH()).toString();
final int lastSlash = objPath.lastIndexOf('/');
final String name;
if (lastSlash == -1) {
name = objPath;
} else {
name = objPath.substring(lastSlash + 1);
}
return new MongoDBResource(parent.getResourceResolver(),
parent.getPath() + '/' + name,
info[0],
obj,
MongoDBResourceProvider.this);
}
public void remove() {
throw new UnsupportedOperationException("remove");
}
};
}
}
return null;
}