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