JAL-629 --argfile=glob implemented. Remove reference seq from pAE Matrix annotation...
[jalview.git] / src / jalview / bin / ArgParser.java
index 65d0026..3b08013 100644 (file)
@@ -36,6 +36,8 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 
+import jalview.util.FileUtils;
+
 public class ArgParser
 {
   private static final String NEGATESTRING = "no";
@@ -44,7 +46,8 @@ public class ArgParser
 
   private static enum Opt
   {
-    BOOLEAN, STRING, UNARY, MULTI, LINKED, NODUPLICATEVALUES, BOOTSTRAP
+    BOOLEAN, STRING, UNARY, MULTI, LINKED, NODUPLICATEVALUES, BOOTSTRAP,
+    GLOB
   }
 
   // These bootstrap args are simply parsed before a full parse of arguments and
@@ -124,7 +127,7 @@ public class ArgParser
       CLOSE.setOptions(Opt.UNARY, Opt.LINKED);
       DEBUG.setOptions(Opt.BOOLEAN, Opt.BOOTSTRAP);
       QUIET.setOptions(Opt.UNARY, Opt.MULTI, Opt.BOOTSTRAP);
-      ARGFILE.setOptions(Opt.STRING, Opt.MULTI, Opt.BOOTSTRAP);
+      ARGFILE.setOptions(Opt.STRING, Opt.MULTI, Opt.BOOTSTRAP, Opt.GLOB);
     }
 
     private final String[] argNames;
@@ -1031,27 +1034,39 @@ public class ArgParser
     }
   }
 
-  public static ArgParser parseArgFiles(List<String> argFilenames)
+  public static ArgParser parseArgFiles(List<String> argFilenameGlobs)
+  {
+    List<File> argFiles = new ArrayList<>();
+
+    for (String pattern : argFilenameGlobs)
+    {
+      // I don't think we want to dedup files, making life easier
+      argFiles.addAll(FileUtils.getFilesFromGlob(pattern));
+    }
+
+    return parseArgFileList(argFiles);
+  }
+
+  public static ArgParser parseArgFileList(List<File> argFiles)
   {
     List<String> argsList = new ArrayList<>();
-    for (String argFilename : argFilenames)
+    for (File argFile : argFiles)
     {
-      File argFile = new File(argFilename);
       if (!argFile.exists())
       {
-        System.err
-                .println("--" + Arg.ARGFILE.name().toLowerCase(Locale.ROOT)
-                        + "=\"" + argFilename + "\": File does not exist.");
+        System.err.println(
+                "--" + Arg.ARGFILE.name().toLowerCase(Locale.ROOT) + "=\""
+                        + argFile.getPath() + "\": File does not exist.");
         System.exit(2);
       }
       try
       {
-        argsList.addAll(Files.readAllLines(Paths.get(argFilename)));
+        argsList.addAll(Files.readAllLines(Paths.get(argFile.getPath())));
       } catch (IOException e)
       {
-        System.err.println(
-                "--" + Arg.ARGFILE.name().toLowerCase(Locale.ROOT) + "=\""
-                        + argFilename + "\": File could not be read.");
+        System.err.println("--"
+                + Arg.ARGFILE.name().toLowerCase(Locale.ROOT) + "=\""
+                + argFile.getPath() + "\": File could not be read.");
         System.exit(3);
       }
     }
@@ -1063,14 +1078,14 @@ public class ArgParser
     // only need one
     private static Map<Arg, List<String>> bootstrapArgMap = new HashMap<>();
 
-    private BootstrapArgs(String[] args)
+    public static BootstrapArgs getBootstrapArgs(String[] args)
     {
-      init(args);
+      return new BootstrapArgs(args);
     }
 
-    public static BootstrapArgs getBootstrapArgs(String[] args)
+    private BootstrapArgs(String[] args)
     {
-      return new BootstrapArgs(args);
+      init(args);
     }
 
     private void init(String[] args)