package com.yoursway.commons.dependencies.internal; import java.util.Collection; import java.util.Map; import java.util.Set; import com.yoursway.commons.dependencies.IdentityObject; import com.yoursway.commons.dependencies.MutableValueObject; public class ObservableMap<K, V> extends MutableValueObject implements Map<K, V> { private final Map<K, V> map; public ObservableMap(IdentityObject owner, Map<K, V> map) { super(owner); this.map = map; } public void clear() { map.clear(); didChange(); } public boolean equals(Object o) { willQuery(); return map.equals(o); } public int hashCode() { willQuery(); return map.hashCode(); } public boolean isEmpty() { willQuery(); return map.isEmpty(); } public int size() { willQuery(); return map.size(); } public boolean containsKey(Object key) { willQuery(); return map.containsKey(key); } public boolean containsValue(Object value) { willQuery(); return map.containsValue(value); } public Set<java.util.Map.Entry<K, V>> entrySet() { willQuery(); return map.entrySet(); } public V get(Object key) { willQuery(); return map.get(key); } public Set<K> keySet() { willQuery(); return map.keySet(); } public V put(K key, V value) { V result = map.put(key, value); didChange(); return result; } public void putAll(Map<? extends K, ? extends V> t) { map.putAll(t); didChange(); } public V remove(Object key) { V result = map.remove(key); didChange(); return result; } public Collection<V> values() { willQuery(); return map.values(); } }