From 42ec35a792d480c73027da6e7fc617146850ce44 Mon Sep 17 00:00:00 2001 From: jprocter Date: Tue, 19 Jun 2012 17:22:52 +0100 Subject: [PATCH] JAL-961 JAL-975 extend api to support removal of workers no-longer required by the user --- src/jalview/api/AlignCalcManagerI.java | 7 ++++ src/jalview/api/AlignCalcWorkerI.java | 2 ++ src/jalview/workers/AlignCalcManager.java | 54 +++++++++++++++++++++++++++++ src/jalview/workers/AlignCalcWorker.java | 20 ++++++++++- 4 files changed, 82 insertions(+), 1 deletion(-) diff --git a/src/jalview/api/AlignCalcManagerI.java b/src/jalview/api/AlignCalcManagerI.java index 1eedc74..35374c5 100644 --- a/src/jalview/api/AlignCalcManagerI.java +++ b/src/jalview/api/AlignCalcManagerI.java @@ -3,6 +3,7 @@ package jalview.api; import java.util.List; import jalview.datamodel.AlignmentAnnotation; +import jalview.ws.jws2.AAConsClient; public interface AlignCalcManagerI { @@ -115,4 +116,10 @@ public interface AlignCalcManagerI */ boolean isPending(AlignCalcWorkerI workingClass); + /** + * deregister and otherwise remove any registered and working instances of the given worker type + * @param typeToRemove + */ + void removeRegisteredWorkersOfClass(Class typeToRemove); + } diff --git a/src/jalview/api/AlignCalcWorkerI.java b/src/jalview/api/AlignCalcWorkerI.java index 00f967a..7c14786 100644 --- a/src/jalview/api/AlignCalcWorkerI.java +++ b/src/jalview/api/AlignCalcWorkerI.java @@ -8,4 +8,6 @@ public interface AlignCalcWorkerI extends Runnable public boolean involves(AlignmentAnnotation annot); public void updateAnnotation(); + + void removeOurAnnotation(); } diff --git a/src/jalview/workers/AlignCalcManager.java b/src/jalview/workers/AlignCalcManager.java index bc5e8e3..544c2c8 100644 --- a/src/jalview/workers/AlignCalcManager.java +++ b/src/jalview/workers/AlignCalcManager.java @@ -6,6 +6,7 @@ import java.util.HashSet; import java.util.Hashtable; import java.util.List; import java.util.Map; +import java.util.Set; import jalview.api.AlignCalcManagerI; import jalview.api.AlignCalcWorkerI; @@ -315,4 +316,57 @@ public class AlignCalcManager implements AlignCalcManagerI } } } + + @Override + public void removeRegisteredWorkersOfClass(Class typeToRemove) + { + List workers = getRegisteredWorkersOfClass(typeToRemove); + List removable = new ArrayList(); + Set toremovannot=new HashSet(); + synchronized (restartable) + { + for (AlignCalcWorkerI worker:restartable) { + if (typeToRemove.equals(worker.getClass())) { + removable.add(worker); + toremovannot.add(worker); + } + } + restartable.removeAll(removable); + } + synchronized (canUpdate) + { + for (AlignCalcWorkerI worker:canUpdate) { + if (typeToRemove.equals(worker.getClass())) { + removable.add(worker); + toremovannot.add(worker); + } + } + canUpdate.removeAll(removable); + } + // TODO: finish testing this extension + +/* synchronized (inProgress) + { + // need to kill or mark as dead any running threads... + (inProgress.get(typeToRemove)); + } + + if (workers == null) + { + return; + } + for (AlignCalcWorkerI worker : workers) + { + + if (isPending(worker)) + { + worker.abortAndDestroy(); + startWorker(worker); + } + else + { + System.err.println("Pending exists for " + workerClass); + } + }*/ + } } diff --git a/src/jalview/workers/AlignCalcWorker.java b/src/jalview/workers/AlignCalcWorker.java index 19a92fb..f1b3019 100644 --- a/src/jalview/workers/AlignCalcWorker.java +++ b/src/jalview/workers/AlignCalcWorker.java @@ -10,6 +10,7 @@ import jalview.api.AlignCalcWorkerI; import jalview.api.AlignViewportI; import jalview.api.AlignmentViewPanel; import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; /** * Base class for alignment calculation workers @@ -47,7 +48,24 @@ public abstract class AlignCalcWorker implements AlignCalcWorkerI { return ourAnnots!=null && ourAnnots.contains(i); } - + + /** + * permanently remove from the alignment all annotation rows managed by this worker + */ + @Override + public void removeOurAnnotation() + { + if (ourAnnots!=null && alignViewport!=null) + { + AlignmentI alignment=alignViewport.getAlignment(); + synchronized (ourAnnots) { + for (AlignmentAnnotation aa:ourAnnots) + { + alignment.deleteAnnotation(aa, true); + } + } + } + } // TODO: allow GUI to query workers associated with annotation to add items to annotation label panel popup menu } -- 1.7.10.2