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