1 package net.suberic.pooka.gui.filechooser; 2 import javax.swing.*; 3 import java.io.*; 4 import net.suberic.pooka.Pooka; 5 import net.suberic.pooka.StoreInfo; 6 import net.suberic.pooka.FolderInfo; 7 import java.util.Vector ; 8 9 13 14 public class PookaFileSystemView 15 extends javax.swing.filechooser.FileSystemView { 16 17 StoreInfo[] storeList; 18 FolderInfoFileWrapper[] roots = null; 19 20 24 public PookaFileSystemView() { 25 Vector v = Pooka.getStoreManager().getStoreList(); 26 27 storeList = new StoreInfo[v.size()]; 28 for (int i = 0; i < v.size(); i++) { 29 storeList[i] = (StoreInfo) v.elementAt(i); 30 } 31 32 getRoots(); 33 } 34 35 38 public PookaFileSystemView(StoreInfo newStore) { 39 storeList = new StoreInfo[] { newStore }; 40 getLogger().info("creating new PookaFileSystemView for store " + newStore.getStoreID()); 41 42 getRoots(); 43 } 44 45 53 public File createFileObject(File dir, String filename) { 54 if (dir != null) 55 getLogger().info("calling createFileObject on directory " + dir.getName() + " (" + dir.getPath() + "), filename " + filename); 56 else 57 getLogger().info("calling createFileObject on directory null, filename " + filename); 58 59 if (dir != null && dir instanceof FolderInfoFileWrapper) 60 return ((FolderInfoFileWrapper)dir).getFileByName(filename); 61 else 62 return null; 63 } 64 65 68 public File createFileObject(String filename) { 69 70 74 getLogger().info("running createFileObject2 on filename '" + filename + "'"); 75 76 if (roots == null || roots.length == 0) { 77 getLogger().info("root == null"); 78 return null; 79 } 80 81 getLogger().info("root != null"); 82 83 if (filename.equals("/") || filename.equals("")) { 84 return roots[0]; 85 } 86 87 int firstSlash = filename.indexOf('/'); 88 String storeName = null; 89 String filePart = ""; 90 if (firstSlash > -1) { 91 storeName = filename.substring(0, firstSlash); 92 getLogger().info("store name is " + storeName); 93 if (firstSlash < filename.length()) { 94 filePart = filename.substring(firstSlash + 1); 95 getLogger().info("file name is " + filePart); 96 } 97 } else { 98 getLogger().info("store name is " + filename); 99 100 storeName = filename; 101 } 102 103 getLogger().info("store name is " + filename + ", file name is " + filePart); 104 105 FolderInfoFileWrapper currentRoot = findRoot(storeName); 106 if (currentRoot == null) { 107 getLogger().info("found no matching store root for " + storeName + "."); 108 return new File(filename); 109 } 110 111 File returnValue = currentRoot.getFileByName(filePart); 112 113 getLogger().info("returning " + returnValue + " for " + currentRoot + ".getFileByName(\"" + filePart + "\")"); 114 115 return returnValue; 116 117 } 118 119 123 128 129 132 public File createNewFolder(File containingDir) throws java.io.IOException { 133 throw new IOException (Pooka.getProperty("error.folderinfofilewrapper.cantcreate", "Cannot create new Folders here. Use Subscribe instead.")); 134 135 } 136 137 140 public File getChild(File parent, String filename) { 141 if (parent instanceof FolderInfoFileWrapper) { 142 return ((FolderInfoFileWrapper) parent).getChildFile(filename); 143 } else { 144 return new File(parent, filename); 145 } 146 } 147 148 151 public File getDefaultDirectory() { 152 getLogger().info("calling getDefaultDirectory()"); 153 154 return getDefaultRoot(); 155 } 156 157 160 public File[] getFiles(File dir, boolean useFileHiding) { 161 getLogger().info("running getFiles " + dir + ", " + useFileHiding + "."); 162 163 if (dir instanceof FolderInfoFileWrapper) { 164 getLogger().info("getFiles: returning dir.listFiles()"); 165 return ((FolderInfoFileWrapper)dir).listFiles(); 166 } else { 167 getLogger().info("getFiles: dir isn't a FFW."); 168 if (dir == null) { 169 getLogger().info("getFiles: dir is null; returning null."); 170 return null; } 172 173 175 getLogger().info("getFiles: just returning the root."); 176 177 File f = ((FolderInfoFileWrapper)getDefaultRoot()).getFileByName(dir.getAbsolutePath()); 178 179 if (f == null) { 180 getLogger().info("getFiles: tried returning the root, but got null. returning the root itself instead."); 181 return new FolderInfoFileWrapper[0]; 182 } 183 184 getLogger().info("getFiles: returning " + f + ".listFiles() for getFiles()"); 185 return f.listFiles(); 186 } 187 } 188 189 193 public File getHomeDirectory() { 194 getLogger().info("running getHomeDirectory()."); 195 196 return getDefaultRoot(); 197 } 198 199 202 public File getParentDirectory(File dir) { 203 getLogger().info("running getParentDirectory on " + dir); 204 205 if (dir == null) 206 return null; 208 if (! (dir instanceof FolderInfoFileWrapper)) { 209 if (roots != null && roots.length > 0) { 210 dir = createFileObject(dir.getPath()); 211 } else 212 return null; 214 } 215 if (dir == null) 216 return null; File returnValue = dir.getParentFile(); 218 219 return dir.getParentFile(); 220 } 221 222 225 public File[] getRoots() { 226 getLogger().info("calling getRoots() on PookaFileSystemView."); 227 228 if (roots != null) { 229 getLogger().info 230 ("root has already been set."); 231 return roots; 232 } 233 234 getLogger().info("setting folder f to store.getDefaultFolder()."); 235 roots = new FolderInfoFileWrapper[storeList.length]; 236 for (int i = 0; i < storeList.length; i++) { 237 roots[i] = new FolderInfoFileWrapper(storeList[i], null, storeList[i].getStoreID()); 238 } 239 return roots; 240 } 241 242 245 public boolean isHiddenFile(File f) { 246 return false; 247 } 248 249 252 public boolean isRoot(File f) { 253 if (f.getParentFile() == null || f.getParentFile() == f) 254 return true; 255 else 256 return false; 257 } 258 259 260 263 public Boolean isTraversable(File f) { 264 getLogger().info("pfsv: checking isTraversable on file " + f); 265 266 if (f != null && f instanceof FolderInfoFileWrapper) { 267 if (((FolderInfoFileWrapper) f).isDirectory()) 268 return new Boolean (true); 269 else 270 return new Boolean (false); 271 } else { 272 return new Boolean (false); 273 } 274 } 275 276 285 public boolean isDrive(File dir) { 286 return false; 287 } 288 289 298 public boolean isFloppyDrive(File dir) { 299 return false; 300 } 301 302 311 public boolean isComputerNode(File dir) { 312 return false; 313 } 314 315 316 325 public boolean isParent(File folder, File file) { 326 if (folder == null || file == null) { 327 return false; 328 } else { 329 return folder.equals(file.getParentFile()); 330 } 331 } 332 333 340 public String getSystemTypeDescription(File f) { 341 if (f != null) { 342 return ("mail folder"); 343 } else { 344 return null; 345 } 346 } 347 348 359 public String getSystemDisplayName(File f) { 360 String name = null; 361 if (f != null) { 362 name = f.getName(); 363 } 364 return name; 365 } 366 367 378 public Icon getSystemIcon(File f) { 379 if (f != null) { 380 return UIManager.getIcon(f.isDirectory() ? "FileView.directoryIcon" : "FileView.fileIcon"); 381 } else { 382 return null; 383 } 384 } 385 386 387 388 389 public File getDefaultRoot() { 390 getLogger().info("running getDefaultRoot()."); 391 392 if (roots == null) { 393 File[] localRoots = getRoots(); 394 if (localRoots != null && localRoots.length > 0) 395 return localRoots[0]; 396 else 397 return null; 398 } 399 400 getLogger().info("returning " + roots[0] + " as default root."); 401 402 return roots[0]; 403 } 404 405 408 public FolderInfoFileWrapper findRoot(String name) { 409 for (int i = 0; i < roots.length; i++) { 410 if (roots[i].getPath().equals(name)) 411 return roots[i]; 412 } 413 return null; 414 } 415 416 419 public java.util.logging.Logger getLogger() { 420 return java.util.logging.Logger.getLogger("Pooka.debug.gui.filechooser"); 421 } 422 } 423 | Popular Tags |