/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.portal.kernel.util;
import java.util.HashMap;
import java.util.Map;
/**
* @author Michael Young
* @author Connor McKay
* @author Shuyang Zhou
*/
public class InheritableMap<K, V> extends HashMap<K, V> {
public InheritableMap() {
}
public InheritableMap(Map<? extends K, ? extends V> map) {
super(map);
}
@Override
public void clear() {
super.clear();
_parentMap = null;
}
@Override
public boolean containsKey(Object key) {
if ((_parentMap != null) && _parentMap.containsKey(key)) {
return true;
}
else {
return super.containsKey(key);
}
}
@Override
public boolean containsValue(Object value) {
if ((_parentMap != null) && _parentMap.containsValue(value)) {
return true;
}
else {
return super.containsValue(value);
}
}
@Override
public V get(Object key) {
V value = super.get(key);
if (value != null) {
return value;
}
else if (_parentMap != null) {
return _parentMap.get(key);
}
return null;
}
public Map<K, V> getParentMap() {
return _parentMap;
}
@Override
public V remove(Object key) {
V value = super.remove(key);
if (value != null) {
return value;
}
else if (_parentMap != null) {
return _parentMap.remove(key);
}
return null;
}
public void setParentMap(Map<? extends K, ? extends V> parentMap) {
_parentMap = (Map<K, V>)parentMap;
}
@Override
public String toString() {
String string = super.toString();
String parentString = "{}";
if (_parentMap != null) {
parentString = _parentMap.toString();
}
if (string.length() <= 2) {
return parentString;
}
StringBundler sb = new StringBundler(3);
sb.append(string.substring(0, string.length() - 1));
sb.append(StringPool.COMMA_AND_SPACE);
sb.append(parentString.substring(1));
return sb.toString();
}
private Map<K, V> _parentMap;
}