X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fbin%2Fargparser%2FSubVals.java;h=196cd24522b7e5420b7e6bcc7f03399450225e82;hb=6dafac1b9bcc7265b0fb1641f7474a6c81b24119;hp=e6a7cb25151a00a603f533dcb501caba0fa56029;hpb=a16741c87b8246f228af144f52bcff904d66e43a;p=jalview.git diff --git a/src/jalview/bin/argparser/SubVals.java b/src/jalview/bin/argparser/SubVals.java index e6a7cb2..196cd24 100644 --- a/src/jalview/bin/argparser/SubVals.java +++ b/src/jalview/bin/argparser/SubVals.java @@ -1,6 +1,8 @@ package jalview.bin.argparser; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import jalview.bin.Console; @@ -13,18 +15,36 @@ import jalview.bin.Console; */ public class SubVals { - private static int NOTSET = -1; + public static int NOTSET = -1; private int index = NOTSET; - private Map subVals = null; + private Map subValMap; private static char SEPARATOR = ';'; + private static char EQUALS = '='; + private String content = null; - public SubVals(String item) + protected SubVals(SubVals sv, String c) + { + if (sv == null) + { + this.subValMap = new HashMap<>(); + } + else + { + this.subValMap = sv == null ? new HashMap<>() : sv.getSubValMap(); + this.index = sv.getIndex(); + } + this.content = c; + } + + protected SubVals(String item) { + if (subValMap == null) + subValMap = new HashMap<>(); this.parseVals(item); } @@ -42,11 +62,9 @@ public class SubVals for (String subvalString : subvalsString .split(Character.toString(SEPARATOR))) { - int equals = subvalString.indexOf('='); + int equals = subvalString.indexOf(EQUALS); if (equals > -1) { - if (subVals == null) - subVals = new HashMap<>(); this.put(subvalString.substring(0, equals), subvalString.substring(equals + 1)); } @@ -59,7 +77,7 @@ public class SubVals } catch (NumberFormatException e) { // store this non-numeric key as a "true" value - subVals.put(subvalsString, "true"); + this.put(subvalString, "true"); } } } @@ -77,25 +95,28 @@ public class SubVals protected void put(String key, String val) { - if (subVals == null) - subVals = new HashMap<>(); - subVals.put(key, val); + subValMap.put(key, val); } public boolean notSet() { // notSet is true if content present but nonsensical - return index == NOTSET && subVals == null; + return index == NOTSET && (subValMap == null || subValMap.size() == 0); + } + + public String getWithSubstitutions(ArgParser ap, String id, String key) + { + return ap.makeSubstitutions(subValMap.get(key), id); } public String get(String key) { - return subVals == null ? null : subVals.get(key); + return subValMap.get(key); } public boolean has(String key) { - return subVals == null ? false : subVals.containsKey(key); + return subValMap.containsKey(key); } public int getIndex() @@ -108,15 +129,27 @@ public class SubVals return content; } + protected Map getSubValMap() + { + return subValMap; + } + public String toString() { - StringBuilder sb = new StringBuilder(); - if (subVals == null) + if (subValMap == null && getIndex() == NOTSET) return ""; - for (Map.Entry m : subVals.entrySet()) - { - sb.append(m.getKey()).append('=').append(m.getValue()).append("\n"); - } + + StringBuilder sb = new StringBuilder(); + List entries = new ArrayList<>(); + subValMap.entrySet().stream().forEachOrdered( + m -> entries.add(m.getValue().equals("true") ? m.getKey() + : new StringBuilder().append(m.getKey()).append(EQUALS) + .append(m.getValue()).toString())); + if (getIndex() != NOTSET) + entries.add(Integer.toString(getIndex())); + sb.append('['); + sb.append(String.join(Character.toString(SEPARATOR), entries)); + sb.append(']'); return sb.toString(); } } \ No newline at end of file