1 package jalview.workers;
3 import java.util.ArrayList;
4 import java.util.Hashtable;
8 import jalview.api.AlignCalcManagerI;
9 import jalview.api.AlignCalcWorkerI;
11 public class AlignCalcManager implements AlignCalcManagerI
13 private List<Class> blackList = new ArrayList<Class>();
16 * global record of calculations in progress
18 private static Hashtable<Class, AlignCalcWorkerI> inProgress = new Hashtable<Class, AlignCalcWorkerI>();
21 * record of calculations pending or in progress in the current context
23 private Map<Class, List<AlignCalcWorkerI>> updating = new Hashtable<Class, List<AlignCalcWorkerI>>();
26 public void notifyStart(AlignCalcWorkerI worker)
28 List<AlignCalcWorkerI> upd = updating.get(worker.getClass());
31 updating.put(worker.getClass(),
32 upd = new ArrayList<AlignCalcWorkerI>());
38 public synchronized boolean alreadyDoing(AlignCalcWorkerI worker)
40 return inProgress.containsKey(worker.getClass());
44 public synchronized boolean notifyWorking(AlignCalcWorkerI worker)
46 // synchronized (inProgress)
48 // TODO: decide if we should throw exceptions here if multiple workers
50 if (inProgress.get(worker.getClass()) != null)
55 .println("Warning: Multiple workers are running of type "
60 inProgress.put(worker.getClass(), worker);
66 public synchronized void workerComplete(AlignCalcWorkerI worker)
68 inProgress.remove(worker.getClass());
69 List<AlignCalcWorkerI> upd = updating.get(worker.getClass());
78 public void workerCannotRun(AlignCalcWorkerI worker)
80 blackList.add(worker.getClass());
83 public boolean isBlackListed(Class workerType)
85 return blackList.contains(workerType);
89 public void startWorker(AlignCalcWorkerI worker)
91 new Thread(worker).start();
95 public synchronized boolean isWorking(AlignCalcWorkerI worker)
97 // System.err.println("isWorking : worker "+(worker!=null ? worker.getClass():"null")+ " "+hashCode());
98 return worker!=null && inProgress.get(worker.getClass()) == worker;
101 public boolean isWorking()
103 // System.err.println("isWorking "+hashCode());
104 return inProgress.size()>0;