in src/main/java/org/apache/sling/fsprovider/internal/FsResourceProvider.java [174:222]
public Resource getResource(final @NotNull ResolveContext<Object> ctx,
final @NotNull String path,
final @NotNull ResourceContext resourceContext,
final @Nullable Resource parent) {
ResourceResolver resolver = ctx.getResourceResolver();
boolean askParentResourceProvider;
Resource rsrc = null;
if (fsMode == FsMode.FILEVAULT_XML) {
// filevault: check if path matches, if not fallback to parent resource provider
if (fileVaultMapper.pathMatches(path)) {
askParentResourceProvider = false;
rsrc = fileVaultMapper.getResource(resolver, path);
}
else {
askParentResourceProvider = true;
}
}
else {
// Sling-Initial-Content: mount folder/files an content files
askParentResourceProvider = this.overlayParentResourceProvider;
rsrc = fileMapper.getResource(resolver, path);
if (rsrc == null) {
rsrc = contentFileMapper.getResource(resolver, path);
}
}
if (askParentResourceProvider) {
// make sure directory resources from parent resource provider have higher precedence than from this provider
// this allows properties like sling:resourceSuperType to take effect
if ( rsrc == null || rsrc.getResourceMetadata().containsKey(RESOURCE_METADATA_FILE_DIRECTORY) ) {
// get resource from shadowed provider
final ResourceProvider rp = ctx.getParentResourceProvider();
final ResolveContext resolveContext = ctx.getParentResolveContext();
if ( rp != null && resolveContext != null ) {
Resource resourceFromParentResourceProvider = rp.getResource(resolveContext,
path,
resourceContext, parent);
if (resourceFromParentResourceProvider != null) {
rsrc = resourceFromParentResourceProvider;
}
}
}
}
return rsrc;
}