From fbb0ee0ed9802522f9f63f5b39d0b0533250bb54 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Fri, 18 Oct 2019 20:27:05 +0200 Subject: [PATCH] OO-4310: make sure the deleted metadata are really deleted --- .../commons/services/vfs/manager/VFSMetadataDAO.java | 10 +++++++++- .../services/vfs/manager/VFSRepositoryServiceImpl.java | 2 +- .../services/vfs/model/VFSMetadataFileSaved.java | 10 ++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSMetadataDAO.java b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSMetadataDAO.java index 50c94678b08..8581d109fe7 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSMetadataDAO.java +++ b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSMetadataDAO.java @@ -288,8 +288,16 @@ public class VFSMetadataDAO { .executeUpdate(); } + /** + * Update existing files only. + * + * @param fileSize The new file size (mandatory) + * @param lastModified The modification date (mandatory) + * @param relativePath The path to the file + * @param filename The name of the file + */ public void updateMetadata(long fileSize, Date lastModified, String relativePath, String filename) { - String updateQuery = "update vfsmetadatafilesaved set fileLastModified=:lastModified, fileSize=:fileSize where filename=:filename and relativePath=:relativePath"; + String updateQuery = "update vfsmetadatafilesaved set fileLastModified=:lastModified, fileSize=:fileSize, deleted=false where filename=:filename and relativePath=:relativePath"; dbInstance.getCurrentEntityManager() .createQuery(updateQuery) .setParameter("filename", filename) diff --git a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java index 0ebb6f12870..e09c462d741 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java +++ b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java @@ -212,7 +212,7 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv VFSMetadata parent = getMetadataFor(file.getParentFile()); metadata = metadataDao.createMetadata(uuid, relativePath, filename, new Date(), size, directory, uri, "file", parent); - } else if(file.isFile() && file.length() != metadata.getFileSize()) { + } else if(file.isFile() && (file.length() != metadata.getFileSize() || !file.exists() != metadata.isDeleted())) { AsyncFileSizeUpdateEvent event = new AsyncFileSizeUpdateEvent(relativePath, filename); coordinatorManager.getCoordinator().getEventBus().fireEventToListenersOf(event, fileSizeSubscription); } diff --git a/src/main/java/org/olat/core/commons/services/vfs/model/VFSMetadataFileSaved.java b/src/main/java/org/olat/core/commons/services/vfs/model/VFSMetadataFileSaved.java index 5daac904964..3ff3ad65b1b 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/model/VFSMetadataFileSaved.java +++ b/src/main/java/org/olat/core/commons/services/vfs/model/VFSMetadataFileSaved.java @@ -51,6 +51,8 @@ public class VFSMetadataFileSaved implements Persistable { private Date fileLastModified; @Column(name="f_size", nullable=false, insertable=true, updatable=true) private long fileSize; + @Column(name="f_deleted", nullable=false, insertable=true, updatable=true) + private boolean deleted; @Column(name="f_filename", nullable=false, insertable=false, updatable=false) private String filename; @Column(name="f_relative_path", nullable=false, insertable=false, updatable=false) @@ -97,6 +99,14 @@ public class VFSMetadataFileSaved implements Persistable { this.relativePath = relativePath; } + public boolean isDeleted() { + return deleted; + } + + public void setDeleted(boolean deleted) { + this.deleted = deleted; + } + @Override public int hashCode() { return getKey().hashCode(); -- GitLab