Index: lams_learning/src/java/org/lamsfoundation/lams/learning/presence/PresenceWebsocketServer.java =================================================================== diff -u -ra2ea0c07d7661bc6af2037debc499a23a412ee1e -ra8239ea3712e6f344d646ef625ef228d49f266c9 --- lams_learning/src/java/org/lamsfoundation/lams/learning/presence/PresenceWebsocketServer.java (.../PresenceWebsocketServer.java) (revision a2ea0c07d7661bc6af2037debc499a23a412ee1e) +++ lams_learning/src/java/org/lamsfoundation/lams/learning/presence/PresenceWebsocketServer.java (.../PresenceWebsocketServer.java) (revision a8239ea3712e6f344d646ef625ef228d49f266c9) @@ -63,7 +63,7 @@ // how ofter the thread runs private static final long CHECK_INTERVAL = 2000; // mapping lessonId -> timestamp when the check was last performed, so the thread does not run too often - private final Map lastSendTimes = new TreeMap(); + private static final Map lastSendTimes = new TreeMap<>(); @Override public void run() { @@ -80,7 +80,7 @@ Long lastSendTime = lastSendTimes.get(lessonId); if ((lastSendTime == null) || ((System.currentTimeMillis() - lastSendTime) >= SendWorker.CHECK_INTERVAL)) { - send(lessonId, null); + SendWorker.send(lessonId, null); } // if all learners left the chat, remove the obsolete mapping @@ -109,7 +109,7 @@ /** * Feeds opened websockets with messages and roster. */ - private void send(Long lessonId, String nickName) { + private static void send(Long lessonId, String nickName) { Long lastSendTime = lastSendTimes.get(lessonId); // fetch messages a bit earlier than the last run, in case there was a lag somewhere // JS code will filter out duplicates @@ -163,7 +163,7 @@ private long lastDBCheckTime = 0; // Learners who are currently active - private final Set activeUsers = new TreeSet(); + private final Set activeUsers = new TreeSet<>(); private Roster(Long lessonId, boolean imEnabled) { this.lessonId = lessonId; @@ -174,7 +174,7 @@ * Checks which Learners */ private JSONArray getRosterJSON() { - Set localActiveUsers = new TreeSet(); + Set localActiveUsers = new TreeSet<>(); Set sessionWebsockets = PresenceWebsocketServer.websockets.get(lessonId); // find out who is active locally for (Websocket websocket : sessionWebsockets) { @@ -211,8 +211,8 @@ private static IPresenceChatService presenceChatService; private static final SendWorker sendWorker = new SendWorker(); - private static final Map rosters = new ConcurrentHashMap(); - private static final Map> websockets = new ConcurrentHashMap>(); + private static final Map rosters = new ConcurrentHashMap<>(); + private static final Map> websockets = new ConcurrentHashMap<>(); static { // run the singleton thread @@ -245,7 +245,7 @@ try { // websocket communication bypasses standard HTTP filters, so Hibernate session needs to be initialised manually HibernateSessionManager.openSession(); - PresenceWebsocketServer.sendWorker.send(lessonId, websocket.nickName); + SendWorker.send(lessonId, websocket.nickName); } finally { HibernateSessionManager.closeSession(); } @@ -407,7 +407,7 @@ return 0; } // there can be few websockets (browser windows) for a single learner - Set activeNicknames = new TreeSet(); + Set activeNicknames = new TreeSet<>(); for (Websocket websocket : lessonWebsockets) { activeNicknames.add(websocket.nickName); } Index: lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/LearningWebsocketServer.java =================================================================== diff -u -r7cb18d1521c69062337439737a624a60a27013d4 -ra8239ea3712e6f344d646ef625ef228d49f266c9 --- lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision 7cb18d1521c69062337439737a624a60a27013d4) +++ lams_tool_chat/src/java/org/lamsfoundation/lams/tool/chat/web/actions/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision a8239ea3712e6f344d646ef625ef228d49f266c9) @@ -69,7 +69,7 @@ // how ofter the thread runs private static final long CHECK_INTERVAL = 2000; // mapping toolSessionId -> timestamp when the check was last performed, so the thread does not run too often - private final Map lastSendTimes = new TreeMap(); + private static final Map lastSendTimes = new TreeMap<>(); @Override public void run() { @@ -86,7 +86,7 @@ Long lastSendTime = lastSendTimes.get(toolSessionId); if ((lastSendTime == null) || ((System.currentTimeMillis() - lastSendTime) >= SendWorker.CHECK_INTERVAL)) { - send(toolSessionId); + SendWorker.send(toolSessionId); } // if all users left the chat, remove the obsolete mapping Set sessionWebsockets = entry.getValue(); @@ -114,7 +114,7 @@ /** * Feeds opened websockets with messages and roster. */ - private void send(Long toolSessionId) { + private static void send(Long toolSessionId) { // update the timestamp lastSendTimes.put(toolSessionId, System.currentTimeMillis()); @@ -175,7 +175,7 @@ private long lastDBCheckTime = 0; // Learners who are currently active - private final Set activeUsers = new TreeSet(); + private final Set activeUsers = new TreeSet<>(); private Roster(Long toolSessionId) { this.toolSessionId = toolSessionId; @@ -185,7 +185,7 @@ * Checks which Learners */ private JSONArray getRosterJSON() { - Set localActiveUsers = new TreeSet(); + Set localActiveUsers = new TreeSet<>(); Set sessionWebsockets = LearningWebsocketServer.websockets.get(toolSessionId); // find out who is active locally for (Websocket websocket : sessionWebsockets) { @@ -222,8 +222,8 @@ private static IChatService chatService; private static final SendWorker sendWorker = new SendWorker(); - private static final Map rosters = new ConcurrentHashMap(); - private static final Map> websockets = new ConcurrentHashMap>(); + private static final Map rosters = new ConcurrentHashMap<>(); + private static final Map> websockets = new ConcurrentHashMap<>(); static { // run the singleton thread @@ -255,7 +255,7 @@ finalSessionWebsockets.add(websocket); // update the chat window immediatelly - LearningWebsocketServer.sendWorker.send(toolSessionId); + SendWorker.send(toolSessionId); if (LearningWebsocketServer.log.isDebugEnabled()) { LearningWebsocketServer.log Index: lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningWebsocketServer.java =================================================================== diff -u -rf06669784fcf047185a7f9c48587b3096474aa2a -ra8239ea3712e6f344d646ef625ef228d49f266c9 --- lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision f06669784fcf047185a7f9c48587b3096474aa2a) +++ lams_tool_scribe/src/java/org/lamsfoundation/lams/tool/scribe/web/actions/LearningWebsocketServer.java (.../LearningWebsocketServer.java) (revision a8239ea3712e6f344d646ef625ef228d49f266c9) @@ -45,7 +45,7 @@ private static class ScribeSessionCache { private int numberOfVotes = 0; private int numberOfLearners = 0; - private final Map reports = new TreeMap(); + private final Map reports = new TreeMap<>(); } /** @@ -79,16 +79,11 @@ ScribeSession scribeSession = LearningWebsocketServer.getScribeService() .getSessionBySessionId(toolSessionId); if (scribeSession.isForceComplete()) { - sendCloseRequest(toolSessionId); + LearningWebsocketServer.sendCloseRequest(toolSessionId); continue; } - try { - send(toolSessionId, null); - } catch (JSONException e) { - LearningWebsocketServer.log.error("Error while building Scribe report JSON", e); - } - + SendWorker.send(toolSessionId, null); } } catch (Exception e) { // error caught, but carry on @@ -109,7 +104,7 @@ * Feeds websockets with reports and votes. */ @SuppressWarnings("unchecked") - private void send(Long toolSessionId, Session newWebsocket) throws JSONException, IOException { + private static void send(Long toolSessionId, Session newWebsocket) throws JSONException, IOException { JSONObject responseJSON = new JSONObject(); ScribeSessionCache sessionCache = LearningWebsocketServer.cache.get(toolSessionId); if (sessionCache == null) { @@ -129,7 +124,7 @@ } // collect users who agreed on the report - Set learnersApproved = new TreeSet(); + Set learnersApproved = new TreeSet<>(); for (ScribeUser user : learners) { if (user.isReportApproved()) { learnersApproved.add(user.getLoginName()); @@ -199,8 +194,8 @@ private static final SendWorker sendWorker = new SendWorker(); // maps toolSessionId -> cached session data - private static final Map cache = new ConcurrentHashMap(); - private static final Map> websockets = new ConcurrentHashMap>(); + private static final Map cache = new ConcurrentHashMap<>(); + private static final Map> websockets = new ConcurrentHashMap<>(); static { // run the singleton thread @@ -229,7 +224,7 @@ new Thread(() -> { try { HibernateSessionManager.openSession(); - LearningWebsocketServer.sendWorker.send(toolSessionId, websocket); + SendWorker.send(toolSessionId, websocket); } catch (Exception e) { log.error("Error while sending messages", e); } finally {