1
0
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:
Benjamin Gamard
2018-04-09 13:02:39 +02:00
parent 6d35020840
commit d0335b6b16
8 changed files with 90 additions and 76 deletions

View File

@@ -14,5 +14,10 @@ public enum ActionType {
/**
* Remove a tag.
*/
REMOVE_TAG
REMOVE_TAG,
/**
* Process files.
*/
PROCESS_FILES
}

View File

@@ -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;

View File

@@ -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.

View File

@@ -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
}
}