X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2Fargparser%2FBootstrapArgs.java;h=4829ef8a68117db7ef396c4477b966869ff8540c;hb=6dafac1b9bcc7265b0fb1641f7474a6c81b24119;hp=49e8686003e3d58694e7a335e6ea982995b454a5;hpb=a16741c87b8246f228af144f52bcff904d66e43a;p=jalview.git diff --git a/src/jalview/bin/argparser/BootstrapArgs.java b/src/jalview/bin/argparser/BootstrapArgs.java index 49e8686..4829ef8 100644 --- a/src/jalview/bin/argparser/BootstrapArgs.java +++ b/src/jalview/bin/argparser/BootstrapArgs.java @@ -1,10 +1,13 @@ package jalview.bin.argparser; +import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import jalview.bin.argparser.Arg.Opt; import jalview.util.FileUtils; @@ -14,6 +17,8 @@ public class BootstrapArgs // only need one private Map> bootstrapArgMap = new HashMap<>(); + private Set argFiles = new HashSet<>(); + public static BootstrapArgs getBootstrapArgs(String[] args) { List argList = new ArrayList<>(Arrays.asList(args)); @@ -22,13 +27,25 @@ public class BootstrapArgs private BootstrapArgs(List args) { - parse(args); + parse(args, null); } - private void parse(List args) + private void parse(List args, File inArgFile) { if (args == null) return; + // avoid looping argFiles + if (inArgFile != null) + { + if (argFiles.contains(inArgFile)) + { + System.err.println( + "Looped argfiles detected: '" + inArgFile.getPath() + "'"); + return; + } + argFiles.add(inArgFile); + } + for (int i = 0; i < args.size(); i++) { String arg = args.get(i); @@ -37,9 +54,8 @@ public class BootstrapArgs if (arg.startsWith(ArgParser.DOUBLEDASH)) { // remove "--" - System.out.println("###### BOOTSTRAP: '" + arg + "'"); arg = arg.substring(ArgParser.DOUBLEDASH.length()); - int equalPos = arg.indexOf('='); + int equalPos = arg.indexOf(ArgParser.EQUALS); if (equalPos > -1 && ArgParser.argMap.containsKey(arg.substring(0, equalPos))) { @@ -51,7 +67,6 @@ public class BootstrapArgs && ArgParser.argMap.containsKey( arg.substring(ArgParser.NEGATESTRING.length()))) { - System.out.println("###### BOOTSTRAP IN NEGATESTRING"); argName = arg.substring(ArgParser.NEGATESTRING.length()); val = "false"; } @@ -71,23 +86,36 @@ public class BootstrapArgs if (a.hasOption(Opt.STRING)) { + List vals = null; if (equalPos == -1) { - addAll(a, ArgParser.getShellGlobbedFilenameValues(a, args, - i + 1)); + vals = ArgParser.getShellGlobbedFilenameValues(a, args, i + 1); } else { if (a.hasOption(Opt.GLOB)) - addAll(a, FileUtils.getFilenamesFromGlob(val)); + { + vals = FileUtils.getFilenamesFromGlob(val); + } else - add(a, val); + { + vals = new ArrayList<>(); + vals.add(val); + } + } + addAll(a, vals); + + if (a == Arg.ARGFILE) + { + for (String filename : vals) + { + File argFile = new File(filename); + parse(ArgParser.readArgFile(argFile), argFile); + } } } else { - System.err.println( - "###### Adding '" + a.getName() + "' with '" + val + "'"); add(a, val); } } @@ -142,6 +170,10 @@ public class BootstrapArgs { l.addAll(al); } + else if (l.size() == 0 && al.size() > 0) + { + l.add(al.get(0)); + } } /* @@ -156,11 +188,22 @@ public class BootstrapArgs return (aL == null || aL.size() == 0) ? null : aL.get(0); } + public boolean getBoolean(Arg a, boolean d) + { + if (!bootstrapArgMap.containsKey(a)) + return d; + return Boolean.parseBoolean(get(a)); + } + public boolean getBoolean(Arg a) { - if (!bootstrapArgMap.containsKey(a) - || !(a.hasOption(Opt.BOOLEAN) || a.hasOption(Opt.UNARY))) + if (!(a.hasOption(Opt.BOOLEAN) || a.hasOption(Opt.UNARY))) + { return false; - return Boolean.parseBoolean(get(a)); + } + if (bootstrapArgMap.containsKey(a)) + return Boolean.parseBoolean(get(a)); + else + return a.getDefaultBoolValue(); } }