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.MembershipPeer; 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.Membership; import edu.ualberta.med.biobank.model.Role; import edu.ualberta.med.biobank.server.applicationservice.exceptions.BiobankSessionException; public class RolePreDeleteChecks extends UncachedAction<Role> { private static final long serialVersionUID = 1L; private static final String HAS_MBERSHIP_MSG = Messages.getString("RolePreDeleteChecks.has.membership.msg"); //$NON-NLS-1$ // @formatter:off private static final String USED_IN_MEMBERSHIP_QRY = "select count(ms) from " //$NON-NLS-1$ + Membership.class.getName() + " as ms join ms." //$NON-NLS-1$ + MembershipPeer.ROLES.getName() + " as roles where roles=?"; //$NON-NLS-1$ // @formatter:on public RolePreDeleteChecks(ModelWrapper<Role> wrapper) { super(wrapper); } @Override public void doUncachedAction(Session session) throws BiobankSessionException { checkNotUsedInMembership(session); } private void checkNotUsedInMembership(Session session) throws BiobankSessionException { Query query = session.createQuery(USED_IN_MEMBERSHIP_QRY); query.setParameter(0, getModel()); Long mbershipCount = HibernateUtil.getCountFromQuery(query); if (mbershipCount != 0) { String hasMbershipsMsg = MessageFormat.format(HAS_MBERSHIP_MSG, getModel().getName()); throw new BiobankSessionException(hasMbershipsMsg); } } }