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

Reply via email to