1 package org.simantics.document.server.io;
\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
9 public class CommandContextImpl implements CommandContextMutable {
\r
11 private Map<String,List<List<Object>>> data = new HashMap<String,List<List<Object>>>();
\r
14 public boolean containsKey(String key) {
\r
15 return data.containsKey(key);
\r
19 public List<List<Object>> getRows(String key) {
\r
20 List<List<Object>> rows = data.get(key);
\r
24 return Collections.emptyList();
\r
28 public CommandContextMutable putRow(String key, List<Object> row) {
\r
29 List<List<Object>> rows = ensureRowsAvailable(key);
\r
35 public String getString(String key) {
\r
36 Object o = getValue(key);
\r
41 public CommandContextMutable putString(String key, String value) {
\r
42 return putValue(key, value);
\r
45 private List<List<Object>> ensureRowsAvailable(String key) {
\r
46 List<List<Object>> rows = data.get(key);
\r
48 rows = new ArrayList<List<Object>>();
\r
49 data.put(key, rows);
\r
55 public Map<String, List<List<Object>>> getData() {
\r
60 public List<String> getKeys() {
\r
61 return new ArrayList<String>(data.keySet());
\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
76 public static CommandContextMutable create() {
\r
77 return new CommandContextImpl();
\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
86 sb.append(entry.getValue());
\r
89 return sb.toString();
\r
93 public int hashCode() {
\r
94 final int prime = 31;
\r
96 result = prime * result + ((data == null) ? 0 : data.hashCode());
\r
101 public boolean equals(Object obj) {
\r
106 if (getClass() != obj.getClass())
\r
108 CommandContextImpl other = (CommandContextImpl) obj;
\r
109 if (data == null) {
\r
110 if (other.data != null)
\r
112 } else if (!data.equals(other.data))
\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
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