diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/layoutparsing/classification/adapter/CustomEntityCreationAdapter.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/CustomEntityCreationAdapter.java similarity index 92% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/layoutparsing/classification/adapter/CustomEntityCreationAdapter.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/CustomEntityCreationAdapter.java index 03f94a0f..85ac720c 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/layoutparsing/classification/adapter/CustomEntityCreationAdapter.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/CustomEntityCreationAdapter.java @@ -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.util.stream.Collectors.groupingBy; @@ -58,9 +58,10 @@ public class CustomEntityCreationAdapter { public List createRedactionEntities(Set manualRedactionEntries, SemanticNode node) { List entityIdentifiers = manualRedactionEntries.stream() - .filter(manualRedactionEntry -> !manualRedactionEntry.isAddToDictionary() || !manualRedactionEntry.isAddToDossierDictionary()) + .filter(manualRedactionEntry -> !(manualRedactionEntry.isAddToDictionary() || manualRedactionEntry.isAddToDossierDictionary())) .map(EntityIdentifier::fromManualRedactionEntry) .toList(); + return toRedactionEntity(entityIdentifiers, node); } @@ -204,10 +205,21 @@ public class CustomEntityCreationAdapter { private double calculateDistance(Rectangle2D rectangle, Rectangle2D rectangle2D) { - return Math.abs(rectangle.getMinX() - rectangle2D.getMinX()) // - + Math.abs(rectangle.getMinY() - rectangle2D.getMinY()) // - + Math.abs(rectangle.getMaxX() - rectangle2D.getMaxX()) // - + Math.abs(rectangle.getMaxY() - rectangle2D.getMaxY()); + // mirrored coordinates safe comparison + double minX1 = Math.min(rectangle.getMinX(), rectangle.getMaxX()); + double minY1 = Math.min(rectangle.getMinY(), rectangle.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); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java index 1becb046..09347f7e 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java @@ -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.annotations.entitymapped.ManualRedactionEntry; 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.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.SemanticNode; import com.iqser.red.service.redaction.v1.server.layoutparsing.document.services.EntityCreationService; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/MigrationPocTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/MigrationPocTest.java index d0dbaf23..76ac38a5 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/MigrationPocTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/MigrationPocTest.java @@ -5,11 +5,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.when; import java.io.IOException; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; import java.util.stream.Stream; 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.RedactionLogEntry; 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.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.redaction.service.RedactionLogCreatorService; import com.knecon.fforesight.tenantcommons.TenantContext; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/acceptance_rules.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/acceptance_rules.drl index f569be68..173edb8f 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/acceptance_rules.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/acceptance_rules.drl @@ -451,7 +451,6 @@ rule "ETC.5.0: Ignore dossier_redaction entries if confidentiality is not 'confi $dossierRedaction: RedactionEntity(type == "dossier_redaction") then $dossierRedaction.ignore("ETC.5.0", "Ignore dossier redactions, when not confidential"); - update($dossierRedaction); $dossierRedaction.getIntersectingNodes().forEach(node -> update(node)); end diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/all_rules.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/all_rules.drl index e0cd7b46..d6c02c14 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/all_rules.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/all_rules.drl @@ -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" when $keyword: String() from List.of("livestock", - "live stock", - "tissue", - "tissues", - "liver", - "muscle", - "bovine", - "ruminant", - "ruminants") + "live stock", + "tissue", + "tissues", + "liver", + "muscle", + "bovine", + "ruminant", + "ruminants") $residueKeyword: String() from List.of("determination of residues", "determination of total residues") $section: Section(!hasTables(), containsStringIgnoreCase($residueKeyword), diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl index 932278c9..49eae02b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules.drl @@ -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" when $keyword: String() from List.of("livestock", - "live stock", - "tissue", - "tissues", - "liver", - "muscle", - "bovine", - "ruminant", - "ruminants") + "live stock", + "tissue", + "tissues", + "liver", + "muscle", + "bovine", + "ruminant", + "ruminants") $residueKeyword: String() from List.of("determination of residues", "determination of total residues") $section: Section(!hasTables(), containsStringIgnoreCase($residueKeyword), @@ -792,7 +792,6 @@ rule "ETC.5.0: Ignore dossier_redaction entries if confidentiality is not 'confi $dossierRedaction: RedactionEntity(type == "dossier_redaction") then $dossierRedaction.ignore("ETC.5.0", "Ignore dossier redactions, when not confidential"); - update($dossierRedaction); $dossierRedaction.getIntersectingNodes().forEach(node -> update(node)); end