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

svn commit: r1739141 [1/3] - in /openmeetings/application/trunk: ./ openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ openmeetings-core/src/main/java/org/apache/openmeetings/core/ldap/ openmeetings-core/src/main/java/org/apache/op...

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>