From 9f58e5a272f6cff16fc10b55539dbf0bfa0b7925 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Fri, 11 Sep 2020 14:53:28 +0200 Subject: [PATCH] no-jira: window fire close window event, use it for OnlyOffice editor --- .../onlyoffice/ui/OnlyOfficeEditorController.java | 14 ++++++++++++-- .../java/org/olat/core/gui/components/Window.java | 15 ++++++++++++--- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/olat/core/commons/services/doceditor/onlyoffice/ui/OnlyOfficeEditorController.java b/src/main/java/org/olat/core/commons/services/doceditor/onlyoffice/ui/OnlyOfficeEditorController.java index 2f7998274cb..e7b2de05fa9 100644 --- a/src/main/java/org/olat/core/commons/services/doceditor/onlyoffice/ui/OnlyOfficeEditorController.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/onlyoffice/ui/OnlyOfficeEditorController.java @@ -30,6 +30,7 @@ import org.olat.core.commons.services.doceditor.onlyoffice.OnlyOfficeService; import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; +import org.olat.core.gui.components.Window; import org.olat.core.gui.components.velocity.VelocityContainer; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; @@ -66,7 +67,9 @@ public class OnlyOfficeEditorController extends BasicController { final DocEditorConfigs configs, Access runAccess) { super(ureq, wControl); access = runAccess; - + + wControl.getWindowBackOffice().getWindow().addListener(this); + if (Mode.EDIT == access.getMode() && !onlyOfficeService.isEditLicenseAvailable()) { access = docEditorService.updateMode(access, Mode.VIEW); showWarning("editor.warning.no.edit.license"); @@ -113,11 +116,18 @@ public class OnlyOfficeEditorController extends BasicController { @Override protected void event(UserRequest ureq, Component source, Event event) { - // + if(event == Window.CLOSE_WINDOW) { + deleteAccess(); + } } @Override protected void doDispose() { + deleteAccess(); + getWindowControl().getWindowBackOffice().getWindow().removeListener(this); + } + + private void deleteAccess() { if (access != null) { log.info("Document (key={}) closed with ONLYOFFICE ({}) by {}", openVfsMetadataKey, openMode, getIdentity()); diff --git a/src/main/java/org/olat/core/gui/components/Window.java b/src/main/java/org/olat/core/gui/components/Window.java index 3bd19afeabd..eab39e3cd0f 100644 --- a/src/main/java/org/olat/core/gui/components/Window.java +++ b/src/main/java/org/olat/core/gui/components/Window.java @@ -145,6 +145,8 @@ public class Window extends AbstractComponent implements CustomCSSDelegate { public static final Event AFTER_VALIDATING = new Event("before_validate"); + + public static final Event CLOSE_WINDOW = new Event("close-window"); /** * fired just before the targetcomponent.dispatch takes places @@ -306,6 +308,7 @@ public class Window extends AbstractComponent implements CustomCSSDelegate { /** * @see org.olat.core.gui.components.Component#dispatchRequest(org.olat.core.gui.UserRequest) */ + @Override protected void doDispatchRequest(UserRequest ureq) { dispatchRequest(ureq, false); } @@ -320,8 +323,9 @@ public class Window extends AbstractComponent implements CustomCSSDelegate { final String timestampID = ureq.getTimestampID() == null ? "1" : ureq.getTimestampID(); final String componentID = ureq.getComponentID(); final boolean closeWindow = "close-window".equals(ureq.getParameter("cid")); - - setMarkToBeRemoved(false); + if(!closeWindow) { + setMarkToBeRemoved(false); + } // case windowId timestamp componentId // -------------------------------------------- @@ -432,9 +436,10 @@ public class Window extends AbstractComponent implements CustomCSSDelegate { forceReload = dispatchResult.isForceReload(); if (isDebugLog) { long durationAfterDoDispatchToComponent = System.currentTimeMillis() - debug_start; - log.debug("Perf-Test: Window durationAfterDoDispatchToComponent=" + durationAfterDoDispatchToComponent); + log.debug("Perf-Test: Window durationAfterDoDispatchToComponent={}", durationAfterDoDispatchToComponent); } if(closeWindow) { + fireEvent(ureq, CLOSE_WINDOW); ureq.getHttpResp().setStatus(HttpServletResponse.SC_NOT_MODIFIED); return; } @@ -649,6 +654,9 @@ public class Window extends AbstractComponent implements CustomCSSDelegate { inline = true; validate = true; wbackofficeImpl.fireCycleEvent(BEFORE_RENDER_ONLY); + if(closeWindow) { + fireEvent(ureq, CLOSE_WINDOW); + } } else if (validatingCausedRerendering && timestampID.equals("-1")) { // the first request after the 302 redirect cause by a component validation // -> just rerender, but clear the flag for further async media requests @@ -722,6 +730,7 @@ public class Window extends AbstractComponent implements CustomCSSDelegate { debugMsg.append("disp_comp:").append(diff).append(LOG_SEPARATOR); } if(closeWindow) { + fireEvent(ureq, CLOSE_WINDOW); ureq.getHttpResp().setStatus(HttpServletResponse.SC_NOT_MODIFIED); return; } -- GitLab