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>();
15 * global record of calculations in progress
17 private static Hashtable<Class,AlignCalcWorkerI> inProgress=new Hashtable<Class,AlignCalcWorkerI>();
19 * record of calculations pending or in progress in the current context
21 private Map<Class,List<AlignCalcWorkerI>> updating=new Hashtable<Class,List<AlignCalcWorkerI>>();
24 public void notifyStart(AlignCalcWorkerI worker)
26 List<AlignCalcWorkerI> upd = updating.get(worker.getClass());
29 updating.put(worker.getClass(), upd=new ArrayList<AlignCalcWorkerI>());
35 public boolean alreadyDoing(AlignCalcWorkerI worker)
37 return inProgress.containsKey(worker.getClass());
41 public void notifyWorking(AlignCalcWorkerI worker)
43 // TODO: decide if we should throw exceptions here if multiple workers start to work
44 if (inProgress.get(worker.getClass())!=null)
46 System.err.println("Warning: Multiple workers are running of type "+worker.getClass());
48 inProgress.put(worker.getClass(), worker);
53 public void workerComplete(AlignCalcWorkerI worker)
55 inProgress.remove(worker);
59 public void workerCannotRun(AlignCalcWorkerI worker)
61 blackList.add(worker.getClass());
63 public boolean isBlackListed(Class workerType)
65 return blackList.contains(workerType);
69 public void startWorker(AlignCalcWorkerI worker)
71 new Thread(worker).start();