src/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java

Print this page




  81             invalidateFileCache();
  82         }
  83     }
  84 
  85     /**
  86      * This method is used to interrupt file loading thread.
  87      */
  88     public void invalidateFileCache() {
  89         if (loadThread != null) {
  90             loadThread.interrupt();
  91             loadThread.cancelRunnables();
  92             loadThread = null;
  93         }
  94     }
  95 
  96     public Vector<File> getDirectories() {
  97         synchronized(fileCache) {
  98             if (directories != null) {
  99                 return directories;
 100             }
 101             Vector fls = getFiles();
 102             return directories;
 103         }
 104     }
 105 
 106     public Vector<File> getFiles() {
 107         synchronized(fileCache) {
 108             if (files != null) {
 109                 return files;
 110             }
 111             files = new Vector<File>();
 112             directories = new Vector<File>();
 113             directories.addElement(filechooser.getFileSystemView().createFileObject(
 114                 filechooser.getCurrentDirectory(), "..")
 115             );
 116 
 117             for (int i = 0; i < getSize(); i++) {
 118                 File f = fileCache.get(i);
 119                 if (filechooser.isTraversable(f)) {
 120                     directories.add(f);
 121                 } else {


 300                                 return null;
 301                             }
 302                             return new DoChangeContents(newFileCache.subList(start, end), start, null, 0, fid);
 303                         }
 304                     } else if (newSize < oldSize) {
 305                         //see if interval is removed
 306                         int start = -1;
 307                         int end = -1;
 308                         for (int i = 0; i < newSize; i++) {
 309                             if (!newFileCache.get(i).equals(fileCache.get(i))) {
 310                                 start = i;
 311                                 end = i + oldSize - newSize;
 312                                 break;
 313                             }
 314                         }
 315                         if (start >= 0 && end > start
 316                             && fileCache.subList(end, oldSize).equals(newFileCache.subList(start, newSize))) {
 317                             if (isInterrupted()) {
 318                                 return null;
 319                             }
 320                             return new DoChangeContents(null, 0, new Vector(fileCache.subList(start, end)), start, fid);
 321                         }
 322                     }
 323                     if (!fileCache.equals(newFileCache)) {
 324                         if (isInterrupted()) {
 325                             cancelRunnables(runnables);
 326                         }
 327                         return new DoChangeContents(newFileCache, 0, fileCache, 0, fid);
 328                     }
 329                     return null;
 330                 }
 331             });
 332 
 333             if (doChangeContents != null) {
 334                 runnables.addElement(doChangeContents);
 335                 SwingUtilities.invokeLater(doChangeContents);
 336             }
 337         }
 338 
 339 
 340         public void cancelRunnables(Vector<DoChangeContents> runnables) {




  81             invalidateFileCache();
  82         }
  83     }
  84 
  85     /**
  86      * This method is used to interrupt file loading thread.
  87      */
  88     public void invalidateFileCache() {
  89         if (loadThread != null) {
  90             loadThread.interrupt();
  91             loadThread.cancelRunnables();
  92             loadThread = null;
  93         }
  94     }
  95 
  96     public Vector<File> getDirectories() {
  97         synchronized(fileCache) {
  98             if (directories != null) {
  99                 return directories;
 100             }
 101             Vector<File> fls = getFiles();
 102             return directories;
 103         }
 104     }
 105 
 106     public Vector<File> getFiles() {
 107         synchronized(fileCache) {
 108             if (files != null) {
 109                 return files;
 110             }
 111             files = new Vector<File>();
 112             directories = new Vector<File>();
 113             directories.addElement(filechooser.getFileSystemView().createFileObject(
 114                 filechooser.getCurrentDirectory(), "..")
 115             );
 116 
 117             for (int i = 0; i < getSize(); i++) {
 118                 File f = fileCache.get(i);
 119                 if (filechooser.isTraversable(f)) {
 120                     directories.add(f);
 121                 } else {


 300                                 return null;
 301                             }
 302                             return new DoChangeContents(newFileCache.subList(start, end), start, null, 0, fid);
 303                         }
 304                     } else if (newSize < oldSize) {
 305                         //see if interval is removed
 306                         int start = -1;
 307                         int end = -1;
 308                         for (int i = 0; i < newSize; i++) {
 309                             if (!newFileCache.get(i).equals(fileCache.get(i))) {
 310                                 start = i;
 311                                 end = i + oldSize - newSize;
 312                                 break;
 313                             }
 314                         }
 315                         if (start >= 0 && end > start
 316                             && fileCache.subList(end, oldSize).equals(newFileCache.subList(start, newSize))) {
 317                             if (isInterrupted()) {
 318                                 return null;
 319                             }
 320                             return new DoChangeContents(null, 0, new Vector<>(fileCache.subList(start, end)), start, fid);
 321                         }
 322                     }
 323                     if (!fileCache.equals(newFileCache)) {
 324                         if (isInterrupted()) {
 325                             cancelRunnables(runnables);
 326                         }
 327                         return new DoChangeContents(newFileCache, 0, fileCache, 0, fid);
 328                     }
 329                     return null;
 330                 }
 331             });
 332 
 333             if (doChangeContents != null) {
 334                 runnables.addElement(doChangeContents);
 335                 SwingUtilities.invokeLater(doChangeContents);
 336             }
 337         }
 338 
 339 
 340         public void cancelRunnables(Vector<DoChangeContents> runnables) {