/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.envers.internal.entities.mapper.relation.lazy.proxy;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor;
/**
* @author Adam Warski (adam at warski dot org)
*/
public class MapProxy<K, V> implements Map<K, V>, Serializable {
private static final long serialVersionUID = 8418037541773074646L;
private transient Initializor<Map<K, V>> initializor;
protected Map<K, V> delegate;
public MapProxy() {
}
public MapProxy(org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor<Map<K, V>> initializor) {
this.initializor = initializor;
}
private void checkInit() {
if ( delegate == null ) {
delegate = initializor.initialize();
}
}
@Override
public int size() {
checkInit();
return delegate.size();
}
@Override
public boolean isEmpty() {
checkInit();
return delegate.isEmpty();
}
@Override
public boolean containsKey(Object o) {
checkInit();
return delegate.containsKey( o );
}
@Override
public boolean containsValue(Object o) {
checkInit();
return delegate.containsValue( o );
}
@Override
public V get(Object o) {
checkInit();
return delegate.get( o );
}
@Override
public V put(K k, V v) {
checkInit();
return delegate.put( k, v );
}
@Override
public V remove(Object o) {
checkInit();
return delegate.remove( o );
}
@Override
public void putAll(Map<? extends K, ? extends V> map) {
checkInit();
delegate.putAll( map );
}
@Override
public void clear() {
checkInit();
delegate.clear();
}
@Override
public Set<K> keySet() {
checkInit();
return delegate.keySet();
}
@Override
public Collection<V> values() {
checkInit();
return delegate.values();
}
@Override
public Set<Entry<K, V>> entrySet() {
checkInit();
return delegate.entrySet();
}
@Override
public String toString() {
checkInit();
return delegate.toString();
}
@Override
@SuppressWarnings({"EqualsWhichDoesntCheckParameterClass"})
public boolean equals(Object obj) {
checkInit();
return delegate.equals( obj );
}
@Override
public int hashCode() {
checkInit();
return delegate.hashCode();
}
}