package edu.ualberta.med.biobank.common.action.request; 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.ListResult; import edu.ualberta.med.biobank.common.action.exception.ActionException; import edu.ualberta.med.biobank.model.Center; import edu.ualberta.med.biobank.model.PermissionEnum; import edu.ualberta.med.biobank.model.Request; public class RequestRetrievalAction implements Action<ListResult<Request>> { @SuppressWarnings("nls") private static final String REQUEST_HQL = "SELECT r FROM " + Request.class.getName() + " r" + " INNER JOIN FETCH r.requestSpecimens rs" + " INNER JOIN FETCH r.researchGroup rg" + " WHERE rs.specimen.currentCenter.id=?"; private static final long serialVersionUID = 5306372891238576571L; private Integer centerId; public RequestRetrievalAction(Integer centerId) { this.centerId = centerId; } @Override public boolean isAllowed(ActionContext context) throws ActionException { return PermissionEnum.REQUEST_READ.isAllowed(context.getUser(), (Center) context.getSession().load(Center.class, centerId)); } @Override public ListResult<Request> run(ActionContext context) throws ActionException { ArrayList<Request> requests = new ArrayList<Request>(); Query query = context.getSession().createQuery(REQUEST_HQL); query.setParameter(0, centerId); @SuppressWarnings("unchecked") List<Request> results = query.list(); if (results != null) { requests.addAll(results); } return new ListResult<Request>(requests); } }