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