package edu.ualberta.med.biobank.common.action.specimen; import java.util.ArrayList; import java.util.List; 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.ActionResult; import edu.ualberta.med.biobank.common.action.exception.ActionException; import edu.ualberta.med.biobank.common.action.specimen.SpecimenGetDispatchesAction.SpecimenDispatchesInfo; import edu.ualberta.med.biobank.common.permission.specimen.SpecimenReadPermission; import edu.ualberta.med.biobank.model.Dispatch; public class SpecimenGetDispatchesAction implements Action<SpecimenDispatchesInfo> { private static final long serialVersionUID = 1L; @SuppressWarnings("nls") private static final String SPECIMEN_DISPATCH_HQL = "SELECT dispatch FROM " + Dispatch.class.getName() + " dispatch" + " INNER JOIN FETCH dispatch.senderCenter" + " INNER JOIN FETCH dispatch.receiverCenter" + " LEFT JOIN FETCH dispatch.shipmentInfo" + " LEFT JOIN FETCH dispatch.dispatchSpecimens dspecs" + " LEFT JOIN FETCH dspecs.specimen specimens" + " WHERE specimens.id=?"; public static class SpecimenDispatchesInfo implements ActionResult { private static final long serialVersionUID = 1L; public List<Dispatch> dispatches; public SpecimenDispatchesInfo(List<Dispatch> dispatches) { this.dispatches = dispatches; } public List<Dispatch> getDispatches() { return dispatches; } } private final Integer specimenId; public SpecimenGetDispatchesAction(Integer specimenId) { this.specimenId = specimenId; } @Override public boolean isAllowed(ActionContext context) throws ActionException { return new SpecimenReadPermission(specimenId).isAllowed(context); } @Override public SpecimenDispatchesInfo run(ActionContext context) throws ActionException { List<Dispatch> dispatches = new ArrayList<Dispatch>(0); Query query = context.getSession().createQuery(SPECIMEN_DISPATCH_HQL); query.setParameter(0, specimenId); @SuppressWarnings("unchecked") List<Dispatch> resultset = query.list(); if (resultset != null) { dispatches.addAll(resultset); } return new SpecimenDispatchesInfo(dispatches); } }