package jetbrains.mps.deepcompare; import java.util.Enumeration; import java.util.HashSet; import java.util.Set; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; /** * evgeny, 4/24/12 */ public class ZipFoldersReporter { private Set<String> folders = new HashSet<String>(); private Set<String> absentFolders = new HashSet<String>(); public ZipFoldersReporter(ZipFile file) { Enumeration<? extends ZipEntry> entries = file.entries(); while (entries.hasMoreElements()) { ZipEntry zipEntry = entries.nextElement(); String parentFolder = parentFolder(zipEntry.getName()); folders.add(parentFolder); } } public String report(String entryName) { String folder = parentFolder(entryName); if (folder == null || folders.contains(folder)) { return entryName; } if (absentFolders.contains(folder)) { return null; } String parentFolder = parentFolder(folder); while (parentFolder != null) { if (absentFolders.contains(parentFolder)) { return null; } if (folders.contains(parentFolder)) { break; } folder = parentFolder; parentFolder = parentFolder(folder); } absentFolders.add(folder); return folder + "/"; } private static String parentFolder(String name) { int i = name.lastIndexOf("/"); if (i >= 0) { return name.substring(0, i); } return null; } }