X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=getdown%2Fsrc%2Fgetdown%2Fcore%2Fsrc%2Fmain%2Fjava%2Fcom%2Fthreerings%2Fgetdown%2Futil%2FConfig.java;h=6f99fa63918c18759bff2645f815df2655ecc8a1;hb=dbfa10a0954d79fe8f0cde05dd23aa86efc3885b;hp=4fc5e1614a6ebc59eedf84dea55ee4e3942b2485;hpb=f517e5ea31f1749617ac191137891cf87111550b;p=jalview.git diff --git a/getdown/src/getdown/core/src/main/java/com/threerings/getdown/util/Config.java b/getdown/src/getdown/core/src/main/java/com/threerings/getdown/util/Config.java index 4fc5e16..6f99fa6 100644 --- a/getdown/src/getdown/core/src/main/java/com/threerings/getdown/util/Config.java +++ b/getdown/src/getdown/core/src/main/java/com/threerings/getdown/util/Config.java @@ -373,6 +373,72 @@ public class Config String os = bits[0], arch = (bits.length > 1) ? bits[1] : ""; return (osname.indexOf(os) != -1) && (osarch.indexOf(arch) != -1); } + + public void mergeConfig(Config newValues, boolean merge) { + + for (Map.Entry entry : newValues.getData().entrySet()) { + + String key = entry.getKey(); + Object nvalue = entry.getValue(); + + if (!merge || key.equals("appbase")) { + _data.put(key, nvalue); + } else { + + // merge + + Object value = _data.get(key); + + if (value == null) { + _data.put(key, nvalue); + } else if (value instanceof String) { + if (nvalue instanceof String) { + + // value is String, nvalue is String + _data.put(key, new String[] { (String)value, (String)nvalue }); + + } else if (nvalue instanceof String[]) { + + // value is String, nvalue is String[] + String[] nvalues = (String[])nvalue; + String[] newvalues = new String[nvalues.length+1]; + newvalues[0] = (String)value; + System.arraycopy(nvalues, 0, newvalues, 1, nvalues.length); + _data.put(key, newvalues); + + } + } else if (value instanceof String[]) { + if (nvalue instanceof String) { + + // value is String[], nvalue is String + String[] values = (String[])value; + String[] newvalues = new String[values.length+1]; + System.arraycopy(values, 0, newvalues, 0, values.length); + newvalues[values.length] = (String)nvalue; + _data.put(key, newvalues); + + } else if (nvalue instanceof String[]) { + + // value is String[], nvalue is String[] + String[] values = (String[])value; + String[] nvalues = (String[])nvalue; + String[] newvalues = new String[values.length + nvalues.length]; + System.arraycopy(values, 0, newvalues, 0, values.length); + System.arraycopy(nvalues, 0, newvalues, values.length, newvalues.length); + _data.put(key, newvalues); + + } + } + + } + + } + + } + + public Map getData() { + return _data; + } private final Map _data; }