You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2016/04/17 19:08:47 UTC

svn commit: r1739633 - in /openmeetings/application: branches/3.2.x/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ branches/3.2.x/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/ branches/3.2.x/openmeetings-...

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()));