RED-4586: When a redaction is shortened via resize the new value should replace the old one
This commit is contained in:
parent
72ad378c27
commit
34bee36e11
@ -100,8 +100,7 @@ public class ManualRedactionService {
|
||||
private final HashFunction hashFunction = Hashing.murmur3_128();
|
||||
|
||||
|
||||
public List<ManualAddResponse> addAddRedaction(String dossierId, String fileId,
|
||||
List<AddRedactionRequest> addRedactionRequests) {
|
||||
public List<ManualAddResponse> addAddRedaction(String dossierId, String fileId, List<AddRedactionRequest> addRedactionRequests) {
|
||||
|
||||
var response = new ArrayList<ManualAddResponse>();
|
||||
|
||||
@ -114,8 +113,7 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
validatePositions(fileId, addRedactionRequest);
|
||||
String annotationId = hashFunction.hashString(fileId + addRedactionRequest, StandardCharsets.UTF_8)
|
||||
.toString();
|
||||
String annotationId = hashFunction.hashString(fileId + addRedactionRequest, StandardCharsets.UTF_8).toString();
|
||||
addRedactionPersistenceService.insert(fileId, annotationId, addRedactionRequest);
|
||||
|
||||
Long commentId = null;
|
||||
@ -143,9 +141,7 @@ public class ManualRedactionService {
|
||||
.collect(Collectors.toList()), ManualRedactionEntry.class, new ManualRedactionMapper());
|
||||
|
||||
if (!manualTextRedactions.isEmpty()) {
|
||||
ManualRedactions manualRedactions = ManualRedactions.builder()
|
||||
.entriesToAdd(new HashSet<>(manualTextRedactions))
|
||||
.build();
|
||||
ManualRedactions manualRedactions = ManualRedactions.builder().entriesToAdd(new HashSet<>(manualTextRedactions)).build();
|
||||
addManualRedactionToAnalysisQueue(dossierId, fileId, manualRedactions);
|
||||
}
|
||||
|
||||
@ -179,8 +175,7 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
public List<ManualAddResponse> addRemoveRedaction(String dossierId, String fileId,
|
||||
List<RemoveRedactionRequest> removeRedactionRequests) {
|
||||
public List<ManualAddResponse> addRemoveRedaction(String dossierId, String fileId, List<RemoveRedactionRequest> removeRedactionRequests) {
|
||||
|
||||
var response = new ArrayList<ManualAddResponse>();
|
||||
var dossier = dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
@ -209,18 +204,14 @@ public class ManualRedactionService {
|
||||
.stream()
|
||||
.filter(entry -> entry.getId().equals(removeRedactionRequest.getAnnotationId()))
|
||||
.findFirst();
|
||||
actionPerformed = actionPerformed || redactionLogEntryOptional.isPresent() && redactionLogEntryOptional.get()
|
||||
.isHint();
|
||||
actionPerformed = actionPerformed || redactionLogEntryOptional.isPresent() && redactionLogEntryOptional.get().isHint();
|
||||
}
|
||||
|
||||
var removedFromDictionary = handleRemoveFromDictionary(redactionLog, dossier, fileId, removeRedactionRequest.getAnnotationId(), removeRedactionRequest.getStatus(), removeRedactionRequest.isRemoveFromDictionary(), false);
|
||||
|
||||
actionPerformed = actionPerformed || removedFromDictionary;
|
||||
|
||||
response.add(ManualAddResponse.builder()
|
||||
.annotationId(removeRedactionRequest.getAnnotationId())
|
||||
.commentId(commentId)
|
||||
.build());
|
||||
response.add(ManualAddResponse.builder().annotationId(removeRedactionRequest.getAnnotationId()).commentId(commentId).build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -234,8 +225,7 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
public List<ManualAddResponse> addForceRedaction(String dossierId, String fileId,
|
||||
List<ForceRedactionRequest> forceRedactionRequests) {
|
||||
public List<ManualAddResponse> addForceRedaction(String dossierId, String fileId, List<ForceRedactionRequest> forceRedactionRequests) {
|
||||
|
||||
var response = new ArrayList<ManualAddResponse>();
|
||||
dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
@ -250,10 +240,7 @@ public class ManualRedactionService {
|
||||
commentId = addComment(fileId, forceRedactionRequest.getAnnotationId(), forceRedactionRequest.getComment(), forceRedactionRequest.getUser()).getId();
|
||||
}
|
||||
actionPerformed = actionPerformed || AnnotationStatus.APPROVED.equals(forceRedactionRequest.getStatus());
|
||||
response.add(ManualAddResponse.builder()
|
||||
.annotationId(forceRedactionRequest.getAnnotationId())
|
||||
.commentId(commentId)
|
||||
.build());
|
||||
response.add(ManualAddResponse.builder().annotationId(forceRedactionRequest.getAnnotationId()).commentId(commentId).build());
|
||||
}
|
||||
|
||||
if (actionPerformed) {
|
||||
@ -266,8 +253,7 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
public List<ManualAddResponse> addLegalBasisChange(String dossierId, String fileId,
|
||||
List<LegalBasisChangeRequest> legalBasisChangeRequests) {
|
||||
public List<ManualAddResponse> addLegalBasisChange(String dossierId, String fileId, List<LegalBasisChangeRequest> legalBasisChangeRequests) {
|
||||
|
||||
var response = new ArrayList<ManualAddResponse>();
|
||||
dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
@ -281,10 +267,7 @@ public class ManualRedactionService {
|
||||
commentId = addComment(fileId, legalBasisChangeRequest.getAnnotationId(), legalBasisChangeRequest.getComment(), legalBasisChangeRequest.getUser()).getId();
|
||||
}
|
||||
|
||||
response.add(ManualAddResponse.builder()
|
||||
.annotationId(legalBasisChangeRequest.getAnnotationId())
|
||||
.commentId(commentId)
|
||||
.build());
|
||||
response.add(ManualAddResponse.builder().annotationId(legalBasisChangeRequest.getAnnotationId()).commentId(commentId).build());
|
||||
}
|
||||
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
|
||||
|
||||
@ -292,8 +275,7 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
public List<ManualAddResponse> addImageRecategorization(String dossierId, String fileId,
|
||||
List<ImageRecategorizationRequest> imageRecategorizationRequests) {
|
||||
public List<ManualAddResponse> addImageRecategorization(String dossierId, String fileId, List<ImageRecategorizationRequest> imageRecategorizationRequests) {
|
||||
|
||||
var response = new ArrayList<ManualAddResponse>();
|
||||
var actionPerformed = false;
|
||||
@ -310,10 +292,7 @@ public class ManualRedactionService {
|
||||
|
||||
actionPerformed = actionPerformed || !AnnotationStatus.REQUESTED.equals(imageRecategorizationRequest.getStatus());
|
||||
|
||||
response.add(ManualAddResponse.builder()
|
||||
.annotationId(imageRecategorizationRequest.getAnnotationId())
|
||||
.commentId(commentId)
|
||||
.build());
|
||||
response.add(ManualAddResponse.builder().annotationId(imageRecategorizationRequest.getAnnotationId()).commentId(commentId).build());
|
||||
}
|
||||
if (actionPerformed) {
|
||||
reprocess(dossierId, fileId);
|
||||
@ -480,18 +459,25 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
public List<ManualAddResponse> addResizeRedaction(String dossierId, String fileId,
|
||||
List<ResizeRedactionRequest> resizeRedactionRequests) {
|
||||
public List<ManualAddResponse> addResizeRedaction(String dossierId, String fileId, List<ResizeRedactionRequest> resizeRedactionRequests) {
|
||||
|
||||
var response = new ArrayList<ManualAddResponse>();
|
||||
|
||||
RedactionLog redactionLog = redactionLogService.getRedactionLog(dossierId, fileId, true, true);
|
||||
|
||||
for (ResizeRedactionRequest resizeRedactionRequest : resizeRedactionRequests) {
|
||||
Optional<RedactionLogEntry> redactionLogEntry = redactionLog.getRedactionLogEntry()
|
||||
.stream()
|
||||
.filter(r -> r.getId().equals(resizeRedactionRequest.getAnnotationId()))
|
||||
.findFirst();
|
||||
resizeRedactionPersistenceService.insert(fileId, resizeRedactionRequest);
|
||||
|
||||
if (resizeRedactionRequest.getUpdateDictionary() != null && resizeRedactionRequest.getUpdateDictionary() && resizeRedactionRequest.getStatus()
|
||||
.equals(AnnotationStatus.APPROVED)) {
|
||||
|
||||
updateDictionaryForResizeRedactions(dossierId, fileId, resizeRedactionRequest.getAnnotationId(), resizeRedactionRequest.getValue());
|
||||
log.debug("Value of ResizeRedactionRequest {}, Value of old entry {}", resizeRedactionRequest.getValue(), redactionLogEntry.map(RedactionLogEntry::getValue)
|
||||
.orElse(null));
|
||||
updateDictionaryForResizeRedactions(dossierId, fileId, resizeRedactionRequest.getAnnotationId(), resizeRedactionRequest.getValue(), redactionLogEntry.map(RedactionLogEntry::getValue)
|
||||
.orElse(null));
|
||||
}
|
||||
|
||||
Long commentId = null;
|
||||
@ -500,10 +486,7 @@ public class ManualRedactionService {
|
||||
commentId = addComment(fileId, resizeRedactionRequest.getAnnotationId(), resizeRedactionRequest.getComment(), resizeRedactionRequest.getUser()).getId();
|
||||
}
|
||||
|
||||
response.add(ManualAddResponse.builder()
|
||||
.annotationId(resizeRedactionRequest.getAnnotationId())
|
||||
.commentId(commentId)
|
||||
.build());
|
||||
response.add(ManualAddResponse.builder().annotationId(resizeRedactionRequest.getAnnotationId()).commentId(commentId).build());
|
||||
}
|
||||
|
||||
reprocess(dossierId, fileId);
|
||||
@ -514,24 +497,19 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
private void updateDictionaryForResizeRedactions(String dossierId, String fileId, String annotationId,
|
||||
String newValue) {
|
||||
private void updateDictionaryForResizeRedactions(String dossierId, String fileId, String annotationId, String newValue, String oldValue) {
|
||||
|
||||
RedactionLog redactionLog = redactionLogService.getRedactionLog(dossierId, fileId, true, true);
|
||||
|
||||
var dossier = dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
|
||||
Optional<RedactionLogEntry> redactionLogEntry = redactionLog.getRedactionLogEntry()
|
||||
.stream()
|
||||
.filter(r -> r.getId().equals(annotationId))
|
||||
.findFirst();
|
||||
if (redactionLogEntry.isPresent() && (redactionLogEntry.get().isDictionaryEntry() || redactionLogEntry.get()
|
||||
.isDossierDictionaryEntry())) {
|
||||
Optional<RedactionLogEntry> redactionLogEntry = redactionLog.getRedactionLogEntry().stream().filter(r -> r.getId().equals(annotationId)).findFirst();
|
||||
if (redactionLogEntry.isPresent() && (redactionLogEntry.get().isDictionaryEntry() || redactionLogEntry.get().isDossierDictionaryEntry())) {
|
||||
|
||||
if (redactionLogEntry.get().getValue().length() > newValue.length()) {
|
||||
log.info("Remove old value '{}' from dictionary", redactionLogEntry.get().getValue());
|
||||
removeFromDictionary(buildTypeId(redactionLogEntry.get(), dossier), redactionLogEntry.get()
|
||||
.getValue(), dossierId, fileId, getDictionaryEntryType(redactionLogEntry.get()));
|
||||
log.debug("old: {}, new: {}", oldValue, newValue);
|
||||
if (oldValue != null && oldValue.length() > newValue.length()) {
|
||||
log.info("Remove old value '{}' from dictionary", oldValue);
|
||||
removeFromDictionary(buildTypeId(redactionLogEntry.get(), dossier), oldValue, dossierId, fileId, getDictionaryEntryType(redactionLogEntry.get()));
|
||||
}
|
||||
|
||||
log.info("Add new value '{}' to dictionary", newValue);
|
||||
@ -553,8 +531,7 @@ public class ManualRedactionService {
|
||||
|
||||
|
||||
@SuppressWarnings("PMD")
|
||||
public void updateRemoveRedactionStatus(String dossierId, String fileId, List<String> annotationIds,
|
||||
AnnotationStatus annotationStatus) {
|
||||
public void updateRemoveRedactionStatus(String dossierId, String fileId, List<String> annotationIds, AnnotationStatus annotationStatus) {
|
||||
|
||||
var dossier = dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
RedactionLog redactionLog = redactionLogService.getRedactionLog(dossierId, fileId, true, true);
|
||||
@ -598,8 +575,7 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
public void updateForceRedactionStatus(String dossierId, String fileId, List<String> annotationIds,
|
||||
AnnotationStatus annotationStatus) {
|
||||
public void updateForceRedactionStatus(String dossierId, String fileId, List<String> annotationIds, AnnotationStatus annotationStatus) {
|
||||
|
||||
dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
for (var annotationId : annotationIds) {
|
||||
@ -618,8 +594,7 @@ public class ManualRedactionService {
|
||||
|
||||
|
||||
@Transactional
|
||||
public void updateLegalBasisChangeStatus(String dossierId, String fileId, List<String> annotationIds,
|
||||
AnnotationStatus annotationStatus) {
|
||||
public void updateLegalBasisChangeStatus(String dossierId, String fileId, List<String> annotationIds, AnnotationStatus annotationStatus) {
|
||||
|
||||
dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
for (var annotationId : annotationIds) {
|
||||
@ -629,8 +604,7 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
public void updateImageRecategorizationStatus(String dossierId, String fileId, List<String> annotationIds,
|
||||
AnnotationStatus annotationStatus) {
|
||||
public void updateImageRecategorizationStatus(String dossierId, String fileId, List<String> annotationIds, AnnotationStatus annotationStatus) {
|
||||
|
||||
dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
|
||||
@ -653,15 +627,14 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
public void updateResizeRedactionStatus(String dossierId, String fileId, List<String> annotationIds,
|
||||
AnnotationStatus annotationStatus) {
|
||||
public void updateResizeRedactionStatus(String dossierId, String fileId, List<String> annotationIds, AnnotationStatus annotationStatus) {
|
||||
|
||||
dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
for (var annotationId : annotationIds) {
|
||||
|
||||
var resizeRedaction = resizeRedactionPersistenceService.findResizeRedaction(fileId, annotationId);
|
||||
if (resizeRedaction.getUpdateDictionary() != null && resizeRedaction.getUpdateDictionary() && annotationStatus.equals(AnnotationStatus.APPROVED)) {
|
||||
updateDictionaryForResizeRedactions(dossierId, fileId, annotationId, resizeRedaction.getValue());
|
||||
updateDictionaryForResizeRedactions(dossierId, fileId, annotationId, resizeRedaction.getValue(), null);
|
||||
}
|
||||
|
||||
resizeRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus);
|
||||
@ -672,8 +645,7 @@ public class ManualRedactionService {
|
||||
|
||||
|
||||
@SuppressWarnings("PMD")
|
||||
public void updateAddRedactionStatus(String dossierId, String fileId, List<String> annotationIds,
|
||||
AnnotationStatus annotationStatus) {
|
||||
public void updateAddRedactionStatus(String dossierId, String fileId, List<String> annotationIds, AnnotationStatus annotationStatus) {
|
||||
|
||||
var dossier = dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
for (var annotationId : annotationIds) {
|
||||
@ -692,8 +664,7 @@ public class ManualRedactionService {
|
||||
}
|
||||
}
|
||||
|
||||
addRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus, OffsetDateTime.now()
|
||||
.truncatedTo(ChronoUnit.MILLIS));
|
||||
addRedactionPersistenceService.updateStatus(fileId, annotationId, annotationStatus, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
|
||||
}
|
||||
@ -740,12 +711,7 @@ public class ManualRedactionService {
|
||||
|
||||
fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.SURROUNDING_TEXT_PROCESSING);
|
||||
|
||||
var analyseRequest = AnalyzeRequest.builder()
|
||||
.messageType(MessageType.SURROUNDING_TEXT)
|
||||
.dossierId(dossierId)
|
||||
.fileId(fileId)
|
||||
.manualRedactions(manualRedactions)
|
||||
.build();
|
||||
var analyseRequest = AnalyzeRequest.builder().messageType(MessageType.SURROUNDING_TEXT).dossierId(dossierId).fileId(fileId).manualRedactions(manualRedactions).build();
|
||||
|
||||
try {
|
||||
rabbitTemplate.convertAndSend(MessagingConfiguration.REDACTION_QUEUE, objectMapper.writeValueAsString(analyseRequest), message -> {
|
||||
@ -759,13 +725,11 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
private void approveStatusForRedactionsWithSameValue(DossierEntity dossier, boolean addToDictionary,
|
||||
boolean addToDossierDictionary, String value) {
|
||||
private void approveStatusForRedactionsWithSameValue(DossierEntity dossier, boolean addToDictionary, boolean addToDossierDictionary, String value) {
|
||||
|
||||
List<DossierEntity> dossiers = new ArrayList<>();
|
||||
if (addToDictionary) {
|
||||
dossiers = dossierTemplatePersistenceService.getDossierTemplate(dossier.getDossierTemplateId())
|
||||
.getDossiers();
|
||||
dossiers = dossierTemplatePersistenceService.getDossierTemplate(dossier.getDossierTemplateId()).getDossiers();
|
||||
|
||||
}
|
||||
if (addToDossierDictionary) {
|
||||
@ -791,8 +755,7 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
private boolean handleRemoveFromDictionary(RedactionLog redactionLog, DossierEntity dossier, String fileId,
|
||||
String annotationId, AnnotationStatus status,
|
||||
private boolean handleRemoveFromDictionary(RedactionLog redactionLog, DossierEntity dossier, String fileId, String annotationId, AnnotationStatus status,
|
||||
boolean removeFromDictionary, boolean revert) {
|
||||
|
||||
if (status == AnnotationStatus.APPROVED) {
|
||||
@ -824,20 +787,21 @@ public class ManualRedactionService {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private void removeResizeRedactionsWithAddToDictionary(String dossierTemplateId, String redactionLogEntryValue) {
|
||||
|
||||
var resizeRedactionsWithSameValue = resizeRedactionPersistenceService.findByAnnotationStatusAndValue(AnnotationStatus.APPROVED, redactionLogEntryValue);
|
||||
resizeRedactionsWithSameValue.forEach(resizeRedaction -> {
|
||||
var file = fileStatusPersistenceService.getStatus(resizeRedaction.getId().getFileId());
|
||||
var dossierForResizeRedaction = dossierPersistenceService.findByDossierId(file.getDossierId());
|
||||
if(!file.getWorkflowStatus().equals(WorkflowStatus.APPROVED) && dossierTemplateId.equals(dossierForResizeRedaction.getDossierTemplateId())) {
|
||||
resizeRedactionPersistenceService.hardDelete(resizeRedaction.getId()
|
||||
.getFileId(), resizeRedaction.getId().getAnnotationId());
|
||||
if (!file.getWorkflowStatus().equals(WorkflowStatus.APPROVED) && dossierTemplateId.equals(dossierForResizeRedaction.getDossierTemplateId())) {
|
||||
resizeRedactionPersistenceService.hardDelete(resizeRedaction.getId().getFileId(), resizeRedaction.getId().getAnnotationId());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void addToDictionary(String typeId, String value, String dossierId, String fileId,
|
||||
DictionaryEntryType dictionaryEntryType) {
|
||||
|
||||
private void addToDictionary(String typeId, String value, String dossierId, String fileId, DictionaryEntryType dictionaryEntryType) {
|
||||
|
||||
try {
|
||||
log.debug("Adding entry: {} to {} for {} / {}", value, typeId, dossierId, fileId);
|
||||
@ -848,8 +812,7 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
private void removeFromDictionary(String typeId, String value, String dossierId, String fileId,
|
||||
DictionaryEntryType dictionaryEntryType) {
|
||||
private void removeFromDictionary(String typeId, String value, String dossierId, String fileId, DictionaryEntryType dictionaryEntryType) {
|
||||
|
||||
try {
|
||||
log.debug("Deleting entries to {} for {} / {}", typeId, dossierId, fileId);
|
||||
@ -872,10 +835,8 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
private boolean handleAddToDictionary(String fileId, String annotationId, String typeId, String value,
|
||||
AnnotationStatus status, boolean addToDictionary,
|
||||
boolean addToDossierDictionary, boolean revert, String dossierId,
|
||||
DictionaryEntryType dictionaryEntryType) {
|
||||
private boolean handleAddToDictionary(String fileId, String annotationId, String typeId, String value, AnnotationStatus status, boolean addToDictionary,
|
||||
boolean addToDossierDictionary, boolean revert, String dossierId, DictionaryEntryType dictionaryEntryType) {
|
||||
|
||||
if (status == AnnotationStatus.APPROVED) {
|
||||
addRedactionPersistenceService.updateStatus(fileId, annotationId, status, addToDictionary, addToDossierDictionary);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user