duke@1: package com.sun.tools.javac.zip; duke@1: duke@1: import java.io.File; duke@1: duke@1: public final class ZipFileIndexEntry implements Comparable { duke@1: public static final ZipFileIndexEntry[] EMPTY_ARRAY = {}; duke@1: duke@1: // Directory related duke@1: String dir; duke@1: boolean isDir; duke@1: duke@1: // File related duke@1: String name; duke@1: duke@1: int offset; duke@1: int size; duke@1: int compressedSize; duke@1: long javatime; duke@1: duke@1: private int nativetime; duke@1: duke@1: public ZipFileIndexEntry(String path) { duke@1: int separator = path.lastIndexOf(File.separatorChar); duke@1: if (separator == -1) { duke@1: dir = "".intern(); duke@1: name = path; duke@1: } else { duke@1: dir = path.substring(0, separator).intern(); duke@1: name = path.substring(separator + 1); duke@1: } duke@1: } duke@1: duke@1: public ZipFileIndexEntry(String directory, String name) { duke@1: this.dir = directory.intern(); duke@1: this.name = name; duke@1: } duke@1: duke@1: public String getName() { duke@1: if (dir == null || dir.length() == 0) { duke@1: return name; duke@1: } duke@1: duke@1: StringBuilder sb = new StringBuilder(); duke@1: sb.append(dir); duke@1: sb.append(File.separatorChar); duke@1: sb.append(name); duke@1: return sb.toString(); duke@1: } duke@1: duke@1: public String getFileName() { duke@1: return name; duke@1: } duke@1: duke@1: public long getLastModified() { duke@1: if (javatime == 0) { duke@1: javatime = dosToJavaTime(nativetime); duke@1: } duke@1: return javatime; duke@1: } duke@1: duke@1: // From java.util.zip duke@1: private static long dosToJavaTime(int nativetime) { duke@1: // Bootstrap build problems prevent me from using the code directly duke@1: // Convert the raw/native time to a long for now duke@1: return (long)nativetime; duke@1: } duke@1: duke@1: void setNativeTime(int natTime) { duke@1: nativetime = natTime; duke@1: } duke@1: duke@1: public boolean isDirectory() { duke@1: return isDir; duke@1: } duke@1: duke@1: public int compareTo(ZipFileIndexEntry other) { duke@1: String otherD = other.dir; duke@1: if (dir != otherD) { duke@1: int c = dir.compareTo(otherD); duke@1: if (c != 0) duke@1: return c; duke@1: } duke@1: return name.compareTo(other.name); duke@1: } duke@1: duke@1: duke@1: public String toString() { duke@1: return isDir ? ("Dir:" + dir + " : " + name) : duke@1: (dir + ":" + name); duke@1: } duke@1: }