in genie-web/src/main/java/com/netflix/genie/web/resources/writers/DefaultDirectoryWriter.java [187:242]
protected Directory getDirectory(final File directory, final String requestUrl, final boolean includeParent) {
if (!directory.isDirectory()) {
throw new IllegalArgumentException("Input directory is not a valid directory. Unable to continue.");
}
if (StringUtils.isBlank(requestUrl)) {
throw new IllegalArgumentException("No request url entered. Unable to continue.");
}
final Directory dir = new Directory();
if (includeParent) {
final Entry parent = new Entry();
String url = requestUrl;
if (url.charAt(url.length() - 1) == '/') {
url = url.substring(0, url.length() - 2);
}
// Rip off the last directory
url = url.substring(0, url.lastIndexOf('/'));
parent.setName("../");
parent.setUrl(url);
parent.setSize(0L);
parent.setLastModified(Instant.ofEpochMilli(directory.getParentFile().getAbsoluteFile().lastModified()));
dir.setParent(parent);
}
final File[] files = directory.listFiles();
dir.setDirectories(Lists.newArrayList());
dir.setFiles(Lists.newArrayList());
final String baseURL = requestUrl.endsWith("/") ? requestUrl : requestUrl + "/";
if (files != null) {
for (final File file : files) {
final Entry entry = new Entry();
entry.setLastModified(Instant.ofEpochMilli(file.getAbsoluteFile().lastModified()));
if (file.isDirectory()) {
entry.setName(file.getName() + "/");
entry.setUrl(baseURL + file.getName() + "/");
entry.setSize(0L);
dir.getDirectories().add(entry);
} else {
entry.setName(file.getName());
entry.setUrl(baseURL + file.getName());
entry.setSize(file.getAbsoluteFile().length());
dir.getFiles().add(entry);
}
}
}
dir.getDirectories().sort(
Comparator.comparing(Entry::getName)
);
dir.getFiles().sort(
Comparator.comparing(Entry::getName)
);
return dir;
}