Merge branch 'patch/JAL-4196_structure_viewer_synchronising' into develop
[jalview.git] / src / jalview / bin / Commands.java
index 3437bfd..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);
           }
 
@@ -452,14 +473,6 @@ public class Commands
           Console.debug("Using structure file "
                   + structureFile.getAbsolutePath());
 
-          // ##### Does this need to happen? Follow
-          // openStructureFileForSequence() below
-          /*
-          PDBEntry fileEntry = new AssociatePdbFileWithSeq()
-                  .associatePdbWithSeq(structureFile.getAbsolutePath(),
-                          DataSourceType.FILE, seq, true, Desktop.instance);
-                          */
-
           // open structure view
           AlignmentPanel ap = af.alignPanel;
           if (headless)
@@ -505,15 +518,6 @@ public class Commands
                   Arg.NOTEMPFAC, subVals, null, "ADD_TEMPFACT_ANN", false,
                   true);
           TFType tft = notempfac ? null : TFType.DEFAULT;
-          /*
-          String tftString = subVals.get("tempfac");
-          ArgValue tftAv = getArgAssociatedWithStructure(Arg.TEMPFAC, avm,
-                  af, structureFilepath);
-          if (tftString == null && tftAv != null)
-          {
-            tftString = tftAv.getSubVals().getContent();
-          }
-          */
           if (tftString != null && !notempfac)
           {
             // get kind of temperature factor annotation
@@ -565,26 +569,44 @@ 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(
                   avm, av, Arg.STRUCTUREIMAGE, subVals);
           if (sv != null && structureImageFilename != null)
           {
+            ArgValue siAv = avm.getClosestNextArgValueOfArg(av,
+                    Arg.STRUCTUREIMAGE);
+            SubVals sisv = null;
+            if (structureImageFilename.equals(siAv.getValue()))
+            {
+              sisv = siAv.getSubVals();
+            }
             File structureImageFile = new File(structureImageFilename);
             String width = ArgParser.getValueFromSubValOrArg(avm, av,
-                    Arg.STRUCTUREIMAGEWIDTH, subVals);
+                    Arg.STRUCTUREIMAGEWIDTH, sisv);
             String height = ArgParser.getValueFromSubValOrArg(avm, av,
-                    Arg.STRUCTUREIMAGEHEIGHT, subVals);
+                    Arg.STRUCTUREIMAGEHEIGHT, sisv);
             String scale = ArgParser.getValueFromSubValOrArg(avm, av,
-                    Arg.STRUCTUREIMAGESCALE, subVals);
+                    Arg.STRUCTUREIMAGESCALE, sisv);
             String renderer = ArgParser.getValueFromSubValOrArg(avm, av,
-                    Arg.STRUCTUREIMAGETEXTRENDERER, subVals);
+                    Arg.STRUCTUREIMAGETEXTRENDERER, sisv);
             String typeS = ArgParser.getValueFromSubValOrArg(avm, av,
-                    Arg.STRUCTUREIMAGETYPE, subVals);
+                    Arg.STRUCTUREIMAGETYPE, sisv);
             if (typeS == null || typeS.length() == 0)
             {
               typeS = FileUtils.getExtension(structureImageFile);
@@ -618,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:
@@ -727,7 +756,7 @@ public class Commands
         Cache.setProperty("EXPORT_EMBBED_BIOJSON", "false");
 
         Console.info("Writing " + file);
-
+        try {
         switch (type)
         {
 
@@ -748,6 +777,7 @@ public class Commands
           break;
 
         case "biojs":
+          Console.debug("Creating BioJS MSA Viwer HTML file: " + fileName);
           try
           {
             BioJsHTMLOutput.refreshVersionInfo(
@@ -758,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:
@@ -776,6 +805,9 @@ public class Commands
                   + "' not known. Ignoring");
           break;
         }
+        } catch (Exception ioex) {
+          Console.warn("Unexpected error during export",ioex);
+        }
       }
     }
     return true;