From 0b173ec9305159c2d3dee0e801010e4c4ab5d8be Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Fri, 25 Aug 2023 16:21:01 +0200 Subject: [PATCH] RED-7317: Keep user-edited paragraph/location when recategorizing entity * refactor of ManualRedactionService, still WIP --- .../controller/ManualRedactionController.java | 138 +++--- .../resource/ManualRedactionResource.java | 32 +- .../RemoveFalsePositiveManualRedactions6.java | 2 +- .../FileStatusProcessingUpdateService.java | 1 + ...anualRedactionDictionaryUpdateHandler.java | 92 ++++ .../ManualRedactionService.java | 425 ++++++++---------- ...ageRecategorizationPersistenceService.java | 8 +- .../RedactionLogMergeService.java | 5 +- .../v1/server/integration/tests/FileTest.java | 25 +- .../tests/ManualRedactionTest.java | 44 +- .../annotations/AddRedactionRequest.java | 2 +- .../model/annotations/BaseManualRequest.java | 13 + .../annotations/ForceRedactionRequest.java | 2 +- .../ImageRecategorizationRequest.java | 21 - .../ManualRequestWithDictionary.java | 14 + .../annotations/RecategorizationRequest.java | 44 ++ .../annotations/RemoveRedactionRequest.java | 2 +- .../annotations/ResizeRedactionRequest.java | 2 +- ...quest.java => AddCommentRequestModel.java} | 2 +- ...est.java => AddRedactionRequestModel.java} | 4 +- ...eRequest.java => ApproveRequestModel.java} | 2 +- ...t.java => ForceRedactionRequestModel.java} | 2 +- .../manual/ImageRecategorizationRequest.java | 18 - ...java => LegalBasisChangeRequestModel.java} | 2 +- ....java => ManualRedactionWrapperModel.java} | 4 +- .../manual/RecategorizationRequestModel.java | 23 + ....java => RemoveRedactionRequestModel.java} | 2 +- ....java => ResizeRedactionRequestModel.java} | 2 +- 28 files changed, 522 insertions(+), 411 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionDictionaryUpdateHandler.java rename persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/{ => manualredactions}/ManualRedactionService.java (64%) create mode 100644 persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/BaseManualRequest.java delete mode 100644 persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ImageRecategorizationRequest.java create mode 100644 persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ManualRequestWithDictionary.java create mode 100644 persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/RecategorizationRequest.java rename persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/{AddCommentRequest.java => AddCommentRequestModel.java} (89%) rename persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/{AddRedactionRequest.java => AddRedactionRequestModel.java} (92%) rename persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/{ApproveRequest.java => ApproveRequestModel.java} (88%) rename persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/{ForceRedactionRequest.java => ForceRedactionRequestModel.java} (90%) delete mode 100644 persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ImageRecategorizationRequest.java rename persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/{LegalBasisChangeRequest.java => LegalBasisChangeRequestModel.java} (90%) rename persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/{ManualRedactionWrapper.java => ManualRedactionWrapperModel.java} (70%) create mode 100644 persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/RecategorizationRequestModel.java rename persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/{RemoveRedactionRequest.java => RemoveRedactionRequestModel.java} (90%) rename persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/{ResizeRedactionRequest.java => ResizeRedactionRequestModel.java} (94%) 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 549d217fe..b8a575214 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 @@ -23,11 +23,12 @@ import org.springframework.web.bind.annotation.RestController; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService; import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService; -import com.iqser.red.service.persistence.management.v1.processor.service.ManualRedactionService; +import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService; import com.iqser.red.service.persistence.service.v1.api.external.resource.ManualRedactionResource; import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory; import com.iqser.red.service.persistence.service.v1.api.shared.model.CommentResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AddRedactionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.CommentRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualAddResponse; @@ -39,14 +40,14 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRedactionEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AuditRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddCommentRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ForceRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ImageRecategorizationRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.LegalBasisChangeRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ManualRedactionWrapper; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RemoveRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ResizeRedactionRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddCommentRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ForceRedactionRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.LegalBasisChangeRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ManualRedactionWrapperModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RecategorizationRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RemoveRedactionRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ResizeRedactionRequestModel; import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity; import lombok.RequiredArgsConstructor; @@ -66,43 +67,42 @@ public class ManualRedactionController implements ManualRedactionResource { private final AccessControlService accessControlService; + private ManualRedactionWrapperModel getLatestManualRedactionForAnnotationId(ManualRedactions manualRedactions, String annotationId) { - private ManualRedactionWrapper getLatestManualRedactionForAnnotationId(ManualRedactions manualRedactions, String annotationId) { - - final List manualRedactionWrappers = new ArrayList<>(); + final List manualRedactionWrappers = new ArrayList<>(); manualRedactions.getEntriesToAdd() .stream() .filter(item -> item.getSoftDeletedTime() == null && item.getAnnotationId().equals(annotationId)) - .forEach(item -> manualRedactionWrappers.add(new ManualRedactionWrapper(item.getAnnotationId(), item.getRequestDate(), item))); + .forEach(item -> manualRedactionWrappers.add(new ManualRedactionWrapperModel(item.getAnnotationId(), item.getRequestDate(), item))); manualRedactions.getImageRecategorization() .stream() .filter(item -> item.getSoftDeletedTime() == null && item.getAnnotationId().equals(annotationId)) - .forEach(item -> manualRedactionWrappers.add(new ManualRedactionWrapper(item.getAnnotationId(), item.getRequestDate(), item))); + .forEach(item -> manualRedactionWrappers.add(new ManualRedactionWrapperModel(item.getAnnotationId(), item.getRequestDate(), item))); manualRedactions.getIdsToRemove() .stream() .filter(item -> item.getSoftDeletedTime() == null && item.getAnnotationId().equals(annotationId)) - .forEach(item -> manualRedactionWrappers.add(new ManualRedactionWrapper(item.getAnnotationId(), item.getRequestDate(), item))); + .forEach(item -> manualRedactionWrappers.add(new ManualRedactionWrapperModel(item.getAnnotationId(), item.getRequestDate(), item))); manualRedactions.getForceRedactions() .stream() .filter(item -> item.getSoftDeletedTime() == null && item.getAnnotationId().equals(annotationId)) - .forEach(item -> manualRedactionWrappers.add(new ManualRedactionWrapper(item.getAnnotationId(), item.getRequestDate(), item))); + .forEach(item -> manualRedactionWrappers.add(new ManualRedactionWrapperModel(item.getAnnotationId(), item.getRequestDate(), item))); manualRedactions.getLegalBasisChanges() .stream() .filter(item -> item.getSoftDeletedTime() == null && item.getAnnotationId().equals(annotationId)) - .forEach(item -> manualRedactionWrappers.add(new ManualRedactionWrapper(item.getAnnotationId(), item.getRequestDate(), item))); + .forEach(item -> manualRedactionWrappers.add(new ManualRedactionWrapperModel(item.getAnnotationId(), item.getRequestDate(), item))); manualRedactions.getResizeRedactions() .stream() .filter(item -> item.getSoftDeletedTime() == null && item.getAnnotationId().equals(annotationId)) - .forEach(item -> manualRedactionWrappers.add(new ManualRedactionWrapper(item.getAnnotationId(), item.getRequestDate(), item))); + .forEach(item -> manualRedactionWrappers.add(new ManualRedactionWrapperModel(item.getAnnotationId(), item.getRequestDate(), item))); var sortedManualRedactionWrappers = manualRedactionWrappers.stream() - .sorted(Comparator.comparing(ManualRedactionWrapper::getDate, Comparator.nullsLast(Comparator.reverseOrder()))) + .sorted(Comparator.comparing(ManualRedactionWrapperModel::getDate, Comparator.nullsLast(Comparator.reverseOrder()))) .collect(Collectors.toList()); return sortedManualRedactionWrappers.isEmpty() ? null : sortedManualRedactionWrappers.get(0); @@ -118,7 +118,7 @@ public class ManualRedactionController implements ManualRedactionResource { ManualRedactions manualRedactions = manualRedactionService.getManualRedactions(fileId); - Map manualRedactionWrappers = getLatestManualRedactionsForAnnotationIds(manualRedactions, annotationIds); + Map manualRedactionWrappers = getLatestManualRedactionsForAnnotationIds(manualRedactions, annotationIds); if (manualRedactionWrappers.isEmpty()) { throw new NotFoundException(String.format("ManualRedaction with annotationIds %s could not be found.", annotationIds)); @@ -127,7 +127,7 @@ public class ManualRedactionController implements ManualRedactionResource { List manualRedactionEntries = manualRedactionWrappers.values() .stream() .filter(manualRedactionWrapper -> manualRedactionWrapper.getItem() instanceof ManualRedactionEntry) - .map(ManualRedactionWrapper::getId) + .map(ManualRedactionWrapperModel::getId) .collect(Collectors.toList()); if (!manualRedactionEntries.isEmpty()) { manualRedactionService.deleteAddRedaction(dossierId, fileId, manualRedactionEntries); @@ -143,7 +143,7 @@ public class ManualRedactionController implements ManualRedactionResource { List idRemovals = manualRedactionWrappers.values() .stream() .filter(manualRedactionWrapper -> manualRedactionWrapper.getItem() instanceof IdRemoval) - .map(ManualRedactionWrapper::getId) + .map(ManualRedactionWrapperModel::getId) .collect(Collectors.toList()); if (!idRemovals.isEmpty()) { @@ -160,7 +160,7 @@ public class ManualRedactionController implements ManualRedactionResource { List manualForceRedactions = manualRedactionWrappers.values() .stream() .filter(manualRedactionWrapper -> manualRedactionWrapper.getItem() instanceof ManualForceRedaction) - .map(ManualRedactionWrapper::getId) + .map(ManualRedactionWrapperModel::getId) .collect(Collectors.toList()); if (!manualForceRedactions.isEmpty()) { @@ -177,7 +177,7 @@ public class ManualRedactionController implements ManualRedactionResource { List manualImageRecategorizations = manualRedactionWrappers.values() .stream() .filter(manualRedactionWrapper -> manualRedactionWrapper.getItem() instanceof ManualImageRecategorization) - .map(ManualRedactionWrapper::getId) + .map(ManualRedactionWrapperModel::getId) .collect(Collectors.toList()); if (!manualImageRecategorizations.isEmpty()) { @@ -194,7 +194,7 @@ public class ManualRedactionController implements ManualRedactionResource { List manualLegalBasisChanges = manualRedactionWrappers.values() .stream() .filter(manualRedactionWrapper -> manualRedactionWrapper.getItem() instanceof ManualLegalBasisChange) - .map(ManualRedactionWrapper::getId) + .map(ManualRedactionWrapperModel::getId) .collect(Collectors.toList()); if (!manualLegalBasisChanges.isEmpty()) { @@ -211,7 +211,7 @@ public class ManualRedactionController implements ManualRedactionResource { List manualResizeRedactions = manualRedactionWrappers.values() .stream() .filter(manualRedactionWrapper -> manualRedactionWrapper.getItem() instanceof ManualResizeRedaction) - .map(ManualRedactionWrapper::getId) + .map(ManualRedactionWrapperModel::getId) .collect(Collectors.toList()); if (!manualResizeRedactions.isEmpty()) { @@ -227,9 +227,9 @@ public class ManualRedactionController implements ManualRedactionResource { } - private Map getLatestManualRedactionsForAnnotationIds(ManualRedactions manualRedactions, Set annotationIds) { + private Map getLatestManualRedactionsForAnnotationIds(ManualRedactions manualRedactions, Set annotationIds) { - Map result = new HashMap<>(); + Map result = new HashMap<>(); annotationIds.forEach(annotationId -> { var last = getLatestManualRedactionForAnnotationId(manualRedactions, annotationId); if (last != null) { @@ -276,7 +276,7 @@ public class ManualRedactionController implements ManualRedactionResource { public CommentResponse addComment(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody AddCommentRequest addCommentRequest) { + @RequestBody AddCommentRequestModel addCommentRequest) { accessControlService.verifyFileIsNotApproved(dossierId, fileId); accessControlService.verifyUserIsReviewerOrApprover(dossierId, fileId); @@ -301,41 +301,38 @@ public class ManualRedactionController implements ManualRedactionResource { @PreAuthorize("hasAuthority('" + DO_MANUAL_REDACTION + "')") public List addRedactionBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody Set addRedactionRequests) { + @RequestBody Set addRedactionRequests) { var dossier = dossierManagementService.getDossierById(dossierId, false, false); accessControlService.verifyFileIsNotApproved(dossierId, fileId); - if(addRedactionRequests.stream().anyMatch(AddRedactionRequest::isAddToAllDossiers)){ + if (addRedactionRequests.stream().anyMatch(AddRedactionRequestModel::isAddToAllDossiers)) { accessControlService.verifyUserIsApprover(dossierId); } else { accessControlService.verifyUserIsMemberOrApprover(dossierId); } - List requests = new ArrayList<>(); + List requests = addRedactionRequests.stream() + .map(addRedactionRequest -> AddRedactionRequest.builder() + .value(addRedactionRequest.getValue()) + .legalBasis(addRedactionRequest.getLegalBasis()) + .user(KeycloakSecurity.getUserId()) + .dossierTemplateTypeId(toTypeId(addRedactionRequest.getType(), dossier.getDossierTemplateId())) + .reason(addRedactionRequest.getReason()) + .addToDictionary(addRedactionRequest.isAddToDictionary()) + .status(AnnotationStatus.APPROVED) + .comment(addRedactionRequest.getComment() != null ? addRedactionRequest.getComment().getText() : null) + .section(addRedactionRequest.getSection()) + .rectangle(addRedactionRequest.isRectangle()) + .addToAllDossiers(addRedactionRequest.isAddToAllDossiers()) + .forceAddToDictionary(addRedactionRequest.isForceAddToDictionary()) + .positions(addRedactionRequest.getPositions()) + .sourceId(addRedactionRequest.getSourceId()) + .dossierId(dossierId) + .dictionaryEntryType(addRedactionRequest.getDictionaryEntryType()) + .build()) + .collect(Collectors.toList()); - for (var addRedactionRequest : addRedactionRequests) { - - var addRedactionRequestBuilder = com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AddRedactionRequest.builder() - .value(addRedactionRequest.getValue()) - .legalBasis(addRedactionRequest.getLegalBasis()) - .user(KeycloakSecurity.getUserId()) - .dossierTemplateTypeId(toTypeId(addRedactionRequest.getType(), dossier.getDossierTemplateId())) - .reason(addRedactionRequest.getReason()) - .addToDictionary(addRedactionRequest.isAddToDictionary()) - .status(AnnotationStatus.APPROVED) - .comment(addRedactionRequest.getComment() != null ? addRedactionRequest.getComment().getText() : null) - .section(addRedactionRequest.getSection()) - .rectangle(addRedactionRequest.isRectangle()) - .addToAllDossiers(addRedactionRequest.isAddToAllDossiers()) - .forceAddToDictionary(addRedactionRequest.isForceAddToDictionary()) - .positions(addRedactionRequest.getPositions()) - .sourceId(addRedactionRequest.getSourceId()) - .dossierId(dossierId) - .dictionaryEntryType(addRedactionRequest.getDictionaryEntryType()); - - requests.add(addRedactionRequestBuilder.build()); - } List responseList = manualRedactionService.addAddRedaction(dossierId, fileId, requests); responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder() .userId(KeycloakSecurity.getUserId()) @@ -351,10 +348,10 @@ public class ManualRedactionController implements ManualRedactionResource { @PreAuthorize("hasAuthority('" + DO_MANUAL_REDACTION + "')") public List removeRedactionBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody Set removeRedactionRequests) { + @RequestBody Set removeRedactionRequests) { accessControlService.verifyFileIsNotApproved(dossierId, fileId); - if(removeRedactionRequests.stream().anyMatch(RemoveRedactionRequest::isRemoveFromAllDossiers)){ + if (removeRedactionRequests.stream().anyMatch(RemoveRedactionRequestModel::isRemoveFromAllDossiers)) { accessControlService.verifyUserIsApprover(dossierId); } else { accessControlService.verifyUserIsMemberOrApprover(dossierId); @@ -393,7 +390,7 @@ public class ManualRedactionController implements ManualRedactionResource { @PreAuthorize("hasAuthority('" + DO_MANUAL_REDACTION + "')") public List forceRedactionBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody Set forceRedactionRequests) { + @RequestBody Set forceRedactionRequests) { accessControlService.verifyFileIsNotApproved(dossierId, fileId); accessControlService.verifyUserIsMemberOrApprover(dossierId); @@ -424,7 +421,7 @@ public class ManualRedactionController implements ManualRedactionResource { @PreAuthorize("hasAuthority('" + DO_MANUAL_REDACTION + "')") public List legalBasisChangeBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody Set legalBasisChangeRequests) { + @RequestBody Set legalBasisChangeRequests) { accessControlService.verifyFileIsNotApproved(dossierId, fileId); accessControlService.verifyUserIsMemberOrApprover(dossierId); @@ -456,31 +453,33 @@ public class ManualRedactionController implements ManualRedactionResource { @PreAuthorize("hasAuthority('" + DO_MANUAL_REDACTION + "')") - public List recategorizeImageBulk(@PathVariable(DOSSIER_ID) String dossierId, - @PathVariable(FILE_ID) String fileId, - @RequestBody Set imageRecategorizationRequests) { + public List recategorizeBulk(@PathVariable(DOSSIER_ID) String dossierId, + @PathVariable(FILE_ID) String fileId, + @RequestBody Set recategorizationRequests) { var dossier = dossierManagementService.getDossierById(dossierId, false, false); accessControlService.verifyFileIsNotApproved(dossierId, fileId); accessControlService.verifyUserIsMemberOrApprover(dossierId); - List requests = imageRecategorizationRequests.stream() - .map(imageRecategorizationRequest -> com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ImageRecategorizationRequest.builder() - .annotationId(imageRecategorizationRequest.getAnnotationId()) + List requests = recategorizationRequests.stream() + .map(recategorizationRequest -> com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.RecategorizationRequest.builder() + .annotationId(recategorizationRequest.getAnnotationId()) .user(KeycloakSecurity.getUserId()) .status(AnnotationStatus.APPROVED) - .typeId(toTypeId(imageRecategorizationRequest.getType(), dossier.getDossierTemplateId())) - .comment(imageRecategorizationRequest.getComment()) + .typeId(toTypeId(recategorizationRequest.getType(), dossier.getDossierTemplateId())) + .comment(recategorizationRequest.getComment()) + .addToDictionary(recategorizationRequest.isAddToDictionary()) + .addToAllDossiers(recategorizationRequest.isAddToAllDossiers()) .build()) .collect(Collectors.toList()); - List responseList = manualRedactionService.addImageRecategorization(dossierId, fileId, requests); + List responseList = manualRedactionService.addRecategorization(dossierId, fileId, requests); responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder() .userId(KeycloakSecurity.getUserId()) .objectId(fileId) .category(AuditCategory.DOCUMENT.name()) - .message("Image was recategorized") + .message("Entity was recategorized.") .details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, response.getAnnotationId())) .build())); @@ -491,7 +490,8 @@ public class ManualRedactionController implements ManualRedactionResource { @PreAuthorize("hasAuthority('" + DO_MANUAL_REDACTION + "')") public List resizeRedactionBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody Set resizeRedactionRequests) { + @RequestBody Set resizeRedactionRequests) { + accessControlService.verifyFileIsNotApproved(dossierId, fileId); accessControlService.verifyUserIsMemberOrApprover(dossierId); diff --git a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ManualRedactionResource.java b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ManualRedactionResource.java index 5e8c09361..5cd1ff519 100644 --- a/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ManualRedactionResource.java +++ b/persistence-service-v1/persistence-service-external-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/external/resource/ManualRedactionResource.java @@ -15,13 +15,13 @@ import org.springframework.web.bind.annotation.ResponseStatus; import com.iqser.red.service.persistence.service.v1.api.shared.model.CommentResponse; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualAddResponse; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddCommentRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ForceRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ImageRecategorizationRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.LegalBasisChangeRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RemoveRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ResizeRedactionRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddCommentRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ForceRedactionRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RecategorizationRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.LegalBasisChangeRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RemoveRedactionRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ResizeRedactionRequestModel; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -58,7 +58,7 @@ public interface ManualRedactionResource { CommentResponse addComment(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, @PathVariable(ANNOTATION_ID) String annotationId, - @RequestBody AddCommentRequest addCommentRequest); + @RequestBody AddCommentRequestModel addCommentRequest); @ResponseStatus(value = HttpStatus.NO_CONTENT) @@ -77,7 +77,7 @@ public interface ManualRedactionResource { @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) List addRedactionBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody Set addRedactionRequest); + @RequestBody Set addRedactionRequest); @ResponseStatus(value = HttpStatus.OK) @@ -86,7 +86,7 @@ public interface ManualRedactionResource { @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) List removeRedactionBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody Set removeRedactionRequests); + @RequestBody Set removeRedactionRequests); @ResponseStatus(value = HttpStatus.OK) @@ -95,7 +95,7 @@ public interface ManualRedactionResource { @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) List forceRedactionBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody Set forceRedactionRequests); + @RequestBody Set forceRedactionRequests); @ResponseStatus(value = HttpStatus.OK) @@ -104,16 +104,16 @@ public interface ManualRedactionResource { @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) List legalBasisChangeBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody Set legalBasisChangeRequests); + @RequestBody Set legalBasisChangeRequests); @ResponseStatus(value = HttpStatus.OK) @PostMapping(value = MANUAL_REDACTION_REST_PATH + "/bulk/redaction/recategorize" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "Recategorizes the images list", description = "None") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) - List recategorizeImageBulk(@PathVariable(DOSSIER_ID) String dossierId, - @PathVariable(FILE_ID) String fileId, - @RequestBody Set imageRecategorizationRequests); + List recategorizeBulk(@PathVariable(DOSSIER_ID) String dossierId, + @PathVariable(FILE_ID) String fileId, + @RequestBody Set recategorizationRequests); @ResponseStatus(value = HttpStatus.OK) @@ -122,7 +122,7 @@ public interface ManualRedactionResource { @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "OK")}) List resizeRedactionBulk(@PathVariable(DOSSIER_ID) String dossierId, @PathVariable(FILE_ID) String fileId, - @RequestBody Set resizeRedactionRequests); + @RequestBody Set resizeRedactionRequests); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/RemoveFalsePositiveManualRedactions6.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/RemoveFalsePositiveManualRedactions6.java index 5bdd9d890..4cfe4e15e 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/RemoveFalsePositiveManualRedactions6.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/migrations/RemoveFalsePositiveManualRedactions6.java @@ -6,7 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.management.v1.processor.migration.Migration; -import com.iqser.red.service.persistence.management.v1.processor.service.ManualRedactionService; +import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.AddRedactionPersistenceService; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusProcessingUpdateService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusProcessingUpdateService.java index 1f8d07ea5..0693c05ad 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusProcessingUpdateService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/FileStatusProcessingUpdateService.java @@ -7,6 +7,7 @@ import org.springframework.retry.support.RetryTemplate; import org.springframework.web.bind.annotation.RestController; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; +import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionDictionaryUpdateHandler.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionDictionaryUpdateHandler.java new file mode 100644 index 000000000..71109936c --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionDictionaryUpdateHandler.java @@ -0,0 +1,92 @@ +package com.iqser.red.service.persistence.management.v1.processor.service.manualredactions; + +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.springframework.stereotype.Service; + +import com.iqser.red.service.dictionarymerge.commons.DictionaryEntry; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; +import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRequestWithDictionary; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; + +import feign.FeignException; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +public class ManualRedactionDictionaryUpdateHandler { + + private final DictionaryManagementService dictionaryManagementService; + + + public Set handleAddToDictionary(String fileId, String dossierId, ManualRequestWithDictionary manualRequestWithDictionary) { + + if (!manualRequestWithDictionary.isApproved()) { + return Collections.emptySet(); + } + Set typeIdsOfModifiedDictionaries = new HashSet<>(); + + String dossierTemplateTypeId = manualRequestWithDictionary.getDossierTemplateTypeId(); + String value = manualRequestWithDictionary.getValue(); + DictionaryEntryType dictionaryEntryType = manualRequestWithDictionary.getDictionaryEntryType(); + + if (manualRequestWithDictionary.isAddToAllDossiers()) { + List dictionaryEntriesToUnDelete = dictionaryManagementService.getAllEntriesInDossierTemplate(dossierTemplateTypeId, value); + dictionaryEntriesToUnDelete.forEach(entry -> { + typeIdsOfModifiedDictionaries.add(entry.getTypeId()); + addToDictionary(entry.getTypeId(), manualRequestWithDictionary.getValue(), dossierId, fileId, manualRequestWithDictionary.getDictionaryEntryType()); + }); + addToDictionary(dossierTemplateTypeId, value, dossierId, fileId, dictionaryEntryType); + typeIdsOfModifiedDictionaries.add(dossierTemplateTypeId); + } else { + addToDictionary(dossierTemplateTypeId + ":" + dossierId, value, dossierId, fileId, dictionaryEntryType); + typeIdsOfModifiedDictionaries.add(dossierTemplateTypeId + ":" + dossierId); + } + + return typeIdsOfModifiedDictionaries; + } + + + public boolean revertAddToDictionary(String fileId, String dossierId, ManualRedactionEntryEntity manualRedactionToRevert) { + + if (!manualRedactionToRevert.getStatus().equals(AnnotationStatus.APPROVED) || manualRedactionToRevert.isAddToDictionary()) { + return false; + } + + manualRedactionToRevert.getTypeIdsOfModifiedDictionaries().forEach(typeId -> { + removeFromDictionary(typeId, manualRedactionToRevert.getValue(), dossierId, fileId, manualRedactionToRevert.getDictionaryEntryType()); + }); + return true; + } + + + private void addToDictionary(String typeId, String value, String dossierId, String fileId, DictionaryEntryType dictionaryEntryType) { + + try { + log.debug("Adding entry: {} to {} for {} / {}", value, typeId, dossierId, fileId); + dictionaryManagementService.addEntries(typeId, List.of(value), false, false, dictionaryEntryType != null ? dictionaryEntryType : DictionaryEntryType.ENTRY); + } catch (Exception e) { + throw new BadRequestException(e.getMessage()); + } + } + + + private void removeFromDictionary(String typeId, String value, String dossierId, String fileId, DictionaryEntryType dictionaryEntryType) { + + try { + log.debug("Deleting entries to {} for {} / {}", typeId, dossierId, fileId); + dictionaryManagementService.deleteEntries(typeId, List.of(value), dictionaryEntryType != null ? dictionaryEntryType : DictionaryEntryType.ENTRY); + } catch (FeignException e) { + throw new BadRequestException(e.getMessage()); + } + } + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java similarity index 64% rename from persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionService.java rename to persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java index 0fbde10e3..01b69b8be 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/ManualRedactionService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionService.java @@ -1,35 +1,69 @@ -package com.iqser.red.service.persistence.management.v1.processor.service; +package com.iqser.red.service.persistence.management.v1.processor.service.manualredactions; + +import static com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUtils.toTypeId; + +import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; -import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.*; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.CommentEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.IdRemovalEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualImageRecategorizationEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity; +import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualResizeRedactionEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; +import com.iqser.red.service.persistence.management.v1.processor.service.AnalysisFlagsCalculationService; +import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService; +import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; +import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService; +import com.iqser.red.service.persistence.management.v1.processor.service.ManualRedactionProviderService; +import com.iqser.red.service.persistence.management.v1.processor.service.RedactionLogService; +import com.iqser.red.service.persistence.management.v1.processor.service.StopwordService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.*; -import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.*; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.AddRedactionPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.CommentPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ForceRedactionPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ImageRecategorizationPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.LegalBasisChangePersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.RemoveRedactionPersistenceService; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ResizeRedactionPersistenceService; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AddRedactionRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.BaseManualRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.CommentRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ForceRedactionRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.LegalBasisChangeRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualAddResponse; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRequestWithDictionary; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.RecategorizationRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.RemoveRedactionRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ResizeRedactionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.IdRemoval; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry; import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter; + import feign.FeignException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.nio.charset.StandardCharsets; -import java.time.OffsetDateTime; -import java.time.temporal.ChronoUnit; -import java.util.*; - -import static com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUtils.toTypeId; @Slf4j @Service @@ -54,6 +88,7 @@ public class ManualRedactionService { private final RedactionLogService redactionLogService; private final DictionaryManagementService dictionaryManagementService; private final HashFunction hashFunction = Hashing.murmur3_128(); + private final ManualRedactionDictionaryUpdateHandler manualRedactionDictionaryUpdateHandler; @Transactional @@ -63,44 +98,29 @@ public class ManualRedactionService { dossierPersistenceService.getAndValidateDossier(dossierId); - // validate add to dossier template dictionaries - addRedactionRequests.forEach(request -> dictionaryManagementService.validateAddRemoveToDossierTemplateDictionary(request.getDossierTemplateTypeId(), - request.isAddToDictionary(), - request.isAddToAllDossiers())); + for (AddRedactionRequest addRedactionRequest : addRedactionRequests) { + validateDictionaries(addRedactionRequest); + validatePositions(fileId, addRedactionRequest); + + String annotationId = hashFunction.hashString(fileId + addRedactionRequest, StandardCharsets.UTF_8).toString(); - boolean actionPerformed = false; - for (var addRedactionRequest : addRedactionRequests) { if (addRedactionRequest.isAddToDictionary()) { - validateDictionary(addRedactionRequest); + Set typeIdsOfModifiedDictionaries = manualRedactionDictionaryUpdateHandler.handleAddToDictionary(fileId, dossierId, addRedactionRequest); + addRedactionPersistenceService.updateStatus(fileId, annotationId, addRedactionRequest.getStatus(), true, typeIdsOfModifiedDictionaries); + } else { + addRedactionPersistenceService.updateStatus(fileId, annotationId, addRedactionRequest.getStatus(), false, null); } - validatePositions(fileId, addRedactionRequest); - String annotationId = hashFunction.hashString(fileId + addRedactionRequest, StandardCharsets.UTF_8).toString(); addRedactionPersistenceService.insert(fileId, annotationId, addRedactionRequest); - Long commentId = null; - if (addRedactionRequest.getComment() != null) { - commentId = addComment(fileId, annotationId, addRedactionRequest.getComment(), addRedactionRequest.getUser()).getId(); - } - - handleAddToDictionary(fileId, - annotationId, - addRedactionRequest.getDossierTemplateTypeId(), - addRedactionRequest.getValue(), - addRedactionRequest.getStatus(), - addRedactionRequest.isAddToDictionary(), - addRedactionRequest.isAddToAllDossiers(), - false, - dossierId, - addRedactionRequest.getDictionaryEntryType()); + Long commentId = addComment(fileId, annotationId, addRedactionRequest.getComment(), addRedactionRequest.getUser()).getId(); response.add(ManualAddResponse.builder().annotationId(annotationId).commentId(commentId).build()); - actionPerformed = actionPerformed || addRedactionRequest.getStatus().equals(AnnotationStatus.APPROVED); } analysisFlagsCalculationService.calculateFlags(dossierId, fileId); - if (actionPerformed) { + if (addRedactionRequests.stream().anyMatch(BaseManualRequest::isApproved)) { reprocess(dossierId, fileId); } @@ -108,7 +128,19 @@ public class ManualRedactionService { } - private void validateDictionary(AddRedactionRequest addRedactionRequest) { + private void validateDictionaries(ManualRequestWithDictionary addRedactionRequest) { + + if (addRedactionRequest.isAddToDictionary()) { + if (addRedactionRequest.isAddToAllDossiers()) { + // validate add to dossier template dictionaries + dictionaryManagementService.validateAddRemoveToDossierTemplateDictionary(addRedactionRequest.getDossierTemplateTypeId()); + } + validateDictionary(addRedactionRequest); + } + } + + + private void validateDictionary(ManualRequestWithDictionary addRedactionRequest) { try { if (!addRedactionRequest.isForceAddToDictionary() && stopwordService.isStopword(addRedactionRequest.getValue())) { @@ -130,6 +162,10 @@ public class ManualRedactionService { private CommentEntity addComment(String fileId, String annotationId, String comment, String user) { + if (comment == null) { + return null; + } + return commentPersistenceService.insert(CommentEntity.builder() .text(comment) .fileId(fileId) @@ -140,49 +176,6 @@ public class ManualRedactionService { } - private boolean handleAddToDictionary(String fileId, - String annotationId, - String dossierTemplateTypeId, - String value, - AnnotationStatus status, - boolean addToDictionary, - boolean addToAllDossiers, - boolean revert, - String dossierId, - DictionaryEntryType dictionaryEntryType) { - - if (status == AnnotationStatus.APPROVED) { - - if (addToDictionary) { - Set typeIdsOfModifiedDictionaries = new HashSet<>(); - if (revert) { - var addRedactionToRevert = addRedactionPersistenceService.findAddRedaction(fileId, annotationId); - addRedactionToRevert.getTypeIdsOfModifiedDictionaries().forEach(typeId -> { - removeFromDictionary(typeId, value, dossierId, fileId, dictionaryEntryType); - }); - } else { - if (addToAllDossiers) { - var dictionaryEntriesToUnDelete = dictionaryManagementService.getAllEntriesInDossierTemplate(dossierTemplateTypeId, value, dictionaryEntryType); - dictionaryEntriesToUnDelete.forEach(entry -> { - typeIdsOfModifiedDictionaries.add(entry.getTypeId()); - addToDictionary(entry.getTypeId(), value, dossierId, fileId, dictionaryEntryType); - }); - addToDictionary(dossierTemplateTypeId, value, dossierId, fileId, dictionaryEntryType); - typeIdsOfModifiedDictionaries.add(dossierTemplateTypeId); - } else { - addToDictionary(dossierTemplateTypeId + ":" + dossierId, value, dossierId, fileId, dictionaryEntryType); - typeIdsOfModifiedDictionaries.add(dossierTemplateTypeId + ":" + dossierId); - } - addRedactionPersistenceService.updateStatus(fileId, annotationId, status, true, typeIdsOfModifiedDictionaries); - } - return true; - } - addRedactionPersistenceService.updateStatus(fileId, annotationId, status, false, null); - } - return false; - } - - private void reprocess(String dossierId, String fileId) { fileStatusService.setStatusReprocessForManual(dossierId, fileId, true); @@ -237,49 +230,44 @@ public class ManualRedactionService { } }); - for (var removeRedactionRequest : removeRedactionRequests) { + for (RemoveRedactionRequest removeRedactionRequest : removeRedactionRequests) { - if (manualAddRedactionsContains(manualRedactions, removeRedactionRequest.getAnnotationId()) && AnnotationStatus.APPROVED.equals(removeRedactionRequest.getStatus())) { + if (manualAddRedactionsContains(manualRedactions, removeRedactionRequest.getAnnotationId()) && removeRedactionRequest.getStatus().equals(AnnotationStatus.APPROVED)) { log.info("hard delete ManualRedactions for file {} and annotation {}", fileId, removeRedactionRequest.getAnnotationId()); manualRedactionProviderService.hardDeleteManualRedactions(fileId, removeRedactionRequest.getAnnotationId()); - } else { - - log.info("add removeRedaction for file {} and annotation {}", fileId, removeRedactionRequest.getAnnotationId()); - var idRemoval = MagicConverter.convert(removeRedactionPersistenceService.insert(fileId, removeRedactionRequest), IdRemoval.class); - - Long commentId = null; - if (removeRedactionRequest.getComment() != null) { - commentId = addComment(fileId, removeRedactionRequest.getAnnotationId(), removeRedactionRequest.getComment(), removeRedactionRequest.getUser()).getId(); - } - boolean matchingEntryFound = false; - if (!removeRedactionRequest.isRemoveFromDictionary() && AnnotationStatus.APPROVED.equals(removeRedactionRequest.getStatus())) { - try { - getRedactionLogEntry(redactionLog, removeRedactionRequest.getAnnotationId()); - matchingEntryFound = true; - } catch (NotFoundException e) { - log.warn("No matching entry found in redaction log for annotation id {}", removeRedactionRequest.getAnnotationId()); - } - - requiresReAnalysis = requiresReAnalysis || matchingEntryFound; - } - - var removedFromDictionary = handleRemoveFromDictionary(redactionLog, - dossier, - fileId, - removeRedactionRequest.getAnnotationId(), - removeRedactionRequest.getStatus(), - removeRedactionRequest.isRemoveFromDictionary(), - removeRedactionRequest.isRemoveFromAllDossiers(), - false); - - if (!matchingEntryFound && !removedFromDictionary && idRemoval.isApproved()) { - removeRedactionPersistenceService.markAsProcessed(idRemoval); - } - - requiresReAnalysis = requiresReAnalysis || removedFromDictionary; - - response.add(ManualAddResponse.builder().annotationId(removeRedactionRequest.getAnnotationId()).commentId(commentId).build()); + requiresReAnalysis = true; + continue; } + + log.info("add removeRedaction for file {} and annotation {}", fileId, removeRedactionRequest.getAnnotationId()); + IdRemoval idRemoval = MagicConverter.convert(removeRedactionPersistenceService.insert(fileId, removeRedactionRequest), IdRemoval.class); + + Long commentId = addComment(fileId, removeRedactionRequest.getAnnotationId(), removeRedactionRequest.getComment(), removeRedactionRequest.getUser()).getId(); + boolean matchingEntryFound = false; + if (!removeRedactionRequest.isRemoveFromDictionary() && AnnotationStatus.APPROVED.equals(removeRedactionRequest.getStatus())) { + try { + getRedactionLogEntry(redactionLog, removeRedactionRequest.getAnnotationId()); + matchingEntryFound = true; + } catch (NotFoundException e) { + log.warn("No matching entry found in redaction log for annotation id {}", removeRedactionRequest.getAnnotationId()); + } + + requiresReAnalysis = requiresReAnalysis || matchingEntryFound; + } + + + boolean removedFromDictionary = handleRemoveFromDictionary(getRedactionLogEntry(redactionLog, removeRedactionRequest.getAnnotationId()), + dossier, + fileId, + removeRedactionRequest); + + if (!matchingEntryFound && !removedFromDictionary && idRemoval.isApproved()) { + removeRedactionPersistenceService.markAsProcessed(idRemoval); + } + + requiresReAnalysis = requiresReAnalysis || removedFromDictionary; + + response.add(ManualAddResponse.builder().annotationId(removeRedactionRequest.getAnnotationId()).commentId(commentId).build()); } if (requiresReAnalysis) { @@ -298,68 +286,67 @@ public class ManualRedactionService { } - private boolean handleRemoveFromDictionary(RedactionLog redactionLog, - DossierEntity dossier, - String fileId, - String annotationId, - AnnotationStatus status, - boolean removeFromDictionary, - boolean removeFromAllDossiers, - boolean revert) { + private boolean revertRemoveFromDictionary(String value, DossierEntity dossier, String fileId, IdRemovalEntity idRemoval) { - if (status == AnnotationStatus.APPROVED) { + String annotationId = idRemoval.getId().getAnnotationId(); - Set typeIdsOfModifiedDictionaries = new HashSet<>(); - - if (removeFromDictionary) { - - RedactionLogEntry redactionLogEntry = getRedactionLogEntry(redactionLog, annotationId); - - if (revert) { - var idRemovalEntity = removeRedactionPersistenceService.findRemoveRedaction(fileId, annotationId); - idRemovalEntity.getTypeIdsOfModifiedDictionaries().forEach(changedTypeId -> { - addToDictionary(changedTypeId, redactionLogEntry.getValue(), dossier.getId(), fileId, DictionaryEntryType.ENTRY); - }); - } else { - if (removeFromAllDossiers) { - var dictionaryEntriesToRemove = dictionaryManagementService.getAllEntriesInDossierTemplate(toTypeId(redactionLogEntry.getType(), - dossier.getDossierTemplateId()), redactionLogEntry.getValue(), DictionaryEntryType.ENTRY); - dictionaryEntriesToRemove.forEach(entry -> { - typeIdsOfModifiedDictionaries.add(entry.getTypeId()); - removeFromDictionary(entry.getTypeId(), entry.getValue(), dossier.getId(), fileId, DictionaryEntryType.ENTRY); - }); - } else { - typeIdsOfModifiedDictionaries.add(toTypeId(redactionLogEntry.getType(), dossier.getDossierTemplateId(), dossier.getId())); - removeFromDictionary(toTypeId(redactionLogEntry.getType(), dossier.getDossierTemplateId(), dossier.getId()), - redactionLogEntry.getValue(), - dossier.getId(), - fileId, - DictionaryEntryType.ENTRY); - } - - // This is needed to remove resizeRedactions with addToDictionary. - removeResizeRedactionsWithAddToDictionary(dossier.getDossierTemplateId(), redactionLogEntry.getValue()); - } - - removeRedactionPersistenceService.updateStatus(fileId, annotationId, status, true, typeIdsOfModifiedDictionaries); - return true; - } - removeRedactionPersistenceService.updateStatus(fileId, annotationId, status, false, typeIdsOfModifiedDictionaries); + if (!idRemoval.getStatus().equals(AnnotationStatus.APPROVED)) { + return false; } - return false; + if (idRemoval.isRemoveFromDictionary()) { + removeRedactionPersistenceService.updateStatus(fileId, annotationId, idRemoval.getStatus(), false, Collections.emptySet()); + return false; + } + + idRemoval.getTypeIdsOfModifiedDictionaries().forEach(changedTypeId -> addToDictionary(changedTypeId, value, dossier.getId(), fileId, DictionaryEntryType.ENTRY)); + removeRedactionPersistenceService.updateStatus(fileId, annotationId, idRemoval.getStatus(), true, Collections.emptySet()); + return true; + } + + + private boolean handleRemoveFromDictionary(RedactionLogEntry redactionLogEntry, DossierEntity dossier, String fileId, RemoveRedactionRequest removeRedactionRequest) { + + if (!removeRedactionRequest.isApproved()) { + return false; + } + + if (!removeRedactionRequest.isRemoveFromDictionary()) { + removeRedactionPersistenceService.updateStatus(fileId, removeRedactionRequest.getAnnotationId(), removeRedactionRequest.getStatus(), false, Collections.emptySet()); + return false; + } + + Set typeIdsOfModifiedDictionaries = new HashSet<>(); + if (removeRedactionRequest.isRemoveFromAllDossiers()) { + var dictionaryEntriesToRemove = dictionaryManagementService.getAllEntriesInDossierTemplate(toTypeId(redactionLogEntry.getType(), dossier.getDossierTemplateId()), + redactionLogEntry.getValue()); + dictionaryEntriesToRemove.forEach(entry -> { + typeIdsOfModifiedDictionaries.add(entry.getTypeId()); + removeFromDictionary(entry.getTypeId(), entry.getValue(), dossier.getId(), fileId, DictionaryEntryType.ENTRY); + }); + } else { + typeIdsOfModifiedDictionaries.add(toTypeId(redactionLogEntry.getType(), dossier.getDossierTemplateId(), dossier.getId())); + removeFromDictionary(toTypeId(redactionLogEntry.getType(), dossier.getDossierTemplateId(), dossier.getId()), + redactionLogEntry.getValue(), + dossier.getId(), + fileId, + DictionaryEntryType.ENTRY); + } + + // This is needed to remove resizeRedactions with addToDictionary. + removeResizeRedactionsWithAddToDictionary(dossier.getDossierTemplateId(), redactionLogEntry.getValue()); + + removeRedactionPersistenceService.updateStatus(fileId, removeRedactionRequest.getAnnotationId(), removeRedactionRequest.getStatus(), true, typeIdsOfModifiedDictionaries); + return true; } private RedactionLogEntry getRedactionLogEntry(RedactionLog redactionLog, String annotationId) { - Optional redactionLogEntryOptional = redactionLog.getRedactionLogEntry().stream().filter(entry -> entry.getId().equals(annotationId)).findFirst(); - - if (redactionLogEntryOptional.isEmpty()) { - throw new NotFoundException("Annotation does not exist in redaction log."); - } - - var redactionLogEntry = redactionLogEntryOptional.get(); - return redactionLogEntry; + return redactionLog.getRedactionLogEntry() + .stream() + .filter(entry -> entry.getId().equals(annotationId)) + .findFirst() + .orElseThrow(() -> new NotFoundException("Annotation does not exist in redaction log.")); } @@ -381,21 +368,18 @@ public class ManualRedactionService { var response = new ArrayList(); dossierPersistenceService.getAndValidateDossier(dossierId); - var actionPerformed = false; + var requiresReanalysis = false; for (var forceRedactionRequest : forceRedactionRequests) { forceRedactionPersistenceService.insert(fileId, forceRedactionRequest); - Long commentId = null; - if (forceRedactionRequest.getComment() != null) { + Long commentId = addComment(fileId, forceRedactionRequest.getAnnotationId(), forceRedactionRequest.getComment(), forceRedactionRequest.getUser()).getId(); - commentId = addComment(fileId, forceRedactionRequest.getAnnotationId(), forceRedactionRequest.getComment(), forceRedactionRequest.getUser()).getId(); - } - actionPerformed = actionPerformed || forceRedactionRequest.getStatus().equals(AnnotationStatus.APPROVED); + requiresReanalysis = requiresReanalysis || forceRedactionRequest.isApproved(); response.add(ManualAddResponse.builder().annotationId(forceRedactionRequest.getAnnotationId()).commentId(commentId).build()); } - if (actionPerformed) { + if (requiresReanalysis) { reprocess(dossierId, fileId); } @@ -414,11 +398,7 @@ public class ManualRedactionService { for (var legalBasisChangeRequest : legalBasisChangeRequests) { legalBasisChangePersistenceService.insert(fileId, legalBasisChangeRequest); - Long commentId = null; - if (legalBasisChangeRequest.getComment() != null) { - - commentId = addComment(fileId, legalBasisChangeRequest.getAnnotationId(), legalBasisChangeRequest.getComment(), legalBasisChangeRequest.getUser()).getId(); - } + Long commentId = addComment(fileId, legalBasisChangeRequest.getAnnotationId(), legalBasisChangeRequest.getComment(), legalBasisChangeRequest.getUser()).getId(); response.add(ManualAddResponse.builder().annotationId(legalBasisChangeRequest.getAnnotationId()).commentId(commentId).build()); } @@ -429,27 +409,20 @@ public class ManualRedactionService { @Transactional - public List addImageRecategorization(String dossierId, String fileId, List imageRecategorizationRequests) { + public List addRecategorization(String dossierId, String fileId, List recategorizationRequests) { var response = new ArrayList(); var actionPerformed = false; dossierPersistenceService.getAndValidateDossier(dossierId); - for (var imageRecategorizationRequest : imageRecategorizationRequests) { - recategorizationPersistenceService.insert(fileId, imageRecategorizationRequest); + for (var recategorizationRequest : recategorizationRequests) { + recategorizationPersistenceService.insert(fileId, recategorizationRequest); - Long commentId = null; - if (imageRecategorizationRequest.getComment() != null) { + Long commentId = addComment(fileId, recategorizationRequest.getAnnotationId(), recategorizationRequest.getComment(), recategorizationRequest.getUser()).getId(); - commentId = addComment(fileId, - imageRecategorizationRequest.getAnnotationId(), - imageRecategorizationRequest.getComment(), - imageRecategorizationRequest.getUser()).getId(); - } + actionPerformed = actionPerformed || recategorizationRequest.getStatus().equals(AnnotationStatus.APPROVED); - actionPerformed = actionPerformed || imageRecategorizationRequest.getStatus().equals(AnnotationStatus.APPROVED); - - response.add(ManualAddResponse.builder().annotationId(imageRecategorizationRequest.getAnnotationId()).commentId(commentId).build()); + response.add(ManualAddResponse.builder().annotationId(recategorizationRequest.getAnnotationId()).commentId(commentId).build()); } if (actionPerformed) { reprocess(dossierId, fileId); @@ -463,7 +436,7 @@ public class ManualRedactionService { public CommentEntity addComment(String fileId, String annotationId, CommentRequest commentRequest) { - var createdComment = addComment(fileId, annotationId, commentRequest.getText(), commentRequest.getUser()); + CommentEntity createdComment = addComment(fileId, annotationId, commentRequest.getText(), commentRequest.getUser()); fileStatusPersistenceService.updateHasComments(fileId, true); @@ -475,24 +448,17 @@ public class ManualRedactionService { public void deleteAddRedaction(String dossierId, String fileId, List annotationIds) { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); - var actionPerformed = false; + var changedDictionary = false; - for (var annotationId : annotationIds) { - var addRedaction = getAddRedaction(fileId, annotationId); - actionPerformed = actionPerformed || handleAddToDictionary(fileId, - annotationId, - addRedaction.getTypeId(), - addRedaction.getValue(), - addRedaction.getStatus(), - addRedaction.isAddToDictionary(), - addRedaction.isAddToAllDossiers(), - true, - dossier.getId(), - addRedaction.getDictionaryEntryType()); + for (String annotationId : annotationIds) { + ManualRedactionEntryEntity addRedaction = getAddRedaction(fileId, annotationId); + + changedDictionary = manualRedactionDictionaryUpdateHandler.revertAddToDictionary(fileId, dossier.getId(), addRedaction) || changedDictionary; + addRedactionPersistenceService.updateStatus(fileId, annotationId, AnnotationStatus.APPROVED, false, null); addRedactionPersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); } - if (actionPerformed) { + if (changedDictionary) { reprocess(dossierId, fileId); } @@ -504,27 +470,20 @@ public class ManualRedactionService { public void deleteRemoveRedaction(String dossierId, String fileId, List annotationIds) { var dossier = dossierPersistenceService.getAndValidateDossier(dossierId); - var actionPerformed = false; + var requiresReanalysis = false; RedactionLog redactionLog = redactionLogService.getRedactionLog(dossierId, fileId, true, true); - for (var annotationId : annotationIds) { + for (String annotationId : annotationIds) { - var removeRedaction = getRemoveRedaction(fileId, annotationId); + IdRemovalEntity removeRedaction = getRemoveRedaction(fileId, annotationId); + String originalValue = getRedactionLogEntry(redactionLog, annotationId).getValue(); + boolean dictionaryChanged = revertRemoveFromDictionary(originalValue, dossier, fileId, removeRedaction); - var removedFromDictionary = handleRemoveFromDictionary(redactionLog, - dossier, - fileId, - annotationId, - removeRedaction.getStatus(), - removeRedaction.isRemoveFromDictionary(), - removeRedaction.isRemoveFromAllDossiers(), - true); - - actionPerformed = actionPerformed || removedFromDictionary; + requiresReanalysis = requiresReanalysis || dictionaryChanged; removeRedactionPersistenceService.softDelete(fileId, annotationId, OffsetDateTime.now()); } - if (actionPerformed) { + if (requiresReanalysis) { reprocess(dossierId, fileId); } @@ -612,7 +571,7 @@ public class ManualRedactionService { @Transactional public List addResizeRedaction(String dossierId, String fileId, List resizeRedactionRequests) { - var response = new ArrayList(); + List response = new ArrayList<>(); RedactionLog redactionLog = redactionLogService.getRedactionLog(dossierId, fileId, true, true); @@ -621,14 +580,14 @@ public class ManualRedactionService { var resizeRedaction = resizeRedactionPersistenceService.insert(fileId, resizeRedactionRequest); if (resizeRedactionRequest.getComment() != null) { - var commentId = addComment(fileId, resizeRedactionRequest.getAnnotationId(), resizeRedactionRequest.getComment(), resizeRedactionRequest.getUser()).getId(); + Long commentId = addComment(fileId, resizeRedactionRequest.getAnnotationId(), resizeRedactionRequest.getComment(), resizeRedactionRequest.getUser()).getId(); response.add(ManualAddResponse.builder().annotationId(resizeRedactionRequest.getAnnotationId()).commentId(commentId).build()); } updateDictionaryForResizeRedactions(dossierId, fileId, resizeRedaction, redactionLog); } - if (resizeRedactionRequests.stream().anyMatch(resize -> AnnotationStatus.APPROVED.equals(resize.getStatus()))) { + if (resizeRedactionRequests.stream().anyMatch(BaseManualRequest::isApproved)) { reprocess(dossierId, fileId); } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/ImageRecategorizationPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/ImageRecategorizationPersistenceService.java index 3c96b3032..632b6d3cf 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/ImageRecategorizationPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/ImageRecategorizationPersistenceService.java @@ -13,7 +13,7 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.annotati import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.ImageRecategorizationRepository; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus; -import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ImageRecategorizationRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.RecategorizationRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -26,11 +26,11 @@ public class ImageRecategorizationPersistenceService { private final ImageRecategorizationRepository imageRecategorizationRepository; - public void insert(String fileId, ImageRecategorizationRequest imageRecategorizationRequest) { + public void insert(String fileId, RecategorizationRequest recategorizationRequest) { ManualImageRecategorizationEntity manualImageRecategorization = new ManualImageRecategorizationEntity(); - manualImageRecategorization.setId(new AnnotationEntityId(imageRecategorizationRequest.getAnnotationId(), fileId)); - BeanUtils.copyProperties(imageRecategorizationRequest, manualImageRecategorization); + manualImageRecategorization.setId(new AnnotationEntityId(recategorizationRequest.getAnnotationId(), fileId)); + BeanUtils.copyProperties(recategorizationRequest, manualImageRecategorization); manualImageRecategorization.setRequestDate(OffsetDateTime.now()); imageRecategorizationRepository.saveAndFlush(manualImageRecategorization); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/redactionlog/RedactionLogMergeService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/redactionlog/RedactionLogMergeService.java index 38dc7672a..31f11bce4 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/redactionlog/RedactionLogMergeService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/redactionlog/RedactionLogMergeService.java @@ -187,7 +187,7 @@ public class RedactionLogMergeService { Object item = mrw.getItem(); if (item instanceof ManualImageRecategorization) { var imageRecategorization = (ManualImageRecategorization) item; - processManualImageRecategorization(redactionLogEntry, types, colors, imageRecategorization); + processManualRecategorization(redactionLogEntry, types, colors, imageRecategorization); } if (item instanceof IdRemoval) { @@ -215,13 +215,12 @@ public class RedactionLogMergeService { } - private void processManualImageRecategorization(RedactionLogEntry redactionLogEntry, List types, Colors colors, ManualImageRecategorization imageRecategorization) { + private void processManualRecategorization(RedactionLogEntry redactionLogEntry, List types, Colors colors, ManualImageRecategorization imageRecategorization) { String manualOverrideReason = null; if (imageRecategorization.getStatus().equals(AnnotationStatus.APPROVED)) { redactionLogEntry.setType(imageRecategorization.getType()); - redactionLogEntry.setSection("Image:" + redactionLogEntry.getType()); if (isHint(types, imageRecategorization.getType())) { redactionLogEntry.setRedacted(false); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java index 2f2ebdb01..fbf87c741 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java @@ -14,8 +14,13 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.ProcessingStatus; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.WorkflowStatus; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.*; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddCommentRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ForceRedactionRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RecategorizationRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.LegalBasisChangeRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RemoveRedactionRequestModel; + import feign.FeignException; import lombok.SneakyThrows; import org.junit.jupiter.api.Assertions; @@ -329,7 +334,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest { var addRedaction = manualRedactionClient.addRedactionBulk(dossierId, fileId, - Set.of(AddRedactionRequest.builder() + Set.of(AddRedactionRequestModel.builder() .addToDictionary(true) .type(type.getType()) .addToAllDossiers(true) @@ -340,16 +345,16 @@ public class FileTest extends AbstractPersistenceServerServiceTest { .build())).iterator().next(); manualRedactionClient.removeRedactionBulk(dossierId, fileId, - Set.of(RemoveRedactionRequest.builder().annotationId(addRedaction.getAnnotationId()).comment("comment").removeFromDictionary(false).build())); + Set.of(RemoveRedactionRequestModel.builder().annotationId(addRedaction.getAnnotationId()).comment("comment").removeFromDictionary(false).build())); manualRedactionClient.forceRedactionBulk(dossierId, fileId, - Set.of(ForceRedactionRequest.builder().annotationId("forceRedactionAnnotation").comment("comment").legalBasis("1").build())); + Set.of(ForceRedactionRequestModel.builder().annotationId("forceRedactionAnnotation").comment("comment").legalBasis("1").build())); manualRedactionClient.legalBasisChangeBulk(dossierId, fileId, - Set.of(LegalBasisChangeRequest.builder().annotationId("legalBasisChangeAnnotation").comment("comment").legalBasis("1").build())); - manualRedactionClient.recategorizeImageBulk(dossierId, + Set.of(LegalBasisChangeRequestModel.builder().annotationId("legalBasisChangeAnnotation").comment("comment").legalBasis("1").build())); + manualRedactionClient.recategorizeBulk(dossierId, fileId, - Set.of(ImageRecategorizationRequest.builder().annotationId("imageRecategorizationAnnotation").comment("comment").type("new-type").build())); + Set.of(RecategorizationRequestModel.builder().annotationId("imageRecategorizationAnnotation").comment("comment").type("new-type").build())); var loadedFile = fileClient.getFileStatus(dossierId, fileId); @@ -396,10 +401,10 @@ public class FileTest extends AbstractPersistenceServerServiceTest { var addRedaction = manualRedactionClient.addRedactionBulk(dossierId, fileId, - Set.of(AddRedactionRequest.builder() + Set.of(AddRedactionRequestModel.builder() .addToDictionary(true) .addToAllDossiers(true) - .comment(new AddCommentRequest("comment")) + .comment(new AddCommentRequestModel("comment")) .type(type.getType()) .reason("1") .value("test") 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 da817ecf5..e6f9696fb 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 @@ -16,9 +16,9 @@ import com.iqser.red.service.persistence.management.v1.processor.service.redacti import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RemoveRedactionRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ResizeRedactionRequest; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RemoveRedactionRequestModel; +import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.ResizeRedactionRequestModel; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry; import feign.FeignException; @@ -110,7 +110,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { Assertions.assertThrows(FeignException.Forbidden.class, () -> manualRedactionClient.removeRedactionBulk(dossier.getId(), file.getId(), - Set.of(RemoveRedactionRequest.builder().annotationId("AnnotationId").removeFromDictionary(true).removeFromAllDossiers(true).build())));//.get(0); + Set.of(RemoveRedactionRequestModel.builder().annotationId("AnnotationId").removeFromDictionary(true).removeFromAllDossiers(true).build())));//.get(0); var dossierTemplateDictionary = internalDictionaryClient.getDictionaryForType(toTypeId(type.getType(), dossierTemplate.getDossierTemplateId()), null); assertThat(dossierTemplateDictionary.getEntries().size()).isZero(); @@ -131,7 +131,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { manualRedactionClient.addRedactionBulk(dossier.getId(), file.getId(), - Set.of(AddRedactionRequest.builder() + Set.of(AddRedactionRequestModel.builder() .positions(List.of(Rectangle.builder().topLeftY(1).topLeftX(1).height(1).width(1).build())) .section("section test") .addToDictionary(true) @@ -166,7 +166,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { manualRedactionClient.addRedactionBulk(dossier.getId(), file.getId(), - Set.of(AddRedactionRequest.builder() + Set.of(AddRedactionRequestModel.builder() .positions(List.of(Rectangle.builder().topLeftY(1).topLeftX(1).height(1).width(1).build())) .section("section test") .addToDictionary(true) @@ -201,7 +201,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { manualRedactionClient.addRedactionBulk(dossier.getId(), file.getId(), - Set.of(AddRedactionRequest.builder() + Set.of(AddRedactionRequestModel.builder() .positions(List.of(Rectangle.builder().topLeftY(1).topLeftX(1).height(1).width(1).build())) .section("section test") .addToDictionary(true) @@ -258,7 +258,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { manualRedactionClient.removeRedactionBulk(dossier.getId(), file.getId(), - Set.of(RemoveRedactionRequest.builder().annotationId("AnnotationId").removeFromDictionary(true).removeFromAllDossiers(true).build())).get(0); + Set.of(RemoveRedactionRequestModel.builder().annotationId("AnnotationId").removeFromDictionary(true).removeFromAllDossiers(true).build())).get(0); dossierTemplateDictionary = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), null); assertThat(dossierTemplateDictionary.getEntries()).containsExactlyInAnyOrder("Darth Vader"); @@ -306,7 +306,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { manualRedactionClient.removeRedactionBulk(dossier.getId(), file.getId(), - Set.of(RemoveRedactionRequest.builder().annotationId("AnnotationId").removeFromDictionary(true).build())).get(0); + Set.of(RemoveRedactionRequestModel.builder().annotationId("AnnotationId").removeFromDictionary(true).build())).get(0); var dossierDictionary = internalDictionaryClient.getDictionaryForType(toTypeId(type.getType(), dossierTemplate.getDossierTemplateId(), dossier.getDossierId()), null); @@ -347,7 +347,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { manualRedactionClient.removeRedactionBulk(dossier.getId(), file.getId(), - Set.of(RemoveRedactionRequest.builder().annotationId("AnnotationId").removeFromDictionary(true).removeFromAllDossiers(true).build())).get(0); + Set.of(RemoveRedactionRequestModel.builder().annotationId("AnnotationId").removeFromDictionary(true).removeFromAllDossiers(true).build())).get(0); var dossierDictionary = internalDictionaryClient.getDictionaryForType(toTypeId(type.getType(), dossierTemplate.getDossierTemplateId(), dossier.getDossierId()), null); assertThat(dossierDictionary.getEntries().size()).isEqualTo(1); @@ -375,7 +375,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { var userId = userProvider.getUserId(); - var redactionDos = AddRedactionRequest.builder() + var redactionDos = AddRedactionRequestModel.builder() .positions(List.of(Rectangle.builder().page(1).topLeftY(1).topLeftX(1).height(1).width(1).build())) .section("section test") .addToDictionary(true) @@ -389,7 +389,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .sourceId("SourceId") .build(); - var redactionDosTempDict = AddRedactionRequest.builder() + var redactionDosTempDict = AddRedactionRequestModel.builder() .positions(List.of(Rectangle.builder().page(1).topLeftY(1).topLeftX(1).height(1).width(1).build())) .section("section test") .addToDictionary(true) @@ -449,7 +449,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { when(redactionLogService.getRedactionLog(file2.getDossierId(), file2.getFileId(), true, true)).thenReturn(redactionLog2); // resize redaction in dossier 1 - var resizeRedactionDosAndAddToAllDos = ResizeRedactionRequest.builder() + var resizeRedactionDosAndAddToAllDos = ResizeRedactionRequestModel.builder() .annotationId(addRedactions.get(0).getAnnotationId()) .comment("resized dossier redaction") .value("test redaction in dossier dictionary") @@ -524,7 +524,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { var userId = userProvider.getUserId(); - var redactionDos = AddRedactionRequest.builder() + var redactionDos = AddRedactionRequestModel.builder() .positions(List.of(Rectangle.builder().page(1).topLeftY(1).topLeftX(1).height(1).width(1).build())) .section("section test") .addToDictionary(true) @@ -538,7 +538,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .sourceId("SourceId") .build(); - var redactionDosTempDict = AddRedactionRequest.builder() + var redactionDosTempDict = AddRedactionRequestModel.builder() .positions(List.of(Rectangle.builder().page(1).topLeftY(1).topLeftX(1).height(1).width(1).build())) .section("section test") .addToDictionary(true) @@ -598,7 +598,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { when(redactionLogService.getRedactionLog(file2.getDossierId(), file2.getFileId(), true, true)).thenReturn(redactionLog2); // resize redaction in dossier 1 - var resizeRedactionDosAndAddToAllDos = ResizeRedactionRequest.builder() + var resizeRedactionDosAndAddToAllDos = ResizeRedactionRequestModel.builder() .annotationId(addRedactions.get(0).getAnnotationId()) .comment("resized dossier redaction") .value("test redaction in dossier") @@ -676,7 +676,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { var userId = userProvider.getUserId(); - var redactionDos = AddRedactionRequest.builder() + var redactionDos = AddRedactionRequestModel.builder() .positions(List.of(Rectangle.builder().page(1).topLeftY(1).topLeftX(1).height(1).width(1).build())) .section("section test") .addToDictionary(true) @@ -690,7 +690,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .sourceId("SourceId") .build(); - var redactionDosTempDict = AddRedactionRequest.builder() + var redactionDosTempDict = AddRedactionRequestModel.builder() .positions(List.of(Rectangle.builder().page(1).topLeftY(1).topLeftX(1).height(1).width(1).build())) .section("section test") .addToDictionary(true) @@ -749,7 +749,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { when(redactionLogService.getRedactionLog(file2.getDossierId(), file2.getFileId(), true, true)).thenReturn(redactionLog2); // resize redaction in dossier dict - var resizeRedactionDosTemp = ResizeRedactionRequest.builder() + var resizeRedactionDosTemp = ResizeRedactionRequestModel.builder() .annotationId(addRedactions.get(1).getAnnotationId()) .comment("resized dossier template redaction") .value("test redaction in dossier template dictionary") @@ -824,7 +824,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { var userId = userProvider.getUserId(); - var redactionDos = AddRedactionRequest.builder() + var redactionDos = AddRedactionRequestModel.builder() .positions(List.of(Rectangle.builder().page(1).topLeftY(1).topLeftX(1).height(1).width(1).build())) .section("section test") .addToDictionary(true) @@ -838,7 +838,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .sourceId("SourceId") .build(); - var redactionDosTempDict = AddRedactionRequest.builder() + var redactionDosTempDict = AddRedactionRequestModel.builder() .positions(List.of(Rectangle.builder().page(1).topLeftY(1).topLeftX(1).height(1).width(1).build())) .section("section test") .addToDictionary(true) @@ -897,7 +897,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { when(redactionLogService.getRedactionLog(file2.getDossierId(), file2.getFileId(), true, true)).thenReturn(redactionLog2); // resize redaction in dossier dict - var resizeRedactionDosTemp = ResizeRedactionRequest.builder() + var resizeRedactionDosTemp = ResizeRedactionRequestModel.builder() .annotationId(addRedactions.get(1).getAnnotationId()) .comment("resized dossier template redaction") .value("test redaction in dossier template") diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/AddRedactionRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/AddRedactionRequest.java index 3d7f37771..7ee98a327 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/AddRedactionRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/AddRedactionRequest.java @@ -14,7 +14,7 @@ import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor -public class AddRedactionRequest { +public class AddRedactionRequest implements ManualRequestWithDictionary { private String user; private String dossierTemplateTypeId; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/BaseManualRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/BaseManualRequest.java new file mode 100644 index 000000000..675df57e1 --- /dev/null +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/BaseManualRequest.java @@ -0,0 +1,13 @@ +package com.iqser.red.service.persistence.service.v1.api.shared.model.annotations; + +public interface BaseManualRequest { + + AnnotationStatus getStatus(); + + + default boolean isApproved() { + + return getStatus().equals(AnnotationStatus.APPROVED); + } + +} diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ForceRedactionRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ForceRedactionRequest.java index 5e0cdc677..c84ff57c2 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ForceRedactionRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ForceRedactionRequest.java @@ -9,7 +9,7 @@ import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor -public class ForceRedactionRequest { +public class ForceRedactionRequest implements BaseManualRequest { private String annotationId; private String user; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ImageRecategorizationRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ImageRecategorizationRequest.java deleted file mode 100644 index cf31c02e8..000000000 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ImageRecategorizationRequest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.iqser.red.service.persistence.service.v1.api.shared.model.annotations; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class ImageRecategorizationRequest { - - private String annotationId; - private String user; - private AnnotationStatus status; - private String typeId; - private String comment; - private int page; - -} diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ManualRequestWithDictionary.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ManualRequestWithDictionary.java new file mode 100644 index 000000000..476f23113 --- /dev/null +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ManualRequestWithDictionary.java @@ -0,0 +1,14 @@ +package com.iqser.red.service.persistence.service.v1.api.shared.model.annotations; + +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; + +public interface ManualRequestWithDictionary extends BaseManualRequest{ + + String getValue(); + boolean isAddToDictionary(); + boolean isAddToAllDossiers(); + boolean isForceAddToDictionary(); + String getDossierTemplateTypeId(); + DictionaryEntryType getDictionaryEntryType(); + +} diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/RecategorizationRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/RecategorizationRequest.java new file mode 100644 index 000000000..43d234829 --- /dev/null +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/RecategorizationRequest.java @@ -0,0 +1,44 @@ +package com.iqser.red.service.persistence.service.v1.api.shared.model.annotations; + +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.DictionaryEntryType; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldDefaults; + +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE) +public class RecategorizationRequest implements ManualRequestWithDictionary { + + String annotationId; + String user; + AnnotationStatus status; + String typeId; + String comment; + int page; + String value; + boolean addToDictionary; + boolean addToAllDossiers; + private DictionaryEntryType dictionaryEntryType; + + + @Override + public boolean isForceAddToDictionary() { + + return true; + } + + + @Override + public String getDossierTemplateTypeId() { + + return typeId; + } + +} diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/RemoveRedactionRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/RemoveRedactionRequest.java index eb94b5453..fbdf4b014 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/RemoveRedactionRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/RemoveRedactionRequest.java @@ -9,7 +9,7 @@ import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor -public class RemoveRedactionRequest { +public class RemoveRedactionRequest implements BaseManualRequest{ private String annotationId; private String user; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ResizeRedactionRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ResizeRedactionRequest.java index 21ff7f76b..ff3df9588 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ResizeRedactionRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/ResizeRedactionRequest.java @@ -12,7 +12,7 @@ import lombok.NoArgsConstructor; @Builder @AllArgsConstructor @NoArgsConstructor -public class ResizeRedactionRequest { +public class ResizeRedactionRequest implements BaseManualRequest{ private String annotationId; private String user; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/AddCommentRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/AddCommentRequestModel.java similarity index 89% rename from persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/AddCommentRequest.java rename to persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/AddCommentRequestModel.java index 02d411a70..70a056b51 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/AddCommentRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/AddCommentRequestModel.java @@ -10,7 +10,7 @@ import lombok.NonNull; @Builder @AllArgsConstructor @NoArgsConstructor -public class AddCommentRequest { +public class AddCommentRequestModel { @NonNull private String text; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/AddRedactionRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/AddRedactionRequestModel.java similarity index 92% rename from persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/AddRedactionRequest.java rename to persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/AddRedactionRequestModel.java index 39186cd13..801dc95d1 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/AddRedactionRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/AddRedactionRequestModel.java @@ -16,7 +16,7 @@ import lombok.NonNull; @Builder @AllArgsConstructor @NoArgsConstructor -public class AddRedactionRequest { +public class AddRedactionRequestModel { @NonNull private String type; @@ -36,7 +36,7 @@ public class AddRedactionRequest { @Builder.Default private List positions = new ArrayList<>(); - private AddCommentRequest comment; + private AddCommentRequestModel comment; private boolean forceAddToDictionary; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ApproveRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ApproveRequestModel.java similarity index 88% rename from persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ApproveRequest.java rename to persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ApproveRequestModel.java index 012e8bedb..7e2face01 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ApproveRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ApproveRequestModel.java @@ -7,7 +7,7 @@ import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor -public class ApproveRequest { +public class ApproveRequestModel { private boolean addOrRemoveFromDictionary; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ForceRedactionRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ForceRedactionRequestModel.java similarity index 90% rename from persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ForceRedactionRequest.java rename to persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ForceRedactionRequestModel.java index bfec48c96..8078eb6e1 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ForceRedactionRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ForceRedactionRequestModel.java @@ -10,7 +10,7 @@ import lombok.NonNull; @Builder @AllArgsConstructor @NoArgsConstructor -public class ForceRedactionRequest { +public class ForceRedactionRequestModel { @NonNull private String annotationId; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ImageRecategorizationRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ImageRecategorizationRequest.java deleted file mode 100644 index d5a5ab696..000000000 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ImageRecategorizationRequest.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.iqser.red.service.persistence.service.v1.api.shared.model.manual; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@Builder -@AllArgsConstructor -@NoArgsConstructor -public class ImageRecategorizationRequest { - - private String annotationId; - private String type; - private String comment; - -} diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/LegalBasisChangeRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/LegalBasisChangeRequestModel.java similarity index 90% rename from persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/LegalBasisChangeRequest.java rename to persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/LegalBasisChangeRequestModel.java index 22a921949..5691ee273 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/LegalBasisChangeRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/LegalBasisChangeRequestModel.java @@ -10,7 +10,7 @@ import lombok.NonNull; @Builder @AllArgsConstructor @NoArgsConstructor -public class LegalBasisChangeRequest { +public class LegalBasisChangeRequestModel { @NonNull private String annotationId; diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ManualRedactionWrapper.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ManualRedactionWrapperModel.java similarity index 70% rename from persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ManualRedactionWrapper.java rename to persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ManualRedactionWrapperModel.java index cb6f603bf..8c2da4973 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ManualRedactionWrapper.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/manual/ManualRedactionWrapperModel.java @@ -7,7 +7,7 @@ import lombok.Data; @Data @AllArgsConstructor -public class ManualRedactionWrapper implements Comparable { +public class ManualRedactionWrapperModel implements Comparable { private String id; private OffsetDateTime date; @@ -15,7 +15,7 @@ public class ManualRedactionWrapper implements Comparable