Merge branch 'RED-8586-fix-bp' into 'release/4.244.x'
RED-8586 - Add higher salience to rule ETC.5.1 See merge request redactmanager/redaction-service!298
This commit is contained in:
commit
ec6cf3efb0
@ -1,7 +1,6 @@
|
|||||||
package com.iqser.red.service.redaction.v1.server.service;
|
package com.iqser.red.service.redaction.v1.server.service;
|
||||||
|
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -13,7 +12,6 @@ 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.ChangeType;
|
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.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.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.ManualChange;
|
|
||||||
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;
|
||||||
|
|
||||||
@ -29,7 +27,6 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
|
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
|
||||||
public class EntityChangeLogService {
|
public class EntityChangeLogService {
|
||||||
|
|
||||||
|
|
||||||
@Timed("redactmanager_computeChanges")
|
@Timed("redactmanager_computeChanges")
|
||||||
public boolean computeChanges(List<EntityLogEntry> previousEntityLogEntries, List<EntityLogEntry> newEntityLogEntries, ManualRedactions manualRedactions, int analysisNumber) {
|
public boolean computeChanges(List<EntityLogEntry> previousEntityLogEntries, List<EntityLogEntry> newEntityLogEntries, ManualRedactions manualRedactions, int analysisNumber) {
|
||||||
|
|
||||||
@ -42,7 +39,9 @@ public class EntityChangeLogService {
|
|||||||
boolean hasChanges = false;
|
boolean hasChanges = false;
|
||||||
|
|
||||||
for (EntityLogEntry entityLogEntry : newEntityLogEntries) {
|
for (EntityLogEntry entityLogEntry : newEntityLogEntries) {
|
||||||
Optional<EntityLogEntry> optionalPreviousEntity = previousEntityLogEntries.stream().filter(entry -> entry.getId().equals(entityLogEntry.getId())).findAny();
|
Optional<EntityLogEntry> optionalPreviousEntity = previousEntityLogEntries.stream()
|
||||||
|
.filter(entry -> entry.getId().equals(entityLogEntry.getId()))
|
||||||
|
.findAny();
|
||||||
if (optionalPreviousEntity.isEmpty()) {
|
if (optionalPreviousEntity.isEmpty()) {
|
||||||
hasChanges = true;
|
hasChanges = true;
|
||||||
entityLogEntry.getChanges().add(new Change(analysisNumber, ChangeType.ADDED, now));
|
entityLogEntry.getChanges().add(new Change(analysisNumber, ChangeType.ADDED, now));
|
||||||
@ -68,11 +67,15 @@ public class EntityChangeLogService {
|
|||||||
int analysisNumber,
|
int analysisNumber,
|
||||||
OffsetDateTime now) {
|
OffsetDateTime now) {
|
||||||
|
|
||||||
Set<String> existingIds = newEntityLogEntries.stream().map(EntityLogEntry::getId).collect(Collectors.toSet());
|
Set<String> existingIds = newEntityLogEntries.stream()
|
||||||
|
.map(EntityLogEntry::getId)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
List<EntityLogEntry> removedEntries = previousEntityLogEntries.stream()
|
List<EntityLogEntry> removedEntries = previousEntityLogEntries.stream()
|
||||||
.filter(entry -> !existingIds.contains(entry.getId()))
|
.filter(entry -> !existingIds.contains(entry.getId()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
var removedDossierRedaction = removedEntries.stream().filter(e -> e.getState() == EntryState.REMOVED && e.getType().equals("dossier_redaction")).toList();
|
List<EntityLogEntry> removedDossierRedaction = removedEntries.stream()
|
||||||
|
.filter(e -> e.getState() == EntryState.REMOVED && e.getType().equals("dossier_redaction"))
|
||||||
|
.toList();
|
||||||
previousEntityLogEntries.removeAll(removedDossierRedaction);
|
previousEntityLogEntries.removeAll(removedDossierRedaction);
|
||||||
removedEntries.removeAll(removedDossierRedaction);
|
removedEntries.removeAll(removedDossierRedaction);
|
||||||
removedEntries.forEach(entry -> entry.getChanges().add(new Change(analysisNumber, ChangeType.REMOVED, now)));
|
removedEntries.forEach(entry -> entry.getChanges().add(new Change(analysisNumber, ChangeType.REMOVED, now)));
|
||||||
@ -88,13 +91,15 @@ public class EntityChangeLogService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
manualRedactions.getIdsToRemove().stream()
|
manualRedactions.getIdsToRemove()
|
||||||
|
.stream()
|
||||||
.filter(IdRemoval::isRemoveFromDictionary)//
|
.filter(IdRemoval::isRemoveFromDictionary)//
|
||||||
.filter(removed -> removed.getAnnotationId().equals(entry.getId()))//
|
.filter(removed -> removed.getAnnotationId().equals(entry.getId()))//
|
||||||
.findFirst()//
|
.findFirst()//
|
||||||
.ifPresent(idRemove -> entry.getManualChanges().add(ManualChangeFactory.toManualChange(idRemove, false)));
|
.ifPresent(idRemove -> entry.getManualChanges().add(ManualChangeFactory.toManualChange(idRemove, false)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private ChangeType calculateChangeType(EntryState state, EntryState previousState) {
|
private ChangeType calculateChangeType(EntryState state, EntryState previousState) {
|
||||||
|
|
||||||
if (state.equals(previousState)) {
|
if (state.equals(previousState)) {
|
||||||
|
|||||||
@ -700,6 +700,7 @@ rule "ETC.5.0: Skip dossier_redaction entries if confidentiality is 'confidentia
|
|||||||
end
|
end
|
||||||
|
|
||||||
rule "ETC.5.1: Remove dossier_redaction entries if confidentiality is not 'confidential'"
|
rule "ETC.5.1: Remove dossier_redaction entries if confidentiality is not 'confidential'"
|
||||||
|
salience 256
|
||||||
when
|
when
|
||||||
not FileAttribute(label == "Confidentiality", value == "confidential")
|
not FileAttribute(label == "Confidentiality", value == "confidential")
|
||||||
$dossierRedaction: TextEntity(type() == "dossier_redaction")
|
$dossierRedaction: TextEntity(type() == "dossier_redaction")
|
||||||
|
|||||||
@ -1158,6 +1158,7 @@ rule "ETC.5.0: Skip dossier_redaction entries if confidentiality is 'confidentia
|
|||||||
end
|
end
|
||||||
|
|
||||||
rule "ETC.5.1: Remove dossier_redaction entries if confidentiality is not 'confidential'"
|
rule "ETC.5.1: Remove dossier_redaction entries if confidentiality is not 'confidential'"
|
||||||
|
salience 256
|
||||||
when
|
when
|
||||||
not FileAttribute(label == "Confidentiality", value == "confidential")
|
not FileAttribute(label == "Confidentiality", value == "confidential")
|
||||||
$dossierRedaction: TextEntity(type() == "dossier_redaction")
|
$dossierRedaction: TextEntity(type() == "dossier_redaction")
|
||||||
|
|||||||
@ -810,6 +810,7 @@ rule "ETC.5.0: Skip dossier_redaction entries if confidentiality is 'confidentia
|
|||||||
end
|
end
|
||||||
|
|
||||||
rule "ETC.5.1: Remove dossier_redaction entries if confidentiality is not 'confidential'"
|
rule "ETC.5.1: Remove dossier_redaction entries if confidentiality is not 'confidential'"
|
||||||
|
salience 256
|
||||||
when
|
when
|
||||||
not FileAttribute(label == "Confidentiality", value == "confidential")
|
not FileAttribute(label == "Confidentiality", value == "confidential")
|
||||||
$dossierRedaction: TextEntity(type() == "dossier_redaction")
|
$dossierRedaction: TextEntity(type() == "dossier_redaction")
|
||||||
|
|||||||
@ -459,6 +459,7 @@ rule "ETC.5.0: Skip dossier_redaction entries if confidentiality is 'confidentia
|
|||||||
end
|
end
|
||||||
|
|
||||||
rule "ETC.5.1: Remove dossier_redaction entries if confidentiality is not 'confidential'"
|
rule "ETC.5.1: Remove dossier_redaction entries if confidentiality is not 'confidential'"
|
||||||
|
salience 256
|
||||||
when
|
when
|
||||||
not FileAttribute(label == "Confidentiality", value == "confidential")
|
not FileAttribute(label == "Confidentiality", value == "confidential")
|
||||||
$dossierRedaction: TextEntity(type() == "dossier_redaction")
|
$dossierRedaction: TextEntity(type() == "dossier_redaction")
|
||||||
|
|||||||
@ -1167,6 +1167,7 @@ rule "ETC.5.0: Skip dossier_redaction entries if confidentiality is 'confidentia
|
|||||||
end
|
end
|
||||||
|
|
||||||
rule "ETC.5.1: Remove dossier_redaction entries if confidentiality is not 'confidential'"
|
rule "ETC.5.1: Remove dossier_redaction entries if confidentiality is not 'confidential'"
|
||||||
|
salience 256
|
||||||
when
|
when
|
||||||
not FileAttribute(label == "Confidentiality", value == "confidential")
|
not FileAttribute(label == "Confidentiality", value == "confidential")
|
||||||
$dossierRedaction: TextEntity(type() == "dossier_redaction")
|
$dossierRedaction: TextEntity(type() == "dossier_redaction")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user