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