X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fapi%2FAlignCalcManagerI.java;h=7d73b12354129fd3aca443f4dcd26d1fae118f74;hb=ab43013b7e357b84b4abade0dba949668dfb2a0e;hp=2c406a228be30917681e5878df699ecd1b607ab3;hpb=60805a2d20a347ef1958a7a5576cda7a186f8a8d;p=jalview.git diff --git a/src/jalview/api/AlignCalcManagerI.java b/src/jalview/api/AlignCalcManagerI.java index 2c406a2..7d73b12 100644 --- a/src/jalview/api/AlignCalcManagerI.java +++ b/src/jalview/api/AlignCalcManagerI.java @@ -1,17 +1,42 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1) + * Copyright (C) 2014 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 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 + * * @param worker * @return */ @@ -19,27 +44,118 @@ public interface AlignCalcManagerI /** * tell manager that worker is now processing data + * * @param worker */ - void notifyWorking(AlignCalcWorkerI worker); - + boolean notifyWorking(AlignCalcWorkerI worker); /** - * notify manager that the worker has completed, and results may be ready to collect + * notify manager that the worker has completed, and results may be ready to + * collect + * * @param worker */ void workerComplete(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 cannot run on the platform and shouldn't + * be started again + * * @param worker */ void workerCannotRun(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 + */ + void workerMayRun(AlignCalcWorkerI worker); + + /** * launch a new worker + * * @param worker */ void startWorker(AlignCalcWorkerI worker); + /** + * + * @param worker + * @return + */ + 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); + + /** + * restart any registered workers + */ + void restartWorkers(); + + /** + * + * @param 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 + * + * @param 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); + + /** + * 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) + */ + boolean startRegisteredWorkersOfClass(Class workerClass); + + /** + * 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 + */ + void removeRegisteredWorkersOfClass(Class typeToRemove); + }