Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dokumaranApplicationContext.xml =================================================================== diff -u -r368e60d0fd7df1a3e327670ef9d0f3487803110b -r2509a4b8ae30079b238c0af1c508466517584e3b --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dokumaranApplicationContext.xml (.../dokumaranApplicationContext.xml) (revision 368e60d0fd7df1a3e327670ef9d0f3487803110b) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/dokumaranApplicationContext.xml (.../dokumaranApplicationContext.xml) (revision 2509a4b8ae30079b238c0af1c508466517584e3b) @@ -61,6 +61,9 @@ + + + Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java =================================================================== diff -u -re0cdeed1959c06ed434e7a4abec0aa5722128c8b -r2509a4b8ae30079b238c0af1c508466517584e3b --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision e0cdeed1959c06ed434e7a4abec0aa5722128c8b) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/service/DokumaranService.java (.../DokumaranService.java) (revision 2509a4b8ae30079b238c0af1c508466517584e3b) @@ -43,6 +43,7 @@ import org.lamsfoundation.lams.etherpad.EtherpadException; import org.lamsfoundation.lams.etherpad.service.IEtherpadService; import org.lamsfoundation.lams.etherpad.util.EtherpadUtil; +import org.lamsfoundation.lams.learning.service.ILearnerService; import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; import org.lamsfoundation.lams.learningdesign.service.ImportToolContentException; @@ -71,7 +72,6 @@ import org.lamsfoundation.lams.tool.dokumaran.model.Dokumaran; import org.lamsfoundation.lams.tool.dokumaran.model.DokumaranSession; import org.lamsfoundation.lams.tool.dokumaran.model.DokumaranUser; -import org.lamsfoundation.lams.tool.dokumaran.web.controller.LearningWebsocketServer; import org.lamsfoundation.lams.tool.exception.DataMissingException; import org.lamsfoundation.lams.tool.exception.ToolException; import org.lamsfoundation.lams.tool.service.ILamsToolService; @@ -81,6 +81,7 @@ import org.lamsfoundation.lams.util.JsonUtil; import org.lamsfoundation.lams.util.MessageService; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; import com.fasterxml.jackson.databind.node.ObjectNode; import net.gjerull.etherpad.client.EPLiteClient; @@ -108,6 +109,8 @@ private IUserManagementService userManagementService; + private ILearnerService learnerService; + private IRatingService ratingService; private IExportToolContentService exportContentService; @@ -561,7 +564,7 @@ dokumaran.setGalleryWalkStarted(true); dokumaranDao.saveObject(dokumaran); - LearningWebsocketServer.sendPageRefreshRequest(toolContentId); + sendGalleryWalkRefreshRequest(dokumaran); } @Override @@ -575,9 +578,20 @@ dokumaran.setGalleryWalkFinished(true); dokumaranDao.saveObject(dokumaran); - LearningWebsocketServer.sendPageRefreshRequest(toolContentId); + sendGalleryWalkRefreshRequest(dokumaran); } + private void sendGalleryWalkRefreshRequest(Dokumaran dokumaran) { + ObjectNode jsonCommand = JsonNodeFactory.instance.objectNode(); + jsonCommand.put("hookTrigger", "gallery-walk-refresh-" + dokumaran.getContentId()); + // get all learners in this doku + Set userIds = dokumaranSessionDao.getByContentId(dokumaran.getContentId()).stream() + .flatMap(session -> dokumaranUserDao.getBySessionID(session.getSessionId()).stream()) + .collect(Collectors.mapping(user -> user.getUserId().intValue(), Collectors.toSet())); + + learnerService.createCommandForLearners(dokumaran.getContentId(), userIds, jsonCommand.toString()); + } + // ***************************************************************************** // private methods // ***************************************************************************** @@ -1057,6 +1071,10 @@ this.userManagementService = userManagementService; } + public void setLearnerService(ILearnerService learnerService) { + this.learnerService = learnerService; + } + public void setRatingService(IRatingService ratingService) { this.ratingService = ratingService; } Index: lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningWebsocketServer.java =================================================================== diff -u -re606aaebe2ef85c40a4054ef76abf62c94d224a4 -r2509a4b8ae30079b238c0af1c508466517584e3b --- lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision e606aaebe2ef85c40a4054ef76abf62c94d224a4) +++ lams_tool_doku/src/java/org/lamsfoundation/lams/tool/dokumaran/web/controller/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision 2509a4b8ae30079b238c0af1c508466517584e3b) @@ -184,7 +184,7 @@ * Monitor has launched time limit. All learners will need to refresh the page in order to stop showing them * waitForTimeLimitLaunch page. */ - public static void sendPageRefreshRequest(Long toolContentId) throws IOException { + private static void sendPageRefreshRequest(Long toolContentId) throws IOException { Set toolContentWebsockets = websockets.get(toolContentId); if (toolContentWebsockets == null) { return; Index: lams_tool_doku/web/pages/learning/websocket.jsp =================================================================== diff -u -r1ad946fb218ec5d1bfe16900aa8cf2cdc1a63da7 -r2509a4b8ae30079b238c0af1c508466517584e3b --- lams_tool_doku/web/pages/learning/websocket.jsp (.../websocket.jsp) (revision 1ad946fb218ec5d1bfe16900aa8cf2cdc1a63da7) +++ lams_tool_doku/web/pages/learning/websocket.jsp (.../websocket.jsp) (revision 2509a4b8ae30079b238c0af1c508466517584e3b) @@ -59,4 +59,15 @@ return; } }; + + + $(document).ready(function(){ + // command websocket stuff for refreshing + // trigger is an unique ID of page and action that command websocket code in Page.tag recognises + commandWebsocketHookTrigger = 'gallery-walk-refresh-${sessionMap.toolContentID}'; + // if the trigger is recognised, the following action occurs + commandWebsocketHook = function() { + location.reload(); + }; + }); \ No newline at end of file