JAL-629 don’t carry on Jalview.main if we’ve already processed command line args...
[jalview.git] / src / jalview / bin / Commands.java
index c08dd23..61ee1be 100644 (file)
@@ -32,6 +32,7 @@ import jalview.io.HtmlSvgOutput;
 import jalview.io.IdentifyFile;
 import jalview.structure.StructureImportSettings;
 import jalview.structure.StructureImportSettings.TFType;
+import jalview.structure.StructureSelectionManager;
 import jalview.util.HttpUtils;
 import jalview.util.MessageManager;
 import jalview.util.Platform;
@@ -47,14 +48,21 @@ public class Commands
 
   private Map<String, AlignFrame> afMap;
 
-  public static void processArgs(ArgParser ap, boolean h)
+  public static boolean processArgs(ArgParser ap, boolean h)
   {
     argParser = ap;
     headless = h;
+    boolean argsWereParsed = false;
+    if (headless)
+    {
+      System.setProperty("java.awt.headless", "true");
+    }
+
     if (argParser != null && argParser.linkedIds() != null)
     {
       for (String id : argParser.linkedIds())
       {
+        Console.debug("##### id=" + id);
         Commands cmds = new Commands();
         if (id == null)
         {
@@ -65,13 +73,24 @@ public class Commands
           cmds.processLinked(id);
         }
         cmds.processImages(id);
+        argsWereParsed |= cmds.wereParsed();
       }
 
-      if (argParser.getBool(Arg.QUIT))
-      {
-        Jalview.getInstance().quit();
-      }
     }
+    if (argParser.getBool(Arg.QUIT))
+    {
+      Jalview.getInstance().quit();
+      return true;
+    }
+    // carry on with jalview.bin.Jalview
+    return argsWereParsed;
+  }
+
+  boolean argsWereParsed = false;
+
+  private boolean wereParsed()
+  {
+    return argsWereParsed;
   }
 
   public Commands()
@@ -87,6 +106,8 @@ public class Commands
 
   protected void processUnlinked(String id)
   {
+    Map<Arg, ArgValues> m = argParser.linkedArgs(id);
+
     processLinked(id);
   }
 
@@ -104,18 +125,18 @@ public class Commands
     FileFormatI format = null;
     DataSourceType protocol = null;
     */
-
     if (ArgParser.getArgValues(m, Arg.OPEN) != null)
     {
       long progress = -1;
 
       boolean first = true;
       AlignFrame af;
-      OPEN: for (String openFile : ArgParser.getValues(m, Arg.OPEN))
+      for (String openFile : ArgParser.getValues(m, Arg.OPEN))
       {
         if (openFile == null)
-          continue OPEN;
+          continue;
 
+        argsWereParsed = true;
         if (first)
         {
           first = false;
@@ -140,7 +161,6 @@ public class Commands
             if (!(new File(openFile)).exists())
             {
               Console.warn("Can't find file '" + openFile + "'");
-              continue OPEN;
             }
           }
         }
@@ -289,6 +309,16 @@ public class Commands
 
           // store the AlignFrame for this id
           afMap.put(id, af);
+
+          // is it its own structure file?
+          if (format.isStructureFile())
+          {
+            StructureSelectionManager ssm = StructureSelectionManager
+                    .getStructureSelectionManager(Desktop.instance);
+            SequenceI seq = af.alignPanel.getAlignment().getSequenceAt(0);
+            ssm.computeMapping(false, new SequenceI[] { seq }, null,
+                    openFile, DataSourceType.FILE, null);
+          }
         }
         else
         {
@@ -308,12 +338,15 @@ public class Commands
           Console.error("Could not open any files in headless mode");
           System.exit(1);
         }
-      }
-      else
-      {
-        Console.warn("No more files to open");
-        if (desktop != null)
-          desktop.setProgressBar(null, progress);
+        // TOREMOVE COMMENT
+        // @Ben assumed this was the GUI version of above, rather then the
+        // first==false state
+        else
+        {
+          Console.warn("No more files to open");
+          if (desktop != null)
+            desktop.setProgressBar(null, progress);
+        }
       }
 
     }
@@ -328,17 +361,32 @@ public class Commands
         {
           SubVal subVal = ArgParser.getSubVal(val);
           File paeFile = new File(subVal.content);
-          if ("structid".equals(subVal.index))
+          String structId = "structid".equals(subVal.keyName)
+                  ? subVal.keyValue
+                  : null;
+          if (subVal.notSet())
+          {
+            // take structid from pdbfilename
+          }
+          if ("structfile".equals(subVal.keyName))
           {
             EBIAlfaFold.addAlphaFoldPAEToStructure(
                     af.getCurrentView().getAlignment(), paeFile,
-                    subVal.index, subVal.keyValue);
+                    subVal.index, subVal.keyValue, false);
+          }
+          else if ("structid".equals(subVal.keyName))
+          {
+            EBIAlfaFold.addAlphaFoldPAEToStructure(
+                    af.getCurrentView().getAlignment(), paeFile,
+                    subVal.index, subVal.keyValue, true);
           }
           else
           {
-            EBIAlfaFold.addAlphaFoldPAEToSequence(af.getCurrentView().getAlignment(),
-                    paeFile, subVal.index,
-                    "id".equals(subVal.keyName) ? subVal.keyValue : null);
+            EBIAlfaFold.addAlphaFoldPAEToSequence(
+                    af.getCurrentView().getAlignment(), paeFile,
+                    subVal.index,
+                    "seqid".equals(subVal.keyName) ? subVal.keyValue
+                            : null);
             // required to readjust the height and position of the pAE
             // annotation
           }
@@ -356,7 +404,7 @@ public class Commands
       AlignFrame af = afMap.get(id);
       if (ArgParser.getArgValues(m, Arg.STRUCTURE) != null)
       {
-        STRUCTURE: for (String val : ArgParser.getValues(m, Arg.STRUCTURE))
+        for (String val : ArgParser.getValues(m, Arg.STRUCTURE))
         {
           SubVal subId = new SubVal(val);
           SequenceI seq = getSpecifiedSequence(af, subId);
@@ -386,14 +434,14 @@ public class Commands
           if (structureFile == null)
           {
             Console.warn("Not provided structure file with '" + val + "'");
-            continue STRUCTURE;
+            continue;
           }
 
           if (!structureFile.exists())
           {
             Console.warn("Structure file '"
                     + structureFile.getAbsoluteFile() + "' not found.");
-            continue STRUCTURE;
+            continue;
           }
 
           Console.debug("Using structure file "
@@ -441,6 +489,10 @@ public class Commands
             }
           }
         }
+        // for moment we disable JSON export
+        Cache.setPropsAreReadOnly(true);
+        Cache.setProperty("EXPORT_EMBBED_BIOJSON", "false");
+
         switch (type)
         {
         case "svg":