From 6521c86e9f7ae4d6208bba971997795bf956e28e Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Thu, 7 Sep 2023 11:19:50 +0200 Subject: [PATCH] DM-285: Entity to component mappings with new ruleset * refactoring structure * added custom syntax validation, such that rule files may not be corrupted --- .../v1/model/DroolsSyntaxValidation.java | 17 +- .../redaction/v1/server/Application.java | 1 - .../RedactionServiceSettings.java | 2 +- .../server/controller/ControllerAdvice.java | 4 +- .../controller/RedactionController.java | 8 +- .../controller/RuleBuilderController.java | 12 +- .../document/graph/entity/RuleIdentifier.java | 41 ----- .../{redaction => }/model/KieWrapper.java | 2 +- .../{redaction => }/model/ManualEntity.java | 10 +- .../adapter => model}/NerEntities.java | 4 +- .../model/RectangleWithPage.java | 2 +- .../model/dictionary/Dictionary.java | 10 +- .../model/dictionary/DictionaryEntries.java | 2 +- .../model/dictionary/DictionaryIncrement.java | 2 +- .../dictionary/DictionaryIncrementValue.java | 2 +- .../model/dictionary/DictionaryModel.java | 4 +- .../dictionary/DictionaryRepresentation.java | 2 +- .../model/dictionary/DictionaryVersion.java | 2 +- .../dictionary/SearchImplementation.java | 4 +- .../model/dictionary/TenantDictionary.java | 2 +- .../ConsecutiveBoundaryCollector.java | 2 +- .../data => model/document}/DocumentData.java | 2 +- .../document}/DocumentTree.java | 18 +- .../graph => model/document}/TextRange.java | 4 +- .../document}/entity/Entity.java | 51 ++---- .../document}/entity/EntityType.java | 2 +- .../entity/ManualChangeOverwrite.java | 2 +- .../document}/entity/MatchedRule.java | 16 +- .../document}/entity/PositionOnPage.java | 4 +- .../document}/entity/TextEntity.java | 10 +- .../document}/nodes/Document.java | 10 +- .../document}/nodes/Footer.java | 8 +- .../document}/nodes/GenericSemanticNode.java | 2 +- .../document}/nodes/Header.java | 8 +- .../document}/nodes/Headline.java | 10 +- .../graph => model/document}/nodes/Image.java | 16 +- .../document}/nodes/ImageType.java | 2 +- .../document}/nodes/NodeType.java | 2 +- .../graph => model/document}/nodes/Page.java | 8 +- .../document}/nodes/Paragraph.java | 8 +- .../document}/nodes/Section.java | 10 +- .../document}/nodes/SectionIdentifier.java | 2 +- .../document}/nodes/SemanticNode.java | 16 +- .../graph => model/document}/nodes/Table.java | 10 +- .../document}/nodes/TableCell.java | 10 +- .../document}/textblock/AtomicTextBlock.java | 10 +- .../textblock/ConcatenatedTextBlock.java | 6 +- .../document}/textblock/TextBlock.java | 8 +- .../textblock/TextBlockCollector.java | 2 +- .../v1/server/model/drools/BasicRule.java | 39 +++++ .../v1/server/model/drools/RuleClass.java | 22 +++ .../model/drools/RuleFileBluePrint.java | 78 +++++++++ .../server/model/drools/RuleIdentifier.java | 89 ++++++++++ .../v1/server/model/drools/RuleType.java | 17 ++ .../v1/server/model/drools/RuleUnit.java | 7 + .../queue/RedactionMessageReceiver.java | 2 +- .../DroolsSyntaxValidationFactory.java | 28 ---- .../service/EntityRedactionService.java | 102 ------------ .../service/RuleBuilderModelService.java | 23 --- .../service/AnalyzeService.java | 68 ++++---- .../service/ComponentCreationService.java | 5 + .../service/DictionarySearchService.java | 53 ++++++ .../service/DictionaryService.java | 20 +-- .../EntityLogCreatorService.java} | 20 +-- .../service/ImportedRedactionService.java | 2 +- .../service/ManualChangeFactory.java | 2 +- .../ManualChangesApplicationService.java | 17 +- .../service/RedactionChangeLogService.java | 2 +- .../service/SectionFinderService.java | 12 +- .../ComponentDroolsExecutionService.java | 17 ++ .../drools/DroolsSyntaxValidationService.java | 107 ++++++++++++ .../drools/EntityDroolsExecutionService.java} | 27 +-- .../drools/KieContainerCreationService.java | 77 +++++++++ .../server/service/drools/RuleFileParser.java | 126 ++++++++++++++ .../graph}/DocumentGraphMapper.java | 34 ++-- .../graph}/EntityCreationService.java | 41 +++-- .../graph}/EntityEnrichmentService.java | 8 +- .../graph/ManualEntityCreationService.java} | 30 ++-- .../graph}/ManualRedactionEntryService.java | 11 +- .../graph}/NerEntitiesAdapter.java | 11 +- .../graph}/PropertiesMapper.java | 12 +- .../storage/RedactionStorageService.java | 4 +- .../storage/RuleManagementResources.java | 29 ++++ .../{redaction => }/utils/IdBuilder.java | 4 +- .../{redaction => }/utils/Patterns.java | 2 +- .../utils/RectangleTransformations.java | 4 +- .../utils/RedactionSearchUtility.java | 9 +- .../{redaction => }/utils/ResourceLoader.java | 2 +- .../{redaction => }/utils/SeparatorUtils.java | 6 +- .../utils/TextNormalizationUtilities.java | 2 +- .../exception/DroolsTimeoutException.java | 0 .../exception/NotFoundException.java | 2 +- .../exception/RedactionException.java | 2 +- .../exception/RulesValidationException.java | 2 +- .../src/main/resources/drools/base_rules.drl | 89 ++++++++++ .../AbstractRedactionIntegrationTest.java | 6 +- .../v1/server/DictionaryServiceTest.java | 4 +- .../v1/server/RedactionIntegrationTest.java | 6 +- .../redaction/v1/server/RulesTest.java | 6 +- .../v1/server/annotate/AnnotationService.java | 6 +- .../document/entity/TextEntityTest.java | 6 +- .../graph/BuildDocumentIntegrationTest.java | 4 +- ...ocumentEntityInsertionIntegrationTest.java | 28 ++-- .../DocumentPerformanceIntegrationTest.java | 36 ++-- .../graph/DocumentTableIntegrationTest.java | 8 +- .../DocumentVisualizationIntegrationTest.java | 4 +- .../document/graph/MigrationPocTest.java | 16 +- .../graph/SearchImplementationTest.java | 12 +- .../server/document/graph/TextRangeTest.java | 2 + .../DroolsSyntaxValidationServiceTest.java | 155 ++++++++++++++++++ .../ManualChangesEnd2EndTest.java | 12 +- .../ManualChangesIntegrationTest.java | 18 +- .../manualchanges/ManualChangesUnitTest.java | 10 +- ...a => ManualEntityCreationServiceTest.java} | 30 ++-- .../realdata/LiveDataIntegrationTest.java | 4 +- .../adapter/NerEntitiesAdapterTest.java | 16 +- .../utils/TextNormalizationUtilitiesTest.java | 2 + .../server/utils/PdfVisualisationUtility.java | 12 +- .../resources/drools/acceptance_rules.drl | 65 ++++---- .../src/test/resources/drools/all_rules.drl | 67 ++++---- .../test/resources/drools/documine_flora.drl | 120 ++++++++------ .../drools/manual_redaction_rules.drl | 65 ++++---- .../src/test/resources/drools/rules.drl | 67 ++++---- .../src/test/resources/drools/rules_v2.drl | 78 +++++---- .../EFSA_sanitisation_GFL_v1/rules.drl | 4 +- 125 files changed, 1651 insertions(+), 876 deletions(-) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{settings => }/RedactionServiceSettings.java (92%) delete mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/RuleIdentifier.java rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/model/KieWrapper.java (63%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/model/ManualEntity.java (91%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction/adapter => model}/NerEntities.java (86%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/model/RectangleWithPage.java (94%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/model/dictionary/Dictionary.java (92%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/model/dictionary/DictionaryEntries.java (88%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/model/dictionary/DictionaryIncrement.java (75%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/model/dictionary/DictionaryIncrementValue.java (70%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/model/dictionary/DictionaryModel.java (96%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/model/dictionary/DictionaryRepresentation.java (87%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/model/dictionary/DictionaryVersion.java (76%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/model/dictionary/SearchImplementation.java (96%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/model/dictionary/TenantDictionary.java (82%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/ConsecutiveBoundaryCollector.java (96%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/data => model/document}/DocumentData.java (92%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/DocumentTree.java (90%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/TextRange.java (97%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/entity/Entity.java (85%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/entity/EntityType.java (64%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/entity/ManualChangeOverwrite.java (98%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/entity/MatchedRule.java (82%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/entity/PositionOnPage.java (83%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/entity/TextEntity.java (94%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/Document.java (89%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/Footer.java (83%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/GenericSemanticNode.java (52%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/Header.java (83%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/Headline.java (85%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/Image.java (79%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/ImageType.java (88%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/NodeType.java (82%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/Page.java (84%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/Paragraph.java (80%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/Section.java (86%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/SectionIdentifier.java (98%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/SemanticNode.java (97%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/Table.java (97%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/nodes/TableCell.java (85%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/textblock/AtomicTextBlock.java (95%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/textblock/ConcatenatedTextBlock.java (97%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/textblock/TextBlock.java (92%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/graph => model/document}/textblock/TextBlockCollector.java (94%) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/BasicRule.java create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleClass.java create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleFileBluePrint.java create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleIdentifier.java create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleType.java create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleUnit.java delete mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsSyntaxValidationFactory.java delete mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java delete mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RuleBuilderModelService.java rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/service/AnalyzeService.java (84%) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ComponentCreationService.java create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionarySearchService.java rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/service/DictionaryService.java (95%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction/service/RedactionLogCreatorService.java => service/EntityLogCreatorService.java} (94%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/service/ImportedRedactionService.java (98%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/service/ManualChangeFactory.java (97%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/services => service}/ManualChangesApplicationService.java (88%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/service/RedactionChangeLogService.java (98%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/service/SectionFinderService.java (91%) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/ComponentDroolsExecutionService.java create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/DroolsSyntaxValidationService.java rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction/service/DroolsExecutionService.java => service/drools/EntityDroolsExecutionService.java} (88%) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/KieContainerCreationService.java create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/RuleFileParser.java rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/data/mapper => service/graph}/DocumentGraphMapper.java (86%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/services => service/graph}/EntityCreationService.java (95%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/services => service/graph}/EntityEnrichmentService.java (91%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction/adapter/CustomEntityCreationAdapter.java => service/graph/ManualEntityCreationService.java} (90%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction/service => service/graph}/ManualRedactionEntryService.java (81%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction/adapter => service/graph}/NerEntitiesAdapter.java (95%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document/data/mapper => service/graph}/PropertiesMapper.java (83%) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RuleManagementResources.java rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/utils/IdBuilder.java (91%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/utils/Patterns.java (95%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document => }/utils/RectangleTransformations.java (97%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{document => }/utils/RedactionSearchUtility.java (95%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/utils/ResourceLoader.java (93%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/utils/SeparatorUtils.java (92%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{redaction => }/utils/TextNormalizationUtilities.java (90%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{ => utils}/exception/DroolsTimeoutException.java (100%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{ => utils}/exception/NotFoundException.java (67%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{ => utils}/exception/RedactionException.java (79%) rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/{ => utils}/exception/RulesValidationException.java (71%) create mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/resources/drools/base_rules.drl create mode 100644 redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/drools/files/management/services/DroolsSyntaxValidationServiceTest.java rename redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/{CustomEntityCreationAdapterTest.java => ManualEntityCreationServiceTest.java} (79%) diff --git a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/DroolsSyntaxValidation.java b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/DroolsSyntaxValidation.java index a3f47de9..11c9eecd 100644 --- a/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/DroolsSyntaxValidation.java +++ b/redaction-service-v1/redaction-service-api-v1/src/main/java/com/iqser/red/service/redaction/v1/model/DroolsSyntaxValidation.java @@ -1,5 +1,6 @@ package com.iqser.red.service.redaction.v1.model; +import java.util.LinkedList; import java.util.List; import lombok.AccessLevel; @@ -16,6 +17,18 @@ import lombok.experimental.FieldDefaults; @FieldDefaults(level = AccessLevel.PRIVATE) public class DroolsSyntaxValidation { - boolean compiled; - List droolsSyntaxErrorMessages; + @Builder.Default + List droolsSyntaxErrorMessages = new LinkedList<>(); + + + public void addErrorMessage(int line, int column, String message) { + + getDroolsSyntaxErrorMessages().add(DroolsSyntaxErrorMessage.builder().line(line).column(column).message(message).build()); + } + + public boolean isCompiled() { + + return droolsSyntaxErrorMessages.isEmpty(); + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/Application.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/Application.java index 5d904706..ab3bd66f 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/Application.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/Application.java @@ -12,7 +12,6 @@ import org.springframework.context.annotation.Import; import com.iqser.red.service.dictionarymerge.commons.DictionaryMergeService; import com.iqser.red.service.redaction.v1.server.client.RulesClient; -import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings; import com.iqser.red.storage.commons.StorageAutoConfiguration; import com.knecon.fforesight.tenantcommons.MultiTenancyAutoConfiguration; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/settings/RedactionServiceSettings.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/RedactionServiceSettings.java similarity index 92% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/settings/RedactionServiceSettings.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/RedactionServiceSettings.java index 02f1d8fa..2cc7f8f4 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/settings/RedactionServiceSettings.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/RedactionServiceSettings.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.settings; +package com.iqser.red.service.redaction.v1.server; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/ControllerAdvice.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/ControllerAdvice.java index c92c6395..95e659b1 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/ControllerAdvice.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/ControllerAdvice.java @@ -1,8 +1,8 @@ package com.iqser.red.service.redaction.v1.server.controller; import com.iqser.red.commons.spring.ErrorMessage; -import com.iqser.red.service.redaction.v1.server.exception.NotFoundException; -import com.iqser.red.service.redaction.v1.server.exception.RulesValidationException; +import com.iqser.red.service.redaction.v1.server.utils.exception.NotFoundException; +import com.iqser.red.service.redaction.v1.server.utils.exception.RulesValidationException; import lombok.extern.slf4j.Slf4j; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RedactionController.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RedactionController.java index 4ab0be10..6d8f83c8 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RedactionController.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RedactionController.java @@ -5,8 +5,8 @@ import org.springframework.web.bind.annotation.RestController; import com.iqser.red.service.redaction.v1.model.DroolsSyntaxValidation; import com.iqser.red.service.redaction.v1.resources.RedactionResource; -import com.iqser.red.service.redaction.v1.server.exception.RulesValidationException; -import com.iqser.red.service.redaction.v1.server.redaction.service.DroolsExecutionService; +import com.iqser.red.service.redaction.v1.server.service.drools.DroolsSyntaxValidationService; +import com.iqser.red.service.redaction.v1.server.utils.exception.RulesValidationException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -16,14 +16,14 @@ import lombok.extern.slf4j.Slf4j; @RequiredArgsConstructor public class RedactionController implements RedactionResource { - private final DroolsExecutionService droolsExecutionService; + private final DroolsSyntaxValidationService droolsSyntaxValidationService; @Override public DroolsSyntaxValidation testRules(@RequestBody String rules) { try { - return droolsExecutionService.testRules(rules); + return droolsSyntaxValidationService.testRules(rules); } catch (Exception e) { throw new RulesValidationException("Could not test rules: " + e.getMessage(), e); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RuleBuilderController.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RuleBuilderController.java index 1a800e0b..47c637fa 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RuleBuilderController.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/controller/RuleBuilderController.java @@ -1,10 +1,11 @@ package com.iqser.red.service.redaction.v1.server.controller; +import java.util.Collections; + import org.springframework.web.bind.annotation.RestController; import com.iqser.red.service.redaction.v1.model.RuleBuilderModel; import com.iqser.red.service.redaction.v1.resources.RuleBuilderResource; -import com.iqser.red.service.redaction.v1.server.redaction.service.RuleBuilderModelService; import lombok.RequiredArgsConstructor; @@ -12,13 +13,16 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class RuleBuilderController implements RuleBuilderResource { - private final RuleBuilderModelService ruleBuilderModelService; - @Override public RuleBuilderModel getRuleBuilderModel() { - return ruleBuilderModelService.getRuleBuilderModel(); + RuleBuilderModel ruleBuilderModel = new RuleBuilderModel(); + + ruleBuilderModel.setWhenClauses(Collections.emptyList()); + ruleBuilderModel.setThenConditions(Collections.emptyList()); + + return ruleBuilderModel; } } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/RuleIdentifier.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/RuleIdentifier.java deleted file mode 100644 index 776a50a9..00000000 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/RuleIdentifier.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.entity; - -import java.util.Objects; - -public record RuleIdentifier(String type, Integer unit, Integer id) { - - public static RuleIdentifier fromString(String identifier) { - - String[] values = identifier.split("\\."); - if (values.length != 3) { - throw new IllegalArgumentException("Illegal rule identifier provided: " + identifier); - } - String type = values[0]; - Integer group = Integer.parseInt(values[1]); - Integer id = Integer.parseInt(values[2]); - return new RuleIdentifier(type, group, id); - } - - - public static RuleIdentifier empty() { - - return new RuleIdentifier("", null, null); - } - - - @Override - public String toString() { - - StringBuilder sb = new StringBuilder(); - sb.append(type()); - if (Objects.nonNull(unit()) && Objects.nonNull(id())) { - sb.append(".").append(unit()).append(".").append(id()); - } else if (Objects.nonNull(id())) { - sb.append(".*.").append(id()); - } else if (Objects.nonNull(unit())) { - sb.append(".").append(unit()).append(".*"); - } - return sb.toString(); - } - -} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/KieWrapper.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/KieWrapper.java similarity index 63% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/KieWrapper.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/KieWrapper.java index e9765698..69a2535e 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/KieWrapper.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/KieWrapper.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.model; +package com.iqser.red.service.redaction.v1.server.model; import org.kie.api.runtime.KieContainer; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/ManualEntity.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/ManualEntity.java similarity index 91% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/ManualEntity.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/ManualEntity.java index cffe0394..e9889d4f 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/ManualEntity.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/ManualEntity.java @@ -1,14 +1,14 @@ -package com.iqser.red.service.redaction.v1.server.redaction.model; +package com.iqser.red.service.redaction.v1.server.model; import java.util.List; import java.util.PriorityQueue; 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.RedactionLogEntry; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.Entity; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.ManualChangeOverwrite; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.MatchedRule; +import com.iqser.red.service.redaction.v1.server.model.document.entity.Entity; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.ManualChangeOverwrite; +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/NerEntities.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/NerEntities.java similarity index 86% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/NerEntities.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/NerEntities.java index a8a3b4d2..71c1c56f 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/NerEntities.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/NerEntities.java @@ -1,10 +1,10 @@ -package com.iqser.red.service.redaction.v1.server.redaction.adapter; +package com.iqser.red.service.redaction.v1.server.model; import java.util.LinkedList; import java.util.List; import java.util.stream.Stream; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/RectangleWithPage.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/RectangleWithPage.java similarity index 94% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/RectangleWithPage.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/RectangleWithPage.java index a27c23a2..58879ce8 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/RectangleWithPage.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/RectangleWithPage.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.model; +package com.iqser.red.service.redaction.v1.server.model; import java.awt.geom.Rectangle2D; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/Dictionary.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/Dictionary.java similarity index 92% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/Dictionary.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/Dictionary.java index 0bb75596..f935b9b9 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/Dictionary.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/Dictionary.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.model.dictionary; +package com.iqser.red.service.redaction.v1.server.model.dictionary; import static java.lang.String.format; @@ -15,10 +15,10 @@ import java.util.stream.Stream; import org.apache.commons.lang3.StringUtils; -import com.iqser.red.service.redaction.v1.server.exception.NotFoundException; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.MatchedRule; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.redaction.utils.Patterns; +import com.iqser.red.service.redaction.v1.server.utils.exception.NotFoundException; +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.utils.Patterns; import lombok.Data; import lombok.Getter; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryEntries.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryEntries.java similarity index 88% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryEntries.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryEntries.java index ac80349b..c921ccea 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryEntries.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryEntries.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.model.dictionary; +package com.iqser.red.service.redaction.v1.server.model.dictionary; import java.util.HashSet; import java.util.Set; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryIncrement.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryIncrement.java similarity index 75% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryIncrement.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryIncrement.java index 961636cb..a240105b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryIncrement.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryIncrement.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.model.dictionary; +package com.iqser.red.service.redaction.v1.server.model.dictionary; import java.util.Set; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryIncrementValue.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryIncrementValue.java similarity index 70% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryIncrementValue.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryIncrementValue.java index c50ed785..0202d038 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryIncrementValue.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryIncrementValue.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.model.dictionary; +package com.iqser.red.service.redaction.v1.server.model.dictionary; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryModel.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryModel.java similarity index 96% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryModel.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryModel.java index da25189e..13284967 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryModel.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryModel.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.model.dictionary; +package com.iqser.red.service.redaction.v1.server.model.dictionary; import java.io.Serializable; import java.util.HashMap; @@ -7,7 +7,7 @@ import java.util.stream.Collectors; import com.iqser.red.service.dictionarymerge.commons.DictionaryEntry; import com.iqser.red.service.dictionarymerge.commons.DictionaryEntryModel; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.MatchedRule; +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryRepresentation.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryRepresentation.java similarity index 87% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryRepresentation.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryRepresentation.java index 7d084784..ee1a7521 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryRepresentation.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryRepresentation.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.model.dictionary; +package com.iqser.red.service.redaction.v1.server.model.dictionary; import java.util.ArrayList; import java.util.HashMap; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryVersion.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryVersion.java similarity index 76% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryVersion.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryVersion.java index e1f46683..a5a21cf2 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/DictionaryVersion.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/DictionaryVersion.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.model.dictionary; +package com.iqser.red.service.redaction.v1.server.model.dictionary; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/SearchImplementation.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/SearchImplementation.java similarity index 96% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/SearchImplementation.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/SearchImplementation.java index bd095b02..6d8ead3e 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/SearchImplementation.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/SearchImplementation.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.model.dictionary; +package com.iqser.red.service.redaction.v1.server.model.dictionary; import java.util.ArrayList; import java.util.Collection; @@ -9,7 +9,7 @@ import java.util.stream.Collectors; import org.ahocorasick.trie.Trie; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; import lombok.Data; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/TenantDictionary.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/TenantDictionary.java similarity index 82% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/TenantDictionary.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/TenantDictionary.java index 7b666eb1..af964cc9 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/model/dictionary/TenantDictionary.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/dictionary/TenantDictionary.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.model.dictionary; +package com.iqser.red.service.redaction.v1.server.model.dictionary; import java.util.HashMap; import java.util.Map; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/ConsecutiveBoundaryCollector.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/ConsecutiveBoundaryCollector.java similarity index 96% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/ConsecutiveBoundaryCollector.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/ConsecutiveBoundaryCollector.java index a77430a6..4986b3f3 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/ConsecutiveBoundaryCollector.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/ConsecutiveBoundaryCollector.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph; +package com.iqser.red.service.redaction.v1.server.model.document; import java.util.LinkedList; import java.util.List; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/data/DocumentData.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentData.java similarity index 92% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/data/DocumentData.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentData.java index 11933064..7575203e 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/data/DocumentData.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentData.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.data; +package com.iqser.red.service.redaction.v1.server.model.document; import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPage; import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPositionData; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentTree.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentTree.java similarity index 90% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentTree.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentTree.java index 91432036..057413f1 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentTree.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentTree.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph; +package com.iqser.red.service.redaction.v1.server.model.document; import static java.lang.String.format; @@ -7,14 +7,14 @@ import java.util.LinkedList; import java.util.List; import java.util.stream.Stream; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.GenericSemanticNode; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.NodeType; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.TableCell; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.GenericSemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.TableCell; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/TextRange.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/TextRange.java similarity index 97% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/TextRange.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/TextRange.java index 6b624e60..370d19d7 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/TextRange.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/TextRange.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph; +package com.iqser.red.service.redaction.v1.server.model.document; import static java.lang.String.format; @@ -6,7 +6,7 @@ import java.util.Collection; import java.util.LinkedList; import java.util.List; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.EqualsAndHashCode; import lombok.Setter; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/Entity.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/Entity.java similarity index 85% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/Entity.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/Entity.java index d35b939e..b9e2a005 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/Entity.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/Entity.java @@ -1,10 +1,12 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.entity; +package com.iqser.red.service.redaction.v1.server.model.document.entity; import java.util.Collection; import java.util.HashSet; import java.util.PriorityQueue; import java.util.Set; +import com.iqser.red.service.redaction.v1.server.model.drools.RuleIdentifier; + import lombok.NonNull; public interface Entity { @@ -15,7 +17,19 @@ public interface Entity { ManualChangeOverwrite getManualOverwrite(); - // Don't use default accessor pattern (e.g. isIgnored()), as it might lead to errors in drools due to property-specific optimization of the drools planner. + // Don't use default accessor pattern (e.g. isApplied()), as it might lead to errors in drools due to property-specific optimization of the drools planner. + default boolean applied() { + + return getManualOverwrite().getApplied().orElse(getMatchedRule().isApplied()); + } + + + default boolean skipped() { + + return !applied(); + } + + default boolean ignored() { return getManualOverwrite().getIgnored().orElse(getMatchedRule().isIgnored()); @@ -34,9 +48,9 @@ public interface Entity { } - default boolean applied() { + default boolean active() { - return getManualOverwrite().getApplied().orElse(getMatchedRule().isApplied()); + return !(removed() || ignored()); } @@ -52,12 +66,6 @@ public interface Entity { } - default boolean active() { - - return !(removed() || ignored()); - } - - default void redact(@NonNull String ruleIdentifier, String reason, @NonNull String legalBasis) { if (legalBasis.isBlank() || legalBasis.isEmpty()) { @@ -79,17 +87,6 @@ public interface Entity { } - default void force(@NonNull String ruleIdentifier, String reason, String legalBasis) { - - addMatchedRule(MatchedRule.builder() - .ruleIdentifier(RuleIdentifier.fromString(ruleIdentifier)) - .reason(reason) - .legalBasis(getLegalBasisOrPreviousLegalBasisOrPlaceHolder(legalBasis)) - .applied(true) - .build()); - } - - default void skip(@NonNull String ruleIdentifier, String reason) { addMatchedRule(MatchedRule.builder().ruleIdentifier(RuleIdentifier.fromString(ruleIdentifier)).reason(reason).build()); @@ -108,18 +105,6 @@ public interface Entity { } - private String getLegalBasisOrPreviousLegalBasisOrPlaceHolder(String legalBasis) { - - if (legalBasis == null || legalBasis.isBlank() || legalBasis.isEmpty()) { - if (getMatchedRule() == null || !getMatchedRule().isApplied()) { - return "n-a"; - } - return getMatchedRule().getLegalBasis(); - } - return legalBasis; - } - - default void applyWithLineBreaks(@NonNull String ruleIdentifier, String reason, @NonNull String legalBasis) { if (legalBasis.isBlank() || legalBasis.isEmpty()) { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/EntityType.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/EntityType.java similarity index 64% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/EntityType.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/EntityType.java index 4db81e91..b86bc323 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/EntityType.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/EntityType.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.entity; +package com.iqser.red.service.redaction.v1.server.model.document.entity; public enum EntityType { ENTITY, diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/ManualChangeOverwrite.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/ManualChangeOverwrite.java similarity index 98% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/ManualChangeOverwrite.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/ManualChangeOverwrite.java index e28fda4c..a6b0ee3e 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/ManualChangeOverwrite.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/ManualChangeOverwrite.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.entity; +package com.iqser.red.service.redaction.v1.server.model.document.entity; import java.util.Collections; import java.util.Comparator; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/MatchedRule.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/MatchedRule.java similarity index 82% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/MatchedRule.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/MatchedRule.java index 107debb6..fe5e4ad8 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/MatchedRule.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/MatchedRule.java @@ -1,10 +1,13 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.entity; +package com.iqser.red.service.redaction.v1.server.model.document.entity; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Set; +import com.iqser.red.service.redaction.v1.server.model.drools.RuleIdentifier; +import com.iqser.red.service.redaction.v1.server.model.drools.RuleType; + import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; @@ -19,12 +22,11 @@ import lombok.experimental.FieldDefaults; @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) public final class MatchedRule implements Comparable { - public static final String FINAL_TYPE = "FINAL"; - public static final String ELIMINATION_RULE_TYPE = "X"; - private static final List RULE_TYPE_PRIORITIES = List.of(FINAL_TYPE, ELIMINATION_RULE_TYPE); + public static final RuleType FINAL_TYPE = RuleType.fromString("FINAL"); + public static final RuleType ELIMINATION_RULE_TYPE = RuleType.fromString("X"); + private static final List RULE_TYPE_PRIORITIES = List.of(FINAL_TYPE, ELIMINATION_RULE_TYPE); - @Builder.Default - RuleIdentifier ruleIdentifier = RuleIdentifier.empty(); + RuleIdentifier ruleIdentifier; @Builder.Default String reason = ""; @Builder.Default @@ -40,7 +42,7 @@ public final class MatchedRule implements Comparable { public static MatchedRule empty() { - return MatchedRule.builder().build(); + return MatchedRule.builder().ruleIdentifier(RuleIdentifier.empty()).build(); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/PositionOnPage.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/PositionOnPage.java similarity index 83% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/PositionOnPage.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/PositionOnPage.java index 195f3774..36ea5970 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/PositionOnPage.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/PositionOnPage.java @@ -1,9 +1,9 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.entity; +package com.iqser.red.service.redaction.v1.server.model.document.entity; import java.awt.geom.Rectangle2D; import java.util.List; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/TextEntity.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/TextEntity.java similarity index 94% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/TextEntity.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/TextEntity.java index b2615bc9..455dc26b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/entity/TextEntity.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/TextEntity.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.entity; +package com.iqser.red.service.redaction.v1.server.model.document.entity; import java.awt.geom.Rectangle2D; import java.util.Collection; @@ -11,10 +11,10 @@ import java.util.PriorityQueue; import java.util.Set; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.redaction.utils.IdBuilder; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.utils.IdBuilder; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Document.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Document.java similarity index 89% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Document.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Document.java index e1fd8481..4201f353 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Document.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Document.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import java.awt.geom.Rectangle2D; import java.util.Collections; @@ -10,10 +10,10 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Footer.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Footer.java similarity index 83% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Footer.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Footer.java index f62e3d99..780b965d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Footer.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Footer.java @@ -1,12 +1,12 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import java.util.HashSet; import java.util.List; import java.util.Set; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/GenericSemanticNode.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/GenericSemanticNode.java similarity index 52% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/GenericSemanticNode.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/GenericSemanticNode.java index 3ed31fdc..e97efa3d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/GenericSemanticNode.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/GenericSemanticNode.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; public interface GenericSemanticNode extends SemanticNode { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Header.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Header.java similarity index 83% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Header.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Header.java index 41b1b549..44c4c103 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Header.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Header.java @@ -1,12 +1,12 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import java.util.HashSet; import java.util.List; import java.util.Set; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Headline.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Headline.java similarity index 85% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Headline.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Headline.java index b57e7873..5bdc020c 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Headline.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Headline.java @@ -1,13 +1,13 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import java.util.HashSet; import java.util.List; import java.util.Set; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.AtomicTextBlock; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Image.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Image.java similarity index 79% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Image.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Image.java index b61cfc23..fd584387 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Image.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Image.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import java.awt.geom.Rectangle2D; import java.util.Collections; @@ -9,13 +9,13 @@ import java.util.Map; import java.util.PriorityQueue; import java.util.Set; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.Entity; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.ManualChangeOverwrite; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.MatchedRule; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.entity.Entity; +import com.iqser.red.service.redaction.v1.server.model.document.entity.ManualChangeOverwrite; +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/ImageType.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/ImageType.java similarity index 88% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/ImageType.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/ImageType.java index 5db33ec8..397d7b11 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/ImageType.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/ImageType.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import java.util.Locale; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/NodeType.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeType.java similarity index 82% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/NodeType.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeType.java index 135acb4e..0c06dfa4 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/NodeType.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeType.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import java.util.Locale; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Page.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Page.java similarity index 84% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Page.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Page.java index 4ea63a53..18aee858 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Page.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Page.java @@ -1,12 +1,12 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import java.util.HashSet; import java.util.List; import java.util.Set; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Paragraph.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Paragraph.java similarity index 80% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Paragraph.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Paragraph.java index 4fb062c5..6c9794bb 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Paragraph.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Paragraph.java @@ -1,12 +1,12 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import java.util.HashSet; import java.util.List; import java.util.Set; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Section.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Section.java similarity index 86% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Section.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Section.java index df76d026..749de494 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Section.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Section.java @@ -1,13 +1,13 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import java.util.HashSet; import java.util.List; import java.util.Set; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/SectionIdentifier.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SectionIdentifier.java similarity index 98% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/SectionIdentifier.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SectionIdentifier.java index 12c3f4e9..2ff3a30f 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/SectionIdentifier.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SectionIdentifier.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import java.util.Collections; import java.util.LinkedList; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/SemanticNode.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java similarity index 97% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/SemanticNode.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java index 71b24bb5..69968b74 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/SemanticNode.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import static java.lang.String.format; @@ -13,13 +13,13 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.AtomicTextBlock; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.document.utils.RectangleTransformations; -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.utils.RectangleTransformations; +import com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility; public interface SemanticNode { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Table.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Table.java similarity index 97% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Table.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Table.java index 6b9ac3de..a85acb28 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/Table.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Table.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import static java.lang.String.format; @@ -10,10 +10,10 @@ import java.util.Set; import java.util.stream.IntStream; import java.util.stream.Stream; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/TableCell.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableCell.java similarity index 85% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/TableCell.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableCell.java index 4775e110..6165c618 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/nodes/TableCell.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableCell.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.nodes; +package com.iqser.red.service.redaction.v1.server.model.document.nodes; import java.awt.geom.Rectangle2D; import java.util.HashMap; @@ -7,10 +7,10 @@ import java.util.List; import java.util.Map; import java.util.Set; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/AtomicTextBlock.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java similarity index 95% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/AtomicTextBlock.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java index 4699ee08..49d707ed 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/AtomicTextBlock.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.textblock; +package com.iqser.red.service.redaction.v1.server.model.document.textblock; import static java.lang.String.format; @@ -12,10 +12,10 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.utils.RectangleTransformations; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.utils.RectangleTransformations; import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPositionData; import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentTextData; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/ConcatenatedTextBlock.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java similarity index 97% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/ConcatenatedTextBlock.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java index 99089681..d180c5c9 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/ConcatenatedTextBlock.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.textblock; +package com.iqser.red.service.redaction.v1.server.model.document.textblock; import static java.lang.String.format; @@ -10,8 +10,8 @@ import java.util.List; import java.util.Map; import java.util.stream.Stream; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; import lombok.AccessLevel; import lombok.Data; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/TextBlock.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java similarity index 92% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/TextBlock.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java index df0d4ceb..50e76203 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/TextBlock.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.textblock; +package com.iqser.red.service.redaction.v1.server.model.document.textblock; import static java.lang.String.format; @@ -10,9 +10,9 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; -import com.iqser.red.service.redaction.v1.server.document.utils.RectangleTransformations; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.utils.RectangleTransformations; public interface TextBlock extends CharSequence { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/TextBlockCollector.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlockCollector.java similarity index 94% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/TextBlockCollector.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlockCollector.java index bb98abe3..964238b0 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/graph/textblock/TextBlockCollector.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlockCollector.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.graph.textblock; +package com.iqser.red.service.redaction.v1.server.model.document.textblock; import java.util.Set; import java.util.function.BiConsumer; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/BasicRule.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/BasicRule.java new file mode 100644 index 00000000..d6f60188 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/BasicRule.java @@ -0,0 +1,39 @@ +package com.iqser.red.service.redaction.v1.server.model.drools; + +import org.drools.drl.ast.descr.RuleDescr; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.experimental.FieldDefaults; + +@Getter +@AllArgsConstructor +@EqualsAndHashCode(onlyExplicitlyIncluded = true) +@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) +public class BasicRule { + + @EqualsAndHashCode.Include + RuleIdentifier identifier; + String name; + String code; + int line; + + + public static BasicRule fromRuleDescr(RuleDescr rule, String rulesString) { + + RuleIdentifier identifier = RuleIdentifier.fromName(rule.getName()); + String nameWithoutIdentifier = rule.getName().replace(identifier + ":", ""); + String code = rulesString.substring(rule.getStartCharacter(), rule.getEndCharacter()); + return new BasicRule(identifier, nameWithoutIdentifier, code, rule.getLine()); + } + + + @Override + public String toString() { + + return "BasicRule[identifier=" + identifier + ", name=" + name + ", code=" + code + ']'; + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleClass.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleClass.java new file mode 100644 index 00000000..0135b5b1 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleClass.java @@ -0,0 +1,22 @@ +package com.iqser.red.service.redaction.v1.server.model.drools; + +import java.util.List; +import java.util.Objects; + +public record RuleClass(RuleType ruleType, List ruleUnits) { + + public RuleUnit findRuleUnitByInteger(Integer unit) { + + return ruleUnits.stream() + .filter(ruleUnit -> Objects.equals(ruleUnit.unit(), unit)) + .findFirst() + .orElseThrow(() -> new IllegalArgumentException(String.format("RuleUnit %d does not exist in class %s", unit, this))); + } + + + public boolean ruleUnitExists(Integer unit) { + + return ruleUnits.stream().anyMatch(ruleUnit -> Objects.equals(ruleUnit.unit(), unit)); + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleFileBluePrint.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleFileBluePrint.java new file mode 100644 index 00000000..981424c5 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleFileBluePrint.java @@ -0,0 +1,78 @@ +package com.iqser.red.service.redaction.v1.server.model.drools; + +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import com.iqser.red.service.redaction.v1.model.DroolsSyntaxValidation; +import com.iqser.red.service.redaction.v1.server.utils.exception.NotFoundException; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldDefaults; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE) +public final class RuleFileBluePrint { + + String imports; + int importLine; + String globals; + int globalsLine; + String queries; + int queriesLine; + List ruleClasses; + DroolsSyntaxValidation droolsSyntaxValidation; + + + public RuleClass findRuleClassByType(RuleType ruleType) { + + return ruleClasses.stream() + .filter(ruleClass -> Objects.equals(ruleClass.ruleType(), ruleType)) + .findFirst() + .orElseThrow(() -> new NotFoundException(String.format("RuleType %s does not exist in this BluePrint %s", ruleType.name(), this))); + } + + + + public List findRulesByIdentifier(RuleIdentifier ruleIdentifier) { + + if (Objects.isNull(ruleIdentifier.unit())) { + return findRuleClassByType(ruleIdentifier.type()).ruleUnits().stream().map(RuleUnit::rules).flatMap(Collection::stream).toList(); + } + return findRuleClassByType(ruleIdentifier.type()).findRuleUnitByInteger(ruleIdentifier.unit()) + .rules() + .stream() + .filter(rule -> rule.getIdentifier().matches(ruleIdentifier)) + .toList(); + } + + + + public List getAllRuleIdentifiers() { + + return streamAllRules().map(BasicRule::getIdentifier).collect(Collectors.toList()); + } + + + public Stream streamAllRules() { + + return getRuleClasses().stream().map(RuleClass::ruleUnits).flatMap(Collection::stream).map(RuleUnit::rules).flatMap(Collection::stream); + } + + + @Override + public String toString() { + + return "RuleFileBluePrint[imports=" + imports + ", globals=" + globals + ", queries=" + queries + ", ruleClasses=" + ruleClasses + ']'; + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleIdentifier.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleIdentifier.java new file mode 100644 index 00000000..190a446c --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleIdentifier.java @@ -0,0 +1,89 @@ +package com.iqser.red.service.redaction.v1.server.model.drools; + +import java.util.Arrays; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +import lombok.NonNull; + +public record RuleIdentifier(@NonNull RuleType type, Integer unit, Integer id) { + + public static RuleIdentifier fromName(String name) { + + String identifier = name.split(":")[0]; + return fromString(identifier); + } + + + public static RuleIdentifier fromString(String identifier) { + + String[] values = identifier.split("\\."); + RuleType type = RuleType.fromString(values[0]); + Integer group = Integer.parseInt(values[1]); + Integer id = Integer.parseInt(values[2]); + return new RuleIdentifier(type, group, id); + } + + + public static RuleIdentifier empty() { + + return new RuleIdentifier(new RuleType(""), null, null); + } + + + public static Set fromListOfIdentifiersString(String input) { + + return Arrays.stream(input.split(",")).map(String::trim).map(RuleIdentifier::fromString).collect(Collectors.toSet()); + } + + + private static Integer parseIntOrStar(String value) { + + return !value.equals("*") ? Integer.parseInt(value) : null; + } + + + /** + * This is used to filter rules, if the field Integer unit or Integer id is null, the field will match any other RuleIdentifier. + * Therefore, to compare RuleIdentifiers one should always use the function matches. + * + * @param ruleIdentifier RuleIdentifier to check if this one matches it. + * @return true, if all fields match. If a field is null, it matches any field. + */ + public boolean matches(RuleIdentifier ruleIdentifier) { + + return ruleIdentifier.type().equals(this.type()) && // + (Objects.isNull(ruleIdentifier.unit()) || Objects.isNull(this.unit()) || Objects.equals(this.unit(), ruleIdentifier.unit())) && // + (Objects.isNull(ruleIdentifier.id()) || Objects.isNull(this.id()) || Objects.equals(this.id(), ruleIdentifier.id())); + + } + + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append(type().name()); + if (Objects.nonNull(unit())) { + sb.append("."); + sb.append(unit()); + } else { + sb.append(".*"); + } + if (Objects.nonNull(id())) { + sb.append("."); + sb.append(id()); + } else { + sb.append(".*"); + } + return sb.toString(); + } + + + public String toRuleUnitString() { + + return String.format("Rule unit: %s.%d", type.name(), unit); + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleType.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleType.java new file mode 100644 index 00000000..06fefc4d --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleType.java @@ -0,0 +1,17 @@ +package com.iqser.red.service.redaction.v1.server.model.drools; + +import java.util.regex.Pattern; + + +public record RuleType(String name) { + + static Pattern alphaNumeric = Pattern.compile("^[a-zA-Z0-9]+$"); + + + public static RuleType fromString(String value) { + + assert alphaNumeric.matcher(value).matches(); + return new RuleType(value); + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleUnit.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleUnit.java new file mode 100644 index 00000000..a9cdb230 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleUnit.java @@ -0,0 +1,7 @@ +package com.iqser.red.service.redaction.v1.server.model.drools; + +import java.util.List; + +public record RuleUnit(Integer unit, List rules) { + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/queue/RedactionMessageReceiver.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/queue/RedactionMessageReceiver.java index 0ad897ab..13bf7f2b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/queue/RedactionMessageReceiver.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/queue/RedactionMessageReceiver.java @@ -7,7 +7,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.redaction.v1.server.client.FileStatusProcessingUpdateClient; import com.iqser.red.service.redaction.v1.server.client.RulesClient; import com.iqser.red.service.redaction.v1.server.exception.DroolsTimeoutException; -import com.iqser.red.service.redaction.v1.server.redaction.service.AnalyzeService; +import com.iqser.red.service.redaction.v1.server.service.AnalyzeService; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsSyntaxValidationFactory.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsSyntaxValidationFactory.java deleted file mode 100644 index d8a769e3..00000000 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsSyntaxValidationFactory.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.iqser.red.service.redaction.v1.server.redaction.service; - -import java.util.List; - -import org.kie.api.builder.KieBuilder; -import org.kie.api.builder.Message; -import org.springframework.stereotype.Service; - -import com.iqser.red.service.redaction.v1.model.DroolsSyntaxErrorMessage; -import com.iqser.red.service.redaction.v1.model.DroolsSyntaxValidation; - -@Service -public class DroolsSyntaxValidationFactory { - - public DroolsSyntaxValidation buildDroolsSyntaxValidation(KieBuilder kieBuilder) { - - List errorMessages = kieBuilder.getResults().getMessages(Message.Level.ERROR); - List droolsSyntaxErrorMessages = errorMessages.stream().map(this::buildDroolsSyntaxErrorMessage).toList(); - return DroolsSyntaxValidation.builder().compiled(droolsSyntaxErrorMessages.isEmpty()).droolsSyntaxErrorMessages(droolsSyntaxErrorMessages).build(); - } - - - public DroolsSyntaxErrorMessage buildDroolsSyntaxErrorMessage(Message message) { - - return DroolsSyntaxErrorMessage.builder().line(message.getLine()).column(message.getColumn()).message(message.getText()).build(); - } - -} 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 deleted file mode 100644 index c58fe971..00000000 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/EntityRedactionService.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.iqser.red.service.redaction.v1.server.redaction.service; - -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import org.kie.api.runtime.KieContainer; -import org.springframework.stereotype.Service; - -import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; -import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.document.services.EntityEnrichmentService; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.CustomEntityCreationAdapter; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.Dictionary; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.SearchImplementation; - -import lombok.AccessLevel; -import lombok.RequiredArgsConstructor; -import lombok.experimental.FieldDefaults; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@Service -@RequiredArgsConstructor -@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) -public class EntityRedactionService { - - DroolsExecutionService droolsExecutionService; - EntityEnrichmentService entityEnrichmentService; - CustomEntityCreationAdapter customEntityCreationAdapter; - - - public Set addRuleEntities(Dictionary dictionary, Document document, KieContainer kieContainer, AnalyzeRequest analyzeRequest, NerEntities nerEntities) { - - log.debug("Starting Drools Execution"); - long droolsStart = System.currentTimeMillis(); - List allFileAttributes = droolsExecutionService.executeRules(kieContainer, - document, - dictionary, - analyzeRequest.getFileAttributes(), - analyzeRequest.getManualRedactions(), - nerEntities); - log.debug("Finished Drools Execution in {} ms", System.currentTimeMillis() - droolsStart); - return allFileAttributes.stream().filter(fileAttribute -> !analyzeRequest.getFileAttributes().contains(fileAttribute)).collect(Collectors.toUnmodifiableSet()); - } - - - public Set addRuleEntities(Dictionary dictionary, - Document document, - List sectionsToReanalyze, - KieContainer kieContainer, - AnalyzeRequest analyzeRequest, - NerEntities nerEntities) { - - log.debug("Starting Drools execution"); - long ruleExecutionStart = System.currentTimeMillis(); - List allFileAttributes = droolsExecutionService.executeRules(kieContainer, - document, - sectionsToReanalyze, - dictionary, - analyzeRequest.getFileAttributes(), - analyzeRequest.getManualRedactions(), - nerEntities); - log.debug("Finished Drools execution in {} ms", System.currentTimeMillis() - ruleExecutionStart); - - return allFileAttributes.stream().filter(fileAttribute -> !analyzeRequest.getFileAttributes().contains(fileAttribute)).collect(Collectors.toUnmodifiableSet()); - } - - - public void addDictionaryEntities(Dictionary dictionary, SemanticNode node) { - - for (var model : dictionary.getDictionaryModels()) { - bySearchImplementationAsDictionary(model.getEntriesSearch(), model.getType(), EntityType.ENTITY, node, model.isDossierDictionary()); - bySearchImplementationAsDictionary(model.getFalsePositiveSearch(), model.getType(), EntityType.FALSE_POSITIVE, node, model.isDossierDictionary()); - bySearchImplementationAsDictionary(model.getFalseRecommendationsSearch(), model.getType(), EntityType.FALSE_RECOMMENDATION, node, model.isDossierDictionary()); - } - } - - - public void bySearchImplementationAsDictionary(SearchImplementation searchImplementation, - String type, - EntityType entityType, - SemanticNode node, - boolean isDossierDictionaryEntry) { - - EntityCreationService entityCreationService = new EntityCreationService(entityEnrichmentService); - searchImplementation.getBoundaries(node.getTextBlock(), node.getTextRange()) - .stream() - .filter(boundary -> entityCreationService.isValidEntityBoundary(node.getTextBlock(), boundary)) - .map(bounds -> entityCreationService.forceByBoundary(bounds, type, entityType, node)) - .peek(entity -> entity.setDictionaryEntry(true)) - .peek(entity -> entity.setDossierDictionaryEntry(isDossierDictionaryEntry)) - .forEach(entity -> entity.addEngine(Engine.DICTIONARY)); - } - -} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RuleBuilderModelService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RuleBuilderModelService.java deleted file mode 100644 index 18570833..00000000 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RuleBuilderModelService.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.iqser.red.service.redaction.v1.server.redaction.service; - -import java.util.Collections; - -import org.springframework.stereotype.Service; - -import com.iqser.red.service.redaction.v1.model.RuleBuilderModel; - -@Service -public class RuleBuilderModelService { - - // TODO: Evaluate if we need to implement this or remove it entirely. - public RuleBuilderModel getRuleBuilderModel() { - - RuleBuilderModel ruleBuilderModel = new RuleBuilderModel(); - - ruleBuilderModel.setWhenClauses(Collections.emptyList()); - ruleBuilderModel.setThenConditions(Collections.emptyList()); - - return ruleBuilderModel; - } - -} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/AnalyzeService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalyzeService.java similarity index 84% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/AnalyzeService.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalyzeService.java index fb09e99a..cd16f262 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/AnalyzeService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalyzeService.java @@ -1,6 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.service; - -import static com.iqser.red.service.redaction.v1.server.redaction.service.ImportedRedactionService.IMPORTED_REDACTION_TYPE; +package com.iqser.red.service.redaction.v1.server.service; import java.util.Collections; import java.util.HashSet; @@ -23,18 +21,21 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlo import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogChanges; 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.RedactionLogLegalBasis; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; import com.iqser.red.service.redaction.v1.server.client.LegalBasisClient; import com.iqser.red.service.redaction.v1.server.client.model.NerEntitiesModel; -import com.iqser.red.service.redaction.v1.server.document.data.mapper.DocumentGraphMapper; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntitiesAdapter; -import com.iqser.red.service.redaction.v1.server.redaction.model.ManualEntity; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.Dictionary; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryIncrement; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryVersion; -import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings; +import com.iqser.red.service.redaction.v1.server.service.graph.DocumentGraphMapper; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.service.drools.EntityDroolsExecutionService; +import com.iqser.red.service.redaction.v1.server.service.drools.KieContainerCreationService; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryIncrement; +import com.iqser.red.service.redaction.v1.server.model.ManualEntity; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryVersion; +import com.iqser.red.service.redaction.v1.server.service.graph.ManualRedactionEntryService; +import com.iqser.red.service.redaction.v1.server.service.graph.NerEntitiesAdapter; +import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; import io.micrometer.core.annotation.Timed; @@ -53,9 +54,10 @@ public class AnalyzeService { private static final String REDACTMANAGER_ANALYZE_PAGEWISE_METRIC_NAME = "redactmanager_analyze.pagewise"; DictionaryService dictionaryService; - DroolsExecutionService droolsExecutionService; - EntityRedactionService entityRedactionService; - RedactionLogCreatorService redactionLogCreatorService; + EntityDroolsExecutionService entityDroolsExecutionService; + KieContainerCreationService kieContainerCreationService; + DictionarySearchService dictionarySearchService; + EntityLogCreatorService entityLogCreatorService; RedactionStorageService redactionStorageService; RedactionChangeLogService redactionChangeLogService; LegalBasisClient legalBasisClient; @@ -85,16 +87,23 @@ public class AnalyzeService { Dictionary dictionary = dictionaryService.getDeepCopyDictionary(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId()); log.info("Updated Dictionaries for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); + var wrapper = kieContainerCreationService.getLatestKieContainer(analyzeRequest.getDossierTemplateId()); + log.info("Updated Rules to Version {} for file {} in dossier {}", wrapper.rulesVersion(), analyzeRequest.getFileId(), analyzeRequest.getDossierId()); List notFoundManualRedactionEntries = manualRedactionEntryService.addManualRedactionEntriesAndReturnNotFoundEntries(analyzeRequest, document); - entityRedactionService.addDictionaryEntities(dictionary, document); + dictionarySearchService.addDictionaryEntities(dictionary, document); log.info("Finished Dictionary Search for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); - Set addedFileAttributes = entityRedactionService.addRuleEntities(dictionary, document, wrapper.container(), analyzeRequest, nerEntities); + List addedFileAttributes = entityDroolsExecutionService.executeRules(wrapper.container(), + document, + dictionary, + analyzeRequest.getFileAttributes(), + analyzeRequest.getManualRedactions(), + nerEntities); log.info("Finished Rule Execution for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); - List redactionLogEntries = redactionLogCreatorService.createRedactionLog(document, + List redactionLogEntries = entityLogCreatorService.createRedactionLog(document, analyzeRequest.getDossierTemplateId(), notFoundManualRedactionEntries, getComments(analyzeRequest)); @@ -116,7 +125,7 @@ public class AnalyzeService { true); redactionLog.setRedactionLogEntry(importedRedactionFilteredEntries); - return finalizeAnalysis(analyzeRequest, startTime, redactionLog, document.getNumberOfPages(), dictionary.getVersion(), false, addedFileAttributes); + return finalizeAnalysis(analyzeRequest, startTime, redactionLog, document.getNumberOfPages(), dictionary.getVersion(), false, new HashSet<>(addedFileAttributes)); } @@ -163,13 +172,13 @@ public class AnalyzeService { document.getNumberOfPages(), dictionaryIncrement.getDictionaryVersion(), true, - new HashSet<>()); + Collections.emptySet()); } NerEntities nerEntities = getEntityRecognitionEntitiesFilteredBySectionIds(analyzeRequest, document, sectionsToReanalyseIds); log.info("Loaded Ner Entities for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); - var wrapper = droolsExecutionService.getLatestKieContainer(analyzeRequest.getDossierTemplateId()); + var wrapper = kieContainerCreationService.getLatestKieContainer(analyzeRequest.getDossierTemplateId()); log.info("Updated Rules to version {} for file {} in dossier {}", wrapper.rulesVersion(), analyzeRequest.getFileId(), analyzeRequest.getDossierId()); List notFoundManualRedactionEntries = manualRedactionEntryService.addManualRedactionEntriesAndReturnNotFoundEntries(analyzeRequest, document); @@ -177,18 +186,19 @@ public class AnalyzeService { Dictionary dictionary = dictionaryService.getDeepCopyDictionary(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId()); log.info("Updated Dictionaries for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); - sectionsToReAnalyse.forEach(node -> entityRedactionService.addDictionaryEntities(dictionary, node)); + sectionsToReAnalyse.forEach(node -> dictionarySearchService.addDictionaryEntities(dictionary, node)); log.info("Finished Dictionary Search for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); - Set addedFileAttributes = entityRedactionService.addRuleEntities(dictionary, + List allFileAttributes = entityDroolsExecutionService.executeRules(wrapper.container(), document, sectionsToReAnalyse, - wrapper.container(), - analyzeRequest, + dictionary, + analyzeRequest.getFileAttributes(), + analyzeRequest.getManualRedactions(), nerEntities); log.info("Finished Rule Execution for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); - List newRedactionLogEntries = redactionLogCreatorService.createRedactionLog(document, + List newRedactionLogEntries = entityLogCreatorService.createRedactionLog(document, analyzeRequest.getDossierTemplateId(), notFoundManualRedactionEntries, getComments(analyzeRequest)); @@ -200,7 +210,7 @@ public class AnalyzeService { false); previousRedactionLog.getRedactionLogEntry() - .removeIf(entry -> sectionsToReanalyseIds.contains(entry.getSectionNumber()) && !entry.getType().equals(IMPORTED_REDACTION_TYPE)); + .removeIf(entry -> sectionsToReanalyseIds.contains(entry.getSectionNumber()) && !entry.getType().equals(ImportedRedactionService.IMPORTED_REDACTION_TYPE)); previousRedactionLog.getRedactionLogEntry().addAll(importedRedactionFilteredEntries); return finalizeAnalysis(analyzeRequest, @@ -209,7 +219,7 @@ public class AnalyzeService { document.getNumberOfPages(), dictionaryIncrement.getDictionaryVersion(), true, - addedFileAttributes); + new HashSet<>(allFileAttributes)); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ComponentCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ComponentCreationService.java new file mode 100644 index 00000000..7211fd2e --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ComponentCreationService.java @@ -0,0 +1,5 @@ +package com.iqser.red.service.redaction.v1.server.service; + +public class ComponentCreationService { + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionarySearchService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionarySearchService.java new file mode 100644 index 00000000..442dde7d --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionarySearchService.java @@ -0,0 +1,53 @@ +package com.iqser.red.service.redaction.v1.server.service; + +import org.springframework.stereotype.Service; + +import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.dictionary.SearchImplementation; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityEnrichmentService; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import lombok.experimental.FieldDefaults; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) +public class DictionarySearchService { + + EntityEnrichmentService entityEnrichmentService; + + + public void addDictionaryEntities(Dictionary dictionary, SemanticNode node) { + + for (var model : dictionary.getDictionaryModels()) { + bySearchImplementationAsDictionary(model.getEntriesSearch(), model.getType(), EntityType.ENTITY, node, model.isDossierDictionary()); + bySearchImplementationAsDictionary(model.getFalsePositiveSearch(), model.getType(), EntityType.FALSE_POSITIVE, node, model.isDossierDictionary()); + bySearchImplementationAsDictionary(model.getFalseRecommendationsSearch(), model.getType(), EntityType.FALSE_RECOMMENDATION, node, model.isDossierDictionary()); + } + } + + + public void bySearchImplementationAsDictionary(SearchImplementation searchImplementation, + String type, + EntityType entityType, + SemanticNode node, + boolean isDossierDictionaryEntry) { + + EntityCreationService entityCreationService = new EntityCreationService(entityEnrichmentService); + searchImplementation.getBoundaries(node.getTextBlock(), node.getTextRange()) + .stream() + .filter(boundary -> entityCreationService.isValidEntityBoundary(node.getTextBlock(), boundary)) + .map(bounds -> entityCreationService.forceByBoundary(bounds, type, entityType, node)) + .peek(entity -> entity.setDictionaryEntry(true)) + .peek(entity -> entity.setDossierDictionaryEntry(isDossierDictionaryEntry)) + .forEach(entity -> entity.addEngine(Engine.DICTIONARY)); + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DictionaryService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionaryService.java similarity index 95% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DictionaryService.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionaryService.java index 54974fcd..9d132b63 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DictionaryService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DictionaryService.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.service; +package com.iqser.red.service.redaction.v1.server.service; import java.awt.Color; import java.util.ArrayList; @@ -24,15 +24,15 @@ import com.iqser.red.service.dictionarymerge.commons.DictionaryEntryModel; import com.iqser.red.service.dictionarymerge.commons.DictionaryMergeService; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.Colors; import com.iqser.red.service.redaction.v1.server.client.DictionaryClient; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.Dictionary; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryEntries; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryIncrement; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryIncrementValue; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryModel; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryRepresentation; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryVersion; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.TenantDictionary; -import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryIncrement; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryModel; +import com.iqser.red.service.redaction.v1.server.model.dictionary.TenantDictionary; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryEntries; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryIncrementValue; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryRepresentation; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryVersion; +import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; import com.knecon.fforesight.tenantcommons.TenantContext; import feign.FeignException; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java similarity index 94% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java index cb39094b..f9c25cc4 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionLogCreatorService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.service; +package com.iqser.red.service.redaction.v1.server.service; import java.awt.geom.Rectangle2D; import java.util.ArrayList; @@ -17,13 +17,13 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlo import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Rectangle; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogComment; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.PositionOnPage; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Image; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType; -import com.iqser.red.service.redaction.v1.server.redaction.model.ManualEntity; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.PositionOnPage; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.ManualEntity; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -31,7 +31,7 @@ import lombok.extern.slf4j.Slf4j; @Service @Slf4j @RequiredArgsConstructor -public class RedactionLogCreatorService { +public class EntityLogCreatorService { private final DictionaryService dictionaryService; private final ManualChangeFactory manualChangeFactory; @@ -45,7 +45,7 @@ public class RedactionLogCreatorService { List entries = new ArrayList<>(); document.getEntities() .stream() - .filter(RedactionLogCreatorService::isEntityOrRecommendationType) + .filter(EntityLogCreatorService::isEntityOrRecommendationType) .filter(entity -> !entity.removed()) .forEach(entityNode -> entries.addAll(toRedactionLogEntries(entityNode, dossierTemplateId, comments))); document.streamAllImages().filter(image -> !image.removed()).forEach(imageNode -> entries.add(createRedactionLogEntry(imageNode, dossierTemplateId, comments))); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ImportedRedactionService.java similarity index 98% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ImportedRedactionService.java index ce56d4ce..fad2488a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ImportedRedactionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ImportedRedactionService.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.service; +package com.iqser.red.service.redaction.v1.server.service; import java.util.HashSet; import java.util.List; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualChangeFactory.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangeFactory.java similarity index 97% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualChangeFactory.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangeFactory.java index 5a244e9a..e240709f 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualChangeFactory.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangeFactory.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.service; +package com.iqser.red.service.redaction.v1.server.service; import java.time.OffsetDateTime; import java.util.List; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/ManualChangesApplicationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangesApplicationService.java similarity index 88% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/ManualChangesApplicationService.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangesApplicationService.java index 74836290..dce86eef 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/ManualChangesApplicationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangesApplicationService.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.services; +package com.iqser.red.service.redaction.v1.server.service; import java.awt.geom.Rectangle2D; import java.util.HashSet; @@ -7,13 +7,14 @@ import java.util.NoSuchElementException; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.Entity; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.PositionOnPage; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Image; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.utils.RectangleTransformations; +import com.iqser.red.service.redaction.v1.server.model.document.entity.Entity; +import com.iqser.red.service.redaction.v1.server.model.document.entity.PositionOnPage; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.utils.RectangleTransformations; import lombok.RequiredArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionChangeLogService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/RedactionChangeLogService.java similarity index 98% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionChangeLogService.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/RedactionChangeLogService.java index 1712f5ec..74c4dfc4 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/RedactionChangeLogService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/RedactionChangeLogService.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.service; +package com.iqser.red.service.redaction.v1.server.service; import java.time.OffsetDateTime; import java.util.ArrayList; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/SectionFinderService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/SectionFinderService.java similarity index 91% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/SectionFinderService.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/SectionFinderService.java index 067a0229..12299d51 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/SectionFinderService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/SectionFinderService.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.service; +package com.iqser.red.service.redaction.v1.server.service; import java.util.Collection; import java.util.Collections; @@ -21,11 +21,11 @@ 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.ManualResizeRedaction; 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.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.NodeType; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryIncrement; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryIncrementValue; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.SearchImplementation; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryIncrement; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryIncrementValue; +import com.iqser.red.service.redaction.v1.server.model.dictionary.SearchImplementation; import io.micrometer.core.annotation.Timed; import lombok.AccessLevel; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/ComponentDroolsExecutionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/ComponentDroolsExecutionService.java new file mode 100644 index 00000000..84ffe542 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/ComponentDroolsExecutionService.java @@ -0,0 +1,17 @@ +package com.iqser.red.service.redaction.v1.server.service.drools; + +import org.springframework.stereotype.Service; + +import lombok.AccessLevel; +import lombok.RequiredArgsConstructor; +import lombok.experimental.FieldDefaults; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) +public class ComponentDroolsExecutionService { + + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/DroolsSyntaxValidationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/DroolsSyntaxValidationService.java new file mode 100644 index 00000000..56dd52bf --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/DroolsSyntaxValidationService.java @@ -0,0 +1,107 @@ +package com.iqser.red.service.redaction.v1.server.service.drools; + +import java.util.List; +import java.util.stream.Collectors; + +import org.kie.api.builder.KieBuilder; +import org.kie.api.builder.Message; +import org.springframework.stereotype.Service; + +import com.iqser.red.service.redaction.v1.model.DroolsSyntaxErrorMessage; +import com.iqser.red.service.redaction.v1.model.DroolsSyntaxValidation; +import com.iqser.red.service.redaction.v1.server.model.drools.BasicRule; +import com.iqser.red.service.redaction.v1.server.model.drools.RuleFileBluePrint; +import com.iqser.red.service.redaction.v1.server.storage.RuleManagementResources; + +import lombok.RequiredArgsConstructor; +import lombok.SneakyThrows; + +@Service +@RequiredArgsConstructor +public class DroolsSyntaxValidationService { + + private final KieContainerCreationService kieContainerCreationService; + + + @SneakyThrows + public DroolsSyntaxValidation testRules(String rules) { + + DroolsSyntaxValidation customDroolsSyntaxValidation = buildCustomDroolsSyntaxValidation(rules); + DroolsSyntaxValidation droolsCompilerSyntaxValidation = buildDroolsCompilerSyntaxValidation(rules); + droolsCompilerSyntaxValidation.getDroolsSyntaxErrorMessages().addAll(customDroolsSyntaxValidation.getDroolsSyntaxErrorMessages()); + return droolsCompilerSyntaxValidation; + } + + + private DroolsSyntaxValidation buildCustomDroolsSyntaxValidation(String ruleString) { + + RuleFileBluePrint ruleFileBluePrint = RuleFileParser.buildBluePrintFromRulesString(ruleString); + DroolsSyntaxValidation customSyntaxValidation = ruleFileBluePrint.getDroolsSyntaxValidation(); + RuleFileBluePrint baseRuleFileBluePrint = RuleFileParser.buildBluePrintFromRulesString(RuleManagementResources.getBaseRuleFileInputStreamString()); + if (!ruleFileBluePrint.getImports().equals(baseRuleFileBluePrint.getImports())) { + customSyntaxValidation.getDroolsSyntaxErrorMessages() + .add(DroolsSyntaxErrorMessage.builder() + .line(ruleFileBluePrint.getImportLine()) + .column(0) + .message(String.format("Changing the imports is not allowed! Must be: %n%s", baseRuleFileBluePrint.getImports())) + .build()); + } + if (!ruleFileBluePrint.getQueries().equals(baseRuleFileBluePrint.getQueries())) { + customSyntaxValidation.getDroolsSyntaxErrorMessages() + .add(DroolsSyntaxErrorMessage.builder() + .line(ruleFileBluePrint.getQueriesLine()) + .column(0) + .message(String.format("Changing the queries is not allowed! Must be: %n%s", baseRuleFileBluePrint.getQueries())) + .build()); + } + if (!ruleFileBluePrint.getGlobals().equals(baseRuleFileBluePrint.getGlobals())) { + customSyntaxValidation.getDroolsSyntaxErrorMessages() + .add(DroolsSyntaxErrorMessage.builder() + .line(ruleFileBluePrint.getGlobalsLine()) + .column(0) + .message(String.format("Changing the globals is not allowed! Must be: %n%s", baseRuleFileBluePrint.getGlobals())) + .build()); + } + baseRuleFileBluePrint.streamAllRules().forEach(basicRule -> { + if (!validateBaseRulesArePresent(basicRule, ruleFileBluePrint)) { + customSyntaxValidation.getDroolsSyntaxErrorMessages() + .add(DroolsSyntaxErrorMessage.builder() + .line(basicRule.getLine()) + .column(0) + .message(String.format("Changing or removing the rule %s is not allowed! Must be: %n%s", basicRule.getName(), basicRule.getCode())) + .build()); + } + }); + return customSyntaxValidation; + } + + + private static boolean validateBaseRulesArePresent(BasicRule basicRule, RuleFileBluePrint ruleFileBluePrint) { + + return ruleFileBluePrint.findRulesByIdentifier(basicRule.getIdentifier()).stream().allMatch(otherRule -> otherRule.getCode().equals(basicRule.getCode())); + } + + + private DroolsSyntaxValidation buildDroolsCompilerSyntaxValidation(String rules) { + + var versionId = System.currentTimeMillis(); + var testRules = "test-rules"; + KieBuilder kieBuilder = kieContainerCreationService.registerNewKieContainerVersion(testRules, versionId, rules); + return buildDroolsCompilerSyntaxValidation(kieBuilder); + } + + + private DroolsSyntaxValidation buildDroolsCompilerSyntaxValidation(KieBuilder kieBuilder) { + + List errorMessages = kieBuilder.getResults().getMessages(Message.Level.ERROR); + List droolsSyntaxErrorMessages = errorMessages.stream().map(this::buildDroolsSyntaxErrorMessage).collect(Collectors.toList()); + return DroolsSyntaxValidation.builder().droolsSyntaxErrorMessages(droolsSyntaxErrorMessages).build(); + } + + + private DroolsSyntaxErrorMessage buildDroolsSyntaxErrorMessage(Message message) { + + return DroolsSyntaxErrorMessage.builder().line(message.getLine()).column(message.getColumn()).message(message.getText()).build(); + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/EntityDroolsExecutionService.java similarity index 88% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/EntityDroolsExecutionService.java index 8a0727e3..acfc94a8 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/DroolsExecutionService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/EntityDroolsExecutionService.java @@ -1,8 +1,5 @@ -package com.iqser.red.service.redaction.v1.server.redaction.service; +package com.iqser.red.service.redaction.v1.server.service.drools; -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; import java.util.LinkedList; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -27,17 +24,13 @@ import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions; -import com.iqser.red.service.redaction.v1.model.DroolsSyntaxValidation; -import com.iqser.red.service.redaction.v1.server.client.RulesClient; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.document.services.EntityEnrichmentService; -import com.iqser.red.service.redaction.v1.server.document.services.ManualChangesApplicationService; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; -import com.iqser.red.service.redaction.v1.server.redaction.model.KieWrapper; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.Dictionary; -import com.knecon.fforesight.tenantcommons.TenantContext; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityEnrichmentService; +import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; import io.micrometer.core.annotation.Timed; import lombok.AccessLevel; @@ -49,9 +42,7 @@ import lombok.extern.slf4j.Slf4j; @Service @RequiredArgsConstructor @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) -public class DroolsExecutionService { - - RulesClient rulesClient; +public class EntityDroolsExecutionService { EntityEnrichmentService entityEnrichmentService; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/KieContainerCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/KieContainerCreationService.java new file mode 100644 index 00000000..f6d1cc19 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/KieContainerCreationService.java @@ -0,0 +1,77 @@ +package com.iqser.red.service.redaction.v1.server.service.drools; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +import org.apache.commons.lang3.StringUtils; +import org.kie.api.KieServices; +import org.kie.api.builder.KieBuilder; +import org.kie.api.builder.KieFileSystem; +import org.kie.api.builder.ReleaseId; +import org.kie.api.runtime.KieContainer; +import org.springframework.stereotype.Service; + +import com.iqser.red.service.redaction.v1.server.client.RulesClient; +import com.iqser.red.service.redaction.v1.server.model.KieWrapper; +import com.knecon.fforesight.tenantcommons.TenantContext; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class KieContainerCreationService { + + private final RulesClient rulesClient; + + public KieWrapper getLatestKieContainer(String dossierTemplateId) { + + long version = rulesClient.getVersion(dossierTemplateId); + + return new KieWrapper(getKieContainer(dossierTemplateId, version), version); + + } + + + private ReleaseId getReleaseId(String dossierTemplate, long version) { + + KieServices kieServices = KieServices.Factory.get(); + return kieServices.newReleaseId("com.knecon.rules", TenantContext.getTenantId() + ":" + dossierTemplate, String.format("1.%d", version)); + } + public KieContainer getKieContainer(String dossierTemplateId, long version) { + + KieServices kieServices = KieServices.Factory.get(); + try { + return kieServices.newKieContainer(getReleaseId(dossierTemplateId, version)); + } catch (Exception e) { + + registerNewKieContainerVersion(dossierTemplateId, version); + return kieServices.newKieContainer(getReleaseId(dossierTemplateId, version)); + } + + } + + + private void registerNewKieContainerVersion(String dossierTemplateId, long version) { + + var rules = rulesClient.getRules(dossierTemplateId); + if (rules == null || StringUtils.isEmpty(rules.getValue())) { + throw new RuntimeException("Rules cannot be empty."); + } + + registerNewKieContainerVersion(dossierTemplateId, version, rules.getValue()); + } + + + public KieBuilder registerNewKieContainerVersion(String dossierTemplateId, long version, String rules) { + + KieServices kieServices = KieServices.Factory.get(); + KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); + kieFileSystem.generateAndWritePomXML(getReleaseId(dossierTemplateId, version)); + InputStream input = new ByteArrayInputStream(rules.getBytes(StandardCharsets.UTF_8)); + kieFileSystem.write("src/main/resources/drools/rules" + dossierTemplateId + ".drl", kieServices.getResources().newInputStreamResource(input)); + KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem); + return kieBuilder.buildAll(); + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/RuleFileParser.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/RuleFileParser.java new file mode 100644 index 00000000..535eca80 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/RuleFileParser.java @@ -0,0 +1,126 @@ +package com.iqser.red.service.redaction.v1.server.service.drools; + +import static java.util.stream.Collectors.groupingBy; + +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import org.drools.drl.ast.descr.GlobalDescr; +import org.drools.drl.ast.descr.ImportDescr; +import org.drools.drl.ast.descr.PackageDescr; +import org.drools.drl.ast.descr.RuleDescr; +import org.drools.drl.parser.DrlParser; +import org.kie.internal.builder.conf.LanguageLevelOption; + +import com.iqser.red.service.redaction.v1.model.DroolsSyntaxValidation; +import com.iqser.red.service.redaction.v1.server.model.drools.BasicRule; +import com.iqser.red.service.redaction.v1.server.model.drools.RuleClass; +import com.iqser.red.service.redaction.v1.server.model.drools.RuleFileBluePrint; +import com.iqser.red.service.redaction.v1.server.model.drools.RuleIdentifier; +import com.iqser.red.service.redaction.v1.server.model.drools.RuleType; +import com.iqser.red.service.redaction.v1.server.model.drools.RuleUnit; + +import lombok.SneakyThrows; +import lombok.experimental.UtilityClass; + +@UtilityClass +public class RuleFileParser { + + private final static Pattern ruleIdentifierInCodeFinder = Pattern.compile( + "\\b(?:redact|apply|skip|remove|ignore|applyWithLineBreaks|applyWithReferences|skipWithReferences)\\s*\\(\"([a-zA-Z0-9]+.\\d+.\\d+)\",.*(?:, .*)?\\)"); + + + @SneakyThrows + public RuleFileBluePrint buildBluePrintFromRulesString(String ruleString) { + + DroolsSyntaxValidation customDroolsSyntaxValidation = DroolsSyntaxValidation.builder().build(); + DrlParser parser = new DrlParser(LanguageLevelOption.DRL6); + PackageDescr packageDescr = parser.parse(false, ruleString); + StringBuilder queryBuilder = new StringBuilder(); + List allRules = new LinkedList<>(); + for (RuleDescr rule : packageDescr.getRules()) { + if (rule.isQuery()) { + queryBuilder.append(ruleString, rule.getStartCharacter(), rule.getEndCharacter()); + queryBuilder.append("\n\n"); + continue; + } + validateRule(ruleString, rule, customDroolsSyntaxValidation, allRules); + } + String imports = ruleString.substring(0, packageDescr.getImports().stream().mapToInt(ImportDescr::getEndCharacter).max().orElseThrow() + 1); + String globals = packageDescr.getGlobals() + .stream() + .map(globalDescr -> ruleString.substring(globalDescr.getStartCharacter(), globalDescr.getEndCharacter())) + .collect(Collectors.joining("\n")); + + List ruleClasses = buildRuleClasses(allRules); + + return new RuleFileBluePrint(imports.trim(), + packageDescr.getImports().stream().findFirst().map(ImportDescr::getLine).orElse(0), + globals.trim(), + packageDescr.getGlobals().stream().findFirst().map(GlobalDescr::getLine).orElse(0), + queryBuilder.toString().trim(), + packageDescr.getRules().stream().filter(RuleDescr::isQuery).findFirst().map(RuleDescr::getLine).orElse(0), + ruleClasses, + customDroolsSyntaxValidation); + } + + + private static void validateRule(String ruleString, RuleDescr rule, DroolsSyntaxValidation customDroolsSyntaxValidation, List allRules) { + + BasicRule basicRule; + try { + basicRule = BasicRule.fromRuleDescr(rule, ruleString); + } catch (Exception e) { + customDroolsSyntaxValidation.addErrorMessage(rule.getLine(), rule.getColumn(), "Malformed rule name, correct format is \"\\w+.\\d+.\\d+: \""); + return; + } + if (allRules.contains(basicRule)) { + addDuplicateRuleIdentifierErrorMessage(rule, basicRule, customDroolsSyntaxValidation); + } + validateRuleIdentifierInCodeIsSame(basicRule.getCode(), basicRule.getIdentifier().toString(), rule.getLine(), customDroolsSyntaxValidation); + allRules.add(BasicRule.fromRuleDescr(rule, ruleString)); + } + + + private static void validateRuleIdentifierInCodeIsSame(String code, String identifier, int lineOffset, DroolsSyntaxValidation customDroolsSyntaxValidation) { + + Matcher matcher = ruleIdentifierInCodeFinder.matcher(code); + while (matcher.find()) { + String identifierInCode = code.substring(matcher.start(1), matcher.end(1)); + long line = code.substring(0, matcher.start(1)).lines().count() + lineOffset - 1; + if (!identifier.equals(identifierInCode)) { + customDroolsSyntaxValidation.addErrorMessage((int) line, + 0, + String.format("Rule identifier %s is not equal to rule identifier %s in rule name!", identifierInCode, identifier)); + } + } + } + + + private void addDuplicateRuleIdentifierErrorMessage(RuleDescr rule, BasicRule basicRule, DroolsSyntaxValidation customDroolsSyntaxValidation) { + + customDroolsSyntaxValidation.addErrorMessage(rule.getLine(), + rule.getColumn(), + String.format("RuleIdentifier: %s is a duplicate, duplicates are not allowed!", basicRule.getIdentifier())); + } + + + private List buildRuleClasses(List allRules) { + + List ruleTypeOrder = allRules.stream().map(BasicRule::getIdentifier).map(RuleIdentifier::type).distinct().toList(); + Map> rulesPerType = allRules.stream().collect(groupingBy(rule -> rule.getIdentifier().type())); + return ruleTypeOrder.stream().map(type -> new RuleClass(type, groupingByGroup(rulesPerType.get(type)))).collect(Collectors.toList()); + } + + + private List groupingByGroup(List rules) { + + Map> rulesPerUnit = rules.stream().collect(groupingBy(rule -> rule.getIdentifier().unit())); + return rulesPerUnit.keySet().stream().sorted().map(unit -> new RuleUnit(unit, rulesPerUnit.get(unit))).collect(Collectors.toList()); + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/data/mapper/DocumentGraphMapper.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/DocumentGraphMapper.java similarity index 86% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/data/mapper/DocumentGraphMapper.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/DocumentGraphMapper.java index 5f3444d4..a042bdb7 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/data/mapper/DocumentGraphMapper.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/DocumentGraphMapper.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.data.mapper; +package com.iqser.red.service.redaction.v1.server.service.graph; import java.util.Arrays; import java.util.HashSet; @@ -7,22 +7,22 @@ import java.util.List; import java.util.Map; import java.util.NoSuchElementException; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Footer; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Header; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Image; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Paragraph; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Section; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.TableCell; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.AtomicTextBlock; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlockCollector; -import com.iqser.red.service.redaction.v1.server.document.data.DocumentData; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Headline; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Footer; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Header; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Section; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.TableCell; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentData; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Headline; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPage; import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPositionData; import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentStructure; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/EntityCreationService.java similarity index 95% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityCreationService.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/EntityCreationService.java index a39ae9b8..9a4b8bee 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/EntityCreationService.java @@ -1,6 +1,6 @@ -package com.iqser.red.service.redaction.v1.server.document.services; +package com.iqser.red.service.redaction.v1.server.service.graph; -import static com.iqser.red.service.redaction.v1.server.redaction.utils.SeparatorUtils.boundaryIsSurroundedBySeparators; +import static com.iqser.red.service.redaction.v1.server.utils.SeparatorUtils.boundaryIsSurroundedBySeparators; import java.util.Collection; import java.util.Collections; @@ -18,25 +18,24 @@ import org.kie.api.runtime.KieSession; import com.google.common.base.Functions; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.ConsecutiveBoundaryCollector; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.ManualChangeOverwrite; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.PositionOnPage; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.NodeType; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.TableCell; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.document.utils.RectangleTransformations; -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntitiesAdapter; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.SearchImplementation; -import com.iqser.red.service.redaction.v1.server.redaction.utils.IdBuilder; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.ConsecutiveBoundaryCollector; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.ManualChangeOverwrite; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.entity.PositionOnPage; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.TableCell; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.utils.RectangleTransformations; +import com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.model.dictionary.SearchImplementation; +import com.iqser.red.service.redaction.v1.server.utils.IdBuilder; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityEnrichmentService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/EntityEnrichmentService.java similarity index 91% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityEnrichmentService.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/EntityEnrichmentService.java index 926fff44..dea1b6b4 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/services/EntityEnrichmentService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/EntityEnrichmentService.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.services; +package com.iqser.red.service.redaction.v1.server.service.graph; import java.util.Arrays; import java.util.List; @@ -6,9 +6,9 @@ import java.util.Objects; import org.springframework.stereotype.Service; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; import lombok.RequiredArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/CustomEntityCreationAdapter.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/ManualEntityCreationService.java similarity index 90% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/CustomEntityCreationAdapter.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/ManualEntityCreationService.java index e4fdf7c7..9354c9c0 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/CustomEntityCreationAdapter.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/ManualEntityCreationService.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.adapter; +package com.iqser.red.service.redaction.v1.server.service.graph; import static java.lang.String.format; import static java.util.stream.Collectors.groupingBy; @@ -20,30 +20,28 @@ import org.springframework.stereotype.Service; 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.RedactionLog; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.PositionOnPage; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.document.services.EntityEnrichmentService; -import com.iqser.red.service.redaction.v1.server.redaction.model.ManualEntity; -import com.iqser.red.service.redaction.v1.server.redaction.model.RectangleWithPage; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.SearchImplementation; +import com.iqser.red.service.redaction.v1.server.model.ManualEntity; +import com.iqser.red.service.redaction.v1.server.model.RectangleWithPage; +import com.iqser.red.service.redaction.v1.server.model.dictionary.SearchImplementation; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.PositionOnPage; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; import lombok.extern.slf4j.Slf4j; @Slf4j @Service -public class CustomEntityCreationAdapter { +public class ManualEntityCreationService { - private static final double MATCH_THRESHOLD = 5; // sum of distances for each corner + private static final double MATCH_THRESHOLD = 5; // Is compared to the sum of distances in pdf coordinates for each corner of the bounding box of the entities private final EntityCreationService entityCreationService; @Autowired - public CustomEntityCreationAdapter(EntityEnrichmentService entityEnrichmentService) { + public ManualEntityCreationService(EntityEnrichmentService entityEnrichmentService) { entityCreationService = new EntityCreationService(entityEnrichmentService); } @@ -100,7 +98,7 @@ public class CustomEntityCreationAdapter { TextEntity correctEntity = entityCreationService.forceByBoundary(closestTextRange, manualEntity.getType(), manualEntity.getEntityType(), node); if (manualEntity.isApplied()) { - correctEntity.force(manualEntity.getRuleIdentifier(), manualEntity.getReason(), manualEntity.getLegalBasis()); + correctEntity.apply(manualEntity.getRuleIdentifier(), manualEntity.getReason(), manualEntity.getLegalBasis()); } else { correctEntity.skip(manualEntity.getRuleIdentifier(), manualEntity.getReason()); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualRedactionEntryService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/ManualRedactionEntryService.java similarity index 81% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualRedactionEntryService.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/ManualRedactionEntryService.java index 1dc59c7e..b3c351ff 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/service/ManualRedactionEntryService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/ManualRedactionEntryService.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.service; +package com.iqser.red.service.redaction.v1.server.service.graph; import java.util.Collection; import java.util.Collections; @@ -10,9 +10,8 @@ import org.springframework.stereotype.Service; import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest; 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.BaseAnnotation; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.CustomEntityCreationAdapter; -import com.iqser.red.service.redaction.v1.server.redaction.model.ManualEntity; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.ManualEntity; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -22,14 +21,14 @@ import lombok.extern.slf4j.Slf4j; @RequiredArgsConstructor public class ManualRedactionEntryService { - private final CustomEntityCreationAdapter customEntityCreationAdapter; + private final ManualEntityCreationService manualEntityCreationService; public List addManualRedactionEntriesAndReturnNotFoundEntries(AnalyzeRequest analyzeRequest, Document document) { List notFoundManualRedactionEntries = Collections.emptyList(); if (analyzeRequest.getManualRedactions() != null) { - notFoundManualRedactionEntries = customEntityCreationAdapter.createRedactionEntitiesIfFoundAndReturnNotFoundEntries(analyzeRequest.getManualRedactions() + notFoundManualRedactionEntries = manualEntityCreationService.createRedactionEntitiesIfFoundAndReturnNotFoundEntries(analyzeRequest.getManualRedactions() .getEntriesToAdd(), document); log.info("Added Manual redaction entries for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId()); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/NerEntitiesAdapter.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/NerEntitiesAdapter.java similarity index 95% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/NerEntitiesAdapter.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/NerEntitiesAdapter.java index fd6139e6..564ced0c 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/NerEntitiesAdapter.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/NerEntitiesAdapter.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.adapter; +package com.iqser.red.service.redaction.v1.server.service.graph; import java.util.Collection; import java.util.Comparator; @@ -9,10 +9,11 @@ import java.util.stream.Stream; import com.iqser.red.service.redaction.v1.server.client.model.EntityRecognitionEntity; import com.iqser.red.service.redaction.v1.server.client.model.NerEntitiesModel; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Section; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Section; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.AccessLevel; import lombok.experimental.FieldDefaults; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/data/mapper/PropertiesMapper.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/PropertiesMapper.java similarity index 83% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/data/mapper/PropertiesMapper.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/PropertiesMapper.java index d6b0fa31..af29e76d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/data/mapper/PropertiesMapper.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/graph/PropertiesMapper.java @@ -1,18 +1,16 @@ -package com.iqser.red.service.redaction.v1.server.document.data.mapper; +package com.iqser.red.service.redaction.v1.server.service.graph; import java.awt.geom.Rectangle2D; import java.util.Arrays; import java.util.List; import java.util.Map; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Image; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.TableCell; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.TableCell; import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentStructure; -import lombok.AccessLevel; -import lombok.experimental.FieldDefaults; import lombok.experimental.UtilityClass; @UtilityClass diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java index c4159844..419960bf 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RedactionStorageService.java @@ -11,8 +11,8 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlo import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.imported.ImportedRedactions; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.section.SectionGrid; import com.iqser.red.service.redaction.v1.server.client.model.NerEntitiesModel; -import com.iqser.red.service.redaction.v1.server.exception.NotFoundException; -import com.iqser.red.service.redaction.v1.server.document.data.DocumentData; +import com.iqser.red.service.redaction.v1.server.utils.exception.NotFoundException; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentData; import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPage; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RuleManagementResources.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RuleManagementResources.java new file mode 100644 index 00000000..bec5b39b --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/RuleManagementResources.java @@ -0,0 +1,29 @@ +package com.iqser.red.service.redaction.v1.server.storage; + +import java.io.InputStream; +import java.nio.file.Path; + +import org.springframework.core.io.ClassPathResource; + +import lombok.SneakyThrows; + +public class RuleManagementResources { + + private static final String folderPrefix = "drools"; + + @SneakyThrows + public static InputStream getBaseRuleFileInputStream() { + + return new ClassPathResource(Path.of(folderPrefix, "base_rules.drl").toString()).getInputStream(); + } + + + @SneakyThrows + public static String getBaseRuleFileInputStreamString() { + + try (var in = getBaseRuleFileInputStream()) { + return new String(in.readAllBytes()); + } + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/IdBuilder.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/IdBuilder.java similarity index 91% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/IdBuilder.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/IdBuilder.java index 7547c4a5..61b0d430 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/IdBuilder.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/IdBuilder.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.utils; +package com.iqser.red.service.redaction.v1.server.utils; import java.awt.geom.Rectangle2D; import java.nio.charset.StandardCharsets; @@ -9,7 +9,7 @@ import java.util.stream.Collectors; import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; import lombok.experimental.UtilityClass; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/Patterns.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/Patterns.java similarity index 95% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/Patterns.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/Patterns.java index 74ab05bf..8d37ef67 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/Patterns.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/Patterns.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.utils; +package com.iqser.red.service.redaction.v1.server.utils; import java.util.HashMap; import java.util.Map; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/utils/RectangleTransformations.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RectangleTransformations.java similarity index 97% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/utils/RectangleTransformations.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RectangleTransformations.java index 586e0af4..b0880c33 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/utils/RectangleTransformations.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RectangleTransformations.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.utils; +package com.iqser.red.service.redaction.v1.server.utils; import java.awt.geom.Rectangle2D; import java.awt.geom.RectangularShape; @@ -13,7 +13,7 @@ import java.util.function.Supplier; import java.util.stream.Collector; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Rectangle; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/utils/RedactionSearchUtility.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RedactionSearchUtility.java similarity index 95% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/utils/RedactionSearchUtility.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RedactionSearchUtility.java index a43b5d43..afdef2a6 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/document/utils/RedactionSearchUtility.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RedactionSearchUtility.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.document.utils; +package com.iqser.red.service.redaction.v1.server.utils; import static java.lang.String.format; @@ -9,10 +9,9 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.IntStream; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.redaction.utils.Patterns; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.experimental.UtilityClass; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/ResourceLoader.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/ResourceLoader.java similarity index 93% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/ResourceLoader.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/ResourceLoader.java index 893381ac..2cf7258b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/ResourceLoader.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/ResourceLoader.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.utils; +package com.iqser.red.service.redaction.v1.server.utils; import java.io.BufferedReader; import java.io.IOException; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/SeparatorUtils.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/SeparatorUtils.java similarity index 92% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/SeparatorUtils.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/SeparatorUtils.java index c872bbe2..5145876b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/SeparatorUtils.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/SeparatorUtils.java @@ -1,10 +1,10 @@ -package com.iqser.red.service.redaction.v1.server.redaction.utils; +package com.iqser.red.service.redaction.v1.server.utils; import java.util.Set; import java.util.regex.Pattern; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/TextNormalizationUtilities.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/TextNormalizationUtilities.java similarity index 90% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/TextNormalizationUtilities.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/TextNormalizationUtilities.java index 8760fe15..fcaa358c 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/redaction/utils/TextNormalizationUtilities.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/TextNormalizationUtilities.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.redaction.utils; +package com.iqser.red.service.redaction.v1.server.utils; import lombok.experimental.UtilityClass; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/exception/DroolsTimeoutException.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/exception/DroolsTimeoutException.java similarity index 100% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/exception/DroolsTimeoutException.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/exception/DroolsTimeoutException.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/exception/NotFoundException.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/exception/NotFoundException.java similarity index 67% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/exception/NotFoundException.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/exception/NotFoundException.java index a25e7db2..639682f8 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/exception/NotFoundException.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/exception/NotFoundException.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.exception; +package com.iqser.red.service.redaction.v1.server.utils.exception; public class NotFoundException extends RuntimeException { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/exception/RedactionException.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/exception/RedactionException.java similarity index 79% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/exception/RedactionException.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/exception/RedactionException.java index fd801849..85170841 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/exception/RedactionException.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/exception/RedactionException.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.exception; +package com.iqser.red.service.redaction.v1.server.utils.exception; public class RedactionException extends RuntimeException { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/exception/RulesValidationException.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/exception/RulesValidationException.java similarity index 71% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/exception/RulesValidationException.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/exception/RulesValidationException.java index dfb328da..94df763c 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/exception/RulesValidationException.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/exception/RulesValidationException.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.exception; +package com.iqser.red.service.redaction.v1.server.utils.exception; public class RulesValidationException extends RuntimeException { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/resources/drools/base_rules.drl b/redaction-service-v1/redaction-service-server-v1/src/main/resources/drools/base_rules.drl new file mode 100644 index 00000000..36aecaf1 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/main/resources/drools/base_rules.drl @@ -0,0 +1,89 @@ +package drools + +import static java.lang.String.format; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.anyMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.exactMatch; + +import java.util.List; +import java.util.LinkedList; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.Collection; +import java.util.stream.Stream; +import java.util.Optional; + +import com.iqser.red.service.redaction.v1.server.model.document.*; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.*; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule +import com.iqser.red.service.redaction.v1.server.model.document.nodes.*; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Section; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Headline; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIdentifier; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Footer; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Header; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.*; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.ConcatenatedTextBlock; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryModel; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; +import com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility; + +import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; +import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine; +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.IdRemoval; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualLegalBasisChange; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus; +global Document document +global EntityCreationService entityCreationService +global ManualChangesApplicationService manualChangesApplicationService +global Dictionary dictionary + +/** +This file contains all the rules that are in the templates. +The Imports from this file are all that are possible and will be imported for all entity files. +Since customers may edit their rules we need to ensure they can't change the imports to prevent malicious code execution! +*/ + +//------------------------------------ queries ------------------------------------ + +query "getFileAttributes" + $fileAttribute: FileAttribute() + end + +//------------------------------------ Local dictionary search rules ------------------------------------ + +// Rule unit: LocalDictionarySearch.0 +rule "LDS.0.0: run local dictionary search" + agenda-group "LOCAL_DICTIONARY_ADDS" + salience -999 + when + $dictionaryModel: DictionaryModel(!localEntriesWithMatchedRules.isEmpty()) from dictionary.getDictionaryModels() + then + entityCreationService.bySearchImplementation($dictionaryModel.getLocalSearch(), $dictionaryModel.getType(), EntityType.RECOMMENDATION, document) + .forEach(entity -> { + Collection matchedRules = $dictionaryModel.getLocalEntriesWithMatchedRules().get(entity.getValue()); + entity.addMatchedRules(matchedRules); + }); + end + +// Everything above this comment will be prepended to any entity rule file before execution. diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AbstractRedactionIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AbstractRedactionIntegrationTest.java index 787d6481..520914d5 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AbstractRedactionIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/AbstractRedactionIntegrationTest.java @@ -11,9 +11,9 @@ import com.iqser.red.service.redaction.v1.server.client.DictionaryClient; import com.iqser.red.service.redaction.v1.server.client.LegalBasisClient; import com.iqser.red.service.redaction.v1.server.client.RulesClient; import com.iqser.red.service.redaction.v1.server.controller.RedactionController; -import com.iqser.red.service.redaction.v1.server.redaction.service.AnalyzeService; -import com.iqser.red.service.redaction.v1.server.redaction.utils.ResourceLoader; -import com.iqser.red.service.redaction.v1.server.redaction.utils.TextNormalizationUtilities; +import com.iqser.red.service.redaction.v1.server.service.AnalyzeService; +import com.iqser.red.service.redaction.v1.server.utils.ResourceLoader; +import com.iqser.red.service.redaction.v1.server.utils.TextNormalizationUtilities; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; import com.iqser.red.service.redaction.v1.server.utils.LayoutParsingRequestProvider; import com.iqser.red.storage.commons.service.StorageService; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/DictionaryServiceTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/DictionaryServiceTest.java index f2eac69f..7c0c5abe 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/DictionaryServiceTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/DictionaryServiceTest.java @@ -33,8 +33,8 @@ import com.iqser.red.service.dictionarymerge.commons.DictionaryEntryModel; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.Colors; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; import com.iqser.red.service.redaction.v1.server.client.DictionaryClient; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryVersion; -import com.iqser.red.service.redaction.v1.server.redaction.service.DictionaryService; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryVersion; +import com.iqser.red.service.redaction.v1.server.service.DictionaryService; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantsClient; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java index 034969be..413a240c 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RedactionIntegrationTest.java @@ -61,9 +61,9 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlo import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry; import com.iqser.red.service.redaction.v1.server.annotate.AnnotateRequest; import com.iqser.red.service.redaction.v1.server.annotate.AnnotateResponse; -import com.iqser.red.service.redaction.v1.server.document.data.mapper.DocumentGraphMapper; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Section; +import com.iqser.red.service.redaction.v1.server.service.graph.DocumentGraphMapper; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Section; import com.iqser.red.service.redaction.v1.server.redaction.utils.OsUtils; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; import com.iqser.red.storage.commons.StorageAutoConfiguration; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RulesTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RulesTest.java index 2ed07326..04edd761 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RulesTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/RulesTest.java @@ -14,9 +14,9 @@ import com.iqser.red.service.redaction.v1.server.client.DictionaryClient; import com.iqser.red.service.redaction.v1.server.client.LegalBasisClient; import com.iqser.red.service.redaction.v1.server.client.RulesClient; import com.iqser.red.service.redaction.v1.server.controller.RedactionController; -import com.iqser.red.service.redaction.v1.server.redaction.service.AnalyzeService; -import com.iqser.red.service.redaction.v1.server.redaction.utils.ResourceLoader; -import com.iqser.red.service.redaction.v1.server.redaction.utils.TextNormalizationUtilities; +import com.iqser.red.service.redaction.v1.server.service.AnalyzeService; +import com.iqser.red.service.redaction.v1.server.utils.ResourceLoader; +import com.iqser.red.service.redaction.v1.server.utils.TextNormalizationUtilities; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; import com.iqser.red.service.redaction.v1.server.utils.LayoutParsingRequestProvider; import com.iqser.red.storage.commons.StorageAutoConfiguration; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/annotate/AnnotationService.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/annotate/AnnotationService.java index 54dee8cc..8523bb52 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/annotate/AnnotationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/annotate/AnnotationService.java @@ -36,9 +36,9 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlo import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.section.CellRectangle; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.section.SectionGrid; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.section.SectionRectangle; -import com.iqser.red.service.redaction.v1.server.document.utils.RectangleTransformations; -import com.iqser.red.service.redaction.v1.server.exception.RedactionException; -import com.iqser.red.service.redaction.v1.server.redaction.service.DictionaryService; +import com.iqser.red.service.redaction.v1.server.utils.RectangleTransformations; +import com.iqser.red.service.redaction.v1.server.utils.exception.RedactionException; +import com.iqser.red.service.redaction.v1.server.service.DictionaryService; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; import lombok.RequiredArgsConstructor; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/entity/TextEntityTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/entity/TextEntityTest.java index f594a1a3..c6e30b9a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/entity/TextEntityTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/entity/TextEntityTest.java @@ -5,9 +5,9 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; public class TextEntityTest { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/BuildDocumentIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/BuildDocumentIntegrationTest.java index 07dea061..6e0ab8f7 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/BuildDocumentIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/BuildDocumentIntegrationTest.java @@ -16,8 +16,8 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequ import com.iqser.red.service.redaction.v1.server.AbstractRedactionIntegrationTest; import com.iqser.red.service.redaction.v1.server.Application; import com.iqser.red.service.redaction.v1.server.FileSystemBackedStorageService; -import com.iqser.red.service.redaction.v1.server.document.data.mapper.DocumentGraphMapper; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; +import com.iqser.red.service.redaction.v1.server.service.graph.DocumentGraphMapper; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; import com.iqser.red.storage.commons.StorageAutoConfiguration; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentEntityInsertionIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentEntityInsertionIntegrationTest.java index d35cc3c8..6b4feccc 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentEntityInsertionIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentEntityInsertionIntegrationTest.java @@ -16,19 +16,21 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.beans.factory.annotation.Autowired; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Headline; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.NodeType; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Paragraph; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.TableCell; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.document.services.EntityEnrichmentService; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Headline; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.TableCell; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityEnrichmentService; public class DocumentEntityInsertionIntegrationTest extends BuildDocumentIntegrationTest { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentPerformanceIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentPerformanceIntegrationTest.java index 7dcf7398..4d70293a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentPerformanceIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentPerformanceIntegrationTest.java @@ -1,6 +1,6 @@ package com.iqser.red.service.redaction.v1.server.document.graph; -import static com.iqser.red.service.redaction.v1.server.redaction.utils.SeparatorUtils.boundaryIsSurroundedBySeparators; +import static com.iqser.red.service.redaction.v1.server.utils.SeparatorUtils.boundaryIsSurroundedBySeparators; import static org.mockito.Mockito.when; import java.awt.Color; @@ -32,22 +32,22 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribu import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions; import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Section; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.document.services.EntityEnrichmentService; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Section; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityEnrichmentService; import com.iqser.red.service.redaction.v1.server.utils.PdfVisualisationUtility; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.Dictionary; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryModel; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.SearchImplementation; -import com.iqser.red.service.redaction.v1.server.redaction.service.DictionaryService; -import com.iqser.red.service.redaction.v1.server.redaction.service.DroolsExecutionService; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryModel; +import com.iqser.red.service.redaction.v1.server.model.dictionary.SearchImplementation; +import com.iqser.red.service.redaction.v1.server.service.DictionaryService; +import com.iqser.red.service.redaction.v1.server.service.drools.EntityDroolsExecutionService; import com.knecon.fforesight.tenantcommons.TenantContext; import lombok.SneakyThrows; @@ -65,7 +65,7 @@ public class DocumentPerformanceIntegrationTest extends BuildDocumentIntegration private EntityCreationService entityCreationService; @Autowired - private DroolsExecutionService droolsExecutionService; + private EntityDroolsExecutionService entityDroolsExecutionService; @Qualifier("kieContainer") @Autowired @@ -151,7 +151,7 @@ public class DocumentPerformanceIntegrationTest extends BuildDocumentIntegration System.out.printf("Inserting entities into the graph took %d ms\n", System.currentTimeMillis() - graphInsertionStart); long droolsStart = System.currentTimeMillis(); - List fileAttributes = droolsExecutionService.executeRules(kieContainer, + List fileAttributes = entityDroolsExecutionService.executeRules(kieContainer, document, dictionary, Collections.emptyList(), diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentTableIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentTableIntegrationTest.java index 675b92e3..cded6d0f 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentTableIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentTableIntegrationTest.java @@ -4,10 +4,10 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.TableCell; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.TableCell; public class DocumentTableIntegrationTest extends BuildDocumentIntegrationTest { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentVisualizationIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentVisualizationIntegrationTest.java index 84e870cb..e6b17732 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentVisualizationIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/DocumentVisualizationIntegrationTest.java @@ -9,8 +9,8 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.springframework.core.io.ClassPathResource; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import com.iqser.red.service.redaction.v1.server.utils.PdfVisualisationUtility; import lombok.SneakyThrows; 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 60c9d715..edb684bb 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 @@ -25,11 +25,11 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSON import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; 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.server.document.data.mapper.DocumentGraphMapper; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.CustomEntityCreationAdapter; -import com.iqser.red.service.redaction.v1.server.redaction.model.ManualEntity; -import com.iqser.red.service.redaction.v1.server.redaction.service.RedactionLogCreatorService; +import com.iqser.red.service.redaction.v1.server.service.graph.DocumentGraphMapper; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.service.graph.ManualEntityCreationService; +import com.iqser.red.service.redaction.v1.server.model.ManualEntity; +import com.iqser.red.service.redaction.v1.server.service.EntityLogCreatorService; import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType; import com.knecon.fforesight.tenantcommons.TenantContext; @@ -40,9 +40,9 @@ public class MigrationPocTest extends BuildDocumentIntegrationTest { private static final String RULES = loadFromClassPath("drools/rules.drl"); @Autowired - private CustomEntityCreationAdapter redactionLogAdapter; + private ManualEntityCreationService redactionLogAdapter; @Autowired - private RedactionLogCreatorService redactionLogCreatorService; + private EntityLogCreatorService entityLogCreatorService; @BeforeEach @@ -91,7 +91,7 @@ public class MigrationPocTest extends BuildDocumentIntegrationTest { Document document = DocumentGraphMapper.toDocumentGraph(redactionStorageService.getDocumentData(request.getDossierId(), request.getFileId())); List notFoundManualRedactionEntries = redactionLogAdapter.toRedactionEntity(originalRedactionLog, document); - var migratedRedactionLogEntries = redactionLogCreatorService.createRedactionLog(document, TEST_DOSSIER_TEMPLATE_ID, notFoundManualRedactionEntries, Collections.emptyMap()); + var migratedRedactionLogEntries = entityLogCreatorService.createRedactionLog(document, TEST_DOSSIER_TEMPLATE_ID, notFoundManualRedactionEntries, Collections.emptyMap()); Map migratedIds = migratedRedactionLogEntries.stream().collect(toMap(RedactionLogEntry::getId, Functions.identity())); Map newIds = newRedactionLog.getRedactionLogEntry().stream().collect(toMap(RedactionLogEntry::getId, Functions.identity())); diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/SearchImplementationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/SearchImplementationTest.java index 1d9499d0..b1a026d1 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/SearchImplementationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/SearchImplementationTest.java @@ -7,12 +7,12 @@ import java.util.List; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.document.services.EntityEnrichmentService; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.SearchImplementation; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityEnrichmentService; +import com.iqser.red.service.redaction.v1.server.model.dictionary.SearchImplementation; public class SearchImplementationTest extends BuildDocumentIntegrationTest { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/TextRangeTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/TextRangeTest.java index 9c464d43..32d678d5 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/TextRangeTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/document/graph/TextRangeTest.java @@ -11,6 +11,8 @@ import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; + class TextRangeTest { TextRange startTextRange; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/drools/files/management/services/DroolsSyntaxValidationServiceTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/drools/files/management/services/DroolsSyntaxValidationServiceTest.java new file mode 100644 index 00000000..837e3404 --- /dev/null +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/drools/files/management/services/DroolsSyntaxValidationServiceTest.java @@ -0,0 +1,155 @@ +package com.iqser.red.service.redaction.v1.server.drools.files.management.services; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.MockitoAnnotations; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.core.io.ClassPathResource; + +import com.iqser.red.service.redaction.v1.model.DroolsSyntaxValidation; +import com.iqser.red.service.redaction.v1.server.client.RulesClient; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityEnrichmentService; +import com.iqser.red.service.redaction.v1.server.service.drools.DroolsSyntaxValidationService; +import com.iqser.red.service.redaction.v1.server.service.drools.KieContainerCreationService; + +import lombok.SneakyThrows; + +class DroolsSyntaxValidationServiceTest { + + @MockBean + RulesClient rulesClient; + @MockBean + EntityEnrichmentService entityEnrichmentService; + + + @BeforeEach + public void setupMocks() { + + MockitoAnnotations.openMocks(this); + } + + + @Test + @SneakyThrows + void testRules() { + + DroolsSyntaxValidationService droolsSyntaxValidationService = new DroolsSyntaxValidationService(new KieContainerCreationService(rulesClient)); + var rulesFile = new ClassPathResource("drools/rules.drl"); + + String rulesString = new String(rulesFile.getInputStream().readAllBytes()); + + DroolsSyntaxValidation droolsSyntaxValidation = droolsSyntaxValidationService.testRules(rulesString); + droolsSyntaxValidation.getDroolsSyntaxErrorMessages().forEach(System.out::println); + assertTrue(droolsSyntaxValidation.isCompiled()); + } + + + @Test + @SneakyThrows + void testAllRules() { + + DroolsSyntaxValidationService droolsSyntaxValidationService = new DroolsSyntaxValidationService(new KieContainerCreationService(rulesClient)); + var rulesFile = new ClassPathResource("drools/all_rules.drl"); + + String rulesString = new String(rulesFile.getInputStream().readAllBytes()); + + DroolsSyntaxValidation droolsSyntaxValidation = droolsSyntaxValidationService.testRules(rulesString); + droolsSyntaxValidation.getDroolsSyntaxErrorMessages().forEach(System.out::println); + assertTrue(droolsSyntaxValidation.isCompiled()); + } + + + @Test + @SneakyThrows + void testAcceptanceRules() { + + DroolsSyntaxValidationService droolsSyntaxValidationService = new DroolsSyntaxValidationService(new KieContainerCreationService(rulesClient)); + var rulesFile = new ClassPathResource("drools/acceptance_rules.drl"); + + String rulesString = new String(rulesFile.getInputStream().readAllBytes()); + + DroolsSyntaxValidation droolsSyntaxValidation = droolsSyntaxValidationService.testRules(rulesString); + droolsSyntaxValidation.getDroolsSyntaxErrorMessages().forEach(System.out::println); + assertTrue(droolsSyntaxValidation.isCompiled()); + } + + + @Test + @SneakyThrows + void testManualRedactionRules() { + + DroolsSyntaxValidationService droolsSyntaxValidationService = new DroolsSyntaxValidationService(new KieContainerCreationService(rulesClient)); + var rulesFile = new ClassPathResource("drools/manual_redaction_rules.drl"); + + String rulesString = new String(rulesFile.getInputStream().readAllBytes()); + + DroolsSyntaxValidation droolsSyntaxValidation = droolsSyntaxValidationService.testRules(rulesString); + droolsSyntaxValidation.getDroolsSyntaxErrorMessages().forEach(System.out::println); + assertTrue(droolsSyntaxValidation.isCompiled()); + } + + + @Test + @SneakyThrows + void testRulesV2() { + + DroolsSyntaxValidationService droolsSyntaxValidationService = new DroolsSyntaxValidationService(new KieContainerCreationService(rulesClient)); + var rulesFile = new ClassPathResource("drools/rules_v2.drl"); + + String rulesString = new String(rulesFile.getInputStream().readAllBytes()); + + DroolsSyntaxValidation droolsSyntaxValidation = droolsSyntaxValidationService.testRules(rulesString); + droolsSyntaxValidation.getDroolsSyntaxErrorMessages().forEach(System.out::println); + assertTrue(droolsSyntaxValidation.isCompiled()); + } + + + @Test + @SneakyThrows + void testDocumineRules() { + + DroolsSyntaxValidationService droolsSyntaxValidationService = new DroolsSyntaxValidationService(new KieContainerCreationService(rulesClient)); + var rulesFile = new ClassPathResource("drools/documine_flora.drl"); + + String rulesString = new String(rulesFile.getInputStream().readAllBytes()); + + DroolsSyntaxValidation droolsSyntaxValidation = droolsSyntaxValidationService.testRules(rulesString); + droolsSyntaxValidation.getDroolsSyntaxErrorMessages().forEach(System.out::println); + assertTrue(droolsSyntaxValidation.isCompiled()); + } + + + @Test + @SneakyThrows + void testCorruptedRules() { + + DroolsSyntaxValidationService droolsSyntaxValidationService = new DroolsSyntaxValidationService(new KieContainerCreationService(rulesClient)); + var rulesFile = new ClassPathResource("drools/rules.drl"); + + String rulesString = new String(rulesFile.getInputStream().readAllBytes()); + String corruptedRules = rulesString.replaceAll(";", ""); + + DroolsSyntaxValidation droolsSyntaxValidation = droolsSyntaxValidationService.testRules(corruptedRules); + assertFalse(droolsSyntaxValidation.isCompiled()); + } + + + @Test + @SneakyThrows + void testCorruptedImports() { + + DroolsSyntaxValidationService droolsSyntaxValidationService = new DroolsSyntaxValidationService(new KieContainerCreationService(rulesClient)); + var rulesFile = new ClassPathResource("drools/rules.drl"); + + String rulesString = new String(rulesFile.getInputStream().readAllBytes()); + String corruptedRules = rulesString.replaceAll("import com.iqser.red.service.redaction.v1.server.model.graph.nodes.ImageType;", + ""); + + DroolsSyntaxValidation droolsSyntaxValidation = droolsSyntaxValidationService.testRules(corruptedRules); + assertFalse(droolsSyntaxValidation.isCompiled()); + } + +} \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualChangesEnd2EndTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualChangesEnd2EndTest.java index 2977e332..41cf03db 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualChangesEnd2EndTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualChangesEnd2EndTest.java @@ -53,12 +53,12 @@ import com.iqser.red.service.redaction.v1.server.Application; import com.iqser.red.service.redaction.v1.server.FileSystemBackedStorageService; import com.iqser.red.service.redaction.v1.server.annotate.AnnotateRequest; import com.iqser.red.service.redaction.v1.server.annotate.AnnotateResponse; -import com.iqser.red.service.redaction.v1.server.document.data.mapper.DocumentGraphMapper; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.document.services.EntityEnrichmentService; +import com.iqser.red.service.redaction.v1.server.service.graph.DocumentGraphMapper; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityEnrichmentService; import com.iqser.red.service.redaction.v1.server.redaction.utils.OsUtils; import com.iqser.red.storage.commons.StorageAutoConfiguration; import com.iqser.red.storage.commons.service.StorageService; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualChangesIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualChangesIntegrationTest.java index 6b6f04c9..af7d3cdb 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualChangesIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualChangesIntegrationTest.java @@ -34,15 +34,15 @@ 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.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction; import com.iqser.red.service.redaction.v1.server.document.graph.BuildDocumentIntegrationTest; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.PositionOnPage; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Paragraph; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.document.services.EntityEnrichmentService; -import com.iqser.red.service.redaction.v1.server.document.services.ManualChangesApplicationService; -import com.iqser.red.service.redaction.v1.server.exception.NotFoundException; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.entity.PositionOnPage; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityEnrichmentService; +import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; +import com.iqser.red.service.redaction.v1.server.utils.exception.NotFoundException; @Import(ManualChangesIntegrationTest.TestConfiguration.class) public class ManualChangesIntegrationTest extends BuildDocumentIntegrationTest { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualChangesUnitTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualChangesUnitTest.java index b5f8e0c8..ba3272f4 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualChangesUnitTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualChangesUnitTest.java @@ -17,11 +17,11 @@ 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.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualLegalBasisChange; import com.iqser.red.service.redaction.v1.server.document.graph.BuildDocumentIntegrationTest; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.document.services.EntityEnrichmentService; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityEnrichmentService; public class ManualChangesUnitTest extends BuildDocumentIntegrationTest { diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/CustomEntityCreationAdapterTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualEntityCreationServiceTest.java similarity index 79% rename from redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/CustomEntityCreationAdapterTest.java rename to redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualEntityCreationServiceTest.java index ce22183a..e44a2ef6 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/CustomEntityCreationAdapterTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/ManualEntityCreationServiceTest.java @@ -21,28 +21,28 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Point; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry; import com.iqser.red.service.redaction.v1.server.document.graph.BuildDocumentIntegrationTest; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.document.services.EntityEnrichmentService; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.CustomEntityCreationAdapter; -import com.iqser.red.service.redaction.v1.server.redaction.model.ManualEntity; -import com.iqser.red.service.redaction.v1.server.redaction.service.DictionaryService; -import com.iqser.red.service.redaction.v1.server.redaction.service.RedactionLogCreatorService; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityEnrichmentService; +import com.iqser.red.service.redaction.v1.server.service.graph.ManualEntityCreationService; +import com.iqser.red.service.redaction.v1.server.model.ManualEntity; +import com.iqser.red.service.redaction.v1.server.service.DictionaryService; +import com.iqser.red.service.redaction.v1.server.service.EntityLogCreatorService; import lombok.SneakyThrows; -public class CustomEntityCreationAdapterTest extends BuildDocumentIntegrationTest { +public class ManualEntityCreationServiceTest extends BuildDocumentIntegrationTest { @Autowired private EntityEnrichmentService entityEnrichmentService; @Autowired - private CustomEntityCreationAdapter customEntityCreationAdapter; + private ManualEntityCreationService manualEntityCreationService; @Autowired - private RedactionLogCreatorService redactionLogCreatorService; + private EntityLogCreatorService entityLogCreatorService; @MockBean private DictionaryService dictionaryService; @@ -88,7 +88,7 @@ public class CustomEntityCreationAdapterTest extends BuildDocumentIntegrationTes tempEntity.removeFromGraph(); assertTrue(document.getEntities().isEmpty()); - List notFoundManualEntities = customEntityCreationAdapter.createRedactionEntitiesIfFoundAndReturnNotFoundEntries(Set.of(manualRedactionEntry), document); + List notFoundManualEntities = manualEntityCreationService.createRedactionEntitiesIfFoundAndReturnNotFoundEntries(Set.of(manualRedactionEntry), document); assertTrue(notFoundManualEntities.isEmpty()); assertEquals(1, document.getEntities().size()); } @@ -116,11 +116,11 @@ public class CustomEntityCreationAdapterTest extends BuildDocumentIntegrationTes assertTrue(document.getEntities().isEmpty()); - List notFoundManualEntities = customEntityCreationAdapter.createRedactionEntitiesIfFoundAndReturnNotFoundEntries(Set.of(manualRedactionEntry), document); + List notFoundManualEntities = manualEntityCreationService.createRedactionEntitiesIfFoundAndReturnNotFoundEntries(Set.of(manualRedactionEntry), document); assertEquals(1, notFoundManualEntities.size()); assertTrue(document.getEntities().isEmpty()); - List redactionLogEntries = redactionLogCreatorService.createRedactionLog(document, + List redactionLogEntries = entityLogCreatorService.createRedactionLog(document, TEST_DOSSIER_TEMPLATE_ID, notFoundManualEntities, Collections.emptyMap()); diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/realdata/LiveDataIntegrationTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/realdata/LiveDataIntegrationTest.java index 2b29489a..37eefaf6 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/realdata/LiveDataIntegrationTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/realdata/LiveDataIntegrationTest.java @@ -48,8 +48,8 @@ import com.iqser.red.service.redaction.v1.server.client.FileStatusProcessingUpda import com.iqser.red.service.redaction.v1.server.client.LegalBasisClient; import com.iqser.red.service.redaction.v1.server.client.RulesClient; import com.iqser.red.service.redaction.v1.server.queue.RedactionMessageReceiver; -import com.iqser.red.service.redaction.v1.server.redaction.service.DictionaryService; -import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings; +import com.iqser.red.service.redaction.v1.server.service.DictionaryService; +import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; import com.iqser.red.storage.commons.StorageAutoConfiguration; import com.iqser.red.storage.commons.service.StorageService; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/NerEntitiesAdapterTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/NerEntitiesAdapterTest.java index 95ca0e3b..6982fb70 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/NerEntitiesAdapterTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/adapter/NerEntitiesAdapterTest.java @@ -20,15 +20,17 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.ClassPathResource; import com.iqser.red.commons.jackson.ObjectMapperFactory; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.service.graph.NerEntitiesAdapter; import com.iqser.red.service.redaction.v1.server.client.model.NerEntitiesModel; import com.iqser.red.service.redaction.v1.server.document.graph.BuildDocumentIntegrationTest; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.PositionOnPage; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.document.services.EntityEnrichmentService; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.model.document.entity.PositionOnPage; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityEnrichmentService; import com.iqser.red.service.redaction.v1.server.utils.PdfVisualisationUtility; import lombok.SneakyThrows; diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/utils/TextNormalizationUtilitiesTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/utils/TextNormalizationUtilitiesTest.java index 526c9884..a17350bb 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/utils/TextNormalizationUtilitiesTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/redaction/utils/TextNormalizationUtilitiesTest.java @@ -3,6 +3,8 @@ package com.iqser.red.service.redaction.v1.server.redaction.utils; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; +import com.iqser.red.service.redaction.v1.server.utils.TextNormalizationUtilities; + public class TextNormalizationUtilitiesTest { @Test diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/utils/PdfVisualisationUtility.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/utils/PdfVisualisationUtility.java index 45f4686f..85771fa3 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/utils/PdfVisualisationUtility.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/utils/PdfVisualisationUtility.java @@ -13,12 +13,12 @@ import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.pdmodel.font.Standard14Fonts; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Page; -import com.iqser.red.service.redaction.v1.server.document.graph.DocumentTree; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.NodeType; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.AtomicTextBlock; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.AccessLevel; import lombok.Builder; 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 34d47b20..5be6198b 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 @@ -1,8 +1,8 @@ package drools import static java.lang.String.format; -import static com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility.anyMatch; -import static com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility.exactMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.anyMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.exactMatch; import java.util.List; import java.util.LinkedList; @@ -12,41 +12,48 @@ import java.util.Collection; import java.util.stream.Stream; import java.util.Optional; -import com.iqser.red.service.redaction.v1.server.document.graph.*; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.*; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Section; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Paragraph; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Image; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.*; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.*; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.*; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.*; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule +import com.iqser.red.service.redaction.v1.server.model.document.nodes.*; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Section; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Headline; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIdentifier; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Footer; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Header; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.*; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.ConcatenatedTextBlock; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryModel; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; +import com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility; + import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.Dictionary; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryModel; 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.IdRemoval; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualLegalBasisChange; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus; -import com.iqser.red.service.redaction.v1.server.document.services.ManualChangesApplicationService; -import com.iqser.red.service.redaction.v1.server.client.model.EntityRecognitionEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType -import com.iqser.red.service.redaction.v1.server.document.graph.entity.MatchedRule -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; + global Document document global EntityCreationService entityCreationService 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 0de1d713..f088c04d 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 @@ -1,8 +1,8 @@ package drools import static java.lang.String.format; -import static com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility.anyMatch; -import static com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility.exactMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.anyMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.exactMatch; import java.util.List; import java.util.LinkedList; @@ -12,41 +12,48 @@ import java.util.Collection; import java.util.stream.Stream; import java.util.Optional; -import com.iqser.red.service.redaction.v1.server.document.graph.*; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.*; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Section; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Paragraph; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Image; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.*; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.*; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.*; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.*; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule +import com.iqser.red.service.redaction.v1.server.model.document.nodes.*; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Section; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Headline; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIdentifier; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Footer; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Header; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.*; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.ConcatenatedTextBlock; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryModel; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; +import com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility; + import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.Dictionary; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryModel; 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.IdRemoval; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualLegalBasisChange; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus; -import com.iqser.red.service.redaction.v1.server.document.services.ManualChangesApplicationService; -import com.iqser.red.service.redaction.v1.server.client.model.EntityRecognitionEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType -import com.iqser.red.service.redaction.v1.server.document.graph.entity.MatchedRule -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; + global Document document global EntityCreationService entityCreationService @@ -1035,7 +1042,7 @@ rule "ETC.2.1: Redact signatures (vertebrate study)" FileAttribute(label == "Vertebrate Study", value == "Yes") $signature: Image(imageType == ImageType.SIGNATURE) then - $signature.apply("ETC.2.0", "Signature Found", "Article 39(e)(2) of Regulation (EC) No 178/2002"); + $signature.apply("ETC.2.1", "Signature Found", "Article 39(e)(2) of Regulation (EC) No 178/2002"); end diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/documine_flora.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/documine_flora.drl index 16a5dab3..92a210bc 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/documine_flora.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/documine_flora.drl @@ -1,3 +1,9 @@ +package drools + +import static java.lang.String.format; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.anyMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.exactMatch; + import java.util.List; import java.util.LinkedList; import java.util.Set; @@ -6,41 +12,48 @@ import java.util.Collection; import java.util.stream.Stream; import java.util.Optional; -import com.iqser.red.service.redaction.v1.server.document.graph.*; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.*; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Section; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Paragraph; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Image; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.*; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.*; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.*; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.*; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule +import com.iqser.red.service.redaction.v1.server.model.document.nodes.*; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Section; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Headline; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIdentifier; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Footer; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Header; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.*; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.ConcatenatedTextBlock; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryModel; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; +import com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility; + import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.Dictionary; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryModel; 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.IdRemoval; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualLegalBasisChange; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus; -import com.iqser.red.service.redaction.v1.server.document.services.ManualChangesApplicationService; -import com.iqser.red.service.redaction.v1.server.client.model.EntityRecognitionEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType -import com.iqser.red.service.redaction.v1.server.document.graph.entity.MatchedRule -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; + global Document document global EntityCreationService entityCreationService @@ -57,7 +70,7 @@ query "getFileAttributes" -rule "H.0.0 retract table of contents page" +rule "H.0.0: retract table of contents page" when $page: Page(getMainBodyTextBlock().getSearchText().contains("........") || (getMainBodyTextBlock().getSearchText().contains("APPENDICES") && getMainBodyTextBlock().getSearchText().contains("TABLES"))) $node: SemanticNode(onPage($page.getNumber()), !onPage($page.getNumber() -1), getType() != NodeType.IMAGE) @@ -66,7 +79,7 @@ rule "H.0.0 retract table of contents page" end -rule "H.0.0: Ignore Table of Contents" +rule "H.0.1: Ignore Table of Contents" salience 10 when $tocHeadline: Headline(containsString("CONTENTS")) @@ -86,12 +99,13 @@ rule "H.0.0: Ignore Table of Contents" rule "H.0.0: Show headlines" when $headline: Headline() + $headline: Headline() then entityCreationService.bySemanticNode($headline, "headline", EntityType.RECOMMENDATION); end */ -rule "H.0.0: Study Type File Attribute" +rule "H.0.2: Study Type File Attribute" when not FileAttribute(label == "OECD Number", valueEqualsAnyOf("402","403","404","405","408","414","425","429","436","438","439","471","487")) $section: Section( @@ -252,22 +266,22 @@ rule "DOC.3.2: Experimental Completion Date" then entityCreationService.byRegex("STUDY COMPLETED ON (.{5,20}\\d{4})", "experimental_end_date", EntityType.ENTITY, 1, $section).forEach(entity -> { - entity.apply("DOC.3.1", "Experimental end date found", "n-a"); + entity.apply("DOC.3.2", "Experimental end date found", "n-a"); }); entityCreationService.byRegex("STUDY COMPLETION DATE (.{5,20}\\d{4})", "experimental_end_date", EntityType.ENTITY, 1, $section).forEach(entity -> { - entity.apply("DOC.3.1", "Experimental end date found", "n-a"); + entity.apply("DOC.3.2", "Experimental end date found", "n-a"); }); entityCreationService.byRegex("Report completion date (.{5,20}\\d{4})", "experimental_end_date", EntityType.ENTITY, 1, $section).forEach(entity -> { - entity.apply("DOC.3.1", "Experimental end date found", "n-a"); + entity.apply("DOC.3.2", "Experimental end date found", "n-a"); }); entityCreationService.byRegex("Date of Report (.{5,20}\\d{4})", "experimental_end_date", EntityType.ENTITY, 1, $section).forEach(entity -> { - entity.apply("DOC.3.1", "Experimental end date found", "n-a"); + entity.apply("DOC.3.2", "Experimental end date found", "n-a"); }); entityCreationService.byRegex("AMENDMENT COMPLETION DATE (.{5,20}\\d{4})", "experimental_end_date", EntityType.ENTITY, 1, $section).forEach(entity -> { - entity.apply("DOC.3.1", "Experimental end date found", "n-a"); + entity.apply("DOC.3.2", "Experimental end date found", "n-a"); }); entityCreationService.byRegex("AMENDMENT COMPLETED ON (.{5,20}\\d{4})", "experimental_end_date", EntityType.ENTITY, 1, $section).forEach(entity -> { - entity.apply("DOC.3.1", "Experimental end date found", "n-a"); + entity.apply("DOC.3.2", "Experimental end date found", "n-a"); }); end @@ -365,12 +379,12 @@ rule "DOC.6.2: Authors" $page: Page(getNumber() == 1, getMainBodyTextBlock().getSearchText() (contains "AUTHOR(S)" || contains "AUTHORS" || contains "Author"), getMainBodyTextBlock().getSearchText() (contains "STUDY COMPLETED ON" || contains "STUDY COMPLETION DATE" || contains "DATE OF INTERIM REPORT" || contains "Report completion date" || contains "Date of Report" || contains "AMENDMENT COMPLETION DATE")) then - List startBoundaries = new LinkedList<>(); + List startBoundaries = new LinkedList<>(); startBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("AUTHOR(S)", $page.getMainBodyTextBlock())); startBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("AUTHORS", $page.getMainBodyTextBlock())); startBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("Author", $page.getMainBodyTextBlock())); - List stopBoundaries = new LinkedList<>(); + List stopBoundaries = new LinkedList<>(); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("STUDY COMPLETED ON", $page.getMainBodyTextBlock())); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("STUDY COMPLETION DATE", $page.getMainBodyTextBlock())); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("DATE OF INTERIM REPORT", $page.getMainBodyTextBlock())); @@ -390,11 +404,11 @@ rule "DOC.6.6: laboratory_project_identification" when $page: Page(getNumber() == 1, getMainBodyTextBlock().getSearchText() (contains "LABORATORY PROJECT IDENTIFICATION" || contains "TEST FACILITY PROJECT IDENTIFICATION" || contains "Laboratory Project Identification")) then - List startBoundaries = new LinkedList<>(); + List startBoundaries = new LinkedList<>(); startBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("LABORATORY PROJECT IDENTIFICATION", $page.getMainBodyTextBlock())); startBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("TEST FACILITY PROJECT IDENTIFICATION", $page.getMainBodyTextBlock())); - List stopBoundaries = new LinkedList<>(); + List stopBoundaries = new LinkedList<>(); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("SPONSOR", $page.getMainBodyTextBlock())); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("VOLUME", $page.getMainBodyTextBlock())); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("This", $page.getMainBodyTextBlock())); @@ -411,12 +425,12 @@ rule "DOC.7.2: study title by document structure" $page: Page(getNumber() == 1, getMainBodyTextBlock().getSearchText() (contains "STUDY TITLE" || contains "Study Title" || contains "STUDYTITLE" || contains "Report (Final)")) then - List startBoundaries = new LinkedList<>(); + List startBoundaries = new LinkedList<>(); startBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("STUDY TITLE", $page.getMainBodyTextBlock())); startBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("STUDYTITLE", $page.getMainBodyTextBlock())); startBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("Report (Final)", $page.getMainBodyTextBlock())); - List stopBoundaries = new LinkedList<>(); + List stopBoundaries = new LinkedList<>(); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("TEST GUIDELINES", $page.getMainBodyTextBlock())); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("TEST GUIDELINE(S)", $page.getMainBodyTextBlock())); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("Guidelines", $page.getMainBodyTextBlock())); @@ -431,30 +445,30 @@ rule "DOC.7.2: study title by document structure" -rule "DOC.8.2: Performing Laboratory" +rule "DOC.8.1: Performing Laboratory" when $page: Page(getNumber() == 1, getMainBodyTextBlock().getSearchText() (contains "PERFORMING LABORATORY" || contains "TEST FACILITIES" || contains "TEST FACILITY" || contains "Test Facility"), getMainBodyTextBlock().getSearchText() (contains "LABORATORY PROJECT IDENTIFICATION" || contains "TEST FACILITY PROJECT IDENTIFICATION" || contains "Sponsor")) then - List startBoundaries = new LinkedList<>(); + List startBoundaries = new LinkedList<>(); startBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("PERFORMING LABORATORY", $page.getMainBodyTextBlock())); startBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("TEST FACILITIES", $page.getMainBodyTextBlock())); startBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("TEST FACILITY", $page.getMainBodyTextBlock())); - List stopBoundaries = new LinkedList<>(); + List stopBoundaries = new LinkedList<>(); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("LABORATORY PROJECT IDENTIFICATION", $page.getMainBodyTextBlock())); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("TEST FACILITY PROJECT IDENTIFICATION", $page.getMainBodyTextBlock())); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("Sponsor", $page.getMainBodyTextBlock())); stopBoundaries.addAll(RedactionSearchUtility.findBoundariesByStringIgnoreCase("PROJECT IDENTIFICATION", $page.getMainBodyTextBlock())); entityCreationService.betweenBoundaries(startBoundaries, stopBoundaries, "laboratory_name", EntityType.ENTITY, document).forEach(entity -> { - entity.apply("DOC.8.2", "Performing Laboratory found", "n-a"); + entity.apply("DOC.8.1", "Performing Laboratory found", "n-a"); }); end -rule "DOC.98.2: Summary Methods" +rule "DOC.8.2: Summary Methods" when $headline: Headline(containsString("1.1. METHODS")) then @@ -469,7 +483,7 @@ rule "DOC.98.2: Summary Methods" .forEach(entity -> entity.apply("DOC.8.2", "Summary Methods found", "n-a")); end -rule "DOC.98.3: Summary Observations Laboratory" +rule "DOC.8.3: Summary Observations Laboratory" when $headline: Headline(containsString("1.2. OBSERVATIONS")) then @@ -485,7 +499,7 @@ rule "DOC.98.3: Summary Observations Laboratory" end -rule "DOC.98.5: Summary Results" +rule "DOC.8.5: Summary Results" when Headline((containsStringIgnoreCase("1.3. RESULTS") || containsStringIgnoreCase("1.2. RESULTS")), $sectionIdentifier: getSectionIdentifier()) $headline: Headline(getSectionIdentifier().isChildOf($sectionIdentifier)) @@ -503,7 +517,7 @@ rule "DOC.98.5: Summary Results" }); end -rule "DOC.98.6: Summary Results 2" +rule "DOC.8.6: Summary Results 2" when $headline: Headline(containsString("1.2. RESULTS")) then @@ -515,12 +529,12 @@ rule "DOC.98.6: Summary Results 2" .filter(e -> !e.getValue().startsWith("BASF")) .filter(e -> !e.getValue().startsWith("The Chemical Company")) .filter(e -> !e.getValue().startsWith("We create chemistry")) - .forEach(entity -> entity.apply("DOC.8.5", "Summary Results", "n-a")); + .forEach(entity -> entity.apply("DOC.8.6", "Summary Results", "n-a")); end -rule "DOC.98.4: Summary Conclusion" +rule "DOC.8.4: Summary Conclusion" when $headline: Headline(containsString("1.4. CONCLUSION") || containsString("1.3. CONCLUSION")) then @@ -532,7 +546,7 @@ rule "DOC.98.4: Summary Conclusion" .filter(e -> !e.getValue().startsWith("BASF")) .filter(e -> !e.getValue().startsWith("The Chemical Company")) .filter(e -> !e.getValue().startsWith("We create chemistry")) - .forEach(entity -> entity.apply("DOC.8.3", "Summary Conculsion found", "n-a")); + .forEach(entity -> entity.apply("DOC.8.4", "Summary Conculsion found", "n-a")); end diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/manual_redaction_rules.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/manual_redaction_rules.drl index 882f0579..b9a162ea 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/manual_redaction_rules.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/manual_redaction_rules.drl @@ -1,8 +1,8 @@ package drools import static java.lang.String.format; -import static com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility.anyMatch; -import static com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility.exactMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.anyMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.exactMatch; import java.util.List; import java.util.LinkedList; @@ -12,41 +12,48 @@ import java.util.Collection; import java.util.stream.Stream; import java.util.Optional; -import com.iqser.red.service.redaction.v1.server.document.graph.*; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.*; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Section; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Paragraph; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Image; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.*; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.*; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.*; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.*; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule +import com.iqser.red.service.redaction.v1.server.model.document.nodes.*; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Section; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Headline; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIdentifier; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Footer; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Header; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.*; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.ConcatenatedTextBlock; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryModel; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; +import com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility; + import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.Dictionary; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryModel; 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.IdRemoval; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualLegalBasisChange; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus; -import com.iqser.red.service.redaction.v1.server.document.services.ManualChangesApplicationService; -import com.iqser.red.service.redaction.v1.server.client.model.EntityRecognitionEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType -import com.iqser.red.service.redaction.v1.server.document.graph.entity.MatchedRule -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; + global Document document global EntityCreationService entityCreationService 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 0e6dc251..f10d7350 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 @@ -1,8 +1,8 @@ package drools import static java.lang.String.format; -import static com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility.anyMatch; -import static com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility.exactMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.anyMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.exactMatch; import java.util.List; import java.util.LinkedList; @@ -12,41 +12,48 @@ import java.util.Collection; import java.util.stream.Stream; import java.util.Optional; -import com.iqser.red.service.redaction.v1.server.document.graph.*; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.*; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Section; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Paragraph; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Image; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.*; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.*; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.*; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.*; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule +import com.iqser.red.service.redaction.v1.server.model.document.nodes.*; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Section; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Headline; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIdentifier; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Footer; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Header; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.*; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.ConcatenatedTextBlock; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryModel; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; +import com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility; + import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.Dictionary; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryModel; 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.IdRemoval; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualLegalBasisChange; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus; -import com.iqser.red.service.redaction.v1.server.document.services.ManualChangesApplicationService; -import com.iqser.red.service.redaction.v1.server.client.model.EntityRecognitionEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType -import com.iqser.red.service.redaction.v1.server.document.graph.entity.MatchedRule -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; + global Document document global EntityCreationService entityCreationService @@ -760,7 +767,7 @@ rule "ETC.2.1: Redact signatures (vertebrate study)" FileAttribute(label == "Vertebrate Study", value == "Yes") $signature: Image(imageType == ImageType.SIGNATURE) then - $signature.apply("ETC.2.0", "Signature Found", "Article 39(e)(2) of Regulation (EC) No 178/2002"); + $signature.apply("ETC.2.1", "Signature Found", "Article 39(e)(2) of Regulation (EC) No 178/2002"); end diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules_v2.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules_v2.drl index c32bcb56..476ef78a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules_v2.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/rules_v2.drl @@ -1,8 +1,8 @@ package drools import static java.lang.String.format; -import static com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility.anyMatch; -import static com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility.exactMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.anyMatch; +import static com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility.exactMatch; import java.util.List; import java.util.LinkedList; @@ -12,41 +12,48 @@ import java.util.Collection; import java.util.stream.Stream; import java.util.Optional; -import com.iqser.red.service.redaction.v1.server.document.graph.*; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.*; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Section; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Table; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.SemanticNode; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Document; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Paragraph; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.Image; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.*; -import com.iqser.red.service.redaction.v1.server.document.graph.textblock.*; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType; -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.*; +import com.iqser.red.service.redaction.v1.server.model.document.TextRange; +import com.iqser.red.service.redaction.v1.server.model.document.entity.*; +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule; +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity +import com.iqser.red.service.redaction.v1.server.model.document.entity.MatchedRule +import com.iqser.red.service.redaction.v1.server.model.document.nodes.*; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Section; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Table; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.ImageType; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Headline; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIdentifier; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Footer; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Header; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.NodeType; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.*; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.ConcatenatedTextBlock; +import com.iqser.red.service.redaction.v1.server.model.NerEntities; +import com.iqser.red.service.redaction.v1.server.model.dictionary.Dictionary; +import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryModel; +import com.iqser.red.service.redaction.v1.server.service.graph.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; +import com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility; + import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine; -import com.iqser.red.service.redaction.v1.server.document.services.EntityCreationService; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.Dictionary; -import com.iqser.red.service.redaction.v1.server.redaction.model.dictionary.DictionaryModel; 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.IdRemoval; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualForceRedaction; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualLegalBasisChange; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus; -import com.iqser.red.service.redaction.v1.server.document.services.ManualChangesApplicationService; -import com.iqser.red.service.redaction.v1.server.client.model.EntityRecognitionEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; -import com.iqser.red.service.redaction.v1.server.document.graph.TextRange; -import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility -import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType -import com.iqser.red.service.redaction.v1.server.document.graph.entity.MatchedRule -import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType -import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; + global Document document global EntityCreationService entityCreationService @@ -60,18 +67,19 @@ query "getFileAttributes" // --------------------------------------- NER Entities rules ------------------------------------------------------------------- -rule "add NER Entities of type CBI_author or CBI_address" +// Rule unit: AI.0 +rule "AI.0.0: add all NER Entities of type CBI_author" salience 999 when - $nerEntity: EntityRecognitionEntity($type: type, (type == "CBI_author" || type == "CBI_address")) + nerEntities: NerEntities(hasEntitiesOfType("CBI_author")) then - entityCreationService.byTextRange(new TextRange($nerEntity.getStartOffset(), $nerEntity.getEndOffset()), $type, EntityType.RECOMMENDATION, document) - .ifPresent(redactionEntity -> insert(redactionEntity)); + nerEntities.streamEntitiesOfType("CBI_author") + .forEach(nerEntity -> entityCreationService.byNerEntity(nerEntity, EntityType.RECOMMENDATION, document)); end // --------------------------------------- CBI rules ------------------------------------------------------------------- -rule "Always redact CBI_author" +rule "CBI.0.0: Always redact CBI_author" when $cbiAuthor: TextEntity(type == "CBI_author", entityType == EntityType.ENTITY) @@ -81,7 +89,7 @@ rule "Always redact CBI_author" // --------------------------------------- PII rules ------------------------------------------------------------------- -rule "Always redact PII" +rule "PII.0.0: Always redact PII" when $cbiAuthor: TextEntity(type == "PII", entityType == EntityType.ENTITY) diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/performance/dictionaries/EFSA_sanitisation_GFL_v1/rules.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/performance/dictionaries/EFSA_sanitisation_GFL_v1/rules.drl index e8f074d2..fb71a877 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/performance/dictionaries/EFSA_sanitisation_GFL_v1/rules.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/performance/dictionaries/EFSA_sanitisation_GFL_v1/rules.drl @@ -45,7 +45,9 @@ import com.iqser.red.service.redaction.v1.server.redaction.adapter.NerEntities; import com.iqser.red.service.redaction.v1.server.document.utils.RedactionSearchUtility import com.iqser.red.service.redaction.v1.server.document.graph.nodes.ImageType import com.iqser.red.service.redaction.v1.server.document.graph.entity.EntityType -import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity; +import com.iqser.red.service.redaction.v1.server.document.graph.entity.TextEntity +import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity +import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; global Document document global EntityCreationService entityCreationService