Index: lams_common/src/java/org/lamsfoundation/lams/qb/dao/IQbDAO.java =================================================================== diff -u -raccfdd9d97b1e9f4db2c48861a2f5ea1d065a3cb -rffd9d97b9e967e027f30a62f888a7f5670b35ba0 --- lams_common/src/java/org/lamsfoundation/lams/qb/dao/IQbDAO.java (.../IQbDAO.java) (revision accfdd9d97b1e9f4db2c48861a2f5ea1d065a3cb) +++ lams_common/src/java/org/lamsfoundation/lams/qb/dao/IQbDAO.java (.../IQbDAO.java) (revision ffd9d97b9e967e027f30a62f888a7f5670b35ba0) @@ -33,10 +33,6 @@ Map getAnswerStatsForQbQuestion(long qbQuestionUid); - Map geAnswerStatsForQbToolQuestion(long qbToolQuestionUid); - - Map getAnswerStatsForActivity(long activityId); - Map getAnswersForActivity(long activityId, long qbQuestionUid); Map getBurningQuestions(long qbQuestionUid); Index: lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java =================================================================== diff -u -raccfdd9d97b1e9f4db2c48861a2f5ea1d065a3cb -rffd9d97b9e967e027f30a62f888a7f5670b35ba0 --- lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java (.../QbDAO.java) (revision accfdd9d97b1e9f4db2c48861a2f5ea1d065a3cb) +++ lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java (.../QbDAO.java) (revision ffd9d97b9e967e027f30a62f888a7f5670b35ba0) @@ -21,12 +21,13 @@ + "WHERE a.toolContentId = q.toolContentId AND a.learningDesign.lessons IS NOT EMPTY AND q.qbQuestion.uid = :qbQuestionUid"; private static final String FIND_QUESTION_VERSIONS = "SELECT q FROM QbQuestion AS q, QbQuestion AS r " + "WHERE q.questionId = r.questionId AND q.uid <> r.uid AND r.uid = :qbQuestionUid"; - private static final String FIND_ANSWER_STATS_BY_QB_QUESTION = "SELECT a.qbOption.uid, COUNT(a.uid) FROM QbToolAnswer AS a " - + "WHERE a.qbOption.qbQuestion.uid = :qbQuestionUid GROUP BY a.qbOption.uid"; - private static final String FIND_ANSWER_STATS_BY_TOOL_QUESTION = "SELECT a.qbOption.uid, COUNT(a.uid) FROM QbToolAnswer AS a " - + "WHERE a.qbToolQuestion.uid = :qbToolQuestionUid GROUP BY a.qbOption.uid"; - private static final String FIND_ANSWER_STATS_BY_ACTIVITY = "SELECT a.qbOption.uid, COUNT(a.uid) FROM QbToolAnswer AS a, " - + " ToolActivity AS act WHERE a.qbToolQuestion.toolContentId = act.toolContentId AND act.activityId = :activityId GROUP BY a.qbOption.uid"; + private static final String FIND_ANSWER_STATS_BY_QB_QUESTION = "SELECT COALESCE(a.qb_option_uid, aa.question_option_uid) AS opt, COUNT(a.answer_uid) " + + "FROM lams_qb_tool_question AS tq JOIN lams_qb_tool_answer AS a USING (tool_question_uid) " + + "LEFT JOIN tl_lascrt11_answer_log AS sa ON a.answer_uid = sa.uid " + + "LEFT JOIN tl_lascrt11_session AS ss ON sa.session_id = ss.session_id " + + "LEFT JOIN tl_lascrt11_user AS su ON ss.uid = su.session_uid " + + "LEFT JOIN tl_laasse10_option_answer AS aa ON a.answer_uid = aa.question_result_uid AND aa.answer_boolean = 1 " + + "WHERE tq.qb_question_uid = :qbQuestionUid GROUP BY opt HAVING opt IS NOT NULL"; private static final String FIND_ANSWERS_BY_ACTIVITY = "SELECT COALESCE(mcu.que_usr_id, su.user_id, au.user_id), " + "COALESCE(a.qb_option_uid, aa.question_option_uid) AS opt " + "FROM lams_learning_activity AS act JOIN lams_qb_tool_question AS tq USING (tool_content_id) " @@ -92,11 +93,11 @@ @Override @SuppressWarnings("unchecked") public Map getAnswerStatsForQbQuestion(long qbQuestionUid) { - List result = this.getSession().createQuery(FIND_ANSWER_STATS_BY_QB_QUESTION) + List result = this.getSession().createSQLQuery(FIND_ANSWER_STATS_BY_QB_QUESTION) .setParameter("qbQuestionUid", qbQuestionUid).list(); Map map = new HashMap<>(result.size()); for (Object[] answerStat : result) { - map.put((Long) answerStat[0], (Long) answerStat[1]); + map.put(((BigInteger) answerStat[0]).longValue(), ((BigInteger) answerStat[1]).longValue()); } return map; } @@ -190,30 +191,6 @@ @Override @SuppressWarnings("unchecked") - public Map geAnswerStatsForQbToolQuestion(long qbToolQuestionUid) { - List result = this.getSession().createQuery(FIND_ANSWER_STATS_BY_TOOL_QUESTION) - .setParameter("qbToolQuestionUid", qbToolQuestionUid).list(); - Map map = new HashMap<>(result.size()); - for (Object[] answerStat : result) { - map.put((Long) answerStat[0], (Long) answerStat[1]); - } - return map; - } - - @Override - @SuppressWarnings("unchecked") - public Map getAnswerStatsForActivity(long activityId) { - List result = this.getSession().createQuery(FIND_ANSWER_STATS_BY_ACTIVITY) - .setParameter("activityId", activityId).list(); - Map map = new HashMap<>(result.size()); - for (Object[] answerStat : result) { - map.put((Long) answerStat[0], (Long) answerStat[1]); - } - return map; - } - - @Override - @SuppressWarnings("unchecked") public Map getAnswersForActivity(long activityId, long qbQuestionUid) { List result = this.getSession().createSQLQuery(FIND_ANSWERS_BY_ACTIVITY) .setParameter("activityId", activityId).setParameter("qbQuestionUid", qbQuestionUid).list(); Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java =================================================================== diff -u -raccfdd9d97b1e9f4db2c48861a2f5ea1d065a3cb -rffd9d97b9e967e027f30a62f888a7f5670b35ba0 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision accfdd9d97b1e9f4db2c48861a2f5ea1d065a3cb) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision ffd9d97b9e967e027f30a62f888a7f5670b35ba0) @@ -1,5 +1,6 @@ package org.lamsfoundation.lams.qb.service; +import java.util.Collection; import java.util.List; import org.lamsfoundation.lams.qb.dto.QbStatsActivityDTO; @@ -43,7 +44,7 @@ QbStatsActivityDTO getActivityStats(Long activityId, Long qbQuestionUid); - QbStatsActivityDTO getActivityStats(Long activityId, Long qbQuestionUid, Long correctOptionUid); + QbStatsActivityDTO getActivityStats(Long activityId, Long qbQuestionUid, Collection correctOptionUids); List getPagedQbQuestions(Integer questionType, int page, int size, String sortBy, String sortOrder, String searchString); Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java =================================================================== diff -u -raccfdd9d97b1e9f4db2c48861a2f5ea1d065a3cb -rffd9d97b9e967e027f30a62f888a7f5670b35ba0 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision accfdd9d97b1e9f4db2c48861a2f5ea1d065a3cb) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision ffd9d97b9e967e027f30a62f888a7f5670b35ba0) @@ -1,5 +1,6 @@ package org.lamsfoundation.lams.qb.service; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -72,17 +73,16 @@ List activities = qbDAO.getQuestionActivities(qbQuestionUid); List activityDTOs = new LinkedList<>(); - Long correctOptionUid = null; + Set correctOptionUids = new HashSet<>(); for (QbOption option : qbOptions) { if (option.isCorrect()) { - correctOptionUid = option.getUid(); - break; + correctOptionUids.add(option.getUid()); } } // calculate correct answer average for each activity for (ToolActivity activity : activities) { QbStatsActivityDTO activityDTO = getActivityStats(activity.getActivityId(), qbQuestionUid, - correctOptionUid); + correctOptionUids); activityDTOs.add(activityDTO); } stats.setActivities(activityDTOs); @@ -119,16 +119,18 @@ @Override public QbStatsActivityDTO getActivityStats(Long activityId, Long qbQuestionUid) { QbQuestion qbQuestion = (QbQuestion) qbDAO.find(QbQuestion.class, qbQuestionUid); + Set correctOptionUids = new HashSet<>(); for (QbOption option : qbQuestion.getQbOptions()) { if (option.isCorrect()) { - return getActivityStats(activityId, qbQuestionUid, option.getUid()); + correctOptionUids.add(option.getUid()); } } - return null; + return getActivityStats(activityId, qbQuestionUid, correctOptionUids); } @Override - public QbStatsActivityDTO getActivityStats(Long activityId, Long qbQuestionUid, Long correctOptionUid) { + public QbStatsActivityDTO getActivityStats(Long activityId, Long qbQuestionUid, + Collection correctOptionUids) { ToolActivity activity = (ToolActivity) qbDAO.find(ToolActivity.class, activityId); Long lessonId = activity.getLearningDesign().getLessons().iterator().next().getLessonId(); List userLessonGrades = gradebookService.getGradebookUserLesson(lessonId); @@ -147,7 +149,7 @@ for (Entry answer : activityAnswers.entrySet()) { Integer userId = answer.getKey(); Long optionUid = answer.getValue(); - if (correctOptionUid.equals(optionUid)) { + if (correctOptionUids.contains(optionUid)) { correctUserIds.add(userId); } }