From ee687e42b5869b8056464cc89ef0fb5a02a2cb7e Mon Sep 17 00:00:00 2001 From: Maverick Studer Date: Tue, 12 Nov 2024 11:02:06 +0100 Subject: [PATCH] RED-10444: Update Value/Classification for bulk-local rectangle redactions --- .../controller/ManualRedactionController.java | 141 ++++++++---------- .../tests/ManualRedactionTest.java | 2 + 2 files changed, 63 insertions(+), 80 deletions(-) diff --git a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ManualRedactionController.java b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ManualRedactionController.java index ad08adc72..69dd37d35 100644 --- a/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ManualRedactionController.java +++ b/persistence-service-v1/persistence-service-external-api-impl-v1/src/main/java/com/iqser/red/persistence/service/v1/external/api/impl/controller/ManualRedactionController.java @@ -8,6 +8,7 @@ import static com.iqser.red.service.persistence.management.v1.processor.roles.Ac import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -20,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; +import com.iqser.red.service.persistence.management.v1.processor.mapper.EntityLogResponseMapper; import com.iqser.red.service.persistence.management.v1.processor.model.ManualChangesQueryOptions; import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService; import com.iqser.red.service.persistence.management.v1.processor.service.CommentService; @@ -90,6 +92,7 @@ public class ManualRedactionController implements ManualRedactionResource { DictionaryPersistenceService dictionaryPersistenceService; EntityLogController entityLogController; + EntityLogResponseMapper mapper = EntityLogResponseMapper.INSTANCE; @PreAuthorize("hasAuthority('" + DELETE_MANUAL_REDACTION + "')") @@ -260,11 +263,7 @@ public class ManualRedactionController implements ManualRedactionResource { removeRedactionRequests.stream() .anyMatch(RemoveRedactionRequestModel::isRemoveFromAllDossiers)); - List responseList = manualRedactionService.addRemoveRedaction(dossierId, - fileId, - removeRedactionRequests, - dossier.getDossierTemplateId(), - true); + List responseList = manualRedactionService.addRemoveRedaction(dossierId, fileId, removeRedactionRequests, dossier.getDossierTemplateId(), true); responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder() .userId(KeycloakSecurity.getUserId()) @@ -279,9 +278,7 @@ public class ManualRedactionController implements ManualRedactionResource { @PreAuthorize("hasAuthority('" + DO_MANUAL_REDACTION + "')") - public ManualRedactionResponse removeRedactionBulkLocal(String dossierId, - String fileId, - RemoveRedactionBulkLocalRequestModel removeRedactionRequest) { + public ManualRedactionResponse removeRedactionBulkLocal(String dossierId, String fileId, RemoveRedactionBulkLocalRequestModel removeRedactionRequest) { verifyAccess(dossierId, fileId); verifyRequest(removeRedactionRequest.isRectangle(), removeRedactionRequest.getPosition(), removeRedactionRequest.getValue()); @@ -289,37 +286,35 @@ public class ManualRedactionController implements ManualRedactionResource { Set removeRedactionRequestModels; FileModel status = fileStatusService.getStatus(fileId); + Set entries; if (!status.isExcludedFromAutomaticAnalysis()) { - Set entries = getFilteredEntityLogEntries(dossierId, - fileId, - removeRedactionRequest.isRectangle(), - removeRedactionRequest.getValue(), - removeRedactionRequest.isCaseSensitive(), - removeRedactionRequest.getOriginTypes(), - removeRedactionRequest.getOriginLegalBases(), - removeRedactionRequest.getPageNumbers(), - removeRedactionRequest.getPosition()); - removeRedactionRequestModels = entries.stream() - .map(entry -> RemoveRedactionRequestModel.builder().annotationId(entry.getId()).comment(removeRedactionRequest.getComment()).build()) - .collect(Collectors.toSet()); + entries = getFilteredEntityLogEntries(dossierId, + fileId, + removeRedactionRequest.isRectangle(), + removeRedactionRequest.getValue(), + removeRedactionRequest.isCaseSensitive(), + removeRedactionRequest.getOriginTypes(), + removeRedactionRequest.getOriginLegalBases(), + removeRedactionRequest.getPageNumbers(), + removeRedactionRequest.getPosition()); } else { - List filteredEntityLogResponses = getFilteredEntityLogResponses(dossierId, - fileId, - true, - removeRedactionRequest.isRectangle(), - removeRedactionRequest.getValue(), - removeRedactionRequest.isCaseSensitive(), - removeRedactionRequest.getOriginTypes(), - removeRedactionRequest.getOriginLegalBases(), - removeRedactionRequest.getPageNumbers(), - removeRedactionRequest.getPosition()); - - removeRedactionRequestModels = filteredEntityLogResponses.stream() - .map(entityLogEntry -> RemoveRedactionRequestModel.builder().annotationId(entityLogEntry.getId()).comment(removeRedactionRequest.getComment()).build()) - .collect(Collectors.toSet()); + entries = new HashSet<>(mapper.fromLogEntryResponses(getFilteredEntityLogResponses(dossierId, + fileId, + removeRedactionRequest.isRectangle(), + removeRedactionRequest.getValue(), + removeRedactionRequest.isCaseSensitive(), + removeRedactionRequest.getOriginTypes(), + removeRedactionRequest.getOriginLegalBases(), + removeRedactionRequest.getPageNumbers(), + removeRedactionRequest.getPosition()))); } + + removeRedactionRequestModels = entries.stream() + .map(entityLogEntry -> RemoveRedactionRequestModel.builder().annotationId(entityLogEntry.getId()).comment(removeRedactionRequest.getComment()).build()) + .collect(Collectors.toSet()); + return removeRedactionBulk(dossierId, fileId, removeRedactionRequestModels); } @@ -389,62 +384,49 @@ public class ManualRedactionController implements ManualRedactionResource { @PreAuthorize("hasAuthority('" + DO_MANUAL_REDACTION + "')") - public ManualRedactionResponse recategorizeBulkLocal(String dossierId, - String fileId, - RecategorizationBulkLocalRequestModel recategorizationRequest) { + public ManualRedactionResponse recategorizeBulkLocal(String dossierId, String fileId, RecategorizationBulkLocalRequestModel recategorizationRequest) { verifyAccess(dossierId, fileId); verifyRequest(recategorizationRequest.isRectangle(), recategorizationRequest.getPosition(), recategorizationRequest.getValue()); Set recategorizationRequestModels; FileModel status = fileStatusService.getStatus(fileId); + Set entries; if (!status.isExcludedFromAutomaticAnalysis()) { - Set entries = getFilteredEntityLogEntries(dossierId, - fileId, - recategorizationRequest.isRectangle(), - recategorizationRequest.getValue(), - recategorizationRequest.isCaseSensitive(), - recategorizationRequest.getOriginTypes(), - recategorizationRequest.getOriginLegalBases(), - recategorizationRequest.getPageNumbers(), - recategorizationRequest.getPosition()); - - recategorizationRequestModels = entries.stream() - .map(entry -> RecategorizationRequestModel.builder() - .annotationId(entry.getId()) - .type(recategorizationRequest.isRectangle() ? entry.getType() : recategorizationRequest.getType()) - .legalBasis(recategorizationRequest.getLegalBasis()) - .section(recategorizationRequest.getSection()) - .value(entry.getValue()) - .comment(recategorizationRequest.getComment()) - .build()) - .collect(Collectors.toSet()); + entries = getFilteredEntityLogEntries(dossierId, + fileId, + recategorizationRequest.isRectangle(), + recategorizationRequest.getValue(), + recategorizationRequest.isCaseSensitive(), + recategorizationRequest.getOriginTypes(), + recategorizationRequest.getOriginLegalBases(), + recategorizationRequest.getPageNumbers(), + recategorizationRequest.getPosition()); } else { - List filteredEntityLogResponses = getFilteredEntityLogResponses(dossierId, - fileId, - true, - recategorizationRequest.isRectangle(), - recategorizationRequest.getValue(), - recategorizationRequest.isCaseSensitive(), - recategorizationRequest.getOriginTypes(), - recategorizationRequest.getOriginLegalBases(), - recategorizationRequest.getPageNumbers(), - recategorizationRequest.getPosition()); - - recategorizationRequestModels = filteredEntityLogResponses.stream() - .map(entityLogEntry -> RecategorizationRequestModel.builder() - .annotationId(entityLogEntry.getId()) - .type(recategorizationRequest.isRectangle() ? entityLogEntry.getType() : recategorizationRequest.getType()) - .legalBasis(recategorizationRequest.getLegalBasis()) - .section(recategorizationRequest.getSection()) - .value(entityLogEntry.getValue()) - .comment(recategorizationRequest.getComment()) - .build()) - .collect(Collectors.toSet()); + entries = new HashSet<>(mapper.fromLogEntryResponses(getFilteredEntityLogResponses(dossierId, + fileId, + recategorizationRequest.isRectangle(), + recategorizationRequest.getValue(), + recategorizationRequest.isCaseSensitive(), + recategorizationRequest.getOriginTypes(), + recategorizationRequest.getOriginLegalBases(), + recategorizationRequest.getPageNumbers(), + recategorizationRequest.getPosition()))); } + recategorizationRequestModels = entries.stream() + .map(entry -> RecategorizationRequestModel.builder() + .annotationId(entry.getId()) + .type(recategorizationRequest.isRectangle() ? entry.getType() : recategorizationRequest.getType()) + .legalBasis(recategorizationRequest.getLegalBasis()) + .section(recategorizationRequest.getSection()) + .value(recategorizationRequest.isRectangle() ? recategorizationRequest.getValue() : entry.getValue()) + .comment(recategorizationRequest.getComment()) + .build()) + .collect(Collectors.toSet()); + return recategorizeBulk(dossierId, fileId, recategorizationRequestModels); } @@ -492,7 +474,6 @@ public class ManualRedactionController implements ManualRedactionResource { private List getFilteredEntityLogResponses(String dossierId, String fileId, - boolean includeUnprocessed, boolean rectangle, String value, boolean caseSensitive, @@ -501,7 +482,7 @@ public class ManualRedactionController implements ManualRedactionResource { Set pageNumbers, Position position) { - List entityLogEntryResponses = entityLogController.getEntityLog(dossierId, fileId, Collections.emptyList(), includeUnprocessed).getEntityLogEntry() + List entityLogEntryResponses = entityLogController.getEntityLog(dossierId, fileId, Collections.emptyList(), true).getEntityLogEntry() .stream() .filter(entityLogEntryResponse -> !entityLogEntryResponse.getState().equals(EntryState.PENDING)) .collect(Collectors.toList()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java index 32f0cfcea..094b1c43f 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ManualRedactionTest.java @@ -3498,6 +3498,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .legalBasis("new Legal Basis") .section("new Section") .position(filterPosition) + .value("new value") .build(); ManualRedactionResponse manualRedactionResponse = manualRedactionClient.recategorizeBulkLocal(dossier.getId(), file.getId(), recategorizationRequest); @@ -3508,6 +3509,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertEquals(typeManual, response.getEntityLogEntry().getType()); assertEquals("new Legal Basis", response.getEntityLogEntry().getLegalBasis()); assertEquals("new Section", response.getEntityLogEntry().getSection()); + assertEquals("new value", response.getEntityLogEntry().getValue()); } recategorizationRequest = RecategorizationBulkLocalRequestModel.builder()