package edu.ualberta.med.biobank.common.action.request; 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.exception.ActionException; import edu.ualberta.med.biobank.common.action.info.RequestReadInfo; import edu.ualberta.med.biobank.common.peer.DispatchPeer; import edu.ualberta.med.biobank.common.peer.RequestPeer; import edu.ualberta.med.biobank.common.permission.request.RequestReadPermission; import edu.ualberta.med.biobank.model.Request; public class RequestGetInfoAction implements Action<RequestReadInfo> { /** * */ private static final long serialVersionUID = 1L; private Integer id; // @formatter:off @SuppressWarnings("nls") private static final String REQUEST_HQL = "select distinct request from " + Request.class.getName() + " request join fetch request." + RequestPeer.RESEARCH_GROUP.getName() + " rg left join fetch request.dispatches " + " dispatches left join fetch dispatches.dispatchSpecimens ds" + " left join fetch dispatches.senderCenter left join fetch dispatches.receiverCenter" + " left join fetch dispatches.shipmentInfo " + " join fetch request." + RequestPeer.ADDRESS.getName() + " where request." + DispatchPeer.ID.getName() +"=?"; // @formatter:on public RequestGetInfoAction(Integer id) { this.id = id; } @Override public boolean isAllowed(ActionContext context) throws ActionException { return new RequestReadPermission().isAllowed(context); } @Override public RequestReadInfo run(ActionContext context) throws ActionException { RequestReadInfo sInfo = new RequestReadInfo(); Query query = context.getSession().createQuery(REQUEST_HQL); query.setParameter(0, id); @SuppressWarnings("unchecked") List<Object> rows = query.list(); if (rows.size() == 1) { Object row = rows.get(0); sInfo.request = (Request) row; } else { throw new ActionException( "No request found with id:" + id); //$NON-NLS-1$ } return sInfo; } }