private ManifestEntry buildEntry()

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
            );
        }