X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fapi%2FAlignCalcManagerI.java;h=18605b88bd27f5dadd5c6f871c9f2adaac2878df;hb=e1aa3fdd1ca82abf5acc0cd3c2b86a5ca1083941;hp=a7b17c668dd5f056e7853813cf6a01a04ad59046;hpb=d668b0fe1a9eefb95c935bc6c71a88e67642e712;p=jalview.git diff --git a/src/jalview/api/AlignCalcManagerI.java b/src/jalview/api/AlignCalcManagerI.java index a7b17c6..18605b8 100644 --- a/src/jalview/api/AlignCalcManagerI.java +++ b/src/jalview/api/AlignCalcManagerI.java @@ -1,72 +1,105 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.api; -import java.util.List; - import jalview.datamodel.AlignmentAnnotation; +import java.util.List; + public interface AlignCalcManagerI { - /** * tell manager that a worker is initialised and has started to run + * * @param worker */ void notifyStart(AlignCalcWorkerI worker); /** - * check if a calculation of this type is already active + * tell manager that a thread running worker's run() loop is ready to start + * processing data + * * @param worker - * @return + * @return true if worker should start processing, false if another thread is + * in progress */ - boolean alreadyDoing(AlignCalcWorkerI worker); + boolean notifyWorking(AlignCalcWorkerI worker); /** - * tell manager that worker is now processing data + * notify manager that the worker has completed, and results may be ready to + * collect + * * @param worker */ - boolean notifyWorking(AlignCalcWorkerI worker); - + void workerComplete(AlignCalcWorkerI worker); /** - * notify manager that the worker has completed, and results may be ready to collect + * indicate that a worker like this cannot run on the platform and shouldn't + * be started again + * * @param worker */ - void workerComplete(AlignCalcWorkerI worker); + void disableWorker(AlignCalcWorkerI worker); /** - * indicate that a worker like this cannot run on the platform and shouldn't be started again + * indicate that a worker like this may be run on the platform. + * * @param worker + * of class to be removed from the execution blacklist */ - void workerCannotRun(AlignCalcWorkerI worker); + void enableWorker(AlignCalcWorkerI worker); /** - * indicate that a worker like this may be run on the platform. - * @param worker of class to be removed from the execution blacklist + * Answers true if the worker is disabled from running + * + * @param worker + * @return */ - void workerMayRun(AlignCalcWorkerI worker); + boolean isDisabled(AlignCalcWorkerI worker); + /** * launch a new worker + * * @param worker */ void startWorker(AlignCalcWorkerI worker); /** - * + * * @param worker - * @return + * @return true if the worker is currently running */ boolean isWorking(AlignCalcWorkerI worker); /** * if any worker thread is operational, return true! + * * @return */ boolean isWorking(); - /** * register a restartable worker + * * @param worker */ void registerWorker(AlignCalcWorkerI worker); @@ -77,32 +110,55 @@ public interface AlignCalcManagerI void restartWorkers(); /** - * + * * @param alignmentAnnotation - * @return true if a currently registered and working worker indicates its involvement with the given alignmentAnnotation + * @return true if a currently registered and working worker indicates its + * involvement with the given alignmentAnnotation */ boolean workingInvolvedWith(AlignmentAnnotation alignmentAnnotation); /** - * kick any known instances of the given worker class to update their annotation + * kick any known instances of the given worker class to update their + * annotation + * * @param workerClass */ - void updateAnnotationFor(Class workerClass); + void updateAnnotationFor(Class workerClass); /** * return any registered workers of the given class + * * @param workerClass * @return null or one or more workers of the given class */ List getRegisteredWorkersOfClass( - Class workerClass); + Class workerClass); /** - * start any workers of the given class - * @param workerClass - * @return false if no workers of given class were registered - * (note - blacklisted classes cannot be restarted, so this method will return true for blacklisted workers) + * work out if there is an instance of a worker that is *waiting* to start + * calculating + * + * @param workingClass + * @return true if workingClass is already waiting to calculate. false if it + * is calculating, or not queued. + */ + boolean isPending(AlignCalcWorkerI workingClass); + + /** + * deregister and otherwise remove any registered and working instances of the + * given worker type + * + * @param typeToRemove */ - boolean startRegisteredWorkersOfClass(Class workerClass); + void removeRegisteredWorkersOfClass( + Class typeToRemove); + /** + * Removes the worker that produces the given annotation, provided it is + * marked as 'deletable'. Some workers may need to continue to run as the + * results of their calculations are needed, e.g. for colour schemes. + * + * @param ann + */ + void removeWorkerForAnnotation(AlignmentAnnotation ann); }