|
@@ -11,20 +11,11 @@ import java.util.Set;
|
|
|
|
|
|
|
|
public class ObservableMap<K,V> extends AMap<K,V> {
|
|
public class ObservableMap<K,V> extends AMap<K,V> {
|
|
|
|
|
|
|
|
- private final Map<K,V> src;
|
|
|
|
|
-
|
|
|
|
|
private final Map<K,V> map;
|
|
private final Map<K,V> map;
|
|
|
|
|
|
|
|
private final EventRouter router;
|
|
private final EventRouter router;
|
|
|
|
|
|
|
|
public ObservableMap(EventRouter router, Map<K, V> map) {
|
|
public ObservableMap(EventRouter router, Map<K, V> map) {
|
|
|
- this.src = map;
|
|
|
|
|
- this.map = map;
|
|
|
|
|
- this.router = router;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- protected ObservableMap(EventRouter router, Map<K,V> src, Map<K, V> map) {
|
|
|
|
|
- this.src = map;
|
|
|
|
|
this.map = map;
|
|
this.map = map;
|
|
|
this.router = router;
|
|
this.router = router;
|
|
|
}
|
|
}
|
|
@@ -37,6 +28,22 @@ public class ObservableMap<K,V> extends AMap<K,V> {
|
|
|
router.addEventListener(event, listener);
|
|
router.addEventListener(event, listener);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ protected void signalPut(K key, V prev, V value) {
|
|
|
|
|
+ router.signalEvent(new MapEvent.Put<>(this, key, prev, value));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ protected void signalRemove(K key, V prev) {
|
|
|
|
|
+ router.signalEvent(new MapEvent.Remove<>(this, key, prev));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ protected void signalPutAll(Map<? extends K, ? extends V> m) {
|
|
|
|
|
+ router.signalEvent(new MapEvent.PutAll<>(this, m));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ protected void signalClear() {
|
|
|
|
|
+ router.signalEvent(new MapEvent.Clear<>(this));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public int size() {
|
|
public int size() {
|
|
|
return map.size();
|
|
return map.size();
|
|
@@ -65,7 +72,7 @@ public class ObservableMap<K,V> extends AMap<K,V> {
|
|
|
@Override
|
|
@Override
|
|
|
public V put(K key, V value) {
|
|
public V put(K key, V value) {
|
|
|
V prev = map.put(key, value);
|
|
V prev = map.put(key, value);
|
|
|
- router.signalEvent(new MapEvent.Put<>(map, key, prev, value));
|
|
|
|
|
|
|
+ signalPut(key, prev, value);
|
|
|
return prev;
|
|
return prev;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -73,7 +80,7 @@ public class ObservableMap<K,V> extends AMap<K,V> {
|
|
|
public V remove(Object key) {
|
|
public V remove(Object key) {
|
|
|
V prev = map.remove(key);
|
|
V prev = map.remove(key);
|
|
|
if(prev != null) {
|
|
if(prev != null) {
|
|
|
- router.signalEvent(new MapEvent.Remove<>(src, (K)key, prev));
|
|
|
|
|
|
|
+ signalRemove((K) key, prev);
|
|
|
}
|
|
}
|
|
|
return prev;
|
|
return prev;
|
|
|
}
|
|
}
|
|
@@ -81,13 +88,13 @@ public class ObservableMap<K,V> extends AMap<K,V> {
|
|
|
@Override
|
|
@Override
|
|
|
public void putAll(Map<? extends K, ? extends V> m) {
|
|
public void putAll(Map<? extends K, ? extends V> m) {
|
|
|
map.putAll(m);
|
|
map.putAll(m);
|
|
|
- router.signalEvent(new MapEvent.PutAll<>(src, m));
|
|
|
|
|
|
|
+ signalPutAll(m);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void clear() {
|
|
public void clear() {
|
|
|
map.clear();
|
|
map.clear();
|
|
|
- router.signalEvent(new MapEvent.Clear<>(src));
|
|
|
|
|
|
|
+ signalClear();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -96,7 +103,7 @@ public class ObservableMap<K,V> extends AMap<K,V> {
|
|
|
@Override
|
|
@Override
|
|
|
public Iterator<Entry<K, V>> iterator() {
|
|
public Iterator<Entry<K, V>> iterator() {
|
|
|
Set<Entry<K, V>> entries = map.entrySet();
|
|
Set<Entry<K, V>> entries = map.entrySet();
|
|
|
- return new ObservableIterator<>(router, entries, entries.iterator());
|
|
|
|
|
|
|
+ return new CIterator(entries.iterator());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -119,4 +126,15 @@ public class ObservableMap<K,V> extends AMap<K,V> {
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ private class CIterator extends ObservableIterator<Entry<K, V>> {
|
|
|
|
|
+ public CIterator(Iterator<Entry<K, V>> itr) {
|
|
|
|
|
+ super(itr);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ protected void signalRemove(Entry<K, V> entry) {
|
|
|
|
|
+ router.signalEvent(new MapEvent.Remove<K,V>(ObservableMap.this, entry.getKey(), entry.getValue()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|