package org.sakaiproject.tool.assessment.facade; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.sakaiproject.tool.assessment.data.dao.assessment.EventLogData; import org.sakaiproject.tool.assessment.data.dao.assessment.PublishedAccessControl; import org.sakaiproject.tool.assessment.services.PersistenceService; import org.sakaiproject.tool.assessment.services.assessment.PublishedAssessmentService; import org.sakaiproject.user.api.User; import org.sakaiproject.user.api.UserNotDefinedException; import org.sakaiproject.user.cover.UserDirectoryService; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import org.springframework.orm.hibernate3.HibernateCallback; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; public class EventLogFacadeQueries extends HibernateDaoSupport implements EventLogFacadeQueriesAPI { private static Log log = LogFactory .getLog(EventLogFacadeQueries.class); public void saveOrUpdateEventLog(EventLogFacade eventLog){ EventLogData data = (EventLogData) eventLog.getData(); int retryCount = PersistenceService.getInstance().getRetryCount() .intValue(); while (retryCount > 0) { try { getHibernateTemplate().saveOrUpdate(data); retryCount = 0; } catch (Exception e) { log .warn("problem save or update eventLog: " + e.getMessage()); retryCount = PersistenceService.getInstance().retryDeadlock(e, retryCount); } } } public List<EventLogData> getEventLogData(final Long assessmentGradingId) { String query = "select eld from EventLogData as eld" + " where eld.processId = ?" + " order by eld.id desc"; final String hql = query; final HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.createQuery(hql); q.setLong(0, assessmentGradingId.longValue()); return q.list(); }; }; List list = getHibernateTemplate().executeFind(hcb); ArrayList<EventLogData> eventLogList = new ArrayList<EventLogData>(); Map<String, User> userMap = new HashMap<String, User>(); for(int i = 0; i < list.size(); i++) { EventLogData e =(EventLogData) list.get(i); e.setUserDisplay(getUserDisplay(e.getUserEid(), userMap)); eventLogList.add(e); } return eventLogList; } public List<EventLogData> getDataBySiteId(final String siteId) { String query = "select eld from EventLogData as eld" + " where eld.siteId = ?" + " order by eld.assessmentId asc, eld.userEid asc"; final String hql = query; final HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.createQuery(hql); q.setString(0, siteId); return q.list(); }; }; List list = (ArrayList) getHibernateTemplate().executeFind(hcb); ArrayList<EventLogData> eventLogDataList = new ArrayList<EventLogData>(); Map<String, User> userMap = new HashMap<String, User>(); for(int i = 0; i < list.size(); i++) { EventLogData e =(EventLogData) list.get(i); e.setUserDisplay(getUserDisplay(e.getUserEid(), userMap)); eventLogDataList.add(e); } return eventLogDataList; } public List<EventLogData> getEventLogData(final String siteId, final Long assessmentId, final String userFilter) { String query = "select eld from EventLogData as eld where eld.siteId = ?"; if (assessmentId > -1) { query += " and eld.assessmentId = ?"; } query += " order by eld.assessmentId asc, eld.userEid asc"; final String hql = query; final HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.createQuery(hql); q.setString(0, siteId); if (assessmentId > -1) { q.setLong(1, assessmentId); } return q.list(); }; }; List list = (ArrayList) getHibernateTemplate().executeFind(hcb); List<EventLogData> eventLogDataList = new ArrayList<EventLogData>(); Map<String, User> userMap = new HashMap<String, User>(); for(int i = 0; i < list.size(); i++) { EventLogData e =(EventLogData) list.get(i); e.setUserDisplay(getUserDisplay(e.getUserEid(), userMap)); if (userFilter == null || "".equals(userFilter) || (userFilter != null && !"".equals(userFilter) && e.getUserDisplay().toLowerCase().contains(userFilter.toLowerCase()))) { eventLogDataList.add(e); } } return eventLogDataList; } /** * Get the user's display name (including the eid), looking up in a map first. * @param userEid * @param userMap * @return */ private String getUserDisplay(String userEid, Map<String, User> userMap) { String display = userEid; User user = userMap.get(userEid); if (user == null) { try { user = UserDirectoryService.getUserByEid(userEid); userMap.put(userEid, user); } catch (UserNotDefinedException e) { log.warn("Unable to get user with eid: " + userEid); } } if (user!=null) display = user.getSortName() + " (" + userEid + ")"; return display; } public List<Object[]> getTitlesFromEventLogBySite(final String siteId) { String query = "select distinct eld.assessmentId, eld.title from EventLogData as eld" + " where eld.siteId = ?" + " order by lower(eld.title) asc"; final String hql = query; final HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.createQuery(hql); q.setString(0, siteId); return q.list(); }; }; List<Object[]> list = (ArrayList<Object[]>) getHibernateTemplate().executeFind(hcb); return list; } }