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) {
|