package edu.ualberta.med.biobank.common.wrappers.checks;
import java.text.MessageFormat;
import org.hibernate.Query;
import org.hibernate.Session;
import edu.ualberta.med.biobank.common.peer.ContactPeer;
import edu.ualberta.med.biobank.common.util.HibernateUtil;
import edu.ualberta.med.biobank.common.wrappers.ModelWrapper;
import edu.ualberta.med.biobank.common.wrappers.actions.UncachedAction;
import edu.ualberta.med.biobank.model.Clinic;
import edu.ualberta.med.biobank.model.Contact;
import edu.ualberta.med.biobank.server.applicationservice.exceptions.BiobankSessionException;
public class ClinicPreDeleteChecks extends UncachedAction<Clinic> {
private static final long serialVersionUID = 1L;
private static final String HAS_STUDIES_MSG = Messages
.getString("ClinicPreDeleteChecks.delete.clinic.error.msg"); //$NON-NLS-1$
// @formatter:off
private static final String COUNT_STUDIES_HQL =
"SELECT COUNT(DISTINCT studies)" + //$NON-NLS-1$
" FROM " + Contact.class.getName() + " AS contacts" + //$NON-NLS-1$ //$NON-NLS-2$
" INNER JOIN contacts." + ContactPeer.STUDIES.getName() + " AS studies" + //$NON-NLS-1$ //$NON-NLS-2$
" WHERE contacts." + ContactPeer.CLINIC.getName() + " = ?"; //$NON-NLS-1$ //$NON-NLS-2$
// @formatter:on
public ClinicPreDeleteChecks(ModelWrapper<Clinic> wrapper) {
super(wrapper);
}
@Override
public void doUncachedAction(Session session)
throws BiobankSessionException {
checkHasStudies(session);
}
private void checkHasStudies(Session session)
throws BiobankSessionException {
Query query = session.createQuery(COUNT_STUDIES_HQL);
query.setParameter(0, getModel());
Long studyCount = HibernateUtil.getCountFromQuery(query);
if (studyCount != 0) {
String hasStudiesMsg = MessageFormat.format(HAS_STUDIES_MSG,
getModel().getName());
throw new BiobankSessionException(hasStudiesMsg);
}
}
}