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/15 08:40:59 UTC

svn commit: r1739231 - in /openmeetings/application: branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/ branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/popups/ branches/3.2.x/openmeetings-web/src...

Author: solomax
Date: Fri Apr 15 06:40:59 2016
New Revision: 1739231

URL: http://svn.apache.org/viewvc?rev=1739231&view=rev
Log:
[OPENMEETINGS-896] meeting timer is added, user list is improved

Removed:
    openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/popups/meetingTimer.lzx
Modified:
    openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx
    openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/popups/library.lzx
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
    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/webapp/css/room.css
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
    openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.java
    openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css

Modified: openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx?rev=1739231&r1=1739230&r2=1739231&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx Fri Apr 15 06:40:59 2016
@@ -59,8 +59,6 @@
     
     <attribute name="roomobj" value="null" />
     
-    <attribute name="meetingTimer" value="null" />
-    
 	<handler name="oninit">
 	<![CDATA[
     	if ($debug) Debug.write("baseConferenceRoom:: oninit");
@@ -88,11 +86,6 @@
 			if ($debug) Debug.write("no appointed meeting");
 		}
 		
-		if (this.roomobj.demoRoom && this.roomobj.demoTime != null) {
-			if ($debug) Debug.warn("THIS IS A DEMO ROOM THAT SHOULD CLOSE AFTER SEC: ",this.roomobj.demoTime);
-			this.meetingTimer = new lz.meetingTimer(canvas,{refObj:this, roomobj:this.roomobj});
-		}
-		
 		if ($debug) Debug.write("canvas._videocontainer ", canvas._videocontainer);
 		canvas._videocontainer.setAttribute("allowUserQuestions",this.roomobj.allowUserQuestions);
 	]]>

Modified: openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/popups/library.lzx
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/popups/library.lzx?rev=1739231&r1=1739230&r2=1739231&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/popups/library.lzx (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-flash/src/main/swf/modules/conference/popups/library.lzx Fri Apr 15 06:40:59 2016
@@ -37,7 +37,6 @@
     <include href="converterPopup.lzx" />
     <include href="errorModeratorPopup.lzx" />
     <include href="syncWin.lzx" />
-    <include href="meetingTimer.lzx" />
     <include href="incomingScreenSharing.lzx" />
     <include href="redirectBox.lzx" />
     <include href="chooseNickName.lzx" />

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1739231&r1=1739230&r2=1739231&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java Fri Apr 15 06:40:59 2016
@@ -102,9 +102,9 @@ import ro.fortsoft.wicket.dashboard.web.
 public class Application extends AuthenticatedWebApplication implements IApplication {
 	private static final Logger log = getLogger(Application.class, webAppRootKey);
 	private static boolean isInstalled;
-	private static Map<String, Client> ONLINE_USERS = new ConcurrentHashMap<>(); 
-	private static Map<String, Client> INVALID_SESSIONS = new ConcurrentHashMap<>();
-	private static Map<Long, Set<Client>> ROOMS = new ConcurrentHashMap<>();
+	private static ConcurrentHashMap<String, Client> ONLINE_USERS = new ConcurrentHashMap<>(); 
+	private static ConcurrentHashMap<String, Client> INVALID_SESSIONS = new ConcurrentHashMap<>();
+	private static ConcurrentHashMap<Long, Set<Client>> ROOMS = new ConcurrentHashMap<>();
 	//additional maps for faster searching should be created
 	private DashboardContext dashboardContext;
 	private static Set<String> STRINGS_WITH_APP = new HashSet<>(); //FIXME need to be removed
@@ -282,11 +282,8 @@ public class Application extends Authent
 	}
 	
 	public static Client addUserToRoom(Client c) {
-		Long roomId = c.getRoomId();
-		if (!ROOMS.containsKey(roomId)) {
-			ROOMS.put(roomId, new ConcurrentHashSet<Client>());
-		}
-		ROOMS.get(roomId).add(c);
+		ROOMS.putIfAbsent(c.getRoomId(), new ConcurrentHashSet<Client>());
+		ROOMS.get(c.getRoomId()).add(c);
 		return c;
 	}
 	
@@ -296,20 +293,18 @@ public class Application extends Authent
 		removeUserFromRoom(c);
 	}
 	
-	public static Client removeUserFromRoom(Client _c) {
-		if (ROOMS.containsKey(_c.getRoomId())) {
-			Set<Client> clients = ROOMS.get(_c.getRoomId());
-			for (Client c : clients) {
-				if (c.equals(_c)) {
-					clients.remove(c);
-					return c;
+	public static Client removeUserFromRoom(Client c) {
+		if (c.getRoomId() != null) {
+			Set<Client> clients = ROOMS.get(c.getRoomId());
+			if (clients != null) {
+				clients.remove(c);
+				if (clients.isEmpty()) {
+					ROOMS.remove(c.getRoomId());
 				}
-			}
-			if (clients.isEmpty()) {
-				ROOMS.remove(_c.getRoomId());
+				c.setRoomId(null);
 			}
 		}
-		return _c;
+		return c;
 	}
 	
 	public static Set<Client> getRoomUsers(long roomId) {

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=1739231&r1=1739230&r2=1739231&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 Fri Apr 15 06:40:59 2016
@@ -77,7 +77,6 @@ import com.googlecode.wicket.jquery.ui.w
 
 @AuthorizeInstantiation("Room")
 public class RoomPanel extends BasePanel {
-	//TODO demoTime - demo timer
 	private static final long serialVersionUID = 1L;
 	private static final Logger log = Red5LoggerFactory.getLogger(RoomPanel.class, webAppRootKey);
 	private final Room r;
@@ -137,7 +136,7 @@ public class RoomPanel extends BasePanel
 					allowed = true;
 				} else {
 					SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm"); //FIXME format
-					deniedMessage = Application.getString(1271) + String.format(" %s - %s", sdf.format(a.getStart()), sdf.format(a.getEnd()));
+					deniedMessage = getString("1271") + String.format(" %s - %s", sdf.format(a.getStart()), sdf.format(a.getEnd()));
 				}
 				*/
 			}
@@ -161,7 +160,7 @@ public class RoomPanel extends BasePanel
 		}
 		if (!allowed) {
 			if (deniedMessage == null) {
-				deniedMessage = Application.getString(1599);
+				deniedMessage = getString("1599");
 			}
 			accessDenied = new ExpiredMessageDialog("accessDenied", deniedMessage);
 			room.setVisible(false);

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html?rev=1739231&r1=1739230&r2=1739231&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html Fri Apr 15 06:40:59 2016
@@ -26,6 +26,7 @@
 		<span wicket:id="share" class="icon share"></span>
 		<span wicket:id="recording" class="room recording"></span>
 		<span wicket:id="roomName" class="room name"></span>
+		<span wicket:id="demo" class="ui-state-error room demo"></span>
 	</div>
 	<div wicket:id="invite"></div>
 	<div wicket:id="createPoll"></div>

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=1739231&r1=1739230&r2=1739231&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 Fri Apr 15 06:40:59 2016
@@ -46,13 +46,16 @@ import org.apache.openmeetings.web.room.
 import org.apache.openmeetings.web.room.poll.CreatePollDialog;
 import org.apache.openmeetings.web.room.poll.PollResultsDialog;
 import org.apache.openmeetings.web.room.poll.VoteDialog;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.behavior.AttributeAppender;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
 import org.apache.wicket.request.flow.RedirectToUrlException;
 import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.time.Duration;
 
 import com.googlecode.wicket.jquery.ui.widget.menu.IMenuItem;
 
@@ -150,10 +153,55 @@ public class RoomMenuPanel extends Panel
 		add(pollResults = new PollResultsDialog("pollResults", room.getRoom().getId()));
 	}
 	
+	
+	private static String getDemoTime(int remain) {
+		return Duration.seconds(remain).toString(WebSession.get().getLocale());
+	}
+	
+	private String getDemoText(int remain) {
+		return String.format("%s: %s", getString("637"), getDemoTime(remain));
+	}
+	
+	private String getDemoTitle(int remain) {
+		return String.format("%s: %s", getString("639"), getDemoTime(remain));
+	}
+	
 	@Override
 	protected void onInitialize() {
 		super.onInitialize();
 		askBtn.add(new AttributeAppender("title", getString("906")));
+		Label demo = new Label("demo", Model.of(""));
+		Room r = room.getRoom();
+		add(demo.setVisible(r.isDemoRoom() && r.getDemoTime() != null && room.getRoom().getDemoTime().intValue() > 0));
+		if (demo.isVisible()) {
+			demo.setOutputMarkupId(true);
+			demo.setDefaultModelObject(getDemoText(r.getDemoTime().intValue()));
+			demo.add(AttributeAppender.replace("title", getDemoTitle(r.getDemoTime().intValue())));
+			demo.add(new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+				private static final long serialVersionUID = 1L;
+				private final long clock;
+				{
+					clock = System.currentTimeMillis();
+				}
+
+				private int remain(long now) {
+					return (int)(room.getRoom().getDemoTime().longValue() - (now - clock) / 1000);
+				}
+
+				@Override
+				protected void onTimer(AjaxRequestTarget target) {
+					int remain = remain(System.currentTimeMillis());
+					if (remain > -1) {
+						getComponent().setDefaultModelObject(getDemoText(remain));
+						getComponent().add(AttributeAppender.replace("title", getDemoTitle(remain)));
+						target.add(getComponent());
+					} else {
+						stop(target);
+						exit(target);
+					}
+				}
+			});
+		}
 	}
 	
 	private List<IMenuItem> getMenu() {
@@ -192,7 +240,7 @@ public class RoomMenuPanel extends Panel
 		inviteMenuItem.setEnabled(notExternalUser && moder);
 		//TODO add check "sharing started"
 		Room r = room.getRoom();
-		boolean shareVisible = Room.Type.interview != r.getType() && !r.getHideScreenSharing() && moder;
+		boolean shareVisible = Room.Type.interview != r.getType() && !r.getHideScreenSharing() && r.isAllowRecording() && moder;
 		shareMenuItem.setEnabled(shareVisible);
 		shareBtn.setVisible(shareMenuItem.isEnabled());
 		//FIXME TODO apply* should be enabled if moder is in room
@@ -216,8 +264,8 @@ public class RoomMenuPanel extends Panel
 	
 	public void exit(IPartialPageRequestHandler handler) {
 		if (WebSession.getRights().contains(Right.Dashboard)) {
-			room.getMainPage().updateContents(ROOMS_PUBLIC, handler);
 			roomExit(room, false);
+			room.getMainPage().updateContents(ROOMS_PUBLIC, handler);
 		} else {
 			String url = getBean(ConfigurationDao.class).getConfValue(CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY, String.class, "");
 			if (Strings.isEmpty(url)) {
@@ -235,7 +283,7 @@ public class RoomMenuPanel extends Panel
 		Client c = room.getClient();
 		removeUserFromRoom(c);
 		if (broadcast) {
-			RoomMessage m = new RoomMessage(c.getRoomId(), c.getUserId(), RoomMessage.Type.roomExit);
+			RoomMessage m = new RoomMessage(room.getRoom().getId(), c.getUserId(), RoomMessage.Type.roomExit);
 			RoomPanel.broadcast(m);
 		}
 	}

Modified: openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css
URL: http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css?rev=1739231&r1=1739230&r2=1739231&view=diff
==============================================================================
--- openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css (original)
+++ openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/css/room.css Fri Apr 15 06:40:59 2016
@@ -52,6 +52,8 @@
 .room.menu.right .room.name {
 	font-weight: bold;
 }
+.room.menu.right .room.demo {
+}
 .room.menu.right .room.recording {
 	color: red;
 }

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java?rev=1739231&r1=1739230&r2=1739231&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java Fri Apr 15 06:40:59 2016
@@ -102,9 +102,9 @@ import ro.fortsoft.wicket.dashboard.web.
 public class Application extends AuthenticatedWebApplication implements IApplication {
 	private static final Logger log = getLogger(Application.class, webAppRootKey);
 	private static boolean isInstalled;
-	private static Map<String, Client> ONLINE_USERS = new ConcurrentHashMap<>(); 
-	private static Map<String, Client> INVALID_SESSIONS = new ConcurrentHashMap<>();
-	private static Map<Long, Set<Client>> ROOMS = new ConcurrentHashMap<>();
+	private static ConcurrentHashMap<String, Client> ONLINE_USERS = new ConcurrentHashMap<>(); 
+	private static ConcurrentHashMap<String, Client> INVALID_SESSIONS = new ConcurrentHashMap<>();
+	private static ConcurrentHashMap<Long, Set<Client>> ROOMS = new ConcurrentHashMap<>();
 	//additional maps for faster searching should be created
 	private DashboardContext dashboardContext;
 	private static Set<String> STRINGS_WITH_APP = new HashSet<>(); //FIXME need to be removed
@@ -282,11 +282,8 @@ public class Application extends Authent
 	}
 	
 	public static Client addUserToRoom(Client c) {
-		Long roomId = c.getRoomId();
-		if (!ROOMS.containsKey(roomId)) {
-			ROOMS.put(roomId, new ConcurrentHashSet<Client>());
-		}
-		ROOMS.get(roomId).add(c);
+		ROOMS.putIfAbsent(c.getRoomId(), new ConcurrentHashSet<Client>());
+		ROOMS.get(c.getRoomId()).add(c);
 		return c;
 	}
 	
@@ -296,20 +293,18 @@ public class Application extends Authent
 		removeUserFromRoom(c);
 	}
 	
-	public static Client removeUserFromRoom(Client _c) {
-		if (ROOMS.containsKey(_c.getRoomId())) {
-			Set<Client> clients = ROOMS.get(_c.getRoomId());
-			for (Client c : clients) {
-				if (c.equals(_c)) {
-					clients.remove(c);
-					return c;
+	public static Client removeUserFromRoom(Client c) {
+		if (c.getRoomId() != null) {
+			Set<Client> clients = ROOMS.get(c.getRoomId());
+			if (clients != null) {
+				clients.remove(c);
+				if (clients.isEmpty()) {
+					ROOMS.remove(c.getRoomId());
 				}
-			}
-			if (clients.isEmpty()) {
-				ROOMS.remove(_c.getRoomId());
+				c.setRoomId(null);
 			}
 		}
-		return _c;
+		return c;
 	}
 	
 	public static Set<Client> getRoomUsers(long roomId) {

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=1739231&r1=1739230&r2=1739231&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 Fri Apr 15 06:40:59 2016
@@ -82,7 +82,6 @@ import com.googlecode.wicket.jquery.ui.w
 
 @AuthorizeInstantiation("Room")
 public class RoomPanel extends BasePanel {
-	//TODO demoTime - demo timer
 	private static final long serialVersionUID = 1L;
 	private static final Logger log = Red5LoggerFactory.getLogger(RoomPanel.class, webAppRootKey);
 	private final Room r;
@@ -154,7 +153,7 @@ public class RoomPanel extends BasePanel
 					allowed = true;
 				} else {
 					SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm"); //FIXME format
-					deniedMessage = Application.getString(1271) + String.format(" %s - %s", sdf.format(a.getStart()), sdf.format(a.getEnd()));
+					deniedMessage = getString("1271") + String.format(" %s - %s", sdf.format(a.getStart()), sdf.format(a.getEnd()));
 				}
 				*/
 			}
@@ -178,7 +177,7 @@ public class RoomPanel extends BasePanel
 		}
 		if (!allowed) {
 			if (deniedMessage == null) {
-				deniedMessage = Application.getString(1599);
+				deniedMessage = getString("1599");
 			}
 			accessDenied = new ExpiredMessageDialog("accessDenied", deniedMessage);
 			room.setVisible(false);

Modified: openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html?rev=1739231&r1=1739230&r2=1739231&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/RoomMenuPanel.html Fri Apr 15 06:40:59 2016
@@ -26,6 +26,7 @@
 		<span wicket:id="share" class="icon share"></span>
 		<span wicket:id="recording" class="room recording"></span>
 		<span wicket:id="roomName" class="room name"></span>
+		<span wicket:id="demo" class="ui-state-error room demo"></span>
 	</div>
 	<div wicket:id="invite"></div>
 	<div wicket:id="createPoll"></div>

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=1739231&r1=1739230&r2=1739231&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 Fri Apr 15 06:40:59 2016
@@ -46,13 +46,16 @@ import org.apache.openmeetings.web.room.
 import org.apache.openmeetings.web.room.poll.CreatePollDialog;
 import org.apache.openmeetings.web.room.poll.PollResultsDialog;
 import org.apache.openmeetings.web.room.poll.VoteDialog;
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.behavior.AttributeAppender;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
 import org.apache.wicket.request.flow.RedirectToUrlException;
 import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.time.Duration;
 
 import com.googlecode.wicket.jquery.ui.widget.menu.IMenuItem;
 
@@ -150,10 +153,55 @@ public class RoomMenuPanel extends Panel
 		add(pollResults = new PollResultsDialog("pollResults", room.getRoom().getId()));
 	}
 	
+	
+	private static String getDemoTime(int remain) {
+		return Duration.seconds(remain).toString(WebSession.get().getLocale());
+	}
+	
+	private String getDemoText(int remain) {
+		return String.format("%s: %s", getString("637"), getDemoTime(remain));
+	}
+	
+	private String getDemoTitle(int remain) {
+		return String.format("%s: %s", getString("639"), getDemoTime(remain));
+	}
+	
 	@Override
 	protected void onInitialize() {
 		super.onInitialize();
 		askBtn.add(new AttributeAppender("title", getString("906")));
+		Label demo = new Label("demo", Model.of(""));
+		Room r = room.getRoom();
+		add(demo.setVisible(r.isDemoRoom() && r.getDemoTime() != null && room.getRoom().getDemoTime().intValue() > 0));
+		if (demo.isVisible()) {
+			demo.setOutputMarkupId(true);
+			demo.setDefaultModelObject(getDemoText(r.getDemoTime().intValue()));
+			demo.add(AttributeAppender.replace("title", getDemoTitle(r.getDemoTime().intValue())));
+			demo.add(new AbstractAjaxTimerBehavior(Duration.ONE_SECOND) {
+				private static final long serialVersionUID = 1L;
+				private final long clock;
+				{
+					clock = System.currentTimeMillis();
+				}
+
+				private int remain(long now) {
+					return (int)(room.getRoom().getDemoTime().longValue() - (now - clock) / 1000);
+				}
+
+				@Override
+				protected void onTimer(AjaxRequestTarget target) {
+					int remain = remain(System.currentTimeMillis());
+					if (remain > -1) {
+						getComponent().setDefaultModelObject(getDemoText(remain));
+						getComponent().add(AttributeAppender.replace("title", getDemoTitle(remain)));
+						target.add(getComponent());
+					} else {
+						stop(target);
+						exit(target);
+					}
+				}
+			});
+		}
 	}
 	
 	private List<IMenuItem> getMenu() {
@@ -192,7 +240,7 @@ public class RoomMenuPanel extends Panel
 		inviteMenuItem.setEnabled(notExternalUser && moder);
 		//TODO add check "sharing started"
 		Room r = room.getRoom();
-		boolean shareVisible = Room.Type.interview != r.getType() && !r.getHideScreenSharing() && moder;
+		boolean shareVisible = Room.Type.interview != r.getType() && !r.getHideScreenSharing() && r.isAllowRecording() && moder;
 		shareMenuItem.setEnabled(shareVisible);
 		shareBtn.setVisible(shareMenuItem.isEnabled());
 		//FIXME TODO apply* should be enabled if moder is in room
@@ -216,8 +264,8 @@ public class RoomMenuPanel extends Panel
 	
 	public void exit(IPartialPageRequestHandler handler) {
 		if (WebSession.getRights().contains(Right.Dashboard)) {
-			room.getMainPage().updateContents(ROOMS_PUBLIC, handler);
 			roomExit(room, false);
+			room.getMainPage().updateContents(ROOMS_PUBLIC, handler);
 		} else {
 			String url = getBean(ConfigurationDao.class).getConfValue(CONFIG_REDIRECT_URL_FOR_EXTERNAL_KEY, String.class, "");
 			if (Strings.isEmpty(url)) {
@@ -235,7 +283,7 @@ public class RoomMenuPanel extends Panel
 		Client c = room.getClient();
 		removeUserFromRoom(c);
 		if (broadcast) {
-			RoomMessage m = new RoomMessage(c.getRoomId(), c.getUserId(), RoomMessage.Type.roomExit);
+			RoomMessage m = new RoomMessage(room.getRoom().getId(), c.getUserId(), RoomMessage.Type.roomExit);
 			RoomPanel.broadcast(m);
 		}
 	}

Modified: openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css
URL: http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css?rev=1739231&r1=1739230&r2=1739231&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css (original)
+++ openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css Fri Apr 15 06:40:59 2016
@@ -52,6 +52,8 @@
 .room.menu.right .room.name {
 	font-weight: bold;
 }
+.room.menu.right .room.demo {
+}
 .room.menu.right .room.recording {
 	color: red;
 }