]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/CommandContextImpl.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.server.io / src / org / simantics / document / server / io / CommandContextImpl.java
diff --git a/bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/CommandContextImpl.java b/bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/CommandContextImpl.java
new file mode 100644 (file)
index 0000000..4230d10
--- /dev/null
@@ -0,0 +1,138 @@
+package org.simantics.document.server.io;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+public class CommandContextImpl implements CommandContextMutable {\r
+\r
+       private Map<String,List<List<Object>>> data = new HashMap<String,List<List<Object>>>();\r
+\r
+       @Override\r
+       public boolean containsKey(String key) {\r
+               return data.containsKey(key);\r
+       }\r
+       \r
+       @Override\r
+       public List<List<Object>> getRows(String key) {\r
+               List<List<Object>> rows = data.get(key);\r
+               if (rows != null) \r
+                       return rows;\r
+               else\r
+                       return Collections.emptyList();\r
+       }\r
+\r
+       @Override\r
+       public CommandContextMutable putRow(String key, List<Object> row) {\r
+               List<List<Object>> rows = ensureRowsAvailable(key);\r
+               rows.add(row);\r
+               return this;\r
+       }\r
+\r
+       @Override\r
+       public String getString(String key) {\r
+               Object o = getValue(key);\r
+               return (String)o;\r
+       }\r
+       \r
+       @Override\r
+       public CommandContextMutable putString(String key, String value) {\r
+           return putValue(key, value);\r
+       }\r
+\r
+       private List<List<Object>> ensureRowsAvailable(String key) {\r
+               List<List<Object>> rows = data.get(key);\r
+               if (rows == null) {\r
+                       rows = new ArrayList<List<Object>>();\r
+                       data.put(key, rows);\r
+               }\r
+               return rows;\r
+       }\r
+\r
+       @Override\r
+       public Map<String, List<List<Object>>> getData() {\r
+               return data;\r
+       }\r
+       \r
+       @Override\r
+       public List<String> getKeys() {\r
+               return new ArrayList<String>(data.keySet());\r
+       }\r
+       \r
+       @Override\r
+       public CommandContextMutable merge(CommandContext context) {\r
+               if (context != null) {\r
+                       Map<String,List<List<Object>>> from = context.getData(); \r
+                       for (Map.Entry<String, List<List<Object>>> entry : from.entrySet()) {\r
+                               List<List<Object>> rows = ensureRowsAvailable(entry.getKey());\r
+                               rows.addAll(entry.getValue());\r
+                       }\r
+               }\r
+               return this;\r
+       }\r
+       \r
+       public static CommandContextMutable create() {\r
+               return new CommandContextImpl();\r
+       }\r
+       \r
+       @Override\r
+       public String toString() {\r
+               StringBuilder sb = new StringBuilder();\r
+               for (Map.Entry<String, List<List<Object>>> entry : data.entrySet()) {\r
+                        sb.append(entry.getKey());\r
+                        sb.append(":");\r
+                        sb.append(entry.getValue());\r
+                        sb.append("\n");\r
+               }\r
+               return sb.toString();\r
+       }\r
+       \r
+       @Override\r
+       public int hashCode() {\r
+               final int prime = 31;\r
+               int result = 1;\r
+               result = prime * result + ((data == null) ? 0 : data.hashCode());\r
+               return result;\r
+       }\r
+\r
+       @Override\r
+       public boolean equals(Object obj) {\r
+               if (this == obj)\r
+                       return true;\r
+               if (obj == null)\r
+                       return false;\r
+               if (getClass() != obj.getClass())\r
+                       return false;\r
+               CommandContextImpl other = (CommandContextImpl) obj;\r
+               if (data == null) {\r
+                       if (other.data != null)\r
+                               return false;\r
+               } else if (!data.equals(other.data))\r
+                       return false;\r
+               return true;\r
+       }\r
+\r
+    @Override\r
+    public CommandContextMutable putValue(String key, Object value) {\r
+        if(data.containsKey(key)) data.remove(key);\r
+        List<List<Object>> rows = ensureRowsAvailable(key);\r
+        List<Object> t = new ArrayList<Object>();\r
+        t.add(key);\r
+        t.add(value);\r
+        rows.add(t);\r
+        return this;\r
+    }\r
+    \r
+    @Override\r
+    public <T> T getValue(String key) {\r
+        List<List<Object>> rows = getRows(key);\r
+        if((rows == null) || (rows.size() != 1)) return null;\r
+        List<Object> t = (List<Object>)rows.get(0);\r
+        if(t.size() != 2) return null;\r
+        @SuppressWarnings("unchecked")\r
+        T o = (T) t.get(1);\r
+        return o;\r
+    }\r
+}
\ No newline at end of file