Author: solomax
Date: Sun Jul 17 05:32:35 2016
New Revision: 1753012

URL: http://svn.apache.org/viewvc?rev=1753012&view=rev
Log:
[OPENMEETINGS-1416] Room moderator right calculation is unified

Modified:
    
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
    
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
    
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
    
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
    
openmeetings/application/branches/3.1.x/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
    
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
    
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
    
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
    
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
    
openmeetings/application/branches/3.2.x/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ExclusiveRightIcon.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/KickRightIcon.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/MuteRightIcon.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RefreshIcon.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
    
openmeetings/application/trunk/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ExclusiveRightIcon.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/KickRightIcon.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/MuteRightIcon.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RefreshIcon.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
 Sun Jul 17 05:32:35 2016
@@ -86,27 +86,6 @@ public class ConferenceService {
        }
 
        /**
-        * gets all rooms of an group TODO:check if the requesting user is
-        * also member of that group
-        * 
-        * @param SID
-        * @param groupId
-        * @return - all rooms of an group
-        */
-       public SearchResult<RoomGroup> getRoomsByGroup(String SID,
-                       long groupId, int start, int max, String orderby,
-                       boolean asc) {
-
-               log.debug("getRoomsByGroup");
-
-               Long userId = sessiondataDao.check(SID);
-               if (AuthLevelUtil.hasModLevel(userDao.get(userId), groupId)) {
-                       return roomManager.getRoomGroupByGroupId(groupId, 
start, max, orderby, asc);
-               }
-               return null;
-       }
-
-       /**
         * get a List of all public availible rooms (non-appointments)
         * 
         * @param SID

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 Sun Jul 17 05:32:35 2016
@@ -50,13 +50,12 @@ import org.apache.openmeetings.db.dao.se
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.dto.room.BrowserStatus;
 import org.apache.openmeetings.db.dto.room.RoomStatus;
-import org.apache.openmeetings.db.entity.calendar.Appointment;
-import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.log.ConferenceLog;
 import org.apache.openmeetings.db.entity.room.Client;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.server.Server;
 import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.openmeetings.util.CalendarPatterns;
 import org.apache.openmeetings.util.InitializationContainer;
 import org.apache.openmeetings.util.OmFileHelper;
@@ -1167,188 +1166,50 @@ public class ScopeApplicationAdapter ext
 
                        currentClient.setUsercolor(colorObj);
 
+                       User u = userDao.get(currentClient.getUserId());
                        // Inject externalUserId if nothing is set yet
-                       if (currentClient.getExternalUserId() == null) {
-                               if (currentClient.getUserId() != null) {
-                                       User us = 
userDao.get(currentClient.getUserId());
-                                       if (us != null) {
-                                               
currentClient.setExternalUserId(us.getExternalId());
-                                               
currentClient.setExternalUserType(us.getExternalType());
-                                       }
-                               }
+                       if (currentClient.getExternalUserId() == null && u != 
null) {
+                               
currentClient.setExternalUserId(u.getExternalId());
+                               
currentClient.setExternalUserType(u.getExternalType());
                        }
 
-                       // This can be set without checking for Moderation Flag
-                       currentClient.setIsSuperModerator(isSuperModerator);
-
-                       sessionManager.updateClientByStreamId(streamid, 
currentClient, true, null);
-
-                       Room room = roomDao.get(roomId);
-                       if (room.getShowMicrophoneStatus()) {
+                       Room r = roomDao.get(roomId);
+                       if (r.getShowMicrophoneStatus()) {
                                currentClient.setCanGiveAudio(true);
                        }
-
+                       sessionManager.updateClientByStreamId(streamid, 
currentClient, true, null); // first save to get valid room count
                        // Log the User
                        conferenceLogDao.add(ConferenceLog.Type.roomEnter,
                                        currentClient.getUserId(), streamid, 
roomId,
                                        currentClient.getUserip(), "");
                        
                        // Check for Moderation LogicalRoom ENTER
-                       List<Client> clientListRoom = 
sessionManager.getClientListByRoom(roomId);
+                       List<Client> roomClients = 
sessionManager.getClientListByRoom(roomId);
 
                        // Return Object
                        RoomStatus roomStatus = new RoomStatus();
                        // appointed meeting or moderated Room? => Check Max 
Users first
-                       if (clientListRoom.size() > 
room.getNumberOfPartizipants()) {
+                       if (roomClients.size() > r.getNumberOfPartizipants()) {
                                roomStatus.setRoomFull(true);
                                return roomStatus;
                        }
-
-                       // default logic for non regular rooms
-                       if (!room.isAppointment()) {
-                               if (room.isModerated()) {
-                                       // if this is a Moderated Room then the 
Room can be only
-                                       // locked off by the Moderator Bit
-                                       // List<RoomClient> 
clientModeratorListRoom =
-                                       // 
this.sessionManager.getCurrentModeratorByRoom(roomId);
-
-                                       // If there is no Moderator yet we have 
to check if the
-                                       // current User has the Bit set to true 
to
-                                       // become one, otherwise he won't get 
Moderation and has to
-                                       // wait
-                                       if (becomeModerator) {
-                                               currentClient.setIsMod(true);
-
-                                               // There is a need to send an 
extra Event here, cause at
-                                               // this moment there could be
-                                               // already somebody in the Room 
waiting
-
-                                               // Update the Client List
-                                               
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-
-                                               List<Client> modRoomList = 
sessionManager.getCurrentModeratorByRoom(currentClient.getRoomId());
-                                               
-                                               //Sync message to everybody
-                                               
sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
-                                       } else {
-                                               // The current User is not a 
Teacher/Admin or whatever
-                                               // Role that should get the
-                                               // Moderation
-                                               currentClient.setIsMod(false);
-                                       }
-                               } else {
-                                       // If this is a normal Room Moderator 
rules : first come, first draw ;-)
-                                       log.debug("setRoomValues : Room"
-                                                       + roomId
-                                                       + " not appointed! 
Moderator rules : first come, first draw ;-)");
-                                       if (clientListRoom.size() == 1) {
-                                               log.debug("Room is empty so set 
this user to be moderation role");
-                                               currentClient.setIsMod(true);
-                                       } else {
-                                               log.debug("Room is already 
somebody so set this user not to be moderation role");
-
-                                               if (becomeModerator) {
-                                                       
currentClient.setIsMod(true);
-
-                                                       // Update the Client 
List
-                                                       
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-
-                                                       List<Client> 
modRoomList = 
sessionManager.getCurrentModeratorByRoom(currentClient.getRoomId());
-
-                                                       // There is a need to 
send an extra Event here,
-                                                       // cause at this moment 
there could be
-                                                       // already somebody in 
the Room waiting -swagner check this comment, 20.01.2012
-                                                       
-                                                       //Sync message to 
everybody
-                                                       
sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
-
-                                               } else {
-                                                       // The current User is 
not a Teacher/Admin or
-                                                       // whatever Role that 
should get the Moderation
-                                                       
currentClient.setIsMod(false);
-                                               }
-                                       }
-                               }
-
+                       if (isSuperModerator) {
+                               // This can be set without checking for 
Moderation Flag
+                               
currentClient.setIsSuperModerator(isSuperModerator);
+                               currentClient.setIsMod(isSuperModerator);
+                       } else {
+                               Room.Right rr = AuthLevelUtil.getRoomRight(u, 
r, r.isAppointment() ? appointmentDao.getByRoom(r.getId()) : null, 
roomClients.size());
+                               currentClient.setIsSuperModerator(rr == 
Room.Right.superModerator);
+                               currentClient.setIsMod(becomeModerator || rr == 
Room.Right.moderator);
+                       }
+                       if (currentClient.getIsMod()) {
                                // Update the Client List
                                sessionManager.updateClientByStreamId(streamid, 
currentClient, false, null);
-                       } else {
-                               // If this is an Appointment then the Moderator 
will be set to the Invitor
-                               Appointment ment = 
appointmentDao.getByRoom(roomId);
-                               Long userIdInRoomClient = 
currentClient.getUserId();
-                               boolean found = false;
-                               boolean moderator_set = false;
-                               if (ment != null) {
-                                       // First check owner who is not in the 
members list
-                                       if 
(ment.getOwner().getId().equals(userIdInRoomClient)) {
-                                               found = true;
-                                               log.debug("User "
-                                                               + 
userIdInRoomClient
-                                                               + " is 
moderator due to flag in MeetingMember record");
-                                               currentClient.setIsMod(true);
-                                               moderator_set = true;
-       
-                                               // Update the Client List
-                                               
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-       
-                                               List<Client> modRoomList = 
sessionManager.getCurrentModeratorByRoom(currentClient.getRoomId());
-       
-                                               // There is a need to send an 
extra Event here, cause at this moment 
-                                               // there could be already 
somebody in the Room waiting
-       
-                                               //Sync message to everybody
-                                               
sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
-                                       }
-                                       if (!found) {
-                                               // Check if current user is set 
to moderator
-                                               for (MeetingMember member : 
ment.getMeetingMembers()) {
-                                                       // only persistent 
users can schedule a meeting
-                                                       // user-id is only set 
for registered users
-                                                       if (member.getUser() != 
null) {
-                                                               
log.debug("checking user " + member.getUser().getFirstname()
-                                                                               
+ " for moderator role - ID : "
-                                                                               
+ member.getUser().getId());
-               
-                                                               if 
(member.getUser().getId().equals(userIdInRoomClient)) {
-                                                                       found = 
true;
-                                                                       
log.debug("User " + userIdInRoomClient+ " is NOT moderator due to flag in 
MeetingMember record");
-                                                                       
currentClient.setIsMod(false);
-                                                                       
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-                                                                       break;
-                                                               }
-                                                       }
-                                               }
-                                       }
-                               }
-                               if (!found) {
-                                       log.debug("User "
-                                                       + userIdInRoomClient
-                                                       + " could not be found 
as MeetingMember -> definitely no moderator");
-                                       currentClient.setIsMod(false);
-                                       
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-                               } else {
-                                       // if current user is part of the 
member list, but moderator
-                                       // couldn't be retrieved : first come, 
first draw!
-                                       if (clientListRoom.size() == 1 && 
!moderator_set) {
-                                               log.debug("");
-                                               currentClient.setIsMod(true);
-
-                                               // Update the Client List
-                                               
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-
-                                               List<Client> modRoomList = 
sessionManager.getCurrentModeratorByRoom(currentClient.getRoomId());
-
-                                               // There is a need to send an 
extra Event here, cause at
-                                               // this moment there could be
-                                               // already somebody in the Room 
waiting
-
-                                               //Sync message to everybody
-                                               
sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
-                                               
-                                               
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-                                       }
-                               }
 
+                               List<Client> modRoomList = 
sessionManager.getCurrentModeratorByRoom(currentClient.getRoomId());
+                               
+                               //Sync message to everybody
+                               
sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
                        }
                        
                        //Sync message to everybody
@@ -1364,7 +1225,7 @@ public class ScopeApplicationAdapter ext
                        // RoomStatus roomStatus = new RoomStatus();
 
                        // FIXME: Rework Client Object to DTOs
-                       roomStatus.setClientList(clientListRoom);
+                       roomStatus.setClientList(roomClients);
                        roomStatus.setBrowserStatus(browserStatus);
 
                        return roomStatus;

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
 Sun Jul 17 05:32:35 2016
@@ -89,6 +89,18 @@ public class Room implements IDataProvid
        public static final int RESTRICTED_TYPE_ID = 3;
        public static final int INTERVIEW_TYPE_ID = 4;
        
+       public enum Right {
+               superModerator
+               , moderator
+               , whiteBoard
+               , share
+               , remoteControl
+               , audio
+               , video
+               , mute
+               , exclusive
+       }
+       
        public enum Type {
                conference(CONFERENCE_TYPE_ID)
                //, audience(2)
@@ -129,6 +141,7 @@ public class Room implements IDataProvid
                        return rt;
                }
        }
+       
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
 Sun Jul 17 05:32:35 2016
@@ -22,49 +22,78 @@ import static org.apache.openmeetings.ut
 
 import java.util.Set;
 
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.room.Room;
+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.openmeetings.db.entity.user.User.Right;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 
 public class AuthLevelUtil {
        private static final Logger log = 
Red5LoggerFactory.getLogger(AuthLevelUtil.class, webAppRootKey);
        
-       private static boolean check(Set<Right> rights, Right level) {
+       private static boolean check(Set<User.Right> rights, User.Right level) {
                boolean result = rights.contains(level);
                log.debug(String.format("Level %s :: %s", level, result ? 
"[GRANTED]" : "[DENIED]"));
                return result;
        }
        
-       public static boolean hasUserLevel(Set<Right> rights) {
-               return check(rights, Right.Room);
+       public static boolean hasUserLevel(Set<User.Right> rights) {
+               return check(rights, User.Right.Room);
        }
 
-       public static boolean hasModLevel(User u, Long groupId) {
-               boolean result = hasAdminLevel(u.getRights());
-               if (!result && groupId != null) {
-                       for (GroupUser ou : u.getGroupUsers()) {
-                               if (groupId.equals(ou.getGroup().getId())) {
-                                       if (ou.isModerator()) {
-                                               result = true;
-                                       }
+       public static Room.Right getRoomRight(User u, Room r, Appointment a, 
int userCount) {
+               Room.Right result = null;
+               if (hasAdminLevel(u.getRights())) {
+                       //admin user get superModerator level, no-one can kick 
him/her
+                       result = Room.Right.superModerator;
+               } else if (r.isAppointment() && a != null) {
+                       // appointment owner is super moderator
+                       if (u.getId().equals(a.getOwner().getId())) {
+                               result = Room.Right.superModerator;
+                       }
+               }
+               if (result == null) {
+                       if (!r.isModerated() && 1 == userCount) {
+                               //room is not moderated, first user is 
moderator!
+                               result = Room.Right.moderator;
+                       }
+                       //performing loop here to set possible 'superModerator' 
right
+                       for (RoomModerator rm : r.getModerators()) {
+                               if (u.getId().equals(rm.getUser().getId())) {
+                                       result = rm.isSuperModerator() ? 
Room.Right.superModerator : Room.Right.moderator;
                                        break;
                                }
                        }
+                       //no need to loop if client is moderator
+                       if (result == null && !r.getRoomGroups().isEmpty()) {
+                               for (RoomGroup rg : r.getRoomGroups()) {
+                                       for (GroupUser gu : u.getGroupUsers()) {
+                                               if 
(gu.getGroup().getId().equals(rg.getGroup().getId()) && gu.isModerator()) {
+                                                       result = 
Room.Right.moderator;
+                                                       break;
+                                               }
+                                       }
+                                       if (result != null) {
+                                               break;
+                                       }
+                               }
+                       }
                }
                return result;
        }
 
-       public static boolean hasAdminLevel(Set<Right> rights) {
-               return check(rights, Right.Admin);
+       public static boolean hasAdminLevel(Set<User.Right> rights) {
+               return check(rights, User.Right.Admin);
        }
 
-       public static boolean hasWebServiceLevel(Set<Right> rights) {
-               return check(rights, Right.Soap);
+       public static boolean hasWebServiceLevel(Set<User.Right> rights) {
+               return check(rights, User.Right.Soap);
        }
 
-       public static boolean hasLoginLevel(Set<Right> rights) {
-               return check(rights, Right.Login);
+       public static boolean hasLoginLevel(Set<User.Right> rights) {
+               return check(rights, User.Right.Login);
        }
 }

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
 Sun Jul 17 05:32:35 2016
@@ -41,7 +41,6 @@ import java.net.URI;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.commons.codec.binary.Hex;
 import org.apache.openmeetings.screen.webstart.gui.ScreenSharerFrame;
 import org.red5.client.net.rtmp.INetStreamEventHandler;
 import org.red5.io.utils.ObjectMap;

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
 Sun Jul 17 05:32:35 2016
@@ -86,27 +86,6 @@ public class ConferenceService {
        }
 
        /**
-        * gets all rooms of an group TODO:check if the requesting user is
-        * also member of that group
-        * 
-        * @param SID
-        * @param groupId
-        * @return - all rooms of an group
-        */
-       public SearchResult<RoomGroup> getRoomsByGroup(String SID,
-                       long groupId, int start, int max, String orderby,
-                       boolean asc) {
-
-               log.debug("getRoomsByGroup");
-
-               Long userId = sessiondataDao.check(SID);
-               if (AuthLevelUtil.hasModLevel(userDao.get(userId), groupId)) {
-                       return roomManager.getRoomGroupByGroupId(groupId, 
start, max, orderby, asc);
-               }
-               return null;
-       }
-
-       /**
         * get a List of all public availible rooms (non-appointments)
         * 
         * @param SID

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 Sun Jul 17 05:32:35 2016
@@ -49,14 +49,13 @@ import org.apache.openmeetings.db.dao.se
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.dto.room.BrowserStatus;
 import org.apache.openmeetings.db.dto.room.RoomStatus;
-import org.apache.openmeetings.db.entity.calendar.Appointment;
-import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.log.ConferenceLog;
 import org.apache.openmeetings.db.entity.room.Client;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.server.Server;
 import org.apache.openmeetings.db.entity.user.User;
+import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.openmeetings.util.CalendarPatterns;
 import org.apache.openmeetings.util.InitializationContainer;
 import org.apache.openmeetings.util.OmFileHelper;
@@ -1126,184 +1125,46 @@ public class ScopeApplicationAdapter ext
 
                        currentClient.setUsercolor(colorObj);
 
+                       User u = userDao.get(currentClient.getUserId());
                        // Inject externalUserId if nothing is set yet
-                       if (currentClient.getExternalUserId() == null) {
-                               if (currentClient.getUserId() != null) {
-                                       User us = 
userDao.get(currentClient.getUserId());
-                                       if (us != null) {
-                                               
currentClient.setExternalUserId(us.getExternalId());
-                                               
currentClient.setExternalUserType(us.getExternalType());
-                                       }
-                               }
+                       if (currentClient.getExternalUserId() == null && u != 
null) {
+                               
currentClient.setExternalUserId(u.getExternalId());
+                               
currentClient.setExternalUserType(u.getExternalType());
                        }
 
-                       // This can be set without checking for Moderation Flag
-                       currentClient.setIsSuperModerator(isSuperModerator);
-
-                       sessionManager.updateClientByStreamId(streamid, 
currentClient, true, null);
-
-                       Room room = roomDao.get(roomId);
-                       if (!room.isHidden(RoomElement.MicrophoneStatus)) {
+                       Room r = roomDao.get(roomId);
+                       if (!r.isHidden(RoomElement.MicrophoneStatus)) {
                                currentClient.setCanGiveAudio(true);
                        }
-
+                       sessionManager.updateClientByStreamId(streamid, 
currentClient, true, null); // first save to get valid room count
                        // Log the User
                        conferenceLogDao.add(ConferenceLog.Type.roomEnter,
                                        currentClient.getUserId(), streamid, 
roomId,
                                        currentClient.getUserip(), "");
                        
                        // Check for Moderation LogicalRoom ENTER
-                       List<Client> clientListRoom = 
sessionManager.getClientListByRoom(roomId);
+                       List<Client> roomClients = 
sessionManager.getClientListByRoom(roomId);
 
                        // Return Object
                        RoomStatus roomStatus = new RoomStatus();
                        // appointed meeting or moderated Room? => Check Max 
Users first
-
-                       // default logic for non regular rooms
-                       if (!room.isAppointment()) {
-                               if (room.isModerated()) {
-                                       // if this is a Moderated Room then the 
Room can be only
-                                       // locked off by the Moderator Bit
-                                       // List<RoomClient> 
clientModeratorListRoom =
-                                       // 
this.sessionManager.getCurrentModeratorByRoom(roomId);
-
-                                       // If there is no Moderator yet we have 
to check if the
-                                       // current User has the Bit set to true 
to
-                                       // become one, otherwise he won't get 
Moderation and has to
-                                       // wait
-                                       if (becomeModerator) {
-                                               currentClient.setIsMod(true);
-
-                                               // There is a need to send an 
extra Event here, cause at
-                                               // this moment there could be
-                                               // already somebody in the Room 
waiting
-
-                                               // Update the Client List
-                                               
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-
-                                               List<Client> modRoomList = 
sessionManager.getCurrentModeratorByRoom(currentClient.getRoomId());
-                                               
-                                               //Sync message to everybody
-                                               
sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
-                                       } else {
-                                               // The current User is not a 
Teacher/Admin or whatever
-                                               // Role that should get the
-                                               // Moderation
-                                               currentClient.setIsMod(false);
-                                       }
-                               } else {
-                                       // If this is a normal Room Moderator 
rules : first come, first draw ;-)
-                                       log.debug("setRoomValues : Room"
-                                                       + roomId
-                                                       + " not appointed! 
Moderator rules : first come, first draw ;-)");
-                                       if (clientListRoom.size() == 1) {
-                                               log.debug("Room is empty so set 
this user to be moderation role");
-                                               currentClient.setIsMod(true);
-                                       } else {
-                                               log.debug("Room is already 
somebody so set this user not to be moderation role");
-
-                                               if (becomeModerator) {
-                                                       
currentClient.setIsMod(true);
-
-                                                       // Update the Client 
List
-                                                       
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-
-                                                       List<Client> 
modRoomList = 
sessionManager.getCurrentModeratorByRoom(currentClient.getRoomId());
-
-                                                       // There is a need to 
send an extra Event here,
-                                                       // cause at this moment 
there could be
-                                                       // already somebody in 
the Room waiting -swagner check this comment, 20.01.2012
-                                                       
-                                                       //Sync message to 
everybody
-                                                       
sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
-
-                                               } else {
-                                                       // The current User is 
not a Teacher/Admin or
-                                                       // whatever Role that 
should get the Moderation
-                                                       
currentClient.setIsMod(false);
-                                               }
-                                       }
-                               }
-
+                       if (isSuperModerator) {
+                               // This can be set without checking for 
Moderation Flag
+                               
currentClient.setIsSuperModerator(isSuperModerator);
+                               currentClient.setIsMod(isSuperModerator);
+                       } else {
+                               Room.Right rr = AuthLevelUtil.getRoomRight(u, 
r, r.isAppointment() ? appointmentDao.getByRoom(r.getId()) : null, 
roomClients.size());
+                               currentClient.setIsSuperModerator(rr == 
Room.Right.superModerator);
+                               currentClient.setIsMod(becomeModerator || rr == 
Room.Right.moderator);
+                       }
+                       if (currentClient.getIsMod()) {
                                // Update the Client List
                                sessionManager.updateClientByStreamId(streamid, 
currentClient, false, null);
-                       } else {
-                               // If this is an Appointment then the Moderator 
will be set to the Invitor
-                               Appointment ment = 
appointmentDao.getByRoom(roomId);
-                               Long userIdInRoomClient = 
currentClient.getUserId();
-                               boolean found = false;
-                               boolean moderator_set = false;
-                               if (ment != null) {
-                                       // First check owner who is not in the 
members list
-                                       if 
(ment.getOwner().getId().equals(userIdInRoomClient)) {
-                                               found = true;
-                                               log.debug("User "
-                                                               + 
userIdInRoomClient
-                                                               + " is 
moderator due to flag in MeetingMember record");
-                                               currentClient.setIsMod(true);
-                                               moderator_set = true;
-       
-                                               // Update the Client List
-                                               
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-       
-                                               List<Client> modRoomList = 
sessionManager.getCurrentModeratorByRoom(currentClient.getRoomId());
-       
-                                               // There is a need to send an 
extra Event here, cause at this moment 
-                                               // there could be already 
somebody in the Room waiting
-       
-                                               //Sync message to everybody
-                                               
sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
-                                       }
-                                       if (!found) {
-                                               // Check if current user is set 
to moderator
-                                               for (MeetingMember member : 
ment.getMeetingMembers()) {
-                                                       // only persistent 
users can schedule a meeting
-                                                       // user-id is only set 
for registered users
-                                                       if (member.getUser() != 
null) {
-                                                               
log.debug("checking user " + member.getUser().getFirstname()
-                                                                               
+ " for moderator role - ID : "
-                                                                               
+ member.getUser().getId());
-               
-                                                               if 
(member.getUser().getId().equals(userIdInRoomClient)) {
-                                                                       found = 
true;
-                                                                       
log.debug("User " + userIdInRoomClient+ " is NOT moderator due to flag in 
MeetingMember record");
-                                                                       
currentClient.setIsMod(false);
-                                                                       
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-                                                                       break;
-                                                               }
-                                                       }
-                                               }
-                                       }
-                               }
-                               if (!found) {
-                                       log.debug("User "
-                                                       + userIdInRoomClient
-                                                       + " could not be found 
as MeetingMember -> definitely no moderator");
-                                       currentClient.setIsMod(false);
-                                       
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-                               } else {
-                                       // if current user is part of the 
member list, but moderator
-                                       // couldn't be retrieved : first come, 
first draw!
-                                       if (clientListRoom.size() == 1 && 
!moderator_set) {
-                                               log.debug("");
-                                               currentClient.setIsMod(true);
-
-                                               // Update the Client List
-                                               
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-
-                                               List<Client> modRoomList = 
sessionManager.getCurrentModeratorByRoom(currentClient.getRoomId());
-
-                                               // There is a need to send an 
extra Event here, cause at
-                                               // this moment there could be
-                                               // already somebody in the Room 
waiting
-
-                                               //Sync message to everybody
-                                               
sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
-                                               
-                                               
sessionManager.updateClientByStreamId(streamid, currentClient, false, null);
-                                       }
-                               }
 
+                               List<Client> modRoomList = 
sessionManager.getCurrentModeratorByRoom(currentClient.getRoomId());
+                               
+                               //Sync message to everybody
+                               
sendMessageToCurrentScope("setNewModeratorByList", modRoomList, false);
                        }
                        
                        //Sync message to everybody
@@ -1319,7 +1180,7 @@ public class ScopeApplicationAdapter ext
                        // RoomStatus roomStatus = new RoomStatus();
 
                        // FIXME: Rework Client Object to DTOs
-                       roomStatus.setClientList(clientListRoom);
+                       roomStatus.setClientList(roomClients);
                        roomStatus.setBrowserStatus(browserStatus);
 
                        return roomStatus;
@@ -1482,10 +1343,9 @@ public class ScopeApplicationAdapter ext
         * @param whiteboardObjParam - array of parameters being sended to 
whiteboard
         * @param whiteboardId - id of whiteboard parameters will be send to
         */
-       @SuppressWarnings({ "rawtypes", "unchecked" })
-       public int sendVarsByWhiteboardId(ArrayList whiteboardObjParam, Long 
whiteboardId) {
+       public int sendVarsByWhiteboardId(List<?> whiteboardObjParam, Long 
whiteboardId) {
                try {
-                       Map whiteboardObj = new HashMap();
+                       Map<Integer, Object> whiteboardObj = new HashMap<>();
                        int i = 0;
                        for (Object obj : whiteboardObjParam) {
                                whiteboardObj.put(i++, obj);
@@ -1508,15 +1368,16 @@ public class ScopeApplicationAdapter ext
 
                        if (action.equals("deleteMindMapNodes")) {
                                // Simulate Single Delete Events for z-Index
-                               List actionObject = (List) whiteboardObj.get(3);
+                               List<?> actionObject = (List<?>) 
whiteboardObj.get(3);
 
-                               List<List> itemObjects = (List) 
actionObject.get(3);
+                               @SuppressWarnings("unchecked")
+                               List<List<?>> itemObjects = (List<List<?>>) 
actionObject.get(3);
 
-                               Map whiteboardTempObj = new HashMap();
+                               Map<Integer, Object> whiteboardTempObj = new 
HashMap<>();
                                whiteboardTempObj.put(2, "delete");
 
-                               for (List itemObject : itemObjects) {
-                                       List<Object> tempActionObject = new 
LinkedList<Object>();
+                               for (List<?> itemObject : itemObjects) {
+                                       List<Object> tempActionObject = new 
ArrayList<>();
                                        tempActionObject.add("mindmapnode");
                                        
tempActionObject.add(itemObject.get(0)); // z-Index -8
                                        tempActionObject.add(null); // simulate 
-7
@@ -1624,7 +1485,7 @@ public class ScopeApplicationAdapter ext
         * wrapper method
         * @param newMessage
         */
-       public void sendMessageToMembers(Object newMessage) {
+       public void sendMessageToMembers(List<?> newMessage) {
                //Sync to all users of current scope
                sendMessageToCurrentScope("sendVarsToMessage", newMessage, 
false);
        }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
 Sun Jul 17 05:32:35 2016
@@ -94,6 +94,18 @@ public class Room implements IDataProvid
        public static final int RESTRICTED_TYPE_ID = 3;
        public static final int INTERVIEW_TYPE_ID = 4;
        
+       public enum Right {
+               superModerator
+               , moderator
+               , whiteBoard
+               , share
+               , remoteControl
+               , audio
+               , video
+               , mute
+               , exclusive
+       }
+       
        @XmlType(namespace="org.apache.openmeetings.room.element")
        public enum RoomElement {
                TopBar
@@ -146,6 +158,7 @@ public class Room implements IDataProvid
                        return rt;
                }
        }
+       
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
 Sun Jul 17 05:32:35 2016
@@ -22,49 +22,78 @@ import static org.apache.openmeetings.ut
 
 import java.util.Set;
 
+import org.apache.openmeetings.db.entity.calendar.Appointment;
+import org.apache.openmeetings.db.entity.room.Room;
+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.openmeetings.db.entity.user.User.Right;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 
 public class AuthLevelUtil {
        private static final Logger log = 
Red5LoggerFactory.getLogger(AuthLevelUtil.class, webAppRootKey);
        
-       private static boolean check(Set<Right> rights, Right level) {
+       private static boolean check(Set<User.Right> rights, User.Right level) {
                boolean result = rights.contains(level);
                log.debug(String.format("Level %s :: %s", level, result ? 
"[GRANTED]" : "[DENIED]"));
                return result;
        }
        
-       public static boolean hasUserLevel(Set<Right> rights) {
-               return check(rights, Right.Room);
+       public static boolean hasUserLevel(Set<User.Right> rights) {
+               return check(rights, User.Right.Room);
        }
 
-       public static boolean hasModLevel(User u, Long groupId) {
-               boolean result = hasAdminLevel(u.getRights());
-               if (!result && groupId != null) {
-                       for (GroupUser ou : u.getGroupUsers()) {
-                               if (groupId.equals(ou.getGroup().getId())) {
-                                       if (ou.isModerator()) {
-                                               result = true;
-                                       }
+       public static Room.Right getRoomRight(User u, Room r, Appointment a, 
int userCount) {
+               Room.Right result = null;
+               if (hasAdminLevel(u.getRights())) {
+                       //admin user get superModerator level, no-one can kick 
him/her
+                       result = Room.Right.superModerator;
+               } else if (r.isAppointment() && a != null) {
+                       // appointment owner is super moderator
+                       if (u.getId().equals(a.getOwner().getId())) {
+                               result = Room.Right.superModerator;
+                       }
+               }
+               if (result == null) {
+                       if (!r.isModerated() && 1 == userCount) {
+                               //room is not moderated, first user is 
moderator!
+                               result = Room.Right.moderator;
+                       }
+                       //performing loop here to set possible 'superModerator' 
right
+                       for (RoomModerator rm : r.getModerators()) {
+                               if (u.getId().equals(rm.getUser().getId())) {
+                                       result = rm.isSuperModerator() ? 
Room.Right.superModerator : Room.Right.moderator;
                                        break;
                                }
                        }
+                       //no need to loop if client is moderator
+                       if (result == null && !r.getRoomGroups().isEmpty()) {
+                               for (RoomGroup rg : r.getRoomGroups()) {
+                                       for (GroupUser gu : u.getGroupUsers()) {
+                                               if 
(gu.getGroup().getId().equals(rg.getGroup().getId()) && gu.isModerator()) {
+                                                       result = 
Room.Right.moderator;
+                                                       break;
+                                               }
+                                       }
+                                       if (result != null) {
+                                               break;
+                                       }
+                               }
+                       }
                }
                return result;
        }
 
-       public static boolean hasAdminLevel(Set<Right> rights) {
-               return check(rights, Right.Admin);
+       public static boolean hasAdminLevel(Set<User.Right> rights) {
+               return check(rights, User.Right.Admin);
        }
 
-       public static boolean hasWebServiceLevel(Set<Right> rights) {
-               return check(rights, Right.Soap);
+       public static boolean hasWebServiceLevel(Set<User.Right> rights) {
+               return check(rights, User.Right.Soap);
        }
 
-       public static boolean hasLoginLevel(Set<Right> rights) {
-               return check(rights, Right.Login);
+       public static boolean hasLoginLevel(Set<User.Right> rights) {
+               return check(rights, User.Right.Login);
        }
 }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-screenshare/src/main/java/org/apache/openmeetings/screen/webstart/CoreScreenShare.java
 Sun Jul 17 05:32:35 2016
@@ -41,7 +41,6 @@ import java.net.URI;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.commons.codec.binary.Hex;
 import org.apache.openmeetings.screen.webstart.gui.ScreenSharerFrame;
 import org.red5.client.net.rtmp.INetStreamEventHandler;
 import org.red5.io.utils.ObjectMap;

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
 Sun Jul 17 05:32:35 2016
@@ -43,10 +43,10 @@ import org.apache.openmeetings.db.dao.la
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.room.Invitation;
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Type;
 import org.apache.openmeetings.util.InitializationContainer;
-import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.pages.ActivatePage;
 import org.apache.openmeetings.web.pages.MainPage;
 import org.apache.openmeetings.web.pages.NotInitedPage;

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
 Sun Jul 17 05:32:35 2016
@@ -24,6 +24,7 @@ import java.util.Set;
 import java.util.UUID;
 
 import org.apache.openmeetings.db.entity.IDataProviderEntity;
+import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.wicket.protocol.ws.api.registry.IKey;
 
 /**
@@ -34,17 +35,6 @@ import org.apache.wicket.protocol.ws.api
 public class Client implements IDataProviderEntity {
        private static final long serialVersionUID = 1L;
 
-       public enum Right {
-               superModerator
-               , moderator
-               , whiteBoard
-               , share
-               , remoteControl
-               , audio
-               , video
-               , mute
-               , exclusive
-       }
        public enum Activity {
                broadcast
                , share

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 Sun Jul 17 05:32:35 2016
@@ -24,22 +24,26 @@ import static org.apache.openmeetings.we
 import static org.apache.openmeetings.web.app.Application.getRoomClients;
 import static org.apache.openmeetings.web.app.WebSession.getDateFormat;
 import static org.apache.openmeetings.web.app.WebSession.getUserId;
+import static 
org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
+import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
 
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.Arrays;
 import java.util.Calendar;
+import java.util.UUID;
 
+import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
-import org.apache.openmeetings.db.dao.user.GroupUserDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 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.openmeetings.db.util.AuthLevelUtil;
@@ -48,7 +52,6 @@ import org.apache.openmeetings.util.mess
 import org.apache.openmeetings.util.message.TextRoomMessage;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.BasePanel;
 import org.apache.openmeetings.web.room.activities.ActivitiesPanel;
@@ -72,6 +75,7 @@ import org.apache.wicket.protocol.ws.api
 import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry;
 import org.apache.wicket.protocol.ws.api.registry.PageIdKey;
 import org.apache.wicket.protocol.ws.concurrent.Executor;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.red5.logging.Red5LoggerFactory;
@@ -91,6 +95,7 @@ public class RoomPanel extends BasePanel
        private static final Logger log = 
Red5LoggerFactory.getLogger(RoomPanel.class, webAppRootKey);
        private static final String ACCESS_DENIED_ID = "access-denied";
        private static final String EVENT_DETAILS_ID = "event-details";
+       private static final String PARAM_WB_ID = "wbId";
        public enum Action {
                kick
                , refresh
@@ -116,6 +121,17 @@ public class RoomPanel extends BasePanel
                        }
                }
        };
+       private final AbstractDefaultAjaxBehavior activeWb = new 
AbstractDefaultAjaxBehavior() {
+               private static final long serialVersionUID = 1L;
+
+               @Override
+               protected void respond(AjaxRequestTarget target) {
+                       long wbId = 
getRequest().getRequestParameters().getParameterValue(PARAM_WB_ID).toLong(Long.MIN_VALUE);
+                       if (wbId != Long.MIN_VALUE) {
+                               activeWbId = wbId;
+                       }
+               }
+       };
        private RedirectMessageDialog roomClosed;
        private RoomMenuPanel menu;
        private RoomSidebar sidebar;
@@ -123,6 +139,7 @@ public class RoomPanel extends BasePanel
        private String sharingUser = null;
        private String recordingUser = null;
        private String publishingUser = null; //TODO add
+       private long activeWbId = -1;
        
        public RoomPanel(String id, Room r) {
                super(id);
@@ -153,12 +170,82 @@ public class RoomPanel extends BasePanel
                        @Override
                        public void onDrop(AjaxRequestTarget target, Component 
component) {
                                Object o = component.getDefaultModelObject();
-                               if (o instanceof FileItem) {
+                               if (activeWbId > 0 && o instanceof FileItem) {
+                                       //target.appendJavaScript("");
+                                       /*
+  0: 'swf' 
+  1: «string(223)| 
'http://localhost:5080/openmeetings/DownloadHandler?fileName=97321ad42af97bee825988d3ab9a14fd.swf&moduleName=vi…»
 
+  2: «string(223)| 
'http://localhost:5080/openmeetings/DownloadHandler?fileName=97321ad42af97bee825988d3ab9a14fd.swf&moduleName=vi…»
 
+  3: '97321ad42af97bee825988d3ab9a14fd.swf' 
+  4: 'videoconf1' 
+  5: '/97321ad42af97bee825988d3ab9a14fd' 
+  6: 'files' 
+  7: 'public' 
+  8: 1 
+  9: 0 
+  10: 0 
+  11: 354 
+  12: 590 
+  13: 20 
+  14: 354 
+  15: 590 
+  16: 100 
+  17: '97321ad42af97bee825988d3ab9a14fd.swf1464528901162' 
+  18: 'DR600GW-HD_Manual_EN_WEB_Ver.1.01_140704.pdf' 
+  19: true 
+  20: 1 
+  21: null 
+  22: 0 
+  23: 0 
+  24: 0 
+  25: 354 
+  26: 590 
+  27: 'swfpresentationobject_1464528901162' 
+
+                                        */
+                                       FileItem fi = (FileItem)o;
+                                       int width = 0, height = 0;
+                                       if (fi.getFlvWidth() != null && 
fi.getFlvHeight() != null) {
+                                               width = fi.getFlvWidth();
+                                               height = fi.getFlvHeight();
+                                       }
+                                       String fuid = 
UUID.randomUUID().toString();
+                                       String url = urlFor(new 
RoomSwfResourceReference(), new PageParameters().add("id", 
fi.getId()).add("uid", getClient().getUid())).toString();
+                                       
getBean(ScopeApplicationAdapter.class).sendVarsByWhiteboardId(Arrays.asList(
+                                                       "swf" // 0
+                                                       , url // urlname
+                                                       , "--dummy--" // baseurl
+                                                       , fi.getHash() // 
fileName //3
+                                                       , "--dummy--" // 
moduleName //4
+                                                       , "--dummy--" // 
parentPath //5
+                                                       , "--dummy--" // room 
//6
+                                                       , "--dummy--" // domain 
//7
+                                                       , 1 // slideNumber //8
+                                                       , 0 // innerx //9
+                                                       , 0 // innery //10
+                                                       , width // innerwidth 
//11
+                                                       , height // innerheight 
//12
+                                                       , 20 // zoomlevel //13
+                                                       , width // initwidth 
//14
+                                                       , height // initheight 
//15
+                                                       , 100 // currentzoom 
//16 FIXME TODO
+                                                       , fuid // 
uniquObjectSyncName //17
+                                                       , fi.getName() // 
standardFileName //18
+                                                       , true // fullFit //19 
FIXME TODO
+                                                       , 1 // zIndex //-8 
FIXME TODO
+                                                       , null //-7
+                                                       , 0 // this.counter 
//-6 FIXME TODO
+                                                       , 0 // posx //-5
+                                                       , 0 // posy //-4
+                                                       , width // width //-3
+                                                       , height // height //-2
+                                                       , fuid // 
this.currentlayer.name //-1
+                                                       ), activeWbId);
                                }
                        }
                };
                room.add(wbArea.add(new SwfPanel("whiteboard", r.getId(), 
getClient().getUid())));
-               room.add(aab);
+               room.add(aab, activeWb);
                room.add(sidebar = new RoomSidebar("sidebar", this));
                room.add(activities = new ActivitiesPanel("activities", this));
                add(roomClosed = new RedirectMessageDialog("room-closed", 
"1098", r.isClosed(), r.getRedirectURL()));
@@ -338,31 +425,9 @@ public class RoomPanel extends BasePanel
                        Client c = getClient();
                        addUserToRoom(c.setRoomId(getRoom().getId()));
                        User u = getBean(UserDao.class).get(getUserId());
-                       if (AuthLevelUtil.hasAdminLevel(u.getRights())) {
-                               //admin user get superModerator level, no-one 
can kick him/her
-                               c.getRights().add(Right.superModerator);
-                       } else {
-                               if (!r.isModerated() && 1 == 
getRoomClients(r.getId()).size()) {
-                                       //room is not moderated, first user is 
moderator!
-                                       c.getRights().add(Right.moderator);
-                               }
-                               //performing loop here to set possible 
'superModerator' right
-                               for (RoomModerator rm : r.getModerators()) {
-                                       if 
(getUserId().equals(rm.getUser().getId())) {
-                                               
c.getRights().add(rm.isSuperModerator() ? Right.superModerator : 
Right.moderator);
-                                               break;
-                                       }
-                               }
-                               //no need to loop if client is moderator
-                               if (!c.hasRight(Right.moderator) && 
!r.getRoomGroups().isEmpty()) {
-                                       for (RoomGroup rg : r.getRoomGroups()) {
-                                               GroupUser gu = 
getBean(GroupUserDao.class).getByGroupAndUser(rg.getGroup().getId(), 
getUserId());
-                                               if (gu.isModerator()) {
-                                                       
c.getRights().add(Right.moderator);
-                                                       break;
-                                               }
-                                       }
-                               }
+                       Right rr = AuthLevelUtil.getRoomRight(u, r, 
r.isAppointment() ? getBean(AppointmentDao.class).getByRoom(r.getId()) : null, 
getRoomClients(r.getId()).size());
+                       if (rr != null) {
+                               c.getRights().add(rr);
                        }
                }
        }
@@ -392,7 +457,7 @@ public class RoomPanel extends BasePanel
                return hasRight(userId, roomId, Right.moderator);
        }
        
-       public static boolean hasRight(long userId, long roomId, Client.Right 
r) {
+       public static boolean hasRight(long userId, long roomId, Right r) {
                for (Client c : getRoomClients(roomId)) {
                        if (c.getUserId().equals(userId) && c.hasRight(r)) {
                                return true;
@@ -442,10 +507,11 @@ public class RoomPanel extends BasePanel
                response.render(new 
PriorityHeaderItem(JavaScriptHeaderItem.forReference(newResourceReference())));
                if (room.isVisible()) {
                        
response.render(OnDomReadyHeaderItem.forScript(aab.getCallbackScript()));
+                       response.render(new 
PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction("setActiveWbId",
 activeWb, explicit(PARAM_WB_ID)), "setActiveWbId")));
                }
        }
 
-       public void requestRight(AjaxRequestTarget target, Client.Right right) {
+       public void requestRight(AjaxRequestTarget target, Right right) {
                RoomMessage.Type reqType = null;
                switch (right) {
                        case moderator:
@@ -510,7 +576,7 @@ public class RoomPanel extends BasePanel
        public boolean screenShareAllowed() {
                Room r = getRoom();
                return Room.Type.interview != r.getType() && 
!r.isHidden(RoomElement.ScreenSharing)
-                               && r.isAllowRecording() && 
getClient().hasRight(Client.Right.share) && getSharingUser() == null;
+                               && r.isAllowRecording() && 
getClient().hasRight(Right.share) && getSharingUser() == null;
        }
        
        public RoomSidebar getSidebar() {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
 Sun Jul 17 05:32:35 2016
@@ -33,12 +33,12 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.util.message.RoomMessage;
 import org.apache.openmeetings.util.message.TextRoomMessage;
 import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.common.BasePanel;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.wicket.Component;
@@ -93,13 +93,13 @@ public class ActivitiesPanel extends Bas
                                                        remove(id, target);
                                                        break;
                                                case decline:
-                                                       if 
(room.getClient().hasRight(Client.Right.moderator)) {
+                                                       if 
(room.getClient().hasRight(Right.moderator)) {
                                                                broadcast(new 
TextRoomMessage(room.getRoom().getId(), getUserId(), 
RoomMessage.Type.activityRemove, id));
                                                        }
                                                        break;
                                                case accept:
                                                        Client client = 
getOnlineClient(a.getUid());
-                                                       if 
(room.getClient().hasRight(Client.Right.moderator) && client != null && roomId 
== client.getRoomId()) {
+                                                       if 
(room.getClient().hasRight(Right.moderator) && client != null && roomId == 
client.getRoomId()) {
                                                                switch 
(a.getType()) {
                                                                        case 
reqRightModerator:
                                                                                
broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), 
RoomMessage.Type.activityRemove, id));
@@ -152,7 +152,7 @@ public class ActivitiesPanel extends Bas
                                case reqRightAv:
                                case reqRightMute:
                                case reqRightExclusive:
-                                       if 
(room.getClient().hasRight(Client.Right.moderator)) {
+                                       if 
(room.getClient().hasRight(Right.moderator)) {
                                                accept.setVisible(true);
                                                decline.setVisible(true);
                                                break;

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 Sun Jul 17 05:32:35 2016
@@ -38,7 +38,6 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.room.RoomPoll;
 import org.apache.openmeetings.db.entity.user.User;
-import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.util.message.RoomMessage;
 import org.apache.openmeetings.util.message.TextRoomMessage;
 import org.apache.openmeetings.web.app.Application;
@@ -87,7 +86,7 @@ public class RoomMenuPanel extends Panel
                }
                @Override
                public void onClick(AjaxRequestTarget target) {
-                       room.requestRight(target, Client.Right.moderator);
+                       room.requestRight(target, Room.Right.moderator);
                }
        };
        private final RoomPanel room;
@@ -168,7 +167,7 @@ public class RoomMenuPanel extends Panel
 
                @Override
                public void onClick(AjaxRequestTarget target) {
-                       pollResults.updateModel(target, 
room.getClient().hasRight(Client.Right.moderator));
+                       pollResults.updateModel(target, 
room.getClient().hasRight(Room.Right.moderator));
                        pollResults.open(target);
                }
        };
@@ -266,15 +265,15 @@ public class RoomMenuPanel extends Panel
                exitMenuItem.setEnabled(notExternalUser);//TODO check this
                filesMenu.setEnabled(room.getSidebar().isShowFiles());
                actionsMenu.setEnabled(!r.isHidden(RoomElement.ActionMenu) && 
r.isAllowUserQuestions());
-               boolean moder = 
room.getClient().hasRight(Client.Right.moderator);
+               boolean moder = room.getClient().hasRight(Room.Right.moderator);
                inviteMenuItem.setEnabled(notExternalUser && moder);
                //TODO add check "sharing started"
                boolean shareVisible = room.screenShareAllowed();
                shareMenuItem.setEnabled(shareVisible);
                //FIXME TODO apply* should be enabled if moder is in room
                applyModerMenuItem.setEnabled(!moder);
-               
applyWbMenuItem.setEnabled(!room.getClient().hasRight(Client.Right.whiteBoard));
-               
applyAvMenuItem.setEnabled(!room.getClient().hasRight(Client.Right.audio) || 
!room.getClient().hasRight(Client.Right.video));
+               
applyWbMenuItem.setEnabled(!room.getClient().hasRight(Room.Right.whiteBoard));
+               
applyAvMenuItem.setEnabled(!room.getClient().hasRight(Room.Right.audio) || 
!room.getClient().hasRight(Room.Right.video));
                pollCreateMenuItem.setEnabled(moder);
                pollVoteMenuItem.setEnabled(pollExists && notExternalUser && 
!pollDao.hasVoted(r.getId(), getUserId()));
                pollResultMenuItem.setEnabled(pollExists || 
pollDao.getArchived(r.getId()).size() > 0);
@@ -317,7 +316,7 @@ public class RoomMenuPanel extends Panel
        }
        
        public void exit(IPartialPageRequestHandler handler) {
-               if (WebSession.getRights().contains(Right.Dashboard)) {
+               if (WebSession.getRights().contains(User.Right.Dashboard)) {
                        roomExit(room, false);
                        room.getMainPage().updateContents(ROOMS_PUBLIC, 
handler);
                } else {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java
 Sun Jul 17 05:32:35 2016
@@ -22,10 +22,10 @@ import static org.apache.openmeetings.we
 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.Right;
 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.openmeetings.web.room.sidebar.icon.KickRightIcon;
 import org.apache.openmeetings.web.room.sidebar.icon.RefreshIcon;

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
 Sun Jul 17 05:32:35 2016
@@ -27,9 +27,9 @@ import static org.apache.wicket.ajax.att
 import java.util.ArrayList;
 import java.util.Arrays;
 
+import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 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.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java
 Sun Jul 17 05:32:35 2016
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon;
 
+import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class AudioRightIcon extends RoomRightIcon {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ExclusiveRightIcon.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ExclusiveRightIcon.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ExclusiveRightIcon.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ExclusiveRightIcon.java
 Sun Jul 17 05:32:35 2016
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon;
 
+import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class ExclusiveRightIcon extends RoomRightIcon {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/KickRightIcon.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/KickRightIcon.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/KickRightIcon.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/KickRightIcon.java
 Sun Jul 17 05:32:35 2016
@@ -20,8 +20,8 @@ package org.apache.openmeetings.web.room
 
 import static org.apache.openmeetings.web.room.sidebar.RoomSidebar.FUNC_ACTION;
 
+import org.apache.openmeetings.db.entity.room.Room.Right;
 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.openmeetings.web.room.RoomPanel.Action;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
 Sun Jul 17 05:32:35 2016
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon;
 
+import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class ModeratorRightIcon extends RoomRightIcon {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/MuteRightIcon.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/MuteRightIcon.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/MuteRightIcon.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/MuteRightIcon.java
 Sun Jul 17 05:32:35 2016
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon;
 
+import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class MuteRightIcon extends RoomRightIcon {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RefreshIcon.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RefreshIcon.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RefreshIcon.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RefreshIcon.java
 Sun Jul 17 05:32:35 2016
@@ -20,8 +20,8 @@ package org.apache.openmeetings.web.room
 
 import static org.apache.openmeetings.web.room.sidebar.RoomSidebar.FUNC_ACTION;
 
+import org.apache.openmeetings.db.entity.room.Room.Right;
 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.openmeetings.web.room.RoomPanel.Action;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java
 Sun Jul 17 05:32:35 2016
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon;
 
+import org.apache.openmeetings.db.entity.room.Room.Right;
 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.core.request.handler.IPartialPageRequestHandler;
 

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java
 Sun Jul 17 05:32:35 2016
@@ -20,8 +20,8 @@ package org.apache.openmeetings.web.room
 
 import static 
org.apache.openmeetings.web.room.sidebar.RoomSidebar.FUNC_CHANGE_RIGHT;
 
+import org.apache.openmeetings.db.entity.room.Room.Right;
 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;

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java
 Sun Jul 17 05:32:35 2016
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon;
 
+import org.apache.openmeetings.db.entity.room.Room.Right;
 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.core.request.handler.IPartialPageRequestHandler;
 

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java
 Sun Jul 17 05:32:35 2016
@@ -18,8 +18,8 @@
  */
 package org.apache.openmeetings.web.room.sidebar.icon;
 
+import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class VideoRightIcon extends RoomRightIcon {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java
 Sun Jul 17 05:32:35 2016
@@ -19,9 +19,9 @@
 package org.apache.openmeetings.web.room.sidebar.icon;
 
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.web.app.Client;
-import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.room.RoomPanel;
 
 public class WhiteboardRightIcon extends RoomRightIcon {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
 Sun Jul 17 05:32:35 2016
@@ -41,6 +41,7 @@ import org.apache.openmeetings.db.dao.ro
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.basic.ChatMessage;
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.Application;
@@ -229,7 +230,7 @@ public class ChatPanel extends BasePanel
                IWebSocketConnectionRegistry reg = 
WebSocketSettings.Holder.get(Application.get()).getConnectionRegistry();
                for (Client c : getRoomClients(m.getToRoom().getId())) {
                        try {
-                               if (!m.isNeedModeration() || 
(m.isNeedModeration() && c.hasRight(Client.Right.moderator))) {
+                               if (!m.isNeedModeration() || 
(m.isNeedModeration() && c.hasRight(Right.moderator))) {
                                        IWebSocketConnection con = 
reg.getConnection(Application.get(), c.getSessionId(), new 
PageIdKey(c.getPageId()));
                                        if (con != null) {
                                                con.sendMessage(msg);

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java?rev=1753012&r1=1753011&r2=1753012&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
 Sun Jul 17 05:32:35 2016
@@ -86,27 +86,6 @@ public class ConferenceService {
        }
 
        /**
-        * gets all rooms of an group TODO:check if the requesting user is
-        * also member of that group
-        * 
-        * @param SID
-        * @param groupId
-        * @return - all rooms of an group
-        */
-       public SearchResult<RoomGroup> getRoomsByGroup(String SID,
-                       long groupId, int start, int max, String orderby,
-                       boolean asc) {
-
-               log.debug("getRoomsByGroup");
-
-               Long userId = sessiondataDao.check(SID);
-               if (AuthLevelUtil.hasModLevel(userDao.get(userId), groupId)) {
-                       return roomManager.getRoomGroupByGroupId(groupId, 
start, max, orderby, asc);
-               }
-               return null;
-       }
-
-       /**
         * get a List of all public availible rooms (non-appointments)
         * 
         * @param SID


Reply via email to