9c7f9ab552ecaf223e5394736438e8593403589d
[jalview.git] / src / jalview / api / AlignCalcManagerI.java
1 /*
2  * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3  * Copyright (C) $$Year-Rel$$ The Jalview Authors
4  * 
5  * This file is part of Jalview.
6  * 
7  * Jalview is free software: you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License 
9  * as published by the Free Software Foundation, either version 3
10  * of the License, or (at your option) any later version.
11  *  
12  * Jalview is distributed in the hope that it will be useful, but 
13  * WITHOUT ANY WARRANTY; without even the implied warranty 
14  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15  * PURPOSE.  See the GNU General Public License for more details.
16  * 
17  * You should have received a copy of the GNU General Public License
18  * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
19  * The Jalview Authors are detailed in the 'AUTHORS' file.
20  */
21 package jalview.api;
22
23 import jalview.datamodel.AlignmentAnnotation;
24
25 import java.util.List;
26
27 public interface AlignCalcManagerI
28 {
29
30   /**
31    * tell manager that a worker is initialised and has started to run
32    * 
33    * @param worker
34    */
35   void notifyStart(AlignCalcWorkerI worker);
36
37   /**
38    * tell manager that worker is now processing data
39    * 
40    * @param worker
41    */
42   boolean notifyWorking(AlignCalcWorkerI worker);
43
44   /**
45    * notify manager that the worker has completed, and results may be ready to
46    * collect
47    * 
48    * @param worker
49    */
50   void workerComplete(AlignCalcWorkerI worker);
51
52   /**
53    * indicate that a worker like this cannot run on the platform and shouldn't
54    * be started again
55    * 
56    * @param worker
57    */
58   void disableWorker(AlignCalcWorkerI worker);
59
60   /**
61    * indicate that a worker like this may be run on the platform.
62    * 
63    * @param worker
64    *          of class to be removed from the execution blacklist
65    */
66   void enableWorker(AlignCalcWorkerI worker);
67
68   /**
69    * Answers true if the worker is disabled from running
70    * 
71    * @param worker
72    * @return
73    */
74   boolean isDisabled(AlignCalcWorkerI worker);
75
76   /**
77    * launch a new worker
78    * 
79    * @param worker
80    */
81   void startWorker(AlignCalcWorkerI worker);
82
83   /**
84    * 
85    * @param worker
86    * @return
87    */
88   boolean isWorking(AlignCalcWorkerI worker);
89
90   /**
91    * if any worker thread is operational, return true!
92    * 
93    * @return
94    */
95   boolean isWorking();
96
97   /**
98    * register a restartable worker
99    * 
100    * @param worker
101    */
102   void registerWorker(AlignCalcWorkerI worker);
103
104   /**
105    * restart any registered workers
106    */
107   void restartWorkers();
108
109   /**
110    * 
111    * @param alignmentAnnotation
112    * @return true if a currently registered and working worker indicates its
113    *         involvement with the given alignmentAnnotation
114    */
115   boolean workingInvolvedWith(AlignmentAnnotation alignmentAnnotation);
116
117   /**
118    * kick any known instances of the given worker class to update their
119    * annotation
120    * 
121    * @param workerClass
122    */
123   void updateAnnotationFor(Class<? extends AlignCalcWorkerI> workerClass);
124
125   /**
126    * return any registered workers of the given class
127    * 
128    * @param workerClass
129    * @return null or one or more workers of the given class
130    */
131   List<AlignCalcWorkerI> getRegisteredWorkersOfClass(
132           Class<? extends AlignCalcWorkerI> workerClass);
133
134   /**
135    * work out if there is an instance of a worker that is *waiting* to start
136    * calculating
137    * 
138    * @param workingClass
139    * @return true if workingClass is already waiting to calculate. false if it
140    *         is calculating, or not queued.
141    */
142   boolean isPending(AlignCalcWorkerI workingClass);
143
144   /**
145    * deregister and otherwise remove any registered and working instances of the
146    * given worker type
147    * 
148    * @param typeToRemove
149    */
150   void removeRegisteredWorkersOfClass(
151           Class<? extends AlignCalcWorkerI> typeToRemove);
152
153   /**
154    * Removes the worker that produces the given annotation, provided it is
155    * marked as 'deletable'. Some workers may need to continue to run as the
156    * results of their calculations are needed, e.g. for colour schemes.
157    * 
158    * @param ann
159    */
160   void removeWorkerForAnnotation(AlignmentAnnotation ann);
161 }