in genie-common-internal/src/main/java/com/netflix/genie/common/internal/dtos/DirectoryManifest.java [404:462]
private ManifestEntry buildEntry(
final Path entry,
final BasicFileAttributes attributes,
final boolean directory
) throws IOException {
final String path = this.root.relativize(entry).toString();
final Path fileName = entry.getFileName();
final String name = fileName == null
? EMPTY_STRING
: fileName.toString();
final Instant lastModifiedTime = attributes.lastModifiedTime().toInstant();
final Instant lastAccessTime = attributes.lastAccessTime().toInstant();
final Instant creationTime = attributes.creationTime().toInstant();
final long size = attributes.size();
String md5 = null;
String mimeType = null;
if (!directory) {
if (this.checksumFiles) {
try (InputStream data = Files.newInputStream(entry, StandardOpenOption.READ)) {
md5 = DigestUtils.md5Hex(data);
} catch (final IOException ioe) {
// For now MD5 isn't critical or required so we'll swallow errors here
log.error("Unable to create MD5 for {} due to error", entry, ioe);
}
}
mimeType = this.getMimeType(name, entry);
}
final Set<String> children = Sets.newHashSet();
if (directory) {
try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(entry)) {
for (final Path child : directoryStream) {
children.add(this.root.relativize(child).toString());
}
}
}
String parent = null;
if (StringUtils.isNotEmpty(path)) {
// Not the root
parent = this.root.relativize(entry.getParent()).toString();
}
return new ManifestEntry(
path,
name,
lastModifiedTime,
lastAccessTime,
creationTime,
directory,
size,
md5,
mimeType,
parent,
children
);
}