package fr.openwide.core.wicket.more.model;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import fr.openwide.core.jpa.util.HibernateUtils;
public class SafeCastModel<T> extends AbstractReadOnlyModel<T> {
private static final long serialVersionUID = 4014147784926275050L;
private final Class<T> targetClass;
private final IModel<?> wrappedModel;
public static <T> SafeCastModel<T> of(Class<T> targetClass, IModel<?> model) {
return new SafeCastModel<T>(targetClass, model);
}
protected SafeCastModel(Class<T> targetClass, IModel<?> wrappedModel) {
super();
this.targetClass = targetClass;
this.wrappedModel = wrappedModel;
}
@SuppressWarnings("unchecked")
@Override
public T getObject() {
Object object = wrappedModel.getObject();
if (object == null) {
return null;
}
if (!targetClass.isAssignableFrom(HibernateUtils.getClass(object))) {
return null;
}
return HibernateUtils.unwrap((T) object);
}
@Override
public void detach() {
wrappedModel.detach();
}
}