in src/main/java/org/apache/sling/fsprovider/internal/mapper/ContentFileResourceMapper.java [70:124]
public Iterator<Resource> getChildren(final ResourceResolver resolver, final Resource parent) {
final String parentPath = parent.getPath();
final ContentFile parentContentFile = getFile(parentPath, null);
;
final List<Iterator<? extends Resource>> childIterators = new ArrayList<>(2);
// add children from parsed content
if (parentContentFile != null && parentContentFile.hasContent()) {
childIterators.add(IteratorUtils.transformedIterator(
parentContentFile.getContent().getChildren().keySet().iterator(),
new Transformer<String, Resource>() {
@Override
public Resource transform(final String name) {
return new ContentFileResource(resolver, parentContentFile.navigateToRelative(name));
}
}));
}
// add children from filesystem folder
File parentDir = new File(providerFile, StringUtils.removeStart(parentPath, providerRootPrefix));
if (fileStatCache.isDirectory(parentDir)) {
File[] files = parentDir.listFiles();
if (files != null) {
Arrays.sort(files, FileNameComparator.INSTANCE);
childIterators.add(IteratorUtils.transformedIterator(
IteratorUtils.arrayIterator(files), new Transformer<File, Resource>() {
@Override
public Resource transform(final File file) {
String path = parentPath + "/" + Escape.fileToResourceName(file.getName());
String filenameSuffix = contentFileExtensions.getSuffix(file);
if (filenameSuffix != null) {
path = StringUtils.substringBeforeLast(path, filenameSuffix);
ContentFile contentFile = new ContentFile(file, path, null, contentFileCache);
return new ContentFileResource(resolver, contentFile);
} else {
return new FileResource(
resolver,
path,
file,
contentFileExtensions,
contentFileCache,
fileStatCache);
}
}
}));
}
}
Iterator<Resource> children = IteratorUtils.chainedIterator(childIterators);
if (!children.hasNext()) {
return null;
}
return children;
}