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 <[email protected]> Authored: Tue Sep 26 00:10:58 2017 +0700 Committer: Maxim Solodovnik <[email protected]> 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); } } }
