From 11e2513194d99ff4079c254602ca1b25ef46a9ab Mon Sep 17 00:00:00 2001
From: aboeckle <alexander.boeckle@frentix.com>
Date: Wed, 15 Jan 2020 09:47:30 +0100
Subject: [PATCH] OO-4375 Fixed revision delete - remove metadata

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

diff --git a/src/main/java/org/olat/core/commons/services/vfs/ui/version/VFSTrashController.java b/src/main/java/org/olat/core/commons/services/vfs/ui/version/VFSTrashController.java
index a3ac2436ee1..f752864358e 100644
--- a/src/main/java/org/olat/core/commons/services/vfs/ui/version/VFSTrashController.java
+++ b/src/main/java/org/olat/core/commons/services/vfs/ui/version/VFSTrashController.java
@@ -66,6 +66,7 @@ import org.olat.core.id.Identity;
 import org.olat.core.util.Formatter;
 import org.olat.core.util.Util;
 import org.olat.core.util.async.ProgressDelegate;
+import org.olat.core.util.vfs.VFSItem;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
@@ -209,6 +210,23 @@ public class VFSTrashController extends FormBasicController implements ProgressD
 		for(VersionsDeletedFileRow row:rowsToDelete) {
 			VFSRevision revision = vfsRepositoryService.getRevision(new VFSRevisionRefImpl(row.getRevisionKey()));
 			vfsRepositoryService.deleteRevisions(getIdentity(), Collections.singletonList(revision));
+			doDelete(revision);
+		}
+	}
+	
+	private void doDelete(VFSRevision revision) {
+		VFSMetadata metadata = revision.getMetadata();
+		vfsRepositoryService.deleteRevisions(getIdentity(), Collections.singletonList(revision));
+		dbInstance.commit();
+		
+		if(metadata.isDeleted()) {
+			List<VFSRevision> revisions = vfsRepositoryService.getRevisions(metadata);
+			if(revisions.isEmpty()) {
+				VFSItem item = vfsRepositoryService.getItemFor(metadata);
+				if(item == null || !item.exists()) {
+					vfsRepositoryService.deleteMetadata(metadata);
+				}
+			}
 		}
 	}
 	
-- 
GitLab