Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java =================================================================== diff -u -r8d982bb83bb4040e0eba0076df8ab05ff715f2e9 -rac33d20fb7883183fe443062a74f163abc98f012 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java (.../Scratchie.java) (revision 8d982bb83bb4040e0eba0076df8ab05ff715f2e9) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/Scratchie.java (.../Scratchie.java) (revision ac33d20fb7883183fe443062a74f163abc98f012) @@ -40,7 +40,6 @@ import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.log4j.Logger; -import org.lamsfoundation.lams.qb.model.QbQuestion; /** * Scratchie @@ -100,8 +99,7 @@ @Column(name = "confidence_levels_activity_uiid") private Integer confidenceLevelsActivityUiid; - - + @Column(name = "activity_uuid_providing_vsa_answers") private Integer activityUiidProvidingVsaAnswers; @@ -383,11 +381,11 @@ public void setConfidenceLevelsActivityUiid(Integer confidenceLevelsActivityUiid) { this.confidenceLevelsActivityUiid = confidenceLevelsActivityUiid; } - + public boolean isAnswersFetchingEnabled() { return activityUiidProvidingVsaAnswers != null; } - + /** * @return which preceding activity should be queried for VSA answers */ Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java =================================================================== diff -u -r1268ec552ee72a22db3a5df680d46de7db79e0c0 -rac33d20fb7883183fe443062a74f163abc98f012 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision 1268ec552ee72a22db3a5df680d46de7db79e0c0) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/IScratchieService.java (.../IScratchieService.java) (revision ac33d20fb7883183fe443062a74f163abc98f012) @@ -26,6 +26,7 @@ import java.io.IOException; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.Set; import org.lamsfoundation.lams.events.IEventNotificationService; @@ -449,4 +450,6 @@ /** Get the statistics such as average, max, min for the marks. Used in monitoring */ LeaderResultsDTO getLeaderResultsDTOForLeaders(Long contentId); -} \ No newline at end of file + + Map prepareStudentChoicesData(Scratchie scratchie); +} Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r1268ec552ee72a22db3a5df680d46de7db79e0c0 -rac33d20fb7883183fe443062a74f163abc98f012 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 1268ec552ee72a22db3a5df680d46de7db79e0c0) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision ac33d20fb7883183fe443062a74f163abc98f012) @@ -1926,6 +1926,61 @@ return newDto; } + @Override + public Map prepareStudentChoicesData(Scratchie scratchie) { + Map model = new HashMap<>(); + + Set items = new TreeSet<>(new ScratchieItemComparator()); + items.addAll(scratchie.getScratchieItems()); + model.put("items", items); + + //correct answers row + List correctAnswerLetters = ScratchieServiceImpl.getCorrectAnswerLetters(items); + model.put("correctAnswerLetters", correctAnswerLetters); + + List groupSummaries = getSummaryByTeam(scratchie, items); + for (GroupSummary summary : groupSummaries) { + //prepare OptionDtos to display + int i = 0; + for (ScratchieItemDTO itemDto : summary.getItemDtos()) { + String optionSequence = itemDto.getOptionsSequence(); + String[] optionLetters = optionSequence.split(", "); + + List optionDtos = new LinkedList<>(); + for (int j = 0; j < optionLetters.length; j++) { + String optionLetter = optionLetters[j]; + String correctOptionLetter = correctAnswerLetters.get(i); + + OptionDTO optionDto = new OptionDTO(); + optionDto.setAnswer(optionLetter); + optionDto.setCorrect(correctOptionLetter.equals(optionLetter)); + optionDtos.add(optionDto); + } + + itemDto.setOptionDtos(optionDtos); + i++; + } + + //calculate what is the percentage of first choice events in each session + int numberOfFirstChoiceEvents = 0; + for (ScratchieItemDTO itemDto : summary.getItemDtos()) { + if (itemDto.isUnraveledOnFirstAttempt()) { + numberOfFirstChoiceEvents++; + } + } + summary.setMark(numberOfFirstChoiceEvents); + + // round the percentage cell + String totalPercentage = String.valueOf( + Math.round((items.size() == 0) ? 0 : (double) numberOfFirstChoiceEvents * 100 / items.size())); + summary.setTotalPercentage(totalPercentage); + + } + + model.put("sessionDtos", groupSummaries); + return model; + } + // ***************************************************************************** // private methods // ***************************************************************************** Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java =================================================================== diff -u -re6dc4db4137cfd6b07a4aa79711b9d12b39fb78e -rac33d20fb7883183fe443062a74f163abc98f012 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision e6dc4db4137cfd6b07a4aa79711b9d12b39fb78e) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/MonitoringController.java (.../MonitoringController.java) (revision ac33d20fb7883183fe443062a74f163abc98f012) @@ -27,6 +27,7 @@ import java.util.Date; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.TimeZone; import java.util.TreeSet; @@ -69,6 +70,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; @@ -89,11 +91,11 @@ private IQbService qbService; @RequestMapping("/summary") - private String summary(HttpServletRequest request) { + private String summary(HttpServletRequest request, Model model) { // initialize Session Map SessionMap sessionMap = new SessionMap<>(); request.getSession().setAttribute(sessionMap.getSessionID(), sessionMap); - request.setAttribute(ScratchieConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); + model.addAttribute(ScratchieConstants.ATTR_SESSION_MAP_ID, sessionMap.getSessionID()); Long contentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); List summaryList = scratchieService.getMonitoringSummary(contentId, true); @@ -108,8 +110,8 @@ UserDTO teacher = (UserDTO) ss.getAttribute(AttributeNames.USER); TimeZone teacherTimeZone = teacher.getTimeZone(); Date tzSubmissionDeadline = DateUtil.convertToTimeZoneFromDefault(teacherTimeZone, submissionDeadline); - request.setAttribute(ScratchieConstants.ATTR_SUBMISSION_DEADLINE, tzSubmissionDeadline.getTime()); - request.setAttribute(ScratchieConstants.ATTR_SUBMISSION_DEADLINE_DATESTRING, + model.addAttribute(ScratchieConstants.ATTR_SUBMISSION_DEADLINE, tzSubmissionDeadline.getTime()); + model.addAttribute(ScratchieConstants.ATTR_SUBMISSION_DEADLINE_DATESTRING, DateUtil.convertToStringForJSON(submissionDeadline, request.getLocale())); } @@ -140,6 +142,9 @@ sessionMap.put(ScratchieConstants.ATTR_REFLECTIONS, reflections); } + Map modelAttributes = scratchieService.prepareStudentChoicesData(scratchie); + model.addAllAttributes(modelAttributes); + return "pages/monitoring/monitoring"; } @@ -160,7 +165,8 @@ // escape JS sensitive characters in option descriptions for (GroupSummary summary : summaryList) { for (OptionDTO optionDto : summary.getOptionDtos()) { - String escapedAnswer = StringEscapeUtils.escapeJavaScript(optionDto.getAnswer()).replace("\\r\\n", "
"); + String escapedAnswer = StringEscapeUtils.escapeJavaScript(optionDto.getAnswer()).replace("\\r\\n", + "
"); optionDto.setAnswer(escapedAnswer); } } @@ -215,7 +221,7 @@ */ @RequestMapping(path = "/exportExcel", method = RequestMethod.POST) @ResponseStatus(HttpStatus.OK) - private void exportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { + private void exportExcel(HttpServletRequest request, HttpServletResponse response, Model model) throws IOException { SessionMap sessionMap = getSessionMap(request); Scratchie scratchie = (Scratchie) sessionMap.get(ScratchieConstants.ATTR_SCRATCHIE); Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/TblMonitorController.java =================================================================== diff -u -r1268ec552ee72a22db3a5df680d46de7db79e0c0 -rac33d20fb7883183fe443062a74f163abc98f012 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/TblMonitorController.java (.../TblMonitorController.java) (revision 1268ec552ee72a22db3a5df680d46de7db79e0c0) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/TblMonitorController.java (.../TblMonitorController.java) (revision ac33d20fb7883183fe443062a74f163abc98f012) @@ -29,6 +29,7 @@ import java.util.Comparator; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.TreeSet; @@ -43,14 +44,12 @@ import org.lamsfoundation.lams.tool.scratchie.dto.BurningQuestionDTO; import org.lamsfoundation.lams.tool.scratchie.dto.BurningQuestionItemDTO; import org.lamsfoundation.lams.tool.scratchie.dto.GroupSummary; -import org.lamsfoundation.lams.tool.scratchie.dto.OptionDTO; import org.lamsfoundation.lams.tool.scratchie.dto.ScratchieItemDTO; import org.lamsfoundation.lams.tool.scratchie.model.Scratchie; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieConfigItem; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieItem; import org.lamsfoundation.lams.tool.scratchie.model.ScratchieUser; import org.lamsfoundation.lams.tool.scratchie.service.IScratchieService; -import org.lamsfoundation.lams.tool.scratchie.service.ScratchieServiceImpl; import org.lamsfoundation.lams.tool.scratchie.util.ScratchieItemComparator; import org.lamsfoundation.lams.util.AlphanumComparator; import org.lamsfoundation.lams.util.FileUtil; @@ -61,8 +60,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; @@ -118,60 +119,15 @@ * Shows tra StudentChoices page */ @RequestMapping("/traStudentChoices") - public String traStudentChoices(HttpServletRequest request) throws IOException, ServletException { - long toolContentId = WebUtil.readLongParam(request, AttributeNames.PARAM_TOOL_CONTENT_ID); + public String traStudentChoices(@RequestParam(name = AttributeNames.PARAM_TOOL_CONTENT_ID) long toolContentId, + Model model) throws IOException, ServletException { Scratchie scratchie = scratchieService.getScratchieByContentId(toolContentId); - Set items = new TreeSet<>(new ScratchieItemComparator()); - items.addAll(scratchie.getScratchieItems()); - request.setAttribute("items", items); + Map modelAttributes = scratchieService.prepareStudentChoicesData(scratchie); + model.addAllAttributes(modelAttributes); - //correct answers row - List correctAnswerLetters = ScratchieServiceImpl.getCorrectAnswerLetters(items); - request.setAttribute("correctAnswerLetters", correctAnswerLetters); - - List groupSummaries = scratchieService.getSummaryByTeam(scratchie, items); - for (GroupSummary summary : groupSummaries) { - //prepare OptionDtos to display - int i = 0; - for (ScratchieItemDTO itemDto : summary.getItemDtos()) { - String optionSequence = itemDto.getOptionsSequence(); - String[] optionLetters = optionSequence.split(", "); - - List optionDtos = new LinkedList<>(); - for (int j = 0; j < optionLetters.length; j++) { - String optionLetter = optionLetters[j]; - String correctOptionLetter = correctAnswerLetters.get(i); - - OptionDTO optionDto = new OptionDTO(); - optionDto.setAnswer(optionLetter); - optionDto.setCorrect(correctOptionLetter.equals(optionLetter)); - optionDtos.add(optionDto); - } - - itemDto.setOptionDtos(optionDtos); - i++; - } - - //calculate what is the percentage of first choice events in each session - int numberOfFirstChoiceEvents = 0; - for (ScratchieItemDTO itemDto : summary.getItemDtos()) { - if (itemDto.isUnraveledOnFirstAttempt()) { - numberOfFirstChoiceEvents++; - } - } - summary.setMark(numberOfFirstChoiceEvents); - - // round the percentage cell - String totalPercentage = String.valueOf( - Math.round((items.size() == 0) ? 0 : (double) numberOfFirstChoiceEvents * 100 / items.size())); - summary.setTotalPercentage(totalPercentage); - - } - - request.setAttribute("sessionDtos", groupSummaries); - request.setAttribute(AttributeNames.PARAM_TOOL_CONTENT_ID, toolContentId); - return "pages/tblmonitoring/traStudentChoices"; + model.addAttribute(AttributeNames.PARAM_TOOL_CONTENT_ID, toolContentId); + return "pages/monitoring/studentChoices"; } /** Index: lams_tool_scratchie/web/pages/monitoring/studentChoices.jsp =================================================================== diff -u --- lams_tool_scratchie/web/pages/monitoring/studentChoices.jsp (revision 0) +++ lams_tool_scratchie/web/pages/monitoring/studentChoices.jsp (revision ac33d20fb7883183fe443062a74f163abc98f012) @@ -0,0 +1,252 @@ +<%@ include file="/common/taglibs.jsp"%> +<% pageContext.setAttribute("newLineChar", "\r\n"); %> + + + + + + +
+
+

+ +

+
+
+ + + +
+
+
+ + +
+
+ +
+ + +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + ${i.index + 1} + + + + + % +
+ + + + + ${correctAnswerLetter} +
+ +
+ + ${sessionDto.sessionName} + + + + + successful-response wrong-response"> + + + + + + ${sessionDto.mark} + + % +
+
+
+
+
+
+ + + + + + Index: lams_tool_scratchie/web/pages/monitoring/summary.jsp =================================================================== diff -u -re6dc4db4137cfd6b07a4aa79711b9d12b39fb78e -rac33d20fb7883183fe443062a74f163abc98f012 --- lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision e6dc4db4137cfd6b07a4aa79711b9d12b39fb78e) +++ lams_tool_scratchie/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision ac33d20fb7883183fe443062a74f163abc98f012) @@ -285,6 +285,10 @@
+ + +

+ <%@ include file="studentChoices.jsp"%>
@@ -297,28 +301,15 @@
-
- - - -
- - -

${summaryTitle}

-
- +

+ - ${summary.sessionName} + ${summary.sessionName}
@@ -341,7 +332,7 @@ -
+