package edu.ualberta.med.biobank.common.action.study; import java.util.HashMap; 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.MapResult; import edu.ualberta.med.biobank.common.action.exception.ActionException; import edu.ualberta.med.biobank.common.wrappers.EventAttrTypeEnum; import edu.ualberta.med.biobank.model.StudyEventAttr; public class StudyGetEventAttrInfoAction implements Action<MapResult<Integer, StudyEventAttrInfo>> { private static final long serialVersionUID = 1L; private Integer studyId; @SuppressWarnings("nls") private static final String STUDY_EVENT_ATTR_QRY = "SELECT seAttr,attrType.name" + " FROM " + StudyEventAttr.class.getName() + " as seAttr" + " LEFT JOIN FETCH seAttr.globalEventAttr as geAttr" + " LEFT JOIN FETCH geAttr.eventAttrType as attrType" + " WHERE seAttr.study.id=?" + " GROUP BY seAttr"; public StudyGetEventAttrInfoAction(Integer studyId) { this.studyId = studyId; } @Override public boolean isAllowed(ActionContext context) { return true; } /** * Action that return a map of [label=StudyEventAttrInfo] */ @Override public MapResult<Integer, StudyEventAttrInfo> run(ActionContext context) throws ActionException { HashMap<Integer, StudyEventAttrInfo> attrInfos = new HashMap<Integer, StudyEventAttrInfo>(); Query query = context.getSession().createQuery(STUDY_EVENT_ATTR_QRY); query.setParameter(0, studyId); @SuppressWarnings("unchecked") List<Object[]> rows = query.list(); for (Object[] row : rows) { StudyEventAttrInfo attrInfo = new StudyEventAttrInfo(); attrInfo.attr = (StudyEventAttr) row[0]; // FIXME need status? attrInfo.type = EventAttrTypeEnum.getEventAttrType((String) row[1]); attrInfos.put(attrInfo.attr.getId(), attrInfo); } return new MapResult<Integer, StudyEventAttrInfo>(attrInfos); } }