docs/docs-core/src/main/java/com/sismics/docs/core/listener/async/FileDeletedAsyncListener.java

66 lines
2.1 KiB
Java
Raw Normal View History

package com.sismics.docs.core.listener.async;
2018-04-11 11:27:55 +02:00
import com.google.common.eventbus.AllowConcurrentEvents;
import com.google.common.eventbus.Subscribe;
2023-09-14 16:50:39 +02:00
import com.sismics.docs.core.dao.UserDao;
import com.sismics.docs.core.event.FileDeletedAsyncEvent;
2018-03-29 17:59:47 +02:00
import com.sismics.docs.core.model.context.AppContext;
2023-09-14 16:50:39 +02:00
import com.sismics.docs.core.model.jpa.File;
import com.sismics.docs.core.model.jpa.User;
import com.sismics.docs.core.util.FileUtil;
2018-03-31 13:22:59 +02:00
import com.sismics.docs.core.util.TransactionUtil;
2018-03-12 11:43:11 +01:00
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Listener on file deleted.
2023-09-14 16:50:39 +02:00
*
* @author bgamard
*/
public class FileDeletedAsyncListener {
/**
* Logger.
*/
private static final Logger log = LoggerFactory.getLogger(FileDeletedAsyncListener.class);
/**
* File deleted.
2023-09-14 16:50:39 +02:00
*
2018-03-31 13:22:59 +02:00
* @param event File deleted event
2018-03-12 11:43:11 +01:00
* @throws Exception e
*/
@Subscribe
2018-04-11 11:27:55 +02:00
@AllowConcurrentEvents
2018-03-31 13:22:59 +02:00
public void on(final FileDeletedAsyncEvent event) throws Exception {
if (log.isInfoEnabled()) {
2018-03-31 13:22:59 +02:00
log.info("File deleted event: " + event.toString());
}
2023-09-14 16:50:39 +02:00
TransactionUtil.handle(() -> {
// Update the user quota
UserDao userDao = new UserDao();
User user = userDao.getById(event.getUserId());
if (user != null) {
Long fileSize = event.getFileSize();
if (fileSize.equals(File.UNKNOWN_SIZE)) {
// The file size was not in the database, in this case we need to get from the unencrypted size.
fileSize = FileUtil.getFileSize(event.getFileId(), user);
}
if (! fileSize.equals(File.UNKNOWN_SIZE)) {
user.setStorageCurrent(user.getStorageCurrent() - fileSize);
userDao.updateQuota(user);
}
}
});
// Delete the file from storage
FileUtil.delete(event.getFileId());
2018-03-31 13:22:59 +02:00
TransactionUtil.handle(() -> {
// Update index
AppContext.getInstance().getIndexingHandler().deleteDocument(event.getFileId());
2018-03-31 13:22:59 +02:00
});
}
}