package edu.ualberta.med.biobank.common.action.study; import java.util.HashSet; import java.util.List; import java.util.Set; 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.SetResult; import edu.ualberta.med.biobank.common.action.exception.ActionException; import edu.ualberta.med.biobank.model.AliquotedSpecimen; import edu.ualberta.med.biobank.model.Study; public class StudyGetAliquotedSpecimensAction implements Action<SetResult<AliquotedSpecimen>> { private static final long serialVersionUID = 1L; @SuppressWarnings("nls") private static final String SELECT_ALIQUOTED_SPCS_HQL = "SELECT srcspc" + " FROM " + AliquotedSpecimen.class.getName() + " srcspc" + " INNER JOIN FETCH srcspc.specimenType specimenType" // + " LEFT JOIN FETCH specimenType.childSpecimenTypes" + " WHERE srcspc.study.id = ?"; private final Integer studyId; public StudyGetAliquotedSpecimensAction(Integer studyId) { this.studyId = studyId; } public StudyGetAliquotedSpecimensAction(Study study) { this(study.getId()); } @Override public boolean isAllowed(ActionContext context) throws ActionException { return true; } @Override public SetResult<AliquotedSpecimen> run(ActionContext context) throws ActionException { Set<AliquotedSpecimen> result = new HashSet<AliquotedSpecimen>(); Query query = context.getSession().createQuery(SELECT_ALIQUOTED_SPCS_HQL); query.setParameter(0, studyId); @SuppressWarnings("unchecked") List<AliquotedSpecimen> aliquotedSpecimens = query.list(); if (aliquotedSpecimens != null) { result.addAll(aliquotedSpecimens); } return new SetResult<AliquotedSpecimen>(result); } }