From 63922f4cf01a1071f6c10c968531cd69d9b9019b Mon Sep 17 00:00:00 2001 From: uhensler <urs.hensler@frentix.com> Date: Tue, 19 Mar 2019 14:50:57 +0100 Subject: [PATCH] OO-3937: Deliver real instead of dummy data to Collabora office --- .../java/org/olat/modules/wopi/Access.java | 5 ++-- .../org/olat/modules/wopi/WopiRestHelper.java | 6 +++++ .../org/olat/modules/wopi/WopiService.java | 4 +++ .../wopi/collabora/CollaboraService.java | 5 ++++ .../manager/CollaboraServiceImpl.java | 10 +++++++ .../collabora/restapi/FilesWebService.java | 19 +++++++++----- .../ui/CollaboraEditorController.java | 9 +++++++ .../modules/wopi/manager/WopiServiceImpl.java | 15 ++++++++--- .../olat/modules/wopi/model/AccessImpl.java | 26 +++++++++---------- 9 files changed, 74 insertions(+), 25 deletions(-) diff --git a/src/main/java/org/olat/modules/wopi/Access.java b/src/main/java/org/olat/modules/wopi/Access.java index bd28adc67fb..7f2c23123a5 100644 --- a/src/main/java/org/olat/modules/wopi/Access.java +++ b/src/main/java/org/olat/modules/wopi/Access.java @@ -19,6 +19,7 @@ */ package org.olat.modules.wopi; +import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.id.Identity; /** @@ -33,8 +34,8 @@ public interface Access { String getToken(); - Identity getOwner(); + Identity getIdentity(); - Identity getAccessIdentity(); + VFSMetadata getVfsMetadata(); } diff --git a/src/main/java/org/olat/modules/wopi/WopiRestHelper.java b/src/main/java/org/olat/modules/wopi/WopiRestHelper.java index 47a4e252a95..e5324940d86 100644 --- a/src/main/java/org/olat/modules/wopi/WopiRestHelper.java +++ b/src/main/java/org/olat/modules/wopi/WopiRestHelper.java @@ -21,6 +21,7 @@ package org.olat.modules.wopi; import java.io.File; import java.time.Instant; +import java.util.Date; import java.util.List; import javax.ws.rs.core.HttpHeaders; @@ -42,5 +43,10 @@ public class WopiRestHelper { long lastModified = file.lastModified(); return Instant.ofEpochMilli(lastModified).toString(); } + + public static String getAsIso6801(Date date) { + long lastModified = date.getTime(); + return Instant.ofEpochMilli(lastModified).toString(); + } } diff --git a/src/main/java/org/olat/modules/wopi/WopiService.java b/src/main/java/org/olat/modules/wopi/WopiService.java index 7b03dcb9661..6df0f8b9ade 100644 --- a/src/main/java/org/olat/modules/wopi/WopiService.java +++ b/src/main/java/org/olat/modules/wopi/WopiService.java @@ -36,10 +36,14 @@ public interface WopiService { File getFile(String fileId); + VFSMetadata getMetadata(String fileId); + Access createAccess(VFSMetadata vfsMetadata, Identity identity); Access getAccess(String accessToken); + void deleteAccess(String accessToken); + boolean hasAction(Discovery discovery, String actionName, String suffix); Action getAction(Discovery discovery, String actionName, String suffix); diff --git a/src/main/java/org/olat/modules/wopi/collabora/CollaboraService.java b/src/main/java/org/olat/modules/wopi/collabora/CollaboraService.java index a61a6b98c4f..17d04cbbb5c 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/CollaboraService.java +++ b/src/main/java/org/olat/modules/wopi/collabora/CollaboraService.java @@ -42,14 +42,19 @@ public interface CollaboraService { boolean fileExists(String fileId); File getFile(String fileId); + + VFSMetadata getMetadata(String fileId); Access createAccess(VFSMetadata vfsMetadata, Identity identity); Access getAccess(String accessToken); + void deleteAccess(Access access); + Discovery getDiscovery(); String getEditorBaseUrl(File file); boolean accepts(String suffix); + } diff --git a/src/main/java/org/olat/modules/wopi/collabora/manager/CollaboraServiceImpl.java b/src/main/java/org/olat/modules/wopi/collabora/manager/CollaboraServiceImpl.java index dcca0e365eb..62196b861f9 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/manager/CollaboraServiceImpl.java +++ b/src/main/java/org/olat/modules/wopi/collabora/manager/CollaboraServiceImpl.java @@ -77,6 +77,11 @@ public class CollaboraServiceImpl implements CollaboraService, GenericEventListe return wopiService.getFile(fileId); } + @Override + public VFSMetadata getMetadata(String fileId) { + return wopiService.getMetadata(fileId); + } + @Override public Access createAccess(VFSMetadata vfsMetadata, Identity identity) { return wopiService.createAccess(vfsMetadata, identity); @@ -87,6 +92,11 @@ public class CollaboraServiceImpl implements CollaboraService, GenericEventListe return wopiService.getAccess(accessToken); } + @Override + public void deleteAccess(Access access) { + wopiService.deleteAccess(access.getToken()); + } + @Override public Discovery getDiscovery() { if (discovery == null) { diff --git a/src/main/java/org/olat/modules/wopi/collabora/restapi/FilesWebService.java b/src/main/java/org/olat/modules/wopi/collabora/restapi/FilesWebService.java index 5f156fa07a7..b4bdaae330c 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/restapi/FilesWebService.java +++ b/src/main/java/org/olat/modules/wopi/collabora/restapi/FilesWebService.java @@ -19,6 +19,7 @@ */ package org.olat.modules.wopi.collabora.restapi; +import static org.olat.modules.wopi.WopiRestHelper.getAsIso6801; import static org.olat.modules.wopi.WopiRestHelper.getFirstRequestHeader; import static org.olat.modules.wopi.WopiRestHelper.getLastModifiedAsIso6801; @@ -44,11 +45,13 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; +import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.logging.OLog; import org.olat.core.logging.Tracing; import org.olat.modules.wopi.Access; import org.olat.modules.wopi.collabora.CollaboraModule; import org.olat.modules.wopi.collabora.CollaboraService; +import org.olat.user.UserManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -71,6 +74,8 @@ public class FilesWebService { private CollaboraModule collaboraModule; @Autowired private CollaboraService collaboraService; + @Autowired + private UserManager userManager; @GET @Produces(MediaType.APPLICATION_JSON) @@ -96,15 +101,15 @@ public class FilesWebService { return Response.serverError().status(Status.UNAUTHORIZED).build(); } - File file = collaboraService.getFile(fileId); + VFSMetadata metadata = collaboraService.getMetadata(fileId); CheckFileInfoVO checkFileInfoVO = CheckFileInfoVO.builder() - .withBaseFileName(file.getName()) // suffix is mandatory - .withOwnerId("1") - .withSize(file.length()) - .withUserId("2") - .withUserFriendlyName("Alice") + .withBaseFileName(metadata.getFilename()) // suffix is mandatory + .withOwnerId(metadata.getAuthor().getKey().toString()) + .withSize(metadata.getFileSize()) + .withUserId(access.getIdentity().getKey().toString()) + .withUserFriendlyName(userManager.getUserDisplayName(access.getIdentity())) .withVersion(UUID.randomUUID().toString()) - .withLastModifiedTime(getLastModifiedAsIso6801(file)) + .withLastModifiedTime(getAsIso6801(metadata.getLastModified())) .withUserCanWrite(Boolean.TRUE) .withDisablePrint(Boolean.FALSE) .withUserCanNotWriteRelative(Boolean.TRUE) diff --git a/src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraEditorController.java b/src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraEditorController.java index c37590e2570..971def840c9 100644 --- a/src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraEditorController.java +++ b/src/main/java/org/olat/modules/wopi/collabora/ui/CollaboraEditorController.java @@ -27,6 +27,8 @@ import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.util.CodeHelper; import org.olat.modules.wopi.Access; +import org.olat.modules.wopi.collabora.CollaboraService; +import org.springframework.beans.factory.annotation.Autowired; /** * @@ -36,8 +38,14 @@ import org.olat.modules.wopi.Access; */ public class CollaboraEditorController extends BasicController { + private final Access access; + + @Autowired + private CollaboraService collaboraService; + public CollaboraEditorController(UserRequest ureq, WindowControl wControl, Access access) { super(ureq, wControl); + this.access = access; VelocityContainer mainVC = createVelocityContainer("collabora"); @@ -54,6 +62,7 @@ public class CollaboraEditorController extends BasicController { @Override protected void event(UserRequest ureq, Component source, Event event) { if ("close".equals(event.getCommand())) { + collaboraService.deleteAccess(access); fireEvent(ureq, Event.DONE_EVENT); } } diff --git a/src/main/java/org/olat/modules/wopi/manager/WopiServiceImpl.java b/src/main/java/org/olat/modules/wopi/manager/WopiServiceImpl.java index 941eb4b6792..c9b728ae135 100644 --- a/src/main/java/org/olat/modules/wopi/manager/WopiServiceImpl.java +++ b/src/main/java/org/olat/modules/wopi/manager/WopiServiceImpl.java @@ -89,17 +89,21 @@ public class WopiServiceImpl implements WopiService { return null; } + @Override + public VFSMetadata getMetadata(String fileId) { + File file = getFile(fileId); + return vfsService.getMetadataFor(file); + } + @Override public Access createAccess(VFSMetadata vfsMetadata, Identity identity) { String token = UUID.randomUUID().toString().replaceAll("-", ""); String fileId = vfsMetadata.getUuid(); - Identity owner = vfsMetadata.getAuthor(); AccessImpl access = new AccessImpl(); access.setToken(token); access.setFileId(fileId); - access.setOwner(owner); - access.setAccessIdentity(identity); + access.setIdentity(identity); accessCache.put(token, access); return access; } @@ -108,6 +112,11 @@ public class WopiServiceImpl implements WopiService { public Access getAccess(String accessToken) { return accessCache.get(accessToken); } + + @Override + public void deleteAccess(String accessToken) { + accessCache.remove(accessToken); + } @Override public boolean hasAction(Discovery discovery, String actionName, String suffix) { diff --git a/src/main/java/org/olat/modules/wopi/model/AccessImpl.java b/src/main/java/org/olat/modules/wopi/model/AccessImpl.java index cac3bb0f002..ec513fdab4f 100644 --- a/src/main/java/org/olat/modules/wopi/model/AccessImpl.java +++ b/src/main/java/org/olat/modules/wopi/model/AccessImpl.java @@ -19,6 +19,7 @@ */ package org.olat.modules.wopi.model; +import org.olat.core.commons.services.vfs.VFSMetadata; import org.olat.core.id.Identity; import org.olat.modules.wopi.Access; @@ -32,8 +33,8 @@ public class AccessImpl implements Access { private String fileId; private String token; - private Identity owner; - private Identity accessIdentity; + private Identity identity; + private VFSMetadata vfsMetadata; @Override public String getFileId() { @@ -54,22 +55,21 @@ public class AccessImpl implements Access { } @Override - public Identity getOwner() { - return owner; + public Identity getIdentity() { + return identity; } - - public void setOwner(Identity owner) { - this.owner = owner; + + public void setIdentity(Identity identity) { + this.identity = identity; } @Override - public Identity getAccessIdentity() { - return accessIdentity; - } - - public void setAccessIdentity(Identity accessIdentity) { - this.accessIdentity = accessIdentity; + public VFSMetadata getVfsMetadata() { + return vfsMetadata; } + public void setVfsMetadata(VFSMetadata vfsMetadata) { + this.vfsMetadata = vfsMetadata; + } } -- GitLab