package edu.ualberta.med.biobank.common.action.collectionEvent; 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.EventAttr; public class CollectionEventGetEventAttrInfoAction implements Action<MapResult<Integer, EventAttrInfo>> { private static final long serialVersionUID = 1L; private Integer ceventId; @SuppressWarnings("nls") private static final String EVENT_ATTR_QRY = "SELECT eAttr,seAttr.id,attrType.name" + " FROM " + EventAttr.class.getName() + " as eAttr" + " LEFT JOIN FETCH eAttr.studyEventAttr as seAttr" + " LEFT JOIN seAttr.globalEventAttr as geAttr" + " LEFT JOIN geAttr.eventAttrType as attrType" + " WHERE eAttr.collectionEvent.id =?" + " GROUP BY eAttr"; public CollectionEventGetEventAttrInfoAction(Integer ceventId) { this.ceventId = ceventId; } @Override public boolean isAllowed(ActionContext context) { return true; } @Override public MapResult<Integer, EventAttrInfo> run(ActionContext context) throws ActionException { HashMap<Integer, EventAttrInfo> attrInfos = new HashMap<Integer, EventAttrInfo>(); Query query = context.getSession().createQuery(EVENT_ATTR_QRY); query.setParameter(0, ceventId); @SuppressWarnings("unchecked") List<Object[]> rows = query.list(); for (Object[] row : rows) { EventAttrInfo attrInfo = new EventAttrInfo(); attrInfo.attr = (EventAttr) row[0]; attrInfo.type = EventAttrTypeEnum.getEventAttrType((String) row[2]); attrInfos.put((Integer) row[1], attrInfo); } return new MapResult<Integer, EventAttrInfo>(attrInfos); } }