*/
package jalview.workers;
-import jalview.api.AlignCalcManagerI;
-import jalview.api.AlignCalcWorkerI;
-import jalview.datamodel.AlignmentAnnotation;
-
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
+import jalview.api.AlignCalcManagerI;
+import jalview.api.AlignCalcWorkerI;
+import jalview.datamodel.AlignmentAnnotation;
+
public class AlignCalcManager implements AlignCalcManagerI
{
/*
{
restartable = Collections
.synchronizedList(new ArrayList<AlignCalcWorkerI>());
- blackList = Collections
- .synchronizedList(new ArrayList<Class<? extends AlignCalcWorkerI>>());
+ blackList = Collections.synchronizedList(
+ new ArrayList<Class<? extends AlignCalcWorkerI>>());
inProgress = Collections
.synchronizedList(new ArrayList<AlignCalcWorkerI>());
- updating = Collections
- .synchronizedMap(new Hashtable<Class<? extends AlignCalcWorkerI>, List<AlignCalcWorkerI>>());
+ updating = Collections.synchronizedMap(
+ new Hashtable<Class<? extends AlignCalcWorkerI>, List<AlignCalcWorkerI>>());
canUpdate = new HashSet<AlignCalcWorkerI>();
}
List<AlignCalcWorkerI> upd = updating.get(worker.getClass());
if (upd == null)
{
- updating.put(
- worker.getClass(),
- upd = Collections
- .synchronizedList(new ArrayList<AlignCalcWorkerI>()));
+ updating.put(worker.getClass(), upd = Collections
+ .synchronizedList(new ArrayList<AlignCalcWorkerI>()));
}
synchronized (upd)
{
{
synchronized (inProgress)
{
- // System.err.println("Worker " + worker + " marked as complete.");
+ // jalview.bin.Console.errPrintln("Worker " + worker + " marked as
+ // complete.");
inProgress.remove(worker);
List<AlignCalcWorkerI> upd = updating.get(worker.getClass());
if (upd != null)
public boolean isWorking(AlignCalcWorkerI worker)
{
synchronized (inProgress)
- {// System.err.println("isWorking : worker "+(worker!=null ?
+ {// jalview.bin.Console.errPrintln("isWorking : worker "+(worker!=null ?
// worker.getClass():"null")+ " "+hashCode());
return worker != null && inProgress.contains(worker);
}
@Override
public boolean isWorking()
{
+ boolean working = false;
synchronized (inProgress)
{
- // System.err.println("isWorking "+hashCode());
- return inProgress.size() > 0;
+ // jalview.bin.Console.errPrintln("isWorking "+hashCode());
+ working |= inProgress.size() > 0;
+ }
+ synchronized (updating)
+ {
+ Collection<List<AlignCalcWorkerI>> workersLists = updating.values();
+ synchronized (workersLists)
+ {
+ for (List<AlignCalcWorkerI> workers : workersLists)
+ {
+ if (workers != null)
+ {
+ synchronized (workers)
+ {
+ working |= workers.size() > 0;
+ }
+ }
+ }
+ }
}
+ return working;
}
@Override
}
@Override
- public boolean workingInvolvedWith(AlignmentAnnotation alignmentAnnotation)
+ public boolean workingInvolvedWith(
+ AlignmentAnnotation alignmentAnnotation)
{
synchronized (inProgress)
{
Class<? extends AlignCalcWorkerI> workerClass)
{
List<AlignCalcWorkerI> workingClass = new ArrayList<AlignCalcWorkerI>();
+ AlignCalcWorkerI[] workers;
synchronized (canUpdate)
{
- for (AlignCalcWorkerI worker : canUpdate)
+ workers = canUpdate.toArray(new AlignCalcWorkerI[0]);
+ }
+ for (AlignCalcWorkerI worker : workers)
+ {
+ if (workerClass.equals(worker.getClass()))
{
- if (workerClass.equals(worker.getClass()))
- {
- workingClass.add(worker);
- }
+ workingClass.add(worker);
}
}
return (workingClass.size() == 0) ? null : workingClass;
* {
*
* if (isPending(worker)) { worker.abortAndDestroy(); startWorker(worker); }
- * else { System.err.println("Pending exists for " + workerClass); } }
+ * else { jalview.bin.Console.errPrintln("Pending exists for " + workerClass); } }
*/
}