1 21 22 package org.armedbear.j; 23 24 import gnu.regexp.REMatch; 25 import java.text.SimpleDateFormat ; 26 import java.util.Date ; 27 28 public final class DirectoryEntry 29 { 30 private String name; 31 private long date; 32 private long size; 33 private boolean isDirectory; 34 private boolean isLink; 35 private String linkedTo; 36 private boolean isMarked; 37 38 private final String string; 40 41 private static final String DIR = " <DIR>"; 42 private static final int DIRLENGTH = DIR.length(); 43 private static final String DATEFORMAT = "MMM dd yyyy HH:mm"; 44 private static SimpleDateFormat dateFormatter = 45 new SimpleDateFormat (DATEFORMAT); 46 47 private DirectoryEntry(String string, char firstChar) 49 { 50 this.string = string; 51 if (firstChar == 'd') 52 isDirectory = true; 53 else if (firstChar == 'l') 54 isLink = true; 55 size = -1; 56 } 57 58 public DirectoryEntry(String name, long date, long size) 60 { 61 this.name = name; 62 this.date = date; 63 this.size = size; 64 string = null; 65 } 66 67 public DirectoryEntry(String name, long date, long size, boolean isDirectory) 69 { 70 this.name = name; 71 this.date = date; 72 this.size = size; 73 this.isDirectory = isDirectory; 74 string = null; 75 } 76 77 public static DirectoryEntry getDirectoryEntry(String s, 81 DirectoryFilenameFilter filter) 82 { 83 if (s.length() == 0) 84 return null; 85 final char c = s.charAt(0); 88 if ("-dlcbsp".indexOf(c) < 0) 89 return null; 90 if (c == 'l' && s.startsWith("ls ")) 91 return null; 92 if (filter != null) { 93 if (c != 'd' && !filter.accepts(getName(s))) 94 return null; 95 } 96 return new DirectoryEntry(s, c); 97 } 98 99 public static String getName(String s) 101 { 102 int end = s.indexOf(" -> "); 104 if (end >= 0) 105 s = s.substring(0, end); 106 REMatch match = Directory.getNativeMoveToFilenameRegExp().getMatch(s); 107 if (match != null) 108 return s.substring(match.getEndIndex()); 109 Log.error("DirectoryEntry.getName returning null s = |" + s + "|"); 110 return null; 111 } 112 113 public static int getNameColumn(String s) 114 { 115 int end = s.indexOf(" -> "); 117 if (end >= 0) 118 s = s.substring(0, end); 119 REMatch match = Directory.getNativeMoveToFilenameRegExp().getMatch(s); 120 if (match != null) 121 return match.getEndIndex(); 122 return 0; 123 } 124 125 public final String extractName() 126 { 127 if (name == null && string != null) 128 name = getName(string); 129 return name; 130 } 131 132 public final String extractName(int nameColumn) 134 { 135 if (name != null) 136 return name; if (string == null) 138 return null; 139 if (nameColumn > 0 && nameColumn < string.length()) { 140 String s = string; 141 int end = s.indexOf(" -> "); 143 if (end >= 0) 144 s = s.substring(0, end); 145 if (s.charAt(nameColumn-1) == ' ') 146 if (!Character.isWhitespace(s.charAt(nameColumn))) 147 return name = s.substring(nameColumn); 148 } 149 return getName(string); 151 } 152 153 public final String getName() 154 { 155 return name; 156 } 157 158 public final long getDate() 159 { 160 return date; 161 } 162 163 public final long getSize() 164 { 165 return size; 166 } 167 168 public final void setSize(long size) 169 { 170 this.size = size; 171 } 172 173 public final boolean isDirectory() 174 { 175 return isDirectory; 176 } 177 178 public final boolean isLink() 179 { 180 return isLink; 181 } 182 183 public final void setLinkedTo(String linkedTo) 184 { 185 this.linkedTo = linkedTo; 186 } 187 188 public final boolean isMarked() 189 { 190 return isMarked; 191 } 192 193 public final void setMarked(boolean b) 194 { 195 isMarked = b; 196 } 197 198 public final String getString() 199 { 200 return string; 201 } 202 203 public String toString() 204 { 205 String marked = isMarked ? "T " : " "; 206 if (string != null) 208 return marked.concat(string); 209 FastStringBuffer sb = new FastStringBuffer(256); 211 sb.append(marked); 212 if (isDirectory) { 213 sb.append(DIR); 214 } else { 215 String sizeString = String.valueOf(size); 216 for (int j = 0; j < DIRLENGTH - sizeString.length(); j++) 217 sb.append(' '); 218 sb.append(sizeString); 219 } 220 sb.append(' '); 221 String dateString = dateFormatter.format(new Date (date)); 222 sb.append(dateString); 223 sb.append(' '); 224 sb.append(name); 225 if (linkedTo != null) { 226 sb.append(" -> "); 227 sb.append(linkedTo); 228 } 229 return sb.toString(); 230 } 231 } 232 | Popular Tags |