JAL-629 --structureimage with formatting args.
[jalview.git] / src / jalview / bin / Commands.java
index dcdb4c0..2d57bc4 100644 (file)
@@ -14,6 +14,7 @@ import java.util.Locale;
 import java.util.Map;
 
 import jalview.analysis.AlignmentUtils;
+import jalview.api.structures.JalviewStructureDisplayI;
 import jalview.bin.argparser.Arg;
 import jalview.bin.argparser.ArgParser;
 import jalview.bin.argparser.ArgParser.Position;
@@ -26,6 +27,7 @@ import jalview.datamodel.SequenceI;
 import jalview.datamodel.annotations.AlphaFoldAnnotationRowBuilder;
 import jalview.gui.AlignFrame;
 import jalview.gui.AlignmentPanel;
+import jalview.gui.AppJmol;
 import jalview.gui.Desktop;
 import jalview.gui.Preferences;
 import jalview.gui.StructureChooser;
@@ -45,9 +47,13 @@ import jalview.io.IdentifyFile;
 import jalview.io.NewickFile;
 import jalview.structure.StructureImportSettings.TFType;
 import jalview.structure.StructureSelectionManager;
+import jalview.util.FileUtils;
 import jalview.util.HttpUtils;
+import jalview.util.ImageMaker;
+import jalview.util.ImageMaker.TYPE;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
+import jalview.util.imagemaker.BitmapImageSizing;
 
 public class Commands
 {
@@ -73,7 +79,7 @@ public class Commands
     argParser = argparser;
     headless = h;
     desktop = d;
-    afMap = new HashMap<String, AlignFrame>();
+    afMap = new HashMap<>();
     if (argparser != null)
     {
       processArgs(argparser, headless);
@@ -558,12 +564,74 @@ public class Commands
                           || Cache.getDefault("ADD_TEMPFACT_ANN", false));
 
           // TODO use ssFromStructure
-          StructureChooser.openStructureFileForSequence(null, null, ap, seq,
-                  false, structureFilepath, tft, paeFilepath, false,
-                  ssFromStructure, false, viewerType);
+          StructureViewer sv = StructureChooser
+                  .openStructureFileForSequence(null, null, ap, seq, false,
+                          structureFilepath, tft, paeFilepath, false,
+                          ssFromStructure, false, viewerType);
 
-          String structureImage = ArgParser.getValueFromSubValOrArg(avm, av,
-                  Arg.STRUCTUREIMAGE, subVals);
+          if (headless)
+          {
+            sv.setAsync(false);
+          }
+
+          String structureImageFilename = ArgParser.getValueFromSubValOrArg(
+                  avm, av, Arg.STRUCTUREIMAGE, subVals);
+          if (sv != null && structureImageFilename != null)
+          {
+            File structureImageFile = new File(structureImageFilename);
+            String width = ArgParser.getValueFromSubValOrArg(avm, av,
+                    Arg.STRUCTUREIMAGEWIDTH, subVals);
+            String height = ArgParser.getValueFromSubValOrArg(avm, av,
+                    Arg.STRUCTUREIMAGEHEIGHT, subVals);
+            String scale = ArgParser.getValueFromSubValOrArg(avm, av,
+                    Arg.STRUCTUREIMAGESCALE, subVals);
+            String renderer = ArgParser.getValueFromSubValOrArg(avm, av,
+                    Arg.STRUCTUREIMAGETEXTRENDERER, subVals);
+            String typeS = ArgParser.getValueFromSubValOrArg(avm, av,
+                    Arg.STRUCTUREIMAGETYPE, subVals);
+            if (typeS == null || typeS.length() == 0)
+            {
+              typeS = FileUtils.getExtension(structureImageFile);
+            }
+            TYPE imageType;
+            try
+            {
+              imageType = Enum.valueOf(TYPE.class,
+                      typeS.toUpperCase(Locale.ROOT));
+            } catch (IllegalArgumentException e)
+            {
+              Console.warn("Do not know image format '" + typeS
+                      + "', using PNG");
+              imageType = TYPE.PNG;
+            }
+            BitmapImageSizing userBis = ImageMaker
+                    .parseScaleWidthHeightStrings(scale, width, height);
+            switch (sv.getViewerType())
+            {
+            case JMOL:
+              try
+              {
+                Thread.sleep(1000);
+              } catch (InterruptedException e)
+              {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+              }
+              JalviewStructureDisplayI sview = sv
+                      .getJalviewStructureDisplay();
+              if (sview instanceof AppJmol)
+              {
+                AppJmol jmol = (AppJmol) sview;
+                jmol.makePDBImage(structureImageFile, imageType, renderer,
+                        userBis);
+              }
+              break;
+            default:
+              Console.warn("Cannot export image for structure viewer "
+                      + sv.getViewerType() + " yet");
+              break;
+            }
+          }
         }
       }
     }
@@ -638,48 +706,14 @@ public class Commands
           renderer = "text";
         String type = "png"; // default
 
-        float bitmapscale = 0.0f;
-        int bitmapwidth = 0;
-        int bitmapheight = 0;
         String scale = ArgParser.getValueFromSubValOrArg(avm, av, Arg.SCALE,
                 subVal);
-        if (scale != null)
-        {
-          try
-          {
-            bitmapscale = Float.parseFloat(scale);
-          } catch (NumberFormatException e)
-          {
-            Console.warn("Did not understand scale '" + scale
-                    + "', won't be used.");
-          }
-        }
         String width = ArgParser.getValueFromSubValOrArg(avm, av, Arg.WIDTH,
                 subVal);
-        if (width != null)
-        {
-          try
-          {
-            bitmapwidth = Integer.parseInt(width);
-          } catch (NumberFormatException e)
-          {
-            Console.warn("Did not understand width '" + width
-                    + "', won't be used.");
-          }
-        }
         String height = ArgParser.getValueFromSubValOrArg(avm, av,
                 Arg.HEIGHT, subVal);
-        if (height != null)
-        {
-          try
-          {
-            bitmapheight = Integer.parseInt(height);
-          } catch (NumberFormatException e)
-          {
-            Console.warn("Did not understand height '" + height
-                    + "', won't be used.");
-          }
-        }
+        BitmapImageSizing userBis = ImageMaker
+                .parseScaleWidthHeightStrings(scale, width, height);
 
         type = ArgParser.getValueFromSubValOrArg(avm, av, Arg.TYPE, subVal);
         if (type == null && fileName != null)
@@ -708,7 +742,7 @@ public class Commands
 
         case "png":
           Console.debug("Outputting type '" + type + "' to " + fileName);
-          af.createPNG(file, null, bitmapscale, bitmapwidth, bitmapheight);
+          af.createPNG(file, null, userBis);
           break;
 
         case "html":