JAL-3048 all image export (alignment, tree, PCA, Jmol) now via ImageExporter and...
[jalview.git] / src / jalview / io / HTMLOutput.java
index 86da67a..f7179cf 100644 (file)
@@ -21,9 +21,9 @@
 package jalview.io;
 
 import jalview.api.AlignExportSettingsI;
+import jalview.bin.Cache;
 import jalview.datamodel.AlignExportSettingsAdapter;
 import jalview.datamodel.AlignmentExportData;
-import jalview.exceptions.NoFileSelectedException;
 import jalview.gui.AlignmentPanel;
 import jalview.gui.IProgressIndicator;
 import jalview.util.MessageManager;
@@ -187,15 +187,15 @@ public abstract class HTMLOutput implements Runnable
 
   }
 
-  public String getOutputFile() throws NoFileSelectedException
+  /**
+   * Prompts the user to choose an output file and returns the file path, or
+   * null on Cancel
+   * 
+   * @return
+   */
+  public String getOutputFile()
   {
     String selectedFile = null;
-    if (pIndicator != null && !isHeadless())
-    {
-      pIndicator.setProgressBar(MessageManager.formatMessage(
-              "status.waiting_for_user_to_select_output_file", "HTML"),
-              pSessionId);
-    }
 
     // TODO: JAL-3048 generate html rendered view (requires SvgGraphics and/or
     // Jalview HTML rendering system- probably not required for Jalview-JS)
@@ -210,14 +210,11 @@ public abstract class HTMLOutput implements Runnable
     int fileChooserOpt = jvFileChooser.showSaveDialog(null);
     if (fileChooserOpt == JalviewFileChooser.APPROVE_OPTION)
     {
-      jalview.bin.Cache.setProperty("LAST_DIRECTORY",
+      Cache.setProperty("LAST_DIRECTORY",
               jvFileChooser.getSelectedFile().getParent());
       selectedFile = jvFileChooser.getSelectedFile().getPath();
     }
-    else
-    {
-      throw new NoFileSelectedException("No file was selected.");
-    }
+
     return selectedFile;
   }
 
@@ -295,13 +292,47 @@ public abstract class HTMLOutput implements Runnable
    * 
    * @return
    */
-  public abstract File getExportedFile();
+  public File getExportedFile()
+  {
+    return generatedFile;
+  }
+
+  public void exportHTML(String outputFile)
+  {
+    exportStarted();
+    try
+    {
+      if (outputFile == null)
+      {
+        /*
+         * prompt for output file
+         */
+        outputFile = getOutputFile();
+        if (outputFile == null)
+        {
+          setProgressMessage(MessageManager.formatMessage(
+                  "status.cancelled_image_export_operation",
+                  getDescription()));
+          return;
+        }
+      }
+      generatedFile = new File(outputFile);
+    } catch (Exception e)
+    {
+      setProgressMessage(MessageManager
+              .formatMessage("info.error_creating_file", getDescription()));
+      e.printStackTrace();
+      return;
+    }
+    new Thread(this).start();
+  
+  }
 
   /**
-   * This is the main method to handle the HTML generation.
+   * Answers a short description of the image format suitable for display in
+   * messages
    * 
-   * @param outputFile
-   *          the file path of the generated HTML
+   * @return
    */
-  public abstract void exportHTML(String outputFile);
+  protected abstract String getDescription();
 }
\ No newline at end of file