]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.document.server.io;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collections;\r
5 import java.util.HashMap;\r
6 import java.util.List;\r
7 import java.util.Map;\r
8 \r
9 public class CommandContextImpl implements CommandContextMutable {\r
10 \r
11         private Map<String,List<List<Object>>> data = new HashMap<String,List<List<Object>>>();\r
12 \r
13         @Override\r
14         public boolean containsKey(String key) {\r
15                 return data.containsKey(key);\r
16         }\r
17         \r
18         @Override\r
19         public List<List<Object>> getRows(String key) {\r
20                 List<List<Object>> rows = data.get(key);\r
21                 if (rows != null) \r
22                         return rows;\r
23                 else\r
24                         return Collections.emptyList();\r
25         }\r
26 \r
27         @Override\r
28         public CommandContextMutable putRow(String key, List<Object> row) {\r
29                 List<List<Object>> rows = ensureRowsAvailable(key);\r
30                 rows.add(row);\r
31                 return this;\r
32         }\r
33 \r
34         @Override\r
35         public String getString(String key) {\r
36                 Object o = getValue(key);\r
37                 return (String)o;\r
38         }\r
39         \r
40         @Override\r
41         public CommandContextMutable putString(String key, String value) {\r
42             return putValue(key, value);\r
43         }\r
44 \r
45         private List<List<Object>> ensureRowsAvailable(String key) {\r
46                 List<List<Object>> rows = data.get(key);\r
47                 if (rows == null) {\r
48                         rows = new ArrayList<List<Object>>();\r
49                         data.put(key, rows);\r
50                 }\r
51                 return rows;\r
52         }\r
53 \r
54         @Override\r
55         public Map<String, List<List<Object>>> getData() {\r
56                 return data;\r
57         }\r
58         \r
59         @Override\r
60         public List<String> getKeys() {\r
61                 return new ArrayList<String>(data.keySet());\r
62         }\r
63         \r
64         @Override\r
65         public CommandContextMutable merge(CommandContext context) {\r
66                 if (context != null) {\r
67                         Map<String,List<List<Object>>> from = context.getData(); \r
68                         for (Map.Entry<String, List<List<Object>>> entry : from.entrySet()) {\r
69                                 List<List<Object>> rows = ensureRowsAvailable(entry.getKey());\r
70                                 rows.addAll(entry.getValue());\r
71                         }\r
72                 }\r
73                 return this;\r
74         }\r
75         \r
76         public static CommandContextMutable create() {\r
77                 return new CommandContextImpl();\r
78         }\r
79         \r
80         @Override\r
81         public String toString() {\r
82                 StringBuilder sb = new StringBuilder();\r
83                 for (Map.Entry<String, List<List<Object>>> entry : data.entrySet()) {\r
84                          sb.append(entry.getKey());\r
85                          sb.append(":");\r
86                          sb.append(entry.getValue());\r
87                          sb.append("\n");\r
88                 }\r
89                 return sb.toString();\r
90         }\r
91         \r
92         @Override\r
93         public int hashCode() {\r
94                 final int prime = 31;\r
95                 int result = 1;\r
96                 result = prime * result + ((data == null) ? 0 : data.hashCode());\r
97                 return result;\r
98         }\r
99 \r
100         @Override\r
101         public boolean equals(Object obj) {\r
102                 if (this == obj)\r
103                         return true;\r
104                 if (obj == null)\r
105                         return false;\r
106                 if (getClass() != obj.getClass())\r
107                         return false;\r
108                 CommandContextImpl other = (CommandContextImpl) obj;\r
109                 if (data == null) {\r
110                         if (other.data != null)\r
111                                 return false;\r
112                 } else if (!data.equals(other.data))\r
113                         return false;\r
114                 return true;\r
115         }\r
116 \r
117     @Override\r
118     public CommandContextMutable putValue(String key, Object value) {\r
119         if(data.containsKey(key)) data.remove(key);\r
120         List<List<Object>> rows = ensureRowsAvailable(key);\r
121         List<Object> t = new ArrayList<Object>();\r
122         t.add(key);\r
123         t.add(value);\r
124         rows.add(t);\r
125         return this;\r
126     }\r
127     \r
128     @Override\r
129     public <T> T getValue(String key) {\r
130         List<List<Object>> rows = getRows(key);\r
131         if((rows == null) || (rows.size() != 1)) return null;\r
132         List<Object> t = (List<Object>)rows.get(0);\r
133         if(t.size() != 2) return null;\r
134         @SuppressWarnings("unchecked")\r
135         T o = (T) t.get(1);\r
136         return o;\r
137     }\r
138 }