Selaa lähdekoodia

#91
fix: ObservablePrototypeMap

Ranides Atterwim 3 vuotta sitten
vanhempi
commit
39f2c1c719

+ 8 - 5
assira.commons/src/main/java/net/ranides/assira/observable/ObservableMap.java

@@ -8,20 +8,23 @@ import java.util.AbstractSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
-import java.util.function.Supplier;
 
 public class ObservableMap<K,V> extends AMap<K,V> {
 
+    private final Map<K,V> src;
+
     private final Map<K,V> map;
 
     private final EventRouter router;
 
     public ObservableMap(EventRouter router, Map<K, V> map) {
+        this.src = map;
         this.map = map;
         this.router = router;
     }
 
-    public ObservableMap(EventRouter router, Supplier<Map<K,V>> that, Map<K, V> map) {
+    protected ObservableMap(EventRouter router, Map<K,V> src, Map<K, V> map) {
+        this.src = map;
         this.map = map;
         this.router = router;
     }
@@ -70,7 +73,7 @@ public class ObservableMap<K,V> extends AMap<K,V> {
     public V remove(Object key) {
         V prev = map.remove(key);
         if(prev != null) {
-            router.signalEvent(new MapEvent.Remove<>(map, (K)key, prev));
+            router.signalEvent(new MapEvent.Remove<>(src, (K)key, prev));
         }
         return prev;
     }
@@ -78,13 +81,13 @@ public class ObservableMap<K,V> extends AMap<K,V> {
     @Override
     public void putAll(Map<? extends K, ? extends V> m) {
         map.putAll(m);
-        router.signalEvent(new MapEvent.PutAll<>(map, m));
+        router.signalEvent(new MapEvent.PutAll<>(src, m));
     }
 
     @Override
     public void clear() {
         map.clear();
-        router.signalEvent(new MapEvent.Clear<>(map));
+        router.signalEvent(new MapEvent.Clear<>(src));
     }
 
     @Override

+ 3 - 2
assira.commons/src/main/java/net/ranides/assira/observable/ObservablePrototypeMap.java

@@ -28,8 +28,9 @@ public class ObservablePrototypeMap extends PrototypeMap {
     }
 
     private ObservablePrototypeMap(boolean direct, EventRouter router, PrototypeMap parent, Map<Object, Object> content) {
-        // todo: our router emits wrong "source" (to internal map instead of this map)
-        super(direct, parent, new ObservableMap<>(router, content));
+        super(direct, null, null);
+        this.parent = parent;
+        this.declared = new ObservableMap<>(router, this, content);
         this.router = router;
     }
 

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/collection/prototype/PrototypeMap.java

@@ -26,9 +26,9 @@ public class PrototypeMap extends AMap<Object, Object> implements Map<Object, Ob
      */
     public static final PrototypeMap EMPTY = new PrototypeMap(true);
 
-    private final PrototypeMap parent;
+    protected PrototypeMap parent;
 
-    private final Map<Object, Object> declared;
+    protected Map<Object, Object> declared;
 
     private transient KeysView keys;
     private transient EntryView entries;