From d738365acb9ab28ea540d470f6aaa8dda01d5abe Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Thu, 5 Sep 2019 09:25:57 +0200
Subject: [PATCH] OO-4222: delete metadata after the list of revisions if
 needed

---
 .../vfs/ui/version/DeletedFileListController.java  | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/main/java/org/olat/core/commons/services/vfs/ui/version/DeletedFileListController.java b/src/main/java/org/olat/core/commons/services/vfs/ui/version/DeletedFileListController.java
index c39d526962a..62b3800d9a0 100644
--- a/src/main/java/org/olat/core/commons/services/vfs/ui/version/DeletedFileListController.java
+++ b/src/main/java/org/olat/core/commons/services/vfs/ui/version/DeletedFileListController.java
@@ -60,6 +60,7 @@ import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
 import org.olat.core.gui.media.MediaResource;
 import org.olat.core.util.vfs.VFSContainer;
+import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSManager;
 import org.olat.core.util.vfs.callbacks.VFSSecurityCallback;
 import org.olat.user.UserManager;
@@ -247,6 +248,19 @@ public class DeletedFileListController extends FormBasicController {
 			revisionsToDelete.addAll(rowRevisions);
 		}
 		vfsRepositoryService.deleteRevisions(getIdentity(), revisionsToDelete);
+		for(DeletedFileRow rowToDelete:rowsToDelete) {
+			List<VFSRevision> revisions = new ArrayList<>(rowToDelete.getRevisions());
+			revisions.removeAll(revisionsToDelete);
+			if(revisions.isEmpty()) {
+				// double check if the real file is really deleted 
+				VFSItem item = vfsRepositoryService.getItemFor(rowToDelete.getMetadata());
+				if(item == null || !item.exists()) {
+					VFSMetadata orphanMeta = vfsRepositoryService.getMetadata(rowToDelete);
+					vfsRepositoryService.deleteMetadata(orphanMeta);
+				}
+			}
+		}
+		
 		status = FolderCommandStatus.STATUS_SUCCESS;
 	}
 	
-- 
GitLab