package org.aksw.sparqlify.core; import java.util.AbstractMap; import java.util.HashMap; import java.util.Map; import java.util.Set; public class NestedMap<K, V> extends AbstractMap<K, V> { private NestedMap<K, V> parent; private Map<K, V> data; public NestedMap() { this(null); } public NestedMap(NestedMap<K, V> parent) { this(parent, new HashMap<K, V>()); } public NestedMap(NestedMap<K, V> parent, Map<K, V> data) { this.parent = parent; this.data = data; } @Override public V put(K key, V value) { return data.put(key, value); } @Override public boolean containsKey(Object key) { boolean result = data.containsKey(key); if(!result) { result = parent.containsKey(key); } return result; } public void collectMap(Map<K, V> result) { if(parent != null) { parent.collectMap(result); } result.putAll(data); } public Map<K, V> collectMap() { Map<K, V> result = new HashMap<K, V>(); collectMap(result); return result; } @Override public Set<Entry<K, V>> entrySet() { Map<K, V> tmp = collectMap(); return tmp.entrySet(); } public static <K, V> NestedMap<K, V> create() { return new NestedMap<K, V>(); } public static <K, V> NestedMap<K, V> create(NestedMap<K, V> parent) { return new NestedMap<K, V>(parent); } }