private static void createAndPutArchiveEntry()

in src/main/java/org/apache/netbeans/nbpackage/ArchiveUtils.java [437:477]


    private static void createAndPutArchiveEntry(ArchiveType archiveType, ArchiveOutputStream archiveOutputStream,
            Path directoryToArchive, Path filePathToArchive) throws IOException {
        switch (archiveType) {
            case ZIP: {
                ZipArchiveEntry entry = new ZipArchiveEntry(filePathToArchive.toFile(), getRelativePathString(filePathToArchive, directoryToArchive));
                entry.setUnixMode(getUnixMode(filePathToArchive));
                final boolean isSymbolicLink = Files.isSymbolicLink(filePathToArchive);
                if (isSymbolicLink) {
                    entry.setUnixMode(entry.getUnixMode() | ZIP_LINK_FLAG);
                }
                archiveOutputStream.putArchiveEntry(entry);
                if (isSymbolicLink) {
                    String linkData = Files.readSymbolicLink(filePathToArchive).toString().replaceAll("\\\\", "/");
                    archiveOutputStream.write(linkData.getBytes(StandardCharsets.UTF_8));
                } else {
                    Files.copy(filePathToArchive, archiveOutputStream);
                }
                break;
            }
            case TAR: {
                final boolean isSymbolicLink = Files.isSymbolicLink(filePathToArchive);
                TarArchiveEntry entry;
                if (isSymbolicLink) {
                    entry = new TarArchiveEntry(getRelativePathString(filePathToArchive, directoryToArchive), TarConstants.LF_SYMLINK);
                    entry.setLinkName(getRelativePathString(
                            filePathToArchive.resolve(Files.readSymbolicLink(filePathToArchive)), 
                            directoryToArchive));
                } else {
                    entry = new TarArchiveEntry(filePathToArchive.toFile(), getRelativePathString(filePathToArchive, directoryToArchive));
                }

                entry.setMode(getUnixMode(filePathToArchive));
                archiveOutputStream.putArchiveEntry(entry);

                if (!isSymbolicLink) {
                    Files.copy(filePathToArchive, archiveOutputStream);
                }
                break;
            }
        }
    }