JAL-1988 JAL-3772 Non-blocking modal dialogs for unsaved changes and saving files...
[jalview.git] / src / jalview / util / dialogrunner / DialogRunnerI.java
index 9df6d33..9be64c6 100644 (file)
  */
 package jalview.util.dialogrunner;
 
+import java.util.concurrent.Callable;
+
 /**
- * functional pattern for blocking dialog response handling
+ * An interface for blocking dialog response handling. This is motivated by
+ * JalviewJS - when running as Javascript, there is only a single thread, and
+ * blocking dialogs have to be responsible for performing any actions required
+ * for user responses.
  * 
  * @author jprocter
  *
  */
-public interface DialogRunnerI<T extends DialogRunnerI>
+public interface DialogRunnerI
 {
 
   /**
-   * define a new response for this dialog. eg. dialog.response(new
-   * RunResponse(OK_PRessed) { run()...}).response(new RunResponse(CANCEL_PRESSED)
-   * { ... });
+   * Sets the action to be performed when the dialog returns the given response.
+   * Note this also handles <code>int</code>-valued responses, which will be
+   * converted to <code>Integer</code> when this method is invoked.
    * 
+   * @param response
    * @param action
-   * @return the dialog
+   * @return
    */
-  T response(RunResponse action);
+  DialogRunnerI setResponseHandler(Object response, Callable action);
+
+  // DialogRunnerI setResponseHandler(Object response, Runnable action);
 
+  /**
+   * Runs the registered handler (if any) for the given response. The default
+   * action is to do nothing. Typically an action will be need on 'OK' or other
+   * positive selection in the dialog. An action might in some cases also be
+   * needed for a 'Cancel' response.
+   * 
+   * @param response
+   * @return
+   */
+  default void handleResponse(Object response)
+  {
+  }
 }