From d720308c4f588e31b53dc4230dd41b8210d98641 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Tue, 14 Jan 2020 14:00:13 +0100 Subject: [PATCH] OO-4375: remove metadata if last revision is deleted Remove the file metadata if its last revision is deleted and the file doesn't exist --- .../vfs/ui/version/VFSTrashController.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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 59821e12874..740885d1cf4 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; /** @@ -210,7 +211,23 @@ public class VFSTrashController extends FormBasicController implements ProgressD private void doDelete(List<VersionsDeletedFileRow> rowsToDelete) { 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