package util;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class InheritHashMap extends HashMap<String, Object> {
private static final long serialVersionUID = 2504234689413219141L;
private InheritHashMap defaults = null;
public InheritHashMap() {
super();
this.makeAll();
}
public InheritHashMap(InheritHashMap defaults) {
super();
this.defaults = defaults;
this.makeAll();
}
public void setDefaults(InheritHashMap defaults) {
this.defaults = defaults;
this.makeAll();
}
@Override
public Object get(Object key) {
return cachedAll.get(key);
}
public Object get(Object key, Object defaultValue) {
Object val = get(key);
return (val == null) ? defaultValue : val;
}
public Set<String> getNames() {
return cachedAll.keySet();
}
@Override
public int size() {
return getNames().size();
}
@Override
public boolean isEmpty() {
return cachedAll.isEmpty();
}
@Override
public boolean containsKey(Object key) {
return cachedAll.containsKey(key);
}
@Override
public boolean containsValue(Object value) {
return cachedAll.containsValue(value);
}
@Override
public Set<String> keySet() {
return cachedAll.keySet();
}
@Override
public Collection<Object> values() {
return cachedAll.values();
}
Map<String, Object> cachedAll;
@Override
public Set<java.util.Map.Entry<String, Object>> entrySet() {
return cachedAll.entrySet();
}
private void makeAll() {
if (defaults != null) {
cachedAll = new HashMap<String, Object>(defaults);
} else {
cachedAll = new HashMap<String, Object>();
}
for (Map.Entry<String, Object> entry : super.entrySet()) {
cachedAll.put(entry.getKey(), entry.getValue());
}
}
@Override
public Object put(String key, Object value) {
super.put(key, value);
return cachedAll.put(key, value);
}
@Override
public void putAll(Map<? extends String, ? extends Object> m) {
super.putAll(m);
cachedAll.putAll(m);
}
@Override
public Object remove(Object key) {
super.remove(key);
return cachedAll.remove(key);
}
@Override
public Object clone() {
InheritHashMap clone = (InheritHashMap) super.clone();
this.makeAll();
return clone;
}
}