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 *************************
/**