Repository: openmeetings Updated Branches: refs/heads/master 4c954700d -> 085853076
[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/08585307 Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/08585307 Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/08585307 Branch: refs/heads/master Commit: 08585307647cd109b3bfa33d5318dde8160e1423 Parents: 4c95470 Author: Maxim Solodovnik <[email protected]> Authored: Tue Sep 26 00:46:08 2017 +0700 Committer: Maxim Solodovnik <[email protected]> Committed: Tue Sep 26 00:46:08 2017 +0700 ---------------------------------------------------------------------- .../core/data/whiteboard/WhiteboardCache.java | 17 ++++++++++-- openmeetings-db/pom.xml | 5 ++++ .../org/apache/openmeetings/IApplication.java | 4 ++- openmeetings-web/pom.xml | 5 ---- .../openmeetings/web/app/Application.java | 5 ++-- .../openmeetings/web/room/wb/WbPanel.java | 29 ++++++++++++++++++++ 6 files changed, 55 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/openmeetings/blob/08585307/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 d392c69..60a09d0 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 @@ -20,7 +20,6 @@ package org.apache.openmeetings.core.data.whiteboard; import static org.apache.openmeetings.util.OpenmeetingsVariables.wicketApplicationName; -import java.util.Map; import java.util.Map.Entry; import java.util.Set; @@ -30,6 +29,8 @@ import org.apache.openmeetings.db.dto.room.Whiteboard; import org.apache.openmeetings.db.dto.room.Whiteboards; import org.apache.wicket.Application; +import com.hazelcast.core.IMap; + /** * Memory based cache, configured as singleton in spring configuration * @@ -37,11 +38,19 @@ import org.apache.wicket.Application; * */ public class WhiteboardCache { - private static Map<Long, Whiteboards> getCache() { + private static IMap<Long, Whiteboards> getCache() { IApplication iapp = (IApplication)Application.get(wicketApplicationName); return iapp.getWhiteboards(); } + public static boolean tryLock(Long roomId) { + return getCache().tryLock(roomId); + } + + public static void unlock(Long roomId) { + getCache().unlock(roomId); + } + private static String getDefaultName(Long langId, int num) { StringBuilder sb = new StringBuilder(LabelDao.getString("615", langId)); if (num > 0) { @@ -50,6 +59,10 @@ public class WhiteboardCache { return sb.toString(); } + public static boolean contains(Long roomId) { + return getCache().containsKey(roomId); + } + public static Whiteboards get(Long roomId) { if (roomId == null) { return null; http://git-wip-us.apache.org/repos/asf/openmeetings/blob/08585307/openmeetings-db/pom.xml ---------------------------------------------------------------------- diff --git a/openmeetings-db/pom.xml b/openmeetings-db/pom.xml index 7593da2..7b0428c 100644 --- a/openmeetings-db/pom.xml +++ b/openmeetings-db/pom.xml @@ -44,6 +44,11 @@ <artifactId>openmeetings-util</artifactId> </dependency> <dependency> + <groupId>org.wicketstuff</groupId> + <artifactId>wicketstuff-datastore-hazelcast</artifactId> + <version>${wickets.version}</version> + </dependency> + <dependency> <groupId>org.apache.openjpa</groupId> <artifactId>openjpa</artifactId> <version>${openjpa.version}</version> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/08585307/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java ---------------------------------------------------------------------- diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java b/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java index f644172..865854b 100644 --- a/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java +++ b/openmeetings-db/src/main/java/org/apache/openmeetings/IApplication.java @@ -37,6 +37,8 @@ import org.apache.wicket.request.IExceptionMapper; import org.apache.wicket.request.IRequestMapper; import org.apache.wicket.request.mapper.parameter.PageParameters; +import com.hazelcast.core.IMap; + public interface IApplication { <T> T getOmBean(Class<T> clazz); <T> T _getOmBean(Class<T> clazz); @@ -75,5 +77,5 @@ public interface IApplication { //WS void publishWsTopic(IClusterWsMessage msg); - Map<Long, Whiteboards> getWhiteboards(); + IMap<Long, Whiteboards> getWhiteboards(); } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/08585307/openmeetings-web/pom.xml ---------------------------------------------------------------------- diff --git a/openmeetings-web/pom.xml b/openmeetings-web/pom.xml index 5a1634f..aef265b 100644 --- a/openmeetings-web/pom.xml +++ b/openmeetings-web/pom.xml @@ -423,11 +423,6 @@ <version>${wickets.version}</version> </dependency> <dependency> - <groupId>org.wicketstuff</groupId> - <artifactId>wicketstuff-datastore-hazelcast</artifactId> - <version>${wickets.version}</version> - </dependency> - <dependency> <groupId>org.apache.wicket</groupId> <artifactId>wicket-auth-roles</artifactId> <version>${wicket.version}</version> http://git-wip-us.apache.org/repos/asf/openmeetings/blob/08585307/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java ---------------------------------------------------------------------- diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java index 9d91960..a75895e 100644 --- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java +++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/app/Application.java @@ -92,8 +92,8 @@ import org.apache.openmeetings.web.user.dashboard.RssWidgetDescriptor; import org.apache.openmeetings.web.user.dashboard.StartWidgetDescriptor; import org.apache.openmeetings.web.user.dashboard.WelcomeWidgetDescriptor; import org.apache.openmeetings.web.user.dashboard.admin.AdminWidgetDescriptor; -import org.apache.openmeetings.web.user.record.PngRecordingResourceReference; import org.apache.openmeetings.web.user.record.Mp4RecordingResourceReference; +import org.apache.openmeetings.web.user.record.PngRecordingResourceReference; import org.apache.openmeetings.web.util.GroupLogoResourceReference; import org.apache.openmeetings.web.util.ProfileImageResourceReference; import org.apache.openmeetings.web.util.UserDashboardPersister; @@ -136,6 +136,7 @@ import org.wicketstuff.datastores.hazelcast.HazelcastDataStore; import com.hazelcast.config.XmlConfigBuilder; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; +import com.hazelcast.core.IMap; import com.hazelcast.core.ITopic; import com.hazelcast.core.Member; import com.hazelcast.core.MemberAttributeEvent; @@ -363,7 +364,7 @@ public class Application extends AuthenticatedWebApplication implements IApplica } @Override - public Map<Long, Whiteboards> getWhiteboards() { + public IMap<Long, Whiteboards> getWhiteboards() { return hazelcast.getMap(WBS_KEY); } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/08585307/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java ---------------------------------------------------------------------- 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 a68e150..6994a22 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 @@ -33,12 +33,15 @@ 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; import java.util.LinkedList; +import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.TreeMap; import java.util.UUID; import java.util.function.Consumer; import java.util.function.Function; @@ -58,6 +61,7 @@ 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.Application; @@ -164,6 +168,31 @@ public class WbPanel extends AbstractWbPanel { @Override void internalWbLoad(StringBuilder sb) { + if (!WhiteboardCache.contains(roomId) && rp.getRoom().getFiles() != null && !rp.getRoom().getFiles().isEmpty()) { + try { + if (WhiteboardCache.tryLock(roomId)) { + 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 = WhiteboardCache.get(roomId); + for (Map.Entry<Long, List<BaseFileItem>> e : files.entrySet()) { + Whiteboard wb = WhiteboardCache.add(roomId, rp.getClient().getUser().getLanguageId()); + _wbs.setActiveWb(wb.getId()); + for (BaseFileItem fi : e.getValue()) { + sendFileToWb(fi, false); + } + } + } + } finally { + WhiteboardCache.unlock(roomId); + } + } Whiteboards wbs = WhiteboardCache.get(roomId); for (Entry<Long, Whiteboard> entry : WhiteboardCache.list(roomId, rp.getClient().getUser().getLanguageId())) { Whiteboard wb = entry.getValue();
