|
|
@@ -1,21 +1,38 @@
|
|
|
package net.ranides.assira.observable;
|
|
|
|
|
|
-import lombok.RequiredArgsConstructor;
|
|
|
import net.ranides.assira.collection.maps.AMap;
|
|
|
-import net.ranides.assira.events.Event;
|
|
|
import net.ranides.assira.events.EventListener;
|
|
|
+import net.ranides.assira.events.EventRouter;
|
|
|
|
|
|
import java.util.AbstractSet;
|
|
|
import java.util.Iterator;
|
|
|
import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
+import java.util.function.Supplier;
|
|
|
|
|
|
-@RequiredArgsConstructor
|
|
|
public class ObservableMap<K,V> extends AMap<K,V> {
|
|
|
|
|
|
private final Map<K,V> map;
|
|
|
|
|
|
- private final EventListener<Event> listener;
|
|
|
+ private final EventRouter router;
|
|
|
+
|
|
|
+ public ObservableMap(EventRouter router, Map<K, V> map) {
|
|
|
+ this.map = map;
|
|
|
+ this.router = router;
|
|
|
+ }
|
|
|
+
|
|
|
+ public ObservableMap(EventRouter router, Supplier<Map<K,V>> that, Map<K, V> map) {
|
|
|
+ this.map = map;
|
|
|
+ this.router = router;
|
|
|
+ }
|
|
|
+
|
|
|
+ public EventRouter router() {
|
|
|
+ return router;
|
|
|
+ }
|
|
|
+
|
|
|
+ public <E extends MapEvent<K,V>> void addEventListener(Class<E> event, EventListener<? super E> listener) {
|
|
|
+ router.addEventListener(event, listener);
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public int size() {
|
|
|
@@ -45,7 +62,7 @@ public class ObservableMap<K,V> extends AMap<K,V> {
|
|
|
@Override
|
|
|
public V put(K key, V value) {
|
|
|
V prev = map.put(key, value);
|
|
|
- listener.handleEvent(new MapEvent.Put<>(map, key, prev, value));
|
|
|
+ router.signalEvent(new MapEvent.Put<>(map, key, prev, value));
|
|
|
return prev;
|
|
|
}
|
|
|
|
|
|
@@ -53,7 +70,7 @@ public class ObservableMap<K,V> extends AMap<K,V> {
|
|
|
public V remove(Object key) {
|
|
|
V prev = map.remove(key);
|
|
|
if(prev != null) {
|
|
|
- listener.handleEvent(new MapEvent.Remove<>(map, (K)key, prev));
|
|
|
+ router.signalEvent(new MapEvent.Remove<>(map, (K)key, prev));
|
|
|
}
|
|
|
return prev;
|
|
|
}
|
|
|
@@ -61,13 +78,13 @@ public class ObservableMap<K,V> extends AMap<K,V> {
|
|
|
@Override
|
|
|
public void putAll(Map<? extends K, ? extends V> m) {
|
|
|
map.putAll(m);
|
|
|
- listener.handleEvent(new MapEvent.PutAll<>(map, m));
|
|
|
+ router.signalEvent(new MapEvent.PutAll<>(map, m));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public void clear() {
|
|
|
map.clear();
|
|
|
- listener.handleEvent(new MapEvent.Clear<>(map));
|
|
|
+ router.signalEvent(new MapEvent.Clear<>(map));
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -76,7 +93,7 @@ public class ObservableMap<K,V> extends AMap<K,V> {
|
|
|
@Override
|
|
|
public Iterator<Entry<K, V>> iterator() {
|
|
|
Set<Entry<K, V>> entries = map.entrySet();
|
|
|
- return new ObservableIterator<>(entries, entries.iterator(), listener);
|
|
|
+ return new ObservableIterator<>(router, entries, entries.iterator());
|
|
|
}
|
|
|
|
|
|
@Override
|