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

Reply via email to