You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2019/05/23 06:07:53 UTC

[openmeetings] branch 4.0.x updated: [OPENMEETINGS-2073] cleanWb REST call perform real-time clean

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

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


The following commit(s) were added to refs/heads/4.0.x by this push:
     new 11ab322  [OPENMEETINGS-2073] cleanWb REST call perform real-time clean
11ab322 is described below

commit 11ab3229c5adbecad5abab3a1af920dcd0f63129
Author: Maxim Solodovnik <so...@gmail.com>
AuthorDate: Thu May 23 11:45:49 2019 +0700

    [OPENMEETINGS-2073] cleanWb REST call perform real-time clean
---
 .../apache/openmeetings/db/manager/IWhiteboardManager.java   |  2 +-
 .../java/org/apache/openmeetings/db/util/ws/RoomMessage.java |  1 +
 .../org/apache/openmeetings/web/app/WhiteboardManager.java   | 12 +++++++++++-
 .../java/org/apache/openmeetings/web/room/RoomPanel.java     |  5 +++++
 .../org/apache/openmeetings/web/room/wb/AbstractWbPanel.java |  4 ++++
 .../java/org/apache/openmeetings/web/room/wb/WbPanel.java    |  8 ++++++++
 .../java/org/apache/openmeetings/web/room/wb/raw-wb-area.js  | 12 ++++++++++++
 .../org/apache/openmeetings/webservice/RoomWebService.java   |  2 +-
 8 files changed, 43 insertions(+), 3 deletions(-)

diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/manager/IWhiteboardManager.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/manager/IWhiteboardManager.java
index 9e2a3cd..d8f02fe 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/manager/IWhiteboardManager.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/manager/IWhiteboardManager.java
@@ -22,5 +22,5 @@ import org.apache.openmeetings.db.dto.room.Whiteboards;
 
 public interface IWhiteboardManager {
 	Whiteboards get(Long roomId);
-	void remove(Long roomId);
+	void clean(Long roomId, Long userId);
 }
diff --git a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/ws/RoomMessage.java b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/ws/RoomMessage.java
index dd5627e..dc93ae8 100644
--- a/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/ws/RoomMessage.java
+++ b/openmeetings-db/src/main/java/org/apache/openmeetings/db/util/ws/RoomMessage.java
@@ -57,6 +57,7 @@ public class RoomMessage implements IWebSocketPushMessage {
 		, mute
 		, muteOthers
 		, quickPollUpdated
+		, wbReload
 	}
 	private final Date timestamp;
 	private final String uid;
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 ec0be53..2504e24 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
@@ -18,6 +18,7 @@
  */
 package org.apache.openmeetings.web.app;
 
+import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getDefaultLang;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
 import static org.red5.logging.Red5LoggerFactory.getLogger;
@@ -34,13 +35,16 @@ import java.util.concurrent.TimeUnit;
 
 import javax.annotation.PostConstruct;
 
+import org.apache.openmeetings.core.util.WebSocketHelper;
 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.entity.user.User;
 import org.apache.openmeetings.db.manager.IWhiteboardManager;
+import org.apache.openmeetings.db.util.ws.RoomMessage;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -88,7 +92,7 @@ public class WhiteboardManager implements IWhiteboardManager {
 	}
 
 	@Override
-	public void remove(Long roomId) {
+	public void clean(Long roomId, Long userId) {
 		if (roomId == null) {
 			return;
 		}
@@ -101,6 +105,12 @@ public class WhiteboardManager implements IWhiteboardManager {
 					map().unlock(roomId);
 				}
 			}
+			new Thread(() -> {
+				ensureApplication();
+				User u = new User();
+				u.setId(userId);
+				WebSocketHelper.sendRoom(new RoomMessage(roomId, u, RoomMessage.Type.wbReload));
+			}).start();
 		} catch (InterruptedException e) {
 			log.warn("Unexpected exception while map clean-up", e);
 		}
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 e8a918f..5aadb1e 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
@@ -614,6 +614,11 @@ public class RoomPanel extends BasePanel {
 						handler.appendJavaScript(getQuickPollJs());
 					}
 						break;
+					case wbReload:
+						if (Room.Type.interview != r.getType()) {
+							wb.reloadWb(handler);
+						}
+						break;
 				}
 			}
 		}
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/AbstractWbPanel.java b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/AbstractWbPanel.java
index 337aacb..63965ff 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/AbstractWbPanel.java
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/AbstractWbPanel.java
@@ -93,6 +93,10 @@ public abstract class AbstractWbPanel extends Panel {
 		return this;
 	}
 
+	public void reloadWb(IPartialPageRequestHandler handler) {
+		//designed to be empty
+	}
+
 	protected abstract String getRole();
 
 	/**
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 0e03a1e..2c9ba19 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
@@ -79,6 +79,7 @@ import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes.Method;
+import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.list.ListItem;
 import org.apache.wicket.markup.html.list.ListView;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
@@ -183,6 +184,13 @@ public class WbPanel extends AbstractWbPanel {
 	}
 
 	@Override
+	public void reloadWb(IPartialPageRequestHandler handler) {
+		StringBuilder sb = new StringBuilder("WbArea.doCleanAll();");
+		internalWbLoad(sb);
+		handler.appendJavaScript(sb);
+	}
+
+	@Override
 	protected void processWbAction(WbAction a, JSONObject obj, AjaxRequestTarget target) throws IOException {
 		Client c = rp.getClient();
 		if (c == null) {
diff --git a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-wb-area.js b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-wb-area.js
index 2aac871..08ad259 100644
--- a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-wb-area.js
+++ b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/raw-wb-area.js
@@ -399,6 +399,18 @@ var DrawWbArea = function() {
 		$(window).off('keyup', _deleteHandler);
 	};
 	self.updateAreaClass = function() {};
+	self.doCleanAll = function() {
+		if (!_inited) {
+			return;
+		}
+		tabs.find('li').each(function() {
+			const wbId = $(this).data('wb-id')
+				, tabId = self.getWbTabId(wbId);
+			$(this).remove();
+			$('#' + tabId).remove();
+		});
+		refreshTabs();
+	};
 	return self;
 };
 $(function() {
diff --git a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
index 6b56bab..569abff 100644
--- a/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
+++ b/openmeetings-webservice/src/main/java/org/apache/openmeetings/webservice/RoomWebService.java
@@ -418,7 +418,7 @@ public class RoomWebService extends BaseWebService {
 	{
 		log.debug("[cleanwb] room id {}", id);
 		return performCall(sid, User.Right.Soap, sd -> {
-			getBean(IWhiteboardManager.class).remove(id);
+			getBean(IWhiteboardManager.class).clean(id, sd.getUserId());
 			return new ServiceResult("", Type.SUCCESS);
 		});
 	}