/*
* 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.Iterator;
import org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor;
/**
* @author Adam Warski (adam at warski dot org)
*/
public abstract class CollectionProxy<U, T extends Collection<U>> implements Collection<U>, Serializable {
private static final long serialVersionUID = 8698249863871832402L;
private transient org.hibernate.envers.internal.entities.mapper.relation.lazy.initializor.Initializor<T> initializor;
protected T delegate;
protected CollectionProxy() {
}
public CollectionProxy(Initializor<T> initializor) {
this.initializor = initializor;
}
protected 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 contains(Object o) {
checkInit();
return delegate.contains( o );
}
@Override
public Iterator<U> iterator() {
checkInit();
return delegate.iterator();
}
@Override
public Object[] toArray() {
checkInit();
return delegate.toArray();
}
@Override
public <V> V[] toArray(V[] a) {
checkInit();
return delegate.toArray( a );
}
@Override
public boolean add(U o) {
checkInit();
return delegate.add( o );
}
@Override
public boolean remove(Object o) {
checkInit();
return delegate.remove( o );
}
@Override
public boolean containsAll(Collection<?> c) {
checkInit();
return delegate.containsAll( c );
}
@Override
public boolean addAll(Collection<? extends U> c) {
checkInit();
return delegate.addAll( c );
}
@Override
public boolean removeAll(Collection<?> c) {
checkInit();
return delegate.removeAll( c );
}
@Override
public boolean retainAll(Collection<?> c) {
checkInit();
return delegate.retainAll( c );
}
@Override
public void clear() {
checkInit();
delegate.clear();
}
@Override
public String toString() {
checkInit();
return delegate.toString();
}
@SuppressWarnings({"EqualsWhichDoesntCheckParameterClass"})
@Override
public boolean equals(Object obj) {
checkInit();
return delegate.equals( obj );
}
@Override
public int hashCode() {
checkInit();
return delegate.hashCode();
}
}