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 2017/09/25 17:11:07 UTC

openmeetings git commit: [OPENMEETINGS-1671] room files are loaded to WB

Repository: openmeetings
Updated Branches:
  refs/heads/3.3.x 1b23071ff -> 55beed74f


[OPENMEETINGS-1671] room files are loaded to WB


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/55beed74
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/55beed74
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/55beed74

Branch: refs/heads/3.3.x
Commit: 55beed74fbd96f8eb3e660505fa10a642e010f21
Parents: 1b23071
Author: Maxim Solodovnik <so...@gmail.com>
Authored: Tue Sep 26 00:10:58 2017 +0700
Committer: Maxim Solodovnik <so...@gmail.com>
Committed: Tue Sep 26 00:10:58 2017 +0700

----------------------------------------------------------------------
 .../core/data/whiteboard/WhiteboardCache.java   | 26 +++++++
 .../openmeetings/core/remote/MainService.java   |  2 +-
 .../core/remote/ScopeApplicationAdapter.java    | 28 +++----
 .../core/remote/WhiteboardService.java          | 21 ------
 .../openmeetings/db/dto/room/Whiteboards.java   |  4 +
 .../apache/openmeetings/web/room/RoomPanel.java | 78 +++++++++++++++-----
 6 files changed, 100 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/55beed74/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/whiteboard/WhiteboardCache.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/whiteboard/WhiteboardCache.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/whiteboard/WhiteboardCache.java
index 0dd12ba..9fd26e9 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/whiteboard/WhiteboardCache.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/whiteboard/WhiteboardCache.java
@@ -22,6 +22,7 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicLong;
 
+import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dto.room.Whiteboard;
 import org.apache.openmeetings.db.dto.room.Whiteboards;
 
@@ -36,12 +37,37 @@ public class WhiteboardCache {
 
 	private volatile AtomicLong whiteboardId = new AtomicLong(0);
 
+	private static String getDefaultName(Long langId, int num) {
+		StringBuilder sb = new StringBuilder(LabelDao.getString("615", langId));
+		if (num > 0) {
+			sb.append(" ").append(num);
+		}
+		return sb.toString();
+	}
+
+	public Whiteboard add(Long roomId, Long langId) {
+		Whiteboards wbs = get(roomId);
+		Whiteboard wb = add(wbs, langId);
+		return wb;
+	}
+
+	public Whiteboard add(Whiteboards wbs, Long langId) {
+		Whiteboard wb = new Whiteboard(getDefaultName(langId, wbs.count()));
+		long wbId = whiteboardId.getAndIncrement();
+		wbs.getWhiteboards().put(wbId, wb);
+		return wb;
+	}
+
 	public long getNewWhiteboardId(Long roomId, String name) {
 		long wbId = whiteboardId.getAndIncrement();
 		set(roomId, new Whiteboard(name), wbId);
 		return wbId;
 	}
 
+	public boolean contains(Long roomId) {
+		return cache.containsKey(roomId) ? !cache.get(roomId).getWhiteboards().isEmpty() : false;
+	}
+
 	/*
 	 * Room items a Whiteboard
 	 */

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/55beed74/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
index 2f90506..1c606c5 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/MainService.java
@@ -192,7 +192,7 @@ public class MainService implements IPendingServiceCallback {
 					sessionManager.update(currentClient);
 
 					scopeApplicationAdapter.sendMessageToCurrentScope("roomConnect", currentClient, false);
-
+					r.setFiles(null); //to prevent stackoverflow
 					return Arrays.<Object>asList(u, r);
 				}
 			}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/55beed74/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
index 8c28f6c..6224f75 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ScopeApplicationAdapter.java
@@ -1118,7 +1118,7 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 		try {
 			IConnection current = Red5.getConnectionLocal();
 			StreamClient client = sessionManager.get(IClientUtil.getId(current.getClient()));
-			return sendToWhiteboard(client, whiteboardObjParam, whiteboardId);
+			return sendToWhiteboard(client.getRoomId(), client, whiteboardObjParam, whiteboardId);
 		} catch (Exception err) {
 			_log.error("[sendVarsByWhiteboardId]", err);
 			return -1;
@@ -1215,7 +1215,7 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 		}
 	}
 
-	public void sendToWhiteboard(String uid, Long wbId, BaseFileItem fi, String url, boolean clean) {
+	public void sendToWhiteboard(Long roomId, String uid, Long wbId, BaseFileItem fi, String url, boolean clean) {
 		StreamClient client = sessionManager.get(uid);
 
 		List<?> wbObject = new ArrayList<>();
@@ -1229,7 +1229,7 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 			case Video:
 			case Recording:
 				wbObject = getMp4WbObject(fi, url);
-				copyFileToRoom(client.getRoomId(), fi);
+				copyFileToRoom(roomId, fi);
 				break;
 			default:
 		}
@@ -1238,29 +1238,20 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 			wbClear.put("id", wbId);
 			wbClear.put("param", Arrays.asList("whiteboard", new Date(), "clear", null));
 
-			whiteboardCache.get(client.getRoomId(), wbId).clear();
-			sendToScope(client.getRoomId(), "sendVarsToWhiteboardById", Arrays.asList(null, wbClear));
+			whiteboardCache.get(roomId, wbId).clear();
+			sendToScope(roomId, "sendVarsToWhiteboardById", Arrays.asList(null, wbClear));
 		}
-		sendToWhiteboard(client, Arrays.asList("whiteboard", new Date(), "draw", wbObject), wbId);
+		sendToWhiteboard(roomId, client, Arrays.asList("whiteboard", new Date(), "draw", wbObject), wbId);
 	}
 
-	private int sendToWhiteboard(StreamClient client, List<?> wbObj, Long wbId) {
+	private int sendToWhiteboard(Long roomId, StreamClient client, List<?> wbObj, Long wbId) {
 		try {
-			// Check if this User is the Mod:
-			if (client == null) {
-				return -1;
-			}
-
 			Map<Integer, Object> whiteboardObj = new HashMap<>();
 			int i = 0;
 			for (Object obj : wbObj) {
 				whiteboardObj.put(i++, obj);
 			}
 
-			Long roomId = client.getRoomId();
-
-			// log.debug("***** sendVars: " + whiteboardObj);
-
 			// Store event in list
 			String action = whiteboardObj.get(2).toString();
 
@@ -1294,12 +1285,15 @@ public class ScopeApplicationAdapter extends MultiThreadedApplicationAdapter imp
 				whiteboardManager.add(roomId, whiteboardObj, wbId);
 			}
 
+			if (client == null) {
+				return -1;
+			}
+
 			Map<String, Object> sendObject = new HashMap<>();
 			sendObject.put("id", wbId);
 			sendObject.put("param", wbObj);
 
 			boolean showDrawStatus = getWhiteboardDrawStatus();
-
 			sendToScope(roomId, "sendVarsToWhiteboardById", new Object[] { showDrawStatus ? client : null, sendObject });
 		} catch (Exception err) {
 			_log.error("[sendToWhiteboard]", err);

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/55beed74/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/WhiteboardService.java
----------------------------------------------------------------------
diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/WhiteboardService.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/WhiteboardService.java
index 73cc162..47e7e11 100644
--- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/WhiteboardService.java
+++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/WhiteboardService.java
@@ -18,7 +18,6 @@
  */
 package org.apache.openmeetings.core.remote;
 
-import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANG_KEY;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 
 import java.io.File;
@@ -35,8 +34,6 @@ import org.apache.commons.collections4.ComparatorUtils;
 import org.apache.openmeetings.core.data.whiteboard.WhiteboardCache;
 import org.apache.openmeetings.core.data.whiteboard.WhiteboardObjectSyncManager;
 import org.apache.openmeetings.core.util.IClientUtil;
-import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
-import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -46,7 +43,6 @@ import org.apache.openmeetings.db.dto.room.WhiteboardSyncLockObject;
 import org.apache.openmeetings.db.dto.room.Whiteboards;
 import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.server.Sessiondata;
-import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.util.AuthLevelUtil;
 import org.apache.openmeetings.util.OmFileHelper;
 import org.red5.logging.Red5LoggerFactory;
@@ -77,8 +73,6 @@ public class WhiteboardService implements IPendingServiceCallback {
 	private WhiteboardCache wbCache;
 	@Autowired
 	private SessiondataDao sessionDao;
-	@Autowired
-	private ConfigurationDao cfgDao;
 
 	public boolean getNewWhiteboardId(String name) {
 		try {
@@ -126,21 +120,6 @@ public class WhiteboardService implements IPendingServiceCallback {
 
 			log.debug("getRoomItems: " + roomId);
 			Whiteboards whiteboards = wbCache.get(roomId);
-
-			if (whiteboards.getWhiteboards().isEmpty()) {
-				Long langId = null;
-				{
-					Long userId = currentClient.getUserId();
-					if (userId != null && userId.longValue() < 0) {
-						userId = -userId;
-					}
-					User u = userDao.get(userId);
-					langId = u == null ? cfgDao.getConfValue(CONFIG_DEFAULT_LANG_KEY, Long.class, "1") : u.getLanguageId();
-				}
-				wbCache.getNewWhiteboardId(roomId, LabelDao.getString("615", langId));
-				log.debug("Init New Room List");
-				whiteboards = wbCache.get(roomId);
-			}
 			whiteboards.getWhiteboards().entrySet().stream()
 					.sorted(Map.Entry.<Long, Whiteboard>comparingByKey().reversed())
 					.forEachOrdered(x -> result.put(x.getKey(), x.getValue()));

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/55beed74/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboards.java
----------------------------------------------------------------------
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboards.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboards.java
index 5d14211..af9df36 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboards.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/room/Whiteboards.java
@@ -37,6 +37,10 @@ public class Whiteboards {
 		this.roomId = roomId;
 	}
 
+	public int count() {
+		return whiteboards.size();
+	}
+
 	public Map<Long, Whiteboard> getWhiteboards() {
 		return whiteboards;
 	}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/55beed74/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
----------------------------------------------------------------------
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
index 5689ba3..88cc243 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/RoomPanel.java
@@ -30,10 +30,13 @@ import static org.apache.openmeetings.web.app.WebSession.getUserId;
 import static org.apache.openmeetings.web.util.CallbackFunctionHelper.getNamedFunction;
 import static org.apache.wicket.ajax.attributes.CallbackParameter.explicit;
 
+import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.TreeMap;
 import java.util.UUID;
 
 import org.apache.directory.api.util.Strings;
@@ -44,6 +47,8 @@ import org.apache.openmeetings.core.util.WebSocketHelper;
 import org.apache.openmeetings.db.dao.calendar.AppointmentDao;
 import org.apache.openmeetings.db.dao.log.ConferenceLogDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
+import org.apache.openmeetings.db.dto.room.Whiteboard;
+import org.apache.openmeetings.db.dto.room.Whiteboards;
 import org.apache.openmeetings.db.entity.basic.Client;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.calendar.MeetingMember;
@@ -52,6 +57,7 @@ import org.apache.openmeetings.db.entity.log.ConferenceLog;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.Room.Right;
 import org.apache.openmeetings.db.entity.room.Room.RoomElement;
+import org.apache.openmeetings.db.entity.room.RoomFile;
 import org.apache.openmeetings.db.entity.room.RoomGroup;
 import org.apache.openmeetings.db.entity.room.StreamClient;
 import org.apache.openmeetings.db.entity.server.SOAPLogin;
@@ -459,6 +465,34 @@ public class RoomPanel extends BasePanel {
 					update(c);
 				}
 			}
+			WhiteboardCache wbCache = getBean(WhiteboardCache.class);
+			if (!wbCache.contains(r.getId())) {
+				synchronized (Application.get()) { // TODO
+					if (!wbCache.contains(r.getId())) {
+						if (r.getFiles() != null && !r.getFiles().isEmpty()) {
+							TreeMap<Long, List<BaseFileItem>> files = new TreeMap<>();
+							for (RoomFile rf : r.getFiles()) {
+								List<BaseFileItem> bfl = files.get(rf.getWbIdx());
+								if (bfl == null) {
+									files.put(rf.getWbIdx(), new ArrayList<>());
+									bfl = files.get(rf.getWbIdx());
+								}
+								bfl.add(rf.getFile());
+							}
+							Whiteboards wbs = wbCache.get(r.getId());
+							for (Map.Entry<Long, List<BaseFileItem>> e : files.entrySet()) {
+								Whiteboard wb = wbCache.add(wbs, getClient().getUser().getLanguageId());
+								for (BaseFileItem fi : e.getValue()) {
+									sendFileToWb(fi, wb.getWhiteBoardId(), false);
+								}
+							}
+						} else {
+							wbCache.getNewWhiteboardId(r.getId(), getString("615"));
+						}
+						log.debug("Init New Room List");
+					}
+				}
+			}
 		}
 	}
 
@@ -648,27 +682,31 @@ public class RoomPanel extends BasePanel {
 
 	public void sendFileToWb(BaseFileItem fi, boolean clean) {
 		if (activeWbId > -1 && fi.getId() != null && BaseFileItem.Type.Folder != fi.getType()) {
-			if (BaseFileItem.Type.WmlFile == fi.getType()) {
-				getBean(ConferenceLibrary.class).sendToWhiteboard(getClient().getUid(), activeWbId, fi);
-			} else {
-				String url = null;
-				PageParameters pp = new PageParameters();
-				pp.add("id", fi.getId())
-					.add("ruid", getBean(WhiteboardCache.class).get(r.getId()).getUid());
-				switch (fi.getType()) {
-					case Video:
-						pp.add("preview", true);
-						url = urlFor(new RoomResourceReference(), pp).toString();
-						break;
-					case Recording:
-						url = urlFor(new JpgRecordingResourceReference(), pp).toString();
-						break;
-					default:
-						url = urlFor(new RoomResourceReference(), pp).toString();
-						break;
-				}
-				getBean(ScopeApplicationAdapter.class).sendToWhiteboard(getClient().getUid(), activeWbId, fi, url, clean);
+			sendFileToWb(fi, activeWbId, clean);
+		}
+	}
+
+	private void sendFileToWb(BaseFileItem fi, long wbId, boolean clean) {
+		if (BaseFileItem.Type.WmlFile == fi.getType()) {
+			getBean(ConferenceLibrary.class).sendToWhiteboard(getClient().getUid(), wbId, fi);
+		} else {
+			String url = null;
+			PageParameters pp = new PageParameters();
+			pp.add("id", fi.getId())
+				.add("ruid", getBean(WhiteboardCache.class).get(r.getId()).getUid());
+			switch (fi.getType()) {
+				case Video:
+					pp.add("preview", true);
+					url = urlFor(new RoomResourceReference(), pp).toString();
+					break;
+				case Recording:
+					url = urlFor(new JpgRecordingResourceReference(), pp).toString();
+					break;
+				default:
+					url = urlFor(new RoomResourceReference(), pp).toString();
+					break;
 			}
+			getBean(ScopeApplicationAdapter.class).sendToWhiteboard(r.getId(), getClient().getUid(), wbId, fi, url, clean);
 		}
 	}
 }