Merge branch 'RED-8903-bp' into 'release/2.349.x'
RED-8903 - Refactor local add redaction on manual change See merge request redactmanager/persistence-service!437
This commit is contained in:
commit
1a653d8f62
@ -21,7 +21,6 @@ import com.iqser.red.service.persistence.management.v1.processor.service.AccessC
|
|||||||
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.FileStatusManagementService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusManagementService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionMapper;
|
|
||||||
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;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
|
||||||
@ -68,7 +67,6 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
DossierManagementService dossierManagementService;
|
DossierManagementService dossierManagementService;
|
||||||
AuditPersistenceService auditPersistenceService;
|
AuditPersistenceService auditPersistenceService;
|
||||||
AccessControlService accessControlService;
|
AccessControlService accessControlService;
|
||||||
ManualRedactionMapper manualRedactionMapper;
|
|
||||||
CommentService commentService;
|
CommentService commentService;
|
||||||
FileStatusManagementService fileStatusManagementService;
|
FileStatusManagementService fileStatusManagementService;
|
||||||
|
|
||||||
@ -120,7 +118,8 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
|
|
||||||
accessControlService.checkDossierExistenceAndViewPermissionsToDossier(dossierId);
|
accessControlService.checkDossierExistenceAndViewPermissionsToDossier(dossierId);
|
||||||
accessControlService.validateFileResourceExistence(fileId);
|
accessControlService.validateFileResourceExistence(fileId);
|
||||||
return manualRedactionService.getManualRedactions(fileId, ManualChangesQueryOptions.builder().includeOnlyUnprocessed(unprocessed).includeDictChanges(includeDictChanges).build());
|
return manualRedactionService.getManualRedactions(fileId,
|
||||||
|
ManualChangesQueryOptions.builder().includeOnlyUnprocessed(unprocessed).includeDictChanges(includeDictChanges).build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -178,9 +177,7 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<AddRedactionRequest> requests = manualRedactionMapper.toAddRedactionRequestList(dossierId, addRedactionRequests, dossier);
|
List<ManualAddResponse> responseList = manualRedactionService.addAddRedaction(dossierId, fileId, addRedactionRequests, dossier);
|
||||||
|
|
||||||
List<ManualAddResponse> responseList = manualRedactionService.addAddRedaction(dossierId, fileId, requests);
|
|
||||||
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
||||||
.userId(KeycloakSecurity.getUserId())
|
.userId(KeycloakSecurity.getUserId())
|
||||||
.objectId(fileId)
|
.objectId(fileId)
|
||||||
@ -209,12 +206,11 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<RemoveRedactionRequest> requests = manualRedactionMapper.toRemoveRedactionRequestList(dossierId,
|
List<ManualAddResponse> responseList = manualRedactionService.addRemoveRedaction(dossierId,
|
||||||
fileId,
|
fileId,
|
||||||
dossier.getDossierTemplateId(),
|
removeRedactionRequests,
|
||||||
removeRedactionRequests,
|
dossier.getDossierTemplateId(),
|
||||||
includeUnprocessed);
|
includeUnprocessed);
|
||||||
List<ManualAddResponse> responseList = manualRedactionService.addRemoveRedaction(dossierId, fileId, requests);
|
|
||||||
|
|
||||||
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
||||||
.userId(KeycloakSecurity.getUserId())
|
.userId(KeycloakSecurity.getUserId())
|
||||||
@ -237,8 +233,7 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
accessControlService.verifyFileIsNotApproved(dossierId, fileId);
|
accessControlService.verifyFileIsNotApproved(dossierId, fileId);
|
||||||
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
||||||
|
|
||||||
List<ForceRedactionRequest> requests = manualRedactionMapper.toForceRedactionRequestList(dossierId, fileId, forceRedactionRequests);
|
List<ManualAddResponse> responseList = manualRedactionService.addForceRedaction(dossierId, fileId, forceRedactionRequests);
|
||||||
List<ManualAddResponse> responseList = manualRedactionService.addForceRedaction(dossierId, fileId, requests);
|
|
||||||
|
|
||||||
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
||||||
.userId(KeycloakSecurity.getUserId())
|
.userId(KeycloakSecurity.getUserId())
|
||||||
@ -262,9 +257,7 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
accessControlService.verifyFileIsNotApproved(dossierId, fileId);
|
accessControlService.verifyFileIsNotApproved(dossierId, fileId);
|
||||||
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
||||||
|
|
||||||
List<LegalBasisChangeRequest> requests = manualRedactionMapper.toLegalBasisChangeRequestList(dossierId, fileId, legalBasisChangeRequests);
|
List<ManualAddResponse> responseList = manualRedactionService.addLegalBasisChange(dossierId, fileId, legalBasisChangeRequests);
|
||||||
|
|
||||||
List<ManualAddResponse> responseList = manualRedactionService.addLegalBasisChange(dossierId, fileId, requests);
|
|
||||||
|
|
||||||
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
||||||
.userId(KeycloakSecurity.getUserId())
|
.userId(KeycloakSecurity.getUserId())
|
||||||
@ -289,13 +282,11 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
accessControlService.verifyFileIsNotApproved(dossierId, fileId);
|
accessControlService.verifyFileIsNotApproved(dossierId, fileId);
|
||||||
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
||||||
|
|
||||||
List<RecategorizationRequest> requests = manualRedactionMapper.toRecategorizationRequestList(dossierId,
|
List<ManualAddResponse> responseList = manualRedactionService.addRecategorization(dossierId,
|
||||||
fileId,
|
fileId,
|
||||||
dossier.getDossierTemplateId(),
|
recategorizationRequests,
|
||||||
recategorizationRequests,
|
dossier.getDossierTemplateId(),
|
||||||
includeUnprocessed);
|
includeUnprocessed);
|
||||||
|
|
||||||
List<ManualAddResponse> responseList = manualRedactionService.addRecategorization(dossierId, fileId, requests);
|
|
||||||
|
|
||||||
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
||||||
.userId(KeycloakSecurity.getUserId())
|
.userId(KeycloakSecurity.getUserId())
|
||||||
@ -319,8 +310,7 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
accessControlService.verifyFileIsNotApproved(dossierId, fileId);
|
accessControlService.verifyFileIsNotApproved(dossierId, fileId);
|
||||||
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
accessControlService.verifyUserIsMemberOrApprover(dossierId);
|
||||||
|
|
||||||
List<ResizeRedactionRequest> requests = manualRedactionMapper.toResizeRedactionRequestList(dossierId, fileId, resizeRedactionRequests, includeUnprocessed);
|
List<ManualAddResponse> responseList = manualRedactionService.addResizeRedaction(dossierId, fileId, resizeRedactionRequests, includeUnprocessed);
|
||||||
List<ManualAddResponse> responseList = manualRedactionService.addResizeRedaction(dossierId, fileId, requests, includeUnprocessed);
|
|
||||||
|
|
||||||
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
responseList.forEach(response -> auditPersistenceService.audit(AuditRequest.builder()
|
||||||
.userId(KeycloakSecurity.getUserId())
|
.userId(KeycloakSecurity.getUserId())
|
||||||
|
|||||||
@ -2,12 +2,12 @@ package com.iqser.red.service.persistence.management.v1.processor.service.manual
|
|||||||
|
|
||||||
import static com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUtils.toTypeId;
|
import static com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUtils.toTypeId;
|
||||||
|
|
||||||
import java.time.OffsetDateTime;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@ -17,15 +17,12 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog
|
|||||||
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.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.annotations.AddRedactionRequest;
|
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.ForceRedactionRequest;
|
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.LegalBasisChangeRequest;
|
||||||
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.RecategorizationRequest;
|
||||||
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.RemoveRedactionRequest;
|
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.ResizeRedactionRequest;
|
||||||
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.Dossier;
|
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.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;
|
||||||
@ -47,7 +44,6 @@ import lombok.experimental.FieldDefaults;
|
|||||||
public class ManualRedactionMapper {
|
public class ManualRedactionMapper {
|
||||||
|
|
||||||
EntityLogService entityLogService;
|
EntityLogService entityLogService;
|
||||||
ManualRedactionService manualRedactionService;
|
|
||||||
|
|
||||||
|
|
||||||
@Observed(name = "ManualRedactionMapper", contextualName = "to-add-redaction-request-list")
|
@Observed(name = "ManualRedactionMapper", contextualName = "to-add-redaction-request-list")
|
||||||
@ -112,7 +108,10 @@ public class ManualRedactionMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<ForceRedactionRequest> toForceRedactionRequestList(String dossierId, String fileId, Set<ForceRedactionRequestModel> forceRedactionRequests) {
|
public List<ForceRedactionRequest> toForceRedactionRequestList(String dossierId,
|
||||||
|
String fileId,
|
||||||
|
Set<ForceRedactionRequestModel> forceRedactionRequests,
|
||||||
|
Consumer<EntityLogEntry> entityLogEntryConsumer) {
|
||||||
|
|
||||||
EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), true);
|
EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), true);
|
||||||
List<ForceRedactionRequest> requests = new ArrayList<>();
|
List<ForceRedactionRequest> requests = new ArrayList<>();
|
||||||
@ -128,7 +127,7 @@ public class ManualRedactionMapper {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
if (!entityLogEntry.getEngines().contains(Engine.MANUAL) && entryIsEntityType(entityLogEntry)) {
|
if (!entityLogEntry.getEngines().contains(Engine.MANUAL) && entryIsEntityType(entityLogEntry)) {
|
||||||
addManualRedactionEntry(fileId, entityLogEntry);
|
entityLogEntryConsumer.accept(entityLogEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
requests.add(forceRedactionRequest);
|
requests.add(forceRedactionRequest);
|
||||||
@ -139,7 +138,10 @@ public class ManualRedactionMapper {
|
|||||||
|
|
||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
@Deprecated(forRemoval = true)
|
||||||
public List<LegalBasisChangeRequest> toLegalBasisChangeRequestList(String dossierId, String fileId, Set<LegalBasisChangeRequestModel> legalBasisChangeRequests) {
|
public List<LegalBasisChangeRequest> toLegalBasisChangeRequestList(String dossierId,
|
||||||
|
String fileId,
|
||||||
|
Set<LegalBasisChangeRequestModel> legalBasisChangeRequests,
|
||||||
|
Consumer<EntityLogEntry> entityLogEntryConsumer) {
|
||||||
|
|
||||||
EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), true);
|
EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), true);
|
||||||
List<LegalBasisChangeRequest> requests = new ArrayList<>();
|
List<LegalBasisChangeRequest> requests = new ArrayList<>();
|
||||||
@ -157,7 +159,7 @@ public class ManualRedactionMapper {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
if (!entityLogEntry.getEngines().contains(Engine.MANUAL) && entryIsEntityType(entityLogEntry)) {
|
if (!entityLogEntry.getEngines().contains(Engine.MANUAL) && entryIsEntityType(entityLogEntry)) {
|
||||||
addManualRedactionEntry(fileId, entityLogEntry);
|
entityLogEntryConsumer.accept(entityLogEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
requests.add(request);
|
requests.add(request);
|
||||||
@ -171,7 +173,8 @@ public class ManualRedactionMapper {
|
|||||||
String fileId,
|
String fileId,
|
||||||
String dossierTemplateId,
|
String dossierTemplateId,
|
||||||
Set<RecategorizationRequestModel> recategorizationRequests,
|
Set<RecategorizationRequestModel> recategorizationRequests,
|
||||||
boolean includeUnprocessed) {
|
boolean includeUnprocessed,
|
||||||
|
Consumer<EntityLogEntry> entityLogEntryConsumer) {
|
||||||
|
|
||||||
EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), includeUnprocessed);
|
EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), includeUnprocessed);
|
||||||
List<RecategorizationRequest> requests = new ArrayList<>();
|
List<RecategorizationRequest> requests = new ArrayList<>();
|
||||||
@ -200,7 +203,7 @@ public class ManualRedactionMapper {
|
|||||||
&& !recategorizationRequest.isAddToAllDossiers()
|
&& !recategorizationRequest.isAddToAllDossiers()
|
||||||
&& !recategorizationRequest.isAddToDictionary()
|
&& !recategorizationRequest.isAddToDictionary()
|
||||||
&& entryIsEntityType(entityLogEntry)) {
|
&& entryIsEntityType(entityLogEntry)) {
|
||||||
addManualRedactionEntry(fileId, entityLogEntry);
|
entityLogEntryConsumer.accept(entityLogEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
requests.add(request);
|
requests.add(request);
|
||||||
@ -210,12 +213,10 @@ public class ManualRedactionMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<ResizeRedactionRequest> toResizeRedactionRequestList(String dossierId,
|
public List<ResizeRedactionRequest> toResizeRedactionRequestList(Set<ResizeRedactionRequestModel> resizeRedactionRequests,
|
||||||
String fileId,
|
EntityLog entityLog,
|
||||||
Set<ResizeRedactionRequestModel> resizeRedactionRequests,
|
Consumer<EntityLogEntry> entityLogEntryConsumer) {
|
||||||
boolean includeUnprocessed) {
|
|
||||||
|
|
||||||
EntityLog entityLog = entityLogService.getEntityLog(dossierId, fileId, Collections.emptyList(), includeUnprocessed);
|
|
||||||
List<ResizeRedactionRequest> requests = new ArrayList<>();
|
List<ResizeRedactionRequest> requests = new ArrayList<>();
|
||||||
|
|
||||||
for (ResizeRedactionRequestModel resizeRedactionRequest : resizeRedactionRequests) {
|
for (ResizeRedactionRequestModel resizeRedactionRequest : resizeRedactionRequests) {
|
||||||
@ -232,7 +233,7 @@ public class ManualRedactionMapper {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
if (!entityLogEntry.getEngines().contains(Engine.MANUAL) && entryIsEntityType(entityLogEntry) && !request.isAddToAllDossiers() && !request.getUpdateDictionary()) {
|
if (!entityLogEntry.getEngines().contains(Engine.MANUAL) && entryIsEntityType(entityLogEntry) && !request.isAddToAllDossiers() && !request.getUpdateDictionary()) {
|
||||||
addManualRedactionEntry(fileId, entityLogEntry);
|
entityLogEntryConsumer.accept(entityLogEntry);
|
||||||
}
|
}
|
||||||
|
|
||||||
requests.add(request);
|
requests.add(request);
|
||||||
@ -242,31 +243,6 @@ public class ManualRedactionMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void addManualRedactionEntry(String fileId, EntityLogEntry entityLogEntry) {
|
|
||||||
|
|
||||||
ManualRedactionEntry manualRedactionEntry = ManualRedactionEntry.builder()
|
|
||||||
.value(entityLogEntry.getValue())
|
|
||||||
.reason(entityLogEntry.getReason())
|
|
||||||
.section(entityLogEntry.getSection())
|
|
||||||
.annotationId(entityLogEntry.getId())
|
|
||||||
.type(entityLogEntry.getType())
|
|
||||||
.addToDossierDictionary(false)
|
|
||||||
.addToDictionary(false)
|
|
||||||
.positions(convertPositions(entityLogEntry.getPositions()))
|
|
||||||
.rectangle(entityLogEntry.getEntryType() == EntryType.AREA)
|
|
||||||
.user(KeycloakSecurity.getUserId())
|
|
||||||
.legalBasis(entityLogEntry.getLegalBasis())
|
|
||||||
.textAfter(entityLogEntry.getTextAfter())
|
|
||||||
.textBefore(entityLogEntry.getTextBefore())
|
|
||||||
.dictionaryEntryType(getDictionaryEntryType(entityLogEntry))
|
|
||||||
.fileId(fileId)
|
|
||||||
.requestDate(OffsetDateTime.now())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
manualRedactionService.addManualRedactionEntries(List.of(manualRedactionEntry), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private static boolean entryIsEntityType(EntityLogEntry entityLogEntry) {
|
private static boolean entryIsEntityType(EntityLogEntry entityLogEntry) {
|
||||||
|
|
||||||
return entityLogEntry.getEntryType().equals(EntryType.ENTITY) //
|
return entityLogEntry.getEntryType().equals(EntryType.ENTITY) //
|
||||||
@ -287,7 +263,7 @@ public class ManualRedactionMapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static DictionaryEntryType getDictionaryEntryType(EntityLogEntry entityLogEntry) {
|
public static DictionaryEntryType getDictionaryEntryType(EntityLogEntry entityLogEntry) {
|
||||||
|
|
||||||
if (entityLogEntry.getEntryType().equals(EntryType.FALSE_RECOMMENDATION)) {
|
if (entityLogEntry.getEntryType().equals(EntryType.FALSE_RECOMMENDATION)) {
|
||||||
return DictionaryEntryType.FALSE_RECOMMENDATION;
|
return DictionaryEntryType.FALSE_RECOMMENDATION;
|
||||||
@ -298,12 +274,4 @@ public class ManualRedactionMapper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static List<Rectangle> convertPositions(List<Position> positions) {
|
|
||||||
|
|
||||||
return positions.stream()
|
|
||||||
.map(rectangle -> new Rectangle(rectangle.x(), rectangle.y(), rectangle.w(), rectangle.h(), rectangle.getPageNumber()))
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,7 +20,7 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
|
|||||||
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.RemoveRedactionPersistenceService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ResizeRedactionPersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ResizeRedactionPersistenceService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.utils.ManualRecategorizationMapper;
|
import com.iqser.red.service.persistence.management.v1.processor.utils.ManualRecategorizationMapper;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.utils.ManualRedactionMapper;
|
import com.iqser.red.service.persistence.management.v1.processor.utils.ManualRedactionEntryMapper;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.utils.ManualResizeRedactionMapper;
|
import com.iqser.red.service.persistence.management.v1.processor.utils.ManualResizeRedactionMapper;
|
||||||
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.entitymapped.IdRemoval;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.IdRemoval;
|
||||||
@ -60,7 +60,7 @@ public class ManualRedactionProviderService {
|
|||||||
if (!options.getExcludedClasses().contains(ManualRedactionEntry.class)) {
|
if (!options.getExcludedClasses().contains(ManualRedactionEntry.class)) {
|
||||||
entriesToAdd = new HashSet<>(convert(addRedactionPersistenceService.findEntriesByFileIdAndOptions(fileId, options),
|
entriesToAdd = new HashSet<>(convert(addRedactionPersistenceService.findEntriesByFileIdAndOptions(fileId, options),
|
||||||
ManualRedactionEntry.class,
|
ManualRedactionEntry.class,
|
||||||
new ManualRedactionMapper()));
|
new ManualRedactionEntryMapper()));
|
||||||
} else {
|
} else {
|
||||||
entriesToAdd = Collections.emptySet();
|
entriesToAdd = Collections.emptySet();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package com.iqser.red.service.persistence.management.v1.processor.service.manualredactions;
|
package com.iqser.red.service.persistence.management.v1.processor.service.manualredactions;
|
||||||
|
|
||||||
|
import static com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionMapper.getDictionaryEntryType;
|
||||||
import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
|
import static com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter.convert;
|
||||||
|
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
@ -8,6 +9,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -34,23 +36,34 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
|
|||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.RecategorizationPersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.RecategorizationPersistenceService;
|
||||||
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.RemoveRedactionPersistenceService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ResizeRedactionPersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.ResizeRedactionPersistenceService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.utils.ManualRedactionMapper;
|
import com.iqser.red.service.persistence.management.v1.processor.utils.ManualRedactionEntryMapper;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.utils.ManualResizeRedactionMapper;
|
import com.iqser.red.service.persistence.management.v1.processor.utils.ManualResizeRedactionMapper;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUtils;
|
import com.iqser.red.service.persistence.management.v1.processor.utils.TypeIdUtils;
|
||||||
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.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.AddRedactionRequest;
|
||||||
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.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.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.RecategorizationRequest;
|
||||||
|
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.RemoveRedactionRequest;
|
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.ResizeRedactionRequest;
|
||||||
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.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.annotations.entitymapped.ManualResizeRedaction;
|
||||||
|
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.FileModel;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileModel;
|
||||||
|
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.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.databasetenantcommons.providers.utils.MagicConverter;
|
import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
|
||||||
|
import com.knecon.fforesight.keycloakcommons.security.KeycloakSecurity;
|
||||||
|
|
||||||
import io.micrometer.observation.annotation.Observed;
|
import io.micrometer.observation.annotation.Observed;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
@ -79,20 +92,21 @@ public class ManualRedactionService {
|
|||||||
ManualRedactionDictionaryUpdateHandler manualRedactionDictionaryUpdateHandler;
|
ManualRedactionDictionaryUpdateHandler manualRedactionDictionaryUpdateHandler;
|
||||||
EntityLogMergeService entityLogMergeService;
|
EntityLogMergeService entityLogMergeService;
|
||||||
FileStatusPersistenceService fileStatusPersistenceService;
|
FileStatusPersistenceService fileStatusPersistenceService;
|
||||||
|
ManualRedactionMapper manualRedactionMapper;
|
||||||
|
|
||||||
private static final int MAX_LEGAL_BASIS_LENGTH = 4000;
|
private static final int MAX_LEGAL_BASIS_LENGTH = 4000;
|
||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Observed(name = "ManualRedactionService", contextualName = "add-manual-redaction")
|
@Observed(name = "ManualRedactionService", contextualName = "add-manual-redaction")
|
||||||
public List<ManualAddResponse> addAddRedaction(String dossierId, String fileId, List<AddRedactionRequest> addRedactionRequests) {
|
public List<ManualAddResponse> addAddRedaction(String dossierId, String fileId, Set<AddRedactionRequestModel> addRedactionRequests, Dossier dossier) {
|
||||||
|
|
||||||
var response = new ArrayList<ManualAddResponse>();
|
var response = new ArrayList<ManualAddResponse>();
|
||||||
List<ManualRedactionEntryEntity> manualRedactionEntryEntities = new ArrayList<>();
|
List<ManualRedactionEntryEntity> manualRedactionEntryEntities = new ArrayList<>();
|
||||||
|
List<AddRedactionRequest> requests = manualRedactionMapper.toAddRedactionRequestList(dossierId, addRedactionRequests, dossier);
|
||||||
var dossierEntity = dossierPersistenceService.getAndValidateDossier(dossierId);
|
var dossierEntity = dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||||
|
|
||||||
for (AddRedactionRequest addRedactionRequest : addRedactionRequests) {
|
for (AddRedactionRequest addRedactionRequest : requests) {
|
||||||
manualRedactionDictionaryUpdateHandler.validateDictionariesForAdd(addRedactionRequest, addRedactionRequest.getValue());
|
manualRedactionDictionaryUpdateHandler.validateDictionariesForAdd(addRedactionRequest, addRedactionRequest.getValue());
|
||||||
validatePositions(fileId, addRedactionRequest);
|
validatePositions(fileId, addRedactionRequest);
|
||||||
|
|
||||||
@ -108,8 +122,7 @@ public class ManualRedactionService {
|
|||||||
|
|
||||||
Long commentId = commentService.addCommentAndGetId(fileId, annotationId, addRedactionRequest.getComment(), addRedactionRequest.getUser());
|
Long commentId = commentService.addCommentAndGetId(fileId, annotationId, addRedactionRequest.getComment(), addRedactionRequest.getUser());
|
||||||
|
|
||||||
response.add(ManualAddResponse.builder().annotationId(annotationId).commentId(commentId)
|
response.add(ManualAddResponse.builder().annotationId(annotationId).commentId(commentId).build());
|
||||||
.build());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var localManualRedactionEntryEntities = manualRedactionEntryEntities.stream()
|
var localManualRedactionEntryEntities = manualRedactionEntryEntities.stream()
|
||||||
@ -118,8 +131,7 @@ public class ManualRedactionService {
|
|||||||
|
|
||||||
FileModel fileStatus = fileStatusService.getStatus(fileId);
|
FileModel fileStatus = fileStatusService.getStatus(fileId);
|
||||||
if (!localManualRedactionEntryEntities.isEmpty() && fileStatus.isExcludedFromAutomaticAnalysis()) {
|
if (!localManualRedactionEntryEntities.isEmpty() && fileStatus.isExcludedFromAutomaticAnalysis()) {
|
||||||
ManualRedactions manualRedactions = ManualRedactions.builder().entriesToAdd(convertEntriesToAdd(localManualRedactionEntryEntities))
|
ManualRedactions manualRedactions = ManualRedactions.builder().entriesToAdd(convertEntriesToAdd(localManualRedactionEntryEntities)).build();
|
||||||
.build();
|
|
||||||
entityLogMergeService.sendToAnalyseQueue(fileId, dossierEntity, fileStatusService.getStatus(fileId), manualRedactions);
|
entityLogMergeService.sendToAnalyseQueue(fileId, dossierEntity, fileStatusService.getStatus(fileId), manualRedactions);
|
||||||
} else {
|
} else {
|
||||||
reprocess(dossierId, fileId);
|
reprocess(dossierId, fileId);
|
||||||
@ -133,18 +145,27 @@ public class ManualRedactionService {
|
|||||||
private Set<ManualRedactionEntry> convertEntriesToAdd(List<ManualRedactionEntryEntity> source) {
|
private Set<ManualRedactionEntry> convertEntriesToAdd(List<ManualRedactionEntryEntity> source) {
|
||||||
|
|
||||||
return source.stream()
|
return source.stream()
|
||||||
.map(entry -> convert(entry, ManualRedactionEntry.class, new ManualRedactionMapper()))
|
.map(entry -> convert(entry, ManualRedactionEntry.class, new ManualRedactionEntryMapper()))
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<ManualAddResponse> addRemoveRedaction(String dossierId, String fileId, List<RemoveRedactionRequest> removeRedactionRequests) {
|
public List<ManualAddResponse> addRemoveRedaction(String dossierId,
|
||||||
|
String fileId,
|
||||||
|
Set<RemoveRedactionRequestModel> removeRedactionRequests,
|
||||||
|
String dossierTemplateId,
|
||||||
|
boolean includeUnprocessed) {
|
||||||
|
|
||||||
var response = new ArrayList<ManualAddResponse>();
|
var response = new ArrayList<ManualAddResponse>();
|
||||||
|
List<RemoveRedactionRequest> requests = manualRedactionMapper.toRemoveRedactionRequestList(dossierId,
|
||||||
|
fileId,
|
||||||
|
dossierTemplateId,
|
||||||
|
removeRedactionRequests,
|
||||||
|
includeUnprocessed);
|
||||||
|
|
||||||
//validate removing from dossier template dictionary
|
//validate removing from dossier template dictionary
|
||||||
for (RemoveRedactionRequest removeRedactionRequest : removeRedactionRequests) {
|
for (RemoveRedactionRequest removeRedactionRequest : requests) {
|
||||||
manualRedactionDictionaryUpdateHandler.validateDictionariesForDelete(removeRedactionRequest,
|
manualRedactionDictionaryUpdateHandler.validateDictionariesForDelete(removeRedactionRequest,
|
||||||
removeRedactionRequest.getTypeToRemove(),
|
removeRedactionRequest.getTypeToRemove(),
|
||||||
removeRedactionRequest.getDossierTemplateId());
|
removeRedactionRequest.getDossierTemplateId());
|
||||||
@ -163,8 +184,7 @@ public class ManualRedactionService {
|
|||||||
|
|
||||||
removeRedactionPersistenceService.updateModifiedDictionaries(fileId, removeRedactionRequest.getAnnotationId(), removedFromDictionary, typeIdsOfModifiedDictionaries);
|
removeRedactionPersistenceService.updateModifiedDictionaries(fileId, removeRedactionRequest.getAnnotationId(), removedFromDictionary, typeIdsOfModifiedDictionaries);
|
||||||
|
|
||||||
response.add(ManualAddResponse.builder().annotationId(removeRedactionRequest.getAnnotationId()).commentId(commentId)
|
response.add(ManualAddResponse.builder().annotationId(removeRedactionRequest.getAnnotationId()).commentId(commentId).build());
|
||||||
.build());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reprocess(dossierId, fileId);
|
reprocess(dossierId, fileId);
|
||||||
@ -176,12 +196,13 @@ public class ManualRedactionService {
|
|||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<ManualAddResponse> addForceRedaction(String dossierId, String fileId, List<ForceRedactionRequest> forceRedactionRequests) {
|
public List<ManualAddResponse> addForceRedaction(String dossierId, String fileId, Set<ForceRedactionRequestModel> forceRedactionRequests) {
|
||||||
|
|
||||||
var response = new ArrayList<ManualAddResponse>();
|
var response = new ArrayList<ManualAddResponse>();
|
||||||
dossierPersistenceService.getAndValidateDossier(dossierId);
|
dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||||
|
List<ForceRedactionRequest> requests = manualRedactionMapper.toForceRedactionRequestList(dossierId, fileId, forceRedactionRequests, getEntityLogEntryConsumer(fileId));
|
||||||
|
|
||||||
for (var forceRedactionRequest : forceRedactionRequests) {
|
for (var forceRedactionRequest : requests) {
|
||||||
forceRedactionPersistenceService.insert(fileId, forceRedactionRequest);
|
forceRedactionPersistenceService.insert(fileId, forceRedactionRequest);
|
||||||
|
|
||||||
Long commentId = commentService.addCommentAndGetId(fileId,
|
Long commentId = commentService.addCommentAndGetId(fileId,
|
||||||
@ -189,8 +210,7 @@ public class ManualRedactionService {
|
|||||||
forceRedactionRequest.getComment(),
|
forceRedactionRequest.getComment(),
|
||||||
forceRedactionRequest.getUser());
|
forceRedactionRequest.getUser());
|
||||||
|
|
||||||
response.add(ManualAddResponse.builder().annotationId(forceRedactionRequest.getAnnotationId()).commentId(commentId)
|
response.add(ManualAddResponse.builder().annotationId(forceRedactionRequest.getAnnotationId()).commentId(commentId).build());
|
||||||
.build());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reprocess(dossierId, fileId);
|
reprocess(dossierId, fileId);
|
||||||
@ -203,12 +223,16 @@ public class ManualRedactionService {
|
|||||||
|
|
||||||
@Deprecated(forRemoval = true)
|
@Deprecated(forRemoval = true)
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<ManualAddResponse> addLegalBasisChange(String dossierId, String fileId, List<LegalBasisChangeRequest> legalBasisChangeRequests) {
|
public List<ManualAddResponse> addLegalBasisChange(String dossierId, String fileId, Set<LegalBasisChangeRequestModel> legalBasisChangeRequests) {
|
||||||
|
|
||||||
var response = new ArrayList<ManualAddResponse>();
|
var response = new ArrayList<ManualAddResponse>();
|
||||||
dossierPersistenceService.getAndValidateDossier(dossierId);
|
dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||||
|
List<LegalBasisChangeRequest> requests = manualRedactionMapper.toLegalBasisChangeRequestList(dossierId,
|
||||||
|
fileId,
|
||||||
|
legalBasisChangeRequests,
|
||||||
|
getEntityLogEntryConsumer(fileId));
|
||||||
|
|
||||||
for (var legalBasisChangeRequest : legalBasisChangeRequests) {
|
for (var legalBasisChangeRequest : requests) {
|
||||||
legalBasisChangePersistenceService.insert(fileId, legalBasisChangeRequest);
|
legalBasisChangePersistenceService.insert(fileId, legalBasisChangeRequest);
|
||||||
|
|
||||||
Long commentId = commentService.addCommentAndGetId(fileId,
|
Long commentId = commentService.addCommentAndGetId(fileId,
|
||||||
@ -216,8 +240,7 @@ public class ManualRedactionService {
|
|||||||
legalBasisChangeRequest.getComment(),
|
legalBasisChangeRequest.getComment(),
|
||||||
legalBasisChangeRequest.getUser());
|
legalBasisChangeRequest.getUser());
|
||||||
|
|
||||||
response.add(ManualAddResponse.builder().annotationId(legalBasisChangeRequest.getAnnotationId()).commentId(commentId)
|
response.add(ManualAddResponse.builder().annotationId(legalBasisChangeRequest.getAnnotationId()).commentId(commentId).build());
|
||||||
.build());
|
|
||||||
}
|
}
|
||||||
reprocess(dossierId, fileId);
|
reprocess(dossierId, fileId);
|
||||||
fileStatusPersistenceService.setLastManualChangeDate(fileId, OffsetDateTime.now());
|
fileStatusPersistenceService.setLastManualChangeDate(fileId, OffsetDateTime.now());
|
||||||
@ -227,12 +250,22 @@ public class ManualRedactionService {
|
|||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public List<ManualAddResponse> addRecategorization(String dossierId, String fileId, List<RecategorizationRequest> recategorizationRequests) {
|
public List<ManualAddResponse> addRecategorization(String dossierId,
|
||||||
|
String fileId,
|
||||||
|
Set<RecategorizationRequestModel> recategorizationRequests,
|
||||||
|
String dossierTemplateId,
|
||||||
|
boolean includeUnprocessed) {
|
||||||
|
|
||||||
var response = new ArrayList<ManualAddResponse>();
|
var response = new ArrayList<ManualAddResponse>();
|
||||||
dossierPersistenceService.getAndValidateDossier(dossierId);
|
dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||||
|
List<RecategorizationRequest> requests = manualRedactionMapper.toRecategorizationRequestList(dossierId,
|
||||||
|
fileId,
|
||||||
|
dossierTemplateId,
|
||||||
|
recategorizationRequests,
|
||||||
|
includeUnprocessed,
|
||||||
|
getEntityLogEntryConsumer(fileId));
|
||||||
|
|
||||||
for (var recategorizationRequest : recategorizationRequests) {
|
for (var recategorizationRequest : requests) {
|
||||||
manualRedactionDictionaryUpdateHandler.validateDictionariesForAdd(recategorizationRequest, recategorizationRequest.getValue());
|
manualRedactionDictionaryUpdateHandler.validateDictionariesForAdd(recategorizationRequest, recategorizationRequest.getValue());
|
||||||
manualRedactionDictionaryUpdateHandler.validateDictionariesForDelete(recategorizationRequest,
|
manualRedactionDictionaryUpdateHandler.validateDictionariesForDelete(recategorizationRequest,
|
||||||
recategorizationRequest.getTypeToRemove(),
|
recategorizationRequest.getTypeToRemove(),
|
||||||
@ -259,8 +292,7 @@ public class ManualRedactionService {
|
|||||||
recategorizationRequest.getComment(),
|
recategorizationRequest.getComment(),
|
||||||
recategorizationRequest.getUser());
|
recategorizationRequest.getUser());
|
||||||
|
|
||||||
response.add(ManualAddResponse.builder().annotationId(recategorizationRequest.getAnnotationId()).commentId(commentId)
|
response.add(ManualAddResponse.builder().annotationId(recategorizationRequest.getAnnotationId()).commentId(commentId).build());
|
||||||
.build());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
reprocess(dossierId, fileId);
|
reprocess(dossierId, fileId);
|
||||||
@ -281,13 +313,15 @@ public class ManualRedactionService {
|
|||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Observed(name = "ManualRedactionService", contextualName = "add-manual-redaction")
|
@Observed(name = "ManualRedactionService", contextualName = "add-manual-redaction")
|
||||||
public List<ManualAddResponse> addResizeRedaction(String dossierId, String fileId, List<ResizeRedactionRequest> resizeRedactionRequests, boolean includeUnprocessed) {
|
public List<ManualAddResponse> addResizeRedaction(String dossierId, String fileId, Set<ResizeRedactionRequestModel> resizeRedactionRequests, boolean includeUnprocessed) {
|
||||||
|
|
||||||
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,
|
||||||
|
getEntityLogEntryConsumer(fileId));
|
||||||
|
|
||||||
for (ResizeRedactionRequest resizeRedactionRequest : resizeRedactionRequests) {
|
for (ResizeRedactionRequest resizeRedactionRequest : requests) {
|
||||||
|
|
||||||
var resizeRedaction = resizeRedactionPersistenceService.insert(fileId, resizeRedactionRequest);
|
var resizeRedaction = resizeRedactionPersistenceService.insert(fileId, resizeRedactionRequest);
|
||||||
manualResizeRedactionEntities.add(resizeRedaction);
|
manualResizeRedactionEntities.add(resizeRedaction);
|
||||||
@ -297,8 +331,7 @@ public class ManualRedactionService {
|
|||||||
resizeRedactionRequest.getAnnotationId(),
|
resizeRedactionRequest.getAnnotationId(),
|
||||||
resizeRedactionRequest.getComment(),
|
resizeRedactionRequest.getComment(),
|
||||||
resizeRedactionRequest.getUser());
|
resizeRedactionRequest.getUser());
|
||||||
response.add(ManualAddResponse.builder().annotationId(resizeRedactionRequest.getAnnotationId()).commentId(commentId)
|
response.add(ManualAddResponse.builder().annotationId(resizeRedactionRequest.getAnnotationId()).commentId(commentId).build());
|
||||||
.build());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<String> typeIdsOfModifiedDictionaries = manualRedactionDictionaryUpdateHandler.updateDictionaryForResizeRedactions(dossierId,
|
Set<String> typeIdsOfModifiedDictionaries = manualRedactionDictionaryUpdateHandler.updateDictionaryForResizeRedactions(dossierId,
|
||||||
@ -319,8 +352,7 @@ public class ManualRedactionService {
|
|||||||
|
|
||||||
FileModel fileStatus = fileStatusService.getStatus(fileId);
|
FileModel fileStatus = fileStatusService.getStatus(fileId);
|
||||||
if (!manualResizeRedactionEntities.isEmpty() && fileStatus.isExcludedFromAutomaticAnalysis()) {
|
if (!manualResizeRedactionEntities.isEmpty() && fileStatus.isExcludedFromAutomaticAnalysis()) {
|
||||||
ManualRedactions manualRedactions = ManualRedactions.builder().resizeRedactions(convertResizeRedactions(manualResizeRedactionEntities))
|
ManualRedactions manualRedactions = ManualRedactions.builder().resizeRedactions(convertResizeRedactions(manualResizeRedactionEntities)).build();
|
||||||
.build();
|
|
||||||
entityLogMergeService.sendToAnalyseQueue(fileId, dossierPersistenceService.getAndValidateDossier(dossierId), fileStatusService.getStatus(fileId), manualRedactions);
|
entityLogMergeService.sendToAnalyseQueue(fileId, dossierPersistenceService.getAndValidateDossier(dossierId), fileStatusService.getStatus(fileId), manualRedactions);
|
||||||
} else {
|
} else {
|
||||||
reprocess(dossierId, fileId);
|
reprocess(dossierId, fileId);
|
||||||
@ -378,48 +410,47 @@ public class ManualRedactionService {
|
|||||||
|
|
||||||
if (manualRedactions != null) {
|
if (manualRedactions != null) {
|
||||||
|
|
||||||
|
manualRedactions.getEntriesToAdd()
|
||||||
|
.forEach(e -> {
|
||||||
|
if (e.getProcessedDate() == null) {
|
||||||
|
addRedactionPersistenceService.markAsProcessed(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
manualRedactions.getEntriesToAdd()
|
manualRedactions.getIdsToRemove()
|
||||||
.forEach(e -> {
|
.forEach(e -> {
|
||||||
if (e.getProcessedDate() == null) {
|
if (e.getProcessedDate() == null) {
|
||||||
addRedactionPersistenceService.markAsProcessed(e);
|
removeRedactionPersistenceService.markAsProcessed(e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
manualRedactions.getIdsToRemove()
|
manualRedactions.getForceRedactions()
|
||||||
.forEach(e -> {
|
.forEach(e -> {
|
||||||
if (e.getProcessedDate() == null) {
|
if (e.getProcessedDate() == null) {
|
||||||
removeRedactionPersistenceService.markAsProcessed(e);
|
forceRedactionPersistenceService.markAsProcessed(e.getAnnotationId(), e.getFileId());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
manualRedactions.getForceRedactions()
|
manualRedactions.getRecategorizations()
|
||||||
.forEach(e -> {
|
.forEach(e -> {
|
||||||
if (e.getProcessedDate() == null) {
|
if (e.getProcessedDate() == null) {
|
||||||
forceRedactionPersistenceService.markAsProcessed(e.getAnnotationId(), e.getFileId());
|
recategorizationPersistenceService.markAsProcessed(e.getAnnotationId(), e.getFileId());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
manualRedactions.getRecategorizations()
|
manualRedactions.getResizeRedactions()
|
||||||
.forEach(e -> {
|
.forEach(e -> {
|
||||||
if (e.getProcessedDate() == null) {
|
if (e.getProcessedDate() == null) {
|
||||||
recategorizationPersistenceService.markAsProcessed(e.getAnnotationId(), e.getFileId());
|
resizeRedactionPersistenceService.markAsProcessed(e.getAnnotationId(), e.getFileId());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
manualRedactions.getResizeRedactions()
|
manualRedactions.getLegalBasisChanges()
|
||||||
.forEach(e -> {
|
.forEach(e -> {
|
||||||
if (e.getProcessedDate() == null) {
|
if (e.getProcessedDate() == null) {
|
||||||
resizeRedactionPersistenceService.markAsProcessed(e.getAnnotationId(), e.getFileId());
|
legalBasisChangePersistenceService.markAsProcessed(e.getAnnotationId(), e.getFileId());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
manualRedactions.getLegalBasisChanges()
|
|
||||||
.forEach(e -> {
|
|
||||||
if (e.getProcessedDate() == null) {
|
|
||||||
legalBasisChangePersistenceService.markAsProcessed(e.getAnnotationId(), e.getFileId());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -470,4 +501,43 @@ public class ManualRedactionService {
|
|||||||
list.forEach(manualRedactionEntry -> addRedactionPersistenceService.hardDelete(manualRedactionEntry.getFileId(), manualRedactionEntry.getAnnotationId()));
|
list.forEach(manualRedactionEntry -> addRedactionPersistenceService.hardDelete(manualRedactionEntry.getFileId(), manualRedactionEntry.getAnnotationId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void addManualRedactionEntry(String fileId, EntityLogEntry entityLogEntry) {
|
||||||
|
|
||||||
|
ManualRedactionEntry manualRedactionEntry = ManualRedactionEntry.builder()
|
||||||
|
.value(entityLogEntry.getValue())
|
||||||
|
.reason(entityLogEntry.getReason())
|
||||||
|
.section(entityLogEntry.getSection())
|
||||||
|
.annotationId(entityLogEntry.getId())
|
||||||
|
.type(entityLogEntry.getType())
|
||||||
|
.addToDossierDictionary(false)
|
||||||
|
.addToDictionary(false)
|
||||||
|
.positions(convertPositions(entityLogEntry.getPositions()))
|
||||||
|
.rectangle(entityLogEntry.getEntryType() == EntryType.AREA)
|
||||||
|
.user(KeycloakSecurity.getUserId())
|
||||||
|
.legalBasis(entityLogEntry.getLegalBasis())
|
||||||
|
.textAfter(entityLogEntry.getTextAfter())
|
||||||
|
.textBefore(entityLogEntry.getTextBefore())
|
||||||
|
.dictionaryEntryType(getDictionaryEntryType(entityLogEntry))
|
||||||
|
.fileId(fileId)
|
||||||
|
.requestDate(OffsetDateTime.now())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
addManualRedactionEntries(List.of(manualRedactionEntry), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<Rectangle> convertPositions(List<Position> positions) {
|
||||||
|
|
||||||
|
return positions.stream()
|
||||||
|
.map(rectangle -> new Rectangle(rectangle.x(), rectangle.y(), rectangle.w(), rectangle.h(), rectangle.getPageNumber()))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Consumer<EntityLogEntry> getEntityLogEntryConsumer(String fileId) {
|
||||||
|
|
||||||
|
return entry -> addManualRedactionEntry(fileId, entry);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,7 +7,7 @@ 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.ManualRedactionEntry;
|
||||||
import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
|
import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter;
|
||||||
|
|
||||||
public class ManualRedactionMapper implements BiConsumer<ManualRedactionEntryEntity, ManualRedactionEntry> {
|
public class ManualRedactionEntryMapper implements BiConsumer<ManualRedactionEntryEntity, ManualRedactionEntry> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void accept(ManualRedactionEntryEntity manualRedactionEntryEntity, ManualRedactionEntry manualRedactionEntry) {
|
public void accept(ManualRedactionEntryEntity manualRedactionEntryEntity, ManualRedactionEntry manualRedactionEntry) {
|
||||||
Loading…
x
Reference in New Issue
Block a user