1 19 package org.columba.core.command; 20 21 import java.util.List ; 22 import java.util.Vector ; 23 24 import javax.swing.event.EventListenerList ; 25 26 import org.columba.core.base.Mutex; 27 import org.columba.core.base.SwingWorker.ThreadVar; 28 29 40 public class TaskManager { 41 44 private List <Worker> workerList; 45 46 50 protected Mutex workerListMutex; 51 52 55 protected EventListenerList listenerList = new EventListenerList (); 56 57 private static TaskManager instance = new TaskManager(); 58 59 62 private TaskManager() { 63 workerList = new Vector <Worker>(); 64 workerListMutex = new Mutex(); 65 } 66 67 public static TaskManager getInstance() { 68 return instance; 69 } 70 71 76 public Worker[] getWorkers() { 77 return workerList.toArray(new Worker[0]); 78 } 79 80 public boolean exists(Worker worker) { 81 try { 82 workerListMutex.lock(); 83 84 if (workerList.contains(worker)) 85 return true; 86 87 } finally { 88 workerListMutex.release(); 89 } 90 91 return false; 92 } 93 94 99 public int count() { 100 return workerList.size(); 101 } 102 103 108 public void register(Worker t) { 109 try { 110 workerListMutex.lock(); 111 112 workerList.add(t); 113 } finally { 114 workerListMutex.release(); 115 } 116 117 fireWorkerAdded(t); 118 } 119 120 125 public void unregister(ThreadVar tvar) { 126 try { 127 workerListMutex.lock(); 128 for (Worker _worker : workerList) { 129 if (tvar == _worker.getThreadVar()) { 130 workerList.remove(_worker); 131 fireWorkerRemoved(_worker); 132 break; 133 } 134 } 135 } finally { 136 workerListMutex.release(); 137 } 138 } 139 140 145 public void addTaskManagerListener(TaskManagerListener l) { 146 listenerList.add(TaskManagerListener.class, l); 147 } 148 149 154 public void removeTaskManagerListener(TaskManagerListener l) { 155 listenerList.remove(TaskManagerListener.class, l); 156 } 157 158 164 protected void fireWorkerAdded(Worker w) { 165 TaskManagerEvent e = new TaskManagerEvent(this, w); 166 Object [] listeners = listenerList.getListenerList(); 168 169 for (int i = listeners.length - 2; i >= 0; i -= 2) { 172 if (listeners[i] == TaskManagerListener.class) { 173 ((TaskManagerListener) listeners[i + 1]).workerAdded(e); 174 } 175 } 176 } 177 178 protected void fireWorkerRemoved(Worker w) { 179 TaskManagerEvent e = new TaskManagerEvent(this, w); 180 Object [] listeners = listenerList.getListenerList(); 182 183 for (int i = listeners.length - 2; i >= 0; i -= 2) { 186 if (listeners[i] == TaskManagerListener.class) { 187 ((TaskManagerListener) listeners[i + 1]).workerRemoved(e); 188 } 189 } 190 } 191 } 192 | Popular Tags |