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;
 }


Reply via email to