public static <T> T getFromPathRecursively(Map<Path, T> pathToPartitionInfo, Path dir,
Map<Map<Path, T>, Map<Path, T>> cacheMap, boolean ignoreSchema, boolean ifPresent)
throws IOException {
T part = getFromPath(pathToPartitionInfo, dir);
if (part == null
&& (ignoreSchema
|| (dir.toUri().getScheme() == null || dir.toUri().getScheme().trim().equals(""))
|| FileUtils.pathsContainNoScheme(pathToPartitionInfo.keySet()))) {
Map<Path, T> newPathToPartitionInfo = null;
if (cacheMap != null) {
newPathToPartitionInfo = cacheMap.get(pathToPartitionInfo);
}
if (newPathToPartitionInfo == null) {
newPathToPartitionInfo = populateNewT(pathToPartitionInfo);
if (cacheMap != null) {
cacheMap.put(pathToPartitionInfo, newPathToPartitionInfo);
}
}
part = getFromPath(newPathToPartitionInfo, dir);
}
if (part != null || ifPresent) {
return part;
} else {
throw new IOException("cannot find dir = " + dir.toString()
+ " in pathToPartitionInfo: " + pathToPartitionInfo.keySet());
}
}