Author: solomax
Date: Sun Apr 17 17:08:47 2016
New Revision: 1739633

URL: http://svn.apache.org/viewvc?rev=1739633&view=rev
Log:
[OPENMEETINGS-896] room is refactored to have hidden elements as list

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/dto/room/RoomDTO.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/entity/user/User.java
    
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
    
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/flexibleConferenceRoom.lzx
    
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/whiteboard/fixedFileExplorerWhiteboardPanel.lzx
    
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
    
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/menu/RoomMenuPanel.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/user/ChatPanel.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/dto/room/RoomDTO.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/entity/user/User.java
    
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
    
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/menu/RoomMenuPanel.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/user/ChatPanel.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=1739633&r1=1739632&r2=1739633&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 Apr 17 17:08:47 2016
@@ -54,6 +54,7 @@ import org.apache.openmeetings.db.entity
 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.util.CalendarPatterns;
@@ -1148,7 +1149,7 @@ public class ScopeApplicationAdapter ext
                        sessionManager.updateClientByStreamId(streamid, 
currentClient, true, null);
 
                        Room room = roomDao.get(roomId);
-                       if (room.getShowMicrophoneStatus()) {
+                       if 
(!room.getHiddenElements().contains(RoomElement.MicrophoneStatus)) {
                                currentClient.setCanGiveAudio(true);
                        }
 

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
 Sun Apr 17 17:08:47 2016
@@ -23,13 +23,17 @@ import static org.apache.openmeetings.db
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.wicket.ajax.json.JSONArray;
 import org.apache.wicket.ajax.json.JSONObject;
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -54,13 +58,7 @@ public class RoomDTO implements Serializ
        private boolean allowRecording;
        private boolean waitForRecording;
        private boolean audioOnly;
-       private boolean topBarHidden;
-       private boolean chatHidden;
-       private boolean activitiesHidden;
-       private boolean filesExplorerHidden;
-       private boolean actionsMenuHidden;
-       private boolean screenSharingHidden;
-       private boolean whiteboardHidden;
+       private Set<RoomElement> hiddenElements;
 
        public RoomDTO() {}
        
@@ -80,17 +78,11 @@ public class RoomDTO implements Serializ
                externalType = r.getExternalType();
                redirectUrl = r.getRedirectURL();
                moderated = r.isModerated();
-               allowUserQuestions = r.getAllowUserQuestions();
+               allowUserQuestions = r.isAllowUserQuestions();
                allowRecording = r.isAllowRecording();
-               waitForRecording = r.getWaitForRecording();
+               waitForRecording = r.isWaitForRecording();
                audioOnly = r.isAudioOnly();
-               topBarHidden = r.getHideTopBar();
-               chatHidden = r.isChatHidden();
-               activitiesHidden = r.isActivitiesHidden();
-               filesExplorerHidden = r.getHideFilesExplorer();
-               actionsMenuHidden = r.getHideActionsMenu();
-               screenSharingHidden = r.getHideScreenSharing();
-               whiteboardHidden = r.getHideWhiteboard();
+               hiddenElements = r.getHiddenElements();
        }
 
        public Room get() {
@@ -113,13 +105,7 @@ public class RoomDTO implements Serializ
                r.setAllowRecording(allowRecording);
                r.setWaitForRecording(waitForRecording);
                r.setAudioOnly(audioOnly);
-               r.setHideTopBar(topBarHidden);
-               r.setChatHidden(chatHidden);
-               r.setActivitiesHidden(activitiesHidden);
-               r.setHideFilesExplorer(filesExplorerHidden);
-               r.setHideActionsMenu(actionsMenuHidden);
-               r.setHideScreenSharing(screenSharingHidden);
-               r.setHideWhiteboard(whiteboardHidden);
+               r.setHiddenElements(hiddenElements);
                return r;
        }
        
@@ -235,60 +221,12 @@ public class RoomDTO implements Serializ
                this.audioOnly = audioOnly;
        }
 
-       public boolean isTopBarHidden() {
-               return topBarHidden;
+       public Set<RoomElement> getHiddenElements() {
+               return hiddenElements;
        }
 
-       public void setTopBarHidden(boolean topBarHidden) {
-               this.topBarHidden = topBarHidden;
-       }
-
-       public boolean isChatHidden() {
-               return chatHidden;
-       }
-
-       public void setChatHidden(boolean chatHidden) {
-               this.chatHidden = chatHidden;
-       }
-
-       public boolean isActivitiesHidden() {
-               return activitiesHidden;
-       }
-
-       public void setActivitiesHidden(boolean activitiesHidden) {
-               this.activitiesHidden = activitiesHidden;
-       }
-
-       public boolean isFilesExplorerHidden() {
-               return filesExplorerHidden;
-       }
-
-       public void setFilesExplorerHidden(boolean filesExplorerHidden) {
-               this.filesExplorerHidden = filesExplorerHidden;
-       }
-
-       public boolean isActionsMenuHidden() {
-               return actionsMenuHidden;
-       }
-
-       public void setActionsMenuHidden(boolean actionsMenuHidden) {
-               this.actionsMenuHidden = actionsMenuHidden;
-       }
-
-       public boolean isScreenSharingHidden() {
-               return screenSharingHidden;
-       }
-
-       public void setScreenSharingHidden(boolean screenSharingHidden) {
-               this.screenSharingHidden = screenSharingHidden;
-       }
-
-       public boolean isWhiteboardHidden() {
-               return whiteboardHidden;
-       }
-
-       public void setWhiteboardHidden(boolean whiteboardHidden) {
-               this.whiteboardHidden = whiteboardHidden;
+       public void setHiddenElements(Set<RoomElement> hiddenElements) {
+               this.hiddenElements = hiddenElements;
        }
 
        public boolean isPublic() {
@@ -363,13 +301,13 @@ public class RoomDTO implements Serializ
                r.allowRecording = o.optBoolean("allowRecording", false);
                r.waitForRecording = o.optBoolean("waitForRecording", false);
                r.audioOnly = o.optBoolean("audioOnly", false);
-               r.topBarHidden = o.optBoolean("topBarHidden", false);
-               r.chatHidden = o.optBoolean("chatHidden", false);
-               r.activitiesHidden = o.optBoolean("activitiesHidden", false);
-               r.filesExplorerHidden = o.optBoolean("filesExplorerHidden", 
false);
-               r.actionsMenuHidden = o.optBoolean("actionsMenuHidden", false);
-               r.screenSharingHidden = o.optBoolean("screenSharingHidden", 
false);
-               r.whiteboardHidden = o.optBoolean("whiteboardHidden", false);
+               r.setHiddenElements(new HashSet<RoomElement>());
+               JSONArray hidden = o.optJSONArray("hiddenElements");
+               if (hidden != null) {
+                       for (int i = 0; i < hidden.length(); ++i) {
+                               
r.getHiddenElements().add(RoomElement.valueOf(hidden.getString(i)));
+                       }
+               }
                return r;
        }
        

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=1739633&r1=1739632&r2=1739633&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 Apr 17 17:08:47 2016
@@ -20,10 +20,14 @@ package org.apache.openmeetings.db.entit
 
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.persistence.CascadeType;
+import javax.persistence.CollectionTable;
 import javax.persistence.Column;
+import javax.persistence.ElementCollection;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
@@ -41,6 +45,7 @@ import javax.persistence.Transient;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
 
 import org.apache.openjpa.persistence.ElementDependent;
 import org.apache.openjpa.persistence.FetchAttribute;
@@ -89,6 +94,18 @@ public class Room implements IDataProvid
        public static final int RESTRICTED_TYPE_ID = 3;
        public static final int INTERVIEW_TYPE_ID = 4;
        
+       @XmlType(namespace="org.apache.openmeetings.room.element")
+       public enum RoomElement {
+               TopBar
+               , Chat
+               , Activities
+               , Files
+               , ActionsMenu
+               , ScreenSharing
+               , Whiteboard
+               , MicrophoneStatus
+       }
+       
        public enum Type {
                conference(CONFERENCE_TYPE_ID)
                //, audience(2)
@@ -222,45 +239,21 @@ public class Room implements IDataProvid
        @Column(name = "allow_recording")
        @Element(name = "allowRecording", data = true, required = false)
        private boolean allowRecording = true; // Show or show not the 
recording option in a conference room
-       /**
-        * Layout of Room
-        */
-       @Column(name = "hide_top_bar")
-       @Element(data = true, required = false)
-       private boolean hideTopBar;
-
-       @Column(name = "hide_chat")
-       @Element(name = "hideChat", data = true, required = false)
-       private boolean chatHidden;
-
-       @Column(name = "hide_activities_and_actions")
-       @Element(name = "hideActivitiesAndActions", data = true, required = 
false)
-       private boolean activitiesHidden;
-
-       @Column(name = "hide_files_explorer")
-       @Element(data = true, required = false)
-       private boolean hideFilesExplorer;
-
-       @Column(name = "hide_actions_menu")
-       @Element(data = true, required = false)
-       private boolean hideActionsMenu;
-
-       @Column(name = "hide_screen_sharing")
-       @Element(data = true, required = false)
-       private boolean hideScreenSharing;
-
-       @Column(name = "hide_whiteboard")
-       @Element(data = true, required = false)
-       private boolean hideWhiteboard;
-
-       @Column(name = "show_microphone_status")
-       @Element(data = true, required = false)
-       private boolean showMicrophoneStatus;
-
+       
        @Column(name = "chat_moderated")
        @Element(data = true, required = false)
        private boolean chatModerated;
 
+       /**
+        * Layout of Room
+        */
+       @ElementCollection(fetch = FetchType.EAGER)
+       @Column(name = "hide_element")
+       @CollectionTable(name = "room_hide_element", joinColumns = 
@JoinColumn(name = "room_id"))
+       @Enumerated(EnumType.STRING)
+       @ElementList(name="hide_element", data = true, required = false)
+       private Set<RoomElement> hiddenElements = new HashSet<>();
+       
        @Column(name = "chat_opened")
        @Element(data = true, required = false)
        private boolean chatOpened;
@@ -430,7 +423,7 @@ public class Room implements IDataProvid
                this.externalType = externalType;
        }
 
-       public boolean getAllowUserQuestions() {
+       public boolean isAllowUserQuestions() {
                return allowUserQuestions;
        }
 
@@ -470,7 +463,7 @@ public class Room implements IDataProvid
                this.ownerId = ownerId;
        }
 
-       public boolean getWaitForRecording() {
+       public boolean isWaitForRecording() {
                return waitForRecording;
        }
 
@@ -486,70 +479,6 @@ public class Room implements IDataProvid
                this.allowRecording = allowRecording;
        }
 
-       public boolean getHideTopBar() {
-               return hideTopBar;
-       }
-
-       public void setHideTopBar(boolean hideTopBar) {
-               this.hideTopBar = hideTopBar;
-       }
-
-       public boolean isChatHidden() {
-               return chatHidden;
-       }
-
-       public void setChatHidden(boolean chatHidden) {
-               this.chatHidden = chatHidden;
-       }
-
-       public boolean isActivitiesHidden() {
-               return activitiesHidden;
-       }
-
-       public void setActivitiesHidden(boolean activitiesHidden) {
-               this.activitiesHidden = activitiesHidden;
-       }
-
-       public boolean getHideFilesExplorer() {
-               return hideFilesExplorer;
-       }
-
-       public void setHideFilesExplorer(boolean hideFilesExplorer) {
-               this.hideFilesExplorer = hideFilesExplorer;
-       }
-
-       public boolean getHideActionsMenu() {
-               return hideActionsMenu;
-       }
-
-       public void setHideActionsMenu(boolean hideActionsMenu) {
-               this.hideActionsMenu = hideActionsMenu;
-       }
-
-       public boolean getHideScreenSharing() {
-               return hideScreenSharing;
-       }
-
-       public void setHideScreenSharing(boolean hideScreenSharing) {
-               this.hideScreenSharing = hideScreenSharing;
-       }
-
-       public boolean getHideWhiteboard() {
-               return hideWhiteboard;
-       }
-
-       public void setHideWhiteboard(boolean hideWhiteboard) {
-               this.hideWhiteboard = hideWhiteboard;
-       }
-
-       public boolean getShowMicrophoneStatus() {
-               return showMicrophoneStatus;
-       }
-
-       public void setShowMicrophoneStatus(boolean showMicrophoneStatus) {
-               this.showMicrophoneStatus = showMicrophoneStatus;
-       }
-
        public List<RoomModerator> getModerators() {
                return moderators;
        }
@@ -568,6 +497,14 @@ public class Room implements IDataProvid
                this.chatModerated = chatModerated;
        }
 
+       public Set<RoomElement> getHiddenElements() {
+               return hiddenElements;
+       }
+
+       public void setHiddenElements(Set<RoomElement> hiddenElements) {
+               this.hiddenElements = hiddenElements;
+       }
+
        public List<RoomGroup> getRoomGroups() {
                return roomGroups;
        }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
 Sun Apr 17 17:08:47 2016
@@ -315,7 +315,7 @@ public class User implements IDataProvid
        @CollectionTable(name = "om_user_right", joinColumns = @JoinColumn(name 
= "user_id"))
        @Enumerated(EnumType.STRING)
        @ElementList(name="rights", data = true, required = false)
-       private Set<Right> rights = new HashSet<User.Right>();
+       private Set<Right> rights = new HashSet<>();
        
        @Column(name = "domain_id")
        @Element(data = true, required = false)

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/base/hibernate/hibRtmpConnection.lzx
 Sun Apr 17 17:08:47 2016
@@ -617,11 +617,7 @@
                                        canvas.timeZoneId = value.timeZoneId;
                                }
                                if (value.rights != null) {
-                                       for (var i = 0; i < 
value.rights.length; ++i) {
-                                               if ('Admin' == value.rights[i]) 
{
-                                                       canvas.becomemoderator 
= true;
-                                               }
-                                       }
+                                       canvas.becomemoderator = 
value.rights.indexOf('Admin') > -1;
                                }
                                if ($debug) 
Debug.write("hibRtmpConnection::loginWicket -> canvas.becomemoderator", 
canvas.becomemoderator);
                                if (value.sessionData == null) {

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/flexibleConferenceRoom.lzx
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/flexibleConferenceRoom.lzx?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/flexibleConferenceRoom.lzx
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/flexibleConferenceRoom.lzx
 Sun Apr 17 17:08:47 2016
@@ -24,8 +24,7 @@
     <conferenceRoomSidebar name="_sidePanel" />
     
     <view name="_videoviewcontent_hideWhiteboard" y="0" x="${ 
parent._sidePanel.width }"
-                 width="${canvas.width-parent._sidePanel.width}" height="${ 
canvas.height - 5 + 28 }" clip="true" 
-                 visibility="${((canvas.currentRoomObj.hideWhiteboard) ? 
'visible':'hidden')}">
+                 width="${canvas.width-parent._sidePanel.width}" height="${ 
canvas.height - 5 + 28 }" clip="true">
                        <view name="_inn" width="${parent.width-10}">           
                
                                <wrappinglayout axis="x" spacing="10"/>
                        </view>

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/whiteboard/fixedFileExplorerWhiteboardPanel.lzx
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/whiteboard/fixedFileExplorerWhiteboardPanel.lzx?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/whiteboard/fixedFileExplorerWhiteboardPanel.lzx
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/whiteboard/fixedFileExplorerWhiteboardPanel.lzx
 Sun Apr 17 17:08:47 2016
@@ -78,7 +78,7 @@
 </class>
     
 <class name="fixedFileExplorerWhiteboardPanel" 
extends="basePropertyPanelWhiteboard" allowToggle="false"
-          labelid="615" visible="${ !canvas.currentRoomObj.hideWhiteboard }">
+          labelid="615" visible="${ 
canvas.currentRoomObj.hiddenElements.indexOf('Whiteboard') &lt; 0 }">
        <attribute name="whiteboardCount" value="0" type="number" />    
        <!--
        

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 Sun Apr 17 17:08:47 2016
@@ -51,7 +51,9 @@ import static org.apache.openmeetings.ut
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
+import java.util.Arrays;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.Iterator;
 
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
@@ -65,6 +67,7 @@ import org.apache.openmeetings.db.dao.us
 import org.apache.openmeetings.db.entity.basic.ErrorValue;
 import org.apache.openmeetings.db.entity.basic.Naviglobal;
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.room.Room.Type;
 import org.apache.openmeetings.db.entity.room.RoomGroup;
 import org.apache.openmeetings.db.entity.server.OAuthServer;
@@ -364,8 +367,8 @@ public class ImportInitvalues {
                r.setDemoRoom(false);
                r.setDemoTime(null);
 
+               r.setHiddenElements(new 
HashSet<>(Arrays.asList(RoomElement.MicrophoneStatus)));
                r.setModerated(false);
-               r.setHideTopBar(false);
 
                r.setDeleted(false);
 
@@ -377,12 +380,6 @@ public class ImportInitvalues {
                r.setWaitForRecording(false);
                r.setAllowRecording(true);
                
-               r.setChatHidden(false);
-               r.setActivitiesHidden(false);
-               r.setHideActionsMenu(false);
-               r.setHideFilesExplorer(false);
-               r.setHideScreenSharing(false);  
-               r.setHideWhiteboard(false);
                if (groupId != null) {
                        RoomGroup ro = new RoomGroup();
                        ro.setRoom(r);
@@ -398,16 +395,16 @@ public class ImportInitvalues {
                        createRoom("public Interview Room", Type.interview, 
16L, true, null);
                        createRoom("public Conference Room", Type.conference, 
32L, true, null);
                        Room r = createRoom("public Video Only Room", 
Type.conference, 32L, true, null);
-                       r.setHideWhiteboard(true);
+                       r.setHiddenElements(new 
HashSet<>(Arrays.asList(RoomElement.Whiteboard)));
                        roomDao.update(r, null);
                        createRoom("public Video And Whiteboard Room", 
Type.conference, 32L, true, null);
                        createRoom("public Restricted Room", Type.restricted, 
100L, true, null);
                        r = createRoom("restricted room with micro option set", 
Type.restricted, 100L, true, null);
-                       r.setShowMicrophoneStatus(true);
+                       r.getHiddenElements().clear();
                        roomDao.update(r, null);
 
                        r = createRoom("conference room with micro option set", 
Type.conference, 32L, true, null);
-                       r.setShowMicrophoneStatus(true);
+                       r.getHiddenElements().clear();
                        roomDao.update(r, null);
 
                        createRoom("private Conference Room", Type.conference, 
32L, false, 1L);

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
 Sun Apr 17 17:08:47 2016
@@ -34,6 +34,7 @@ import org.apache.openmeetings.db.dao.us
 import org.apache.openmeetings.db.dao.user.UserDao;
 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.room.RoomGroup;
 import org.apache.openmeetings.db.entity.room.RoomModerator;
 import org.apache.openmeetings.db.entity.user.Address;
@@ -167,14 +168,37 @@ public class RoomForm extends AdminBaseF
                add(new CheckBox("allowRecording"));
                add(new CheckBox("chatModerated"));
 
-               add(new CheckBox("hideTopBar"));
-               add(new CheckBox("chatHidden"));
-               add(new CheckBox("activitiesHidden"));
-               add(new CheckBox("hideFilesExplorer"));
-               add(new CheckBox("hideActionsMenu"));
-               add(new CheckBox("hideScreenSharing"));
-               add(new CheckBox("hideWhiteboard"));
-               add(new CheckBox("showMicrophoneStatus"));
+               add(new Select2MultiChoice<RoomElement>("hiddenElements", null, 
new ChoiceProvider<RoomElement>() {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       public String getDisplayValue(RoomElement choice) {
+                               return choice.name();
+                       }
+
+                       @Override
+                       public String getIdValue(RoomElement choice) {
+                               return choice.name();
+                       }
+
+                       @Override
+                       public void query(String term, int page, 
Response<RoomElement> response) {
+                               for (RoomElement r : RoomElement.values()) {
+                                       if (Strings.isEmpty(term) || 
r.name().contains(term)) {
+                                               response.add(r);
+                                       }
+                               }
+                       }
+
+                       @Override
+                       public Collection<RoomElement> 
toChoices(Collection<String> ids) {
+                               Collection<RoomElement> rights = new 
ArrayList<>(ids.size());
+                               for (String id : ids) {
+                                       rights.add(RoomElement.valueOf(id));
+                               }
+                               return rights;
+                       }
+               }));
                add(new CheckBox("chatOpened"));
                add(new CheckBox("filesOpened"));
                add(new CheckBox("autoVideoSelect"));   

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
 Sun Apr 17 17:08:47 2016
@@ -127,28 +127,8 @@
                                                <fieldset 
class="ui-widget-content">
                                                        <legend 
class="ui-widget-header"><wicket:message key="1443" /></legend>
                                                        <div 
class="formelement">
-                                                               
<label><wicket:message key="1357" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="hideTopBar" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1436" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="chatHidden" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1437" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="activitiesHidden" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1438" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="hideFilesExplorer" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1439" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="hideActionsMenu" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1440" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="hideScreenSharing" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1441" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="hideWhiteboard" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1442" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="showMicrophoneStatus" />
+                                                               
<label><wicket:message key="admin.room.hidden.elements" /></label>
+                                                               <div 
class="om-select2"><select class="input" 
wicket:id="hiddenElements"></select></div>
                                                        </div>
                                                        <div 
class="formelement">
                                                                
<label><wicket:message key="1515" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="chatOpened" />

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
 Sun Apr 17 17:08:47 2016
@@ -212,7 +212,7 @@ public class UserForm extends AdminBaseF
 
                        @Override
                        public Collection<Right> toChoices(Collection<String> 
ids) {
-                               Collection<Right> rights = new 
ArrayList<User.Right>(ids.size());
+                               Collection<Right> rights = new 
ArrayList<>(ids.size());
                                for (String id : ids) {
                                        rights.add(Right.valueOf(id));
                                }

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
 Sun Apr 17 17:08:47 2016
@@ -1909,4 +1909,5 @@
        <entry key="dashboard.widget.admin.cleanup.warn">Are you sure you want 
to delete all temporary files? This operation cannot be undone.</entry>
        <entry key="dashboard.widget.admin.cleanup.error">Unexpected error 
while performing cleanup</entry>
        <entry key="room.action.request.right.moderator">would like to be 
moderator of this room.</entry>
+       <entry key="admin.room.hidden.elements">Hidden room elements</entry>
 </properties>

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=1739633&r1=1739632&r2=1739633&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 Apr 17 17:08:47 2016
@@ -33,6 +33,7 @@ import org.apache.openmeetings.db.dao.us
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.room.Room;
+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;
@@ -116,10 +117,15 @@ public class RoomPanel extends BasePanel
                getClient().setRoomId(r.getId());
                super.onInitialize();
                Component accessDenied = new 
WebMarkupContainer(ACCESS_DENIED_ID).setVisible(false);
+               room.add((menu = new RoomMenuPanel("menu", 
this)).setVisible(!r.getHiddenElements().contains(RoomElement.TopBar)));
+               room.add(new SwfPanel("whiteboard", getClient()));
+               room.add(aab);
+               room.add(sidebar = new RoomSidebar("sidebar", this));
+               room.add((activities = new ActivitiesPanel("activities", 
this)).setVisible(!r.getHiddenElements().contains(RoomElement.Activities)));
                add(roomClosed = new RedirectMessageDialog("room-closed", 
"1098", r.isClosed(), r.getRedirectURL()));
                if (r.isClosed()) {
                        room.setVisible(false);
-               } else if (r.getNumberOfPartizipants() >= 
getRoomUsers(r.getId()).size()) {
+               } else if (getRoomUsers(r.getId()).size() >= 
r.getNumberOfPartizipants()) {
                        accessDenied = new 
ExpiredMessageDialog(ACCESS_DENIED_ID, getString("99"), menu);
                        room.setVisible(false);
                } else {
@@ -175,13 +181,8 @@ public class RoomPanel extends BasePanel
                                room.setVisible(false);
                        }
                }
-               room.add((menu = new RoomMenuPanel("menu", 
this)).setVisible(!r.getHideTopBar()));
-               room.add(new SwfPanel("whiteboard", getClient()));
-               room.add(aab);
-               room.add(sidebar = new RoomSidebar("sidebar", this));
-               room.add((activities = new ActivitiesPanel("activities", 
this)).setVisible(!r.isActivitiesHidden()));
                add(room, accessDenied);
-               if (r.getWaitForRecording()) {
+               if (r.isWaitForRecording()) {
                        add(new MessageDialog("wait-for-recording", 
getString("1316"), getString("1315"), DialogButtons.OK, DialogIcon.INFO) 
{//DialogIcon.LIGHT
                                private static final long serialVersionUID = 1L;
        
@@ -318,7 +319,7 @@ public class RoomPanel extends BasePanel
        @Override
        public void onMenuPanelLoad(IPartialPageRequestHandler handler) {
                handler.add(getMainPage().getHeader().setVisible(false), 
getMainPage().getTopControls().setVisible(false));
-               if (r.isChatHidden()) {
+               if (r.getHiddenElements().contains(RoomElement.Chat)) {
                        getMainPage().getChat().toggle(handler, false);
                }
                handler.appendJavaScript("roomLoad();");
@@ -327,7 +328,7 @@ public class RoomPanel extends BasePanel
        @Override
        public void cleanup(IPartialPageRequestHandler handler) {
                handler.add(getMainPage().getHeader().setVisible(true), 
getMainPage().getTopControls().setVisible(true));
-               if (r.isChatHidden()) {
+               if (r.getHiddenElements().contains(RoomElement.Chat)) {
                        getMainPage().getChat().toggle(handler, true);
                }
                
handler.appendJavaScript("$(window).off('resize.openmeetings');");

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=1739633&r1=1739632&r2=1739633&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 Apr 17 17:08:47 2016
@@ -32,6 +32,7 @@ import org.apache.openmeetings.db.dao.ba
 import org.apache.openmeetings.db.dao.room.PollDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.util.message.RoomMessage;
@@ -142,7 +143,7 @@ public class RoomMenuPanel extends Panel
                setOutputMarkupPlaceholderTag(true);
                this.room = room;
                Room r = room.getRoom();
-               add((menuPanel = new MenuPanel("menu", 
getMenu())).setVisible(!r.getHideTopBar()));
+               add((menuPanel = new MenuPanel("menu", 
getMenu())).setVisible(!r.getHiddenElements().contains(RoomElement.TopBar)));
                add(askBtn);
                add(new Label("roomName", r.getName()));
                add(new Label("recording", "Recording 
started").setVisible(false)); //FIXME add/remove
@@ -213,11 +214,11 @@ public class RoomMenuPanel extends Panel
                boolean notExternalUser = u.getType() != User.Type.external && 
u.getType() != User.Type.contact;
                exitMenuItem.setEnabled(notExternalUser);//TODO check this
                filesMenu.setEnabled(room.getSidebar().isShowFiles());
-               actionsMenu.setEnabled(!r.getHideActionsMenu() && 
r.getAllowUserQuestions());
+               
actionsMenu.setEnabled(!r.getHiddenElements().contains(RoomElement.ActionsMenu) 
&& r.isAllowUserQuestions());
                boolean moder = 
room.getClient().hasRight(Client.Right.moderator);
                inviteMenuItem.setEnabled(notExternalUser && moder);
                //TODO add check "sharing started"
-               boolean shareVisible = Room.Type.interview != r.getType() && 
!r.getHideScreenSharing() && r.isAllowRecording() && moder;
+               boolean shareVisible = Room.Type.interview != r.getType() && 
!r.getHiddenElements().contains(RoomElement.ScreenSharing) && 
r.isAllowRecording() && moder;
                shareMenuItem.setEnabled(shareVisible);
                //FIXME TODO apply* should be enabled if moder is in room
                applyModerMenuItem.setEnabled(!moder);
@@ -229,7 +230,7 @@ public class RoomMenuPanel extends Panel
                //TODO sip menus
                menuPanel.update(handler);
                //FIXME TODO askBtn should be visible if moder is in room
-               handler.add(askBtn.setVisible(!moder && 
r.getAllowUserQuestions()));
+               handler.add(askBtn.setVisible(!moder && 
r.isAllowUserQuestions()));
                handler.add(shareBtn.setVisible(shareVisible));
        }
 

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=1739633&r1=1739632&r2=1739633&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 Apr 17 17:08:47 2016
@@ -28,6 +28,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.app.Client.Right;
@@ -71,7 +72,7 @@ public class RoomSidebar extends Panel {
                        item.add(status);
                        item.add(new Label("name", rc.u.getFirstname() + " " + 
rc.u.getLastname()));
                        item.add(AttributeAppender.append("data-userid", 
rc.u.getId()));
-                       item.add(new 
WebMarkupContainer("privateChat").setVisible(!room.getRoom().isChatHidden() && 
!getUserId().equals(rc.u.getId())));
+                       item.add(new 
WebMarkupContainer("privateChat").setVisible(!room.getRoom().getHiddenElements().contains(RoomElement.Chat)
 && !getUserId().equals(rc.u.getId())));
                        if (room.getClient() != null && 
rc.c.getUid().equals(room.getClient().getUid())) {
                                item.add(AttributeAppender.append("class", 
"current"));
                        }
@@ -160,7 +161,7 @@ public class RoomSidebar extends Panel {
        }
        
        private void updateShowFiles() {
-               showFiles = !room.getRoom().getHideFilesExplorer() && 
room.getClient().hasRight(Right.whiteBoard);
+               showFiles = 
!room.getRoom().getHiddenElements().contains(RoomElement.Files) && 
room.getClient().hasRight(Right.whiteBoard);
        }
        
        public void updateUsers(IPartialPageRequestHandler handler) {

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=1739633&r1=1739632&r2=1739633&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 Apr 17 17:08:47 2016
@@ -42,6 +42,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.RoomElement;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.Client;
@@ -189,7 +190,7 @@ public class ChatPanel extends BasePanel
        }
 
        public void roomEnter(Room r, AjaxRequestTarget target) {
-               if (r.isChatHidden()) {
+               if (r.getHiddenElements().contains(RoomElement.Chat)) {
                        toggle(target, false);
                        return;
                }
@@ -206,7 +207,7 @@ public class ChatPanel extends BasePanel
        }
        
        public void roomExit(Room r, IPartialPageRequestHandler handler) {
-               if (r.isChatHidden()) {
+               if (r.getHiddenElements().contains(RoomElement.Chat)) {
                        return;
                }
                
handler.appendJavaScript(String.format("removeChatTab('%1$s%2$d');", 
ID_ROOM_PREFIX, r.getId()));

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=1739633&r1=1739632&r2=1739633&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
 Sun Apr 17 17:08:47 2016
@@ -54,6 +54,7 @@ import org.apache.openmeetings.db.entity
 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.util.CalendarPatterns;
@@ -1148,7 +1149,7 @@ public class ScopeApplicationAdapter ext
                        sessionManager.updateClientByStreamId(streamid, 
currentClient, true, null);
 
                        Room room = roomDao.get(roomId);
-                       if (room.getShowMicrophoneStatus()) {
+                       if 
(!room.getHiddenElements().contains(RoomElement.MicrophoneStatus)) {
                                currentClient.setCanGiveAudio(true);
                        }
 

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/RoomDTO.java
 Sun Apr 17 17:08:47 2016
@@ -23,13 +23,17 @@ import static org.apache.openmeetings.db
 
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.wicket.ajax.json.JSONArray;
 import org.apache.wicket.ajax.json.JSONObject;
 @XmlRootElement
 @XmlAccessorType(XmlAccessType.FIELD)
@@ -54,13 +58,7 @@ public class RoomDTO implements Serializ
        private boolean allowRecording;
        private boolean waitForRecording;
        private boolean audioOnly;
-       private boolean topBarHidden;
-       private boolean chatHidden;
-       private boolean activitiesHidden;
-       private boolean filesExplorerHidden;
-       private boolean actionsMenuHidden;
-       private boolean screenSharingHidden;
-       private boolean whiteboardHidden;
+       private Set<RoomElement> hiddenElements;
 
        public RoomDTO() {}
        
@@ -80,17 +78,11 @@ public class RoomDTO implements Serializ
                externalType = r.getExternalType();
                redirectUrl = r.getRedirectURL();
                moderated = r.isModerated();
-               allowUserQuestions = r.getAllowUserQuestions();
+               allowUserQuestions = r.isAllowUserQuestions();
                allowRecording = r.isAllowRecording();
-               waitForRecording = r.getWaitForRecording();
+               waitForRecording = r.isWaitForRecording();
                audioOnly = r.isAudioOnly();
-               topBarHidden = r.getHideTopBar();
-               chatHidden = r.isChatHidden();
-               activitiesHidden = r.isActivitiesHidden();
-               filesExplorerHidden = r.getHideFilesExplorer();
-               actionsMenuHidden = r.getHideActionsMenu();
-               screenSharingHidden = r.getHideScreenSharing();
-               whiteboardHidden = r.getHideWhiteboard();
+               hiddenElements = r.getHiddenElements();
        }
 
        public Room get() {
@@ -113,13 +105,7 @@ public class RoomDTO implements Serializ
                r.setAllowRecording(allowRecording);
                r.setWaitForRecording(waitForRecording);
                r.setAudioOnly(audioOnly);
-               r.setHideTopBar(topBarHidden);
-               r.setChatHidden(chatHidden);
-               r.setActivitiesHidden(activitiesHidden);
-               r.setHideFilesExplorer(filesExplorerHidden);
-               r.setHideActionsMenu(actionsMenuHidden);
-               r.setHideScreenSharing(screenSharingHidden);
-               r.setHideWhiteboard(whiteboardHidden);
+               r.setHiddenElements(hiddenElements);
                return r;
        }
        
@@ -235,60 +221,12 @@ public class RoomDTO implements Serializ
                this.audioOnly = audioOnly;
        }
 
-       public boolean isTopBarHidden() {
-               return topBarHidden;
+       public Set<RoomElement> getHiddenElements() {
+               return hiddenElements;
        }
 
-       public void setTopBarHidden(boolean topBarHidden) {
-               this.topBarHidden = topBarHidden;
-       }
-
-       public boolean isChatHidden() {
-               return chatHidden;
-       }
-
-       public void setChatHidden(boolean chatHidden) {
-               this.chatHidden = chatHidden;
-       }
-
-       public boolean isActivitiesHidden() {
-               return activitiesHidden;
-       }
-
-       public void setActivitiesHidden(boolean activitiesHidden) {
-               this.activitiesHidden = activitiesHidden;
-       }
-
-       public boolean isFilesExplorerHidden() {
-               return filesExplorerHidden;
-       }
-
-       public void setFilesExplorerHidden(boolean filesExplorerHidden) {
-               this.filesExplorerHidden = filesExplorerHidden;
-       }
-
-       public boolean isActionsMenuHidden() {
-               return actionsMenuHidden;
-       }
-
-       public void setActionsMenuHidden(boolean actionsMenuHidden) {
-               this.actionsMenuHidden = actionsMenuHidden;
-       }
-
-       public boolean isScreenSharingHidden() {
-               return screenSharingHidden;
-       }
-
-       public void setScreenSharingHidden(boolean screenSharingHidden) {
-               this.screenSharingHidden = screenSharingHidden;
-       }
-
-       public boolean isWhiteboardHidden() {
-               return whiteboardHidden;
-       }
-
-       public void setWhiteboardHidden(boolean whiteboardHidden) {
-               this.whiteboardHidden = whiteboardHidden;
+       public void setHiddenElements(Set<RoomElement> hiddenElements) {
+               this.hiddenElements = hiddenElements;
        }
 
        public boolean isPublic() {
@@ -363,13 +301,13 @@ public class RoomDTO implements Serializ
                r.allowRecording = o.optBoolean("allowRecording", false);
                r.waitForRecording = o.optBoolean("waitForRecording", false);
                r.audioOnly = o.optBoolean("audioOnly", false);
-               r.topBarHidden = o.optBoolean("topBarHidden", false);
-               r.chatHidden = o.optBoolean("chatHidden", false);
-               r.activitiesHidden = o.optBoolean("activitiesHidden", false);
-               r.filesExplorerHidden = o.optBoolean("filesExplorerHidden", 
false);
-               r.actionsMenuHidden = o.optBoolean("actionsMenuHidden", false);
-               r.screenSharingHidden = o.optBoolean("screenSharingHidden", 
false);
-               r.whiteboardHidden = o.optBoolean("whiteboardHidden", false);
+               r.setHiddenElements(new HashSet<RoomElement>());
+               JSONArray hidden = o.optJSONArray("hiddenElements");
+               if (hidden != null) {
+                       for (int i = 0; i < hidden.length(); ++i) {
+                               
r.getHiddenElements().add(RoomElement.valueOf(hidden.getString(i)));
+                       }
+               }
                return r;
        }
        

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Room.java
 Sun Apr 17 17:08:47 2016
@@ -20,10 +20,14 @@ package org.apache.openmeetings.db.entit
 
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.persistence.CascadeType;
+import javax.persistence.CollectionTable;
 import javax.persistence.Column;
+import javax.persistence.ElementCollection;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
@@ -41,6 +45,7 @@ import javax.persistence.Transient;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
 
 import org.apache.openjpa.persistence.ElementDependent;
 import org.apache.openjpa.persistence.FetchAttribute;
@@ -89,6 +94,18 @@ public class Room implements IDataProvid
        public static final int RESTRICTED_TYPE_ID = 3;
        public static final int INTERVIEW_TYPE_ID = 4;
        
+       @XmlType(namespace="org.apache.openmeetings.room.element")
+       public enum RoomElement {
+               TopBar
+               , Chat
+               , Activities
+               , Files
+               , ActionsMenu
+               , ScreenSharing
+               , Whiteboard
+               , MicrophoneStatus
+       }
+       
        public enum Type {
                conference(CONFERENCE_TYPE_ID)
                //, audience(2)
@@ -222,45 +239,21 @@ public class Room implements IDataProvid
        @Column(name = "allow_recording")
        @Element(name = "allowRecording", data = true, required = false)
        private boolean allowRecording = true; // Show or show not the 
recording option in a conference room
-       /**
-        * Layout of Room
-        */
-       @Column(name = "hide_top_bar")
-       @Element(data = true, required = false)
-       private boolean hideTopBar;
-
-       @Column(name = "hide_chat")
-       @Element(name = "hideChat", data = true, required = false)
-       private boolean chatHidden;
-
-       @Column(name = "hide_activities_and_actions")
-       @Element(name = "hideActivitiesAndActions", data = true, required = 
false)
-       private boolean activitiesHidden;
-
-       @Column(name = "hide_files_explorer")
-       @Element(data = true, required = false)
-       private boolean hideFilesExplorer;
-
-       @Column(name = "hide_actions_menu")
-       @Element(data = true, required = false)
-       private boolean hideActionsMenu;
-
-       @Column(name = "hide_screen_sharing")
-       @Element(data = true, required = false)
-       private boolean hideScreenSharing;
-
-       @Column(name = "hide_whiteboard")
-       @Element(data = true, required = false)
-       private boolean hideWhiteboard;
-
-       @Column(name = "show_microphone_status")
-       @Element(data = true, required = false)
-       private boolean showMicrophoneStatus;
-
+       
        @Column(name = "chat_moderated")
        @Element(data = true, required = false)
        private boolean chatModerated;
 
+       /**
+        * Layout of Room
+        */
+       @ElementCollection(fetch = FetchType.EAGER)
+       @Column(name = "hide_element")
+       @CollectionTable(name = "room_hide_element", joinColumns = 
@JoinColumn(name = "room_id"))
+       @Enumerated(EnumType.STRING)
+       @ElementList(name="hide_element", data = true, required = false)
+       private Set<RoomElement> hiddenElements = new HashSet<>();
+       
        @Column(name = "chat_opened")
        @Element(data = true, required = false)
        private boolean chatOpened;
@@ -430,7 +423,7 @@ public class Room implements IDataProvid
                this.externalType = externalType;
        }
 
-       public boolean getAllowUserQuestions() {
+       public boolean isAllowUserQuestions() {
                return allowUserQuestions;
        }
 
@@ -470,7 +463,7 @@ public class Room implements IDataProvid
                this.ownerId = ownerId;
        }
 
-       public boolean getWaitForRecording() {
+       public boolean isWaitForRecording() {
                return waitForRecording;
        }
 
@@ -486,70 +479,6 @@ public class Room implements IDataProvid
                this.allowRecording = allowRecording;
        }
 
-       public boolean getHideTopBar() {
-               return hideTopBar;
-       }
-
-       public void setHideTopBar(boolean hideTopBar) {
-               this.hideTopBar = hideTopBar;
-       }
-
-       public boolean isChatHidden() {
-               return chatHidden;
-       }
-
-       public void setChatHidden(boolean chatHidden) {
-               this.chatHidden = chatHidden;
-       }
-
-       public boolean isActivitiesHidden() {
-               return activitiesHidden;
-       }
-
-       public void setActivitiesHidden(boolean activitiesHidden) {
-               this.activitiesHidden = activitiesHidden;
-       }
-
-       public boolean getHideFilesExplorer() {
-               return hideFilesExplorer;
-       }
-
-       public void setHideFilesExplorer(boolean hideFilesExplorer) {
-               this.hideFilesExplorer = hideFilesExplorer;
-       }
-
-       public boolean getHideActionsMenu() {
-               return hideActionsMenu;
-       }
-
-       public void setHideActionsMenu(boolean hideActionsMenu) {
-               this.hideActionsMenu = hideActionsMenu;
-       }
-
-       public boolean getHideScreenSharing() {
-               return hideScreenSharing;
-       }
-
-       public void setHideScreenSharing(boolean hideScreenSharing) {
-               this.hideScreenSharing = hideScreenSharing;
-       }
-
-       public boolean getHideWhiteboard() {
-               return hideWhiteboard;
-       }
-
-       public void setHideWhiteboard(boolean hideWhiteboard) {
-               this.hideWhiteboard = hideWhiteboard;
-       }
-
-       public boolean getShowMicrophoneStatus() {
-               return showMicrophoneStatus;
-       }
-
-       public void setShowMicrophoneStatus(boolean showMicrophoneStatus) {
-               this.showMicrophoneStatus = showMicrophoneStatus;
-       }
-
        public List<RoomModerator> getModerators() {
                return moderators;
        }
@@ -568,6 +497,14 @@ public class Room implements IDataProvid
                this.chatModerated = chatModerated;
        }
 
+       public Set<RoomElement> getHiddenElements() {
+               return hiddenElements;
+       }
+
+       public void setHiddenElements(Set<RoomElement> hiddenElements) {
+               this.hiddenElements = hiddenElements;
+       }
+
        public List<RoomGroup> getRoomGroups() {
                return roomGroups;
        }

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/User.java
 Sun Apr 17 17:08:47 2016
@@ -315,7 +315,7 @@ public class User implements IDataProvid
        @CollectionTable(name = "om_user_right", joinColumns = @JoinColumn(name 
= "user_id"))
        @Enumerated(EnumType.STRING)
        @ElementList(name="rights", data = true, required = false)
-       private Set<Right> rights = new HashSet<User.Right>();
+       private Set<Right> rights = new HashSet<>();
        
        @Column(name = "domain_id")
        @Element(data = true, required = false)

Modified: 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/installation/ImportInitvalues.java
 Sun Apr 17 17:08:47 2016
@@ -51,7 +51,9 @@ import static org.apache.openmeetings.ut
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
+import java.util.Arrays;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.Iterator;
 
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
@@ -65,6 +67,7 @@ import org.apache.openmeetings.db.dao.us
 import org.apache.openmeetings.db.entity.basic.ErrorValue;
 import org.apache.openmeetings.db.entity.basic.Naviglobal;
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.room.Room.Type;
 import org.apache.openmeetings.db.entity.room.RoomGroup;
 import org.apache.openmeetings.db.entity.server.OAuthServer;
@@ -364,8 +367,8 @@ public class ImportInitvalues {
                r.setDemoRoom(false);
                r.setDemoTime(null);
 
+               r.setHiddenElements(new 
HashSet<>(Arrays.asList(RoomElement.MicrophoneStatus)));
                r.setModerated(false);
-               r.setHideTopBar(false);
 
                r.setDeleted(false);
 
@@ -377,12 +380,6 @@ public class ImportInitvalues {
                r.setWaitForRecording(false);
                r.setAllowRecording(true);
                
-               r.setChatHidden(false);
-               r.setActivitiesHidden(false);
-               r.setHideActionsMenu(false);
-               r.setHideFilesExplorer(false);
-               r.setHideScreenSharing(false);  
-               r.setHideWhiteboard(false);
                if (groupId != null) {
                        RoomGroup ro = new RoomGroup();
                        ro.setRoom(r);
@@ -398,16 +395,16 @@ public class ImportInitvalues {
                        createRoom("public Interview Room", Type.interview, 
16L, true, null);
                        createRoom("public Conference Room", Type.conference, 
32L, true, null);
                        Room r = createRoom("public Video Only Room", 
Type.conference, 32L, true, null);
-                       r.setHideWhiteboard(true);
+                       r.setHiddenElements(new 
HashSet<>(Arrays.asList(RoomElement.Whiteboard)));
                        roomDao.update(r, null);
                        createRoom("public Video And Whiteboard Room", 
Type.conference, 32L, true, null);
                        createRoom("public Restricted Room", Type.restricted, 
100L, true, null);
                        r = createRoom("restricted room with micro option set", 
Type.restricted, 100L, true, null);
-                       r.setShowMicrophoneStatus(true);
+                       r.getHiddenElements().clear();
                        roomDao.update(r, null);
 
                        r = createRoom("conference room with micro option set", 
Type.conference, 32L, true, null);
-                       r.setShowMicrophoneStatus(true);
+                       r.getHiddenElements().clear();
                        roomDao.update(r, null);
 
                        createRoom("private Conference Room", Type.conference, 
32L, false, 1L);

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
 Sun Apr 17 17:08:47 2016
@@ -34,6 +34,7 @@ import org.apache.openmeetings.db.dao.us
 import org.apache.openmeetings.db.dao.user.UserDao;
 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.room.RoomGroup;
 import org.apache.openmeetings.db.entity.room.RoomModerator;
 import org.apache.openmeetings.db.entity.user.Address;
@@ -167,14 +168,37 @@ public class RoomForm extends AdminBaseF
                add(new CheckBox("allowRecording"));
                add(new CheckBox("chatModerated"));
 
-               add(new CheckBox("hideTopBar"));
-               add(new CheckBox("chatHidden"));
-               add(new CheckBox("activitiesHidden"));
-               add(new CheckBox("hideFilesExplorer"));
-               add(new CheckBox("hideActionsMenu"));
-               add(new CheckBox("hideScreenSharing"));
-               add(new CheckBox("hideWhiteboard"));
-               add(new CheckBox("showMicrophoneStatus"));
+               add(new Select2MultiChoice<RoomElement>("hiddenElements", null, 
new ChoiceProvider<RoomElement>() {
+                       private static final long serialVersionUID = 1L;
+
+                       @Override
+                       public String getDisplayValue(RoomElement choice) {
+                               return choice.name();
+                       }
+
+                       @Override
+                       public String getIdValue(RoomElement choice) {
+                               return choice.name();
+                       }
+
+                       @Override
+                       public void query(String term, int page, 
Response<RoomElement> response) {
+                               for (RoomElement r : RoomElement.values()) {
+                                       if (Strings.isEmpty(term) || 
r.name().contains(term)) {
+                                               response.add(r);
+                                       }
+                               }
+                       }
+
+                       @Override
+                       public Collection<RoomElement> 
toChoices(Collection<String> ids) {
+                               Collection<RoomElement> rights = new 
ArrayList<>(ids.size());
+                               for (String id : ids) {
+                                       rights.add(RoomElement.valueOf(id));
+                               }
+                               return rights;
+                       }
+               }));
                add(new CheckBox("chatOpened"));
                add(new CheckBox("filesOpened"));
                add(new CheckBox("autoVideoSelect"));   

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
 Sun Apr 17 17:08:47 2016
@@ -127,28 +127,8 @@
                                                <fieldset 
class="ui-widget-content">
                                                        <legend 
class="ui-widget-header"><wicket:message key="1443" /></legend>
                                                        <div 
class="formelement">
-                                                               
<label><wicket:message key="1357" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="hideTopBar" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1436" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="chatHidden" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1437" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="activitiesHidden" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1438" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="hideFilesExplorer" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1439" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="hideActionsMenu" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1440" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="hideScreenSharing" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1441" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="hideWhiteboard" />
-                                                       </div>
-                                                       <div 
class="formelement">
-                                                               
<label><wicket:message key="1442" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="showMicrophoneStatus" />
+                                                               
<label><wicket:message key="admin.room.hidden.elements" /></label>
+                                                               <div 
class="om-select2"><select class="input" 
wicket:id="hiddenElements"></select></div>
                                                        </div>
                                                        <div 
class="formelement">
                                                                
<label><wicket:message key="1515" /></label><input type="checkbox" 
class="formcheckbox" wicket:id="chatOpened" />

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/users/UserForm.java
 Sun Apr 17 17:08:47 2016
@@ -212,7 +212,7 @@ public class UserForm extends AdminBaseF
 
                        @Override
                        public Collection<Right> toChoices(Collection<String> 
ids) {
-                               Collection<Right> rights = new 
ArrayList<User.Right>(ids.size());
+                               Collection<Right> rights = new 
ArrayList<>(ids.size());
                                for (String id : ids) {
                                        rights.add(Right.valueOf(id));
                                }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.properties.xml
 Sun Apr 17 17:08:47 2016
@@ -1909,4 +1909,5 @@
        <entry key="dashboard.widget.admin.cleanup.warn">Are you sure you want 
to delete all temporary files? This operation cannot be undone.</entry>
        <entry key="dashboard.widget.admin.cleanup.error">Unexpected error 
while performing cleanup</entry>
        <entry key="room.action.request.right.moderator">would like to be 
moderator of this room.</entry>
+       <entry key="admin.room.hidden.elements">Hidden room elements</entry>
 </properties>

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=1739633&r1=1739632&r2=1739633&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
 Sun Apr 17 17:08:47 2016
@@ -33,6 +33,7 @@ import org.apache.openmeetings.db.dao.us
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
 import org.apache.openmeetings.db.entity.room.Room;
+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;
@@ -133,10 +134,17 @@ public class RoomPanel extends BasePanel
                getClient().setRoomId(r.getId());
                super.onInitialize();
                Component accessDenied = new 
WebMarkupContainer(ACCESS_DENIED_ID).setVisible(false);
+               room.add((menu = new RoomMenuPanel("menu", 
this)).setVisible(!r.getHiddenElements().contains(RoomElement.TopBar)));
+               WebMarkupContainer wb = new WebMarkupContainer("whiteboard");
+               room.add(wb.setOutputMarkupId(true));
+               room.add(new WhiteboardBehavior("1", wb.getMarkupId(), null, 
null, null));
+               room.add(aab);
+               room.add(sidebar = new RoomSidebar("sidebar", this));
+               room.add((activities = new ActivitiesPanel("activities", 
this)).setVisible(!r.getHiddenElements().contains(RoomElement.Activities)));
                add(roomClosed = new RedirectMessageDialog("room-closed", 
"1098", r.isClosed(), r.getRedirectURL()));
                if (r.isClosed()) {
                        room.setVisible(false);
-               } else if (r.getNumberOfPartizipants() >= 
getRoomUsers(r.getId()).size()) {
+               } else if (getRoomUsers(r.getId()).size() >= 
r.getNumberOfPartizipants()) {
                        accessDenied = new 
ExpiredMessageDialog(ACCESS_DENIED_ID, getString("99"), menu);
                        room.setVisible(false);
                } else {
@@ -192,15 +200,8 @@ public class RoomPanel extends BasePanel
                                room.setVisible(false);
                        }
                }
-               room.add((menu = new RoomMenuPanel("menu", 
this)).setVisible(!r.getHideTopBar()));
-               WebMarkupContainer wb = new WebMarkupContainer("whiteboard");
-               room.add(wb.setOutputMarkupId(true));
-               room.add(new WhiteboardBehavior("1", wb.getMarkupId(), null, 
null, null));
-               room.add(aab);
-               room.add(sidebar = new RoomSidebar("sidebar", this));
-               room.add((activities = new ActivitiesPanel("activities", 
this)).setVisible(!r.isActivitiesHidden()));
                add(room, accessDenied);
-               if (r.getWaitForRecording()) {
+               if (r.isWaitForRecording()) {
                        add(new MessageDialog("wait-for-recording", 
getString("1316"), getString("1315"), DialogButtons.OK, DialogIcon.INFO) 
{//DialogIcon.LIGHT
                                private static final long serialVersionUID = 1L;
        
@@ -349,7 +350,7 @@ public class RoomPanel extends BasePanel
        @Override
        public void onMenuPanelLoad(IPartialPageRequestHandler handler) {
                handler.add(getMainPage().getHeader().setVisible(false), 
getMainPage().getTopControls().setVisible(false));
-               if (r.isChatHidden()) {
+               if (r.getHiddenElements().contains(RoomElement.Chat)) {
                        getMainPage().getChat().toggle(handler, false);
                }
                handler.appendJavaScript("roomLoad();");
@@ -358,7 +359,7 @@ public class RoomPanel extends BasePanel
        @Override
        public void cleanup(IPartialPageRequestHandler handler) {
                handler.add(getMainPage().getHeader().setVisible(true), 
getMainPage().getTopControls().setVisible(true));
-               if (r.isChatHidden()) {
+               if (r.getHiddenElements().contains(RoomElement.Chat)) {
                        getMainPage().getChat().toggle(handler, true);
                }
                
handler.appendJavaScript("$(window).off('resize.openmeetings');");

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
 Sun Apr 17 17:08:47 2016
@@ -32,6 +32,7 @@ import org.apache.openmeetings.db.dao.ba
 import org.apache.openmeetings.db.dao.room.PollDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.entity.user.User.Right;
 import org.apache.openmeetings.util.message.RoomMessage;
@@ -142,7 +143,7 @@ public class RoomMenuPanel extends Panel
                setOutputMarkupPlaceholderTag(true);
                this.room = room;
                Room r = room.getRoom();
-               add((menuPanel = new MenuPanel("menu", 
getMenu())).setVisible(!r.getHideTopBar()));
+               add((menuPanel = new MenuPanel("menu", 
getMenu())).setVisible(!r.getHiddenElements().contains(RoomElement.TopBar)));
                add(askBtn);
                add(new Label("roomName", r.getName()));
                add(new Label("recording", "Recording 
started").setVisible(false)); //FIXME add/remove
@@ -213,11 +214,11 @@ public class RoomMenuPanel extends Panel
                boolean notExternalUser = u.getType() != User.Type.external && 
u.getType() != User.Type.contact;
                exitMenuItem.setEnabled(notExternalUser);//TODO check this
                filesMenu.setEnabled(room.getSidebar().isShowFiles());
-               actionsMenu.setEnabled(!r.getHideActionsMenu() && 
r.getAllowUserQuestions());
+               
actionsMenu.setEnabled(!r.getHiddenElements().contains(RoomElement.ActionsMenu) 
&& r.isAllowUserQuestions());
                boolean moder = 
room.getClient().hasRight(Client.Right.moderator);
                inviteMenuItem.setEnabled(notExternalUser && moder);
                //TODO add check "sharing started"
-               boolean shareVisible = Room.Type.interview != r.getType() && 
!r.getHideScreenSharing() && r.isAllowRecording() && moder;
+               boolean shareVisible = Room.Type.interview != r.getType() && 
!r.getHiddenElements().contains(RoomElement.ScreenSharing) && 
r.isAllowRecording() && moder;
                shareMenuItem.setEnabled(shareVisible);
                //FIXME TODO apply* should be enabled if moder is in room
                applyModerMenuItem.setEnabled(!moder);
@@ -229,7 +230,7 @@ public class RoomMenuPanel extends Panel
                //TODO sip menus
                menuPanel.update(handler);
                //FIXME TODO askBtn should be visible if moder is in room
-               handler.add(askBtn.setVisible(!moder && 
r.getAllowUserQuestions()));
+               handler.add(askBtn.setVisible(!moder && 
r.isAllowUserQuestions()));
                handler.add(shareBtn.setVisible(shareVisible));
        }
 

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
 Sun Apr 17 17:08:47 2016
@@ -28,6 +28,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.app.Client.Right;
@@ -71,7 +72,7 @@ public class RoomSidebar extends Panel {
                        item.add(status);
                        item.add(new Label("name", rc.u.getFirstname() + " " + 
rc.u.getLastname()));
                        item.add(AttributeAppender.append("data-userid", 
rc.u.getId()));
-                       item.add(new 
WebMarkupContainer("privateChat").setVisible(!room.getRoom().isChatHidden() && 
!getUserId().equals(rc.u.getId())));
+                       item.add(new 
WebMarkupContainer("privateChat").setVisible(!room.getRoom().getHiddenElements().contains(RoomElement.Chat)
 && !getUserId().equals(rc.u.getId())));
                        if (room.getClient() != null && 
rc.c.getUid().equals(room.getClient().getUid())) {
                                item.add(AttributeAppender.append("class", 
"current"));
                        }
@@ -160,7 +161,7 @@ public class RoomSidebar extends Panel {
        }
        
        private void updateShowFiles() {
-               showFiles = !room.getRoom().getHideFilesExplorer() && 
room.getClient().hasRight(Right.whiteBoard);
+               showFiles = 
!room.getRoom().getHiddenElements().contains(RoomElement.Files) && 
room.getClient().hasRight(Right.whiteBoard);
        }
        
        public void updateUsers(IPartialPageRequestHandler handler) {

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java?rev=1739633&r1=1739632&r2=1739633&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
 Sun Apr 17 17:08:47 2016
@@ -42,6 +42,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.RoomElement;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.Client;
@@ -189,7 +190,7 @@ public class ChatPanel extends BasePanel
        }
 
        public void roomEnter(Room r, AjaxRequestTarget target) {
-               if (r.isChatHidden()) {
+               if (r.getHiddenElements().contains(RoomElement.Chat)) {
                        toggle(target, false);
                        return;
                }
@@ -206,7 +207,7 @@ public class ChatPanel extends BasePanel
        }
        
        public void roomExit(Room r, IPartialPageRequestHandler handler) {
-               if (r.isChatHidden()) {
+               if (r.getHiddenElements().contains(RoomElement.Chat)) {
                        return;
                }
                
handler.appendJavaScript(String.format("removeChatTab('%1$s%2$d');", 
ID_ROOM_PREFIX, r.getId()));


Reply via email to