package edu.ualberta.med.biobank.common.wrappers.actions;
import org.hibernate.Session;
import edu.ualberta.med.biobank.common.wrappers.ModelWrapper;
import edu.ualberta.med.biobank.server.applicationservice.exceptions.BiobankSessionException;
/**
* Loads a new instance of the model object from persistence and calls {@code
* onLoaded({@link E} attachedObject)}.
*
* @author jferland
*
* @param <E>
*/
public abstract class LoadAction<E> extends WrapperAction<E> {
private static final long serialVersionUID = 1L;
protected LoadAction(ModelWrapper<E> wrapper) {
super(wrapper);
}
@Override
public final Object doAction(Session session)
throws BiobankSessionException {
// TODO: write a test that persists a model object, then does a
// CheckLoad on it, then persists, etc. to check if hib throws
// exceptions
E freshObject = loadModel(session);
onLoad(session, freshObject);
return null;
}
protected E loadModel(Session session) {
@SuppressWarnings("unchecked")
E loaded = (E) session.load(getModelClass(), getModelId());
return loaded;
}
public abstract void onLoad(Session session, E freshObject)
throws BiobankSessionException;
}