Merge branch 'RED-8480-bp2' into 'release/2.349.x'
RED-8480: differenciate between recategorize and legal basis change See merge request redactmanager/persistence-service!455
This commit is contained in:
commit
f4e9a35a12
@ -6,6 +6,9 @@ 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.DO_MANUAL_REDACTION;
|
||||||
import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_MANUAL_REDACTIONS;
|
import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_MANUAL_REDACTIONS;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -20,6 +23,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.AccessControlService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.CommentService;
|
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.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.FileStatusManagementService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionUndoService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionUndoService;
|
||||||
@ -27,17 +31,12 @@ 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.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.AuditCategory;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.CommentResponse;
|
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.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.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.Comment;
|
||||||
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.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.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.ManualRedactions;
|
||||||
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.audit.AuditRequest;
|
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.AddCommentRequestModel;
|
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.AddRedactionRequestModel;
|
||||||
@ -69,6 +68,7 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
AccessControlService accessControlService;
|
AccessControlService accessControlService;
|
||||||
CommentService commentService;
|
CommentService commentService;
|
||||||
FileStatusManagementService fileStatusManagementService;
|
FileStatusManagementService fileStatusManagementService;
|
||||||
|
EntityLogService entityLogService;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -257,6 +257,12 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
accessControlService.verifyFileIsNotApproved(dossierId, fileId);
|
accessControlService.verifyFileIsNotApproved(dossierId, fileId);
|
||||||
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
||||||
|
|
||||||
|
return handleLegalBasisChanges(dossierId, fileId, legalBasisChangeRequests);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<ManualAddResponse> handleLegalBasisChanges(String dossierId, String fileId, Set<LegalBasisChangeRequestModel> legalBasisChangeRequests) {
|
||||||
|
|
||||||
List<ManualAddResponse> responseList = manualRedactionService.addLegalBasisChange(dossierId, fileId, legalBasisChangeRequests);
|
List<ManualAddResponse> responseList = manualRedactionService.addLegalBasisChange(dossierId, fileId, legalBasisChangeRequests);
|
||||||
|
|
||||||
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
||||||
@ -266,7 +272,6 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
.message("Legal basis reason was changed")
|
.message("Legal basis reason was changed")
|
||||||
.details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, response.getAnnotationId()))
|
.details(Map.of(DOSSIER_ID, dossierId, FILE_ID, fileId, ANNOTATION_ID, response.getAnnotationId()))
|
||||||
.build()));
|
.build()));
|
||||||
|
|
||||||
return responseList;
|
return responseList;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -282,11 +287,42 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
accessControlService.verifyFileIsNotApproved(dossierId, fileId);
|
accessControlService.verifyFileIsNotApproved(dossierId, fileId);
|
||||||
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
||||||
|
|
||||||
List<ManualAddResponse> responseList = manualRedactionService.addRecategorization(dossierId,
|
EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), includeUnprocessed);
|
||||||
fileId,
|
|
||||||
recategorizationRequests,
|
Set<RecategorizationRequestModel> recategorizations = new HashSet<>();
|
||||||
dossier.getDossierTemplateId(),
|
Set<LegalBasisChangeRequestModel> legalBasisChanges = new HashSet<>();
|
||||||
includeUnprocessed);
|
|
||||||
|
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<ManualAddResponse> responseList = new ArrayList<>();
|
||||||
|
|
||||||
|
responseList.addAll(handleLegalBasisChanges(dossierId, fileId, legalBasisChanges));
|
||||||
|
responseList.addAll(handleRectegorizations(dossierId, fileId, recategorizations, includeUnprocessed, dossier.getDossierTemplateId()));
|
||||||
|
|
||||||
|
return responseList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<ManualAddResponse> handleRectegorizations(String dossierId,
|
||||||
|
String fileId,
|
||||||
|
Set<RecategorizationRequestModel> recategorizationRequests,
|
||||||
|
boolean includeUnprocessed,
|
||||||
|
String dossierTemplateId) {
|
||||||
|
|
||||||
|
List<ManualAddResponse> responseList = manualRedactionService.addRecategorization(dossierId, fileId, recategorizationRequests, dossierTemplateId, includeUnprocessed);
|
||||||
|
|
||||||
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
||||||
.userId(KeycloakSecurity.getUserId())
|
.userId(KeycloakSecurity.getUserId())
|
||||||
|
|||||||
@ -14,7 +14,6 @@ import lombok.Builder;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
|||||||
@ -357,7 +357,6 @@ public class EntityLogMergeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
private void mergeLegalBasisChange(ManualLegalBasisChange manualLegalBasisChange,
|
private void mergeLegalBasisChange(ManualLegalBasisChange manualLegalBasisChange,
|
||||||
EntityLogEntry entityLogEntry,
|
EntityLogEntry entityLogEntry,
|
||||||
int analysisNumber) {
|
int analysisNumber) {
|
||||||
@ -379,7 +378,6 @@ public class EntityLogMergeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
private Map<String, String> getPropertyChanges(ManualLegalBasisChange manualLegalBasisChange) {
|
private Map<String, String> getPropertyChanges(ManualLegalBasisChange manualLegalBasisChange) {
|
||||||
|
|
||||||
Map<String, String> propertyChanges = new HashMap<>();
|
Map<String, String> propertyChanges = new HashMap<>();
|
||||||
@ -413,8 +411,6 @@ public class EntityLogMergeService {
|
|||||||
|
|
||||||
entityLogEntry.setEntryType(getEntryType(isHint, recategorization.getType()));
|
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);
|
entityLogEntry.getEngines().add(Engine.MANUAL);
|
||||||
|
|
||||||
if (!Strings.isNullOrEmpty(recategorization.getLegalBasis())) {
|
if (!Strings.isNullOrEmpty(recategorization.getLegalBasis())) {
|
||||||
|
|||||||
@ -137,7 +137,6 @@ public class ManualRedactionMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
public List<LegalBasisChangeRequest> toLegalBasisChangeRequestList(String dossierId,
|
public List<LegalBasisChangeRequest> toLegalBasisChangeRequestList(String dossierId,
|
||||||
String fileId,
|
String fileId,
|
||||||
Set<LegalBasisChangeRequestModel> legalBasisChangeRequests,
|
Set<LegalBasisChangeRequestModel> legalBasisChangeRequests,
|
||||||
|
|||||||
@ -14,6 +14,7 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.ObjectUtils;
|
||||||
|
|
||||||
import com.google.common.hash.HashFunction;
|
import com.google.common.hash.HashFunction;
|
||||||
import com.google.common.hash.Hashing;
|
import com.google.common.hash.Hashing;
|
||||||
@ -221,7 +222,6 @@ public class ManualRedactionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<ManualAddResponse> addLegalBasisChange(String dossierId, String fileId, Set<LegalBasisChangeRequestModel> legalBasisChangeRequests) {
|
public List<ManualAddResponse> addLegalBasisChange(String dossierId, String fileId, Set<LegalBasisChangeRequestModel> legalBasisChangeRequests) {
|
||||||
|
|
||||||
@ -233,6 +233,8 @@ public class ManualRedactionService {
|
|||||||
getEntityLogEntryConsumer(fileId));
|
getEntityLogEntryConsumer(fileId));
|
||||||
|
|
||||||
for (var legalBasisChangeRequest : requests) {
|
for (var legalBasisChangeRequest : requests) {
|
||||||
|
checkLegalBasisLength(legalBasisChangeRequest.getLegalBasis());
|
||||||
|
|
||||||
legalBasisChangePersistenceService.insert(fileId, legalBasisChangeRequest);
|
legalBasisChangePersistenceService.insert(fileId, legalBasisChangeRequest);
|
||||||
|
|
||||||
Long commentId = commentService.addCommentAndGetId(fileId,
|
Long commentId = commentService.addCommentAndGetId(fileId,
|
||||||
@ -318,8 +320,7 @@ public class ManualRedactionService {
|
|||||||
List<ManualAddResponse> response = new ArrayList<>();
|
List<ManualAddResponse> response = new ArrayList<>();
|
||||||
List<ManualResizeRedactionEntity> manualResizeRedactionEntities = new ArrayList<>();
|
List<ManualResizeRedactionEntity> manualResizeRedactionEntities = new ArrayList<>();
|
||||||
EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), includeUnprocessed);
|
EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), includeUnprocessed);
|
||||||
List<ResizeRedactionRequest> requests = manualRedactionMapper.toResizeRedactionRequestList(resizeRedactionRequests, entityLog,
|
List<ResizeRedactionRequest> requests = manualRedactionMapper.toResizeRedactionRequestList(resizeRedactionRequests, entityLog, getEntityLogEntryConsumer(fileId));
|
||||||
getEntityLogEntryConsumer(fileId));
|
|
||||||
|
|
||||||
for (ResizeRedactionRequest resizeRedactionRequest : requests) {
|
for (ResizeRedactionRequest resizeRedactionRequest : requests) {
|
||||||
|
|
||||||
@ -540,4 +541,16 @@ public class ManualRedactionService {
|
|||||||
return entry -> addManualRedactionEntry(fileId, entry);
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,7 +22,6 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
|
|||||||
@ -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.AnnotationEntityId;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualLegalBasisChangeEntity;
|
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualLegalBasisChangeEntity;
|
||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
public interface LegalBasisChangeRepository extends JpaRepository<ManualLegalBasisChangeEntity, AnnotationEntityId>, AnnotationEntityRepository {
|
public interface LegalBasisChangeRepository extends JpaRepository<ManualLegalBasisChangeEntity, AnnotationEntityId>, AnnotationEntityRepository {
|
||||||
|
|
||||||
@Modifying
|
@Modifying
|
||||||
|
|||||||
@ -4,12 +4,15 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ty
|
|||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -19,6 +22,7 @@ import org.junit.jupiter.api.Assertions;
|
|||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.mockito.Mockito;
|
import org.mockito.Mockito;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.testcontainers.shaded.org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
|
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
|
||||||
@ -35,21 +39,23 @@ 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.DictionaryManagementService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService;
|
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.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.EntryPersistenceService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.redactionlog.RedactionRequest;
|
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.AnalyzeResult;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.Dictionary;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.Dictionary;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.MessageType;
|
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.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.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.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.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.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.ManualRedactions;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle;
|
||||||
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.dossiertemplate.dossier.file.FileType;
|
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.dossiertemplate.type.DictionaryEntryType;
|
||||||
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.AddRedactionRequestModel;
|
||||||
@ -112,6 +118,9 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private FileProcessingClient fileProcessingClient;
|
private FileProcessingClient fileProcessingClient;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ManualRedactionService manualRedactionService;
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testRemoveToDossierTemplateWithDossierDictionaryOnlyTrue() {
|
public void testRemoveToDossierTemplateWithDossierDictionaryOnlyTrue() {
|
||||||
@ -144,7 +153,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
|
|
||||||
when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(entityLog);
|
when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(entityLog);
|
||||||
|
|
||||||
Assertions.assertThrows(FeignException.Forbidden.class,
|
assertThrows(FeignException.Forbidden.class,
|
||||||
() -> manualRedactionClient.removeRedactionBulk(dossier.getId(),
|
() -> manualRedactionClient.removeRedactionBulk(dossier.getId(),
|
||||||
file.getId(),
|
file.getId(),
|
||||||
Set.of(RemoveRedactionRequestModel.builder()
|
Set.of(RemoveRedactionRequestModel.builder()
|
||||||
@ -169,7 +178,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
|
|
||||||
var type = typeProvider.testAndProvideType(dossierTemplate, null, "type", true);
|
var type = typeProvider.testAndProvideType(dossierTemplate, null, "type", true);
|
||||||
assertThat(type.isDossierDictionaryOnly()).isTrue();
|
assertThat(type.isDossierDictionaryOnly()).isTrue();
|
||||||
Assertions.assertThrows(FeignException.Forbidden.class, () ->
|
assertThrows(FeignException.Forbidden.class, () ->
|
||||||
|
|
||||||
manualRedactionClient.addRedactionBulk(dossier.getId(),
|
manualRedactionClient.addRedactionBulk(dossier.getId(),
|
||||||
file.getId(),
|
file.getId(),
|
||||||
@ -901,7 +910,6 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
var redactionRequest2 = RedactionRequest.builder().dossierId(file2.getDossierId()).fileId(file2.getFileId()).dossierTemplateId(file2.getDossierTemplateId()).build();
|
var redactionRequest2 = RedactionRequest.builder().dossierId(file2.getDossierId()).fileId(file2.getFileId()).dossierTemplateId(file2.getDossierTemplateId()).build();
|
||||||
when(entityLogService.getEntityLog(eq(file2.getDossierId()), eq(file2.getFileId()), any(), anyBoolean())).thenReturn(entityLog2);
|
when(entityLogService.getEntityLog(eq(file2.getDossierId()), eq(file2.getFileId()), any(), anyBoolean())).thenReturn(entityLog2);
|
||||||
|
|
||||||
|
|
||||||
// resize redaction in dossier dict
|
// resize redaction in dossier dict
|
||||||
var resizeRedactionDosTemp = ResizeRedactionRequestModel.builder()
|
var resizeRedactionDosTemp = ResizeRedactionRequestModel.builder()
|
||||||
.annotationId(addRedactions.get(1).getAnnotationId())
|
.annotationId(addRedactions.get(1).getAnnotationId())
|
||||||
@ -1652,7 +1660,6 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUnprocessedManualRedactionsRecategorizations() {
|
public void testUnprocessedManualRedactionsRecategorizations() {
|
||||||
|
|
||||||
@ -1803,7 +1810,6 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
|
|
||||||
when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(entityLog);
|
when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(entityLog);
|
||||||
|
|
||||||
|
|
||||||
manualRedactionClient.legalBasisChangeBulk(dossier.getId(),
|
manualRedactionClient.legalBasisChangeBulk(dossier.getId(),
|
||||||
file.getId(),
|
file.getId(),
|
||||||
Set.of(LegalBasisChangeRequestModel.builder().legalBasis("legalBasis").annotationId("AnnotationId").build()));
|
Set.of(LegalBasisChangeRequestModel.builder().legalBasis("legalBasis").annotationId("AnnotationId").build()));
|
||||||
@ -1955,10 +1961,12 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
assertThatThrownBy(() -> manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recatModelLongLegalBasis), false)
|
assertThatThrownBy(() -> manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recatModelLongLegalBasis), false)
|
||||||
.get(0)).isInstanceOf(FeignException.class).hasMessageContaining("The legal basis is too long");
|
.get(0)).isInstanceOf(FeignException.class).hasMessageContaining("The legal basis is too long");
|
||||||
|
|
||||||
assertEquals("", allManualRedactions.getRecategorizations()
|
assertEquals("",
|
||||||
.stream()
|
allManualRedactions.getRecategorizations()
|
||||||
.filter(manualRecategorization -> manualRecategorization.getAnnotationId().equals("annotationId3"))
|
.stream()
|
||||||
.findFirst().get().getLegalBasis());
|
.filter(manualRecategorization -> manualRecategorization.getAnnotationId().equals("annotationId3"))
|
||||||
|
.findFirst()
|
||||||
|
.get().getLegalBasis());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2098,16 +2106,173 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
|||||||
manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recatModel), false);
|
manualRedactionClient.recategorizeBulk(dossier.getId(), file.getId(), Set.of(recatModel), false);
|
||||||
|
|
||||||
var allManualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId(), false, true);
|
var allManualRedactions = manualRedactionClient.getManualRedactions(dossier.getId(), file.getId(), false, true);
|
||||||
assertEquals(1, allManualRedactions.getRecategorizations().size());
|
assertEquals(1, allManualRedactions.getLegalBasisChanges().size());
|
||||||
assertTrue(allManualRedactions.getRecategorizations()
|
assertTrue(allManualRedactions.getLegalBasisChanges()
|
||||||
.stream()
|
.stream()
|
||||||
.anyMatch(entry -> entry.getAnnotationId().equals("annotationId")));
|
.anyMatch(entry -> entry.getAnnotationId().equals("annotationId")));
|
||||||
assertTrue(allManualRedactions.getRecategorizations()
|
assertTrue(allManualRedactions.getLegalBasisChanges()
|
||||||
.stream()
|
.stream()
|
||||||
.anyMatch(entry -> entry.getLegalBasis().equals("lb2")));
|
.anyMatch(entry -> entry.getLegalBasis().equals("lb2")));
|
||||||
assertTrue(allManualRedactions.getRecategorizations()
|
assertTrue(allManualRedactions.getLegalBasisChanges()
|
||||||
.stream()
|
.stream()
|
||||||
.anyMatch(entry -> entry.getSection().equals("section")));
|
.anyMatch(entry -> entry.getSection().equals("section")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@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());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@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(), 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(), 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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,7 +18,7 @@ public enum ManualRedactionType {
|
|||||||
FORCE,
|
FORCE,
|
||||||
RECATEGORIZE,
|
RECATEGORIZE,
|
||||||
RECATEGORIZE_IN_DICTIONARY,
|
RECATEGORIZE_IN_DICTIONARY,
|
||||||
@Deprecated LEGAL_BASIS_CHANGE,
|
LEGAL_BASIS_CHANGE,
|
||||||
RESIZE,
|
RESIZE,
|
||||||
RESIZE_IN_DICTIONARY
|
RESIZE_IN_DICTIONARY
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,6 @@ import lombok.Builder;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import lombok.EqualsAndHashCode;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
@Data
|
@Data
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import lombok.Data;
|
|||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
|
||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user