]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/CommandContextImpl.java
Fixed CommandContextImpl.merge to not duplicate same values in result
[simantics/platform.git] / bundles / org.simantics.document.server.io / src / org / simantics / document / server / io / CommandContextImpl.java
index 3277bbd1edfe02440a1b944f7f6c192c4808875c..5fb3a283e93a0b635768e5517fc1b3e6f14ac50d 100644 (file)
@@ -66,6 +66,12 @@ public class CommandContextImpl implements CommandContextMutable {
                if (context != null) {
                        Map<String,List<List<Object>>> from = context.getData(); 
                        for (Map.Entry<String, List<List<Object>>> entry : from.entrySet()) {
+                               String key = entry.getKey();
+                               Object existing = getValue(key);
+                               Object newValue = context.getValue(key);
+                               // Do not merge duplicates!
+                               if (newValue != null && newValue.equals(existing))
+                                       continue;
                                List<List<Object>> rows = ensureRowsAvailable(entry.getKey());
                                rows.addAll(entry.getValue());
                        }
@@ -80,11 +86,24 @@ public class CommandContextImpl implements CommandContextMutable {
        @Override
        public String toString() {
                StringBuilder sb = new StringBuilder();
+               sb.append("CommandContext:\n");
                for (Map.Entry<String, List<List<Object>>> entry : data.entrySet()) {
-                        sb.append(entry.getKey());
-                        sb.append(":");
-                        sb.append(entry.getValue());
-                        sb.append("\n");
+                       String key = entry.getKey();
+                       if(key.startsWith("__")) continue;
+                       sb.append(key);
+                       sb.append(":");
+                       List<List<Object>> value = entry.getValue();
+                       if(value.size() == 1) {
+                               List<Object> t = (List<Object>)value.get(0);
+                               if(t.size() == 2) {
+                                       sb.append(t.get(1));
+                               } else {
+                                       sb.append(t);
+                               }
+                       } else {
+                               sb.append(value);
+                       }
+                       sb.append("\n");
                }
                return sb.toString();
        }