package edu.ualberta.med.biobank.common.action.researchGroup; import java.util.Date; 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.IdResult; import edu.ualberta.med.biobank.common.action.exception.ActionException; import edu.ualberta.med.biobank.common.permission.researchGroup.SubmitRequestPermission; import edu.ualberta.med.biobank.common.util.RequestSpecimenState; import edu.ualberta.med.biobank.model.Request; import edu.ualberta.med.biobank.model.RequestSpecimen; import edu.ualberta.med.biobank.model.ResearchGroup; import edu.ualberta.med.biobank.model.Specimen; public class RequestSubmitAction implements Action<IdResult> { /** * */ private static final long serialVersionUID = -448974534976230815L; private Integer rgId; private List<String> specs; public RequestSubmitAction(Integer rgId, List<String> specs) { this.rgId = rgId; this.specs = specs; } @Override public boolean isAllowed(ActionContext context) throws ActionException { return new SubmitRequestPermission(rgId).isAllowed(context); } @Override public IdResult run(ActionContext context) throws ActionException { Request request = new Request(); request.setResearchGroup(context.get(ResearchGroup.class, rgId)); request.setCreated(new Date()); request.setSubmitted(new Date()); request.setAddress(context.get(ResearchGroup.class, rgId).getAddress()); context.getSession().saveOrUpdate(request); context.getSession().flush(); for (String id : specs) { if (id == null || id.equals("")) throw new ActionException( "Blank specimen id, please check your your file for correct input."); Query q = context.getSession().createQuery("from " + Specimen.class.getName() + " where inventoryId=?"); q.setParameter(0, id); Specimen spec = (Specimen) q.list().get(0); if (spec == null) continue; RequestSpecimen r = new RequestSpecimen(); r.setRequest(request); r.setState(RequestSpecimenState.AVAILABLE_STATE.getId()); r.setSpecimen(spec); context.getSession().saveOrUpdate(r); } return new IdResult(request.getId()); } }