package net.techreadiness.util.observables; import java.util.AbstractMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /** * * A Map wrapper which allows observation of added and removed elements via an ElementObserver * @param <K> The type of keys for the map * @param <V> The type of values for the map * */ public class ObservableMap<K, V> extends AbstractMap<K, V> implements ElementObserver<Entry<K, V>> { private static final long serialVersionUID = 1L; private final Map<K, V> delegate; private final ElementObserver<Entry<K, V>> observer; public ObservableMap(Map<K, V> delegate, ElementObserver<java.util.Map.Entry<K, V>> observer) { this.delegate = delegate; this.observer = observer; } @Override public Set<Entry<K, V>> entrySet() { return new ObservableSet<>(delegate.entrySet(), this); } @Override public V put(K key, V value) { return delegate.put(key, value); } @Override public void elementAdded(Entry<K, V> element) { observer.elementAdded(element); } @Override public void elementRemoved(Entry<K, V> element) { observer.elementRemoved(element); } }