Added: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java?rev=1740251&view=auto ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java (added) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java Thu Apr 21 08:21:20 2016 @@ -0,0 +1,71 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License") + you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.openmeetings.web.room.sidebar; + +import static org.apache.openmeetings.web.app.Application.getBean; +import static org.apache.openmeetings.web.app.WebSession.getUserId; + +import org.apache.openmeetings.db.dao.user.UserDao; +import org.apache.openmeetings.db.entity.room.Room.RoomElement; +import org.apache.openmeetings.db.entity.user.User; +import org.apache.openmeetings.web.app.Client; +import org.apache.openmeetings.web.app.Client.Right; +import org.apache.openmeetings.web.room.RoomPanel; +import org.apache.wicket.behavior.AttributeAppender; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.list.ListItem; +import org.apache.wicket.markup.html.panel.Panel; + +public class RoomClientPanel extends Panel { + private static final long serialVersionUID = 1L; + + public RoomClientPanel(String id, ListItem<Client> item, final RoomPanel room) { + super(id); + setRenderBodyOnly(true); + Client c = item.getModelObject(); + item.setMarkupId(String.format("user%s", c.getUid())); + String status = null, statusTitle = null; + if (c.hasRight(Right.moderator)) { + status = "status-mod"; + statusTitle = "679"; + } else if (c.hasRight(Right.whiteBoard)) { + status = "status-wb"; + statusTitle = "678"; + } else { + status = "status-user"; + statusTitle = "677"; + } + add(new WebMarkupContainer("status").add(AttributeAppender.append("class", status), AttributeAppender.replace("title", getString(statusTitle)))); + User u = getBean(UserDao.class).get(c.getUserId()); + add(new Label("name", u.getFirstname() + " " + u.getLastname())); + add(AttributeAppender.append("data-userid", c.getUserId())); + WebMarkupContainer actions = new WebMarkupContainer("actions"); + actions.add(new WebMarkupContainer("privateChat").setVisible(!room.getRoom().isHidden(RoomElement.Chat) && !getUserId().equals(c.getUserId()))); + if (room.getClient() != null) { + actions.setVisible(room.getClient().hasRight(Right.moderator)); + if (c.getUid().equals(room.getClient().getUid())) { + item.add(AttributeAppender.append("class", "current")); + } + } else { + actions.setVisible(false); + } + add(actions); + } +}
Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html?rev=1740251&r1=1740250&r2=1740251&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html (original) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html Thu Apr 21 08:21:20 2016 @@ -25,23 +25,7 @@ <wicket:fragment wicket:id="user-panel"> <div class="user list"> <div wicket:id="user" class="user ui-corner-all ui-widget-content"> - <span wicket:id="status" class="ui-icon align-right"></span> - <span class="ui-icon align-right clickable restart" wicket:message="title:610"></span> - <div wicket:id="name" class="user name"></div> - <span class="ui-icon align-right clickable audio-activity" wicket:message="title:372"></span> - <div wicket:id="actions" class="user actions"> - <span class="ui-icon align-left clickable moderator-right" wicket:message="title:676"></span> - <span class="ui-icon align-left clickable wb-right" wicket:message="title:611"></span> - <span class="ui-icon align-left clickable screen-share-right" wicket:message="title:1067"></span> - <span class="ui-icon align-left clickable remote-control-right" wicket:message="title:1078"></span> - <span class="ui-icon align-left clickable audio-right" wicket:message="title:1604"></span> - <span class="ui-icon align-left clickable camera-right" wicket:message="title:683"></span> - <span class="ui-icon align-left clickable global-mute" wicket:message="title:1384"></span> - <span class="ui-icon align-left clickable exclsv-audio" wicket:message="title:1424"></span> - <span class="ui-icon align-left clickable kick" wicket:message="title:1213"></span> - <span wicket:id="privateChat" class="ui-icon align-right clickable private-chat" wicket:message="title:1493" onclick="startPrivateChat($(this));"></span> - <div class="clear"></div> - </div> + <div wicket:id="user"></div> </div> </div> </wicket:fragment> Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java?rev=1740251&r1=1740250&r2=1740251&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java (original) +++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java Thu Apr 21 08:21:20 2016 @@ -18,26 +18,18 @@ */ package org.apache.openmeetings.web.room.sidebar; -import static org.apache.openmeetings.web.app.Application.getBean; import static org.apache.openmeetings.web.app.Application.getRoomUsers; -import static org.apache.openmeetings.web.app.WebSession.getUserId; -import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; -import java.util.List; -import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.entity.room.Room.RoomElement; -import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.web.app.Client; import org.apache.openmeetings.web.app.Client.Right; import org.apache.openmeetings.web.room.RoomPanel; -import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.core.request.handler.IPartialPageRequestHandler; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Fragment; @@ -56,38 +48,12 @@ public class RoomSidebar extends Panel { private final UploadDialog upload; private final RoomFilePanel roomFiles; private boolean showFiles; - private final ListView<RoomClient> users = new ListView<RoomClient>("user", new ArrayList<RoomClient>()) { + private final ListView<Client> users = new ListView<Client>("user", new ArrayList<Client>()) { private static final long serialVersionUID = 1L; @Override - protected void populateItem(ListItem<RoomClient> item) { - RoomClient rc = item.getModelObject(); - item.setMarkupId(String.format("user%s", rc.c.getUid())); - String status = null, statusTitle = null; - if (rc.c.hasRight(Right.moderator)) { - status = "status-mod"; - statusTitle = "679"; - } else if (rc.c.hasRight(Right.whiteBoard)) { - status = "status-wb"; - statusTitle = "678"; - } else { - status = "status-user"; - statusTitle = "677"; - } - item.add(new WebMarkupContainer("status").add(AttributeAppender.append("class", status), AttributeAppender.replace("title", getString(statusTitle)))); - item.add(new Label("name", rc.u.getFirstname() + " " + rc.u.getLastname())); - item.add(AttributeAppender.append("data-userid", rc.u.getId())); - WebMarkupContainer actions = new WebMarkupContainer("actions"); - actions.add(new WebMarkupContainer("privateChat").setVisible(!room.getRoom().isHidden(RoomElement.Chat) && !getUserId().equals(rc.u.getId()))); - if (room.getClient() != null) { - actions.setVisible(room.getClient().hasRight(Right.moderator)); - if (rc.c.getUid().equals(room.getClient().getUid())) { - item.add(AttributeAppender.append("class", "current")); - } - } else { - actions.setVisible(false); - } - item.add(actions); + protected void populateItem(ListItem<Client> item) { + item.add(new RoomClientPanel("user", item, room)); } }; @@ -137,12 +103,19 @@ public class RoomSidebar extends Panel { add(upload = new UploadDialog("upload", room, roomFiles)); } + private ListView<Client> updateUsers() { + //TODO do we need sort?? + users.getList().clear(); + users.getList().addAll(getRoomUsers(room.getRoom().getId())); + return users; + } + public class UserFragment extends Fragment { private static final long serialVersionUID = 1L; public UserFragment(String id, String markupId) { super(id, markupId, RoomSidebar.this); - add(users.setList(getUsers())); + add(updateUsers()); } } @@ -154,25 +127,6 @@ public class RoomSidebar extends Panel { add(roomFiles); } } - - private List<RoomClient> getUsers() { - List<RoomClient> list = new ArrayList<>(); - for (Client cl : getRoomUsers(room.getRoom().getId())) { - list.add(new RoomClient(cl)); - } - return list; - } - - static class RoomClient implements Serializable { - private static final long serialVersionUID = 1L; - private final Client c; - private final User u; - - RoomClient(Client c) { - this.c = c; - this.u = getBean(UserDao.class).get(c.getUserId()); - } - } private void updateShowFiles() { showFiles = !room.getRoom().isHidden(RoomElement.Files) && room.getClient().hasRight(Right.whiteBoard); @@ -180,7 +134,7 @@ public class RoomSidebar extends Panel { public void updateUsers(IPartialPageRequestHandler handler) { updateShowFiles(); - users.setList(getUsers()); + updateUsers(); handler.add(tabs); } Modified: openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css?rev=1740251&r1=1740250&r2=1740251&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css (original) +++ openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css Thu Apr 21 08:21:20 2016 @@ -52,11 +52,11 @@ .room.menu.right .room.name { font-weight: bold; } -.room.menu.right .room.demo { -} -.room.menu.right .room.recording { +.room.menu.right .room.name.screen { color: red; } +.room.menu.right .room.demo { +} .room.menu.right .icon { width: 30px; height: 30px; @@ -171,6 +171,7 @@ } .room.sidebar.left .user.list .user.current { font-weight: bold; + background: #00FF00; } .ui-dialog.video, .ui-dialog.video .ui-dialog-titlebar, .ui-dialog.video .video.ui-dialog-content { padding: 0; Modified: openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java?rev=1740251&r1=1740250&r2=1740251&view=diff ============================================================================== --- openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java (original) +++ openmeetings/application/trunk/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java Thu Apr 21 08:21:20 2016 @@ -38,6 +38,7 @@ import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; import org.apache.cxf.feature.Features; +import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter; import org.apache.openmeetings.db.dao.room.IInvitationManager; import org.apache.openmeetings.db.dao.room.InvitationDao; import org.apache.openmeetings.db.dao.room.RoomDao; @@ -54,13 +55,8 @@ import org.apache.openmeetings.db.entity import org.apache.openmeetings.db.entity.room.Invitation.MessageType; import org.apache.openmeetings.db.entity.room.Room; import org.apache.openmeetings.db.util.AuthLevelUtil; -import org.apache.openmeetings.util.OpenmeetingsVariables; import org.apache.openmeetings.util.message.RoomMessage; import org.apache.openmeetings.webservice.error.ServiceException; -import org.apache.wicket.Application; -import org.apache.wicket.protocol.ws.WebSocketSettings; -import org.apache.wicket.protocol.ws.api.IWebSocketConnection; -import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -92,6 +88,8 @@ public class RoomWebService { private ISessionManager sessionManager; @Autowired private RoomDao roomDao; + @Autowired + private ScopeApplicationAdapter appAdapter; /** * Returns an Object of Type RoomsList which contains a list of @@ -318,15 +316,7 @@ public class RoomWebService { roomDao.update(room, userId); - Application app = Application.get(OpenmeetingsVariables.wicketApplicationName); - WebSocketSettings settings = WebSocketSettings.Holder.get(app); - IWebSocketConnectionRegistry registry = settings.getConnectionRegistry(); - RoomMessage cm = new RoomMessage(room.getId(), userId, RoomMessage.Type.roomClosed); - for (IWebSocketConnection wc : registry.getConnections(app)) { - if (wc != null && wc.isOpen()) { - wc.sendMessage(cm); - } - } + appAdapter.broadcastRoom(new RoomMessage(room.getId(), userId, RoomMessage.Type.roomClosed)); return new ServiceResult(1L, "Closed", Type.SUCCESS); } else {
