|
32 | 32 | package org.scijava.plugins.scripting.clojure; |
33 | 33 |
|
34 | 34 | import java.util.Collection; |
| 35 | +import java.util.HashMap; |
35 | 36 | import java.util.Map; |
36 | 37 | import java.util.Set; |
37 | 38 |
|
38 | 39 | import javax.script.Bindings; |
39 | 40 |
|
| 41 | +import clojure.lang.MapEntry; |
| 42 | +import clojure.lang.Namespace; |
40 | 43 | import clojure.lang.RT; |
41 | 44 | import clojure.lang.Symbol; |
42 | 45 | import clojure.lang.Var; |
@@ -75,7 +78,7 @@ public boolean containsKey(final Object key) { |
75 | 78 |
|
76 | 79 | @Override |
77 | 80 | public boolean containsValue(final Object value) { |
78 | | - throw new UnsupportedOperationException(); |
| 81 | + return map().containsValue(value); |
79 | 82 | } |
80 | 83 |
|
81 | 84 | @Override |
@@ -147,17 +150,33 @@ public void clear() { |
147 | 150 |
|
148 | 151 | @Override |
149 | 152 | public Set<String> keySet() { |
150 | | - throw new UnsupportedOperationException(); |
| 153 | + return map().keySet(); |
151 | 154 | } |
152 | 155 |
|
153 | 156 | @Override |
154 | 157 | public Collection<Object> values() { |
155 | | - throw new UnsupportedOperationException(); |
| 158 | + return map().values(); |
156 | 159 | } |
157 | 160 |
|
158 | 161 | @Override |
159 | 162 | public Set<Entry<String, Object>> entrySet() { |
160 | | - throw new UnsupportedOperationException(); |
| 163 | + return map().entrySet(); |
161 | 164 | } |
162 | 165 |
|
| 166 | + // -- Helper methods -- |
| 167 | + |
| 168 | + private static Map<String, Object> map() { |
| 169 | + final Map<String, Object> map = new HashMap<String, Object>(); |
| 170 | + |
| 171 | + final Namespace ns = Namespace.find(Symbol.intern(null, USER_NS)); |
| 172 | + for (final Object el : ns.getMappings()) { |
| 173 | + final MapEntry entry = (MapEntry) el; |
| 174 | + final Symbol key = (Symbol) entry.key(); |
| 175 | + final Object value = Var.intern(ns, key).get(); |
| 176 | + if (value instanceof Var.Unbound) continue; // skip weird variables |
| 177 | + map.put(key.getName(), value); |
| 178 | + } |
| 179 | + |
| 180 | + return map; |
| 181 | + } |
163 | 182 | } |
0 commit comments