JAL-4274 Use Cache BITMAP_* if no other image restrictions given
[jalview.git] / src / jalview / gui / ImageExporter.java
index 1d472f1..457ea1f 100644 (file)
@@ -23,17 +23,18 @@ package jalview.gui;
 import java.awt.Component;
 import java.awt.Graphics;
 import java.io.File;
-import java.util.concurrent.Callable;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import jalview.bin.Cache;
 import jalview.bin.Jalview;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
+import jalview.io.exceptions.ImageOutputException;
 import jalview.util.ImageMaker;
 import jalview.util.ImageMaker.TYPE;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
+import jalview.util.StringUtils;
 import jalview.util.imagemaker.BitmapImageSizing;
 
 /**
@@ -104,14 +105,15 @@ public class ImageExporter
    *          what the image is of e.g. Tree, Alignment
    */
   public void doExport(File file, Component parent, int width, int height,
-          String imageSource)
+          String imageSource) throws ImageOutputException
   {
     doExport(file, parent, width, height, imageSource, null,
-            BitmapImageSizing.nullBitmapImageSizing());
+            BitmapImageSizing.defaultBitmapImageSizing());
   }
 
   public void doExport(File file, Component parent, int width, int height,
           String imageSource, String renderer, BitmapImageSizing userBis)
+          throws ImageOutputException
   {
     final long messageId = System.currentTimeMillis();
     setStatus(
@@ -124,6 +126,12 @@ public class ImageExporter
      */
     if (file == null && !Jalview.isHeadlessMode())
     {
+      if (Desktop.instance.isInBatchMode())
+      {
+        // defensive error report - we could wait for user input.. I guess ?
+        throw (new ImageOutputException(
+                "Need an output file to render to when exporting images in batch mode!"));
+      }
       JalviewFileChooser chooser = imageType.getFileChooser();
       chooser.setFileView(new JalviewFileView());
       MessageManager.formatMessage("label.create_image_of",
@@ -159,29 +167,22 @@ public class ImageExporter
       renderStyle = "Text";
     }
     AtomicBoolean textSelected = new AtomicBoolean(
-            !"Lineart".equals(renderStyle));
-    if ((imageType == TYPE.EPS || imageType == TYPE.SVG)
-            && LineartOptions.PROMPT_EACH_TIME.equals(renderStyle)
+            !StringUtils.equalsIgnoreCase("lineart", renderStyle));
+    if ((imageType == TYPE.EPS || imageType == TYPE.SVG) && StringUtils
+            .equalsIgnoreCase(LineartOptions.PROMPT_EACH_TIME, renderStyle)
             && !Jalview.isHeadlessMode())
     {
       final File chosenFile = file;
-      Callable<Void> okAction = () -> {
+      Runnable okAction = () -> {
         exportImage(chosenFile, !textSelected.get(), width, height,
                 messageId, userBis);
-        return null;
       };
       LineartOptions epsOption = new LineartOptions(TYPE.EPS.getName(),
               textSelected);
-      epsOption.setResponseAction(1, new Callable<Void>()
-      {
-        @Override
-        public Void call()
-        {
-          setStatus(MessageManager.formatMessage(
-                  "status.cancelled_image_export_operation",
-                  imageType.getName()), messageId);
-          return null;
-        }
+      epsOption.setResponseAction(1, () -> {
+        setStatus(MessageManager.formatMessage(
+                "status.cancelled_image_export_operation",
+                imageType.getName()), messageId);
       });
       epsOption.setResponseAction(0, okAction);
       epsOption.showDialog();
@@ -190,8 +191,8 @@ public class ImageExporter
     else
     {
       /*
-       * character rendering not required, or preference already set 
-       * - just do the export
+       * character rendering not required, or preference already set
+       * or we're in headless mode - just do the export
        */
       exportImage(file, !textSelected.get(), width, height, messageId,
               userBis);
@@ -228,8 +229,8 @@ public class ImageExporter
               messageId);
     } catch (Exception e)
     {
-      System.out.println(String.format("Error creating %s file: %s", type,
-              e.toString()));
+      jalview.bin.Console.error(String.format("Error creating %s file: %s",
+              type, e.toString()), e);
       setStatus(MessageManager.formatMessage("info.error_creating_file",
               type), messageId);
     }