Author: solomax
Date: Mon Mar  6 04:04:02 2017
New Revision: 1785586

URL: http://svn.apache.org/viewvc?rev=1785586&view=rev
Log:
[OPENMEETINGS-1581] conference room seems to be fixed

Modified:
    
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/basic/Client.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-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.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/basic/Client.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java

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=1785586&r1=1785585&r2=1785586&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
 Mon Mar  6 04:04:02 2017
@@ -1140,9 +1140,9 @@ public class ScopeApplicationAdapter ext
                                client.setIsSuperModerator(isSuperModerator);
                                client.setIsMod(isSuperModerator);
                        } else {
-                               Room.Right rr = AuthLevelUtil.getRoomRight(u, 
r, r.isAppointment() ? appointmentDao.getByRoom(r.getId()) : null, 
roomClients.size());
-                               client.setIsSuperModerator(rr == 
Room.Right.superModerator);
-                               client.setIsMod(becomeModerator || rr == 
Room.Right.moderator);
+                               Set<Room.Right> rr = 
AuthLevelUtil.getRoomRight(u, r, r.isAppointment() ? 
appointmentDao.getByRoom(r.getId()) : null, roomClients.size());
+                               
client.setIsSuperModerator(rr.contains(Room.Right.superModerator));
+                               client.setIsMod(becomeModerator || 
rr.contains(Room.Right.moderator));
                        }
                        if (client.getIsMod()) {
                                // Update the Client List

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java?rev=1785586&r1=1785585&r2=1785586&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
 Mon Mar  6 04:04:02 2017
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.db.entity.basic;
 
+import java.util.Arrays;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;
@@ -132,6 +133,18 @@ public class Client implements IDataProv
                return rights.contains(Right.superModerator) || 
rights.contains(Right.moderator) ? true : rights.contains(right);
        }
 
+       public void allow(Right... _rights) {
+               allow(Arrays.asList(_rights));
+       }
+
+       public void allow(Iterable<Right> _rights) {
+               for (Right right : _rights) {
+                       if (!hasRight(right)) {
+                               rights.add(right);
+                       }
+               }
+       }
+
        public Set<Activity> getActivities() {
                return activities;
        }

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=1785586&r1=1785585&r2=1785586&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
 Mon Mar  6 04:04:02 2017
@@ -20,6 +20,7 @@ package org.apache.openmeetings.db.util;
 
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
+import java.util.HashSet;
 import java.util.Set;
 
 import org.apache.openmeetings.db.entity.calendar.Appointment;
@@ -33,58 +34,62 @@ import org.slf4j.Logger;
 
 public class AuthLevelUtil {
        private static final Logger log = 
Red5LoggerFactory.getLogger(AuthLevelUtil.class, webAppRootKey);
-       
+
        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<User.Right> rights) {
                return check(rights, User.Right.Room);
        }
 
-       public static Room.Right getRoomRight(User u, Room r, Appointment a, 
int userCount) {
-               Room.Right result = null;
+       public static Set<Room.Right> getRoomRight(User u, Room r, Appointment 
a, int userCount) {
+               Set<Room.Right> result = new HashSet<>();
                if (u == null) {
                        return result;
                }
                if (hasAdminLevel(u.getRights())) {
                        //admin user get superModerator level, no-one can kick 
him/her
-                       result = Room.Right.superModerator;
+                       result.add(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;
+                               result.add(Room.Right.superModerator);
                        }
                }
-               if (result == null) {
+               if (result.isEmpty()) {
                        if (!r.isModerated() && 1 == userCount) {
                                //room is not moderated, first user is 
moderator!
-                               result = Room.Right.moderator;
+                               result.add(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;
+                                       result.add(rm.isSuperModerator() ? 
Room.Right.superModerator : Room.Right.moderator);
                                        break;
                                }
                        }
                        //no need to loop if client is moderator
-                       if (result == null && !r.getRoomGroups().isEmpty()) {
+                       if (result.isEmpty() && !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;
+                                                       
result.add(Room.Right.moderator);
                                                        break;
                                                }
                                        }
-                                       if (result != null) {
+                                       if (!result.isEmpty()) {
                                                break;
                                        }
                                }
                        }
                }
+               if (Room.Type.conference == r.getType() && 
!result.contains(Room.Right.video)) {
+                       result.add(Room.Right.audio);
+                       result.add(Room.Right.video);
+               }
                return result;
        }
 

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=1785586&r1=1785585&r2=1785586&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
 Mon Mar  6 04:04:02 2017
@@ -30,6 +30,7 @@ import static org.apache.wicket.ajax.att
 
 import java.util.Calendar;
 import java.util.Map.Entry;
+import java.util.Set;
 import java.util.UUID;
 
 import org.apache.directory.api.util.Strings;
@@ -408,9 +409,9 @@ public class RoomPanel extends BasePanel
                                c.getRights().add(Right.superModerator);
                        } else {
                                //FIXME TODO !!! c.getUser != getUserId
-                               Right rr = 
AuthLevelUtil.getRoomRight(c.getUser(), r, r.isAppointment() ? 
getBean(AppointmentDao.class).getByRoom(r.getId()) : null, 
getRoomClients(r.getId()).size());
-                               if (rr != null) {
-                                       c.getRights().add(rr);
+                               Set<Right> rr = 
AuthLevelUtil.getRoomRight(c.getUser(), r, r.isAppointment() ? 
getBean(AppointmentDao.class).getByRoom(r.getId()) : null, 
getRoomClients(r.getId()).size());
+                               if (!rr.isEmpty()) {
+                                       c.allow(rr);
                                }
                        }
                }
@@ -520,9 +521,7 @@ public class RoomPanel extends BasePanel
        }
 
        public void allowRight(AjaxRequestTarget target, Client client, 
Right... rights) {
-               for (Right right : rights) {
-                       client.getRights().add(right);
-               }
+               client.allow(rights);
                broadcast(target, client);
        }
 

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1785586&r1=1785585&r2=1785586&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 Mon Mar  6 04:04:02 2017
@@ -1140,9 +1140,9 @@ public class ScopeApplicationAdapter ext
                                client.setIsSuperModerator(isSuperModerator);
                                client.setIsMod(isSuperModerator);
                        } else {
-                               Room.Right rr = AuthLevelUtil.getRoomRight(u, 
r, r.isAppointment() ? appointmentDao.getByRoom(r.getId()) : null, 
roomClients.size());
-                               client.setIsSuperModerator(rr == 
Room.Right.superModerator);
-                               client.setIsMod(becomeModerator || rr == 
Room.Right.moderator);
+                               Set<Room.Right> rr = 
AuthLevelUtil.getRoomRight(u, r, r.isAppointment() ? 
appointmentDao.getByRoom(r.getId()) : null, roomClients.size());
+                               
client.setIsSuperModerator(rr.contains(Room.Right.superModerator));
+                               client.setIsMod(becomeModerator || 
rr.contains(Room.Right.moderator));
                        }
                        if (client.getIsMod()) {
                                // Update the Client List

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java?rev=1785586&r1=1785585&r2=1785586&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/basic/Client.java
 Mon Mar  6 04:04:02 2017
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.db.entity.basic;
 
+import java.util.Arrays;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;
@@ -132,6 +133,18 @@ public class Client implements IDataProv
                return rights.contains(Right.superModerator) || 
rights.contains(Right.moderator) ? true : rights.contains(right);
        }
 
+       public void allow(Right... _rights) {
+               allow(Arrays.asList(_rights));
+       }
+
+       public void allow(Iterable<Right> _rights) {
+               for (Right right : _rights) {
+                       if (!hasRight(right)) {
+                               rights.add(right);
+                       }
+               }
+       }
+
        public Set<Activity> getActivities() {
                return activities;
        }

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java?rev=1785586&r1=1785585&r2=1785586&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/AuthLevelUtil.java
 Mon Mar  6 04:04:02 2017
@@ -20,6 +20,7 @@ package org.apache.openmeetings.db.util;
 
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
+import java.util.HashSet;
 import java.util.Set;
 
 import org.apache.openmeetings.db.entity.calendar.Appointment;
@@ -33,58 +34,62 @@ import org.slf4j.Logger;
 
 public class AuthLevelUtil {
        private static final Logger log = 
Red5LoggerFactory.getLogger(AuthLevelUtil.class, webAppRootKey);
-       
+
        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<User.Right> rights) {
                return check(rights, User.Right.Room);
        }
 
-       public static Room.Right getRoomRight(User u, Room r, Appointment a, 
int userCount) {
-               Room.Right result = null;
+       public static Set<Room.Right> getRoomRight(User u, Room r, Appointment 
a, int userCount) {
+               Set<Room.Right> result = new HashSet<>();
                if (u == null) {
                        return result;
                }
                if (hasAdminLevel(u.getRights())) {
                        //admin user get superModerator level, no-one can kick 
him/her
-                       result = Room.Right.superModerator;
+                       result.add(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;
+                               result.add(Room.Right.superModerator);
                        }
                }
-               if (result == null) {
+               if (result.isEmpty()) {
                        if (!r.isModerated() && 1 == userCount) {
                                //room is not moderated, first user is 
moderator!
-                               result = Room.Right.moderator;
+                               result.add(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;
+                                       result.add(rm.isSuperModerator() ? 
Room.Right.superModerator : Room.Right.moderator);
                                        break;
                                }
                        }
                        //no need to loop if client is moderator
-                       if (result == null && !r.getRoomGroups().isEmpty()) {
+                       if (result.isEmpty() && !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;
+                                                       
result.add(Room.Right.moderator);
                                                        break;
                                                }
                                        }
-                                       if (result != null) {
+                                       if (!result.isEmpty()) {
                                                break;
                                        }
                                }
                        }
                }
+               if (Room.Type.conference == r.getType() && 
!result.contains(Room.Right.video)) {
+                       result.add(Room.Right.audio);
+                       result.add(Room.Right.video);
+               }
                return result;
        }
 

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java?rev=1785586&r1=1785585&r2=1785586&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
 Mon Mar  6 04:04:02 2017
@@ -30,6 +30,7 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.Calendar;
 import java.util.Map.Entry;
+import java.util.Set;
 import java.util.UUID;
 
 import org.apache.directory.api.util.Strings;
@@ -420,9 +421,9 @@ public class RoomPanel extends BasePanel
                                c.getRights().add(Right.superModerator);
                        } else {
                                //FIXME TODO !!! c.getUser != getUserId
-                               Right rr = 
AuthLevelUtil.getRoomRight(c.getUser(), r, r.isAppointment() ? 
getBean(AppointmentDao.class).getByRoom(r.getId()) : null, 
getRoomClients(r.getId()).size());
-                               if (rr != null) {
-                                       c.getRights().add(rr);
+                               Set<Right> rr = 
AuthLevelUtil.getRoomRight(c.getUser(), r, r.isAppointment() ? 
getBean(AppointmentDao.class).getByRoom(r.getId()) : null, 
getRoomClients(r.getId()).size());
+                               if (!rr.isEmpty()) {
+                                       c.allow(rr);
                                }
                        }
                }
@@ -531,9 +532,7 @@ public class RoomPanel extends BasePanel
        }
 
        public void allowRight(AjaxRequestTarget target, Client client, 
Right... rights) {
-               for (Right right : rights) {
-                       client.getRights().add(right);
-               }
+               client.allow(rights);
                broadcast(target, client);
        }
 


Reply via email to