JAL-4196 report an error if structure view doesn’t get created (for whatever reason...
[jalview.git] / src / jalview / bin / Commands.java
index 30fdc30..7f493e0 100644 (file)
@@ -44,6 +44,9 @@ import jalview.io.FileLoader;
 import jalview.io.HtmlSvgOutput;
 import jalview.io.IdentifyFile;
 import jalview.io.NewickFile;
+import jalview.io.exceptions.ImageOutputException;
+import jalview.schemes.ColourSchemeI;
+import jalview.schemes.ColourSchemeProperty;
 import jalview.structure.StructureImportSettings.TFType;
 import jalview.structure.StructureSelectionManager;
 import jalview.util.FileUtils;
@@ -100,6 +103,16 @@ public class Commands
         theseArgsWereParsed &= processLinked(id);
         processGroovyScript(id);
         boolean processLinkedOkay = theseArgsWereParsed;
+        
+        // wait around until alignFrame isn't busy
+        AlignFrame af=afMap.get(id);
+        while (af!=null && af.getViewport().isCalcInProgress())
+        {
+          try {
+            Thread.sleep(25);
+          } catch (Exception q) {};
+        }
+        
         theseArgsWereParsed &= processImages(id);
         if (processLinkedOkay)
           theseArgsWereParsed &= processOutput(id);
@@ -107,7 +120,7 @@ public class Commands
         // close ap
         if (avm.getBoolean(Arg.CLOSE))
         {
-          AlignFrame af = afMap.get(id);
+          af = afMap.get(id);
           if (af != null)
           {
             af.closeMenuItem_actionPerformed(true);
@@ -249,7 +262,15 @@ public class Commands
                   Arg.COLOUR, sv, null, "DEFAULT_COLOUR_PROT", "");
           if ("" != colour)
           {
-            af.changeColour_actionPerformed(colour);
+            ColourSchemeI cs = ColourSchemeProperty.getColourScheme(
+                    af.getViewport(), af.getViewport().getAlignment(), colour);
+            
+            if (cs==null && !"None".equals(colour))
+            {
+              Console.warn("Couldn't parse '"+colour+"' as a colourscheme.");
+            } else {
+              af.changeColour(cs);
+            }
             Jalview.testoutput(argParser, Arg.COLOUR, "zappo", colour);
           }
 
@@ -548,9 +569,20 @@ public class Commands
                           structureFilepath, tft, paeFilepath, false,
                           ssFromStructure, false, viewerType);
 
-          if (headless)
+          if (sv==null)
           {
-            sv.setAsync(false);
+            Console.error("Failed to import and open structure view.");
+            continue;
+          }
+          while (sv.isBusy())
+          {
+            try {
+              Thread.sleep(25);
+            }
+            catch (Exception x)
+            {
+              
+            }
           }
 
           String structureImageFilename = ArgParser.getValueFromSubValOrArg(
@@ -608,8 +640,15 @@ public class Commands
               if (sview instanceof AppJmol)
               {
                 AppJmol jmol = (AppJmol) sview;
-                jmol.makePDBImage(structureImageFile, imageType, renderer,
+                try { 
+                  jmol.makePDBImage(structureImageFile, imageType, renderer,
                         userBis);
+                }
+                catch (ImageOutputException ioexc)
+                {
+                  Console.warn("Unexpected error whilst exporting image to "+structureImageFile,ioexc);
+                }
+
               }
               break;
             default:
@@ -717,7 +756,7 @@ public class Commands
         Cache.setProperty("EXPORT_EMBBED_BIOJSON", "false");
 
         Console.info("Writing " + file);
-
+        try {
         switch (type)
         {
 
@@ -738,6 +777,7 @@ public class Commands
           break;
 
         case "biojs":
+          Console.debug("Creating BioJS MSA Viwer HTML file: " + fileName);
           try
           {
             BioJsHTMLOutput.refreshVersionInfo(
@@ -748,17 +788,16 @@ public class Commands
           }
           BioJsHTMLOutput bjs = new BioJsHTMLOutput(af.alignPanel);
           bjs.exportHTML(fileName);
-          Console.debug("Creating BioJS MSA Viwer HTML file: " + fileName);
           break;
 
         case "eps":
-          af.createEPS(file, name);
           Console.debug("Creating EPS file: " + fileName);
+          af.createEPS(file, name);
           break;
 
         case "imagemap":
-          af.createImageMap(file, name);
           Console.debug("Creating ImageMap file: " + fileName);
+          af.createImageMap(file, name);
           break;
 
         default:
@@ -766,6 +805,9 @@ public class Commands
                   + "' not known. Ignoring");
           break;
         }
+        } catch (Exception ioex) {
+          Console.warn("Unexpected error during export",ioex);
+        }
       }
     }
     return true;