package edu.ualberta.med.biobank.common.action.specimen; import java.util.Collection; import edu.ualberta.med.biobank.common.action.ActionContext; import edu.ualberta.med.biobank.common.action.exception.ActionException; import edu.ualberta.med.biobank.common.util.RowColPos; import edu.ualberta.med.biobank.common.wrappers.ContainerLabelingSchemeWrapper; import edu.ualberta.med.biobank.model.AliquotedSpecimen; import edu.ualberta.med.biobank.model.Container; import edu.ualberta.med.biobank.model.ContainerType; import edu.ualberta.med.biobank.model.Specimen; import edu.ualberta.med.biobank.model.SpecimenPosition; import edu.ualberta.med.biobank.model.Study; public class SpecimenActionHelper { public static void setParent(ActionContext actionContext, Specimen specimen, Integer parentSpecimenId) { Specimen parent = null; if (parentSpecimenId != null) { parent = actionContext.load(Specimen.class, parentSpecimenId); specimen.setCollectionEvent(parent.getCollectionEvent()); specimen.setParentSpecimen(parent); } Specimen topSpecimen = parent == null ? specimen : parent .getTopSpecimen(); specimen.setTopSpecimen(topSpecimen); if (specimen.equals(parent)) { // parent to itself specimen.setOriginalCollectionEvent(specimen.getCollectionEvent()); } } public static void setQuantityFromType(Specimen specimen) { Study study = specimen.getCollectionEvent().getPatient().getStudy(); Collection<AliquotedSpecimen> aliquotedSpecimenCollection = study .getAliquotedSpecimens(); if (aliquotedSpecimenCollection != null) // FIXME query for (AliquotedSpecimen as : aliquotedSpecimenCollection) if (specimen.getSpecimenType().equals(as.getSpecimenType())) { specimen.setQuantity(as.getVolume()); return; } } public static void setPosition(ActionContext actionContext, Specimen specimen, RowColPos rcp, Integer containerId) { // FIXME check if a position exists? SpecimenPosition pos = specimen.getSpecimenPosition(); if (pos != null && rcp == null && containerId == null) { specimen.setSpecimenPosition(null); // FIXME not sure this will work. Needs to be tested. actionContext.getSession().delete(pos); } if (rcp != null && containerId != null) { if (pos == null) { pos = new SpecimenPosition(); pos.setSpecimen(specimen); specimen.setSpecimenPosition(pos); } pos.setRow(rcp.getRow()); pos.setCol(rcp.getCol()); Container container = actionContext.load(Container.class, containerId); pos.setContainer(container); ContainerType type = container.getContainerType(); String positionString = ContainerLabelingSchemeWrapper .getPositionString(rcp, type.getChildLabelingScheme().getId(), type.getCapacity().getRowCapacity(), type.getCapacity() .getColCapacity()); pos.setPositionString(positionString); } else if ((rcp == null && containerId != null) || (rcp != null && containerId == null)) { throw new ActionException( "Problem: position and parent container should be both null or both set"); //$NON-NLS-1$ } } public static String getPositionString(Specimen specimen, boolean fullString, boolean addTopParentShortName) { if (specimen.getSpecimenPosition() == null) return null; String position = specimen.getSpecimenPosition().getPositionString(); if (fullString) { position = specimen.getSpecimenPosition().getContainer().getLabel() + position; } if (addTopParentShortName) position += " (" //$NON-NLS-1$ + specimen.getSpecimenPosition().getContainer() .getContainerType().getNameShort() + ")"; //$NON-NLS-1$ return position; } }