package edu.ualberta.med.biobank.common.action.processingEvent;
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.exception.ModelNotFoundException;
import edu.ualberta.med.biobank.common.action.processingEvent.ProcessingEventGetInfoAction.PEventInfo;
import edu.ualberta.med.biobank.common.action.specimen.SpecimenInfo;
import edu.ualberta.med.biobank.common.permission.processingEvent.ProcessingEventReadPermission;
import edu.ualberta.med.biobank.model.ProcessingEvent;
public class ProcessingEventGetInfoAction implements Action<PEventInfo> {
private static final long serialVersionUID = 1L;
@SuppressWarnings("nls")
private static final String PEVENT_INFO_QRY =
"SELECT distinct pevent"
+ " FROM " + ProcessingEvent.class.getName() + " pevent"
+ " INNER JOIN FETCH pevent.center"
+ " LEFT JOIN FETCH pevent.comments comments"
+ " LEFT JOIN FETCH comments.user"
+ " WHERE pevent.id=?";
public static class PEventInfo implements ActionResult {
private static final long serialVersionUID = 1L;
public ProcessingEvent pevent;
public List<SpecimenInfo> sourceSpecimenInfos;
}
private final Integer peventId;
public ProcessingEventGetInfoAction(Integer peventId) {
this.peventId = peventId;
}
@Override
public boolean isAllowed(ActionContext context) throws ActionException {
return new ProcessingEventReadPermission(peventId).isAllowed(context);
}
@Override
public PEventInfo run(ActionContext context) throws ActionException {
PEventInfo peventInfo = new PEventInfo();
Query query = context.getSession().createQuery(PEVENT_INFO_QRY);
query.setParameter(0, peventId);
@SuppressWarnings("unchecked")
List<ProcessingEvent> rows = query.list();
if (rows.size() != 1) {
throw new ModelNotFoundException(ProcessingEvent.class, peventId);
}
peventInfo.pevent = rows.get(0);
peventInfo.sourceSpecimenInfos =
new ProcessingEventGetSourceSpecimenListInfoAction(peventId).run(
context).getList();
return peventInfo;
}
}