package edu.ualberta.med.biobank.test.action.helper;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import edu.ualberta.med.biobank.common.action.collectionEvent.CollectionEventGetInfoAction;
import edu.ualberta.med.biobank.common.action.collectionEvent.CollectionEventGetInfoAction.CEventInfo;
import edu.ualberta.med.biobank.common.action.exception.ActionException;
import edu.ualberta.med.biobank.common.action.info.ResearchGroupReadInfo;
import edu.ualberta.med.biobank.common.action.researchGroup.ResearchGroupGetInfoAction;
import edu.ualberta.med.biobank.common.action.specimen.SpecimenInfo;
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;
import edu.ualberta.med.biobank.test.Utils;
import edu.ualberta.med.biobank.test.action.IActionExecutor;
public class RequestHelper extends Helper {
public static Integer createRequest(Session session,
IActionExecutor actionExecutor, Integer rgId) throws Exception {
session.beginTransaction();
String name = Utils.getRandomString(5);
ResearchGroupGetInfoAction reader =
new ResearchGroupGetInfoAction(rgId);
ResearchGroupReadInfo rg = actionExecutor.exec(reader);
// create specs
Integer p =
PatientHelper.createPatient(actionExecutor, name + "_patient",
rg.researchGroup.getStudy().getId());
Integer ceId =
CollectionEventHelper.createCEventWithSourceSpecimens(
actionExecutor,
p, rgId);
CollectionEventGetInfoAction ceReader =
new CollectionEventGetInfoAction(ceId);
CEventInfo ceInfo = actionExecutor.exec(ceReader);
List<String> specs = new ArrayList<String>();
for (SpecimenInfo specInfo : ceInfo.sourceSpecimenInfos)
specs.add(specInfo.specimen.getInventoryId());
// request specs
Request request = new Request();
request.setResearchGroup((ResearchGroup) session.get(
ResearchGroup.class, rgId));
request.setCreated(new Date());
request.setAddress(((ResearchGroup) session.get(ResearchGroup.class,
rgId)).getAddress());
session.saveOrUpdate(request);
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 = session.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);
session.saveOrUpdate(r);
}
session.getTransaction().commit();
session.flush();
return request.getId();
}
}