package edu.ualberta.med.biobank.common.wrappers.actions; import java.text.MessageFormat; import org.hibernate.Session; import edu.ualberta.med.biobank.common.wrappers.ModelWrapper; import edu.ualberta.med.biobank.server.applicationservice.exceptions.BiobankSessionException; public abstract class LoadModelAction<E> extends UncachedAction<E> { private static final long serialVersionUID = 1L; private static final String CANNOT_LOAD_MSG = "Unable to load object type {0} with id ''{1}''."; //$NON-NLS-1$ public LoadModelAction(ModelWrapper<E> wrapper) { super(wrapper); } protected E loadModel(Session session) { E loaded = null; Integer id = getModelId(); if (id != null) { @SuppressWarnings("unchecked") E tmp = (E) session.load(getModelClass(), id); loaded = tmp; // session.setReadOnly(loaded, true); } return loaded; } @Override public final void doUncachedAction(Session session) throws BiobankSessionException { E loadModel = loadModel(session); Integer id = getModelId(); if (id != null && loadModel == null) { String modelClass = getModelClass().getSimpleName(); String msg = MessageFormat.format(CANNOT_LOAD_MSG, modelClass, id); throw new BiobankSessionException(msg); } doLoadModelAction(session, loadModel); } public abstract void doLoadModelAction(Session session, E loadedModel) throws BiobankSessionException; }