From b11c95dd3926ba7704535ed40f9e22c0e00966b7 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Tue, 16 Apr 2024 16:58:37 +0200 Subject: [PATCH 1/3] RED-8480: differenciate between recategorize and legal basis change --- .../controller/ManualRedactionController.java | 53 ++++++++++++++++--- .../ManualLegalBasisChangeEntity.java | 1 - .../ManualRedactionMapper.java | 1 - .../ManualRedactionService.java | 16 +++++- .../LegalBasisChangePersistenceService.java | 1 - .../LegalBasisChangeRepository.java | 1 - .../db/changelog/db.changelog-tenant.yaml | 2 + ...al-basis-in-manual-legal-basis-change.yaml | 9 ++++ .../tests/ManualRedactionTest.java | 30 +++++++++++ .../annotations/LegalBasisChangeRequest.java | 1 - .../manual/LegalBasisChangeRequestModel.java | 1 - 11 files changed, 103 insertions(+), 13 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/125-add-max-size-for-legal-basis-in-manual-legal-basis-change.yaml 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 40d90d017..719affe0d 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 @@ -6,6 +6,8 @@ import static com.iqser.red.service.persistence.management.v1.processor.roles.Ac import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DO_MANUAL_REDACTION; import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_MANUAL_REDACTIONS; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -20,6 +22,7 @@ import com.iqser.red.service.persistence.management.v1.processor.model.ManualCha import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService; import com.iqser.red.service.persistence.management.v1.processor.service.CommentService; import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService; +import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService; import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusManagementService; import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService; import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionUndoService; @@ -27,6 +30,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist 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.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationComments; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Comment; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.CommentRequest; @@ -63,6 +67,7 @@ public class ManualRedactionController implements ManualRedactionResource { AccessControlService accessControlService; CommentService commentService; FileStatusManagementService fileStatusManagementService; + EntityLogService entityLogService; @Override @@ -251,6 +256,12 @@ public class ManualRedactionController implements ManualRedactionResource { accessControlService.verifyFileIsNotApproved(dossierId, fileId); accessControlService.verifyUserIsMemberOrApprover(dossierId); + return handleLegalBasisChanges(dossierId, fileId, legalBasisChangeRequests); + } + + + private List handleLegalBasisChanges(String dossierId, String fileId, Set legalBasisChangeRequests) { + List responseList = manualRedactionService.addLegalBasisChange(dossierId, fileId, legalBasisChangeRequests); responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder() @@ -260,7 +271,6 @@ public class ManualRedactionController implements ManualRedactionResource { .message("Legal basis reason was changed") .details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, response.getAnnotationId())) .build())); - return responseList; } @@ -276,11 +286,42 @@ public class ManualRedactionController implements ManualRedactionResource { accessControlService.verifyFileIsNotApproved(dossierId, fileId); accessControlService.verifyUserIsMemberOrApprover(dossierId); - List responseList = manualRedactionService.addRecategorization(dossierId, - fileId, - dossier.getDossierTemplateId(), - recategorizationRequests, - includeUnprocessed); + EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, includeUnprocessed); + + Set recategorizations = new HashSet<>(); + Set legalBasisChanges = new HashSet<>(); + + recategorizationRequests.forEach(recategorizationRequestModel -> { + var entry = entityLog.getEntityLogEntry() + .stream() + .filter(entityLogEntry -> entityLogEntry.getId().equals(recategorizationRequestModel.getAnnotationId())) + .findFirst(); + if (entry.isPresent()) { + if (manualRedactionService.isLegalBasisChangeRequest(recategorizationRequestModel, entry.get())) { + LegalBasisChangeRequestModel legalBasisChange = manualRedactionService.convertRecategorizationToLegalBasisChange(recategorizationRequestModel); + legalBasisChanges.add(legalBasisChange); + } else { + recategorizations.add(recategorizationRequestModel); + } + } + }); + + List responseList = new ArrayList<>(); + + responseList.addAll(handleLegalBasisChanges(dossierId, fileId, legalBasisChanges)); + responseList.addAll(handleRectegorizations(dossierId, fileId, recategorizations, includeUnprocessed, dossier.getDossierTemplateId())); + + return responseList; + } + + + private List handleRectegorizations(String dossierId, + String fileId, + Set recategorizationRequests, + boolean includeUnprocessed, + String dossierTemplateId) { + + List responseList = manualRedactionService.addRecategorization(dossierId, fileId, dossierTemplateId, recategorizationRequests, includeUnprocessed); responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder() .userId(KeycloakSecurity.getUserId()) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java index 0d2a76e61..fd9a9e2e5 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/entity/annotations/ManualLegalBasisChangeEntity.java @@ -14,7 +14,6 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -@Deprecated(forRemoval = true) @Data @Builder @AllArgsConstructor diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionMapper.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionMapper.java index 895598a1f..d96704701 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionMapper.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/ManualRedactionMapper.java @@ -138,7 +138,6 @@ public class ManualRedactionMapper { } - @Deprecated(forRemoval = true) public List toLegalBasisChangeRequestList(String dossierId, String fileId, Set legalBasisChangeRequests, diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/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 index 5e566698c..a2f9cd69a 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/manualredactions/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 @@ -13,6 +13,7 @@ import java.util.stream.Collectors; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; @@ -230,7 +231,6 @@ public class ManualRedactionService { } - @Deprecated(forRemoval = true) @Transactional public List addLegalBasisChange(String dossierId, String fileId, Set legalBasisChangeRequests) { @@ -239,6 +239,8 @@ public class ManualRedactionService { var requests = manualRedactionMapper.toLegalBasisChangeRequestList(dossierId, fileId, legalBasisChangeRequests, getEntityLogEntryConsumer(fileId)); for (var legalBasisChangeRequest : requests) { + checkLegalBasisLength(legalBasisChangeRequest.getLegalBasis()); + legalBasisChangePersistenceService.insert(fileId, legalBasisChangeRequest); Long commentId = commentService.addCommentAndGetId(fileId, @@ -538,4 +540,16 @@ public class ManualRedactionService { return entry -> addManualRedactionEntry(fileId, entry); } + + public LegalBasisChangeRequestModel convertRecategorizationToLegalBasisChange(RecategorizationRequestModel recategorizationRequestModel) { + + return MagicConverter.convert(recategorizationRequestModel, LegalBasisChangeRequestModel.class); + } + + + public boolean isLegalBasisChangeRequest(RecategorizationRequestModel requestModel, EntityLogEntry entry) { + + return !ObjectUtils.isEmpty(requestModel.getLegalBasis()) && !requestModel.getLegalBasis().equals(entry.getLegalBasis()); + } + } diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/LegalBasisChangePersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/LegalBasisChangePersistenceService.java index 4d78698dd..520c15a27 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/LegalBasisChangePersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/annotations/LegalBasisChangePersistenceService.java @@ -22,7 +22,6 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -@Deprecated(forRemoval = true) @Slf4j @Service @RequiredArgsConstructor diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/LegalBasisChangeRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/LegalBasisChangeRepository.java index af39ad66e..2d2e8d9a5 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/LegalBasisChangeRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/annotationentity/LegalBasisChangeRepository.java @@ -12,7 +12,6 @@ import org.springframework.data.repository.query.Param; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId; import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualLegalBasisChangeEntity; -@Deprecated(forRemoval = true) public interface LegalBasisChangeRepository extends JpaRepository, AnnotationEntityRepository { @Modifying diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml index 000eedd81..2bd9b147d 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/db.changelog-tenant.yaml @@ -197,3 +197,5 @@ databaseChangeLog: file: db/changelog/tenant/124-create-migration-required-status-for-each-present-file.yaml - include: file: db/changelog/tenant/sql/207-acl-migration-cleanup.sql + - include: + file: db/changelog/tenant/125-add-max-size-for-legal-basis-in-manual-legal-basis-change.yaml diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/125-add-max-size-for-legal-basis-in-manual-legal-basis-change.yaml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/125-add-max-size-for-legal-basis-in-manual-legal-basis-change.yaml new file mode 100644 index 000000000..086671478 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/db/changelog/tenant/125-add-max-size-for-legal-basis-in-manual-legal-basis-change.yaml @@ -0,0 +1,9 @@ +databaseChangeLog: + - changeSet: + id: add-legal-basis-change-to-manual-recategorization + author: ali + changes: + - modifyDataType: + columnName: legal_basis + newDataType: VARCHAR(4000) + tableName: manual_legal_basis_change \ No newline at end of file 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 2d0e085b9..623549100 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 @@ -38,6 +38,7 @@ import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPers import com.iqser.red.service.persistence.management.v1.processor.service.DictionaryManagementService; import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService; import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; +import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.EntryPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.redactionlog.RedactionRequest; @@ -113,6 +114,9 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { @Autowired private FileProcessingClient fileProcessingClient; + @Autowired + private ManualRedactionService manualRedactionService; + @Test public void testRemoveToDossierTemplateWithDossierDictionaryOnlyTrue() { @@ -2355,4 +2359,30 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertTrue(errorMessage.contains("Redaction value can not exceed 4000 characters")); } + + @Test + public void testConvertRecategorizeToLegalBasisChange() { + + RecategorizationRequestModel r = RecategorizationRequestModel.builder() + .annotationId("id") + .type("type 1") + .comment("Kommi") + .addToDictionary(false) + .addToAllDossiers(false) + .section("here") + .legalBasis("some legal basis") + .value("val") + .build(); + + LegalBasisChangeRequestModel l = manualRedactionService.convertRecategorizationToLegalBasisChange(r); + + assertEquals(r.getAnnotationId(), l.getAnnotationId()); + assertEquals(r.getComment(), l.getComment()); + assertEquals(r.getLegalBasis(), l.getLegalBasis()); + assertEquals(r.getSection(), l.getSection()); + assertEquals(r.getValue(), l.getValue()); + + } + + } 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/LegalBasisChangeRequest.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/LegalBasisChangeRequest.java index 31be31923..881a9b943 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/LegalBasisChangeRequest.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/LegalBasisChangeRequest.java @@ -5,7 +5,6 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -@Deprecated(forRemoval = true) @Data @Builder @AllArgsConstructor 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/LegalBasisChangeRequestModel.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 index 66c230dd8..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/LegalBasisChangeRequestModel.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 @@ -6,7 +6,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.NonNull; -@Deprecated(forRemoval = true) @Data @Builder @AllArgsConstructor -- 2.47.2 From dcb5c0e03e1f4fabbe270658a790f1c5d08b4cfd Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Tue, 16 Apr 2024 18:10:42 +0200 Subject: [PATCH 2/3] RED-8480: differenciate between recategorize and legal basis change --- .../v1/processor/service/EntityLogMergeService.java | 2 -- .../v1/server/integration/tests/ManualRedactionTest.java | 8 ++++---- .../annotations/entitymapped/ManualLegalBasisChange.java | 1 - 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java index 8605daa86..931b33569 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java @@ -357,7 +357,6 @@ public class EntityLogMergeService { } - @Deprecated(forRemoval = true) private void mergeLegalBasisChange(ManualLegalBasisChange manualLegalBasisChange, EntityLogEntry entityLogEntry, int analysisNumber) { @@ -379,7 +378,6 @@ public class EntityLogMergeService { } - @Deprecated(forRemoval = true) private Map getPropertyChanges(ManualLegalBasisChange manualLegalBasisChange) { Map propertyChanges = new HashMap<>(); 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 623549100..0e72469fe 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 @@ -2102,14 +2102,14 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recatModel), false); var allManualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId(), false, true); - assertEquals(1, allManualRedactions.getRecategorizations().size()); - assertTrue(allManualRedactions.getRecategorizations() + assertEquals(1, allManualRedactions.getLegalBasisChanges().size()); + assertTrue(allManualRedactions.getLegalBasisChanges() .stream() .anyMatch(entry -> entry.getAnnotationId().equals("annotationId"))); - assertTrue(allManualRedactions.getRecategorizations() + assertTrue(allManualRedactions.getLegalBasisChanges() .stream() .anyMatch(entry -> entry.getLegalBasis().equals("lb2"))); - assertTrue(allManualRedactions.getRecategorizations() + assertTrue(allManualRedactions.getLegalBasisChanges() .stream() .anyMatch(entry -> entry.getSection().equals("section"))); } 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/entitymapped/ManualLegalBasisChange.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/entitymapped/ManualLegalBasisChange.java index c06399fef..c04f12e80 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/entitymapped/ManualLegalBasisChange.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/annotations/entitymapped/ManualLegalBasisChange.java @@ -6,7 +6,6 @@ import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; -@Deprecated(forRemoval = true) @Data @SuperBuilder @NoArgsConstructor -- 2.47.2 From 1d47744b3034da0907297a76822c150db8173e96 Mon Sep 17 00:00:00 2001 From: Ali Oezyetimoglu Date: Wed, 17 Apr 2024 15:14:36 +0200 Subject: [PATCH 3/3] RED-8480: small fixes and tests --- .../service/EntityLogMergeService.java | 2 - .../tests/ManualRedactionTest.java | 210 ++++++++++++++---- .../entitylog/ManualRedactionType.java | 2 +- 3 files changed, 163 insertions(+), 51 deletions(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java index 931b33569..b7ed57a53 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/EntityLogMergeService.java @@ -411,8 +411,6 @@ public class EntityLogMergeService { entityLogEntry.setEntryType(getEntryType(isHint, recategorization.getType())); - entityLogEntry.setState(isHint ? EntryState.SKIPPED : EntryState.APPLIED); // TODO: only set applied if legalBasis is set by recategorization - entityLogEntry.getEngines().add(Engine.MANUAL); if (!Strings.isNullOrEmpty(recategorization.getLegalBasis())) { 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 0e72469fe..eb1502180 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 @@ -12,6 +12,7 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; +import java.time.OffsetDateTime; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -44,14 +45,20 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.redactionlog.RedactionRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult; import com.iqser.red.service.persistence.service.v1.api.shared.model.Dictionary; +import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel; import com.iqser.red.service.persistence.service.v1.api.shared.model.MessageType; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Change; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.ChangeType; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Engine; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogEntry; +import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogLegalBasis; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryState; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryType; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Position; 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.Rectangle; +import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier; 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.AddRedactionRequestModel; @@ -2135,14 +2142,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .legalBasis("legal basis") .positions(List.of(new Position(1, 1, 1, 1, 1))) .build(); - var entityLog = new EntityLog(1, - 1, - List.of(entityLogEntry), - null, - 0, - 0, - 0, - 0); + var entityLog = new EntityLog(1, 1, List.of(entityLogEntry), null, 0, 0, 0, 0); fileManagementStorageService.storeJSONObject(dossier.getId(), file.getId(), FileType.ENTITY_LOG, entityLog); when(entityLogService.getEntityLog(any(), any(), anyBoolean())).thenReturn(entityLog); @@ -2160,7 +2160,10 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertEquals(allManualRedactions.getRecategorizations().size(), 1); assertEquals(allManualRedactions.getEntriesToAdd().size(), 1); - var entryToAdd = allManualRedactions.getEntriesToAdd().stream().findFirst().get(); + var entryToAdd = allManualRedactions.getEntriesToAdd() + .stream() + .findFirst() + .get(); assertFalse(entryToAdd.isAddToDictionary()); assertFalse(entryToAdd.isAddToDossierDictionary()); assertEquals(entryToAdd.getValue(), entityLogEntry.getValue()); @@ -2187,14 +2190,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .legalBasis("legal basis") .positions(List.of(new Position(1, 1, 1, 1, 1))) .build(); - var entityLog = new EntityLog(1, - 1, - List.of(entityLogEntry), - null, - 0, - 0, - 0, - 0); + var entityLog = new EntityLog(1, 1, List.of(entityLogEntry), null, 0, 0, 0, 0); fileManagementStorageService.storeJSONObject(dossier.getId(), file.getId(), FileType.ENTITY_LOG, entityLog); when(entityLogService.getEntityLog(any(), any(), anyBoolean())).thenReturn(entityLog); @@ -2210,7 +2206,10 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertEquals(allManualRedactions.getLegalBasisChanges().size(), 1); assertEquals(allManualRedactions.getEntriesToAdd().size(), 1); - var entryToAdd = allManualRedactions.getEntriesToAdd().stream().findFirst().get(); + var entryToAdd = allManualRedactions.getEntriesToAdd() + .stream() + .findFirst() + .get(); assertFalse(entryToAdd.isAddToDictionary()); assertFalse(entryToAdd.isAddToDossierDictionary()); assertEquals(entryToAdd.getValue(), entityLogEntry.getValue()); @@ -2237,14 +2236,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .legalBasis("legal basis") .positions(List.of(new Position(1, 1, 1, 1, 1))) .build(); - var entityLog = new EntityLog(1, - 1, - List.of(entityLogEntry), - null, - 0, - 0, - 0, - 0); + var entityLog = new EntityLog(1, 1, List.of(entityLogEntry), null, 0, 0, 0, 0); fileManagementStorageService.storeJSONObject(dossier.getId(), file.getId(), FileType.ENTITY_LOG, entityLog); when(entityLogService.getEntityLog(any(), any(), anyBoolean())).thenReturn(entityLog); @@ -2262,7 +2254,10 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertEquals(allManualRedactions.getResizeRedactions().size(), 1); assertEquals(allManualRedactions.getEntriesToAdd().size(), 1); - var entryToAdd = allManualRedactions.getEntriesToAdd().stream().findFirst().get(); + var entryToAdd = allManualRedactions.getEntriesToAdd() + .stream() + .findFirst() + .get(); assertFalse(entryToAdd.isAddToDictionary()); assertFalse(entryToAdd.isAddToDossierDictionary()); assertEquals(entryToAdd.getValue(), entityLogEntry.getValue()); @@ -2288,20 +2283,11 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .legalBasis("legal basis") .positions(List.of(new Position(1, 1, 1, 1, 1))) .build(); - var entityLog = new EntityLog(1, - 1, - List.of(entityLogEntry), - null, - 0, - 0, - 0, - 0); + var entityLog = new EntityLog(1, 1, List.of(entityLogEntry), null, 0, 0, 0, 0); fileManagementStorageService.storeJSONObject(dossier.getId(), file.getId(), FileType.ENTITY_LOG, entityLog); when(entityLogService.getEntityLog(any(), any(), anyBoolean())).thenReturn(entityLog); - var forceRedactionRequestModel = ForceRedactionRequestModel.builder() - .annotationId("annotationId") - .build(); + var forceRedactionRequestModel = ForceRedactionRequestModel.builder().annotationId("annotationId").build(); manualRedactionClient.forceRedactionBulk(dossier.getId(), file.getId(), Set.of(forceRedactionRequestModel)); @@ -2309,7 +2295,10 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { assertEquals(allManualRedactions.getForceRedactions().size(), 1); assertEquals(allManualRedactions.getEntriesToAdd().size(), 1); - var entryToAdd = allManualRedactions.getEntriesToAdd().stream().findFirst().get(); + var entryToAdd = allManualRedactions.getEntriesToAdd() + .stream() + .findFirst() + .get(); assertFalse(entryToAdd.isAddToDictionary()); assertFalse(entryToAdd.isAddToDossierDictionary()); assertEquals(entryToAdd.getValue(), entityLogEntry.getValue()); @@ -2335,14 +2324,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .legalBasis("legal basis") .positions(List.of(new Position(1, 1, 1, 1, 1))) .build(); - var entityLog = new EntityLog(1, - 1, - List.of(entityLogEntry), - null, - 0, - 0, - 0, - 0); + var entityLog = new EntityLog(1, 1, List.of(entityLogEntry), null, 0, 0, 0, 0); fileManagementStorageService.storeJSONObject(dossier.getId(), file.getId(), FileType.ENTITY_LOG, entityLog); when(entityLogService.getEntityLog(any(), any(), anyBoolean())).thenReturn(entityLog); @@ -2355,7 +2337,8 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { .sourceId("sourceId") .build(); - String errorMessage = assertThrows(FeignException.BadRequest.class, () -> manualRedactionClient.addRedactionBulk(dossier.getId(), file.getId(), Set.of(addRedactionRequest))).getMessage(); + String errorMessage = assertThrows(FeignException.BadRequest.class, + () -> manualRedactionClient.addRedactionBulk(dossier.getId(), file.getId(), Set.of(addRedactionRequest))).getMessage(); assertTrue(errorMessage.contains("Redaction value can not exceed 4000 characters")); } @@ -2385,4 +2368,135 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest { } + @Test + public void testRecategorizeImageToLogo() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + var typeImage = typeProvider.testAndProvideType(dossierTemplate, null, "image", false, 999); + var typeLogo = typeProvider.testAndProvideType(dossierTemplate, null, "logo", false, 1001); + + var entityLogEntry = EntityLogEntry.builder() + .id("annotationId") + .type(typeImage.getType()) + .entryType(EntryType.IMAGE_HINT) + .state(EntryState.SKIPPED) + .value("Image:Other") + .reason("") + .matchedRule("") + .legalBasis("") + .imported(false) + .containingNodeId(List.of(31, 12)) + .closestHeadline("Images: Regular ") + .section("[31]: Section: Images: Regular Images: Formular") + .color(null) + .positions(List.of(new Position(1, 1, 1, 1, 1))) + .textBefore(null) + .textAfter(null) + .startOffset(0) + .endOffset(0) + .imageHasTransparency(false) + .dictionaryEntry(false) + .dossierDictionaryEntry(false) + .excluded(false) + .changes(List.of(new Change(1, ChangeType.ADDED, OffsetDateTime.now()))) + .build(); + var entityLog = new EntityLog(1, + 1, + List.of(entityLogEntry), + List.of(new EntityLogLegalBasis("1.1 personal data (incl. geolocation); Article 39(e)(3)", + "desc", + "Article 39(e)(3) of Regulation (EC) No 178/2002"), + new EntityLogLegalBasis("4. commercial information", + "desc 2", + "Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)")), + 0, + 0, + 0, + 0); + fileManagementStorageService.storeJSONObject(dossier.getId(), file.getId(), FileType.ENTITY_LOG, entityLog); + when(entityLogService.getEntityLog(any(), any(), anyBoolean())).thenReturn(entityLog); + + var recategorizationRequestModel = RecategorizationRequestModel.builder() + .annotationId("annotationId") + .legalBasis("") + .section("[31]: Section: Images: Regular Images: Formular") + .type(typeLogo.getType()) + .value("Image:Other") + .build(); + + var resp = manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recategorizationRequestModel), false); + + System.out.println(resp); + + } + + + @Test + public void testLegalBasisChangeCbiAuthor() { + + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate); + var file = fileTesterAndProvider.testAndProvideFile(dossier); + + var type = typeProvider.testAndProvideType(dossierTemplate, null, "CBI_author", false); + + var entityLogEntry = EntityLogEntry.builder() + .id("annotationId") + .type(type.getType()) + .entryType(EntryType.ENTITY) + .state(EntryState.APPLIED) + .value("Ranya Eikenboom") + .reason("Author found") + .matchedRule("CBI.0.0") + .legalBasis("Article 39(e)(3) of Regulation (EC) No 178/2002") + .imported(false) + .containingNodeId(List.of(1, 1, 1)) + .closestHeadline("CBI.0.0/1: Redact CBI Authors ") + .section("[1, 1, 1]: Paragraph: David Ksenia Max Mustermann") + .color(null) + .positions(List.of(new Position(1, 1, 1, 1, 1))) + .textBefore("Ksenia Max Mustermann ") + .textAfter(" Charalampos Schenk") + .startOffset(197) + .endOffset(212) + .imageHasTransparency(false) + .dictionaryEntry(true) + .dossierDictionaryEntry(false) + .excluded(false) + .changes(List.of(new Change(1, ChangeType.ADDED, OffsetDateTime.now()))) + .engines(Set.of(Engine.DICTIONARY)) + .build(); + var entityLog = new EntityLog(1, + 1, + List.of(entityLogEntry), + List.of(new EntityLogLegalBasis("1.1 personal data (incl. geolocation); Article 39(e)(3)", + "desc", + "Article 39(e)(3) of Regulation (EC) No 178/2002"), + new EntityLogLegalBasis("4. commercial information", + "desc 2", + "Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)")), + 0, + 0, + 0, + 0); + fileManagementStorageService.storeJSONObject(dossier.getId(), file.getId(), FileType.ENTITY_LOG, entityLog); + when(entityLogService.getEntityLog(any(), any(), anyBoolean())).thenReturn(entityLog); + + var recategorizationRequestModel = RecategorizationRequestModel.builder() + .annotationId("annotationId") + .legalBasis("Article 63(2)(a) of Regulation (EC) No 1107/2009 (making reference to Article 39 of Regulation EC No 178/2002)") + .section("[1, 1, 1]: Paragraph: David Ksenia Max Mustermann") + .type(type.getType()) + .value("Ranya Eikenboom") + .build(); + + var resp = manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recategorizationRequestModel), false); + + System.out.println(resp); + + } + } diff --git a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualRedactionType.java b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualRedactionType.java index 292b2e0e3..439df697f 100644 --- a/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualRedactionType.java +++ b/persistence-service-v1/persistence-service-shared-api-v1/src/main/java/com/iqser/red/service/persistence/service/v1/api/shared/model/analysislog/entitylog/ManualRedactionType.java @@ -13,7 +13,7 @@ public enum ManualRedactionType { FORCE, RECATEGORIZE, RECATEGORIZE_IN_DICTIONARY, - @Deprecated LEGAL_BASIS_CHANGE, + LEGAL_BASIS_CHANGE, RESIZE, RESIZE_IN_DICTIONARY } -- 2.47.2