package fr.openwide.core.wicket.more.model;
import org.apache.wicket.model.IModel;
public class CacheModel<T> implements IModel<T> {
private static final long serialVersionUID = -4049247716740595168L;
private boolean cached = false;
private final IModel<T> reference;
private final IModel<T> cache;
public CacheModel(IModel<T> reference, IModel<T> cache) {
this.reference = reference;
this.cache = cache;
}
@Override
public void detach() {
this.reference.detach();
this.cache.detach();
}
@Override
public T getObject() {
if (!cached) {
read();
}
return cache.getObject();
}
@Override
public void setObject(T object) {
reference.setObject(object);
read();
}
public void read() {
cached = true;
cache.setObject(reference.getObject());
}
public void reset() {
cached = false;
cache.setObject(null);
}
public IModel<T> getReferenceModel() {
return reference;
}
}