This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch OPENMEETINGS-1649-kurento
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/OPENMEETINGS-1649-kurento by 
this push:
     new 5afa80f  [OPENMEETINGS-1649] JS errors during broadcast are fixed
5afa80f is described below

commit 5afa80f1e0d6007f7883185f166fde0a2dbfb31e
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Sun Mar 4 01:30:01 2018 +0700

    [OPENMEETINGS-1649] JS errors during broadcast are fixed
---
 .../org/apache/openmeetings/core/remote/KRoom.java | 35 +++++--------------
 .../org/apache/openmeetings/core/remote/KUser.java | 15 ++++----
 .../openmeetings/core/remote/KurentoHandler.java   | 16 +++------
 .../apache/openmeetings/web/room/RoomPanel.java    | 35 ++++++++++---------
 .../apache/openmeetings/web/room/video-manager.js  | 40 ++++++++++++++--------
 .../openmeetings/web/room/wb/interview-area.js     |  5 ++-
 .../org/apache/openmeetings/web/room/wb/wb-all.js  | 13 +++++++
 .../org/apache/openmeetings/web/room/wb/wb-area.js | 17 ++-------
 .../apache/openmeetings/web/user/chat/Chat.java    | 10 ++++--
 .../openmeetings/web/user/chat/ChatForm.java       |  8 +++--
 .../openmeetings/web/user/chat/ChatToolbar.java    | 13 ++++---
 11 files changed, 106 insertions(+), 101 deletions(-)

diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
index 97671d9..2ed5335 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KRoom.java
@@ -33,7 +33,6 @@ import org.kurento.client.MediaPipeline;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.github.openjson.JSONArray;
 import com.github.openjson.JSONObject;
 
 /**
@@ -41,7 +40,7 @@ import com.github.openjson.JSONObject;
  * @since 4.3.1
  */
 public class KRoom implements Closeable {
-       private final Logger log = LoggerFactory.getLogger(KRoom.class);
+       private final static Logger log = LoggerFactory.getLogger(KRoom.class);
 
        private final Map<String, KUser> participants = new 
ConcurrentHashMap<>();
        private final MediaPipeline pipeline;
@@ -64,11 +63,11 @@ public class KRoom implements Closeable {
 
        public KUser join(final KurentoHandler h, String uid) {
                log.info("ROOM {}: adding participant {}", roomId, uid);
-               final KUser participant = new KUser(h, uid, this.roomId, 
this.pipeline);
-               joinRoom(h, participant);
-               participants.put(participant.getUid(), participant);
-               sendParticipantNames(h, participant);
-               return participant;
+               final KUser u = new KUser(h, uid, this.roomId, this.pipeline);
+               joinRoom(h, u);
+               participants.put(u.getUid(), u);
+               broadcast(h, u);
+               return u;
        }
 
        public void leave(final KurentoHandler h, KUser user) {
@@ -89,7 +88,6 @@ public class KRoom implements Closeable {
                        h.sendClient(participant.getUid(), msg);
                        participantsList.add(participant.getUid());
                }
-
                return participantsList;
        }
 
@@ -111,21 +109,12 @@ public class KRoom implements Closeable {
                        log.debug("ROOM {}: The users {} could not be notified 
that {} left the room", this.roomId,
                                        unnotifiedParticipants, name);
                }
-
        }
 
-       public void sendParticipantNames(final KurentoHandler h, KUser user) {
-               final JSONArray participantsArray = new JSONArray();
-               for (final KUser participant : this.getParticipants()) {
-                       if (!participant.equals(user)) {
-                               participantsArray.put(participant.getUid());
-                       }
-               }
-
+       private static void broadcast(final KurentoHandler h, KUser user) {
                final JSONObject msg = newKurentoMsg();
-               msg.put("id", "existingParticipants");
-               msg.put("data", participantsArray);
-               log.debug("PARTICIPANT {}: sending a list of {} participants", 
user.getUid(), participantsArray.length());
+               msg.put("id", "broadcast");
+               log.debug("User {}: has started broadcast", user.getUid());
                h.sendClient(user.getUid(), msg);
        }
 
@@ -133,10 +122,6 @@ public class KRoom implements Closeable {
                return participants.values();
        }
 
-       public KUser getParticipant(String name) {
-               return participants.get(name);
-       }
-
        @Override
        public void close() {
                for (final KUser user : participants.values()) {
@@ -157,8 +142,6 @@ public class KRoom implements Closeable {
                                log.warn("PARTICIPANT {}: Could not release 
Pipeline", KRoom.this.roomId);
                        }
                });
-
                log.debug("Room {} closed", this.roomId);
        }
-
 }
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KUser.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KUser.java
index 237cc25..85b4e95 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KUser.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KUser.java
@@ -41,19 +41,15 @@ import com.github.openjson.JSONObject;
  * @since 4.3.1
  */
 public class KUser implements Closeable {
-
        private static final Logger log = LoggerFactory.getLogger(KUser.class);
 
        private final String uid;
-
        private final MediaPipeline pipeline;
-
        private final Long roomId;
        private final WebRtcEndpoint outgoingMedia;
        private final ConcurrentMap<String, WebRtcEndpoint> incomingMedia = new 
ConcurrentHashMap<>();
 
        public KUser(final KurentoHandler h, final String uid, Long roomId, 
MediaPipeline pipeline) {
-
                this.pipeline = pipeline;
                this.uid = uid;
                this.roomId = roomId;
@@ -66,7 +62,7 @@ public class KUser implements Closeable {
                                JSONObject response = newKurentoMsg();
                                response.put("id", "iceCandidate");
                                response.put("uid", uid);
-                               response.put("candidate", 
JsonUtils.toJsonObject(event.getCandidate()));
+                               response.put("candidate", 
convert(JsonUtils.toJsonObject(event.getCandidate())));
                                h.sendClient(uid, response);
                        }
                });
@@ -96,7 +92,7 @@ public class KUser implements Closeable {
 
                final String ipSdpAnswer = this.getEndpointForUser(h, 
sender).processOffer(sdpOffer);
                final JSONObject scParams = newKurentoMsg();
-               scParams.put("id", "receiveVideoAnswer");
+               scParams.put("id", "videoResponse");
                scParams.put("uid", sender.getUid());
                scParams.put("sdpAnswer", ipSdpAnswer);
 
@@ -126,7 +122,7 @@ public class KUser implements Closeable {
                                        JSONObject response = newKurentoMsg();
                                        response.put("id", "iceCandidate");
                                        response.put("uid", sender.getUid());
-                                       response.put("candidate", 
JsonUtils.toJsonObject(event.getCandidate()));
+                                       response.put("candidate", 
convert(JsonUtils.toJsonObject(event.getCandidate())));
                                        h.sendClient(uid, response);
                                }
                        });
@@ -212,6 +208,10 @@ public class KUser implements Closeable {
                }
        }
 
+       private static JSONObject convert(com.google.gson.JsonObject o) {
+               return new JSONObject(o.toString());
+       }
+
        /*
         * (non-Javadoc)
         *
@@ -219,7 +219,6 @@ public class KUser implements Closeable {
         */
        @Override
        public boolean equals(Object obj) {
-
                if (this == obj) {
                        return true;
                }
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
index d6c2f2f..0ab11d6 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/KurentoHandler.java
@@ -38,6 +38,8 @@ public class KurentoHandler {
        private final static Logger log = 
LoggerFactory.getLogger(KurentoHandler.class);
        public final static String KURENTO_TYPE = "kurento";
        private final KurentoClient client = KurentoClient.create();
+       private final Map<Long, KRoom> rooms = new ConcurrentHashMap<>();
+       private final Map<String, KUser> usersByUid = new ConcurrentHashMap<>();
 
        @Autowired
        private IClientManager clientManager;
@@ -82,8 +84,9 @@ public class KurentoHandler {
                log.info("PARTICIPANT {}: trying to join room {}", c, 
c.getRoomId());
 
                KRoom room = getRoom(c.getRoomId());
+               clientManager.update(c.addStream(c.getUid()));
                final KUser user = room.join(this, c.getUid());
-               register(user);
+               usersByUid.put(user.getUid(), user);
        }
 
        void sendClient(String uid, JSONObject msg) {
@@ -98,8 +101,6 @@ public class KurentoHandler {
                }
        }
 
-       private final Map<Long, KRoom> rooms = new ConcurrentHashMap<>();
-
        /**
         * Looks for a room in the active room list.
         *
@@ -113,7 +114,7 @@ public class KurentoHandler {
                KRoom room = rooms.get(roomId);
 
                if (room == null) {
-                       log.debug("Room {} not existent. Will create now!", 
roomId);
+                       log.debug("Room {} does not exist. Will create now!", 
roomId);
                        room = new KRoom(roomId, client.createMediaPipeline());
                        rooms.put(roomId, room);
                }
@@ -133,13 +134,6 @@ public class KurentoHandler {
                log.info("Room {} removed and closed", room.getRoomId());
        }
 
-
-       private final Map<String, KUser> usersByUid = new ConcurrentHashMap<>();
-
-       public void register(KUser user) {
-               usersByUid.put(user.getUid(), user);
-       }
-
        public KUser getByUid(String uid) {
                return usersByUid.get(uid);
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index fb3d63a..f5076bb 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -86,6 +86,7 @@ import 
org.apache.wicket.protocol.ws.api.BaseWebSocketBehavior;
 import org.apache.wicket.protocol.ws.api.event.WebSocketPushPayload;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.apache.wicket.request.resource.ResourceStreamResource;
+import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.apache.wicket.util.resource.AbstractResourceStream;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.ResourceStreamNotFoundException;
@@ -151,7 +152,7 @@ public class RoomPanel extends BasePanel {
                                sidebar.setFilesActive(target);
                        }
                        if (Room.Type.presentation != r.getType()) {
-                               List<Client> mods = 
getBean(ClientManager.class).listByRoom(r.getId(), c -> 
c.hasRight(Room.Right.moderator));
+                               List<Client> mods = cm.listByRoom(r.getId(), c 
-> c.hasRight(Room.Right.moderator));
                                if (mods.isEmpty()) {
                                        waitApplyModeration.open(target);
                                }
@@ -163,7 +164,7 @@ public class RoomPanel extends BasePanel {
                        StringBuilder sb = new StringBuilder();
                        boolean hasStreams = false;
                        Client _c = getClient();
-                       for (Client c: 
getBean(ClientManager.class).listByRoom(getRoom().getId())) {
+                       for (Client c: cm.listByRoom(getRoom().getId())) {
                                boolean self = _c.getUid().equals(c.getUid());
                                for (String uid : c.getStreams()) {
                                        JSONObject jo = videoJson(c, self, 
c.getSid(), getBean(StreamClientManager.class), uid);
@@ -223,6 +224,9 @@ public class RoomPanel extends BasePanel {
        };
        Component eventDetail = new 
WebMarkupContainer(EVENT_DETAILS_ID).setVisible(false);
 
+       @SpringBean
+       private ClientManager cm;
+
        public RoomPanel(String id, Room r) {
                super(id);
                this.r = r;
@@ -239,7 +243,6 @@ public class RoomPanel extends BasePanel {
        protected void onInitialize() {
                super.onInitialize();
                //let's refresh user in client
-               ClientManager cm = getBean(ClientManager.class);
                cm.update(getClient().updateUser(getBean(UserDao.class)));
                Component accessDenied = new 
WebMarkupContainer(ACCESS_DENIED_ID).setVisible(false);
 
@@ -399,7 +402,6 @@ public class RoomPanel extends BasePanel {
                        if (wsEvent.getMessage() instanceof RoomMessage) {
                                RoomMessage m = 
(RoomMessage)wsEvent.getMessage();
                                IPartialPageRequestHandler handler = 
wsEvent.getHandler();
-                               ClientManager cm = getBean(ClientManager.class);
                                switch (m.getType()) {
                                        case pollCreated:
                                                menu.updatePoll(handler, 
m.getUserId());
@@ -642,7 +644,7 @@ public class RoomPanel extends BasePanel {
                if (interview && _c.hasRight(Right.moderator)) {
                        if (recordingUser == null) {
                                boolean hasStreams = false;
-                               for (Client cl : 
getBean(ClientManager.class).listByRoom(r.getId())) {
+                               for (Client cl : cm.listByRoom(r.getId())) {
                                        if (!cl.getStreams().isEmpty()) {
                                                hasStreams = true;
                                                break;
@@ -661,7 +663,6 @@ public class RoomPanel extends BasePanel {
                if (room.isVisible()) {
                        //We are setting initial rights here
                        Client c = getClient();
-                       ClientManager cm = getBean(ClientManager.class);
                        cm.addToRoom(c.setRoom(getRoom()));
                        SOAPLogin soap = WebSession.get().getSoapLogin();
                        if (soap != null && soap.isModerator()) {
@@ -677,12 +678,16 @@ public class RoomPanel extends BasePanel {
                }
        }
 
-       public static boolean isModerator(long userId, long roomId) {
-               return hasRight(userId, roomId, Right.moderator);
+       public boolean isModerator(long userId, long roomId) {
+               return isModerator(cm, userId, roomId);
+       }
+
+       public static boolean isModerator(ClientManager cm, long userId, long 
roomId) {
+               return hasRight(cm, userId, roomId, Right.moderator);
        }
 
-       public static boolean hasRight(long userId, long roomId, Right r) {
-               for (Client c : 
getBean(ClientManager.class).listByRoom(roomId)) {
+       public static boolean hasRight(ClientManager cm, long userId, long 
roomId, Right r) {
+               for (Client c : cm.listByRoom(roomId)) {
                        if (c.getUserId().equals(userId) && c.hasRight(r)) {
                                return true;
                        }
@@ -725,7 +730,7 @@ public class RoomPanel extends BasePanel {
                        getMainPanel().getChat().toggle(handler, true);
                }
                handler.appendJavaScript("if (typeof(Room) !== 'undefined') { 
Room.unload(); }");
-               getBean(ClientManager.class).exitRoom(getClient());
+               cm.exitRoom(getClient());
                getMainPanel().getChat().roomExit(r, handler);
        }
 
@@ -741,7 +746,6 @@ public class RoomPanel extends BasePanel {
 
        public void requestRight(Right right, IPartialPageRequestHandler 
handler) {
                RoomMessage.Type reqType = null;
-               ClientManager cm = getBean(ClientManager.class);
                List<Client> mods = cm.listByRoom(r.getId(), c -> 
c.hasRight(Room.Right.moderator));
                if (mods.isEmpty()) {
                        if (r.isModerated()) {
@@ -750,7 +754,7 @@ public class RoomPanel extends BasePanel {
                                return;
                        } else {
                                // we found no-one we can ask, allow right
-                               
broadcast(getBean(ClientManager.class).update(getClient().allow(right)));
+                               broadcast(cm.update(getClient().allow(right)));
                        }
                }
                // ask
@@ -791,8 +795,7 @@ public class RoomPanel extends BasePanel {
        }
 
        public void allowRight(Client client, Right... rights) {
-               client.allow(rights);
-               getBean(ClientManager.class).update(client);
+               cm.update(client.allow(rights));
                broadcast(client);
        }
 
@@ -806,7 +809,7 @@ public class RoomPanel extends BasePanel {
                if (client.hasActivity(Client.Activity.broadcastV) && 
!client.hasRight(Right.video)) {
                        client.remove(Client.Activity.broadcastV);
                }
-               getBean(ClientManager.class).update(client);
+               cm.update(client);
                broadcast(client);
        }
 
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video-manager.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video-manager.js
index fc09c06..ed9ea1a 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video-manager.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/video-manager.js
@@ -8,13 +8,18 @@ var VideoManager = (function() {
                receiveVideo(request.uid);
        }
 
-       function receiveVideoResponse(result) {
-               participants[result.uid].rtcPeer.processAnswer 
(result.sdpAnswer, function (error) {
-                       if (error) return console.error (error);
+       function onVideoResponse(m) {
+               const w = $('#' + VideoUtil.getVid(m.uid))
+                       , v = w.data()
+
+               v.getPeer().processAnswer(m.sdpAnswer, function (error) {
+                       if (error) {
+                               return console.error(error);
+                       }
                });
        }
 
-       function onExistingParticipants(msg) {
+       function onBroadcast(msg) {
                const uid = Room.getOptions().uid;
                const w = $('#' + VideoUtil.getVid(uid))
                        , v = w.data()
@@ -44,7 +49,7 @@ var VideoManager = (function() {
                                }
                                
this.generateOffer(v.offerToReceiveVideo.bind(v));
                        }));
-               msg.data.forEach(receiveVideo);
+               // TODO FIXME msg.data.forEach(receiveVideo);
        }
 
        function leaveRoom() {
@@ -98,8 +103,8 @@ var VideoManager = (function() {
                                console.info('Received message: ' + m);
 
                                switch (m.id) {
-                                       case 'existingParticipants':
-                                               onExistingParticipants(m);
+                                       case 'broadcast':
+                                               onBroadcast(m);
                                                break;
                                        case 'newParticipantArrived':
                                                onNewParticipant(m);
@@ -107,16 +112,21 @@ var VideoManager = (function() {
                                        case 'participantLeft':
                                                onParticipantLeft(m);
                                                break;
-                                       case 'receiveVideoAnswer':
-                                               receiveVideoResponse(m);
+                                       case 'videoResponse':
+                                               onVideoResponse(m);
                                                break;
                                        case 'iceCandidate':
-                                               
participants[m.uid].rtcPeer.addIceCandidate(m.candidate, function (error) {
-                                                       if (error) {
-                                                               
console.error("Error adding candidate: " + error);
-                                                               return;
-                                                       }
-                                               });
+                                               {
+                                                       const w = $('#' + 
VideoUtil.getVid(m.uid))
+                                                               , v = w.data()
+
+                                                       
v.getPeer().addIceCandidate(m.candidate, function (error) {
+                                                               if (error) {
+                                                                       
console.error("Error adding candidate: " + error);
+                                                                       return;
+                                                               }
+                                                       });
+                                               }
                                                break;
                                        default:
                                                console.error('Unrecognized 
message', m);
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/interview-area.js
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/interview-area.js
index ad63f30..b7f7881 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/interview-area.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/interview-area.js
@@ -5,6 +5,7 @@ var InterviewWbArea = function() {
                , _inited = false, recStart, recStop;
 
        function _init() {
+               Wicket.Event.subscribe("/websocket/message", wbWsHandler);
                container = $(".room.wb.area");
                area = container.find(".wb-area");
                btns = $('.pod-row .pod-container .pod a.choose-btn');
@@ -79,7 +80,9 @@ var InterviewWbArea = function() {
        }
 
        self.init = _init;
-       self.destroy = function() {};
+       self.destroy = function() {
+               Wicket.Event.unsubscribe("/websocket/message", wbWsHandler);
+       };
        self.setRole = _setRole;
        self.resize = _resize;
        self.setRecStartEnabled = _setRecStartEnabled;
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-all.js 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-all.js
index 923d7ad..0764189 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-all.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-all.js
@@ -1,2 +1,15 @@
 /* Licensed under the Apache License, Version 2.0 (the "License") 
http://www.apache.org/licenses/LICENSE-2.0 */
 var NONE = 'none';
+function wbWsHandler(jqEvent, msg) {
+       try {
+               if (msg instanceof Blob) {
+                       return; //ping
+               }
+               const m = jQuery.parseJSON(msg);
+               if (m && 'wb' === m.type && typeof(WbArea) !== 'undefined' && 
!!m.func) {
+                       WbArea[m.func](m.param);
+               }
+       } catch (err) {
+               //no-op
+       }
+}
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-area.js 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-area.js
index 4539086..dff9e3a 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-area.js
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb-area.js
@@ -153,6 +153,7 @@ var DrawWbArea = function() {
                });
        }
        self.init = function() {
+               Wicket.Event.subscribe("/websocket/message", wbWsHandler);
                container = $('.room.wb.area');
                tabs = container.find('.tabs');
                if (tabs.length === 0) return;
@@ -184,6 +185,7 @@ var DrawWbArea = function() {
        };
        self.destroy = function() {
                self.removeDeleteHandler();
+               Wicket.Event.unsubscribe("/websocket/message", wbWsHandler);
        };
        self.create = function(obj) {
                if (!_inited) return;
@@ -338,18 +340,3 @@ var DrawWbArea = function() {
        };
        return self;
 };
-$(function() {
-       Wicket.Event.subscribe("/websocket/message", function(jqEvent, msg) {
-               try {
-                       if (msg instanceof Blob) {
-                               return; //ping
-                       }
-                       const m = jQuery.parseJSON(msg);
-                       if (m && 'wb' === m.type && typeof(WbArea) !== 
'undefined' && !!m.func) {
-                               WbArea[m.func](m.param);
-                       }
-               } catch (err) {
-                       //no-op
-               }
-       });
-});
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
index d49e99b..4b1616b 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/Chat.java
@@ -55,6 +55,7 @@ import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
+import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -79,7 +80,7 @@ public class Chat extends Panel {
                                        long msgId = 
getRequest().getRequestParameters().getParameterValue(PARAM_MSG_ID).toLong();
                                        ChatDao dao = getBean(ChatDao.class);
                                        ChatMessage m = dao.get(msgId);
-                                       if (m.isNeedModeration() && 
isModerator(getUserId(), roomId)) {
+                                       if (m.isNeedModeration() && 
isModerator(cm, getUserId(), roomId)) {
                                                m.setNeedModeration(false);
                                                dao.update(m);
                                                WebSocketHelper.sendRoom(m, 
getMessage(Arrays.asList(m)).put("mode",  "accept"));
@@ -102,6 +103,9 @@ public class Chat extends Panel {
                }
        };
 
+       @SpringBean
+       private ClientManager cm;
+
        public Chat(String id) {
                super(id);
                setOutputMarkupPlaceholderTag(true);
@@ -147,7 +151,7 @@ public class Chat extends Panel {
        public CharSequence addRoom(Room r) {
                StringBuilder sb = new StringBuilder();
                sb.append(String.format("Chat.addTab('%1$s%2$d', '%3$s 
%2$d');", ID_ROOM_PREFIX, r.getId(), getString("406")));
-               List<ChatMessage> list = 
getBean(ChatDao.class).getRoom(r.getId(), 0, 30, !r.isChatModerated() || 
isModerator(getUserId(), r.getId()));
+               List<ChatMessage> list = 
getBean(ChatDao.class).getRoom(r.getId(), 0, 30, !r.isChatModerated() || 
isModerator(cm, getUserId(), r.getId()));
                if (!list.isEmpty()) {
                        
sb.append("Chat.addMessage(").append(getMessage(list).toString()).append(");");
                }
@@ -164,7 +168,7 @@ public class Chat extends Panel {
                        ChatDao dao = getBean(ChatDao.class);
                        StringBuilder sb = new StringBuilder(getReinit());
                        List<ChatMessage> list = new 
ArrayList<>(dao.getGlobal(0, 30));
-                       for(Long roomId : 
getBean(ClientManager.class).listRoomIds(getUserId())) {
+                       for(Long roomId : cm.listRoomIds(getUserId())) {
                                Room r = getBean(RoomDao.class).get(roomId);
                                sb.append(addRoom(r));
                        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatForm.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatForm.java
index 30e88af..99c44b9 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatForm.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatForm.java
@@ -51,6 +51,7 @@ import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.HiddenField;
 import org.apache.wicket.model.Model;
+import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -111,13 +112,13 @@ public class ChatForm extends Form<Void> {
                                        if (!process(
                                                        () -> 
getChat().isShowDashboardChat()
                                                        , r -> {
-                                                               if 
(getBean(ClientManager.class).isInRoom(r.getId(), getUserId())) {
+                                                               if 
(cm.isInRoom(r.getId(), getUserId())) {
                                                                        
m.setToRoom(r);
                                                                } else {
                                                                        
log.error("It seems like we are being hacked!!!!");
                                                                        return 
false;
                                                                }
-                                                               
m.setNeedModeration(r.isChatModerated() && 
!isModerator(m.getFromUser().getId(), r.getId()));
+                                                               
m.setNeedModeration(r.isChatModerated() && !isModerator(cm, 
m.getFromUser().getId(), r.getId()));
                                                                return true;
                                                        }, u -> {
                                                                m.setToUser(u);
@@ -144,6 +145,9 @@ public class ChatForm extends Form<Void> {
                        });
        }
 
+       @SpringBean
+       private ClientManager cm;
+
        private Client getClient() {
                return findParent(MainPanel.class).getClient();
        }
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
index 62872a7..eab74c5 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat/ChatToolbar.java
@@ -36,6 +36,7 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.openmeetings.db.dao.basic.ChatDao;
 import org.apache.openmeetings.db.entity.basic.ChatMessage;
 import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.web.app.ClientManager;
 import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.pages.BasePage;
 import org.apache.wicket.AttributeModifier;
@@ -47,6 +48,7 @@ import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.request.resource.ResourceStreamResource;
+import org.apache.wicket.spring.injection.annot.SpringBean;
 import org.apache.wicket.util.resource.IResourceStream;
 import org.apache.wicket.util.resource.StringResourceStream;
 
@@ -80,7 +82,7 @@ public class ChatToolbar extends Panel implements 
IWysiwygToolbar {
                        final boolean admin = hasAdminLevel(getRights());
                        if (!chatForm.process(
                                        () -> admin
-                                       , r -> admin || 
isModerator(getUserId(), r.getId())
+                                       , r -> admin || isModerator(cm, 
getUserId(), r.getId())
                                        , u -> true))
                        {
                                rr.setError(HttpServletResponse.SC_FORBIDDEN);
@@ -121,7 +123,7 @@ public class ChatToolbar extends Panel implements 
IWysiwygToolbar {
                                                return true;
                                        }
                                        , r -> {
-                                               if (admin || 
isModerator(getUserId(), r.getId())) {
+                                               if (admin || isModerator(cm, 
getUserId(), r.getId())) {
                                                        
setFileName(String.format(CHAT_FNAME_TMPL, "room_" + r.getId()));
                                                        
export(dao.getRoom(r.getId(), 0, Integer.MAX_VALUE, true), sb);
                                                }
@@ -137,6 +139,9 @@ public class ChatToolbar extends Panel implements 
IWysiwygToolbar {
                }
        });
 
+       @SpringBean
+       private ClientManager cm;
+
        /**
         * Constructor
         *
@@ -192,7 +197,7 @@ public class ChatToolbar extends Panel implements 
IWysiwygToolbar {
                                                return true;
                                        }
                                        , r -> {
-                                               if (admin || 
isModerator(getUserId(), r.getId())) {
+                                               if (admin || isModerator(cm, 
getUserId(), r.getId())) {
                                                        
dao.deleteRoom(r.getId());
                                                        clean(target, scope);
                                                }
@@ -229,7 +234,7 @@ public class ChatToolbar extends Panel implements 
IWysiwygToolbar {
                                return true;
                        }
                        , r -> {
-                               final boolean moder = admin || 
isModerator(getUserId(), r.getId());
+                               final boolean moder = admin || isModerator(cm, 
getUserId(), r.getId());
                                target.add(save.setVisible(moder), 
delBtn.setVisible(moder));
                                return true;
                        }, u -> {

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to