JAL-3048 inlined 1-line methods, small refactor of ImageMaker.TYPE
[jalview.git] / src / jalview / util / ImageMaker.java
index 252bae1..493e210 100755 (executable)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  */
 package jalview.util;
 
-import jalview.gui.EPSOptions;
-import jalview.gui.SVGOptions;
+import jalview.bin.Cache;
+import jalview.bin.Jalview;
+import jalview.gui.IProgressIndicator;
+import jalview.gui.LineartOptions;
 import jalview.io.JalviewFileChooser;
 
 import java.awt.Component;
@@ -40,6 +42,22 @@ import org.jibble.epsgraphics.EpsGraphics2D;
 
 public class ImageMaker
 {
+  public static final String SVG_DESCRIPTION = "Scalable Vector Graphics";
+
+  public static final String SVG_EXTENSION = "svg";
+
+  public static final String EPS_DESCRIPTION = "Encapsulated Postscript";
+
+  public static final String EPS_EXTENSION = "eps";
+
+  public static final String PNG_EXTENSION = "png";
+
+  public static final String PNG_DESCRIPTION = "Portable  network graphics";
+
+  public static final String HTML_EXTENSION = "html";
+
+  public static final String HTML_DESCRIPTION = "Hypertext Markup Language";
+
   EpsGraphics2D pg;
 
   SVGGraphics2D g2;
@@ -52,23 +70,34 @@ public class ImageMaker
 
   TYPE type;
 
+  private IProgressIndicator pIndicator;
+
+  private long pSessionId;
+
+  private boolean headless;
+
   public enum TYPE
   {
-    EPS("EPS", MessageManager.getString("label.eps_file"), getEPSChooser()), PNG(
-            "PNG", MessageManager.getString("label.png_image"),
-            getPNGChooser()), SVG("SVG", "SVG", getSVGChooser());
+    EPS("EPS", MessageManager.getString("label.eps_file"), EPS_EXTENSION,
+            EPS_DESCRIPTION),
+    PNG("PNG", MessageManager.getString("label.png_image"), PNG_EXTENSION,
+            PNG_DESCRIPTION),
+    SVG("SVG", "SVG", SVG_EXTENSION, SVG_DESCRIPTION);
+
+    public final String name;
 
-    private JalviewFileChooser chooser;
+    public final String label;
 
-    private String name;
+    public final String extension;
 
-    private String label;
+    public final String description;
 
-    TYPE(String name, String label, JalviewFileChooser chooser)
+    TYPE(String name, String label, String ext, String desc)
     {
       this.name = name;
       this.label = label;
-      this.chooser = chooser;
+      this.extension = ext;
+      this.description = desc;
     }
 
     public String getName()
@@ -78,7 +107,7 @@ public class ImageMaker
 
     public JalviewFileChooser getChooser()
     {
-      return chooser;
+      return new JalviewFileChooser(extension, description);
     }
 
     public String getLabel()
@@ -88,14 +117,33 @@ public class ImageMaker
 
   }
 
-
+  /**
+   * Constructor builds the image and writes it to file. If the supplied file
+   * name is null, the user is prompted for the output file.
+   * 
+   * @param parent
+   * @param type
+   * @param title
+   * @param width
+   * @param height
+   * @param file
+   * @param fileTitle
+   * @param pIndicator
+   * @param pSessionId
+   * @param headless
+   */
   public ImageMaker(Component parent, TYPE type, String title, int width,
-          int height, File file, String fileTitle)
+          int height, File file, String fileTitle,
+          IProgressIndicator pIndicator, long pSessionId, boolean headless)
   {
+    this.pIndicator = pIndicator;
     this.type = type;
-
-    if (file == null)
+    this.pSessionId = pSessionId;
+    this.headless = headless;
+    if (file == null && !Jalview.isHeadlessMode())
     {
+      setProgressMessage(MessageManager.formatMessage(
+              "status.waiting_for_user_to_select_output_file", type.name));
       JalviewFileChooser chooser;
       chooser = type.getChooser();
       chooser.setFileView(new jalview.io.JalviewFileView());
@@ -103,19 +151,27 @@ public class ImageMaker
       chooser.setToolTipText(MessageManager.getString("action.save"));
       int value = chooser.showSaveDialog(parent);
 
-      if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION)
+      if (value == JalviewFileChooser.APPROVE_OPTION)
       {
-        jalview.bin.Cache.setProperty("LAST_DIRECTORY", chooser
-                .getSelectedFile().getParent());
+        Cache.setProperty("LAST_DIRECTORY",
+                chooser.getSelectedFile().getParent());
         file = chooser.getSelectedFile();
       }
+      else
+      {
+        setProgressMessage(MessageManager.formatMessage(
+                "status.cancelled_image_export_operation", type.name));
+      }
     }
-
+    // TODO JAL-3048 refactor to method called by constructor or callback
     if (file != null)
     {
       try
       {
         out = new FileOutputStream(file);
+        setProgressMessage(null);
+        setProgressMessage(MessageManager.formatMessage(
+                "status.exporting_alignment_as_x_file", type.getName()));
         if (type == TYPE.SVG)
         {
           setupSVG(width, height, fileTitle);
@@ -128,11 +184,13 @@ public class ImageMaker
         {
           setupPNG(width, height);
         }
-      
+
       } catch (Exception ex)
       {
-        System.out.println("Error creating "
- + type.getName() + " file.");
+        System.out.println("Error creating " + type.getName() + " file.");
+
+        setProgressMessage(MessageManager
+                .formatMessage("info.error_creating_file", type.getName()));
       }
     }
   }
@@ -142,8 +200,6 @@ public class ImageMaker
     return graphics;
   }
 
-
-
   public void writeImage()
   {
     try
@@ -161,7 +217,7 @@ public class ImageMaker
         out.close();
         break;
       case PNG:
-        ImageIO.write(bi, "png", out);
+        ImageIO.write(bi, PNG_EXTENSION, out);
         out.flush();
         out.close();
         break;
@@ -176,7 +232,7 @@ public class ImageMaker
   {
     boolean accurateText = true;
 
-    String renderStyle = jalview.bin.Cache.getDefault("EPS_RENDERING",
+    String renderStyle = Cache.getDefault("EPS_RENDERING",
             "Prompt each time");
 
     // If we need to prompt, and if the GUI is visible then
@@ -185,11 +241,13 @@ public class ImageMaker
             && !(System.getProperty("java.awt.headless") != null && System
                     .getProperty("java.awt.headless").equals("true")))
     {
-      EPSOptions eps = new EPSOptions();
+      LineartOptions eps = new LineartOptions("EPS_RENDERING", "EPS");
       renderStyle = eps.getValue();
 
       if (renderStyle == null || eps.cancelled)
       {
+        setProgressMessage(MessageManager.formatMessage(
+                "status.cancelled_image_export_operation", "EPS"));
         return;
       }
     }
@@ -209,8 +267,11 @@ public class ImageMaker
       pg.setAccurateTextMode(accurateText);
 
       graphics = pg;
+      setProgressMessage(MessageManager
+              .formatMessage("status.export_complete", type.getName()));
     } catch (Exception ex)
     {
+      System.err.println("Error writing PNG: " + ex.toString());
     }
   }
 
@@ -221,6 +282,8 @@ public class ImageMaker
     Graphics2D ig2 = (Graphics2D) graphics;
     ig2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
             RenderingHints.VALUE_ANTIALIAS_ON);
+    setProgressMessage(MessageManager
+            .formatMessage("status.export_complete", type.getName()));
 
   }
 
@@ -239,45 +302,60 @@ public class ImageMaker
             && !(System.getProperty("java.awt.headless") != null && System
                     .getProperty("java.awt.headless").equals("true")))
     {
-      SVGOptions svgOption = new SVGOptions();
+      LineartOptions svgOption = new LineartOptions("SVG_RENDERING", "SVG");
       renderStyle = svgOption.getValue();
 
       if (renderStyle == null || svgOption.cancelled)
       {
+        setProgressMessage(MessageManager.formatMessage(
+                "status.cancelled_image_export_operation", "SVG"));
         return;
       }
     }
 
-    if (renderStyle.equalsIgnoreCase("lineart"))
+    if (renderStyle.equalsIgnoreCase("Lineart"))
     {
       ig2.setRenderingHint(SVGHints.KEY_DRAW_STRING_TYPE,
               SVGHints.VALUE_DRAW_STRING_TYPE_VECTOR);
     }
 
+    setProgressMessage(MessageManager
+            .formatMessage("status.export_complete", type.getName()));
     graphics = g2;
   }
 
   static JalviewFileChooser getPNGChooser()
   {
-    return new jalview.io.JalviewFileChooser(
-            jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[]
-            { "png" }, new String[]
-            { "Portable network graphics" }, "Portable network graphics");
+    if (Jalview.isHeadlessMode())
+    {
+      return null;
+    }
+    return new JalviewFileChooser(PNG_EXTENSION, PNG_DESCRIPTION);
   }
 
   static JalviewFileChooser getEPSChooser()
   {
-    return new jalview.io.JalviewFileChooser(
-            jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[]
-            { "eps" }, new String[]
-            { "Encapsulated Postscript" }, "Encapsulated Postscript");
+    if (Jalview.isHeadlessMode())
+    {
+      return null;
+    }
+    return new JalviewFileChooser(EPS_EXTENSION, EPS_DESCRIPTION);
+  }
+
+  private void setProgressMessage(String message)
+  {
+    if (pIndicator != null && !headless)
+    {
+      pIndicator.setProgressBar(message, pSessionId);
+    }
   }
 
   static JalviewFileChooser getSVGChooser()
   {
-    return new jalview.io.JalviewFileChooser(
-            jalview.bin.Cache.getProperty("LAST_DIRECTORY"), new String[]
-            { "svg" }, new String[]
-            { "Scalable Vector Graphics" }, "Scalable Vector Graphics");
+    if (Jalview.isHeadlessMode())
+    {
+      return null;
+    }
+    return new JalviewFileChooser(SVG_EXTENSION, SVG_DESCRIPTION);
   }
 }