Author: solomax
Date: Thu Apr 14 17:08:51 2016
New Revision: 1739141

URL: http://svn.apache.org/viewvc?rev=1739141&view=rev
Log:
[OPENMEETINGS-895] changes from 3.2.0 are backported to trunk

Added:
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/InvitationDialog.html
      - copied unchanged from r1739139, 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/menu/InvitationDialog.java
      - copied, changed from r1739126, 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.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/java/org/apache/openmeetings/web/room/menu/StartSharingButton.java
      - copied, changed from r1739126, 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/StartSharingEventBehavior.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomFilePanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/RoomSidebar.java
Removed:
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/InvitationDialog.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/StartSharingEventBehavior.java
Modified:
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
    
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
    
openmeetings/application/trunk/openmeetings-core/src/test/java/org/apache/openmeetings/test/user/TestMailSending.java
    
openmeetings/application/trunk/openmeetings-core/src/test/java/org/apache/openmeetings/test/userdata/TestMD5.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
    
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java
    openmeetings/application/trunk/openmeetings-flash/openlaszlo.xml
    openmeetings/application/trunk/openmeetings-flash/pom.xml
    
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java
    
openmeetings/application/trunk/openmeetings-server/src/site/xdoc/RTMPSAndHTTPS.xml
    
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/app/Application.properties.xml
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/BasePanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/RoomMenuItem.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
    
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.html
    
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/activities/activities.js
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/message/RoomMessage.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/CreatePollDialog.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/PollResultsDialog.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/poll/VoteDialog.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/swf-functions.js
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/ChatPanel.java
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/user/chat.js
    
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/util/UserDashboard.java
    
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/web.xml
    
openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/activities.css
    openmeetings/application/trunk/openmeetings-web/src/main/webapp/css/room.css
    
openmeetings/application/trunk/openmeetings-web/src/main/webapp/js/history.js
    
openmeetings/application/trunk/openmeetings-web/src/test/java/org/apache/openmeetings/test/calendar/TestSendIcalMessage.java
    openmeetings/application/trunk/pom.xml

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/FlvExplorerConverter.java
 Thu Apr 14 17:08:51 2016
@@ -132,7 +132,7 @@ public class FlvExplorerConverter extend
                
                Matcher matcher = p.matcher(txt);
                
-               while ( matcher.find() ) {
+               while (matcher.find()) {
                        String foundResolution = txt.substring(matcher.start(), 
matcher.end());
                        
                        String[] resultions = foundResolution.split("x");

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/LdapLoginManagement.java
 Thu Apr 14 17:08:51 2016
@@ -168,9 +168,9 @@ public class LdapLoginManagement {
                User u = null;
                try (LdapWorker w = new LdapWorker(domainId)) {
                        if (w.options.useLowerCase) {
-                       login = login.toLowerCase();
-               }
-
+                               login = login.toLowerCase();
+                       }
+                       
                        boolean authenticated = true;
                        Dn userDn = null;
                        Entry entry = null;

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
 Thu Apr 14 17:08:51 2016
@@ -31,6 +31,7 @@ import org.apache.openmeetings.core.remo
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
+import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.server.SOAPLoginDao;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
@@ -86,6 +87,8 @@ public class MainService implements IPen
        @Autowired
        private UserDao userDao;
        @Autowired
+       private RoomDao roomDao;
+       @Autowired
        private AppointmentDao appointmentDao;
        @Autowired
        private SOAPLoginDao soapLoginDao;
@@ -131,6 +134,15 @@ public class MainService implements IPen
                return null;
        }
 
+       /**
+        * load this session id before doing anything else
+        * 
+        * @return a unique session identifier
+        */
+       public Sessiondata getsessiondata() {
+               return sessiondataDao.startsession();
+       }
+
        public Long setCurrentUserGroup(String SID, Long groupId) {
                try {
                        sessiondataDao.updateUserGroup(SID, groupId);
@@ -188,7 +200,40 @@ public class MainService implements IPen
                }
                return allowed;
        }
-
+       
+       public User loginWicket(String wicketSID, Long wicketroomid) {
+               log.debug("[loginWicket] wicketSID: '{}'; wicketroomid: '{}'", 
wicketSID, wicketroomid);
+               Long userId = sessiondataDao.checkSession(wicketSID);
+               User u = userId == null ? null : userDao.get(userId);
+               if (u != null && wicketroomid != null) {
+                       log.debug("[loginWicket] user and roomid are not empty: 
" + userId + ", " + wicketroomid);
+                       if (isRoomAllowedToUser(roomDao.get(wicketroomid), u)) {
+                               IConnection current = Red5.getConnectionLocal();
+                               String streamId = current.getClient().getId();
+                               Client currentClient = 
sessionManager.getClientByStreamId(streamId, null);
+                               
+                               if (!u.getGroupUsers().isEmpty()) {
+                                       
u.setSessionData(sessiondataDao.getSessionByHash(wicketSID));
+                                       currentClient.setUserId(u.getId());
+                                       currentClient.setRoomId(wicketroomid);
+                                       
SessionVariablesUtil.setUserId(current.getClient(), u.getId());
+                               
+                                       currentClient.setUsername(u.getLogin());
+                                       
currentClient.setFirstname(u.getFirstname());
+                                       
currentClient.setLastname(u.getLastname());
+                                       
currentClient.setPicture_uri(u.getPictureuri());
+                                       currentClient.setEmail(u.getAddress() 
== null ? null : u.getAddress().getEmail());
+                                       
sessionManager.updateClientByStreamId(streamId, currentClient, false, null);
+                                       
+                                       
scopeApplicationAdapter.sendMessageToCurrentScope("roomConnect", currentClient, 
false);
+                                       
+                                       return u;
+                               }
+                       }
+               }
+               return null;
+       }
+       
        public Object secureLoginByRemote(String SID, String secureHash) {
                try {
                        log.debug("############### secureLoginByRemote " + 
secureHash);

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/UserService.java
 Thu Apr 14 17:08:51 2016
@@ -79,6 +79,22 @@ public class UserService implements IUse
        }
 
        /**
+        * refreshes the current SID
+        * 
+        * @param SID
+        * @return "ok" string in case of success, "error" string in case of 
the error
+        */
+       public String refreshSession(String SID) {
+               try {
+                       sessiondataDao.checkSession(SID);
+                       return "ok";
+               } catch (Exception err) {
+                       log.error("[refreshSession]", err);
+               }
+               return "error";
+       }
+
+       /**
         * gets a whole user-list(admin-role only)
         * 
         * @param SID

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/red5/ScopeApplicationAdapter.java
 Thu Apr 14 17:08:51 2016
@@ -126,6 +126,7 @@ public class ScopeApplicationAdapter ext
                        getCryptKey();
 
                        // init your handler here
+
                        for (String scopeName : scope.getScopeNames()) {
                                log.debug("scopeName :: " + scopeName);
                        }
@@ -154,6 +155,8 @@ public class ScopeApplicationAdapter ext
 
                Map<String, Object> map = conn.getConnectParams();
                String swfURL = map.containsKey("swfUrl") ? 
(String)map.get("swfUrl") : "";
+               String tcUrl = map.containsKey("tcUrl") ? 
(String)map.get("tcUrl") : "";
+               String uid = params != null && params.length > 0 ? 
(String)params[0] : "";
 
                Client parentClient = null;
                //TODO add similar code for other connections
@@ -164,9 +167,15 @@ public class ScopeApplicationAdapter ext
                                return rejectClient();
                        }
                }
-               Client rcm = 
sessionManager.addClientListItem(conn.getClient().getId(),
-                               conn.getScope().getName(), conn.getRemotePort(),
-                               conn.getRemoteAddress(), swfURL, null);
+               Client rcm = new Client();
+               rcm.setStreamid(conn.getClient().getId());
+               rcm.setScope(conn.getScope().getName());
+               rcm.setUserport(conn.getRemotePort());
+               rcm.setUserip(conn.getRemoteAddress());
+               rcm.setSwfurl(swfURL);
+               rcm.setTcUrl(tcUrl);
+               rcm.setPublicSID(uid);
+               rcm = sessionManager.add(rcm, null);
                if (rcm == null) {
                        log.warn("Failed to create Client on room connect");
                        return false;
@@ -182,13 +191,13 @@ public class ScopeApplicationAdapter ext
                        
SessionVariablesUtil.setIsScreenClient(conn.getClient());
                        
                        rcm.setUserId(parentClient.getUserId());
-                       Long uid = rcm.getUserId();
-                       SessionVariablesUtil.setUserId(conn.getClient(), uid);
+                       Long userId = rcm.getUserId();
+                       SessionVariablesUtil.setUserId(conn.getClient(), 
userId);
 
                        rcm.setStreamPublishName(parentSid);
                        User u = null;
-                       if (uid != null) {
-                               long _uid = uid.longValue();
+                       if (userId != null) {
+                               long _uid = userId.longValue();
                                u = userDao.get(_uid < 0 ? -_uid : _uid);
                        }
                        if (u != null) {

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/SessionManager.java
 Thu Apr 14 17:08:51 2016
@@ -35,6 +35,7 @@ import org.apache.openmeetings.db.dto.ba
 import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
 import org.apache.openmeetings.db.entity.room.Client;
 import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -74,6 +75,28 @@ public class SessionManager implements I
        }
        
        @Override
+       public Client add(Client c, Server server) {
+               if (server == null) {
+                       server = serverUtil.getCurrentServer();
+               }
+               c.setConnectedSince(new Date());
+               if (Strings.isEmpty(c.getPublicSID())) {
+                       c.setPublicSID(UUID.randomUUID().toString());
+               }
+               c.setServer(server);
+               c.setIsMod(false);
+               c.setCanDraw(false);
+
+               if (cache.containsKey(null, c.getStreamid())) {
+                       log.error("Tried to add an existing Client " + 
c.getStreamid());
+                       return null;
+               }
+
+               cache.put(c.getStreamid(), c);
+               return c;
+       }
+       
+       @Override
        public Client addClientListItem(String streamId, String scopeName,
                        int remotePort, String remoteAddress, String swfUrl, 
Server server) {
                if (server == null) {

Modified: 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/main/java/org/apache/openmeetings/core/session/store/HashMapStore.java
 Thu Apr 14 17:08:51 2016
@@ -53,7 +53,7 @@ public class HashMapStore implements ICl
        protected static final Logger log = 
Red5LoggerFactory.getLogger(HashMapStore.class, webAppRootKey);
        
        private Map<String, Client> clientsByStreamId = new 
ConcurrentHashMap<>();
-       
+
        @Override
        public void clear() {
                clientsByStreamId = new ConcurrentHashMap<>();

Modified: 
openmeetings/application/trunk/openmeetings-core/src/test/java/org/apache/openmeetings/test/user/TestMailSending.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/test/java/org/apache/openmeetings/test/user/TestMailSending.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/test/java/org/apache/openmeetings/test/user/TestMailSending.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/test/java/org/apache/openmeetings/test/user/TestMailSending.java
 Thu Apr 14 17:08:51 2016
@@ -56,7 +56,7 @@ public class TestMailSending {
         */
        @Test
        public void doTestSendEmail() {
-               try{
+               try {
                        Transport.send(getMimeMessage());
                } catch (Exception err) {
                        log.error("Error", err);

Modified: 
openmeetings/application/trunk/openmeetings-core/src/test/java/org/apache/openmeetings/test/userdata/TestMD5.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-core/src/test/java/org/apache/openmeetings/test/userdata/TestMD5.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-core/src/test/java/org/apache/openmeetings/test/userdata/TestMD5.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-core/src/test/java/org/apache/openmeetings/test/userdata/TestMD5.java
 Thu Apr 14 17:08:51 2016
@@ -23,7 +23,7 @@ import org.junit.Test;
 public class TestMD5 {
        
        @Test
-       public void testTestMD5(){
+       public void testTestMD5() {
                
        }
 

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/basic/ConfigurationDao.java
 Thu Apr 14 17:08:51 2016
@@ -191,7 +191,7 @@ public class ConfigurationDao implements
        public Configuration get(long id) {
                return get(Long.valueOf(id));
        }
-
+       
        @Override
        public Configuration get(Long id) {
                if (id == null) {

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/label/LabelDao.java
 Thu Apr 14 17:08:51 2016
@@ -27,6 +27,7 @@ import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
@@ -88,6 +89,17 @@ public class LabelDao implements IDataPr
        public static final Set<String> keys = new HashSet<String>();
        private static Class<?> APP = null;
 
+       public List<Map<String, Object>> getStrings(Long language_id, int 
start, int count) {
+               List<Map<String, Object>> result = new ArrayList<Map<String, 
Object>>();
+               for (int i = 0; i < count; ++i) {
+                       Map<String, Object> map = new HashMap<>();
+                       map.put("id", start + i);
+                       map.put("value", getString(start + i, language_id));
+                       result.add(map);
+               }
+               return result;
+       }
+       
        private static void storeLanguages() throws Exception {
                Document d = XmlExport.createDocument();
                Element r = XmlExport.createRoot(d, "language");
@@ -287,7 +299,7 @@ public class LabelDao implements IDataPr
        public StringLabel get(long id) {
                throw new RuntimeException("Should not be used");
        }
-       
+
        @Override
        public StringLabel get(Long id) {
                throw new RuntimeException("Should not be used");

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/dao/server/ISessionManager.java
 Thu Apr 14 17:08:51 2016
@@ -42,6 +42,7 @@ public interface ISessionManager {
         */
        void sessionStart();
 
+       Client add(Client c, Server server);
        /**
         * add a new client item
         * 

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/room/Client.java
 Thu Apr 14 17:08:51 2016
@@ -287,6 +287,9 @@ public class Client implements IDataProv
        // FIXME: Move to {@link ClientSession}
        @Column(name = "swfurl", length=2048)
        private String swfurl;
+
+       @Column(name = "tcurl", length=2048)
+       private String tcUrl;
        
        /**
         * @see Client#getIsRecording()
@@ -863,6 +866,14 @@ public class Client implements IDataProv
                this.mobile = mobile;
        }
 
+       public String getTcUrl() {
+               return tcUrl;
+       }
+
+       public void setTcUrl(String tcUrl) {
+               this.tcUrl = tcUrl;
+       }
+
        @Override
        public String toString() {
                return "Client [streamid=" + streamid + ", publicSID=" + 
publicSID + ", isScreenClient=" + screenClient

Modified: 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-db/src/main/java/org/apache/openmeetings/db/entity/user/PrivateMessage.java
 Thu Apr 14 17:08:51 2016
@@ -144,7 +144,7 @@ public class PrivateMessage implements I
                isContactRequest = copy.isContactRequest;
                userContactId = copy.userContactId;
        }
-       
+
        @Override
        public Long getId() {
                return id;

Modified: openmeetings/application/trunk/openmeetings-flash/openlaszlo.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-flash/openlaszlo.xml?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-flash/openlaszlo.xml (original)
+++ openmeetings/application/trunk/openmeetings-flash/openlaszlo.xml Thu Apr 14 
17:08:51 2016
@@ -40,17 +40,6 @@
        <target name="client.debug.only" 
depends="compile.flex.debug,compile.laszlo.networktesting.debug" />
 
        <target name="-compile.flash" description="compile flash application">
-               <!-- commented for now
-               <echo message="flash.src.dir == '${flash.src.dir}'" />
-               <echo message="classpathref == '${flash.classpath.ref}'" />
-               <echo message="laszlo.home == '${flash.lps.home}'" />
-               <echo message="flash.debug == '${flash.debug}'" />
-               <echo message="laszlo.proxied == '${laszlo.proxied}'" />
-               <echo message="flash.runtime == '${flash.runtime}'" />
-               <echo message="out.dir.swf == '${out.dir.swf}'" />
-               <echo message="flash.main.file == '${flash.main.file}'" />
-               <echo message="flash.out.file == '${flash.out.file}'" />
-               -->
                <java classname="org.openlaszlo.compiler.Main" fork="true" 
newenvironment="true" failonerror="true" dir="${flash.src.dir}" 
classpathref="${flash.classpath.ref}">
                        <jvmarg value="-DLPS_HOME=${flash.lps.home}" />
                        <jvmarg value="-Dlzdebug=false" />
@@ -66,7 +55,7 @@
                        <param name="flash.classpath.ref" value="laszlo46.lib" 
/>
                        <param name="flash.src.dir" 
value="${laszlo.as3.src.dir}/networkTesting" />
                        <param name="flash.lps.home" value="${laszlo46.home}" />
-                       <param name="flash.runtime" value="swf10" />
+                       <param name="flash.runtime" value="swf11" />
                        <param name="flash.main.file" 
value="networktesting.lzx" />
                        <param name="flash.out.file" 
value="networktesting.swf10.swf" />
                        <param name="flash.debug" value="" />
@@ -78,7 +67,7 @@
                        <param name="flash.classpath.ref" value="laszlo46.lib" 
/>
                        <param name="flash.src.dir" 
value="${laszlo.as3.src.dir}/networkTesting" />
                        <param name="flash.lps.home" value="${laszlo46.home}" />
-                       <param name="flash.runtime" value="swf10" />
+                       <param name="flash.runtime" value="swf11" />
                        <param name="flash.main.file" 
value="networktesting.lzx" />
                        <param name="flash.out.file" 
value="networktestingdebug.swf10.swf" />
                        <param name="flash.debug" value="--debug" />
@@ -94,7 +83,7 @@
        </condition>
        
        <target name="if_windows" if="isWindows">
-               <property name="mxmlc_bin" value="mxmlc.exe" />
+               <property name="mxmlc_bin" value="mxmlc.bat" />
        </target>
        
        <target name="if_unix" if="isUnix">
@@ -102,10 +91,10 @@
        </target>
        
        <target name="-compile.flex" description="compile flash application" 
depends="if_windows, if_unix">
-               <exec dir="${flex.src.dir}" 
executable="${laszlo46.home}/WEB-INF/flexsdk/4.6.0/bin/${mxmlc_bin}">
+               <exec dir="${flex.src.dir}" 
executable="${laszlo46.home}/WEB-INF/flexsdk/4.15.0/bin/${mxmlc_bin}">
                        <arg value="main.mxml"/>
                        <arg line="-output ${out.dir.swf}/main.swf"/>
-                       <env key="PLAYERGLOBAL_HOME" 
value="${laszlo46.home}/WEB-INF/flexsdk/4.6.0/frameworks/libs/player"/>
+                       <env key="PLAYERGLOBAL_HOME" 
value="${laszlo46.home}/WEB-INF/flexsdk/4.15.0/frameworks/libs/player"/>
                </exec>
        </target>
        

Modified: openmeetings/application/trunk/openmeetings-flash/pom.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-flash/pom.xml?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- openmeetings/application/trunk/openmeetings-flash/pom.xml (original)
+++ openmeetings/application/trunk/openmeetings-flash/pom.xml Thu Apr 14 
17:08:51 2016
@@ -54,7 +54,7 @@
                                                                <artifactItem>
                                                                        
<groupId>org.openlaszlo</groupId>
                                                                        
<artifactId>openlaszlo</artifactId>
-                                                                       
<version>4.9.7</version>
+                                                                       
<version>4.9.8</version>
                                                                        
<type>tgz</type>
                                                                        
<outputDirectory>${openlaszlo}</outputDirectory>
                                                                </artifactItem>

Modified: 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-install/src/main/java/org/apache/openmeetings/cli/CleanupHelper.java
 Thu Apr 14 17:08:51 2016
@@ -146,7 +146,7 @@ public class CleanupHelper {
                File[] l = ff == null ? f.listFiles() : f.listFiles(ff);
                return l == null ? new File[0] : l;
        }
-
+       
        private static File[] list(final Long id) {
                return list(hibernateDir, new FilenameFilter() {
                        @Override

Modified: 
openmeetings/application/trunk/openmeetings-server/src/site/xdoc/RTMPSAndHTTPS.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-server/src/site/xdoc/RTMPSAndHTTPS.xml?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-server/src/site/xdoc/RTMPSAndHTTPS.xml
 (original)
+++ 
openmeetings/application/trunk/openmeetings-server/src/site/xdoc/RTMPSAndHTTPS.xml
 Thu Apr 14 17:08:51 2016
@@ -117,7 +117,7 @@ Enter key password for <red5>
                </section>
                
                <section name="Set up RTMPS">
-                 <ol>
+                       <ol>
                                <li> Default RTMPS port is 8443, you can change 
it by editing <tt>red5/conf/red5.properties</tt> and change the port here: 
<tt>rtmps.port=8443</tt><br/>
                                        Please set 
<tt>rtmps.keystorepass=password</tt> and <tt>rtmps.truststorepass=password</tt>
                                        (password = password you set on your 
new keystore(s))<br/>
@@ -135,7 +135,7 @@ Enter key password for <red5>
                                <li>Restart red5 and try to connect - your 
connection should now be
                                        made via RTMPS (close port 1935 to be 
sure)
                                </li>   
-                 </ol>
+                       </ol>
                </section>
                <section name="SSL for the web interface">
                        <p>If you want to use SSL for the web interface in 
addition to RTMPS,

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=1739141&r1=1739140&r2=1739141&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
 Thu Apr 14 17:08:51 2016
@@ -35,7 +35,6 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
-import java.util.UUID;
 import java.util.concurrent.ConcurrentHashMap;
 
 import javax.servlet.ServletContext;
@@ -289,23 +288,26 @@ public class Application extends Authent
                }
        }
        
-       public static Client addUserToRoom(long roomId, int pageId) {
+       public static Client addUserToRoom(Client c, int pageId) {
+               long roomId = c.getRoomId();
                if (!ROOMS.containsKey(roomId)) {
                        ROOMS.put(roomId, new ConcurrentHashSet<Client>());
                }
-               Client c = new Client(WebSession.get().getId(), pageId, 
WebSession.getUserId());
-               c.setUid(UUID.randomUUID().toString());
+               c.setSessionId(WebSession.get().getId());
+               c.setPageId(pageId);
                ROOMS.get(roomId).add(c);
                return c;
        }
        
        public static void removeUserFromRoom(long roomId, int pageId) {
-               removeUserFromRoom(roomId, new Client(WebSession.get().getId(), 
pageId, WebSession.getUserId()));
+               Client c = new Client(WebSession.get().getId(), pageId, 
WebSession.getUserId());
+               c.setRoomId(roomId);
+               removeUserFromRoom(c);
        }
        
-       public static Client removeUserFromRoom(long roomId, Client _c) {
-               if (ROOMS.containsKey(roomId)) {
-                       Set<Client> clients = ROOMS.get(roomId);
+       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);
@@ -313,22 +315,12 @@ public class Application extends Authent
                                }
                        }
                        if (clients.isEmpty()) {
-                               ROOMS.remove(roomId);
+                               ROOMS.remove(_c.getRoomId());
                        }
                }
                return _c;
        }
        
-       public static long getRoom(Client c) {
-               for (Entry<Long, Set<Client>> me : ROOMS.entrySet()) {
-                       Set<Client> clients = me.getValue();
-                       if (clients.contains(c)) {
-                               return me.getKey();
-                       }
-               }
-               return -1;
-       }
-       
        public static Set<Client> getRoomUsers(long roomId) {
                return ROOMS.containsKey(roomId) ? ROOMS.get(roomId) : new 
HashSet<Client>();
        }

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

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Client.java
 Thu Apr 14 17:08:51 2016
@@ -21,6 +21,7 @@ package org.apache.openmeetings.web.app;
 import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;
+import java.util.UUID;
 
 import org.apache.openmeetings.db.entity.IDataProviderEntity;
 import org.apache.wicket.protocol.ws.api.registry.IKey;
@@ -39,6 +40,7 @@ public class Client implements IDataProv
        private String sessionId;
        private int pageId;
        private long userId;
+       private long roomId;
        private String uid;
        private Set<Right> rights = new HashSet<Right>();
        private Date connectedSince;
@@ -47,6 +49,13 @@ public class Client implements IDataProv
                this.connectedSince = new Date();
        }
        
+       public Client(long roomId) {
+               this.connectedSince = new Date();
+               this.roomId = roomId;
+               this.userId = WebSession.getUserId();
+               uid = UUID.randomUUID().toString();
+       }
+       
        public Client(String sessionId, IKey key, long userId) {
                this(sessionId, key.hashCode(), userId);
        }
@@ -90,12 +99,48 @@ public class Client implements IDataProv
                this.uid = uid;
        }
 
+
+       public Set<Right> getRights() {
+               return rights;
+       }
+
+       public boolean hasRight(Right right) {
+               return rights.contains(Right.moderator) ? true : 
rights.contains(right);
+       }
+
+       public Date getConnectedSince() {
+               return connectedSince;
+       }
+
+       public void setConnectedSince(Date connectedSince) {
+               this.connectedSince = connectedSince;
+       }
+
+       @Override
+       public Long getId() {
+               return null;
+       }
+
+       @Override
+       public void setId(Long id) {
+       }
+
+       public long getRoomId() {
+               return roomId;
+       }
+
+       public void setRoomId(long roomId) {
+               this.roomId = roomId;
+       }
+
        @Override
        public int hashCode() {
                final int prime = 31;
                int result = 1;
                result = prime * result + pageId;
+               result = prime * result + (int) (roomId ^ (roomId >>> 32));
                result = prime * result + ((sessionId == null) ? 0 : 
sessionId.hashCode());
+               result = prime * result + ((uid == null) ? 0 : uid.hashCode());
                result = prime * result + (int) (userId ^ (userId >>> 32));
                return result;
        }
@@ -111,38 +156,20 @@ public class Client implements IDataProv
                Client other = (Client) obj;
                if (pageId != other.pageId)
                        return false;
+               if (roomId != other.roomId)
+                       return false;
                if (sessionId == null) {
                        if (other.sessionId != null)
                                return false;
                } else if (!sessionId.equals(other.sessionId))
                        return false;
+               if (uid == null) {
+                       if (other.uid != null)
+                               return false;
+               } else if (!uid.equals(other.uid))
+                       return false;
                if (userId != other.userId)
                        return false;
                return true;
        }
-
-       public Set<Right> getRights() {
-               return rights;
-       }
-
-       public boolean hasRight(Right right) {
-               return rights.contains(Right.moderator) ? true : 
rights.contains(right);
-       }
-
-       public Date getConnectedSince() {
-               return connectedSince;
-       }
-
-       public void setConnectedSince(Date connectedSince) {
-               this.connectedSince = connectedSince;
-       }
-
-       @Override
-       public Long getId() {
-               return null;
-       }
-
-       @Override
-       public void setId(Long id) {
-       }
 }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/BasePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/BasePanel.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/BasePanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/BasePanel.java
 Thu Apr 14 17:08:51 2016
@@ -39,7 +39,7 @@ public abstract class BasePanel extends
                setOutputMarkupId(true);
        }
 
-       protected MainPage getMainPage() {
+       public MainPage getMainPage() {
                return (MainPage)super.getPage();
        }
        

Added: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java?rev=1739141&view=auto
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java
 (added)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/OmButton.java
 Thu Apr 14 17:08:51 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.common;
+
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+
+import com.googlecode.wicket.jquery.ui.form.button.Button;
+
+public abstract class OmButton extends Button {
+       private static final long serialVersionUID = 1L;
+
+       public OmButton(String id) {
+               super(id);
+               add(new AjaxEventBehavior("click") {
+                       private static final long serialVersionUID = 1L;
+                       
+                       @Override
+                       protected void onEvent(AjaxRequestTarget target) {
+                               OmButton.this.onClick(target);
+                       }
+               });
+       }
+       
+       protected abstract void onClick(AjaxRequestTarget target); 
+}

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuItem.java
 Thu Apr 14 17:08:51 2016
@@ -24,15 +24,12 @@ import com.googlecode.wicket.jquery.ui.w
 
 public class MenuItem extends 
com.googlecode.wicket.jquery.ui.widget.menu.MenuItem {
        private static final long serialVersionUID = 1L;
-       protected String desc;
-       private String cssClass;
-       
-       public MenuItem(String title) {
-               super(title);
-       }
+       private String desc;
+       private boolean top;
        
        public MenuItem(String title, List<IMenuItem> items) {
                super(title, items);
+               setTop(true);
        }
        
        public MenuItem(String title, String desc) {
@@ -48,11 +45,11 @@ public class MenuItem extends com.google
                this.desc = desc;
        }
 
-       public String getCssClass() {
-               return cssClass;
+       public boolean isTop() {
+               return top;
        }
 
-       public void setCssClass(String cssClass) {
-               this.cssClass = cssClass;
+       public void setTop(boolean top) {
+               this.top = top;
        }
 }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/MenuPanel.java
 Thu Apr 14 17:08:51 2016
@@ -52,14 +52,12 @@ public class MenuPanel extends BasePanel
                        protected void addMenuItem(ListItem<IMenuItem> item, 
IMenuItem menuItem) {
                                super.addMenuItem(item, menuItem);
                                MenuItem m = (MenuItem)menuItem;
-                               if (Strings.isEmpty(m.getDesc())) {
-                                       
item.add(AttributeAppender.append("class", "top"));
-                               } else {
-                                       
item.add(AttributeAppender.append("class", "sub"));
+                               item.add(AttributeAppender.append("class", 
m.isTop() ? "top" : "sub"));
+                               if (!Strings.isEmpty(m.getDesc())) {
                                        
item.add(AttributeAppender.append("title", m.getDesc()));
                                }
-                               if (!Strings.isEmpty(m.getCssClass())) {
-                                       
item.add(AttributeAppender.append("class", m.getCssClass()));
+                               if (!Strings.isEmpty(m.getIcon())) {
+                                       
item.add(AttributeAppender.append("class", m.getIcon()));
                                }
                        }
                });

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/RoomMenuItem.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/RoomMenuItem.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/RoomMenuItem.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/menu/RoomMenuItem.java
 Thu Apr 14 17:08:51 2016
@@ -21,25 +21,17 @@ package org.apache.openmeetings.web.comm
 public class RoomMenuItem extends MenuItem {
        private static final long serialVersionUID = 1L;
 
-       public RoomMenuItem(String name) {
-               this(name, null);
-       }
-       
        public RoomMenuItem(String name, String desc) {
-               this(name, desc, true, null);
+               super(name, desc);
        }
        
-       public RoomMenuItem(String name, String desc, String cssClass) {
-               this(name, desc, true, cssClass);
+       public RoomMenuItem(String name, String desc, String icon) {
+               super(name, desc);
+               setIcon(icon);
        }
        
        public RoomMenuItem(String name, String desc, boolean enabled) {
-               this(name, desc, enabled, null);
-       }
-       
-       public RoomMenuItem(String name, String desc, boolean enabled, String 
cssClass) {
                super(name, desc);
-               setCssClass(cssClass);
                setEnabled(enabled);
        }
 }

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.html
 Thu Apr 14 17:08:51 2016
@@ -29,10 +29,10 @@
        </script>
        <div class="file tree">
                <div class="icons clear trash-toolbar" 
wicket:id="trash-toolbar">
+                       <span wicket:id="upload" class="add om-icon align-left 
clickable" wicket:message="title:702"></span>
                        <span wicket:id="create" class="folder-create om-icon 
align-left clickable" wicket:message="title:703"></span>
                        <span wicket:id="refresh" class="refresh om-icon 
align-left clickable" wicket:message="title:704"></span>
-                       <span wicket:id="trash" class="trash om-icon 
align-right clickable"></span>
-                       <span style="padding-left: 20px;" 
wicket:message="title:705"><wicket:message key="1224"/></span>
+                       <span wicket:id="trash" class="trash om-icon 
align-right clickable" wicket:message="title:705"></span>
                        <div class="clear"></div>
                </div>
                <div wicket:id="tree-container" class="trees">

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
 Thu Apr 14 17:08:51 2016
@@ -63,6 +63,11 @@ public abstract class FileTreePanel exte
 
        public FileTreePanel(String id) {
                super(id);
+       }
+       
+       @Override
+       protected void onInitialize() {
+               super.onInitialize();
                defineTrees();
                selectedFile.getObject().setId(Long.MIN_VALUE);
                final AddFolderDialog addFolder = new 
AddFolderDialog("addFolder", Application.getString(712)) {
@@ -94,6 +99,7 @@ public abstract class FileTreePanel exte
                        }
                };
                add(trashToolbar);
+               trashToolbar.add(getUpload("upload"));
                trashToolbar.add(new WebMarkupContainer("create").add(new 
AjaxEventBehavior("click") {
                        private static final long serialVersionUID = 1L;
 
@@ -133,6 +139,10 @@ public abstract class FileTreePanel exte
                add(errorsDialog);
        }
        
+       protected Component getUpload(String id) {
+               return new WebMarkupContainer(id).setVisible(false);
+       }
+       
        void delete(FileItem f, AjaxRequestTarget target) {
                long id = f.getId();
                if (id > 0) {

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
 Thu Apr 14 17:08:51 2016
@@ -38,7 +38,7 @@
                        Wicket.Event.subscribe('/ajax/call/complete', 
hideBusyIndicator);
                });
        </script>
-       <div id="topControls">
+       <div wicket:id="topControls">
                <div wicket:id="topLinks"><span 
                        id="contactsAndMessages"><a 
wicket:id="messages"><wicket:message key="1188"/></a></span><span 
                        id="profile"><a wicket:id="profile"><wicket:message 
key="5"/></a></span><span 
@@ -46,10 +46,10 @@
                        id="reportBug"><a target="_blank" 
href="https://issues.apache.org/jira/browse/OPENMEETINGS";><wicket:message 
key="284"/></a></span><span><a 
                        wicket:id="about"><wicket:message 
key="1549"/></a></span>
                </div>
-               <div wicket:id="dev" id="devMenu"/>
                <div id="busy_indicator" 
class="ui-widget-header"><span><wicket:message key="1554"/></span></div>
                <div wicket:id="menu"></div>
        </div>
+       <div wicket:id="dev" id="devMenu"/>
        <div wicket:id="contents"><div wicket:id="child"></div></div>
        <div wicket:id="chatPanel"></div>
        <div wicket:id="aboutDialog"></div>

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
 Thu Apr 14 17:08:51 2016
@@ -48,7 +48,7 @@ import org.apache.openmeetings.web.commo
 import org.apache.openmeetings.web.common.menu.MenuItem;
 import org.apache.openmeetings.web.common.menu.MenuPanel;
 import org.apache.openmeetings.web.room.RoomPanel;
-import org.apache.openmeetings.web.room.message.RoomMessage;
+import org.apache.openmeetings.web.room.menu.RoomMenuPanel;
 import org.apache.openmeetings.web.user.AboutDialog;
 import org.apache.openmeetings.web.user.ChatPanel;
 import org.apache.openmeetings.web.user.InviteUserToRoomDialog;
@@ -73,10 +73,11 @@ import org.apache.wicket.markup.html.for
 import org.apache.wicket.markup.html.panel.EmptyPanel;
 import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
+import org.apache.wicket.protocol.ws.api.message.AbortedMessage;
+import org.apache.wicket.protocol.ws.api.message.AbstractClientMessage;
 import org.apache.wicket.protocol.ws.api.message.ClosedMessage;
 import org.apache.wicket.protocol.ws.api.message.ConnectedMessage;
 import org.apache.wicket.request.IRequestParameters;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.time.Duration;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -91,6 +92,7 @@ public class MainPage extends BaseInited
        private static final Logger log = 
Red5LoggerFactory.getLogger(MainPage.class, webAppRootKey);
        private final static String PARAM_USER_ID = "userId";
        private final MenuPanel menu;
+       private final WebMarkupContainer topControls = new 
WebMarkupContainer("topControls");
        private final WebMarkupContainer topLinks = new 
WebMarkupContainer("topLinks");
        private final MarkupContainer contents;
        private final AbstractAjaxTimerBehavior areaBehavior;
@@ -100,13 +102,14 @@ public class MainPage extends BaseInited
        private final UserInfoDialog userInfo;
        private final InviteUserToRoomDialog inviteUser;
        
-       public MainPage(PageParameters pp) {
+       public MainPage() {
                super();
                getHeader().setVisible(false);
+               
add(topControls.setOutputMarkupPlaceholderTag(true).setMarkupId("topControls"));
                menu = new MenuPanel("menu", getMainMenu());
                contents = new WebMarkupContainer("contents");
                add(contents.add(new 
WebMarkupContainer(CHILD_ID)).setOutputMarkupId(true).setMarkupId("contents"));
-               add(menu.setVisible(false), 
topLinks.setVisible(false).setOutputMarkupPlaceholderTag(true).setMarkupId("topLinks"));
+               topControls.add(menu.setVisible(false), 
topLinks.setVisible(false).setOutputMarkupPlaceholderTag(true).setMarkupId("topLinks"));
                topLinks.add(new AjaxLink<Void>("messages") {
                        private static final long serialVersionUID = 1L;
 
@@ -143,11 +146,11 @@ public class MainPage extends BaseInited
                });
                add(about);
                if 
(getApplication().getDebugSettings().isDevelopmentUtilitiesEnabled()) {
-                   add(dev = new DebugBar("dev"));
-                   dev.setOutputMarkupId(true);
+                       add(dev = new DebugBar("dev"));
+                       dev.setOutputMarkupId(true);
                } else {
                        dev = null;
-                   add(new EmptyPanel("dev").setVisible(false));
+                       add(new EmptyPanel("dev").setVisible(false));
                }               
                
                add(chat = new ChatPanel("chatPanel"));
@@ -217,15 +220,24 @@ public class MainPage extends BaseInited
                        }
                        
                        @Override
+                       protected void onAbort(AbortedMessage message) {
+                               super.onAbort(message);
+                               closeHandler(message);
+                       }
+                       
+                       @Override
                        protected void onClose(ClosedMessage message) {
                                super.onClose(message);
+                               closeHandler(message);
+                       }
+                       
+                       private void closeHandler(AbstractClientMessage 
message) {
                                Client _c = new Client(message.getSessionId(), 
message.getKey(), getUserId());
                                removeOnlineUser(_c);
                                
log.debug(String.format("WebSocketBehavior::onClose [session: %s, key: %s]", 
message.getSessionId(), message.getKey()));
-                               long roomId = Application.getRoom(_c);
-                               if (roomId > 0) {
-                                       Application.removeUserFromRoom(roomId, 
_c);
-                                       RoomPanel.broadcast(new 
RoomMessage(roomId, _c.getUserId(), RoomMessage.Type.roomExit));
+                               if (MainPage.this.getCurrentPanel() instanceof 
RoomPanel) {
+                                       RoomPanel rp = 
(RoomPanel)MainPage.this.getCurrentPanel();
+                                       RoomMenuPanel.roomExit(rp);
                                }
                        }
                });
@@ -327,6 +339,10 @@ public class MainPage extends BaseInited
                return topLinks;
        }
 
+       public WebMarkupContainer getTopControls() {
+               return topControls;
+       }
+
        public ChatPanel getChat() {
                return chat;
        }

Added: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java?rev=1739141&view=auto
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
 (added)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomBroadcaster.java
 Thu Apr 14 17:08:51 2016
@@ -0,0 +1,54 @@
+/*
+ * 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;
+
+import static org.apache.openmeetings.web.app.Application.getBean;
+
+import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.server.ClientSessionInfo;
+import org.apache.openmeetings.db.entity.room.Client;
+import org.apache.openmeetings.core.remote.red5.ScopeApplicationAdapter;
+import org.apache.openmeetings.core.session.SessionManager;
+import org.red5.server.api.IConnection;
+
+public class RoomBroadcaster {
+       public static Client getClient(String publicSid) {
+               ClientSessionInfo csi = 
getBean(SessionManager.class).getClientByPublicSIDAnyServer(publicSid);
+               return csi == null ? null : csi.getRcl();
+       }
+       
+       public static void broadcast(String publicSid, String method, Object 
obj) {
+               Client rc = getClient(publicSid);
+               if (rc == null) {
+                       return;
+               }
+               final Long roomId = rc.getRoomId();
+               final SessionManager sessionMgr = getBean(SessionManager.class);
+               final UserDao userDao = getBean(UserDao.class);
+               ScopeApplicationAdapter sa = 
getBean(ScopeApplicationAdapter.class);
+               sa.new MessageSender(sa.getRoomScope("" + roomId), method, obj) 
{
+                       @Override
+                       public boolean filter(IConnection conn) {
+                               Client rcl = 
sessionMgr.getClientByStreamId(conn.getClient().getId(), null);
+                               return rcl.isScreenClient()
+                                               || rcl.getRoomId() == null || 
!rcl.getRoomId().equals(roomId) || userDao.get(rcl.getUserId()) == null;
+                       }
+               }.start();
+       }
+}

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html?rev=1739141&r1=1739140&r2=1739141&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.html
 Thu Apr 14 17:08:51 2016
@@ -28,40 +28,11 @@
 </wicket:head>
 <wicket:panel>
        <div wicket:id="roomContainer" style="height: 100%">
-               <div wicket:id="roomMenu"></div>
-               <div class="room menu right">
-                       <span wicket:id="ask" class="icon ask"></span>
-                       <span wicket:id="share" class="icon share"></span>
-                       <span wicket:id="recording" class="room 
recording"></span>
-                       <span wicket:id="roomName" class="room name"></span>
-               </div>
-               <div class="room sidebar left">
-                       <div class="tabs">
-                               <ul>
-                                       <li><a href="#utab"><wicket:message 
key="613"/></a></li>
-                                       <li><a wicket:id="flink" 
href="#ftab"><wicket:message key="614"/></a></li>
-                               </ul>
-                               <div id="utab">
-                                       <div wicket:id="userList" class="user 
list">
-                                               <div wicket:id="user" 
class="user ui-corner-all ui-widget-content">
-                                                       <div wicket:id="name" 
class="user name"></div>
-                                                       <div class="user 
actions">
-                                                               <span 
wicket:id="privateChat" class="private-chat om-icon align-right clickable" 
wicket:message="title:1493" onclick="startPrivateChat($(this));"></span>
-                                                               <div 
class="clear"></div>
-                                                       </div>
-                                               </div>
-                                       </div>
-                               </div>
-                               <div wicket:id="ftab" id="ftab"><div 
class="file list" wicket:id="tree"></div></div>
-                       </div>
-               </div>
+               <div class="room menu" wicket:id="roomMenu"></div>
+               <div class="room sidebar left" wicket:id="sidebar"></div>
                <div class="room wb area">
                        <div class="wb" wicket:id="whiteboard"></div>
                </div>
-               <div wicket:id="invite"></div>
-               <div wicket:id="createPoll"></div>
-               <div wicket:id="vote"></div>
-               <div wicket:id="pollResults"></div>
                <div wicket:id="activitiesPanel"></div>
        </div>
        <div wicket:id="accessDenied"></div>


Reply via email to