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/24 10:24:08 UTC

svn commit: r1740681 - in /openmeetings/application: branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/ branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ branches/3.2.x/openmeetings-...

Author: solomax
Date: Sun Apr 24 08:24:08 2016
New Revision: 1740681

URL: http://svn.apache.org/viewvc?rev=1740681&view=rev
Log:
[OPENMEETINGS-1376] some icons are partially implemented

Added:
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java
Modified:
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.html
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.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/util/CallbackFunctionHelper.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.html
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.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/util/CallbackFunctionHelper.java

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=1740681&r1=1740680&r2=1740681&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 24 08:24:08 2016
@@ -268,19 +268,19 @@ public class RoomPanel extends BasePanel
 					case requestRightModerator:
 						if (getClient().hasRight(Right.moderator) && !isModerator(m.getUserId(), r.getId())) {
 							TextRoomMessage tm = (TextRoomMessage)m;
-							activities.add(new Activity(tm.getText(), m.getUserId(), Activity.Type.requestRightModerator), handler);
+							activities.add(new Activity(tm.getText(), m.getUserId(), Activity.Type.reqRightModerator), handler);
 						}
 						break;
 					case requestRightAv:
 						if (getClient().hasRight(Right.moderator) && !hasRight(m.getUserId(), r.getId(), Right.audio) && !hasRight(m.getUserId(), r.getId(), Right.video)) {
 							TextRoomMessage tm = (TextRoomMessage)m;
-							activities.add(new Activity(tm.getText(), m.getUserId(), Activity.Type.requestRightAv), handler);
+							activities.add(new Activity(tm.getText(), m.getUserId(), Activity.Type.reqRightAv), handler);
 						}
 						break;
 					case requestRightWb:
 						if (getClient().hasRight(Right.moderator) && !hasRight(m.getUserId(), r.getId(), Right.whiteBoard)) {
 							TextRoomMessage tm = (TextRoomMessage)m;
-							activities.add(new Activity(tm.getText(), m.getUserId(), Activity.Type.requestRightWb), handler);
+							activities.add(new Activity(tm.getText(), m.getUserId(), Activity.Type.reqRightWb), handler);
 						}
 						break;
 					case activityRemove:
@@ -398,6 +398,18 @@ public class RoomPanel extends BasePanel
 		}
 	}
 
+	public void requestRight(AjaxRequestTarget target, RoomMessage.Type right) {
+		RoomPanel.broadcast(new TextRoomMessage(getRoom().getId(), getUserId(), right, getClient().getUid()));
+	}
+	
+	public void allowRight(AjaxRequestTarget target, Client client, Right... rights) {
+		for (Right right : rights) {
+			client.getRights().add(right);
+		}
+		broadcast(new RoomMessage(getRoom().getId(), getUserId(), RoomMessage.Type.rightUpdated));
+		RoomBroadcaster.sendUpdatedClient(client);
+	}
+	
 	public Room getRoom() {
 		return r;
 	}

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java?rev=1740681&r1=1740680&r2=1740681&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java Sun Apr 24 08:24:08 2016
@@ -40,7 +40,6 @@ import org.apache.openmeetings.util.mess
 import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.common.BasePanel;
-import org.apache.openmeetings.web.room.RoomBroadcaster;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
@@ -102,24 +101,17 @@ public class ActivitiesPanel extends Bas
 							Client client = getOnlineClient(uid);
 							if (room.getClient().hasRight(Client.Right.moderator) && client != null && roomId == client.getRoomId()) {
 								switch (a.getType()) {
-									case requestRightModerator:
-										client.getRights().add(Right.moderator);
+									case reqRightModerator:
 										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, uid));
-										broadcast(new RoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.rightUpdated));
-										RoomBroadcaster.sendUpdatedClient(client);
+										room.allowRight(target, client, Right.moderator);
 										break;
-									case requestRightAv:
-										client.getRights().add(Right.audio);
-										client.getRights().add(Right.video);
+									case reqRightAv:
 										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, uid));
-										broadcast(new RoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.rightUpdated));
-										RoomBroadcaster.sendUpdatedClient(client);
+										room.allowRight(target, client, Right.audio, Right.video);
 										break;
-									case requestRightWb:
-										client.getRights().add(Right.whiteBoard);
+									case reqRightWb:
 										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, uid));
-										broadcast(new RoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.rightUpdated));
-										RoomBroadcaster.sendUpdatedClient(client);
+										room.allowRight(target, client, Right.whiteBoard);
 										break;
 									default:
 										break;
@@ -162,7 +154,7 @@ public class ActivitiesPanel extends Bas
 					text = String.format("%s %s %s [%s]", u.getFirstname(), u.getLastname(), getString("1367"), df.get().format(a.getCreated()));
 				}
 					break;
-				case requestRightModerator:
+				case reqRightModerator:
 				{
 					User u = getBean(UserDao.class).get(a.getSender());
 					text = String.format("%s %s %s [%s]", u.getFirstname(), u.getLastname(), getString("room.action.request.right.moderator"), df.get().format(a.getCreated()));
@@ -171,7 +163,7 @@ public class ActivitiesPanel extends Bas
 				}
 				//ask question 693
 					break;
-				case requestRightAv:
+				case reqRightAv:
 				{
 					User u = getBean(UserDao.class).get(a.getSender());
 					text = String.format("%s %s %s [%s]", u.getFirstname(), u.getLastname(), getString("695"), df.get().format(a.getCreated()));
@@ -179,7 +171,7 @@ public class ActivitiesPanel extends Bas
 					decline.setVisible(true);
 				}
 					break;
-				case requestRightWb:
+				case reqRightWb:
 				{
 					User u = getBean(UserDao.class).get(a.getSender());
 					text = String.format("%s %s %s [%s]", u.getFirstname(), u.getLastname(), getString("694"), df.get().format(a.getCreated()));
@@ -195,11 +187,11 @@ public class ActivitiesPanel extends Bas
 		
 		private String getClass(Activity a) {
 			switch (a.getType()) {
-				case requestRightModerator:
+				case reqRightModerator:
 					return "ui-state-highlight";
-				case requestRightAv:
+				case reqRightAv:
 					return "ui-state-highlight";
-				case requestRightWb:
+				case reqRightWb:
 					return "ui-state-highlight";
 				case roomEnter:
 				case roomExit:

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java?rev=1740681&r1=1740680&r2=1740681&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java Sun Apr 24 08:24:08 2016
@@ -26,9 +26,9 @@ public class Activity implements Seriali
 	public enum Type {
 		roomEnter
 		, roomExit
-		, requestRightModerator
-		, requestRightAv
-		, requestRightWb
+		, reqRightModerator
+		, reqRightAv
+		, reqRightWb
 	}
 	private final String uid;
 	private final Long sender;

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=1740681&r1=1740680&r2=1740681&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 24 08:24:08 2016
@@ -85,7 +85,7 @@ public class RoomMenuPanel extends Panel
 		}
 		@Override
 		public void onClick(AjaxRequestTarget target) {
-			RoomPanel.broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.requestRightModerator, room.getClient().getUid()));
+			room.requestRight(target, RoomMessage.Type.requestRightModerator);
 		}
 	};
 	private final RoomPanel room;

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java?rev=1740681&r1=1740680&r2=1740681&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java Sun Apr 24 08:24:08 2016
@@ -59,7 +59,7 @@ public class RoomClientPanel extends Pan
 		add(new Label("name", u.getFirstname() + " " + u.getLastname()));
 		add(AttributeAppender.append("data-userid", c.getUserId()));
 		WebMarkupContainer actions = new WebMarkupContainer("actions");
-		actions.add(new RoomRightPanel("rights"));
+		actions.add(new RoomRightPanel("rights", c, room));
 		actions.add(new WebMarkupContainer("privateChat").setVisible(!room.getRoom().isHidden(RoomElement.Chat) && !getUserId().equals(c.getUserId())));
 		if (room.getClient() != null) {
 			actions.setVisible(room.getClient().hasRight(Right.moderator));

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.html?rev=1740681&r1=1740680&r2=1740681&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.html (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.html Sun Apr 24 08:24:08 2016
@@ -20,12 +20,12 @@
 -->
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:panel>
-	<span class="ui-icon align-left clickable moderator-right" wicket:message="title:676"></span>
-	<span class="ui-icon align-left clickable wb-right" wicket:message="title:611"></span>
-	<span class="ui-icon align-left clickable screen-share-right" wicket:message="title:1067"></span>
-	<span class="ui-icon align-left clickable remote-control-right" wicket:message="title:1078"></span>
-	<span class="ui-icon align-left clickable audio-right" wicket:message="title:1604"></span>
-	<span class="ui-icon align-left clickable camera-right" wicket:message="title:683"></span>
+	<span wicket:id="right-moder"></span>
+	<span wicket:id="right-wb"></span>
+	<span wicket:id="right-screen-share"></span>
+	<span wicket:id="right-remote-control"></span>
+	<span wicket:id="right-audio"></span>
+	<span wicket:id="right-video"></span>
 	<span class="ui-icon align-left clickable global-mute" wicket:message="title:1384"></span>
 	<span class="ui-icon align-left clickable exclsv-audio" wicket:message="title:1424"></span>
 </wicket:panel>

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.java?rev=1740681&r1=1740680&r2=1740681&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.java Sun Apr 24 08:24:08 2016
@@ -18,14 +18,50 @@
  */
 package org.apache.openmeetings.web.room.sidebar;
 
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.room.RoomPanel;
+import org.apache.openmeetings.web.room.sidebar.icon.AudioRightIcon;
+import org.apache.openmeetings.web.room.sidebar.icon.ModeratorRightIcon;
+import org.apache.openmeetings.web.room.sidebar.icon.RemoteControlRightIcon;
+import org.apache.openmeetings.web.room.sidebar.icon.ScreenShareRightIcon;
+import org.apache.openmeetings.web.room.sidebar.icon.VideoRightIcon;
+import org.apache.openmeetings.web.room.sidebar.icon.WhiteboardRightIcon;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.panel.Panel;
 
 public class RoomRightPanel extends Panel {
 	private static final long serialVersionUID = 1L;
+	private final ModeratorRightIcon rightModer;
+	private final WhiteboardRightIcon rightWb;
+	private final ScreenShareRightIcon rightScreen;
+	private final RemoteControlRightIcon rightRemote;
+	private final AudioRightIcon rightAudio;
+	private final VideoRightIcon rightVideo;
 
-	public RoomRightPanel(String id) {
+	public RoomRightPanel(String id, Client client, RoomPanel room) {
 		super(id);
 		setRenderBodyOnly(true);
 		setOutputMarkupId(true);
+		add(rightModer = new ModeratorRightIcon("right-moder", client, room));
+		add(rightWb = new WhiteboardRightIcon("right-wb", client, room));
+		add(rightScreen = new ScreenShareRightIcon("right-screen-share", client, room));
+		add(rightRemote = new RemoteControlRightIcon("right-remote-control", client, room));
+		add(rightAudio = new AudioRightIcon("right-audio", client, room));
+		add(rightVideo = new VideoRightIcon("right-video", client, room));
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		update(null);
+	}
+	
+	public void update(IPartialPageRequestHandler handler) {
+		rightModer.update(handler);
+		rightWb.update(handler);
+		rightScreen.update(handler);
+		rightRemote.update(handler);
+		rightAudio.update(handler);
+		rightVideo.update(handler);
 	}
 }

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=1740681&r1=1740680&r2=1740681&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 24 08:24:08 2016
@@ -18,17 +18,27 @@
  */
 package org.apache.openmeetings.web.room.sidebar;
 
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getOnlineClient;
 import static org.apache.openmeetings.web.app.Application.getRoomUsers;
+import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
+import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.util.message.RoomMessage;
 import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.room.RoomPanel;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.markup.html.tabs.ITab;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
@@ -36,11 +46,17 @@ import org.apache.wicket.markup.html.pan
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
 
 import com.googlecode.wicket.jquery.ui.widget.tabs.TabbedPanel;
 
 public class RoomSidebar extends Panel {
 	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomSidebar.class, webAppRootKey);
+	public static final String FUNC_REQUEST_RIGHT = "requestRight";
+	public static final String PARAM_RIGHT = "right";
+	public static final String PARAM_UID = "uid";
 	private final RoomPanel room;
 	private final TabbedPanel tabs;
 	private final ITab userTab;
@@ -57,6 +73,25 @@ public class RoomSidebar extends Panel {
 			item.add(new RoomClientPanel("user", item, room));
 		}
 	};
+	private final AbstractDefaultAjaxBehavior requestRight = new AbstractDefaultAjaxBehavior() {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected void respond(AjaxRequestTarget target) {
+			try {
+				String uid = getRequest().getRequestParameters().getParameterValue(PARAM_UID).toString(); 
+				Right right = Right.valueOf(getRequest().getRequestParameters().getParameterValue(PARAM_RIGHT).toString()); 
+				if (room.getClient().hasRight(Right.moderator)) {
+					Client client = getOnlineClient(uid);
+					room.allowRight(target, client, right);
+				} else {
+					room.requestRight(target, RoomMessage.Type.requestRightModerator);
+				}
+			} catch (Exception e) {
+				log.error("Unexpected exception while processing activity action", e);
+			}
+		}
+	};
 	
 	public RoomSidebar(String id, final RoomPanel room) {
 		super(id);
@@ -101,8 +136,15 @@ public class RoomSidebar extends Panel {
 		};
 		add(tabs = new TabbedPanel("tabs", Arrays.asList(userTab, fileTab)).setActiveTab(room.getRoom().isFilesOpened() ? 1 : 0));
 		roomFiles = new RoomFilePanel("tree", room);
-		selfRights = new RoomRightPanel("rights");
+		selfRights = new RoomRightPanel("rights", room.getClient(), room);
 		add(upload = new UploadDialog("upload", room, roomFiles));
+		add(requestRight);
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction(FUNC_REQUEST_RIGHT, requestRight, explicit(PARAM_RIGHT), explicit(PARAM_UID)), FUNC_REQUEST_RIGHT)));
 	}
 	
 	private ListView<Client> updateUsers() {
@@ -138,6 +180,7 @@ public class RoomSidebar extends Panel {
 	public void updateUsers(IPartialPageRequestHandler handler) {
 		updateShowFiles();
 		updateUsers();
+		selfRights.update(handler);
 		handler.add(tabs);
 	}
 

Added: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+
+public class AudioRightIcon extends RoomRightIcon {
+	private static final long serialVersionUID = 1L;
+	
+	public AudioRightIcon(String id, Client client, RoomPanel room) {
+		super(id, client, Right.audio, room);
+		mainCssClass = "audio-right ";
+	}
+
+	@Override
+	protected boolean hasRight() {
+		return false; //FIXME TODO need some flag
+	}
+	
+	@Override
+	protected String getTitle() {
+		return getString(self ? "1606" : "1604");
+	}
+}

Added: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+
+public class ModeratorRightIcon extends RoomRightIcon {
+	private static final long serialVersionUID = 1L;
+	
+	public ModeratorRightIcon(String id, Client client, RoomPanel room) {
+		super(id, client, Right.moderator, room);
+		mainCssClass = "moderator-right ";
+	}
+
+	@Override
+	protected String getTitle() {
+		String title;
+		if (client.hasRight(right)) {
+			title = self ? "688" : "675";
+		} else {
+			title = self ? "685" : "676";
+		}
+		return getString(title);
+	}
+}

Added: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+
+public class RemoteControlRightIcon extends RoomRightIcon {
+	private static final long serialVersionUID = 1L;
+	
+	public RemoteControlRightIcon(String id, Client client, RoomPanel room) {
+		super(id, client, Right.remoteControl, room);
+		mainCssClass = "remote-control-right ";
+		Room r = room.getRoom();
+		setVisible(Room.Type.interview != r.getType() && !r.isHidden(RoomElement.ScreenSharing));
+	}
+
+	@Override
+	protected String getTitle() {
+		String title;
+		if (client.hasRight(right)) {
+			title = self ? "1081" : "1078";
+		} else {
+			title = "1080";
+		}
+		return getString(title);
+	}
+}

Added: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import static org.apache.openmeetings.web.room.sidebar.RoomSidebar.FUNC_REQUEST_RIGHT;
+
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
+public abstract class RoomRightIcon extends WebMarkupContainer {
+	private static final long serialVersionUID = 1L;
+	private static final String CLS_CLICKABLE = "clickable ";
+	private static final String CLS_GRANTED = "granted ";
+	private static final String ICON_CLASS = "ui-icon align-left ";
+	protected final Right right;
+	protected final boolean self;
+	protected final Client client;
+	protected String mainCssClass;
+	
+	public RoomRightIcon(String id, Client client, Right right, RoomPanel room) {
+		super(id);
+		this.client = client;
+		this.right = right;
+		self = room.getClient().getUid().equals(client.getUid());
+		setOutputMarkupId(true);
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		update(null);
+	}
+	
+	protected abstract String getTitle();
+	
+	protected boolean hasRight() {
+		return client.hasRight(right);
+	}
+	
+	public void update(IPartialPageRequestHandler handler) {
+		StringBuilder cls = new StringBuilder(ICON_CLASS);
+		cls.append(mainCssClass);
+		if (hasRight()) {
+			cls.append(CLS_GRANTED);
+		} else {
+			cls.append(CLS_CLICKABLE);
+			add(AttributeAppender.replace("onclick", String.format("%s('%s', '%s');", FUNC_REQUEST_RIGHT, right.name(), client.getUid())));
+		}
+		add(AttributeAppender.replace("title", getTitle()));
+		add(AttributeAppender.replace("class", cls));
+		
+		if (handler != null) {
+			handler.add(this);
+		}
+	}
+}

Added: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+
+public class ScreenShareRightIcon extends RoomRightIcon {
+	private static final long serialVersionUID = 1L;
+	
+	public ScreenShareRightIcon(String id, Client client, RoomPanel room) {
+		super(id, client, Right.share, room);
+		mainCssClass = "screen-share-right ";
+		Room r = room.getRoom();
+		setVisible(Room.Type.interview != r.getType() && !r.isHidden(RoomElement.ScreenSharing));
+	}
+
+	@Override
+	protected String getTitle() {
+		String title;
+		if (client.hasRight(right)) {
+			title = self ? "1071" : "1068";
+		} else {
+			title = "1072";
+		}
+		return getString(title);
+	}
+}

Added: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+
+public class VideoRightIcon extends RoomRightIcon {
+	private static final long serialVersionUID = 1L;
+	
+	public VideoRightIcon(String id, Client client, RoomPanel room) {
+		super(id, client, Right.video, room);
+		mainCssClass = "camera-right ";
+		setVisible(!room.getRoom().isAudioOnly());
+	}
+
+	@Override
+	protected boolean hasRight() {
+		return false; //FIXME TODO need some flag
+	}
+	
+	@Override
+	protected String getTitle() {
+		return getString(self ? "687" : "683");
+	}
+}

Added: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java (added)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+
+public class WhiteboardRightIcon extends RoomRightIcon {
+	private static final long serialVersionUID = 1L;
+	
+	public WhiteboardRightIcon(String id, Client client, RoomPanel room) {
+		super(id, client, Right.whiteBoard, room);
+		mainCssClass = "wb-right ";
+		Room r = room.getRoom();
+		setVisible(Room.Type.interview != r.getType() && !r.isHidden(RoomElement.Whiteboard));
+	}
+
+	@Override
+	protected String getTitle() {
+		String title;
+		if (client.hasRight(right)) {
+			title = self ? "689" : "612";
+		} else {
+			title = self ? "686" : "694";
+		}
+		return getString(title);
+	}
+}

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java?rev=1740681&r1=1740680&r2=1740681&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java Sun Apr 24 08:24:08 2016
@@ -26,14 +26,13 @@ public class CallbackFunctionHelper {
 		StringBuilder sb = new StringBuilder();
 		sb.append("function ").append(name).append("(");
 		boolean first = true;
-		for (CallbackParameter curExtraParameter : extraParameters)
-		{
-			if (curExtraParameter.getFunctionParameterName() != null)
-			{
-				if (!first)
-					sb.append(',');
-				else
+		for (CallbackParameter curExtraParameter : extraParameters) {
+			if (curExtraParameter.getFunctionParameterName() != null) {
+				if (first) {
 					first = false;
+				} else {
+					sb.append(',');
+				}
 				sb.append(curExtraParameter.getFunctionParameterName());
 			}
 		}

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=1740681&r1=1740680&r2=1740681&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 24 08:24:08 2016
@@ -287,19 +287,19 @@ public class RoomPanel extends BasePanel
 					case requestRightModerator:
 						if (getClient().hasRight(Right.moderator) && !isModerator(m.getUserId(), r.getId())) {
 							TextRoomMessage tm = (TextRoomMessage)m;
-							activities.add(new Activity(tm.getText(), m.getUserId(), Activity.Type.requestRightModerator), handler);
+							activities.add(new Activity(tm.getText(), m.getUserId(), Activity.Type.reqRightModerator), handler);
 						}
 						break;
 					case requestRightAv:
 						if (getClient().hasRight(Right.moderator) && !hasRight(m.getUserId(), r.getId(), Right.audio) && !hasRight(m.getUserId(), r.getId(), Right.video)) {
 							TextRoomMessage tm = (TextRoomMessage)m;
-							activities.add(new Activity(tm.getText(), m.getUserId(), Activity.Type.requestRightAv), handler);
+							activities.add(new Activity(tm.getText(), m.getUserId(), Activity.Type.reqRightAv), handler);
 						}
 						break;
 					case requestRightWb:
 						if (getClient().hasRight(Right.moderator) && !hasRight(m.getUserId(), r.getId(), Right.whiteBoard)) {
 							TextRoomMessage tm = (TextRoomMessage)m;
-							activities.add(new Activity(tm.getText(), m.getUserId(), Activity.Type.requestRightWb), handler);
+							activities.add(new Activity(tm.getText(), m.getUserId(), Activity.Type.reqRightWb), handler);
 						}
 						break;
 					case activityRemove:
@@ -429,6 +429,18 @@ public class RoomPanel extends BasePanel
 		}
 	}
 
+	public void requestRight(AjaxRequestTarget target, RoomMessage.Type right) {
+		RoomPanel.broadcast(new TextRoomMessage(getRoom().getId(), getUserId(), right, getClient().getUid()));
+	}
+	
+	public void allowRight(AjaxRequestTarget target, Client client, Right... rights) {
+		for (Right right : rights) {
+			client.getRights().add(right);
+		}
+		broadcast(new RoomMessage(getRoom().getId(), getUserId(), RoomMessage.Type.rightUpdated));
+		RoomBroadcaster.sendUpdatedClient(client);
+	}
+	
 	public Room getRoom() {
 		return r;
 	}

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java?rev=1740681&r1=1740680&r2=1740681&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/ActivitiesPanel.java Sun Apr 24 08:24:08 2016
@@ -40,7 +40,6 @@ import org.apache.openmeetings.util.mess
 import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.common.BasePanel;
-import org.apache.openmeetings.web.room.RoomBroadcaster;
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
@@ -102,24 +101,17 @@ public class ActivitiesPanel extends Bas
 							Client client = getOnlineClient(uid);
 							if (room.getClient().hasRight(Client.Right.moderator) && client != null && roomId == client.getRoomId()) {
 								switch (a.getType()) {
-									case requestRightModerator:
-										client.getRights().add(Right.moderator);
+									case reqRightModerator:
 										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, uid));
-										broadcast(new RoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.rightUpdated));
-										RoomBroadcaster.sendUpdatedClient(client);
+										room.allowRight(target, client, Right.moderator);
 										break;
-									case requestRightAv:
-										client.getRights().add(Right.audio);
-										client.getRights().add(Right.video);
+									case reqRightAv:
 										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, uid));
-										broadcast(new RoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.rightUpdated));
-										RoomBroadcaster.sendUpdatedClient(client);
+										room.allowRight(target, client, Right.audio, Right.video);
 										break;
-									case requestRightWb:
-										client.getRights().add(Right.whiteBoard);
+									case reqRightWb:
 										broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.activityRemove, uid));
-										broadcast(new RoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.rightUpdated));
-										RoomBroadcaster.sendUpdatedClient(client);
+										room.allowRight(target, client, Right.whiteBoard);
 										break;
 									default:
 										break;
@@ -162,7 +154,7 @@ public class ActivitiesPanel extends Bas
 					text = String.format("%s %s %s [%s]", u.getFirstname(), u.getLastname(), getString("1367"), df.get().format(a.getCreated()));
 				}
 					break;
-				case requestRightModerator:
+				case reqRightModerator:
 				{
 					User u = getBean(UserDao.class).get(a.getSender());
 					text = String.format("%s %s %s [%s]", u.getFirstname(), u.getLastname(), getString("room.action.request.right.moderator"), df.get().format(a.getCreated()));
@@ -171,7 +163,7 @@ public class ActivitiesPanel extends Bas
 				}
 				//ask question 693
 					break;
-				case requestRightAv:
+				case reqRightAv:
 				{
 					User u = getBean(UserDao.class).get(a.getSender());
 					text = String.format("%s %s %s [%s]", u.getFirstname(), u.getLastname(), getString("695"), df.get().format(a.getCreated()));
@@ -179,7 +171,7 @@ public class ActivitiesPanel extends Bas
 					decline.setVisible(true);
 				}
 					break;
-				case requestRightWb:
+				case reqRightWb:
 				{
 					User u = getBean(UserDao.class).get(a.getSender());
 					text = String.format("%s %s %s [%s]", u.getFirstname(), u.getLastname(), getString("694"), df.get().format(a.getCreated()));
@@ -195,11 +187,11 @@ public class ActivitiesPanel extends Bas
 		
 		private String getClass(Activity a) {
 			switch (a.getType()) {
-				case requestRightModerator:
+				case reqRightModerator:
 					return "ui-state-highlight";
-				case requestRightAv:
+				case reqRightAv:
 					return "ui-state-highlight";
-				case requestRightWb:
+				case reqRightWb:
 					return "ui-state-highlight";
 				case roomEnter:
 				case roomExit:

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java?rev=1740681&r1=1740680&r2=1740681&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/activities/Activity.java Sun Apr 24 08:24:08 2016
@@ -26,9 +26,9 @@ public class Activity implements Seriali
 	public enum Type {
 		roomEnter
 		, roomExit
-		, requestRightModerator
-		, requestRightAv
-		, requestRightWb
+		, reqRightModerator
+		, reqRightAv
+		, reqRightWb
 	}
 	private final String uid;
 	private final Long sender;

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=1740681&r1=1740680&r2=1740681&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 24 08:24:08 2016
@@ -85,7 +85,7 @@ public class RoomMenuPanel extends Panel
 		}
 		@Override
 		public void onClick(AjaxRequestTarget target) {
-			RoomPanel.broadcast(new TextRoomMessage(room.getRoom().getId(), getUserId(), RoomMessage.Type.requestRightModerator, room.getClient().getUid()));
+			room.requestRight(target, RoomMessage.Type.requestRightModerator);
 		}
 	};
 	private final RoomPanel room;

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java?rev=1740681&r1=1740680&r2=1740681&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomClientPanel.java Sun Apr 24 08:24:08 2016
@@ -59,7 +59,7 @@ public class RoomClientPanel extends Pan
 		add(new Label("name", u.getFirstname() + " " + u.getLastname()));
 		add(AttributeAppender.append("data-userid", c.getUserId()));
 		WebMarkupContainer actions = new WebMarkupContainer("actions");
-		actions.add(new RoomRightPanel("rights"));
+		actions.add(new RoomRightPanel("rights", c, room));
 		actions.add(new WebMarkupContainer("privateChat").setVisible(!room.getRoom().isHidden(RoomElement.Chat) && !getUserId().equals(c.getUserId())));
 		if (room.getClient() != null) {
 			actions.setVisible(room.getClient().hasRight(Right.moderator));

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.html?rev=1740681&r1=1740680&r2=1740681&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.html (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.html Sun Apr 24 08:24:08 2016
@@ -20,12 +20,12 @@
 -->
 <html xmlns:wicket="http://wicket.apache.org">
 <wicket:panel>
-	<span class="ui-icon align-left clickable moderator-right" wicket:message="title:676"></span>
-	<span class="ui-icon align-left clickable wb-right" wicket:message="title:611"></span>
-	<span class="ui-icon align-left clickable screen-share-right" wicket:message="title:1067"></span>
-	<span class="ui-icon align-left clickable remote-control-right" wicket:message="title:1078"></span>
-	<span class="ui-icon align-left clickable audio-right" wicket:message="title:1604"></span>
-	<span class="ui-icon align-left clickable camera-right" wicket:message="title:683"></span>
+	<span wicket:id="right-moder"></span>
+	<span wicket:id="right-wb"></span>
+	<span wicket:id="right-screen-share"></span>
+	<span wicket:id="right-remote-control"></span>
+	<span wicket:id="right-audio"></span>
+	<span wicket:id="right-video"></span>
 	<span class="ui-icon align-left clickable global-mute" wicket:message="title:1384"></span>
 	<span class="ui-icon align-left clickable exclsv-audio" wicket:message="title:1424"></span>
 </wicket:panel>

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.java?rev=1740681&r1=1740680&r2=1740681&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomRightPanel.java Sun Apr 24 08:24:08 2016
@@ -18,14 +18,50 @@
  */
 package org.apache.openmeetings.web.room.sidebar;
 
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.room.RoomPanel;
+import org.apache.openmeetings.web.room.sidebar.icon.AudioRightIcon;
+import org.apache.openmeetings.web.room.sidebar.icon.ModeratorRightIcon;
+import org.apache.openmeetings.web.room.sidebar.icon.RemoteControlRightIcon;
+import org.apache.openmeetings.web.room.sidebar.icon.ScreenShareRightIcon;
+import org.apache.openmeetings.web.room.sidebar.icon.VideoRightIcon;
+import org.apache.openmeetings.web.room.sidebar.icon.WhiteboardRightIcon;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.panel.Panel;
 
 public class RoomRightPanel extends Panel {
 	private static final long serialVersionUID = 1L;
+	private final ModeratorRightIcon rightModer;
+	private final WhiteboardRightIcon rightWb;
+	private final ScreenShareRightIcon rightScreen;
+	private final RemoteControlRightIcon rightRemote;
+	private final AudioRightIcon rightAudio;
+	private final VideoRightIcon rightVideo;
 
-	public RoomRightPanel(String id) {
+	public RoomRightPanel(String id, Client client, RoomPanel room) {
 		super(id);
 		setRenderBodyOnly(true);
 		setOutputMarkupId(true);
+		add(rightModer = new ModeratorRightIcon("right-moder", client, room));
+		add(rightWb = new WhiteboardRightIcon("right-wb", client, room));
+		add(rightScreen = new ScreenShareRightIcon("right-screen-share", client, room));
+		add(rightRemote = new RemoteControlRightIcon("right-remote-control", client, room));
+		add(rightAudio = new AudioRightIcon("right-audio", client, room));
+		add(rightVideo = new VideoRightIcon("right-video", client, room));
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		update(null);
+	}
+	
+	public void update(IPartialPageRequestHandler handler) {
+		rightModer.update(handler);
+		rightWb.update(handler);
+		rightScreen.update(handler);
+		rightRemote.update(handler);
+		rightAudio.update(handler);
+		rightVideo.update(handler);
 	}
 }

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=1740681&r1=1740680&r2=1740681&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 24 08:24:08 2016
@@ -18,17 +18,27 @@
  */
 package org.apache.openmeetings.web.room.sidebar;
 
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.web.app.Application.getOnlineClient;
 import static org.apache.openmeetings.web.app.Application.getRoomUsers;
+import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
+import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.util.message.RoomMessage;
 import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.app.Client.Right;
 import org.apache.openmeetings.web.room.RoomPanel;
+import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.extensions.markup.html.tabs.ITab;
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+import org.apache.wicket.markup.head.PriorityHeaderItem;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
@@ -36,11 +46,17 @@ import org.apache.wicket.markup.html.pan
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
 
 import com.googlecode.wicket.jquery.ui.widget.tabs.TabbedPanel;
 
 public class RoomSidebar extends Panel {
 	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomSidebar.class, webAppRootKey);
+	public static final String FUNC_REQUEST_RIGHT = "requestRight";
+	public static final String PARAM_RIGHT = "right";
+	public static final String PARAM_UID = "uid";
 	private final RoomPanel room;
 	private final TabbedPanel tabs;
 	private final ITab userTab;
@@ -57,6 +73,25 @@ public class RoomSidebar extends Panel {
 			item.add(new RoomClientPanel("user", item, room));
 		}
 	};
+	private final AbstractDefaultAjaxBehavior requestRight = new AbstractDefaultAjaxBehavior() {
+		private static final long serialVersionUID = 1L;
+
+		@Override
+		protected void respond(AjaxRequestTarget target) {
+			try {
+				String uid = getRequest().getRequestParameters().getParameterValue(PARAM_UID).toString(); 
+				Right right = Right.valueOf(getRequest().getRequestParameters().getParameterValue(PARAM_RIGHT).toString()); 
+				if (room.getClient().hasRight(Right.moderator)) {
+					Client client = getOnlineClient(uid);
+					room.allowRight(target, client, right);
+				} else {
+					room.requestRight(target, RoomMessage.Type.requestRightModerator);
+				}
+			} catch (Exception e) {
+				log.error("Unexpected exception while processing activity action", e);
+			}
+		}
+	};
 	
 	public RoomSidebar(String id, final RoomPanel room) {
 		super(id);
@@ -101,8 +136,15 @@ public class RoomSidebar extends Panel {
 		};
 		add(tabs = new TabbedPanel("tabs", Arrays.asList(userTab, fileTab)).setActiveTab(room.getRoom().isFilesOpened() ? 1 : 0));
 		roomFiles = new RoomFilePanel("tree", room);
-		selfRights = new RoomRightPanel("rights");
+		selfRights = new RoomRightPanel("rights", room.getClient(), room);
 		add(upload = new UploadDialog("upload", room, roomFiles));
+		add(requestRight);
+	}
+	
+	@Override
+	public void renderHead(IHeaderResponse response) {
+		super.renderHead(response);
+		response.render(new PriorityHeaderItem(JavaScriptHeaderItem.forScript(getNamedFunction(FUNC_REQUEST_RIGHT, requestRight, explicit(PARAM_RIGHT), explicit(PARAM_UID)), FUNC_REQUEST_RIGHT)));
 	}
 	
 	private ListView<Client> updateUsers() {
@@ -138,6 +180,7 @@ public class RoomSidebar extends Panel {
 	public void updateUsers(IPartialPageRequestHandler handler) {
 		updateShowFiles();
 		updateUsers();
+		selfRights.update(handler);
 		handler.add(tabs);
 	}
 

Added: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java (added)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/AudioRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+
+public class AudioRightIcon extends RoomRightIcon {
+	private static final long serialVersionUID = 1L;
+	
+	public AudioRightIcon(String id, Client client, RoomPanel room) {
+		super(id, client, Right.audio, room);
+		mainCssClass = "audio-right ";
+	}
+
+	@Override
+	protected boolean hasRight() {
+		return false; //FIXME TODO need some flag
+	}
+	
+	@Override
+	protected String getTitle() {
+		return getString(self ? "1606" : "1604");
+	}
+}

Added: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java (added)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ModeratorRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+
+public class ModeratorRightIcon extends RoomRightIcon {
+	private static final long serialVersionUID = 1L;
+	
+	public ModeratorRightIcon(String id, Client client, RoomPanel room) {
+		super(id, client, Right.moderator, room);
+		mainCssClass = "moderator-right ";
+	}
+
+	@Override
+	protected String getTitle() {
+		String title;
+		if (client.hasRight(right)) {
+			title = self ? "688" : "675";
+		} else {
+			title = self ? "685" : "676";
+		}
+		return getString(title);
+	}
+}

Added: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java (added)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RemoteControlRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+
+public class RemoteControlRightIcon extends RoomRightIcon {
+	private static final long serialVersionUID = 1L;
+	
+	public RemoteControlRightIcon(String id, Client client, RoomPanel room) {
+		super(id, client, Right.remoteControl, room);
+		mainCssClass = "remote-control-right ";
+		Room r = room.getRoom();
+		setVisible(Room.Type.interview != r.getType() && !r.isHidden(RoomElement.ScreenSharing));
+	}
+
+	@Override
+	protected String getTitle() {
+		String title;
+		if (client.hasRight(right)) {
+			title = self ? "1081" : "1078";
+		} else {
+			title = "1080";
+		}
+		return getString(title);
+	}
+}

Added: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java (added)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/RoomRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import static org.apache.openmeetings.web.room.sidebar.RoomSidebar.FUNC_REQUEST_RIGHT;
+
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+import org.apache.wicket.behavior.AttributeAppender;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+
+public abstract class RoomRightIcon extends WebMarkupContainer {
+	private static final long serialVersionUID = 1L;
+	private static final String CLS_CLICKABLE = "clickable ";
+	private static final String CLS_GRANTED = "granted ";
+	private static final String ICON_CLASS = "ui-icon align-left ";
+	protected final Right right;
+	protected final boolean self;
+	protected final Client client;
+	protected String mainCssClass;
+	
+	public RoomRightIcon(String id, Client client, Right right, RoomPanel room) {
+		super(id);
+		this.client = client;
+		this.right = right;
+		self = room.getClient().getUid().equals(client.getUid());
+		setOutputMarkupId(true);
+	}
+
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
+		update(null);
+	}
+	
+	protected abstract String getTitle();
+	
+	protected boolean hasRight() {
+		return client.hasRight(right);
+	}
+	
+	public void update(IPartialPageRequestHandler handler) {
+		StringBuilder cls = new StringBuilder(ICON_CLASS);
+		cls.append(mainCssClass);
+		if (hasRight()) {
+			cls.append(CLS_GRANTED);
+		} else {
+			cls.append(CLS_CLICKABLE);
+			add(AttributeAppender.replace("onclick", String.format("%s('%s', '%s');", FUNC_REQUEST_RIGHT, right.name(), client.getUid())));
+		}
+		add(AttributeAppender.replace("title", getTitle()));
+		add(AttributeAppender.replace("class", cls));
+		
+		if (handler != null) {
+			handler.add(this);
+		}
+	}
+}

Added: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java (added)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/ScreenShareRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+
+public class ScreenShareRightIcon extends RoomRightIcon {
+	private static final long serialVersionUID = 1L;
+	
+	public ScreenShareRightIcon(String id, Client client, RoomPanel room) {
+		super(id, client, Right.share, room);
+		mainCssClass = "screen-share-right ";
+		Room r = room.getRoom();
+		setVisible(Room.Type.interview != r.getType() && !r.isHidden(RoomElement.ScreenSharing));
+	}
+
+	@Override
+	protected String getTitle() {
+		String title;
+		if (client.hasRight(right)) {
+			title = self ? "1071" : "1068";
+		} else {
+			title = "1072";
+		}
+		return getString(title);
+	}
+}

Added: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java (added)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/VideoRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+
+public class VideoRightIcon extends RoomRightIcon {
+	private static final long serialVersionUID = 1L;
+	
+	public VideoRightIcon(String id, Client client, RoomPanel room) {
+		super(id, client, Right.video, room);
+		mainCssClass = "camera-right ";
+		setVisible(!room.getRoom().isAudioOnly());
+	}
+
+	@Override
+	protected boolean hasRight() {
+		return false; //FIXME TODO need some flag
+	}
+	
+	@Override
+	protected String getTitle() {
+		return getString(self ? "687" : "683");
+	}
+}

Added: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java?rev=1740681&view=auto
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java (added)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/icon/WhiteboardRightIcon.java Sun Apr 24 08:24:08 2016
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.web.room.sidebar.icon;
+
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.web.app.Client;
+import org.apache.openmeetings.web.app.Client.Right;
+import org.apache.openmeetings.web.room.RoomPanel;
+
+public class WhiteboardRightIcon extends RoomRightIcon {
+	private static final long serialVersionUID = 1L;
+	
+	public WhiteboardRightIcon(String id, Client client, RoomPanel room) {
+		super(id, client, Right.whiteBoard, room);
+		mainCssClass = "wb-right ";
+		Room r = room.getRoom();
+		setVisible(Room.Type.interview != r.getType() && !r.isHidden(RoomElement.Whiteboard));
+	}
+
+	@Override
+	protected String getTitle() {
+		String title;
+		if (client.hasRight(right)) {
+			title = self ? "689" : "612";
+		} else {
+			title = self ? "686" : "694";
+		}
+		return getString(title);
+	}
+}

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java?rev=1740681&r1=1740680&r2=1740681&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/CallbackFunctionHelper.java Sun Apr 24 08:24:08 2016
@@ -26,14 +26,13 @@ public class CallbackFunctionHelper {
 		StringBuilder sb = new StringBuilder();
 		sb.append("function ").append(name).append("(");
 		boolean first = true;
-		for (CallbackParameter curExtraParameter : extraParameters)
-		{
-			if (curExtraParameter.getFunctionParameterName() != null)
-			{
-				if (!first)
-					sb.append(',');
-				else
+		for (CallbackParameter curExtraParameter : extraParameters) {
+			if (curExtraParameter.getFunctionParameterName() != null) {
+				if (first) {
 					first = false;
+				} else {
+					sb.append(',');
+				}
 				sb.append(curExtraParameter.getFunctionParameterName());
 			}
 		}