001: /*
002: * Created on Jan 12, 2006
003: *
004: * TODO To change the template for this generated file go to
005: * Window - Preferences - Java - Code Style - Code Templates
006: */
007: package org.enhydra.snapperPreviewer.business;
008:
009: import java.io.File;
010: import java.util.ArrayList;
011: import java.util.Iterator;
012: import java.util.List;
013:
014: /**
015: * @author Zoran Milakovic
016: *
017: * TODO To change the template for this generated type comment go to
018: * Window - Preferences - Java - Code Style - Code Templates
019: */
020:
021: public class FileDeleter extends Thread {
022:
023: private int minSleep = 1;
024:
025: private static List filesToDelete = new ArrayList();
026:
027: static FileDeleter fd = null;
028:
029: private FileDeleter() {
030: }
031:
032: /**
033: * Starts new FileDeleter thread,which will delete file.
034: *
035: * @param file
036: * file to be deleted.
037: */
038: public static void delete(File file) {
039: if (fd != null) {
040: if (!fd.isAlive()) {
041: fd = new FileDeleter();
042: fd.start();
043: }
044: synchronized (filesToDelete) {
045: if (!filesToDelete.contains(file))
046: filesToDelete.add(file);
047:
048: }
049: //System.out.println("Add file to delete: "+file.getAbsolutePath());
050: //System.out.println("filesToDelete.size(): "+filesToDelete.size());
051: } else {
052: fd = new FileDeleter();
053: synchronized (filesToDelete) {
054: filesToDelete.add(file);
055: }
056: //System.out.println("Add file to delete: "+file.getAbsolutePath());
057: //System.out.println("filesToDelete.size(): "+filesToDelete.size());
058: fd.start();
059: }
060: }
061:
062: public void run() {
063: while (filesToDelete.size() > 0) {
064: //System.out.println("filesToDelete.size(): "+filesToDelete.size());
065: boolean deleted = false;
066: List toDelete = new ArrayList();
067: synchronized (filesToDelete) {
068: Iterator iter = filesToDelete.iterator();
069: while (iter.hasNext()) {
070: File fileToDelete = (File) iter.next();
071: //System.out.println("Try to delete: "+fileToDelete.getAbsolutePath());
072: if (fileToDelete != null) {
073: if (fileToDelete.exists()) {
074: deleted = fileToDelete.delete();
075: if (deleted) {
076: toDelete.add(fileToDelete);
077: //System.out.println("DELETED: " + fileToDelete.getAbsolutePath());
078: }
079: } else {
080: toDelete.add(fileToDelete);
081: }
082: }
083: }
084: }
085:
086: //remove from list
087: Iterator iter = toDelete.iterator();
088: while (iter.hasNext()) {
089: filesToDelete.remove((File) iter.next());
090: }
091: toDelete.clear();
092:
093: try {
094: //wait for minSleep minutes, and try again
095: Thread.sleep(60000 * minSleep);
096: } catch (java.lang.InterruptedException e) {
097: //do nothing
098: //System.out.println("java.lang.InterruptedException catched...");
099: }
100: }
101:
102: //set fd to null
103: fd = null;
104:
105: }
106: }
|