From fb9838054326d910d659b84517d4505a01ba40d6 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 5 Jan 2023 14:08:54 +0100 Subject: [PATCH] RED-5608: Ocr is only possible for processed files --- .../server/controller/ReanalysisController.java | 16 +++++++++++++++- .../server/integration/tests/ReanalysisTest.java | 14 +++++++++++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java index 51538c330..0f4daaace 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java @@ -28,6 +28,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.service.v1.api.model.annotations.DeleteImportedRedactionsRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.persistence.service.v1.api.resources.ReanalysisResource; @@ -72,6 +73,7 @@ public class ReanalysisController implements ReanalysisResource { relevantFiles.stream() .filter(fileStatus -> fileStatus.getOcrStartTime() == null) + .filter(fileStatus -> fileStatus.getProcessingStatus().equals(ProcessingStatus.PROCESSED)) .forEach(fileStatus -> fileStatusService.setStatusOcrQueued(dossierId, fileStatus.getId())); } @@ -80,6 +82,12 @@ public class ReanalysisController implements ReanalysisResource { var relevantFiles = getRelevantFiles(dossierId, fileIds); + if (relevantFiles.stream() + .anyMatch(fileStatus -> !fileStatus.getProcessingStatus().equals(ProcessingStatus.PROCESSED) && !fileStatus.getProcessingStatus() + .equals(ProcessingStatus.OCR_PROCESSING_QUEUED) && !fileStatus.getProcessingStatus().equals(ProcessingStatus.OCR_PROCESSING))) { + throw new ConflictException("File is not processed"); + } + relevantFiles.stream() .filter(fileStatus -> fileStatus.getOcrStartTime() == null) .forEach(fileStatus -> fileStatusService.setStatusOcrQueued(dossierId, fileStatus.getId())); @@ -91,17 +99,23 @@ public class ReanalysisController implements ReanalysisResource { @RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force) { dossierPersistenceService.getAndValidateDossier(dossierId); + FileModel dossierFile = fileStatusService.getStatus(fileId); + + if (!dossierFile.getProcessingStatus().equals(ProcessingStatus.PROCESSED) && !dossierFile.getProcessingStatus() + .equals(ProcessingStatus.OCR_PROCESSING_QUEUED) && !dossierFile.getProcessingStatus().equals(ProcessingStatus.OCR_PROCESSING)) { + throw new ConflictException("File is not processed"); + } if (force) { fileStatusService.setStatusOcrQueued(dossierId, fileId); } else { - FileModel dossierFile = fileStatusService.getStatus(fileId); if (dossierFile.isSoftOrHardDeleted() || dossierFile.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) { throw new ConflictException("Cannot analyse a deleted/approved file"); } if (dossierFile.getOcrStartTime() != null) { throw new ConflictException("File already has been OCR processed"); } + ocrFiles(dossierId, Sets.newHashSet(fileId)); } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java index d2f5b4b89..b75de107c 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java @@ -42,8 +42,16 @@ public class ReanalysisTest extends AbstractPersistenceServerServiceTest { var file = fileTesterAndProvider.testAndProvideFile(dossier); - reanalysisClient.ocrDossier(dossier.getId()); var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isNotEqualTo(ProcessingStatus.PROCESSED); + + reanalysisClient.ocrDossier(dossier.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(loadedFile.getProcessingStatus()).isNotEqualTo(ProcessingStatus.PROCESSED); + resetProcessingStatus(file); + + reanalysisClient.ocrDossier(dossier.getId()); + loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.OCR_PROCESSING_QUEUED); resetProcessingStatus(file); @@ -77,13 +85,13 @@ public class ReanalysisTest extends AbstractPersistenceServerServiceTest { fileRepository.findById(file.getId()).ifPresent(savedFile -> { savedFile.setOcrStartTime(null); - savedFile.setProcessingStatus(ProcessingStatus.UNPROCESSED); + savedFile.setProcessingStatus(ProcessingStatus.PROCESSED); fileRepository.save(savedFile); }); var loadedFile = fileClient.getFileStatus(file.getDossierId(), file.getId()); - assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.UNPROCESSED); + assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSED); } }