mirror of
https://github.com/sismics/docs.git
synced 2025-12-14 18:26:17 +00:00
Closes #206: action to process all files
This commit is contained in:
@@ -14,5 +14,10 @@ public enum ActionType {
|
||||
/**
|
||||
* Remove a tag.
|
||||
*/
|
||||
REMOVE_TAG
|
||||
REMOVE_TAG,
|
||||
|
||||
/**
|
||||
* Process files.
|
||||
*/
|
||||
PROCESS_FILES
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.sismics.docs.core.constant.ActionType;
|
||||
import com.sismics.docs.core.dao.dto.DocumentDto;
|
||||
import com.sismics.docs.core.util.action.Action;
|
||||
import com.sismics.docs.core.util.action.AddTagAction;
|
||||
import com.sismics.docs.core.util.action.ProcessFilesAction;
|
||||
import com.sismics.docs.core.util.action.RemoveTagAction;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -36,6 +37,9 @@ public class ActionUtil {
|
||||
case REMOVE_TAG:
|
||||
action = new RemoveTagAction();
|
||||
break;
|
||||
case PROCESS_FILES:
|
||||
action = new ProcessFilesAction();
|
||||
break;
|
||||
default:
|
||||
log.error("Action type not handled: " + actionType);
|
||||
break;
|
||||
|
||||
@@ -39,7 +39,7 @@ public class FileUtil {
|
||||
/**
|
||||
* File ID of files currently being processed.
|
||||
*/
|
||||
private static Set<String> processingFileSet = Collections.synchronizedSet(new HashSet<String>());
|
||||
private static Set<String> processingFileSet = Collections.synchronizedSet(new HashSet<>());
|
||||
|
||||
/**
|
||||
* Optical character recognition on an image.
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package com.sismics.docs.core.util.action;
|
||||
|
||||
import com.sismics.docs.core.dao.FileDao;
|
||||
import com.sismics.docs.core.dao.UserDao;
|
||||
import com.sismics.docs.core.dao.dto.DocumentDto;
|
||||
import com.sismics.docs.core.event.FileUpdatedAsyncEvent;
|
||||
import com.sismics.docs.core.model.jpa.File;
|
||||
import com.sismics.docs.core.model.jpa.User;
|
||||
import com.sismics.docs.core.util.DirectoryUtil;
|
||||
import com.sismics.docs.core.util.EncryptionUtil;
|
||||
import com.sismics.docs.core.util.FileUtil;
|
||||
import com.sismics.util.context.ThreadLocalContext;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.json.JsonObject;
|
||||
import java.nio.file.Path;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Action to process all files.
|
||||
*
|
||||
* @author bgamard
|
||||
*/
|
||||
public class ProcessFilesAction implements Action {
|
||||
/**
|
||||
* Logger.
|
||||
*/
|
||||
private static final Logger log = LoggerFactory.getLogger(ProcessFilesAction.class);
|
||||
|
||||
@Override
|
||||
public void execute(DocumentDto documentDto, JsonObject action) {
|
||||
FileDao fileDao = new FileDao();
|
||||
List<File> fileList = fileDao.getByDocumentId(null, documentDto.getId());
|
||||
|
||||
try {
|
||||
for (File file : fileList) {
|
||||
// Get the creating user
|
||||
UserDao userDao = new UserDao();
|
||||
User user = userDao.getById(file.getUserId());
|
||||
|
||||
// Decrypt the file
|
||||
Path storedFile = DirectoryUtil.getStorageDirectory().resolve(file.getId());
|
||||
Path unencryptedFile = EncryptionUtil.decryptFile(storedFile, user.getPrivateKey());
|
||||
|
||||
// Start the asynchronous processing
|
||||
FileUtil.startProcessingFile(file.getId());
|
||||
FileUpdatedAsyncEvent event = new FileUpdatedAsyncEvent();
|
||||
event.setUserId("admin");
|
||||
event.setLanguage(documentDto.getLanguage());
|
||||
event.setFile(file);
|
||||
event.setUnencryptedFile(unencryptedFile);
|
||||
ThreadLocalContext.get().addAsyncEvent(event);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("Error processing a file", e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validate(JsonObject action) {
|
||||
// No parameter, so always OK
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user