+ /**
+ * 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<AlignCalcWorkerI> 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);
+