This is an automated email from the ASF dual-hosted git repository. solomax pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/openmeetings.git
The following commit(s) were added to refs/heads/master by this push: new 5c30fca [OPENMEETINGS-2600] some issues are addressed 5c30fca is described below commit 5c30fcae4e09c42a51f41c9dd3bf18e51e75d497 Author: Maxim Solodovnik <solomax...@gmail.com> AuthorDate: Wed Mar 24 22:38:04 2021 +0700 [OPENMEETINGS-2600] some issues are addressed --- .../apache/openmeetings/db/util/AuthLevelUtil.java | 3 +- .../openmeetings/db/util/TestAuthLevelUtil.java | 1 + .../openmeetings/web/app/WhiteboardManager.java | 6 +- .../openmeetings/web/common/OmWebSocketPanel.java | 24 +-- .../openmeetings/web/common/tree/FolderPanel.java | 20 ++- .../web/common/tree/OmTreeProvider.java | 15 +- .../web/pages/install/InstallWizard.java | 49 +++--- .../apache/openmeetings/web/room/RoomPanel.java | 187 ++++++++++++--------- .../openmeetings/web/room/sidebar/RoomSidebar.java | 38 +++-- .../openmeetings/web/room/wb/InterviewWbPanel.java | 4 +- .../apache/openmeetings/web/room/wb/WbAction.java | 58 ++++--- .../apache/openmeetings/web/room/wb/WbPanel.java | 68 ++++---- .../web/room/wb/WbWebSocketHelper.java | 4 +- .../openmeetings/web/util/OmUrlFragment.java | 33 ++-- 14 files changed, 286 insertions(+), 224 deletions(-) diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java index 30b7536..de3c317 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java @@ -27,6 +27,7 @@ import org.apache.openmeetings.db.entity.room.RoomGroup; import org.apache.openmeetings.db.entity.room.RoomModerator; import org.apache.openmeetings.db.entity.user.GroupUser; import org.apache.openmeetings.db.entity.user.User; +import org.apache.wicket.util.lang.Objects; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,7 +54,7 @@ public class AuthLevelUtil { if (//admin user get superModerator level, no-one can kick him/her hasAdminLevel(u.getRights()) // user personal room - || u.getId().equals(r.getOwnerId()) + || Objects.equal(u.getId(), r.getOwnerId()) // appointment owner is super moderator || (r.isAppointment() && a != null && u.getId().equals(a.getOwner().getId()))) { diff --git a/openmeetings-db/src/test/java/org/apache/openmeetings/db/util/TestAuthLevelUtil.java b/openmeetings-db/src/test/java/org/apache/openmeetings/db/util/TestAuthLevelUtil.java index c841de5..14a9836 100644 --- a/openmeetings-db/src/test/java/org/apache/openmeetings/db/util/TestAuthLevelUtil.java +++ b/openmeetings-db/src/test/java/org/apache/openmeetings/db/util/TestAuthLevelUtil.java @@ -61,6 +61,7 @@ class TestAuthLevelUtil { @Test void testConference() { User u = new User(); + u.setId(1L); Room r = new Room(); Set<Room.Right> rights = getRoomRight(u, r, null, 0); assertEquals(2, rights.size(), "Result should NOT be empty"); diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WhiteboardManager.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WhiteboardManager.java index 8af5a6b..6d24e77 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WhiteboardManager.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WhiteboardManager.java @@ -223,8 +223,8 @@ public class WhiteboardManager implements IWhiteboardManager { consumer.accept(wb); } wb = clear(roomId, wbId); - sendWbAll(roomId, WbAction.clearAll, new JSONObject().put("wbId", wbId)); - sendWbAll(roomId, WbAction.setSize, wb.getAddJson()); + sendWbAll(roomId, WbAction.CLEAR_ALL, new JSONObject().put("wbId", wbId)); + sendWbAll(roomId, WbAction.SET_SIZE, wb.getAddJson()); } @Override @@ -236,7 +236,7 @@ public class WhiteboardManager implements IWhiteboardManager { if (consumer != null) { consumer.accept(wb, arr); } - sendWbAll(roomId, WbAction.clearSlide, new JSONObject() + sendWbAll(roomId, WbAction.CLEAR_SLIDE, new JSONObject() .put("wbId", wbId) .put(ATTR_SLIDE, slide)); } diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java index 14dedea..9edecc3 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmWebSocketPanel.java @@ -113,17 +113,7 @@ public abstract class OmWebSocketPanel extends Panel { kHandler.onMessage(getWsClient(), m); break; case "mic": - { - IWsClient curClient = getWsClient(); - if (!(curClient instanceof Client)) { - break; - } - Client c = (Client)curClient; - if (c.getRoomId() == null) { - break; - } - WebSocketHelper.sendRoomOthers(c.getRoomId(), c.getUid(), m.put("uid", c.getUid())); - } + micMessage(m); break; case "ping": log.trace("Sending WebSocket PING"); @@ -153,6 +143,18 @@ public abstract class OmWebSocketPanel extends Panel { protected void onError(WebSocketRequestHandler handler, ErrorMessage msg) { closeHandler(msg); } + + private void micMessage(final JSONObject m) { + IWsClient curClient = getWsClient(); + if (!(curClient instanceof Client)) { + return; + } + Client c = (Client)curClient; + if (c.getRoomId() == null) { + return; + } + WebSocketHelper.sendRoomOthers(c.getRoomId(), c.getUid(), m.put("uid", c.getUid())); + } }; } diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java index fcc0afe..ca75d1c 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FolderPanel.java @@ -203,15 +203,7 @@ public class FolderPanel extends Panel implements IDraggableListener, IDroppable break; case VIDEO: case RECORDING: - { - style.append("recording "); - if (f instanceof Recording) { - Status st = ((Recording)f).getStatus(); - if (Status.RECORDING == st || Status.CONVERTING == st) { - style.append("processing "); - } - } - } + setVideoStyle(f, style); break; case PRESENTATION: style.append(CSS_CLASS_FILE).append("doc "); @@ -228,6 +220,16 @@ public class FolderPanel extends Panel implements IDraggableListener, IDroppable return style; } + private void setVideoStyle(final BaseFileItem f, StringBuilder style) { + style.append("recording "); + if (f instanceof Recording) { + Status st = ((Recording)f).getStatus(); + if (Status.RECORDING == st || Status.CONVERTING == st) { + style.append("processing "); + } + } + } + @Override public boolean isStopEventEnabled() { return false; diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java index bf5e52c..1517e47 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/OmTreeProvider.java @@ -86,15 +86,12 @@ public class OmTreeProvider implements ITreeProvider<BaseFileItem> { fRoot.add(r); } if (all && isRecordingsEnabled()) { - { - BaseFileItem r = createRoot(Application.getString("860"), RECORDINGS_MY, true); - r.setOwnerId(getUserId()); - rRoot.add(r); - } - { - BaseFileItem r = createRoot(lblPublic, RECORDINGS_PUBLIC, true); - rRoot.add(r); - } + BaseFileItem my = createRoot(Application.getString("860"), RECORDINGS_MY, true); + my.setOwnerId(getUserId()); + rRoot.add(my); + + BaseFileItem pub = createRoot(lblPublic, RECORDINGS_PUBLIC, true); + rRoot.add(pub); } for (GroupUser gu : userDao.get(getUserId()).getGroupUsers()) { Group g = gu.getGroup(); diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java index fb52961..865e228 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/install/InstallWizard.java @@ -414,28 +414,14 @@ public class InstallWizard extends BootstrapWizard { pass.setVisible(props.getDbType() != DbType.H2); try { switch (props.getDbType()) { - case MSSQL: { - String url = props.getURL().substring("jdbc:sqlserver://".length()); - String[] parts = url.split(";"); - String[] hp = parts[0].split(":"); - host.setModelObject(hp[0]); - port.setModelObject(Integer.parseInt(hp[1])); - dbname.setModelObject(parts[1].substring(parts[1].indexOf('=') + 1)); - } + case MSSQL: + dbMssql(props); break; - case ORACLE: { - String[] parts = props.getURL().split(":"); - host.setModelObject(parts[3].substring(1)); - port.setModelObject(Integer.parseInt(parts[4])); - dbname.setModelObject(parts[5]); - } + case ORACLE: + dbOracle(props); break; - case H2: { - host.setModelObject(""); - port.setModelObject(0); - String[] parts = props.getURL().split(";"); - dbname.setModelObject(parts[0].substring("jdbc:h2:".length())); - } + case H2: + dbH2(props); break; default: URI uri = URI.create(props.getURL().substring(5)); @@ -452,6 +438,29 @@ public class InstallWizard extends BootstrapWizard { } } + private void dbMssql(ConnectionProperties props) { + String url = props.getURL().substring("jdbc:sqlserver://".length()); + String[] parts = url.split(";"); + String[] hp = parts[0].split(":"); + host.setModelObject(hp[0]); + port.setModelObject(Integer.parseInt(hp[1])); + dbname.setModelObject(parts[1].substring(parts[1].indexOf('=') + 1)); + } + + private void dbOracle(ConnectionProperties props) { + String[] parts = props.getURL().split(":"); + host.setModelObject(parts[3].substring(1)); + port.setModelObject(Integer.parseInt(parts[4])); + dbname.setModelObject(parts[5]); + } + + private void dbH2(ConnectionProperties props) { + host.setModelObject(""); + port.setModelObject(0); + String[] parts = props.getURL().split(";"); + dbname.setModelObject(parts[0].substring("jdbc:h2:".length())); + } + @Override protected void onInitialize() { super.onInitialize(); 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 2798914..98781c1 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 @@ -35,6 +35,7 @@ import java.util.Calendar; import java.util.List; import java.util.Map.Entry; import java.util.Set; +import java.util.stream.Stream; import org.apache.commons.text.StringEscapeUtils; import org.apache.openmeetings.core.remote.KurentoHandler; @@ -126,10 +127,23 @@ public class RoomPanel extends BasePanel { private static final String ACCESS_DENIED_ID = "access-denied"; private static final String EVENT_DETAILS_ID = "event-details"; public enum Action { - kick - , muteOthers - , mute - , toggleRight + KICK("kick") + , MUTE_OTHERS("muteOthers") + , MUTE("mute") + , TOGGLE_RIGHT("toggleRight"); + + private final String jsName; + + private Action(String jsName) { + this.jsName = jsName; + } + + public static Action of(String jsName) { + return Stream.of(Action.values()) + .filter(a -> a.jsName.equals(jsName)) + .findAny() + .orElse(null); + } } private final Room r; private final boolean interview; @@ -450,50 +464,13 @@ public class RoomPanel extends BasePanel { menu.update(handler); break; case RIGHT_UPDATED: - { - String uid = ((TextRoomMessage)m).getText(); - Client c = cm.get(uid); - if (c == null) { - log.error("Not existing user in rightUpdated {} !!!!", uid); - return; - } - boolean self = curClient.getUid().equals(c.getUid()); - StringBuilder sb = new StringBuilder("Room.updateClient(") - .append(c.toJson(self).toString(new NullStringer())) - .append(");") - .append(sendClientsOnUpdate()); - handler.appendJavaScript(sb); - sidebar.update(handler); - menu.update(handler); - wb.update(handler); - updateInterviewRecordingButtons(handler); - } + onRightUpdated(curClient, (TextRoomMessage)m, handler); break; case ROOM_ENTER: - { - sidebar.update(handler); - menu.update(handler); - String uid = ((TextRoomMessage)m).getText(); - Client c = cm.get(uid); - if (c == null) { - log.error("Not existing user in rightUpdated {} !!!!", uid); - return; - } - boolean self = curClient.getUid().equals(c.getUid()); - if (self || curClient.hasRight(Room.Right.MODERATOR) || !r.isHidden(RoomElement.USER_COUNT)) { - handler.appendJavaScript(String.format("Room.addClient([%s]);" - , c.toJson(self).toString(new NullStringer()))); - } - sidebar.addActivity(new Activity(m, Activity.Type.roomEnter), handler); - } + onRoomEnter(curClient, (TextRoomMessage)m, handler); break; case ROOM_EXIT: - { - String uid = ((TextRoomMessage)m).getText(); - sidebar.update(handler); - sidebar.addActivity(new Activity(m, Activity.Type.roomExit), handler); - handler.appendJavaScript("Room.removeClient('" + uid + "'); Chat.removeTab('" + ID_USER_PREFIX + m.getUserId() + "');"); - } + onRoomExit((TextRoomMessage)m, handler); break; case ROOM_CLOSED: handler.add(room.setVisible(false)); @@ -532,45 +509,17 @@ public class RoomPanel extends BasePanel { } break; case KICK: - { - String uid = ((TextRoomMessage)m).getText(); - if (curClient.getUid().equals(uid)) { - handler.add(room.setVisible(false)); - getMainPanel().getChat().toggle(handler, false); - clientKicked.show(handler); - cm.exitRoom(curClient); - } - } + onKick(curClient, (TextRoomMessage)m, handler); break; case MUTE: - { - JSONObject obj = new JSONObject(((TextRoomMessage)m).getText()); - Client c = cm.getBySid(obj.getString("sid")); - if (c == null) { - log.error("Not existing user in mute {} !!!!", obj); - return; - } - if (!curClient.getUid().equals(c.getUid())) { - handler.appendJavaScript(String.format("if (typeof(VideoManager) !== 'undefined') {VideoManager.mute('%s', %s);}", obj.getString("uid"), obj.getBoolean("mute"))); - } - } + onMute(curClient, (TextRoomMessage)m, handler); break; case MUTE_OTHERS: - { - String uid = ((TextRoomMessage)m).getText(); - Client c = cm.get(uid); - if (c == null) { - // no luck - return; - } - handler.appendJavaScript(String.format("if (typeof(VideoManager) !== 'undefined') {VideoManager.muteOthers('%s');}", uid)); - } + onMuteOthers((TextRoomMessage)m, handler); break; case QUICK_POLL_UPDATED: - { menu.update(handler); handler.appendJavaScript(getQuickPollJs()); - } break; case KURENTO_STATUS: menu.update(handler); @@ -599,10 +548,8 @@ public class RoomPanel extends BasePanel { } } break; - case WB_PUT_FILE: { - JSONObject obj = new JSONObject(((TextRoomMessage)m).getText()); - getWb().sendFileToWb(fileDao.getAny(obj.getLong("fileId")), obj.getBoolean("clean")); - } + case WB_PUT_FILE: + onWbPutFile((TextRoomMessage)m); break; } } @@ -610,6 +557,86 @@ public class RoomPanel extends BasePanel { super.onEvent(event); } + private void onRightUpdated(Client curClient, TextRoomMessage m, IPartialPageRequestHandler handler) { + String uid = m.getText(); + Client c = cm.get(uid); + if (c == null) { + log.error("Not existing user in rightUpdated {} !!!!", uid); + return; + } + boolean self = curClient.getUid().equals(c.getUid()); + StringBuilder sb = new StringBuilder("Room.updateClient(") + .append(c.toJson(self).toString(new NullStringer())) + .append(");") + .append(sendClientsOnUpdate()); + handler.appendJavaScript(sb); + sidebar.update(handler); + menu.update(handler); + wb.update(handler); + updateInterviewRecordingButtons(handler); + } + + private void onRoomEnter(Client curClient, TextRoomMessage m, IPartialPageRequestHandler handler) { + sidebar.update(handler); + menu.update(handler); + String uid = m.getText(); + Client c = cm.get(uid); + if (c == null) { + log.error("Not existing user in rightUpdated {} !!!!", uid); + return; + } + boolean self = curClient.getUid().equals(c.getUid()); + if (self || curClient.hasRight(Room.Right.MODERATOR) || !r.isHidden(RoomElement.USER_COUNT)) { + handler.appendJavaScript("Room.addClient([" + + c.toJson(self).toString(new NullStringer()) + "]);"); + } + sidebar.addActivity(new Activity(m, Activity.Type.roomEnter), handler); + } + + private void onRoomExit(TextRoomMessage m, IPartialPageRequestHandler handler) { + String uid = m.getText(); + sidebar.update(handler); + sidebar.addActivity(new Activity(m, Activity.Type.roomExit), handler); + handler.appendJavaScript("Room.removeClient('" + uid + "'); Chat.removeTab('" + ID_USER_PREFIX + m.getUserId() + "');"); + } + + private void onKick(Client curClient, TextRoomMessage m, IPartialPageRequestHandler handler) { + String uid = m.getText(); + if (curClient.getUid().equals(uid)) { + handler.add(room.setVisible(false)); + getMainPanel().getChat().toggle(handler, false); + clientKicked.show(handler); + cm.exitRoom(curClient); + } + } + + private void onMute(Client curClient, TextRoomMessage m, IPartialPageRequestHandler handler) { + JSONObject obj = new JSONObject(m.getText()); + Client c = cm.getBySid(obj.getString("sid")); + if (c == null) { + log.error("Not existing user in mute {} !!!!", obj); + return; + } + if (!curClient.getUid().equals(c.getUid())) { + handler.appendJavaScript(String.format("if (typeof(VideoManager) !== 'undefined') {VideoManager.mute('%s', %s);}", obj.getString("uid"), obj.getBoolean("mute"))); + } + } + + private void onMuteOthers(TextRoomMessage m, IPartialPageRequestHandler handler) { + String uid = m.getText(); + Client c = cm.get(uid); + if (c == null) { + // no luck + return; + } + handler.appendJavaScript(String.format("if (typeof(VideoManager) !== 'undefined') {VideoManager.muteOthers('%s');}", uid)); + } + + private void onWbPutFile(TextRoomMessage m) { + JSONObject obj = new JSONObject(m.getText()); + getWb().sendFileToWb(fileDao.getAny(obj.getLong("fileId")), obj.getBoolean("clean")); + } + private String getQuickPollJs() { return String.format("Room.quickPoll(%s);", qpollManager.toJson(r.getId())); } @@ -772,7 +799,7 @@ public class RoomPanel extends BasePanel { if (room.isVisible() && "room".equals(o.optString("area"))) { final String type = o.optString("type"); if ("wb".equals(type)) { - WbAction a = WbAction.valueOf(o.getString(PARAM_ACTION)); + WbAction a = WbAction.of(o.getString(PARAM_ACTION)); wb.processWbAction(a, o.optJSONObject("data"), handler); } else if ("room".equals(type)) { sidebar.roomAction(handler, o); diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java index a506b1a..b9cc76d 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java @@ -142,9 +142,9 @@ public class RoomSidebar extends Panel { return; } Client self = room.getClient(); - Action a = Action.valueOf(o.getString(PARAM_ACTION)); + Action a = Action.of(o.getString(PARAM_ACTION)); switch (a) { - case kick: + case KICK: if (self.hasRight(Right.MODERATOR)) { final Client kickedClient = cm.get(uid); if (kickedClient == null) { @@ -155,27 +155,15 @@ public class RoomSidebar extends Panel { } } break; - case muteOthers: + case MUTE_OTHERS: if (room.getClient().hasRight(Right.MUTE_OTHERS)) { WebSocketHelper.sendRoom(new TextRoomMessage(room.getRoom().getId(), self, RoomMessage.Type.MUTE_OTHERS, uid)); } break; - case mute: - { - Client c = cm.get(uid); - if (c == null || !c.hasActivity(Client.Activity.AUDIO)) { - return; - } - if (self.hasRight(Right.MODERATOR) || self.getUid().equals(c.getUid())) { - WebSocketHelper.sendRoom(new TextRoomMessage(room.getRoom().getId(), self, RoomMessage.Type.MUTE - , new JSONObject() - .put("sid", self.getSid()) - .put(PARAM_UID, uid) - .put("mute", o.getBoolean("mute")).toString())); - } - } + case MUTE: + muteRoomAction(uid, self, o); break; - case toggleRight: + case TOGGLE_RIGHT: toggleRight(handler, self, uid, o); break; default: @@ -185,6 +173,20 @@ public class RoomSidebar extends Panel { } } + private void muteRoomAction(String uid, Client self, JSONObject o) { + Client c = cm.get(uid); + if (c == null || !c.hasActivity(Client.Activity.AUDIO)) { + return; + } + if (self.hasRight(Right.MODERATOR) || self.getUid().equals(c.getUid())) { + WebSocketHelper.sendRoom(new TextRoomMessage(room.getRoom().getId(), self, RoomMessage.Type.MUTE + , new JSONObject() + .put("sid", self.getSid()) + .put(PARAM_UID, uid) + .put("mute", o.getBoolean("mute")).toString())); + } + } + private void toggleRight(IPartialPageRequestHandler handler, Client self, String uid, JSONObject o) { try { Right right = Right.valueOf(o.getString(PARAM_RIGHT)); diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/InterviewWbPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/InterviewWbPanel.java index bdf55fc..f820baf 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/InterviewWbPanel.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/InterviewWbPanel.java @@ -53,10 +53,10 @@ public class InterviewWbPanel extends AbstractWbPanel { public void processWbAction(WbAction a, JSONObject obj, IPartialPageRequestHandler handler) throws IOException { Client c = rp.getClient(); switch (a) { - case startRecording: + case START_RECORDING: streamProcessor.startRecording(c); break; - case stopRecording: + case STOP_RECORDING: streamProcessor.stopRecording(c); break; default: diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java index f3ba2dd..f0a1f29 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbAction.java @@ -18,25 +18,43 @@ */ package org.apache.openmeetings.web.room.wb; +import java.util.stream.Stream; + public enum WbAction { - create //create wb without additional calls - , createWb - , removeWb - , activateWb - , renameWb - , setSlide - , createObj - , modifyObj - , deleteObj - , clearAll - , clearSlide - , save - , load - , undo - , setSize - , download - , startRecording - , stopRecording - , videoStatus - , loadVideos + CREATE_WB("createWb") + , REMOVE_WB("removeWb") + , ACTIVATE_WB("activateWb") + , RENAME_WB("renameWb") + , SET_SLIDE("setSlide") + , CREATE_OBJ("createObj") + , MODIFY_OBJ("modifyObj") + , DELETE_OBJ("deleteObj") + , CLEAR_ALL("clearAll") + , CLEAR_SLIDE("clearSlide") + , SAVE("save") + , LOAD("load") + , UNDO("undo") + , SET_SIZE("setSize") + , DOWNLOAD("download") + , START_RECORDING("startRecording") + , STOP_RECORDING("stopRecording") + , VIDEO_STATUS("videoStatus") + , LOAD_VIDEOS("loadVideos"); + + private final String jsName; + + private WbAction(String jsName) { + this.jsName = jsName; + } + + public String jsName() { + return jsName; + } + + public static WbAction of(String jsName) { + return Stream.of(WbAction.values()) + .filter(a -> a.jsName.equals(jsName)) + .findAny() + .orElse(null); + } } diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java index 2f3bf22..7a9ac2f 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java @@ -193,8 +193,8 @@ public class WbPanel extends AbstractWbPanel { return; } switch (a) { - case createObj: - case modifyObj: + case CREATE_OBJ: + case MODIFY_OBJ: { JSONObject o = obj.optJSONObject("obj"); if (o != null && "pointer".equals(o.getString(ATTR_OMTYPE))) { @@ -203,7 +203,7 @@ public class WbPanel extends AbstractWbPanel { } } break; - case download: + case DOWNLOAD: { boolean moder = c.hasRight(Room.Right.MODERATOR); Room r = rp.getRoom(); @@ -212,7 +212,7 @@ public class WbPanel extends AbstractWbPanel { } return; } - case loadVideos: + case LOAD_VIDEOS: { StringBuilder sb = new StringBuilder("WbArea.initVideos("); JSONArray arr = new JSONArray(); @@ -246,56 +246,56 @@ public class WbPanel extends AbstractWbPanel { //presenter-right if (c.hasRight(Right.PRESENTER)) { switch (a) { - case createWb: + case CREATE_WB: { Whiteboard wb = wbm.add(roomId, c.getUser().getLanguageId()); - sendWbAll(WbAction.createWb, wb.getAddJson()); + sendWbAll(WbAction.CREATE_WB, wb.getAddJson()); } break; - case removeWb: + case REMOVE_WB: { long id = obj.optLong("wbId", -1); if (id > -1) { long prevId = obj.optLong("prevWbId", -1); wbm.remove(roomId, id, prevId); - sendWbAll(WbAction.removeWb, obj); + sendWbAll(WbAction.REMOVE_WB, obj); } } break; - case activateWb: + case ACTIVATE_WB: { long wbId = obj.optLong("wbId", -1); if (wbId > -1) { wbm.activate(roomId, wbId); - sendWbAll(WbAction.activateWb, obj); + sendWbAll(WbAction.ACTIVATE_WB, obj); } } break; - case renameWb: + case RENAME_WB: { Whiteboard wb = wbm.get(roomId).get(obj.optLong("wbId", -1)); if (wb != null) { wbm.update(roomId, wb.setName(obj.getString("name"))); - sendWbAll(WbAction.renameWb, obj); + sendWbAll(WbAction.RENAME_WB, obj); } } break; - case setSlide: + case SET_SLIDE: { Whiteboard wb = wbm.get(roomId).get(obj.optLong("wbId", -1)); if (wb != null) { wb.setSlide(obj.optInt(ATTR_SLIDE, 0)); wbm.update(roomId, wb); - sendWbOthers(WbAction.setSlide, obj); + sendWbOthers(WbAction.SET_SLIDE, obj); } } break; - case clearAll: + case CLEAR_ALL: { wbm.clearAll(roomId, obj.getLong("wbId"), addUndo); } break; - case setSize: + case SET_SIZE: { Whiteboard wb = wbm.get(roomId).get(obj.getLong("wbId")); wb.setWidth(obj.getInt(ATTR_WIDTH)); @@ -303,7 +303,7 @@ public class WbPanel extends AbstractWbPanel { wb.setZoom(obj.getDouble(ATTR_ZOOM)); wb.setZoomMode(ZoomMode.valueOf(obj.getString("zoomMode"))); wbm.update(roomId, wb); - sendWbOthers(WbAction.setSize, wb.getAddJson()); + sendWbOthers(WbAction.SET_SIZE, wb.getAddJson()); } break; default: @@ -313,17 +313,17 @@ public class WbPanel extends AbstractWbPanel { //wb-right if (c.hasRight(Right.PRESENTER) || c.hasRight(Right.WHITEBOARD)) { switch (a) { - case createObj: + case CREATE_OBJ: { Whiteboard wb = wbm.get(roomId).get(obj.getLong("wbId")); JSONObject o = obj.getJSONObject("obj"); wb.put(o.getString("uid"), o); wbm.update(roomId, wb); addUndo(wb.getId(), new UndoObject(UndoObject.Type.add, o)); - sendWbOthers(WbAction.createObj, obj); + sendWbOthers(WbAction.CREATE_OBJ, obj); } break; - case modifyObj: + case MODIFY_OBJ: { Whiteboard wb = wbm.get(roomId).get(obj.getLong("wbId")); JSONArray arr = obj.getJSONArray("obj"); @@ -341,10 +341,10 @@ public class WbPanel extends AbstractWbPanel { wbm.update(roomId, wb); addUndo(wb.getId(), new UndoObject(UndoObject.Type.modify, undo)); } - sendWbOthers(WbAction.modifyObj, obj); + sendWbOthers(WbAction.MODIFY_OBJ, obj); } break; - case deleteObj: + case DELETE_OBJ: { Whiteboard wb = wbm.get(roomId).get(obj.getLong("wbId")); JSONArray arr = obj.getJSONArray("obj"); @@ -360,20 +360,20 @@ public class WbPanel extends AbstractWbPanel { wbm.update(roomId, wb); addUndo(wb.getId(), new UndoObject(UndoObject.Type.remove, undo)); } - sendWbAll(WbAction.deleteObj, obj); + sendWbAll(WbAction.DELETE_OBJ, obj); } break; - case clearSlide: + case CLEAR_SLIDE: { wbm.cleanSlide(roomId, obj.getLong("wbId"), obj.getInt(ATTR_SLIDE) , (wb, arr) -> addUndo(wb.getId(), new UndoObject(UndoObject.Type.remove, arr))); } break; - case save: + case SAVE: wb2save = obj.getLong("wbId"); fileName.show(handler); break; - case undo: + case UNDO: { Long wbId = obj.getLong("wbId"); UndoObject uo = getUndo(wbId); @@ -385,7 +385,7 @@ public class WbPanel extends AbstractWbPanel { JSONObject o = new JSONObject(uo.getObject()); wb.remove(o.getString("uid")); wbm.update(roomId, wb); - sendWbAll(WbAction.deleteObj, obj.put("obj", new JSONArray().put(o))); + sendWbAll(WbAction.DELETE_OBJ, obj.put("obj", new JSONArray().put(o))); } break; case remove: @@ -396,7 +396,7 @@ public class WbPanel extends AbstractWbPanel { wb.put(o.getString("uid"), o); } wbm.update(roomId, wb); - sendWbAll(WbAction.createObj, obj.put("obj", new JSONArray(uo.getObject()))); + sendWbAll(WbAction.CREATE_OBJ, obj.put("obj", new JSONArray(uo.getObject()))); } break; case modify: @@ -407,14 +407,14 @@ public class WbPanel extends AbstractWbPanel { wb.put(o.getString("uid"), o); } wbm.update(roomId, wb); - sendWbAll(WbAction.modifyObj, obj.put("obj", arr)); + sendWbAll(WbAction.MODIFY_OBJ, obj.put("obj", arr)); } break; } } } break; - case videoStatus: + case VIDEO_STATUS: { Whiteboard wb = wbm.get(roomId).get(obj.getLong("wbId")); String uid = obj.getString("uid"); @@ -424,7 +424,7 @@ public class WbPanel extends AbstractWbPanel { po.put(PARAM_STATUS, ns.put(PARAM_UPDATED, System.currentTimeMillis())); wbm.update(roomId, wb.put(uid, po)); obj.put(ATTR_SLIDE, po.getInt(ATTR_SLIDE)); - sendWbAll(WbAction.videoStatus, obj); + sendWbAll(WbAction.VIDEO_STATUS, obj); } } break; @@ -515,8 +515,8 @@ public class WbPanel extends AbstractWbPanel { if (updated[0]) { wbm.update(roomId, wb); } - sendWbAll(WbAction.setSize, wb.getAddJson()); - sendWbAll(WbAction.load, getObjWbJson(wb.getId(), arr)); + sendWbAll(WbAction.SET_SIZE, wb.getAddJson()); + sendWbAll(WbAction.LOAD, getObjWbJson(wb.getId(), arr)); } catch (Exception e) { log.error("Unexpected error while loading WB", e); } @@ -553,7 +553,7 @@ public class WbPanel extends AbstractWbPanel { wb.put(wuid, file); updateWbSize(wb, fi); wbm.update(roomId, wb); - sendWbAll(WbAction.setSize, wb.getAddJson()); + sendWbAll(WbAction.SET_SIZE, wb.getAddJson()); WbWebSocketHelper.sendWbFile(roomId, wb.getId(), ruid, file, fi); } break; diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java index d3ca670..3894920 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbWebSocketHelper.java @@ -173,7 +173,7 @@ public class WbWebSocketHelper { roomId , new JSONObject().put("type", "wb") , alwaysTrue() - , (o, c) -> o.put("func", WbAction.createObj.name()) + , (o, c) -> o.put("func", WbAction.CREATE_OBJ.jsName()) .put("param", getObjWbJson(wbId, patchUrls(fi, c, f)))); } @@ -182,7 +182,7 @@ public class WbWebSocketHelper { roomId , new JSONObject().put("type", "wb") , check - , (o, c) -> o.put("func", meth.name()) + , (o, c) -> o.put("func", meth.jsName()) .put("param", obj) ); } diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java index 4ee3030..3e54e8b 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/OmUrlFragment.java @@ -277,21 +277,8 @@ public class OmUrlFragment implements Serializable { basePanel = new WidgetsPanel(CHILD_ID); } break; - case room: { - Room r = null; - try { - Long roomId = Long.valueOf(type); - r = Application.get().getBean(RoomDao.class).get(roomId); - } catch(NumberFormatException ne) { - r = Application.get().getBean(RoomDao.class).get(type); - } - if (r != null) { - moveToServer(r); - basePanel = new RoomPanel(CHILD_ID, r); - } else { - basePanel = new OmDashboardPanel(CHILD_ID); - } - } + case room: + basePanel = getRoomPanel(type); break; case rooms: basePanel = new RoomsSelectorPanel(CHILD_ID, type); @@ -311,6 +298,22 @@ public class OmUrlFragment implements Serializable { return basePanel; } + private static BasePanel getRoomPanel(String type) { + Room r = null; + try { + Long roomId = Long.valueOf(type); + r = Application.get().getBean(RoomDao.class).get(roomId); + } catch(NumberFormatException ne) { + r = Application.get().getBean(RoomDao.class).get(type); + } + if (r != null) { + moveToServer(r); + return new RoomPanel(CHILD_ID, r); + } else { + return new OmDashboardPanel(CHILD_ID); + } + } + public String getLink() { return getBaseUrl() + "#" + getArea().name() + "/" + getType(); }