Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaUsrRespDAO.java =================================================================== diff -u -rc5457cc74f3986b393bc2947604b17168ba54dfb -rca386181e6fd53b23fe0bb633f368a870db55b2f --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaUsrRespDAO.java (.../IQaUsrRespDAO.java) (revision c5457cc74f3986b393bc2947604b17168ba54dfb) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IQaUsrRespDAO.java (.../IQaUsrRespDAO.java) (revision ca386181e6fd53b23fe0bb633f368a870db55b2f) @@ -45,4 +45,6 @@ int getCountResponsesByQaContent(final Long qaContentId); List getResponsesByUserUid(final Long userUid); + + List getResponseBySessionAndQuestion(final Long qaSessionId, final Long questionId); } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IResponseRatingDAO.java =================================================================== diff -u -r15045d0b9b0dbb930f42a9da7757207e7a325341 -rca386181e6fd53b23fe0bb633f368a870db55b2f --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IResponseRatingDAO.java (.../IResponseRatingDAO.java) (revision 15045d0b9b0dbb930f42a9da7757207e7a325341) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/IResponseRatingDAO.java (.../IResponseRatingDAO.java) (revision ca386181e6fd53b23fe0bb633f368a870db55b2f) @@ -24,6 +24,7 @@ package org.lamsfoundation.lams.tool.qa.dao; import java.util.List; +import java.util.Map; import org.lamsfoundation.lams.tool.qa.ResponseRating; import org.lamsfoundation.lams.tool.qa.dto.AverageRatingDTO; @@ -67,4 +68,6 @@ public void removeResponseRating(ResponseRating rating); public List getRatingsByUser(Long userUid); + + Map getAverageRatingDTOByResponseAndQuestionAndSession(Long questionUid, Long qaSessionId); } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaUsrRespDAO.java =================================================================== diff -u -rc5457cc74f3986b393bc2947604b17168ba54dfb -rca386181e6fd53b23fe0bb633f368a870db55b2f --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaUsrRespDAO.java (.../QaUsrRespDAO.java) (revision c5457cc74f3986b393bc2947604b17168ba54dfb) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/QaUsrRespDAO.java (.../QaUsrRespDAO.java) (revision ca386181e6fd53b23fe0bb633f368a870db55b2f) @@ -38,11 +38,13 @@ public class QaUsrRespDAO extends HibernateDaoSupport implements IQaUsrRespDAO { private static final String LOAD_ATTEMPT_FOR_USER_AND_QUESTION = "from qaUsrResp in class QaUsrResp where qaUsrResp.qaQueUser.queUsrId=:queUsrId and qaUsrResp.qaQuestion.uid=:questionId"; + private static final String LOAD_ATTEMPT_FOR_SESSION_AND_QUESTION = "from qaUsrResp in class QaUsrResp where qaUsrResp.qaQueUser.qaSession.qaSessionId=:qaSessionId and qaUsrResp.qaQuestion.uid=:questionId"; + private static final String LOAD_ATTEMPT_FOR_USER = "from qaUsrResp in class QaUsrResp where qaUsrResp.qaQueUser.uid=:userUid order by qaUsrResp.qaQuestion.displayOrder asc"; - - private static final String GET_COUNT_RESPONSES_BY_QACONTENT = "SELECT COUNT(*) from " - + QaUsrResp.class.getName() + " as r where r.qaQuestion.qaContent.qaContentId=?"; + private static final String GET_COUNT_RESPONSES_BY_QACONTENT = "SELECT COUNT(*) from " + QaUsrResp.class.getName() + + " as r where r.qaQuestion.qaContent.qaContentId=?"; + public void createUserResponse(QaUsrResp qaUsrResp) { this.getSession().setFlushMode(FlushMode.AUTO); this.getHibernateTemplate().save(qaUsrResp); @@ -65,6 +67,7 @@ this.getHibernateTemplate().delete(resp); } + @Override public QaUsrResp getResponseByUserAndQuestion(final Long queUsrId, final Long questionId) { List list = getSession().createQuery(LOAD_ATTEMPT_FOR_USER_AND_QUESTION) .setLong("queUsrId", queUsrId.longValue()).setLong("questionId", questionId.longValue()).list(); @@ -74,16 +77,22 @@ return (QaUsrResp) list.get(list.size() - 1); } } - + @Override + public List getResponseBySessionAndQuestion(final Long qaSessionId, final Long questionId) { + return getSession().createQuery(LOAD_ATTEMPT_FOR_SESSION_AND_QUESTION) + .setLong("qaSessionId", qaSessionId.longValue()).setLong("questionId", questionId.longValue()).list(); + } + + @Override public List getResponsesByUserUid(final Long userUid) { List list = getSession().createQuery(LOAD_ATTEMPT_FOR_USER).setLong("userUid", userUid.longValue()) .list(); return list; } - + public int getCountResponsesByQaContent(final Long qaContentId) { - + List list = getHibernateTemplate().find(GET_COUNT_RESPONSES_BY_QACONTENT, new Object[] { qaContentId }); if (list == null || list.size() == 0) { return 0; Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/ResponseRatingDAO.java =================================================================== diff -u -r9fbb7ff85ea238ebc8699e9ec116eb0cd782ff90 -rca386181e6fd53b23fe0bb633f368a870db55b2f --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/ResponseRatingDAO.java (.../ResponseRatingDAO.java) (revision 9fbb7ff85ea238ebc8699e9ec116eb0cd782ff90) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/dao/hibernate/ResponseRatingDAO.java (.../ResponseRatingDAO.java) (revision ca386181e6fd53b23fe0bb633f368a870db55b2f) @@ -24,8 +24,10 @@ package org.lamsfoundation.lams.tool.qa.dao.hibernate; import java.text.NumberFormat; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import org.hibernate.FlushMode; import org.lamsfoundation.lams.dao.hibernate.BaseDAO; @@ -50,6 +52,9 @@ private static final String FIND_AVERAGE_RATING_BY_RESPONSE = "SELECT AVG(r.rating), COUNT(*) from " + ResponseRating.class.getName() + " as r where r.response.responseId=?"; + private static final String FIND_AVERAGE_RATING_BY_RESPONSE_QUESTION_SESSION = "SELECT r.response.responseId, AVG(r.rating), COUNT(*) from " + + ResponseRating.class.getName() + " as r where r.response.qaQuestion.uid=? and r.response.qaQueUser.qaSession.qaSessionId=? group by r.response.responseId"; + private static final String FIND_BY_USER_UID = "from " + ResponseRating.class.getName() + " as r where r.user.uid = ?"; @@ -76,7 +81,33 @@ String numberOfVotes = (results[1] == null) ? "0" : String.valueOf(results[1]); return new AverageRatingDTO(averageRating, numberOfVotes); } + + public Map getAverageRatingDTOByResponseAndQuestionAndSession(Long questionUid, Long qaSessionId) { + List list = getHibernateTemplate().find(FIND_AVERAGE_RATING_BY_RESPONSE_QUESTION_SESSION, new Object[] { questionUid, qaSessionId }); + + Map mapResponseIdToAverageRating = new HashMap(); + for (Object[] results : list) { + if (results[0] == null) { + return null; + } + + Long responseId = (Long) results[0]; + Object averageRatingObj = results[1]; + NumberFormat numberFormat = NumberFormat.getInstance(Locale.US); + numberFormat.setMaximumFractionDigits(1); + String averageRating = numberFormat.format(averageRatingObj); + + String numberOfVotes = String.valueOf(results[2]); + + mapResponseIdToAverageRating.put(responseId, new AverageRatingDTO(averageRating, numberOfVotes)); + + } + + return mapResponseIdToAverageRating; + + } + public void saveObject(Object o) { super.insertOrUpdate(o); } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java =================================================================== diff -u -ra7661f206a3f21114f1c05f9a29f56e20f5e35f0 -rca386181e6fd53b23fe0bb633f368a870db55b2f --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java (.../IQaService.java) (revision a7661f206a3f21114f1c05f9a29f56e20f5e35f0) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/IQaService.java (.../IQaService.java) (revision ca386181e6fd53b23fe0bb633f368a870db55b2f) @@ -25,6 +25,7 @@ import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.SortedSet; @@ -102,7 +103,10 @@ void updateUser(QaQueUsr qaQueUsr); QaUsrResp getResponseByUserAndQuestion(final Long queUsrId, final Long qaQueContentId); + + List getResponseBySessionAndQuestion(final Long qaSessionId, final Long questionId); + Map getAverageRatingDTOByResponseAndQuestionAndSession(Long questionUid, Long qaSessionId); /** * Creates or updates response with answer submitted by user. * Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java =================================================================== diff -u -r40eb54374e84591563d8b6a679ac719dbc85c8f7 -rca386181e6fd53b23fe0bb633f368a870db55b2f --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision 40eb54374e84591563d8b6a679ac719dbc85c8f7) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/service/QaServicePOJO.java (.../QaServicePOJO.java) (revision ca386181e6fd53b23fe0bb633f368a870db55b2f) @@ -31,6 +31,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Random; import java.util.Set; import java.util.SortedMap; @@ -260,13 +261,25 @@ return user; } + @Override public QaQueUsr getUserByIdAndSession(final Long queUsrId, final Long qaSessionId) { return qaQueUsrDAO.getQaUserBySession(queUsrId, qaSessionId); } + @Override public QaUsrResp getResponseByUserAndQuestion(final Long queUsrId, final Long qaQueContentId) { return qaUsrRespDAO.getResponseByUserAndQuestion(queUsrId, qaQueContentId); } + + @Override + public List getResponseBySessionAndQuestion(final Long qaSessionId, final Long questionId) { + return qaUsrRespDAO.getResponseBySessionAndQuestion(qaSessionId, questionId); + } + + @Override + public Map getAverageRatingDTOByResponseAndQuestionAndSession(Long questionUid, Long qaSessionId) { + return qaResponseRatingDAO.getAverageRatingDTOByResponseAndQuestionAndSession(questionUid, qaSessionId); + } public void updateUserResponse(QaUsrResp resp) { qaUsrRespDAO.updateUserResponse(resp); @@ -297,7 +310,33 @@ updateUserResponse(response); } } + + public void getResponses(String newAnswer, String toolSessionID, Long questionDisplayOrder) { + HttpSession ss = SessionManager.getSession(); + UserDTO toolUser = (UserDTO) ss.getAttribute(AttributeNames.USER); + Long userId = new Long(toolUser.getUserID().longValue()); + QaQueUsr user = getUserByIdAndSession(userId, new Long(toolSessionID)); + QaSession session = getSessionById(new Long(toolSessionID)); + QaContent qaContent = session.getQaContent(); + + QaQueContent question = getQuestionByContentAndDisplayOrder(new Long(questionDisplayOrder), qaContent.getUid()); + + QaUsrResp response = getResponseByUserAndQuestion(user.getQueUsrId(), question.getUid()); + // if response doesn't exist + if (response == null) { + response = new QaUsrResp(newAnswer, new Date(System.currentTimeMillis()), "", question, user, true); + createUserResponse(response); + + // if answer has changed + } else if (!newAnswer.equals(response.getAnswer())) { + response.setAnswer(newAnswer); + response.setAttemptTime(new Date(System.currentTimeMillis())); + response.setTimezone(""); + updateUserResponse(response); + } + } + public List getUserBySessionOnly(final QaSession qaSession) { return qaQueUsrDAO.getUserBySessionOnly(qaSession); } Index: lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/MonitoringUtil.java =================================================================== diff -u -ra7661f206a3f21114f1c05f9a29f56e20f5e35f0 -rca386181e6fd53b23fe0bb633f368a870db55b2f --- lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/MonitoringUtil.java (.../MonitoringUtil.java) (revision a7661f206a3f21114f1c05f9a29f56e20f5e35f0) +++ lams_tool_laqa/src/java/org/lamsfoundation/lams/tool/qa/web/MonitoringUtil.java (.../MonitoringUtil.java) (revision ca386181e6fd53b23fe0bb633f368a870db55b2f) @@ -72,30 +72,34 @@ String questionUid, boolean isUserNamesVisible, boolean isLearnerRequest, String sessionId, String userId) { List> listMonitoredAttemptsContainerDTO = new LinkedList>(); - QaSession session = qaService.getSessionById(new Long(sessionId).longValue()); + Map mapResponseIdToAverageRating = qaService.getAverageRatingDTOByResponseAndQuestionAndSession(new Long(questionUid), new Long(sessionId)); - List listUsers = new LinkedList(); + List responses = new ArrayList(); if (!isLearnerRequest) { /* request is for monitoring summary */ if (qaContent.isUseSelectLeaderToolOuput()) { + QaSession session = qaService.getSessionById(new Long(sessionId).longValue()); QaQueUsr groupLeader = session.getGroupLeader(); if (groupLeader != null) { - listUsers.add(groupLeader); + QaUsrResp response = qaService.getResponseByUserAndQuestion(groupLeader.getQueUsrId(), new Long(questionUid)); + if (response != null) { + responses.add(response); + } } + } else { - listUsers = qaService.getUserBySessionOnly(session); + responses = qaService.getResponseBySessionAndQuestion(new Long(sessionId), new Long(questionUid)); } + } else { - if (qaContent.isShowOtherAnswers()) { - listUsers = qaService.getUserBySessionOnly(session); + responses = qaService.getResponseBySessionAndQuestion(new Long(sessionId), new Long(questionUid)); + } else { - listUsers = new ArrayList(); - QaQueUsr currentUser = qaService.getUserByIdAndSession(new Long(userId).longValue(), - session.getQaSessionId()); - if (currentUser != null) { - listUsers.add(currentUser); + QaUsrResp response = qaService.getResponseByUserAndQuestion(new Long(userId), new Long(questionUid)); + if (response != null) { + responses.add(response); } } } @@ -106,8 +110,8 @@ * user. */ List qaMonitoredUserDTOs = new LinkedList(); - for (QaQueUsr user : (List) listUsers) { - QaUsrResp response = qaService.getResponseByUserAndQuestion(user.getQueUsrId(), new Long(questionUid)); + for (QaUsrResp response : responses) { + QaQueUsr user = response.getQaQueUser(); if (response != null) { QaMonitoredUserDTO qaMonitoredUserDTO = new QaMonitoredUserDTO(); qaMonitoredUserDTO.setAttemptTime(response.getAttemptTime()); @@ -134,9 +138,17 @@ // set averageRating if (qaContent.isAllowRateAnswers()) { - AverageRatingDTO averageRating = qaService.getAverageRatingDTOByResponse(response.getResponseId()); - qaMonitoredUserDTO.setAverageRating(averageRating.getRating()); - qaMonitoredUserDTO.setNumberOfVotes(averageRating.getNumberOfVotes()); + + AverageRatingDTO averageRating = mapResponseIdToAverageRating.get(response.getResponseId()); +// AverageRatingDTO averageRating = qaService.getAverageRatingDTOByResponse(response.getResponseId()); + if (averageRating == null) { + qaMonitoredUserDTO.setAverageRating("0"); + qaMonitoredUserDTO.setNumberOfVotes("0"); + } else { + qaMonitoredUserDTO.setAverageRating(averageRating.getRating()); + qaMonitoredUserDTO.setNumberOfVotes(averageRating.getNumberOfVotes()); + } + } qaMonitoredUserDTOs.add(qaMonitoredUserDTO);