diff --git a/redaction-service-v1/redaction-service-api-v1/pom.xml b/redaction-service-v1/redaction-service-api-v1/pom.xml index 673abe7a..0b808449 100644 --- a/redaction-service-v1/redaction-service-api-v1/pom.xml +++ b/redaction-service-v1/redaction-service-api-v1/pom.xml @@ -12,7 +12,7 @@ redaction-service-api-v1 - 1.23.0 + 1.32.0 diff --git a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/AnalyzeRequest.java b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/AnalyzeRequest.java index 4f5c009b..33a1dcac 100644 --- a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/AnalyzeRequest.java +++ b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/AnalyzeRequest.java @@ -1,19 +1,18 @@ package com.iqser.red.service.redaction.v1.model; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImportedAnnotation; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; +import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + @Data @Builder @NoArgsConstructor @@ -37,8 +36,5 @@ public class AnalyzeRequest { @Builder.Default private List fileAttributes = new ArrayList<>(); - @Builder.Default - List importedAnnotations = new ArrayList<>(); - } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/AnalyzeService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/AnalyzeService.java index fef1d67f..5b3b26bd 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/AnalyzeService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/AnalyzeService.java @@ -1,34 +1,54 @@ package com.iqser.red.service.redaction.v1.server.redaction.service; +import static com.iqser.red.service.redaction.v1.server.redaction.service.ImportedRedactionService.IMPORTED_REDACTION_TYPE; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.kie.api.runtime.KieContainer; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.RequestBody; + import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions; import com.iqser.red.service.persistence.service.v1.api.model.annotations.entitymapped.IdRemoval; import com.iqser.red.service.persistence.service.v1.api.model.annotations.entitymapped.ManualForceRedaction; import com.iqser.red.service.persistence.service.v1.api.model.annotations.entitymapped.ManualImageRecategorization; import com.iqser.red.service.persistence.service.v1.api.model.annotations.entitymapped.ManualLegalBasisChange; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; -import com.iqser.red.service.redaction.v1.model.*; +import com.iqser.red.service.redaction.v1.model.AnalyzeRequest; +import com.iqser.red.service.redaction.v1.model.AnalyzeResult; +import com.iqser.red.service.redaction.v1.model.Rectangle; +import com.iqser.red.service.redaction.v1.model.RedactionLog; +import com.iqser.red.service.redaction.v1.model.RedactionLogEntry; +import com.iqser.red.service.redaction.v1.model.SectionArea; +import com.iqser.red.service.redaction.v1.model.SectionGrid; +import com.iqser.red.service.redaction.v1.model.StructureAnalyzeRequest; import com.iqser.red.service.redaction.v1.server.classification.model.Document; import com.iqser.red.service.redaction.v1.server.classification.model.SectionText; import com.iqser.red.service.redaction.v1.server.classification.model.Text; import com.iqser.red.service.redaction.v1.server.client.LegalBasisClient; import com.iqser.red.service.redaction.v1.server.exception.RedactionException; import com.iqser.red.service.redaction.v1.server.redaction.model.Dictionary; -import com.iqser.red.service.redaction.v1.server.redaction.model.*; +import com.iqser.red.service.redaction.v1.server.redaction.model.DictionaryIncrement; +import com.iqser.red.service.redaction.v1.server.redaction.model.DictionaryVersion; +import com.iqser.red.service.redaction.v1.server.redaction.model.Image; +import com.iqser.red.service.redaction.v1.server.redaction.model.PageEntities; +import com.iqser.red.service.redaction.v1.server.redaction.model.PdfImage; +import com.iqser.red.service.redaction.v1.server.redaction.model.RedRectangle2D; import com.iqser.red.service.redaction.v1.server.redaction.utils.EntitySearchUtils; import com.iqser.red.service.redaction.v1.server.segmentation.ImageService; import com.iqser.red.service.redaction.v1.server.segmentation.PdfSegmentationService; import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; + import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; -import org.kie.api.runtime.KieContainer; -import org.springframework.stereotype.Service; -import org.springframework.web.bind.annotation.RequestBody; - -import java.util.*; -import java.util.stream.Collectors; -import java.util.stream.Stream; @Slf4j @Service @@ -60,8 +80,7 @@ public class AnalyzeService { try { - var storedObjectStream = redactionStorageService.getStoredObject(RedactionStorageService.StorageIdUtils.getStorageId(analyzeRequest - .getDossierId(), analyzeRequest.getFileId(), FileType.ORIGIN)); + var storedObjectStream = redactionStorageService.getStoredObject(RedactionStorageService.StorageIdUtils.getStorageId(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), FileType.ORIGIN)); Map> pdfImages = null; if (redactionServiceSettings.isEnableImageClassification()) { @@ -79,15 +98,15 @@ public class AnalyzeService { Text text = new Text(pageCount, sectionTexts); // enhance section grid with headline data - sectionTexts.forEach(sectionText -> classifiedDoc - .getSectionGrid().getSections().add(new SectionGrid.SectionGridSection(sectionText.getSectionNumber(), - sectionText.getHeadline(), - sectionText.getSectionAreas().stream().map(SectionArea::getPage).collect(Collectors.toSet()), - sectionText.getSectionAreas()))); + sectionTexts.forEach(sectionText -> classifiedDoc.getSectionGrid() + .getSections() + .add(new SectionGrid.SectionGridSection(sectionText.getSectionNumber(), sectionText.getHeadline(), sectionText.getSectionAreas() + .stream() + .map(SectionArea::getPage) + .collect(Collectors.toSet()), sectionText.getSectionAreas()))); redactionStorageService.storeObject(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), FileType.TEXT, text); - redactionStorageService.storeObject(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), FileType.SECTION_GRID, classifiedDoc - .getSectionGrid()); + redactionStorageService.storeObject(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), FileType.SECTION_GRID, classifiedDoc.getSectionGrid()); log.info("Document structure analysis successful, took: {}", System.currentTimeMillis() - startTime); } @@ -107,22 +126,22 @@ public class AnalyzeService { dictionaryService.updateDictionary(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId()); KieContainer kieContainer = droolsExecutionService.updateRules(analyzeRequest.getDossierTemplateId()); long rulesVersion = droolsExecutionService.getRulesVersion(analyzeRequest.getDossierTemplateId()); - Dictionary dictionary = dictionaryService.getDeepCopyDictionary(analyzeRequest.getDossierTemplateId(), analyzeRequest - .getDossierId()); + Dictionary dictionary = dictionaryService.getDeepCopyDictionary(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId()); PageEntities pageEntities = entityRedactionService.findEntities(dictionary, text.getSectionTexts(), kieContainer, analyzeRequest, nerEntities); dictionaryService.updateExternalDictionary(dictionary, analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId()); - List redactionLogEntries = redactionLogCreatorService.createRedactionLog(pageEntities, text.getNumberOfPages(), analyzeRequest - .getDossierTemplateId()); + List redactionLogEntries = redactionLogCreatorService.createRedactionLog(pageEntities, text.getNumberOfPages(), analyzeRequest.getDossierTemplateId()); var legalBasis = legalBasisClient.getLegalBasisMapping(analyzeRequest.getDossierTemplateId()); - var redactionLog = new RedactionLog(redactionServiceSettings.getAnalysisVersion(), analyzeRequest.getAnalysisNumber(), - redactionLogEntries, legalBasis, dictionary.getVersion().getDossierTemplateVersion(), dictionary.getVersion().getDossierVersion(), - rulesVersion, legalBasisClient.getVersion(analyzeRequest.getDossierTemplateId())); + var redactionLog = new RedactionLog(redactionServiceSettings.getAnalysisVersion(), analyzeRequest.getAnalysisNumber(), redactionLogEntries, legalBasis, dictionary.getVersion() + .getDossierTemplateVersion(), dictionary.getVersion() + .getDossierVersion(), rulesVersion, legalBasisClient.getVersion(analyzeRequest.getDossierTemplateId())); + + var importedRedactionFilteredEntries = importedRedactionService.processImportedRedactions(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId(), analyzeRequest.getFileId(), redactionLog.getRedactionLogEntry(), true); + redactionLog.setRedactionLogEntry(importedRedactionFilteredEntries); - importedRedactionService.processImportedRedactions(redactionLog, analyzeRequest.getImportedAnnotations(), analyzeRequest.getDossierTemplateId()); return finalizeAnalysis(analyzeRequest, startTime, redactionLog, text, dictionary.getVersion(), false); } @@ -140,8 +159,7 @@ public class AnalyzeService { return analyze(analyzeRequest); } - DictionaryIncrement dictionaryIncrement = dictionaryService.getDictionaryIncrements(analyzeRequest.getDossierTemplateId(), new DictionaryVersion(redactionLog - .getDictionaryVersion(), redactionLog.getDossierDictionaryVersion()), analyzeRequest.getDossierId()); + DictionaryIncrement dictionaryIncrement = dictionaryService.getDictionaryIncrements(analyzeRequest.getDossierTemplateId(), new DictionaryVersion(redactionLog.getDictionaryVersion(), redactionLog.getDossierDictionaryVersion()), analyzeRequest.getDossierId()); Set sectionsToReanalyse = !analyzeRequest.getSectionsToReanalyse() .isEmpty() ? analyzeRequest.getSectionsToReanalyse() : findSectionsToReanalyse(dictionaryIncrement, redactionLog, text, analyzeRequest); @@ -163,16 +181,16 @@ public class AnalyzeService { KieContainer kieContainer = droolsExecutionService.updateRules(analyzeRequest.getDossierTemplateId()); - Dictionary dictionary = dictionaryService.getDeepCopyDictionary(analyzeRequest.getDossierTemplateId(), analyzeRequest - .getDossierId()); + Dictionary dictionary = dictionaryService.getDeepCopyDictionary(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId()); PageEntities pageEntities = entityRedactionService.findEntities(dictionary, reanalysisSections, kieContainer, analyzeRequest, nerEntities); - var newRedactionLogEntries = redactionLogCreatorService.createRedactionLog(pageEntities, text.getNumberOfPages(), analyzeRequest - .getDossierTemplateId()); + var newRedactionLogEntries = redactionLogCreatorService.createRedactionLog(pageEntities, text.getNumberOfPages(), analyzeRequest.getDossierTemplateId()); + + var importedRedactionFilteredEntries = importedRedactionService.processImportedRedactions(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId(), analyzeRequest.getFileId(), newRedactionLogEntries, false); + + redactionLog.getRedactionLogEntry().removeIf(entry -> sectionsToReanalyse.contains(entry.getSectionNumber()) && !entry.getType().equals(IMPORTED_REDACTION_TYPE)); + redactionLog.getRedactionLogEntry().addAll(importedRedactionFilteredEntries); - redactionLog.getRedactionLogEntry().removeIf(entry -> sectionsToReanalyse.contains(entry.getSectionNumber())); - redactionLog.getRedactionLogEntry().addAll(newRedactionLogEntries); - importedRedactionService.processImportedRedactions(redactionLog, analyzeRequest.getImportedAnnotations(), analyzeRequest.getDossierTemplateId()); return finalizeAnalysis(analyzeRequest, startTime, redactionLog, text, dictionaryIncrement.getDictionaryVersion(), true); } @@ -217,10 +235,8 @@ public class AnalyzeService { excludeExcludedPages(redactionLog, analyzeRequest.getExcludedPages()); - var redactionLogChange = redactionChangeLogService.computeChanges(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), - redactionLog, analyzeRequest.getAnalysisNumber()); - redactionStorageService.storeObject(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), FileType.REDACTION_LOG, redactionLogChange - .getRedactionLog()); + var redactionLogChange = redactionChangeLogService.computeChanges(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), redactionLog, analyzeRequest.getAnalysisNumber()); + redactionStorageService.storeObject(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), FileType.REDACTION_LOG, redactionLogChange.getRedactionLog()); long duration = System.currentTimeMillis() - startTime; @@ -249,13 +265,14 @@ public class AnalyzeService { } return Stream.concat(manualRedactions.getLegalBasisChanges() - .stream() - .map(ManualLegalBasisChange::getAnnotationId), Stream.concat(manualRedactions.getImageRecategorization() - .stream() - .map(ManualImageRecategorization::getAnnotationId), Stream.concat(manualRedactions.getIdsToRemove() - .stream() - .map(IdRemoval::getAnnotationId), manualRedactions.getForceRedactions().stream().map(ManualForceRedaction::getAnnotationId)))) - .collect(Collectors.toSet()); + .stream() + .map(ManualLegalBasisChange::getAnnotationId), Stream.concat(manualRedactions.getImageRecategorization() + .stream() + .map(ManualImageRecategorization::getAnnotationId), Stream.concat(manualRedactions.getIdsToRemove() + .stream() + .map(IdRemoval::getAnnotationId), manualRedactions.getForceRedactions() + .stream() + .map(ManualForceRedaction::getAnnotationId)))).collect(Collectors.toSet()); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java index 7280d0e5..19c552cd 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java @@ -2,16 +2,14 @@ package com.iqser.red.service.redaction.v1.server.redaction.service; import java.util.Iterator; import java.util.List; -import java.util.stream.Collectors; import org.springframework.stereotype.Service; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImportedAnnotation; -import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImportedAnnotationStatus; -import com.iqser.red.service.redaction.v1.model.Point; +import com.iqser.red.service.redaction.v1.model.ImportedRedaction; +import com.iqser.red.service.redaction.v1.model.ImportedRedactions; import com.iqser.red.service.redaction.v1.model.Rectangle; -import com.iqser.red.service.redaction.v1.model.RedactionLog; import com.iqser.red.service.redaction.v1.model.RedactionLogEntry; +import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; import lombok.RequiredArgsConstructor; @@ -19,80 +17,85 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class ImportedRedactionService { + public static final String IMPORTED_REDACTION_TYPE = "imported_redaction"; + private final DictionaryService dictionaryService; + private final RedactionStorageService redactionStorageService; - public void processImportedRedactions(RedactionLog redactionLog, List importedAnnotations, String dossierTemplateId) { - Iterator itty = redactionLog.getRedactionLogEntry().iterator(); - while (itty.hasNext()) { - RedactionLogEntry redactionLogEntry = itty.next(); - boolean mustBeRemoved = false; + public List processImportedRedactions(String dossierTemplateId, String dossierId, String fileId, + List redactionLogEntries, boolean addImportedRedactions) { - if (redactionLogEntry.getType().equals("imported_redaction")) { - itty.remove(); - continue; + var importedRedactions = redactionStorageService.getImportedRedactions(dossierId, fileId); + if (importedRedactions == null) { + return redactionLogEntries; + } + + redactionLogEntries.removeIf(redactionLogEntry -> hasIntersections(redactionLogEntry, importedRedactions)); + + if (addImportedRedactions) { + return addImportedRedactionsRedactionLogEntries(dossierTemplateId, redactionLogEntries, importedRedactions); + } + + return redactionLogEntries; + } + + + private List addImportedRedactionsRedactionLogEntries(String dossierTemplateId, + List redactionLogEntries, + ImportedRedactions importedRedactions) { + + for (List importedRedactionsValues : importedRedactions.getImportedRedactions().values()) { + for (ImportedRedaction importedRedaction : importedRedactionsValues) { + RedactionLogEntry redactionLogEntry = RedactionLogEntry.builder() + .id(importedRedaction.getId()) + .type(IMPORTED_REDACTION_TYPE) + .redacted(true) + .positions(importedRedaction.getPositions()) + .color(getColor("imported_redaction", dossierTemplateId)) + .build(); + + redactionLogEntries.add(redactionLogEntry); } + } - loop: - for (ImportedAnnotation importedAnnotation : importedAnnotations) { - for (com.iqser.red.service.persistence.service.v1.api.model.annotations.Rectangle importedPosition : importedAnnotation.getPositions()) { - for (Rectangle rectangle : redactionLogEntry.getPositions()) { - if (intersects(importedPosition, rectangle)) { - mustBeRemoved = true; - break loop; + return redactionLogEntries; + } + + + private boolean hasIntersections(RedactionLogEntry redactionLogEntry, ImportedRedactions importedRedactions) { + + for (Rectangle rectangle : redactionLogEntry.getPositions()) { + if (importedRedactions.getImportedRedactions().containsKey(rectangle.getPage())) { + var importedRedactionsOnPage = importedRedactions.getImportedRedactions().get(rectangle.getPage()); + for (ImportedRedaction importedRedaction : importedRedactionsOnPage) { + for (Rectangle importedRedactionPosition : importedRedaction.getPositions()) { + if (intersects(importedRedactionPosition, rectangle)) { + return true; } } } } - if (mustBeRemoved) { - itty.remove(); - } - } - - for (ImportedAnnotation importedAnnotation : importedAnnotations) { - RedactionLogEntry redactionLogEntry = RedactionLogEntry.builder() - .id(importedAnnotation.getAnnotationId()) - .type("imported_redaction") - .redacted(importedAnnotation.getStatus().equals(ImportedAnnotationStatus.DECLINED) ? false : true) - .positions(importedAnnotation.getPositions() - .stream() - .map(this::convert) - .collect(Collectors.toList())) - .color(getColor("imported_redaction", dossierTemplateId, importedAnnotation.getStatus().equals(ImportedAnnotationStatus.DECLINED) ? false : true)) - .build(); - - redactionLog.getRedactionLogEntry().add(redactionLogEntry); } + return false; } - public Rectangle convert( - com.iqser.red.service.persistence.service.v1.api.model.annotations.Rectangle importedPosition) { + private boolean intersects(Rectangle importedPosition, Rectangle redactionLogPosition) { - return new Rectangle(new Point(importedPosition.getTopLeftX(), importedPosition.getTopLeftY()), importedPosition.getWidth(), importedPosition.getHeight(), importedPosition.getPage()); + return redactionLogPosition.getTopLeft() + .getX() + redactionLogPosition.getWidth() > importedPosition.getTopLeft() + .getX() && redactionLogPosition.getTopLeft() + .getY() + redactionLogPosition.getHeight() > importedPosition.getTopLeft() + .getY() && redactionLogPosition.getTopLeft().getX() < importedPosition.getTopLeft() + .getX() + importedPosition.getWidth() && redactionLogPosition.getTopLeft() + .getY() < importedPosition.getTopLeft().getY() + importedPosition.getHeight(); } - public boolean intersects( - com.iqser.red.service.persistence.service.v1.api.model.annotations.Rectangle importedPosition, - Rectangle redactionLogPosition) { + private float[] getColor(String type, String dossierTemplateId) { - return importedPosition.getPage() == redactionLogPosition.getPage() && redactionLogPosition.getTopLeft() - .getX() + redactionLogPosition.getWidth() > importedPosition.getTopLeftX() && redactionLogPosition.getTopLeft() - .getY() + redactionLogPosition.getHeight() > importedPosition.getTopLeftY() && redactionLogPosition.getTopLeft() - .getX() < importedPosition.getTopLeftX() + importedPosition.getWidth() && redactionLogPosition.getTopLeft() - .getY() < importedPosition.getTopLeftY() + importedPosition.getHeight(); - } - - - private float[] getColor(String type, String dossierTemplateId, boolean isRedaction) { - - if (!isRedaction) { - return dictionaryService.getNotRedactedColor(dossierTemplateId); - } return dictionaryService.getColor(type, dossierTemplateId); } - - } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java index b66add64..388a550a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType; +import com.iqser.red.service.redaction.v1.model.ImportedRedactions; import com.iqser.red.service.redaction.v1.model.RedactionLog; import com.iqser.red.service.redaction.v1.model.SectionGrid; import com.iqser.red.service.redaction.v1.server.classification.model.Text; @@ -44,6 +45,24 @@ public class RedactionStorageService { } + public ImportedRedactions getImportedRedactions(String dossierId, String fileId) { + + InputStreamResource inputStreamResource; + try { + inputStreamResource = storageService.getObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.IMPORTED_REDACTIONS)); + } catch (StorageObjectDoesNotExist e) { + log.debug("Imported redactions not available."); + return null; + } + + try { + return objectMapper.readValue(inputStreamResource.getInputStream(), ImportedRedactions.class); + } catch (IOException e) { + throw new RuntimeException("Could not imported redactions", e); + } + } + + public RedactionLog getRedactionLog(String dossierId, String fileId) { InputStreamResource inputStreamResource; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java index 916d444c..4b0133f0 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java @@ -1576,12 +1576,12 @@ public class RedactionIntegrationTest { public void testImportedRedactions() throws IOException { String outputFileName = OsUtils.getTemporaryDirectory() + "/Annotated.pdf"; - ClassPathResource pdfFileResource = new ClassPathResource("files/ImportedRedactions/S13.pdf"); - ClassPathResource importedRedactions = new ClassPathResource("files/ImportedRedactions/S13.json"); - List importedAnnotations = objectMapper.readValue(importedRedactions.getInputStream().readAllBytes(), new TypeReference>() { - }); + ClassPathResource pdfFileResource = new ClassPathResource("files/ImportedRedactions/ImportedRedactions.pdf"); + ClassPathResource importedRedactions = new ClassPathResource("files/ImportedRedactions/ImportedRedactions.json"); + + AnalyzeRequest request = prepareStorage(pdfFileResource.getInputStream()); - request.setImportedAnnotations(importedAnnotations); + storageService.storeObject(RedactionStorageService.StorageIdUtils.getStorageId(TEST_DOSSIER_ID, TEST_FILE_ID, FileType.IMPORTED_REDACTIONS), IOUtils.toByteArray(importedRedactions.getInputStream())); analyzeService.analyzeDocumentStructure(new StructureAnalyzeRequest(request.getDossierId(), request.getFileId())); AnalyzeResult result = analyzeService.analyze(request); diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/ImportedRedactions/ImportedRedactions.json b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/ImportedRedactions/ImportedRedactions.json new file mode 100644 index 00000000..c1289bff --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/ImportedRedactions/ImportedRedactions.json @@ -0,0 +1 @@ +{"importedRedactions":{"1":[{"id":"755273b5ddc6933eff7f6b6e055c803f","positions":[{"topLeft":{"x":275.0,"y":520.504},"width":55.675,"height":15.582,"page":1}]},{"id":"5e517d2c890272fc140578a26971b459","positions":[{"topLeft":{"x":164.0,"y":316.492},"width":50.7,"height":15.658,"page":1},{"topLeft":{"x":127.0,"y":302.613},"width":119.675,"height":14.902,"page":1},{"topLeft":{"x":81.0,"y":289.622},"width":210.025,"height":14.846,"page":1},{"topLeft":{"x":136.0,"y":275.912},"width":94.2,"height":13.033,"page":1},{"topLeft":{"x":158.0,"y":261.402},"width":52.793,"height":16.218,"page":1},{"topLeft":{"x":177.0,"y":247.413},"width":15.507,"height":16.148,"page":1}]}]}} \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/ImportedRedactions/ImportedRedactions.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/ImportedRedactions/ImportedRedactions.pdf new file mode 100644 index 00000000..43afe3eb Binary files /dev/null and b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/ImportedRedactions/ImportedRedactions.pdf differ diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/ImportedRedactions/S13.json b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/ImportedRedactions/S13.json deleted file mode 100644 index 7341de2f..00000000 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/ImportedRedactions/S13.json +++ /dev/null @@ -1,121 +0,0 @@ -[ - { - "annotationId": "6113d300d4a5cd7e0e91ef692e046fc5", - "fileId": "536bfa2d5ef9aecedda09e300a37cd81", - "positions": [ - { - "topLeftX": 147.86, - "topLeftY": 519.11, - "width": 122.496, - "height": 11.018, - "page": 1 - } - ], - "status": "NEW", - "user": null, - "comment": null, - "processedDate": null - }, - { - "annotationId": "04d043c73922f6e0dc50a1c7484e9425", - "fileId": "536bfa2d5ef9aecedda09e300a37cd81", - "positions": [ - { - "topLeftX": 147.86, - "topLeftY": 544.43, - "width": 83.414, - "height": 11.018, - "page": 1 - } - ], - "status": "NEW", - "user": null, - "comment": null, - "processedDate": null - }, - { - "annotationId": "83f5f2cbe55f2acbbf7adc479cf694cb", - "fileId": "536bfa2d5ef9aecedda09e300a37cd81", - "positions": [ - { - "topLeftX": 147.86, - "topLeftY": 557.03, - "width": 57.624, - "height": 11.018, - "page": 1 - } - ], - "status": "NEW", - "user": null, - "comment": null, - "processedDate": null - }, - { - "annotationId": "4bacdb3675c46181c75295fe8c6e6562", - "fileId": "536bfa2d5ef9aecedda09e300a37cd81", - "positions": [ - { - "topLeftX": 147.86, - "topLeftY": 531.83, - "width": 83.414, - "height": 11.018, - "page": 1 - } - ], - "status": "NEW", - "user": null, - "comment": null, - "processedDate": null - }, - { - "annotationId": "8db925e788f2ab1c9ded097a9de10111", - "fileId": "536bfa2d5ef9aecedda09e300a37cd81", - "positions": [ - { - "topLeftX": 148.94, - "topLeftY": 317.49, - "width": 141.263, - "height": 11.018, - "page": 1 - } - ], - "status": "NEW", - "user": null, - "comment": null, - "processedDate": null - }, - { - "annotationId": "a4d2f29216efe7507bf97d2e55010dd4", - "fileId": "536bfa2d5ef9aecedda09e300a37cd81", - "positions": [ - { - "topLeftX": 148.94, - "topLeftY": 342.81, - "width": 94.389, - "height": 11.018, - "page": 1 - } - ], - "status": "NEW", - "user": null, - "comment": null, - "processedDate": null - }, - { - "annotationId": "9983b5000e8f3540a402178f91b3a2e2", - "fileId": "536bfa2d5ef9aecedda09e300a37cd81", - "positions": [ - { - "topLeftX": 148.94, - "topLeftY": 330.21, - "width": 94.332, - "height": 11.018, - "page": 1 - } - ], - "status": "APPROVED", - "user": "its a me", - "comment": "First Test", - "processedDate": "2022-01-27T12:57:25.48Z" - } -] \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/ImportedRedactions/S13.pdf b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/ImportedRedactions/S13.pdf deleted file mode 100644 index 4e3d2969..00000000 Binary files a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/ImportedRedactions/S13.pdf and /dev/null differ