hotfix: fix rule creating endless loop with dossier-redactions
This commit is contained in:
parent
3bc11b7d33
commit
25762e71b7
@ -1,4 +1,4 @@
|
|||||||
package com.iqser.red.service.redaction.v1.server.layoutparsing.classification.adapter;
|
package com.iqser.red.service.redaction.v1.server.redaction.adapter;
|
||||||
|
|
||||||
import static java.lang.String.format;
|
import static java.lang.String.format;
|
||||||
import static java.util.stream.Collectors.groupingBy;
|
import static java.util.stream.Collectors.groupingBy;
|
||||||
@ -58,9 +58,10 @@ public class CustomEntityCreationAdapter {
|
|||||||
public List<RedactionEntity> createRedactionEntities(Set<ManualRedactionEntry> manualRedactionEntries, SemanticNode node) {
|
public List<RedactionEntity> createRedactionEntities(Set<ManualRedactionEntry> manualRedactionEntries, SemanticNode node) {
|
||||||
|
|
||||||
List<EntityIdentifier> entityIdentifiers = manualRedactionEntries.stream()
|
List<EntityIdentifier> entityIdentifiers = manualRedactionEntries.stream()
|
||||||
.filter(manualRedactionEntry -> !manualRedactionEntry.isAddToDictionary() || !manualRedactionEntry.isAddToDossierDictionary())
|
.filter(manualRedactionEntry -> !(manualRedactionEntry.isAddToDictionary() || manualRedactionEntry.isAddToDossierDictionary()))
|
||||||
.map(EntityIdentifier::fromManualRedactionEntry)
|
.map(EntityIdentifier::fromManualRedactionEntry)
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
return toRedactionEntity(entityIdentifiers, node);
|
return toRedactionEntity(entityIdentifiers, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,10 +205,21 @@ public class CustomEntityCreationAdapter {
|
|||||||
|
|
||||||
private double calculateDistance(Rectangle2D rectangle, Rectangle2D rectangle2D) {
|
private double calculateDistance(Rectangle2D rectangle, Rectangle2D rectangle2D) {
|
||||||
|
|
||||||
return Math.abs(rectangle.getMinX() - rectangle2D.getMinX()) //
|
// mirrored coordinates safe comparison
|
||||||
+ Math.abs(rectangle.getMinY() - rectangle2D.getMinY()) //
|
double minX1 = Math.min(rectangle.getMinX(), rectangle.getMaxX());
|
||||||
+ Math.abs(rectangle.getMaxX() - rectangle2D.getMaxX()) //
|
double minY1 = Math.min(rectangle.getMinY(), rectangle.getMaxY());
|
||||||
+ Math.abs(rectangle.getMaxY() - rectangle2D.getMaxY());
|
double maxX1 = Math.max(rectangle.getMinX(), rectangle.getMaxX());
|
||||||
|
double maxY1 = Math.max(rectangle.getMinY(), rectangle.getMaxY());
|
||||||
|
|
||||||
|
double minX2 = Math.min(rectangle2D.getMinX(), rectangle2D.getMaxX());
|
||||||
|
double minY2 = Math.min(rectangle2D.getMinY(), rectangle2D.getMaxY());
|
||||||
|
double maxX2 = Math.max(rectangle2D.getMinX(), rectangle2D.getMaxX());
|
||||||
|
double maxY2 = Math.max(rectangle2D.getMinY(), rectangle2D.getMaxY());
|
||||||
|
|
||||||
|
return Math.abs(minX1 - minX2) //
|
||||||
|
+ Math.abs(minY1 - minY2) //
|
||||||
|
+ Math.abs(maxX1 - maxX2) //
|
||||||
|
+ Math.abs(maxY1 - maxY2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -11,9 +11,8 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequ
|
|||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute;
|
||||||
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.redactionlog.Engine;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine;
|
||||||
import com.iqser.red.service.redaction.v1.server.layoutparsing.classification.adapter.CustomEntityCreationAdapter;
|
import com.iqser.red.service.redaction.v1.server.redaction.adapter.CustomEntityCreationAdapter;
|
||||||
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.graph.entity.EntityType;
|
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.graph.entity.EntityType;
|
||||||
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.graph.entity.RedactionEntity;
|
|
||||||
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.graph.nodes.Document;
|
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.graph.nodes.Document;
|
||||||
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.graph.nodes.SemanticNode;
|
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.graph.nodes.SemanticNode;
|
||||||
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.services.EntityCreationService;
|
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.services.EntityCreationService;
|
||||||
|
|||||||
@ -5,11 +5,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
|
|||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
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.stream.Collectors;
|
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
import org.drools.io.ClassPathResource;
|
import org.drools.io.ClassPathResource;
|
||||||
@ -27,10 +24,9 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
|
|||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry;
|
||||||
import com.iqser.red.service.redaction.v1.model.StructureAnalyzeRequest;
|
import com.iqser.red.service.redaction.v1.model.StructureAnalyzeRequest;
|
||||||
import com.iqser.red.service.redaction.v1.server.layoutparsing.classification.adapter.CustomEntityCreationAdapter;
|
import com.iqser.red.service.redaction.v1.server.redaction.adapter.CustomEntityCreationAdapter;
|
||||||
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.data.DocumentData;
|
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.data.DocumentData;
|
||||||
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.data.mapper.DocumentGraphMapper;
|
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.data.mapper.DocumentGraphMapper;
|
||||||
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.graph.entity.RedactionEntity;
|
|
||||||
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.graph.nodes.Document;
|
import com.iqser.red.service.redaction.v1.server.layoutparsing.document.graph.nodes.Document;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.service.RedactionLogCreatorService;
|
import com.iqser.red.service.redaction.v1.server.redaction.service.RedactionLogCreatorService;
|
||||||
import com.knecon.fforesight.tenantcommons.TenantContext;
|
import com.knecon.fforesight.tenantcommons.TenantContext;
|
||||||
|
|||||||
@ -451,7 +451,6 @@ rule "ETC.5.0: Ignore dossier_redaction entries if confidentiality is not 'confi
|
|||||||
$dossierRedaction: RedactionEntity(type == "dossier_redaction")
|
$dossierRedaction: RedactionEntity(type == "dossier_redaction")
|
||||||
then
|
then
|
||||||
$dossierRedaction.ignore("ETC.5.0", "Ignore dossier redactions, when not confidential");
|
$dossierRedaction.ignore("ETC.5.0", "Ignore dossier redactions, when not confidential");
|
||||||
update($dossierRedaction);
|
|
||||||
$dossierRedaction.getIntersectingNodes().forEach(node -> update(node));
|
$dossierRedaction.getIntersectingNodes().forEach(node -> update(node));
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -489,14 +489,14 @@ rule "CBI.14.0: Redact CBI_sponsor entities if preceded by \"batches produced at
|
|||||||
rule "CBI.15.0: Redact row if row contains \"determination of residues\" and livestock keyword"
|
rule "CBI.15.0: Redact row if row contains \"determination of residues\" and livestock keyword"
|
||||||
when
|
when
|
||||||
$keyword: String() from List.of("livestock",
|
$keyword: String() from List.of("livestock",
|
||||||
"live stock",
|
"live stock",
|
||||||
"tissue",
|
"tissue",
|
||||||
"tissues",
|
"tissues",
|
||||||
"liver",
|
"liver",
|
||||||
"muscle",
|
"muscle",
|
||||||
"bovine",
|
"bovine",
|
||||||
"ruminant",
|
"ruminant",
|
||||||
"ruminants")
|
"ruminants")
|
||||||
$residueKeyword: String() from List.of("determination of residues", "determination of total residues")
|
$residueKeyword: String() from List.of("determination of residues", "determination of total residues")
|
||||||
$section: Section(!hasTables(),
|
$section: Section(!hasTables(),
|
||||||
containsStringIgnoreCase($residueKeyword),
|
containsStringIgnoreCase($residueKeyword),
|
||||||
|
|||||||
@ -320,14 +320,14 @@ rule "CBI.14.0: Redact CBI_sponsor entities if preceded by \"batches produced at
|
|||||||
rule "CBI.15.0: Redact row if row contains \"determination of residues\" and livestock keyword"
|
rule "CBI.15.0: Redact row if row contains \"determination of residues\" and livestock keyword"
|
||||||
when
|
when
|
||||||
$keyword: String() from List.of("livestock",
|
$keyword: String() from List.of("livestock",
|
||||||
"live stock",
|
"live stock",
|
||||||
"tissue",
|
"tissue",
|
||||||
"tissues",
|
"tissues",
|
||||||
"liver",
|
"liver",
|
||||||
"muscle",
|
"muscle",
|
||||||
"bovine",
|
"bovine",
|
||||||
"ruminant",
|
"ruminant",
|
||||||
"ruminants")
|
"ruminants")
|
||||||
$residueKeyword: String() from List.of("determination of residues", "determination of total residues")
|
$residueKeyword: String() from List.of("determination of residues", "determination of total residues")
|
||||||
$section: Section(!hasTables(),
|
$section: Section(!hasTables(),
|
||||||
containsStringIgnoreCase($residueKeyword),
|
containsStringIgnoreCase($residueKeyword),
|
||||||
@ -792,7 +792,6 @@ rule "ETC.5.0: Ignore dossier_redaction entries if confidentiality is not 'confi
|
|||||||
$dossierRedaction: RedactionEntity(type == "dossier_redaction")
|
$dossierRedaction: RedactionEntity(type == "dossier_redaction")
|
||||||
then
|
then
|
||||||
$dossierRedaction.ignore("ETC.5.0", "Ignore dossier redactions, when not confidential");
|
$dossierRedaction.ignore("ETC.5.0", "Ignore dossier redactions, when not confidential");
|
||||||
update($dossierRedaction);
|
|
||||||
$dossierRedaction.getIntersectingNodes().forEach(node -> update(node));
|
$dossierRedaction.getIntersectingNodes().forEach(node -> update(node));
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user