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.Study; import edu.ualberta.med.biobank.model.StudyEventAttr; public class StudyGetStudyEventAttrsAction implements Action<SetResult<StudyEventAttr>> { private static final long serialVersionUID = 1L; @SuppressWarnings("nls") private static final String SELECT_STUDY_EVENT_ATTR_HQL = " FROM " + StudyEventAttr.class.getName() + " AS seAttr" + " INNER JOIN FETCH seAttr.globalEventAttr geAttr" + " INNER JOIN FETCH geAttr.eventAttrType" + " WHERE seAttr.study.id=?"; private final Integer studyId; public StudyGetStudyEventAttrsAction(Integer studyId) { this.studyId = studyId; } public StudyGetStudyEventAttrsAction(Study study) { this(study.getId()); } @Override public boolean isAllowed(ActionContext context) { return true; } @Override public SetResult<StudyEventAttr> run(ActionContext context) throws ActionException { Set<StudyEventAttr> result = new HashSet<StudyEventAttr>(); Query query = context.getSession().createQuery(SELECT_STUDY_EVENT_ATTR_HQL); query.setParameter(0, studyId); @SuppressWarnings("unchecked") List<StudyEventAttr> attrs = query.list(); if (attrs != null) { result.addAll(attrs); } return new SetResult<StudyEventAttr>(result); } }