package edu.ualberta.med.biobank.common.action.dispatch; import java.util.HashSet; import java.util.List; import java.util.Set; import org.hibernate.Query; import edu.ualberta.med.biobank.common.action.Action; import edu.ualberta.med.biobank.common.action.ActionContext; import edu.ualberta.med.biobank.common.action.SetResult; import edu.ualberta.med.biobank.common.action.exception.ActionException; import edu.ualberta.med.biobank.common.permission.dispatch.DispatchReadPermission; import edu.ualberta.med.biobank.model.DispatchSpecimen; public class DispatchGetSpecimenInfosAction implements Action<SetResult<DispatchSpecimen>> { @SuppressWarnings("nls") public static final String DISPATCH_SPECIMEN_INFO_HQL = "SELECT dspec FROM " + DispatchSpecimen.class.getName() + " dspec" + " INNER JOIN FETCH dspec.specimen spec" + " INNER JOIN FETCH spec.specimenType" + " INNER JOIN FETCH spec.collectionEvent cevent" + " INNER JOIN FETCH spec.currentCenter center" + " INNER JOIN FETCH cevent.patient patient" + " INNER JOIN FETCH patient.study study" + " LEFT JOIN FETCH dspec.comments" + " WHERE dspec.dispatch.id=?"; private static final long serialVersionUID = 1L; private Integer dispatchId; public DispatchGetSpecimenInfosAction(Integer dispatchId) { this.dispatchId = dispatchId; } @Override public boolean isAllowed(ActionContext context) throws ActionException { return new DispatchReadPermission(dispatchId).isAllowed(context); } @Override public SetResult<DispatchSpecimen> run(ActionContext context) throws ActionException { Set<DispatchSpecimen> specInfos = new HashSet<DispatchSpecimen>(); Query query = context.getSession().createQuery(DISPATCH_SPECIMEN_INFO_HQL); query.setParameter(0, dispatchId); @SuppressWarnings("unchecked") List<Object> rows = query.list(); for (Object row : rows) { specInfos.add((DispatchSpecimen) row); } return new SetResult<DispatchSpecimen>(specInfos); } }