Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java =================================================================== diff -u -r18be7421230bdff4abe7dded93fd27c4feadf869 -r10d16b726979dd7b3c41def7038e8958b46b638b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java (.../ScratchieConstants.java) (revision 18be7421230bdff4abe7dded93fd27c4feadf869) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/ScratchieConstants.java (.../ScratchieConstants.java) (revision 10d16b726979dd7b3c41def7038e8958b46b638b) @@ -191,4 +191,9 @@ public static final String ATTR_SHOW_RESULTS = "showResults"; public static final String ATTR_REFERENCES_SEQUENCE_IDS = "sequenceIds"; + + //flux management + public static final String ANSWERS_UPDATED_SINK_NAME = "scratchie learner answers updated"; + + public static final String STUDENT_CHOICES_UPDATE_FLUX_NAME = "scratchie student choices updated"; } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -rf0ff6bc30e8fa7e5d4201b7b9571194845ad3a83 -r10d16b726979dd7b3c41def7038e8958b46b638b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision f0ff6bc30e8fa7e5d4201b7b9571194845ad3a83) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 10d16b726979dd7b3c41def7038e8958b46b638b) @@ -55,6 +55,8 @@ import org.lamsfoundation.lams.confidencelevel.VsaAnswerDTO; import org.lamsfoundation.lams.contentrepository.client.IToolContentHandler; import org.lamsfoundation.lams.events.IEventNotificationService; +import org.lamsfoundation.lams.flux.FluxMap; +import org.lamsfoundation.lams.flux.FluxRegistry; import org.lamsfoundation.lams.learning.service.ILearnerService; import org.lamsfoundation.lams.learningdesign.ToolActivity; import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; @@ -175,6 +177,12 @@ private ScratchieOutputFactory scratchieOutputFactory; + public ScratchieServiceImpl() { + FluxRegistry.initFluxMap(ScratchieConstants.ANSWERS_UPDATED_SINK_NAME, + ScratchieConstants.ANSWERS_UPDATED_SINK_NAME, null, toolContentId -> "doRefresh", + FluxMap.SHORT_THROTTLE, FluxMap.STANDARD_TIMEOUT); + } + // ******************************************************************************* // Service method // ******************************************************************************* @@ -464,8 +472,11 @@ log.setQbToolQuestion(qbToolQuestion); log.setAccessDate(new Timestamp(new Date().getTime())); scratchieAnswerVisitDao.saveObject(log); + // need to flush so subscribers to sink see new answers in DB + scratchieAnswerVisitDao.flush(); recalculateMarkForSession(sessionId, false); + FluxRegistry.emit(ScratchieConstants.ANSWERS_UPDATED_SINK_NAME, log.getQbToolQuestion().getToolContentId()); } } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/TblMonitorController.java =================================================================== diff -u -r1a24cfe9b9193edfa8bb951c538a9520dd319f42 -r10d16b726979dd7b3c41def7038e8958b46b638b --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/TblMonitorController.java (.../TblMonitorController.java) (revision 1a24cfe9b9193edfa8bb951c538a9520dd319f42) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/web/controller/TblMonitorController.java (.../TblMonitorController.java) (revision 10d16b726979dd7b3c41def7038e8958b46b638b) @@ -37,6 +37,7 @@ import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; +import org.lamsfoundation.lams.flux.FluxRegistry; import org.lamsfoundation.lams.tool.scratchie.ScratchieConstants; import org.lamsfoundation.lams.tool.scratchie.dto.BurningQuestionItemDTO; import org.lamsfoundation.lams.tool.scratchie.dto.GroupSummary; @@ -54,6 +55,7 @@ import org.lamsfoundation.lams.web.util.AttributeNames; import org.springframework.beans.factory.annotation.Autowired; 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; @@ -62,9 +64,12 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; +import reactor.core.publisher.Flux; + @Controller @RequestMapping("/tblmonitoring") public class TblMonitorController { @@ -123,11 +128,28 @@ model.addAttribute(AttributeNames.PARAM_TOOL_CONTENT_ID, toolContentId); model.addAttribute("scratchie", scratchie); - model.addAttribute("isTbl", true); return "pages/monitoring/studentChoices5"; } + @RequestMapping("/traStudentChoicesTable") + public String traStudentChoicesTable(@RequestParam(name = AttributeNames.PARAM_TOOL_CONTENT_ID) long toolContentId, + Model model) throws IOException, ServletException { + Scratchie scratchie = scratchieService.getScratchieByContentId(toolContentId); + + Map modelAttributes = scratchieService.prepareStudentChoicesData(scratchie); + model.addAllAttributes(modelAttributes); + + return "pages/monitoring/studentChoicesTable"; + } + + @RequestMapping(path = "/traStudentChoicesFlux", method = RequestMethod.GET, produces = MediaType.TEXT_EVENT_STREAM_VALUE) + @ResponseBody + public Flux getTraStudentChoicesFlux(@RequestParam long toolContentId) + throws JsonProcessingException, IOException { + return FluxRegistry.get(ScratchieConstants.ANSWERS_UPDATED_SINK_NAME, toolContentId); + } + /** * Exports tool results into excel. * Index: lams_tool_scratchie/web/WEB-INF/spring-servlet.xml =================================================================== diff -u -r7ff6d4b34cd71ac45741cb7c8d0c3ef6909eadf4 -r10d16b726979dd7b3c41def7038e8958b46b638b --- lams_tool_scratchie/web/WEB-INF/spring-servlet.xml (.../spring-servlet.xml) (revision 7ff6d4b34cd71ac45741cb7c8d0c3ef6909eadf4) +++ lams_tool_scratchie/web/WEB-INF/spring-servlet.xml (.../spring-servlet.xml) (revision 10d16b726979dd7b3c41def7038e8958b46b638b) @@ -11,10 +11,11 @@ http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> - + + - \ No newline at end of file Index: lams_tool_scratchie/web/WEB-INF/web.xml =================================================================== diff -u -r9986a8084b318ccc9c025ec56407dc09a705dd60 -r10d16b726979dd7b3c41def7038e8958b46b638b --- lams_tool_scratchie/web/WEB-INF/web.xml (.../web.xml) (revision 9986a8084b318ccc9c025ec56407dc09a705dd60) +++ lams_tool_scratchie/web/WEB-INF/web.xml (.../web.xml) (revision 10d16b726979dd7b3c41def7038e8958b46b638b) @@ -28,6 +28,7 @@ org.springframework.orm.hibernate5.support.OpenSessionInViewFilter + true sessionFactoryBeanName coreSessionFactory @@ -39,12 +40,14 @@ org.lamsfoundation.lams.web.session.SystemSessionFilter + true LocaleFilter org.lamsfoundation.lams.web.filter.LocaleFilter + true encoding UTF-8 @@ -53,29 +56,39 @@ CSRFGuard org.owasp.csrfguard.CsrfGuardFilter + true hibernateFilter /* + REQUEST + ASYNC SystemSessionFilter /* + REQUEST + ASYNC LocaleFilter /* + REQUEST + ASYNC CSRFGuard *.do + REQUEST + ASYNC populateMarks org.lamsfoundation.lams.tool.scratchie.web.servlet.PopulateMarksServlet + true @@ -84,6 +97,7 @@ org.springframework.web.servlet.DispatcherServlet 1 + true @@ -98,6 +112,7 @@ false 1 + true @@ -111,6 +126,7 @@ scratchieToolContentHandler 3 + true Index: lams_tool_scratchie/web/pages/monitoring/studentChoices5.jsp =================================================================== diff -u -re63f171f9fe9c08cdf47514249ecb9757419193c -r10d16b726979dd7b3c41def7038e8958b46b638b --- lams_tool_scratchie/web/pages/monitoring/studentChoices5.jsp (.../studentChoices5.jsp) (revision e63f171f9fe9c08cdf47514249ecb9757419193c) +++ lams_tool_scratchie/web/pages/monitoring/studentChoices5.jsp (.../studentChoices5.jsp) (revision 10d16b726979dd7b3c41def7038e8958b46b638b) @@ -57,28 +57,30 @@ -
+ - $(document).ready(function(){ - $('#time-limit-panel-placeholder').load('${timeLimitPanelUrl}'); - }); - - +

@@ -112,8 +114,7 @@

- - +
@@ -130,16 +131,14 @@ - - -   - "> - - - % - - + +   + "> + + + % + @@ -158,157 +157,18 @@ - - - - + + - - - - - - - - - - - - - - - - ${sessionDto.sessionName} - - - - - - - - ${sessionDto.sessionName} - - - - - - - - - - - - - - - - - - - successful-response wrong-response"> - - - - - - - - - - - - - - - - - bg-success - bg-danger text-white - bg-warning - - - - - ${sessionDto.mark} - - - - % - - - - - - - - - - -   - "> - - - - - bg-success - bg-danger text-white - bg-warning - - - - - ${item.correctOnFirstAttemptCount} - - - - - - - - - bg-success - bg-danger text-white - bg-warning - - - -   - "> - - - - - - % - - - - bg-success - bg-danger text-white - bg-warning - - - - - % - - - - - -  %  - "> - - - + +
- +