This is an automated email from the ASF dual-hosted git repository.

solomax pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openmeetings.git


The following commit(s) were added to refs/heads/master by this push:
     new 87d47c5  [OPENMEETINGS-2070] room files seems to be loaded as expected
87d47c5 is described below

commit 87d47c5948bb62e3705ef509267655cd1d53dbb3
Author: Maxim Solodovnik <[email protected]>
AuthorDate: Wed May 15 16:41:20 2019 +0700

    [OPENMEETINGS-2070] room files seems to be loaded as expected
---
 .../openmeetings/web/app/WhiteboardManager.java    | 58 ++++++++++++++++++----
 .../apache/openmeetings/web/room/wb/WbPanel.java   | 40 ++++-----------
 2 files changed, 59 insertions(+), 39 deletions(-)

diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WhiteboardManager.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WhiteboardManager.java
index 54eda74..a213207 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WhiteboardManager.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/WhiteboardManager.java
@@ -20,9 +20,13 @@ package org.apache.openmeetings.web.app;
 
 import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getDefaultLang;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.TreeMap;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 
@@ -31,6 +35,9 @@ import javax.annotation.PostConstruct;
 import org.apache.openmeetings.db.dao.label.LabelDao;
 import org.apache.openmeetings.db.dto.room.Whiteboard;
 import org.apache.openmeetings.db.dto.room.Whiteboards;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.room.Room;
+import org.apache.openmeetings.db.entity.room.RoomFile;
 import org.apache.openmeetings.db.manager.IWhiteboardManager;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -67,14 +74,6 @@ public class WhiteboardManager implements IWhiteboardManager 
{
                map().addEntryListener(new WbListener(), true);
        }
 
-       public boolean tryLock(Long roomId) {
-               return map().tryLock(roomId);
-       }
-
-       public void unlock(Long roomId) {
-               map().unlock(roomId);
-       }
-
        private static String getDefaultName(Long langId, int num) {
                StringBuilder sb = new StringBuilder(LabelDao.getString("615", 
langId));
                if (num > 0) {
@@ -83,7 +82,7 @@ public class WhiteboardManager implements IWhiteboardManager {
                return sb.toString();
        }
 
-       public boolean contains(Long roomId) {
+       private boolean contains(Long roomId) {
                return onlineWbs.containsKey(roomId);
        }
 
@@ -111,13 +110,52 @@ public class WhiteboardManager implements 
IWhiteboardManager {
                return get(roomId, null);
        }
 
-       public Whiteboards get(Long roomId, Long langId) {
+       private Whiteboards getOrCreate(Long roomId) {
                if (roomId == null) {
                        return null;
                }
                Whiteboards wbs = onlineWbs.get(roomId);
                if (wbs == null) {
                        wbs = new Whiteboards(roomId);
+               }
+               return wbs;
+       }
+
+       public Map<Long, List<BaseFileItem>> get(Room r, Long langId) {
+               Map<Long, List<BaseFileItem>> result = new HashMap<>();
+               if (!contains(r.getId()) && r.getFiles() != null && 
!r.getFiles().isEmpty()) {
+                       if (map().tryLock(r.getId())) {
+                               try {
+                                       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 = 
getOrCreate(r.getId());
+                                       for (Map.Entry<Long, 
List<BaseFileItem>> e : files.entrySet()) {
+                                               Whiteboard wb = add(wbs, 
langId);
+                                               wbs.setActiveWb(wb.getId());
+                                               result.put(wb.getId(), 
e.getValue());
+                                       }
+                                       update(wbs);
+                               } finally {
+                                       map().unlock(r.getId());
+                               }
+                       }
+               }
+               return result;
+       }
+
+       public Whiteboards get(Long roomId, Long langId) {
+               Whiteboards wbs = getOrCreate(roomId);
+               if (wbs == null) {
+                       return null;
+               }
+               if (wbs.getWhiteboards().isEmpty()) {
                        Whiteboard wb = add(wbs, langId);
                        wbs.setActiveWb(wb.getId());
                        update(wbs);
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
index 2695ab7..de26a3f 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
@@ -40,7 +40,6 @@ import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Deque;
 import java.util.HashMap;
@@ -49,7 +48,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
-import java.util.TreeMap;
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -67,7 +65,6 @@ import org.apache.openmeetings.db.entity.file.FileItem;
 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.util.NullStringer;
 import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.web.app.WhiteboardManager;
@@ -168,29 +165,10 @@ public class WbPanel extends AbstractWbPanel {
        @Override
        void internalWbLoad(StringBuilder sb) {
                Long langId = rp.getClient().getUser().getLanguageId();
-               if (!wbm.contains(roomId) && rp.getRoom().getFiles() != null && 
!rp.getRoom().getFiles().isEmpty()) {
-                       if (wbm.tryLock(roomId)) {
-                               try {
-                                       TreeMap<Long, List<BaseFileItem>> files 
= new TreeMap<>();
-                                       for (RoomFile rf : 
rp.getRoom().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 = wbm.get(roomId, 
langId);
-                                       for (Map.Entry<Long, 
List<BaseFileItem>> e : files.entrySet()) {
-                                               Whiteboard wb = wbm.add(roomId, 
langId);
-                                               _wbs.setActiveWb(wb.getId());
-                                               for (BaseFileItem fi : 
e.getValue()) {
-                                                       sendFileToWb(fi, false);
-                                               }
-                                       }
-                               } finally {
-                                       wbm.unlock(roomId);
-                               }
+               Map<Long, List<BaseFileItem>> files = wbm.get(rp.getRoom(), 
langId);
+               for (Map.Entry<Long, List<BaseFileItem>> e : files.entrySet()) {
+                       for (BaseFileItem fi : e.getValue()) {
+                               sendFileToWb(e.getKey(), fi, false);
                        }
                }
                Whiteboards wbs = wbm.get(roomId, langId);
@@ -552,12 +530,11 @@ public class WbPanel extends AbstractWbPanel {
                wb.setHeight(Math.max(wb.getHeight(), (int)(h * scale)));
        }
 
-       @Override
-       public void sendFileToWb(final BaseFileItem fi, boolean clean) {
+       private void sendFileToWb(Long wbId, final BaseFileItem fi, boolean 
clean) {
                if (isVisible() && fi.getId() != null) {
                        Whiteboards wbs = wbm.get(roomId);
                        String wuid = randomUUID().toString();
-                       Whiteboard wb = wbs.get(wbs.getActiveWb());
+                       Whiteboard wb = wbs.get(wbId == null ? 
wbs.getActiveWb() : wbId);
                        if (wb == null) {
                                return;
                        }
@@ -625,6 +602,11 @@ public class WbPanel extends AbstractWbPanel {
                }
        }
 
+       @Override
+       public void sendFileToWb(final BaseFileItem fi, boolean clean) {
+               sendFileToWb(null, fi, clean);
+       }
+
        private void sendWbOthers(WbAction a, JSONObject obj) {
                WbWebSocketHelper.sendWbOthers(roomId, a, obj, 
rp.getClient().getUid());
        }

Reply via email to