X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fbin%2Fargparser%2FArgParser.java;h=fd42bb24a506e3903c3fbbac38317c9d1cdc98d6;hb=85240f268c71a9d0dc91dc196a93cb10d29794d3;hp=947a49e42350f55d438146d82e0e8475a52a6a4c;hpb=73e4b463a2257168a1155a96deb0a18a0e4ce162;p=jalview.git diff --git a/src/jalview/bin/argparser/ArgParser.java b/src/jalview/bin/argparser/ArgParser.java index 947a49e..fd42bb2 100644 --- a/src/jalview/bin/argparser/ArgParser.java +++ b/src/jalview/bin/argparser/ArgParser.java @@ -31,12 +31,11 @@ import java.util.EnumSet; import java.util.Enumeration; import java.util.HashMap; import java.util.List; -import java.util.Locale; import java.util.Map; -import jalview.bin.Cache; import jalview.bin.Console; import jalview.bin.Jalview; +import jalview.bin.Jalview.ExitCode; import jalview.bin.argparser.Arg.Opt; import jalview.bin.argparser.Arg.Type; import jalview.util.FileUtils; @@ -171,6 +170,15 @@ public class ArgParser private BootstrapArgs bootstrapArgs = null; + private boolean oldArguments = false; + + private boolean mixedArguments = false; + + /** + * saved examples of mixed arguments + */ + private String[] mixedExamples = new String[] { null, null }; + static { argMap = new HashMap<>(); @@ -235,19 +243,40 @@ public class ArgParser if (arg.startsWith(DOUBLEDASH)) { dd = true; - break; + if (mixedExamples[1] == null) + { + mixedExamples[1] = arg; + } } - else if (arg.startsWith("-") || arg.equals("open")) + else if ((arg.startsWith("-") && !arg.equals(STDOUTFILENAME)) + || arg.equals("open")) { d = true; + if (mixedExamples[0] == null) + { + mixedExamples[0] = arg; + } + } + } + if (d) + { + if (dd) + { + mixedArguments = true; + } + else + { + oldArguments = true; } } - if (d && !dd) + + if (oldArguments || mixedArguments) { // leave it to the old style -- parse an empty list parse(new ArrayList(), false, false); return; } + if (bsa != null) this.bootstrapArgs = bsa; else @@ -373,10 +402,12 @@ public class ArgParser { // arg not found Console.error("Argument '" + arg + "' not recognised. Exiting."); - Jalview.exit("Invalid argument used." + System.lineSeparator() - + "Use" + System.lineSeparator() + "jalview " - + Arg.HELP.argString() + System.lineSeparator() - + "for a usage statement.", 13); + Jalview.exit( + "Invalid argument used." + System.lineSeparator() + "Use" + + System.lineSeparator() + "jalview " + + Arg.HELP.argString() + System.lineSeparator() + + "for a usage statement.", + ExitCode.INVALID_ARGUMENT); continue; } if (a.hasOption(Opt.PRIVATE) && !allowPrivate) @@ -505,14 +536,16 @@ public class ArgParser if (linkedId == null) { if (a.hasOption(Opt.OUTPUTFILE) && a.hasOption(Opt.ALLOWMULTIID) - && val.startsWith(MATCHALLLINKEDIDS)) + && val.contains(MATCHALLLINKEDIDS)) { - // --output=*.ext is shorthand for --all --output {basename}.ext + // --output=*.ext is shorthand for --output {basename}.ext + // --output=*/*.ext is shorthand for + // --output {dirname}/{basename}.ext // (or --image=*.ext) - allLinkedIds = true; - linkedId = MATCHALLLINKEDIDS; - val = LINKEDIDDIRNAME + File.separator + LINKEDIDBASENAME - + val.substring(MATCHALLLINKEDIDS.length()); + linkedId = allLinkedIds ? MATCHALLLINKEDIDS + : MATCHOPENEDLINKEDIDS; + val = FileUtils.convertWildcardsToPath(val, MATCHALLLINKEDIDS, + LINKEDIDDIRNAME, LINKEDIDBASENAME); } else if (allLinkedIds && a.hasOption(Opt.ALLOWMULTIID)) { @@ -584,10 +617,9 @@ public class ArgParser // set allstructures to all non-primary structure options in this linked // id if --allstructures has been set - if (allStructures - && (a.getType() == Type.STRUCTURE - || a.getType() == Type.STRUCTUREIMAGE) - && !a.hasOption(Opt.PRIMARY)) + if (allStructures && (a.getType() == Type.STRUCTURE + // || a.getType() == Type.STRUCTUREIMAGE) + ) && !a.hasOption(Opt.PRIMARY)) { if (!subvals.has(Arg.ALLSTRUCTURES.getName())) // && !subvals.has("structureid")) @@ -890,7 +922,7 @@ public class ArgParser { String message = Arg.ARGFILE.argString() + EQUALS + "\"" + argFile.getPath() + "\": File does not exist."; - Jalview.exit(message, 2); + Jalview.exit(message, ExitCode.FILE_NOT_FOUND); } try { @@ -904,7 +936,7 @@ public class ArgParser { String message = Arg.ARGFILE.argString() + "=\"" + argFile.getPath() + "\": File could not be read."; - Jalview.exit(message, 3); + Jalview.exit(message, ExitCode.FILE_NOT_READABLE); } } // Third param "true" uses Opt.PRIVATE args --setargile=argfile and @@ -930,167 +962,12 @@ public class ArgParser String message = Arg.ARGFILE.argString() + "=\"" + argFile.getPath() + "\": File could not be read."; Console.debug(message, e); - Jalview.exit(message, 3); + Jalview.exit(message, ExitCode.FILE_NOT_READABLE); } } return args; } - public static enum Position - { - FIRST, BEFORE, AFTER - } - - /** - * get from following Arg of type a or subval of same name (lowercase) - */ - public static String getValueFromSubValOrArg(ArgValuesMap avm, - ArgValue av, Arg a, SubVals sv) - { - return getFromSubValArgOrPref(avm, av, a, sv, null, null, null); - } - - /** - * get from following Arg of type a or subval key or preference pref or - * default def - */ - public static String getFromSubValArgOrPref(ArgValuesMap avm, ArgValue av, - Arg a, SubVals sv, String key, String pref, String def) - { - return getFromSubValArgOrPref(avm, a, Position.AFTER, av, sv, key, pref, - def); - } - - /** - * get from following(AFTER), first occurence of (FIRST) or previous (BEFORE) - * Arg of type a or subval key or preference pref or default def - */ - public static String getFromSubValArgOrPref(ArgValuesMap avm, Arg a, - Position pos, ArgValue av, SubVals sv, String key, String pref, - String def) - { - return getFromSubValArgOrPrefWithSubstitutions(null, avm, a, pos, av, - sv, key, pref, def); - } - - public static String getFromSubValArgOrPrefWithSubstitutions(ArgParser ap, - ArgValuesMap avm, Arg a, Position pos, ArgValue av, SubVals sv, - String key, String pref, String def) - { - if (key == null) - key = a.getName(); - String value = null; - if (sv != null && sv.has(key) && sv.get(key) != null) - { - value = ap == null ? sv.get(key) - : sv.getWithSubstitutions(ap, avm.getLinkedId(), key); - } - else if (avm != null && avm.containsArg(a)) - { - if (pos == Position.FIRST && avm.getValue(a) != null) - value = avm.getValue(a); - else if (pos == Position.BEFORE - && avm.getClosestPreviousArgValueOfArg(av, a) != null) - value = avm.getClosestPreviousArgValueOfArg(av, a).getValue(); - else if (pos == Position.AFTER - && avm.getClosestNextArgValueOfArg(av, a) != null) - value = avm.getClosestNextArgValueOfArg(av, a).getValue(); - - // look for allstructures subval for Type.STRUCTURE* - Arg arg = av.getArg(); - if (value == null && arg.hasOption(Opt.PRIMARY) - && arg.getType() == Type.STRUCTURE - && !a.hasOption(Opt.PRIMARY) && (a.getType() == Type.STRUCTURE - || a.getType() == Type.STRUCTUREIMAGE)) - { - ArgValue av2 = avm.getArgValueOfArgWithSubValKey(a, - Arg.ALLSTRUCTURES.getName()); - if (av2 != null) - { - value = av2.getValue(); - } - } - } - if (value == null) - { - value = pref != null ? Cache.getDefault(pref, def) : def; - } - return value; - } - - public static boolean getBoolFromSubValOrArg(ArgValuesMap avm, Arg a, - SubVals sv) - { - return getFromSubValArgOrPref(avm, a, sv, null, null, false); - } - - public static boolean getFromSubValArgOrPref(ArgValuesMap avm, Arg a, - SubVals sv, String key, String pref, boolean def) - { - return getFromSubValArgOrPref(avm, a, sv, key, pref, def, false); - } - - public static boolean getFromSubValArgOrPref(ArgValuesMap avm, Arg a, - SubVals sv, String key, String pref, boolean def, - boolean invertPref) - { - if ((key == null && a == null) || (sv == null && a == null)) - return false; - - boolean usingArgKey = false; - if (key == null) - { - key = a.getName(); - usingArgKey = true; - } - - String nokey = ArgParser.NEGATESTRING + key; - - // look for key or nokey in subvals first (if using Arg check options) - if (sv != null) - { - // check for true boolean - if (sv.has(key) && sv.get(key) != null) - { - if (usingArgKey) - { - if (!(a.hasOption(Opt.BOOLEAN) || a.hasOption(Opt.UNARY))) - { - Console.debug( - "Looking for boolean in subval from non-boolean/non-unary Arg " - + a.getName()); - return false; - } - } - return sv.get(key).toLowerCase(Locale.ROOT).equals("true"); - } - - // check for negative boolean (subval "no..." will be "true") - if (sv.has(nokey) && sv.get(nokey) != null) - { - if (usingArgKey) - { - if (!(a.hasOption(Opt.BOOLEAN))) - { - Console.debug( - "Looking for negative boolean in subval from non-boolean Arg " - + a.getName()); - return false; - } - } - return !sv.get(nokey).toLowerCase(Locale.ROOT).equals("true"); - } - } - - // check argvalues - if (avm != null && avm.containsArg(a)) - return avm.getBoolean(a); - - // return preference or default - boolean prefVal = pref != null ? Cache.getDefault(pref, def) : false; - return pref != null ? (invertPref ? !prefVal : prefVal) : def; - } - // the following methods look for the "*" linkedId and add the argvalue to all // linkedId ArgValues if it does. /** @@ -1103,13 +980,6 @@ public class ArgParser argIndex, doSubs); } - private void addValue(String linkedId, Type type, ArgValues avs, String v, - int argIndex, boolean doSubs) - { - this.argValueOperation(Op.ADDVALUE, linkedId, type, avs, null, v, false, - argIndex, doSubs); - } - private void setBoolean(String linkedId, Type type, ArgValues avs, boolean b, int argIndex) { @@ -1318,4 +1188,19 @@ public class ArgParser return linkedArgs.get(linkedId); } + public boolean isOldStyle() + { + return oldArguments; + } + + public boolean isMixedStyle() + { + return mixedArguments; + } + + public String[] getMixedExamples() + { + return mixedExamples; + } + } \ No newline at end of file