Index: lams_common/src/java/org/lamsfoundation/lams/tool/service/ICommonAssessmentService.java =================================================================== diff -u -rc307a78aca6f80434a5ee07496e70cb3f418d6cd -r70eb09e59b67dfc68c2cc425cd43e521c0d7fab8 --- lams_common/src/java/org/lamsfoundation/lams/tool/service/ICommonAssessmentService.java (.../ICommonAssessmentService.java) (revision c307a78aca6f80434a5ee07496e70cb3f418d6cd) +++ lams_common/src/java/org/lamsfoundation/lams/tool/service/ICommonAssessmentService.java (.../ICommonAssessmentService.java) (revision 70eb09e59b67dfc68c2cc425cd43e521c0d7fab8) @@ -11,9 +11,6 @@ * Returns answers learners left for VSA questions in Assessment activity (together with according confidence * levels, if such option is turned on in Assessment). Currently only Assessment tool is capable of producing VSA * answers. - * - * @param toolSessionId - * @return */ Collection getVsaAnswers(Long toolSessionId); @@ -27,7 +24,7 @@ * Counts how many questions were answered correctly by all users in the given activity, regardless of the mark * given. * Currently it only works for MCQ and mark hedging questions. - * + * * @return map user ID -> correct answer count */ Map countCorrectAnswers(long toolContentId); Index: lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/TblMonitoringController.java =================================================================== diff -u -r8ed85ff3ecedeac47ee142f804192dad00939763 -r70eb09e59b67dfc68c2cc425cd43e521c0d7fab8 --- lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/TblMonitoringController.java (.../TblMonitoringController.java) (revision 8ed85ff3ecedeac47ee142f804192dad00939763) +++ lams_monitoring/src/java/org/lamsfoundation/lams/monitoring/web/TblMonitoringController.java (.../TblMonitoringController.java) (revision 70eb09e59b67dfc68c2cc425cd43e521c0d7fab8) @@ -75,6 +75,9 @@ @Qualifier("laasseAssessmentService") private ICommonAssessmentService commonAssessmentService; @Autowired + @Qualifier("mcService") + private ICommonAssessmentService commonMcqService; + @Autowired @Qualifier("scratchieService") private ICommonScratchieService commonScratchieService; @@ -105,15 +108,17 @@ setupAvailableActivityTypes(request, lessonActivities); boolean isTraAvailable = (request.getAttribute("isScratchieAvailable") != null) && ((Boolean) request.getAttribute("isScratchieAvailable")); - boolean isIraAvailable = (request.getAttribute("isIraAssessmentAvailable") != null) + boolean isIraAssesmentAvailable = request.getAttribute("isIraAssessmentAvailable") != null && ((Boolean) request.getAttribute("isIraAssessmentAvailable")); + boolean isIraMcqAvailable = request.getAttribute("isIraMcqAvailable") != null + && ((Boolean) request.getAttribute("isIraMcqAvailable")); Long iraToolActivityId = request.getAttribute("iraToolActivityId") == null ? null : (Long) request.getAttribute("iraToolActivityId"); Long traToolActivityId = request.getAttribute("traToolActivityId") == null ? null : (Long) request.getAttribute("traToolActivityId"); Long leaderselectionToolActivityId = request.getAttribute("leaderselectionToolActivityId") == null ? null : (Long) request.getAttribute("leaderselectionToolActivityId"); - Long iraToolContentId = isIraAvailable + Long iraToolContentId = isIraMcqAvailable || isIraAssesmentAvailable ? activityDAO.find(ToolActivity.class, iraToolActivityId).getToolContentId() : null; Long traToolContentId = isTraAvailable @@ -137,8 +142,12 @@ Grouping grouping = groupingActivity == null ? null : groupingActivity.getCreateGrouping(); Set groups = grouping == null ? null : grouping.getGroups(); - Map iraCorrectAnswerCountByUser = commonAssessmentService - .countCorrectAnswers(iraToolContentId); + Map iraCorrectAnswerCountByUser = Map.of(); + if (isIraMcqAvailable) { + iraCorrectAnswerCountByUser = commonMcqService.countCorrectAnswers(iraToolContentId); + } else if (isIraAssesmentAvailable) { + iraCorrectAnswerCountByUser = commonAssessmentService.countCorrectAnswers(iraToolContentId); + } Set groupDtos = new TreeSet<>(); for (Group group : groups) { @@ -507,7 +516,6 @@ iraPassed = true; if (CommonConstants.TOOL_SIGNATURE_MCQ.equals(toolSignature)) { request.setAttribute("isIraMcqAvailable", true); - } else { request.setAttribute("isIraAssessmentAvailable", true); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -re1d973ac972f78549468d42fd90f22349c3cbee5 -r70eb09e59b67dfc68c2cc425cd43e521c0d7fab8 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision e1d973ac972f78549468d42fd90f22349c3cbee5) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 70eb09e59b67dfc68c2cc425cd43e521c0d7fab8) @@ -3426,7 +3426,6 @@ Map counts = new HashMap<>(); Assessment assessment = getAssessmentByContentId(toolContentId); long assessmentUid = assessment.getUid(); - long start = System.currentTimeMillis(); Collection assessmentResults = assessmentResultDao.getLastAssessmentResults(assessmentUid); for (AssessmentResult assessmentResult : assessmentResults) { AssessmentUser user = assessmentResult.getUser(); Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java =================================================================== diff -u -r02ce40b60524aa33d326fbda824dcd43f566ab94 -r70eb09e59b67dfc68c2cc425cd43e521c0d7fab8 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java (.../IMcUsrAttemptDAO.java) (revision 02ce40b60524aa33d326fbda824dcd43f566ab94) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/dao/IMcUsrAttemptDAO.java (.../IMcUsrAttemptDAO.java) (revision 70eb09e59b67dfc68c2cc425cd43e521c0d7fab8) @@ -24,6 +24,7 @@ import java.util.List; +import org.lamsfoundation.lams.dao.IBaseDAO; import org.lamsfoundation.lams.tool.mc.dto.ToolOutputDTO; import org.lamsfoundation.lams.tool.mc.model.McUsrAttempt; @@ -35,7 +36,7 @@ *

* */ -public interface IMcUsrAttemptDAO { +public interface IMcUsrAttemptDAO extends IBaseDAO { /** * * Index: lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java =================================================================== diff -u -re62e56b0f0d04f6820592e95b0271619784a2c9f -r70eb09e59b67dfc68c2cc425cd43e521c0d7fab8 --- lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision e62e56b0f0d04f6820592e95b0271619784a2c9f) +++ lams_tool_lamc/src/java/org/lamsfoundation/lams/tool/mc/service/McService.java (.../McService.java) (revision 70eb09e59b67dfc68c2cc425cd43e521c0d7fab8) @@ -26,6 +26,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashSet; @@ -55,6 +56,7 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.util.CellUtil; import org.lamsfoundation.lams.confidencelevel.ConfidenceLevelDTO; +import org.lamsfoundation.lams.confidencelevel.VsaAnswerDTO; import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; @@ -104,6 +106,7 @@ import org.lamsfoundation.lams.tool.mc.model.McUsrAttempt; import org.lamsfoundation.lams.tool.mc.util.McSessionComparator; import org.lamsfoundation.lams.tool.mc.util.McStringComparator; +import org.lamsfoundation.lams.tool.service.ICommonAssessmentService; import org.lamsfoundation.lams.tool.service.ILamsToolService; import org.lamsfoundation.lams.tool.service.IQbToolService; import org.lamsfoundation.lams.usermanagement.User; @@ -129,8 +132,8 @@ * * @author Ozgur Demirtas */ -public class McService - implements IMcService, ToolContentManager, ToolSessionManager, ToolRestManager, McAppConstants, IQbToolService { +public class McService implements IMcService, ToolContentManager, ToolSessionManager, ToolRestManager, McAppConstants, + IQbToolService, ICommonAssessmentService { private static Logger logger = Logger.getLogger(McService.class.getName()); private IMcContentDAO mcContentDAO; @@ -942,7 +945,7 @@ // [+] if the questionDescription mark is modified for (McQuestionDTO modifiedQuestion : modifiedQuestionsMarksOnly) { if (question.getUid().equals(modifiedQuestion.getUid())) { - Integer newQuestionMark = Integer.valueOf(modifiedQuestion.getMark()); + int newQuestionMark = Integer.parseInt(modifiedQuestion.getMark()); Integer oldQuestionMark = question.getMark(); Integer newActualMark = (userAttempt.getMark() * newQuestionMark) / oldQuestionMark; @@ -1055,7 +1058,7 @@ cell.setCellValue(rowCount); rowCount++; - Double totalPercentage = 0d; + double totalPercentage = 0d; for (QbOption option : question.getQbQuestion().getQbOptions()) { int optionAttemptCount = getAttemptsCountPerOption(option.getUid(), question.getUid()); cell = row.createCell(count++); @@ -1190,7 +1193,7 @@ // class mean Double[] totalPercents = totalPercentList.toArray(new Double[0]); Arrays.sort(totalPercents); - Double sum = 0d; + double sum = 0d; for (int i = 0; i < totalPercents.length; i++) { sum += totalPercents[i]; } @@ -2034,6 +2037,31 @@ return mcUserDAO.getRawLeaderMarksByToolContentId(toolContentId); } + @Override + public Collection getVsaAnswers(Long toolSessionId) { + return new ArrayList<>(); + } + + /** + * Counts how many questions were answered correctly by the given user, regardless of the mark given. + */ + @Override + public Integer countCorrectAnswers(long toolContentId, int userId) { + McQueUsr user = getMcUserByContentId(Long.valueOf(userId), toolContentId); + + return Long.valueOf(mcUsrAttemptDAO.getFinalizedUserAttempts(user.getUid()).stream() + .filter(McUsrAttempt::isAttemptCorrect).count()).intValue(); + + } + + @Override + public Map countCorrectAnswers(long toolContentId) { + return mcUsrAttemptDAO.findByProperty(McUsrAttempt.class, "qbToolQuestion.toolContentId", toolContentId) + .stream().filter(McUsrAttempt::isAttemptCorrect) + .collect(Collectors.groupingBy(a -> a.getMcQueUsr().getQueUsrId().intValue(), + Collectors.collectingAndThen(Collectors.toList(), List::size))); + } + // ****************** REST methods ************************* /**