package fr.openwide.core.jpa.more.business.difference.util;
import java.util.Collection;
import com.google.common.base.Function;
import fr.openwide.core.jpa.util.HibernateUtils;
public class CollectionElementsFunctionProxyInitializer<T, T2> implements IProxyInitializer<T> {
private final Function<? super T, ? extends Collection<? extends T2>> function;
private final IProxyInitializer<? super T2> delegate;
public CollectionElementsFunctionProxyInitializer(Function<? super T, ? extends Collection<? extends T2>> function) {
this(function, new FunctionProxyInitializer<>());
}
public CollectionElementsFunctionProxyInitializer(Function<? super T, ? extends Collection<? extends T2>> function,
IProxyInitializer<? super T2> delegate) {
super();
this.function = function;
this.delegate = delegate;
}
@Override
public void initialize(T value) {
Collection<? extends T2> collection = function.apply(value);
if (collection != null) {
HibernateUtils.initialize(collection);
for (T2 element : collection) {
delegate.initialize(element);
}
}
}
}