X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2Fargparser%2FArgValues.java;h=f2c299cc253bf976c4c00851854188e05a294c30;hb=167f4222520be1ec49277dab1e5350d236ed6292;hp=4a60efd7f41b3ea4a51a08b77265d381f76b43f3;hpb=717b6f682f69435671f905bf6ebdaa4c996ab507;p=jalview.git diff --git a/src/jalview/bin/argparser/ArgValues.java b/src/jalview/bin/argparser/ArgValues.java index 4a60efd..f2c299c 100644 --- a/src/jalview/bin/argparser/ArgValues.java +++ b/src/jalview/bin/argparser/ArgValues.java @@ -21,6 +21,8 @@ public class ArgValues private boolean negated = false; + private boolean setByWildcard = false; + private int boolIndex = -1; private List argsIndexes; @@ -36,6 +38,16 @@ public class ArgValues this.boolValue = arg.getDefaultBoolValue(); } + protected boolean setByWildcard() + { + return setByWildcard; + } + + protected void setSetByWildcard(boolean b) + { + setByWildcard = b; + } + public Arg arg() { return arg; @@ -51,8 +63,11 @@ public class ArgValues argCount++; } - protected void setNegated(boolean b) + protected void setNegated(boolean b, boolean beingSetByWildcard) { + // don't overwrite a wildcard set boolean with a non-wildcard set boolean + if (boolIndex >= 0 && !this.setByWildcard && beingSetByWildcard) + return; this.negated = b; } @@ -61,10 +76,14 @@ public class ArgValues return this.negated; } - protected void setBoolean(boolean b, int i) + protected void setBoolean(boolean b, int i, boolean beingSetByWildcard) { + // don't overwrite a wildcard set boolean with a non-wildcard set boolean + if (boolIndex >= 0 && !this.setByWildcard && beingSetByWildcard) + return; this.boolValue = b; this.boolIndex = i; + this.setSetByWildcard(beingSetByWildcard); } protected boolean getBoolean() @@ -98,28 +117,30 @@ public class ArgValues return sb.toString(); } - protected void addValue() - { - addValue(null, -1); - } - - protected void addValue(String val, int argIndex) + protected void addValue(String val, int argIndex, boolean wildcard) { - addArgValue(new ArgValue(arg(), val, argIndex)); + addArgValue(new ArgValue(arg(), val, argIndex), wildcard); } - protected void addValue(SubVals sv, String content, int argIndex) + protected void addValue(SubVals sv, String content, int argIndex, + boolean wildcard) { - addArgValue(new ArgValue(arg(), sv, content, argIndex)); + addArgValue(new ArgValue(arg(), sv, content, argIndex), wildcard); } - protected void addArgValue(ArgValue av) + protected void addArgValue(ArgValue av, boolean beingSetByWildcard) { + // allow a non-wildcard value to overwrite a wildcard set single value + boolean overwrite = !arg.hasOption(Opt.MULTI) && setByWildcard + && !beingSetByWildcard; if ((!arg.hasOption(Opt.MULTI) && argValueList.size() > 0) - || (arg.hasOption(Opt.NODUPLICATEVALUES) - && argValueList.contains(av.getValue()))) + && !overwrite) return; - if (argValueList == null) + if (arg.hasOption(Opt.NODUPLICATEVALUES) + && this.containsValue(av.getValue())) + return; + // new or overwrite if single valued + if (argValueList == null || overwrite) { argValueList = new ArrayList(); } @@ -131,6 +152,7 @@ public class ArgValues idMap.put(id, av); } argValueList.add(av); + this.setSetByWildcard(beingSetByWildcard); } protected boolean hasValue(String val) @@ -159,4 +181,21 @@ public class ArgValues { return idMap.get(id); } + + private boolean containsValue(String v) + { + if (argValueList == null) + return false; + for (ArgValue av : argValueList) + { + String val = av.getValue(); + if (v == null && val == null) + return true; + if (v == null) + continue; + if (v.equals(val)) + return true; + } + return false; + } } \ No newline at end of file