JAL-4279 move on if the file doesn't exist, or Identify fails for the file.
[jalview.git] / src / jalview / bin / Commands.java
index 63247a7..8164182 100644 (file)
@@ -66,6 +66,8 @@ public class Commands
 
   private Map<String, AlignFrame> afMap;
 
+  private Map<String, List<StructureViewer>> svMap;
+
   private boolean commandArgsProvided = false;
 
   private boolean argsWereParsed = false;
@@ -81,16 +83,15 @@ public class Commands
     headless = h;
     desktop = d;
     afMap = new HashMap<>();
-    if (argparser != null)
-    {
-      processArgs(argparser, headless);
-    }
   }
 
-  private boolean processArgs(ArgParser argparser, boolean h)
+  protected boolean processArgs()
   {
-    argParser = argparser;
-    headless = h;
+    if (argParser == null)
+    {
+      return true;
+    }
+
     boolean theseArgsWereParsed = false;
 
     if (argParser != null && argParser.getLinkedIds() != null)
@@ -99,9 +100,10 @@ public class Commands
       {
         ArgValuesMap avm = argParser.getLinkedArgs(id);
         theseArgsWereParsed = true;
-        theseArgsWereParsed &= processLinked(id);
+        boolean processLinkedOkay = processLinked(id);
+        theseArgsWereParsed &= processLinkedOkay;
+
         processGroovyScript(id);
-        boolean processLinkedOkay = theseArgsWereParsed;
 
         // wait around until alignFrame isn't busy
         AlignFrame af = afMap.get(id);
@@ -117,8 +119,11 @@ public class Commands
         }
 
         theseArgsWereParsed &= processImages(id);
+
         if (processLinkedOkay)
+        {
           theseArgsWereParsed &= processOutput(id);
+        }
 
         // close ap
         if (avm.getBoolean(Arg.CLOSE))
@@ -153,11 +158,6 @@ public class Commands
     return argsWereParsed;
   }
 
-  protected boolean processUnlinked(String id)
-  {
-    return processLinked(id);
-  }
-
   protected boolean processLinked(String id)
   {
     boolean theseArgsWereParsed = false;
@@ -217,6 +217,7 @@ public class Commands
             if (!(new File(openFile)).exists())
             {
               Console.warn("Can't find file '" + openFile + "'");
+              continue;
             }
           }
         }
@@ -231,6 +232,7 @@ public class Commands
         } catch (FileFormatException e1)
         {
           Console.error("Unknown file format for '" + openFile + "'");
+          continue;
         }
 
         af = afMap.get(id);
@@ -247,9 +249,24 @@ public class Commands
           Console.debug(
                   "Opening '" + openFile + "' in new alignment frame");
           FileLoader fileLoader = new FileLoader(!headless);
-
-          af = fileLoader.LoadFileWaitTillLoaded(openFile, protocol,
-                  format);
+          boolean xception=false;
+          try {
+            af = fileLoader.LoadFileWaitTillLoaded(openFile, protocol,
+                    format);
+          } catch (Throwable thr)
+          {
+            xception=true;
+            Console.error("Couldn't open '"+openFile+"' as "+format+" "+thr.getLocalizedMessage()+ " (Enable debug for full stack trace)");
+            Console.debug("Exception when opening '"+openFile+"'",thr);
+          }
+          finally
+          {
+            if (af==null && !xception)
+            {
+              Console.info("Ignoring '"+openFile+"' - no alignment data found.");
+              continue;
+            }
+          }
 
           // colour alignment?
           String colour = ArgParser.getFromSubValArgOrPref(avm, av,
@@ -588,6 +605,18 @@ public class Commands
             Console.warn("Exception whilst waiting for structure viewer "
                     + structureFilepath, x);
           }
+
+          // add StructureViewer to svMap list
+          if (svMap == null)
+          {
+            svMap = new HashMap<>();
+          }
+          if (svMap.get(id) == null)
+          {
+            svMap.put(id, new ArrayList<>());
+          }
+          svMap.get(id).add(sv);
+
           Console.debug(
                   "Successfully opened viewer for " + structureFilepath);
           String structureImageFilename = ArgParser.getValueFromSubValOrArg(
@@ -633,14 +662,6 @@ public class Commands
             switch (StructureViewer.getViewerType())
             {
             case JMOL:
-              try
-              {
-                Thread.sleep(1000); // WHY ???
-              } catch (InterruptedException e)
-              {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-              }
               JalviewStructureDisplayI sview = sv
                       .getJalviewStructureDisplay();
               if (sview instanceof AppJmol)
@@ -799,7 +820,7 @@ public class Commands
 
           case "biojs":
             Console.debug(
-                    "Creating BioJS MSA Viwer HTML file: " + fileName);
+                    "Outputting BioJS MSA Viwer HTML file: " + fileName);
             try
             {
               BioJsHTMLOutput.refreshVersionInfo(
@@ -813,12 +834,12 @@ public class Commands
             break;
 
           case "eps":
-            Console.debug("Creating EPS file: " + fileName);
-            af.createEPS(file, name);
+            Console.debug("Outputting EPS file: " + fileName);
+            af.createEPS(file, renderer);
             break;
 
           case "imagemap":
-            Console.debug("Creating ImageMap file: " + fileName);
+            Console.debug("Outputting ImageMap file: " + fileName);
             af.createImageMap(file, name);
             break;
 
@@ -989,10 +1010,38 @@ public class Commands
         seq = al.getSequenceAt(subVals.getIndex());
       }
     }
-    else if (idAv != null)
+    if (seq == null && idAv != null)
     {
       seq = al.findName(idAv.getValue());
     }
     return seq;
   }
+
+  public AlignFrame[] getAlignFrames()
+  {
+    AlignFrame[] afs = null;
+    if (afMap != null)
+    {
+      afs = (AlignFrame[]) afMap.values().toArray();
+    }
+
+    return afs;
+  }
+
+  public List<StructureViewer> getStructureViewers()
+  {
+    List<StructureViewer> svs = null;
+    if (svMap != null)
+    {
+      for (List<StructureViewer> svList : svMap.values())
+      {
+        if (svs == null)
+        {
+          svs = new ArrayList<>();
+        }
+        svs.addAll(svList);
+      }
+    }
+    return svs;
+  }
 }