JAL-2344 handle null format, simplify JalviewFileChooser constructor
[jalview.git] / src / jalview / io / HtmlSvgOutput.java
index e60824a..3fb3cf2 100644 (file)
@@ -20,6 +20,7 @@
  */
 package jalview.io;
 
+import jalview.exceptions.NoFileSelectedException;
 import jalview.gui.AlignmentPanel;
 import jalview.gui.HTMLOptions;
 import jalview.gui.OOMWarning;
@@ -38,7 +39,6 @@ import org.jfree.graphics2d.svg.SVGHints;
 public class HtmlSvgOutput extends HTMLOutput
 {
 
-  private File generatedFile;
 
   public HtmlSvgOutput(AlignmentPanel ap)
   {
@@ -46,16 +46,21 @@ public class HtmlSvgOutput extends HTMLOutput
   }
 
   @Override
-  public void exportHTML(String file)
+  public void exportHTML(String outputFile)
   {
     exportStarted();
     try
     {
-      if (file == null)
+      if (outputFile == null)
       {
-        file = getOutputFile();
+        outputFile = getOutputFile();
       }
-      generatedFile = new File(file);
+      generatedFile = new File(outputFile);
+    } catch (NoFileSelectedException e)
+    {
+      setProgressMessage(MessageManager.formatMessage(
+              "status.cancelled_image_export_operation", "HTML"));
+      return;
     } catch (Exception e)
     {
       setProgressMessage(MessageManager.formatMessage(
@@ -63,105 +68,15 @@ public class HtmlSvgOutput extends HTMLOutput
       e.printStackTrace();
       return;
     }
-    new Thread()
-    {
-      @Override
-      public void run()
-      {
-        try
-        {
-          setProgressMessage(null);
-          setProgressMessage(MessageManager.formatMessage(
-                  "status.exporting_alignment_as_x_file", "HTML"));
-          AlignmentDimension aDimension = ap.getAlignmentDimension();
-          SVGGraphics2D idPanelGraphics = new SVGGraphics2D(
-                  aDimension.getWidth(),
-                  aDimension.getHeight());
-          SVGGraphics2D alignPanelGraphics = new SVGGraphics2D(
-                  aDimension.getWidth(),
-                  aDimension.getHeight());
-
-          String renderStyle = jalview.bin.Cache.getDefault(
-                  "HTML_RENDERING", "Prompt each time");
-
-          // If we need to prompt, and if the GUI is visible then
-          // Prompt for rendering style
-          if (renderStyle.equalsIgnoreCase("Prompt each time")
-                  && !isHeadless())
-          {
-            HTMLOptions svgOption = new HTMLOptions();
-            renderStyle = svgOption.getValue();
-
-            if (renderStyle == null || svgOption.cancelled)
-            {
-              setProgressMessage(MessageManager.formatMessage(
-                      "status.cancelled_image_export_operation", "HTML"));
-              return;
-            }
-          }
-
-          if (renderStyle.equalsIgnoreCase("Lineart"))
-          {
-            idPanelGraphics.setRenderingHint(SVGHints.KEY_DRAW_STRING_TYPE,
-                    SVGHints.VALUE_DRAW_STRING_TYPE_VECTOR);
-            alignPanelGraphics.setRenderingHint(
-                    SVGHints.KEY_DRAW_STRING_TYPE,
-                    SVGHints.VALUE_DRAW_STRING_TYPE_VECTOR);
-          }
-          if (ap.av.getWrapAlignment())
-          {
-            printWrapped(aDimension.getWidth(), aDimension.getHeight(), 0,
-                    alignPanelGraphics);
-          }
-          else
-          {
-          printUnwrapped(aDimension.getWidth(), aDimension.getHeight(), 0,
- idPanelGraphics, alignPanelGraphics);
-          }
-
-          String idPanelSvgData = idPanelGraphics.getSVGDocument();
-          String alignPanelSvgData = alignPanelGraphics.getSVGDocument();
-          String jsonData = getBioJSONData();
-          String htmlData = getHtml(idPanelSvgData, alignPanelSvgData, jsonData,
- ap.av.getWrapAlignment());
-          FileOutputStream out = new FileOutputStream(generatedFile);
-          out.write(htmlData.getBytes());
-          out.flush();
-          out.close();
-          exportCompleted();
-        } catch (OutOfMemoryError err)
-        {
-          System.out.println("########################\n"
-                  + "OUT OF MEMORY " + generatedFile + "\n"
-                  + "########################");
-          new OOMWarning("Creating Image for " + generatedFile, err);
-        } catch (Exception e)
-        {
-          e.printStackTrace();
-          setProgressMessage(MessageManager.formatMessage(
-                  "info.error_creating_file", "HTML"));
-        }
-        setProgressMessage(MessageManager.formatMessage(
-                "status.export_complete", "HTML"));
-      }
-    }.start();
-
-  }
-
-
-  static JalviewFileChooser getHTMLChooser()
-  {
-    return new jalview.io.JalviewFileChooser(
-            jalview.bin.Cache.getProperty("LAST_DIRECTORY"),
-            new String[] { "html" },
-            new String[] { "Hypertext Markup Language" },
-            "Hypertext Markup Language");
+    new Thread(this).start();
   }
 
-  public int printUnwrapped(int pwidth, int pheight, int pi, Graphics... pg)
+  public int printUnwrapped(int pwidth, int pheight, int pi,
+          Graphics idGraphics, Graphics alignmentGraphics)
           throws PrinterException
   {
-    return ap.printUnwrapped(pwidth, pheight, pi, pg);
+    return ap.printUnwrapped(pwidth, pheight, pi, idGraphics,
+            alignmentGraphics);
   }
 
   public int printWrapped(int pwidth, int pheight, int pi, Graphics... pg)
@@ -241,11 +156,9 @@ public class HtmlSvgOutput extends HTMLOutput
               .append(alignmentSvg).append("</div>");
       htmlSvg.append("<script language=\"JavaScript\" type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js\"></script>\n"
               + "<script language=\"JavaScript\" type=\"text/javascript\"  src=\"http://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js\"></script>\n");
-
     }
 
     // javascript for launching file in Jalview
-
     htmlSvg.append("<script language=\"JavaScript\">\n");
     htmlSvg.append("function openJalviewUsingCurrentUrl(){\n");
     htmlSvg.append("    var json = JSON.parse(document.getElementById(\"seqData\").innerHTML);\n");
@@ -270,9 +183,9 @@ public class HtmlSvgOutput extends HTMLOutput
     htmlSvg.append("    document.body.removeChild(myForm);\n");
     htmlSvg.append("}\n");
 
-    // jquery facebox for displaying raw BioJSON data");
     if (jsonData != null)
     {
+      // JQuery FaceBox for displaying raw BioJSON data");
       File faceBoxJsFile = new File("examples/javascript/facebox-1.3.js");
       try
       {
@@ -306,4 +219,79 @@ public class HtmlSvgOutput extends HTMLOutput
   {
     return generatedFile;
   }
+
+  @Override
+  public void run()
+  {
+    try
+    {
+      setProgressMessage(null);
+      setProgressMessage(MessageManager.formatMessage(
+              "status.exporting_alignment_as_x_file", "HTML"));
+      AlignmentDimension aDimension = ap.getAlignmentDimension();
+      SVGGraphics2D idPanelGraphics = new SVGGraphics2D(
+              aDimension.getWidth(), aDimension.getHeight());
+      SVGGraphics2D alignPanelGraphics = new SVGGraphics2D(
+              aDimension.getWidth(), aDimension.getHeight());
+
+      String renderStyle = jalview.bin.Cache.getDefault("HTML_RENDERING",
+              "Prompt each time");
+
+      // If we need to prompt, and if the GUI is visible then
+      // Prompt for rendering style
+      if (renderStyle.equalsIgnoreCase("Prompt each time") && !isHeadless())
+      {
+        HTMLOptions svgOption = new HTMLOptions();
+        renderStyle = svgOption.getValue();
+
+        if (renderStyle == null || svgOption.cancelled)
+        {
+          setProgressMessage(MessageManager.formatMessage(
+                  "status.cancelled_image_export_operation", "HTML"));
+          return;
+        }
+      }
+
+      if (renderStyle.equalsIgnoreCase("Lineart"))
+      {
+        idPanelGraphics.setRenderingHint(SVGHints.KEY_DRAW_STRING_TYPE,
+                SVGHints.VALUE_DRAW_STRING_TYPE_VECTOR);
+        alignPanelGraphics.setRenderingHint(SVGHints.KEY_DRAW_STRING_TYPE,
+                SVGHints.VALUE_DRAW_STRING_TYPE_VECTOR);
+      }
+      if (ap.av.getWrapAlignment())
+      {
+        printWrapped(aDimension.getWidth(), aDimension.getHeight(), 0,
+                alignPanelGraphics);
+      }
+      else
+      {
+        printUnwrapped(aDimension.getWidth(), aDimension.getHeight(), 0,
+                idPanelGraphics, alignPanelGraphics);
+      }
+
+      String idPanelSvgData = idPanelGraphics.getSVGDocument();
+      String alignPanelSvgData = alignPanelGraphics.getSVGDocument();
+      String jsonData = getBioJSONData();
+      String htmlData = getHtml(idPanelSvgData, alignPanelSvgData,
+              jsonData, ap.av.getWrapAlignment());
+      FileOutputStream out = new FileOutputStream(generatedFile);
+      out.write(htmlData.getBytes());
+      out.flush();
+      out.close();
+      setProgressMessage(MessageManager.formatMessage(
+              "status.export_complete", "HTML"));
+      exportCompleted();
+    } catch (OutOfMemoryError err)
+    {
+      System.out.println("########################\n" + "OUT OF MEMORY "
+              + generatedFile + "\n" + "########################");
+      new OOMWarning("Creating Image for " + generatedFile, err);
+    } catch (Exception e)
+    {
+      e.printStackTrace();
+      setProgressMessage(MessageManager.formatMessage(
+              "info.error_creating_file", "HTML"));
+    }
+  }
 }