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