From f9d939958f32c8a61dc9e615c32ede2e819e7b55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kilian=20Sch=C3=BCttler?= Date: Thu, 14 Nov 2024 16:50:42 +0100 Subject: [PATCH] RED-9139: move document to its own module, add TableOfContents and TableOfContentsItem --- .gitlab-ci.yml | 9 +- ...er.red.service.java-conventions.gradle.kts | 5 + .../document/build.gradle.kts | 35 + .../v1/server/data}/DocumentData.java | 11 +- .../v1/server/data/DocumentPageProto.java | 1544 +++++++++ .../data/DocumentPositionDataProto.java | 2652 ++++++++++++++ .../server/data/DocumentStructureProto.java | 694 ++++ .../server/data/DocumentStructureWrapper.java | 115 + .../v1/server/data/DocumentTextDataProto.java | 3048 +++++++++++++++++ .../v1/server/data/EntryDataProto.java | 2556 ++++++++++++++ .../v1/server/data/LayoutEngineProto.java | 176 + .../v1/server/data/NodeTypeProto.java | 261 ++ .../redaction/v1/server/data/RangeProto.java | 606 ++++ .../v1/server/data/old/DocumentPage.java | 25 + .../server/data/old/DocumentPositionData.java | 24 + .../v1/server/data/old/DocumentStructure.java | 158 + .../v1/server/data/old/DocumentTextData.java | 28 + .../v1/server/data/old/LayoutEngine.java | 8 + .../v1/server/data/old/NodeType.java | 24 + .../v1/server/mapper/DocumentDataMapper.java | 197 ++ .../server/mapper}/DocumentGraphMapper.java | 92 +- .../v1/server/mapper/PropertiesMapper.java | 151 + .../model/document/AbstractNodeVisitor.java | 116 + .../ConsecutiveBoundaryCollector.java | 0 .../server/model/document/DocumentTree.java | 16 + .../v1/server/model/document/NodeVisitor.java | 53 + .../v1/server/model/document/TextRange.java | 6 + .../model/document/entity/EntityType.java | 0 .../server/model/document/entity/IEntity.java | 23 +- .../entity/ManualChangeOverwrite.java | 24 +- .../model/document/entity/MatchedRule.java | 10 +- .../model/document/entity/PositionOnPage.java | 0 .../document/entity}/RectangleWithPage.java | 2 +- .../document/entity}/RuleIdentifier.java | 2 +- .../model/document/entity}/RuleType.java | 2 +- .../model/document/entity/TextEntity.java | 0 .../document/nodes/AbstractSemanticNode.java | 1 - .../server/model/document/nodes/Document.java | 9 +- .../document/nodes/DuplicatedParagraph.java | 0 .../server/model/document/nodes/Footer.java | 8 + .../document/nodes/GenericSemanticNode.java | 0 .../server/model/document/nodes/Header.java | 8 + .../server/model/document/nodes/Headline.java | 8 + .../v1/server/model/document/nodes/Image.java | 36 +- .../model/document/nodes/ImageType.java | 0 .../model/document/nodes/LayoutEngine.java | 7 + .../server/model/document/nodes/NodeType.java | 4 +- .../v1/server/model/document/nodes/Page.java | 6 + .../model/document/nodes/Paragraph.java | 8 + .../server/model/document/nodes/Section.java | 9 + .../document/nodes/SectionIdentifier.java | 2 +- .../model/document/nodes/SemanticNode.java | 13 +- .../model/document/nodes/SuperSection.java | 9 + .../v1/server/model/document/nodes/Table.java | 9 +- .../model/document/nodes/TableCell.java | 8 + .../model/document/nodes/TableOfContents.java | 47 + .../document/nodes/TableOfContentsItem.java | 57 + .../document/textblock/AtomicTextBlock.java | 29 +- .../textblock/ConcatenatedTextBlock.java | 22 + .../ConsecutiveTextBlockCollector.java | 5 +- .../model/document/textblock/TextBlock.java | 6 + .../textblock/TextBlockCollector.java | 0 .../redaction/v1/server/utils/IdBuilder.java | 0 .../redaction/v1/server/utils/Patterns.java | 0 .../utils/RectangleTransformations.java | 0 .../server/utils/RedactionSearchUtility.java | 5 +- .../src/main/resources/DocumentPage.proto | 25 + .../main/resources/DocumentPositionData.proto | 28 + .../main/resources/DocumentStructure.proto | 12 + .../src/main/resources/DocumentTextData.proto | 40 + .../src/main/resources/EntryData.proto | 30 + .../src/main/resources/LayoutEngine.proto | 10 + .../src/main/resources/NodeType.proto | 19 + .../document/src/main/resources/Range.proto | 14 + .../main/resources/generate_proto_files.sh | 26 + .../nodes/LayoutEngineMappingTest.java | 33 + .../document/nodes/NodeTypeMappingTest.java | 33 + .../document/nodes/SectionIdentifierTest.java | 144 + .../build.gradle.kts | 18 +- .../v1/server/DeprecatedElementsFinder.java | 9 +- .../v1/server/model/PrecursorEntity.java | 1 + .../v1/server/model/component/Component.java | 2 +- .../v1/server/model/drools/BasicRule.java | 2 + .../v1/server/model/drools/RuleClass.java | 2 + .../model/drools/RuleFileBluePrint.java | 2 + .../service/AnalysisFinalizationService.java | 2 - .../service/AnalysisPreparationService.java | 3 +- .../v1/server/service/AnalyzeService.java | 9 - .../server/service/DocumentSearchService.java | 3 +- .../{document => }/EntityFindingUtility.java | 6 +- .../service/EntityLogCreatorService.java | 16 +- .../ManualChangesApplicationService.java | 1 - .../NotFoundImportedEntitiesService.java | 2 +- .../service/UnprocessedChangesService.java | 11 +- .../document/ComponentCreationService.java | 2 +- .../document/EntityCreationService.java | 1 - .../document/EntityEnrichmentService.java | 2 +- .../EntityFromPrecursorCreationService.java | 7 +- .../document/IntersectingNodeVisitor.java | 7 +- .../server/service/document/NodeVisitor.java | 9 - .../service/document/PropertiesMapper.java | 71 - .../server/service/drools/RuleFileParser.java | 4 +- .../storage/DocumentDataFallbackService.java | 22 +- .../storage/ObservedStorageService.java | 2 +- .../storage/RedactionStorageService.java | 18 +- .../resources/drools/all_rules_documine.drl | 2 +- .../AbstractRedactionIntegrationTest.java | 4 +- .../MapEntityLogToDocumentDataTest.java | 16 +- .../v1/server/RedactionIntegrationTest.java | 17 +- .../document/entity/TextEntityTest.java | 1 + .../graph/BuildDocumentIntegrationTest.java | 2 +- .../graph/SearchImplementationTest.java | 2 +- .../server/document/graph/TextRangeTest.java | 12 + .../ManualChangesEnd2EndTest.java | 2 +- .../ManualChangesIntegrationTest.java | 6 - .../manualchanges/ManualChangesUnitTest.java | 16 +- .../manualchanges/PrecursorEntityTest.java | 6 +- .../adapter/NerEntitiesAdapterTest.java | 7 +- .../server/utils/PdfVisualisationUtility.java | 3 +- .../resources/drools/acceptance_rules.drl | 6 +- .../drools/all_redact_manager_rules.drl | 34 +- .../test/resources/drools/documine_flora.drl | 14 +- .../resources/drools/efsa_sanitisation.drl | 10 +- .../drools/manual_redaction_rules.drl | 7 +- .../src/test/resources/drools/rules.drl | 24 +- .../src/test/resources/drools/rules_v2.drl | 5 +- .../src/test/resources/drools/table_demo.drl | 5 +- .../src/test/resources/drools/test_rules.drl | 29 +- .../src/test/resources/files/syngenta | 2 +- .../migration/RuleFileMigrator.java | 22 +- .../management/models/RuleIdentifier.java | 19 +- .../resources/all_redact_manager_rules.drl | 3 +- .../src/main/resources/all_rules_documine.drl | 13 +- .../management/RuleFileMigrationTest.java | 9 +- settings.gradle.kts | 2 + 135 files changed, 13478 insertions(+), 459 deletions(-) create mode 100644 redaction-service-v1/document/build.gradle.kts rename redaction-service-v1/{redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document => document/src/main/java/com/iqser/red/service/redaction/v1/server/data}/DocumentData.java (50%) create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentPageProto.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentPositionDataProto.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentStructureProto.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentStructureWrapper.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentTextDataProto.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/EntryDataProto.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/LayoutEngineProto.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/NodeTypeProto.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/RangeProto.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentPage.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentPositionData.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentStructure.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentTextData.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/LayoutEngine.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/NodeType.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/mapper/DocumentDataMapper.java rename redaction-service-v1/{redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document => document/src/main/java/com/iqser/red/service/redaction/v1/server/mapper}/DocumentGraphMapper.java (72%) create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/mapper/PropertiesMapper.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/AbstractNodeVisitor.java rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/ConsecutiveBoundaryCollector.java (100%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentTree.java (96%) create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/NodeVisitor.java rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/TextRange.java (98%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/EntityType.java (100%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/IEntity.java (94%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/ManualChangeOverwrite.java (82%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/MatchedRule.java (94%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/PositionOnPage.java (100%) rename redaction-service-v1/{redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model => document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity}/RectangleWithPage.java (95%) rename redaction-service-v1/{redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools => document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity}/RuleIdentifier.java (97%) rename redaction-service-v1/{redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools => document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity}/RuleType.java (85%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/TextEntity.java (100%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/AbstractSemanticNode.java (94%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Document.java (97%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/DuplicatedParagraph.java (100%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Footer.java (87%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/GenericSemanticNode.java (100%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Header.java (88%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Headline.java (93%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Image.java (81%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/ImageType.java (100%) create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/LayoutEngine.java rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeType.java (85%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Page.java (98%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Paragraph.java (85%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Section.java (93%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SectionIdentifier.java (98%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java (98%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SuperSection.java (93%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Table.java (98%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableCell.java (91%) create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableOfContents.java create mode 100644 redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableOfContentsItem.java rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java (88%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java (94%) rename redaction-service-v1/{redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document => document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock}/ConsecutiveTextBlockCollector.java (91%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java (97%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlockCollector.java (100%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/utils/IdBuilder.java (100%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/utils/Patterns.java (100%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RectangleTransformations.java (100%) rename redaction-service-v1/{redaction-service-server-v1 => document}/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RedactionSearchUtility.java (99%) create mode 100644 redaction-service-v1/document/src/main/resources/DocumentPage.proto create mode 100644 redaction-service-v1/document/src/main/resources/DocumentPositionData.proto create mode 100644 redaction-service-v1/document/src/main/resources/DocumentStructure.proto create mode 100644 redaction-service-v1/document/src/main/resources/DocumentTextData.proto create mode 100644 redaction-service-v1/document/src/main/resources/EntryData.proto create mode 100644 redaction-service-v1/document/src/main/resources/LayoutEngine.proto create mode 100644 redaction-service-v1/document/src/main/resources/NodeType.proto create mode 100644 redaction-service-v1/document/src/main/resources/Range.proto create mode 100644 redaction-service-v1/document/src/main/resources/generate_proto_files.sh create mode 100644 redaction-service-v1/document/src/test/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/LayoutEngineMappingTest.java create mode 100644 redaction-service-v1/document/src/test/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeTypeMappingTest.java create mode 100644 redaction-service-v1/document/src/test/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SectionIdentifierTest.java rename redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/{document => }/EntityFindingUtility.java (97%) delete mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/NodeVisitor.java delete mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/PropertiesMapper.java diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 62149a06..b6ea327e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,20 +7,21 @@ include: ref: 'main' file: 'ci-templates/gradle_java.yml' -deploy JavaDoc: +publish dependencies: stage: deploy tags: - dind script: - - echo "Building JavaDoc with gradle version ${BUILDVERSION}" + - echo "Publishing dependencies with gradle version ${BUILDVERSION}" - gradle -Pversion=${BUILDVERSION} publish - echo "BUILDVERSION=$(echo ${BUILDVERSION})" >> variables.env artifacts: reports: - dotenv: variables.env + dotenv: variables.env rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - if: $CI_COMMIT_BRANCH =~ /^release/ + - if: $CI_COMMIT_BRANCH =~ /^feature/ - if: $CI_COMMIT_TAG generate JavaDoc: @@ -42,7 +43,7 @@ pages: stage: deploy needs: - generate JavaDoc - - deploy JavaDoc + - publish dependencies - calculate minor version pages: path_prefix: "$BUILDVERSION" diff --git a/buildSrc/src/main/kotlin/com.iqser.red.service.java-conventions.gradle.kts b/buildSrc/src/main/kotlin/com.iqser.red.service.java-conventions.gradle.kts index 4c823822..4cfc282e 100644 --- a/buildSrc/src/main/kotlin/com.iqser.red.service.java-conventions.gradle.kts +++ b/buildSrc/src/main/kotlin/com.iqser.red.service.java-conventions.gradle.kts @@ -15,8 +15,13 @@ pmd { isConsoleOutput = true } +tasks.checkstyleMain { + exclude("**/data/**") // ignore generated proto files +} + tasks.pmdMain { pmd.ruleSetFiles = files("${rootDir}/config/pmd/pmd.xml") + exclude("**/data/**") // ignore generated proto files } tasks.pmdTest { diff --git a/redaction-service-v1/document/build.gradle.kts b/redaction-service-v1/document/build.gradle.kts new file mode 100644 index 00000000..1ed3484f --- /dev/null +++ b/redaction-service-v1/document/build.gradle.kts @@ -0,0 +1,35 @@ +plugins { + id("com.iqser.red.service.java-conventions") + id("io.freefair.lombok") version "8.4" +} + +description = "redaction-service-document" +val persistenceServiceVersion = "2.612.0-RED10072.1" +val layoutParserVersion = "newNode" + +group = "com.knecon.fforesight" + +dependencies { + implementation("com.iqser.red.service:persistence-service-internal-api-v1:${persistenceServiceVersion}") + api("com.google.protobuf:protobuf-java-util:4.28.3") + + testImplementation("org.junit.jupiter:junit-jupiter-api:5.8.1") + testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.8.1") +} + +publishing { + publications { + create(name) { + from(components["java"]) + } + } + repositories { + maven { + url = uri("https://nexus.knecon.com/repository/red-platform-releases/") + credentials { + username = providers.gradleProperty("mavenUser").getOrNull(); + password = providers.gradleProperty("mavenPassword").getOrNull(); + } + } + } +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentData.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentData.java similarity index 50% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentData.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentData.java index 29899b55..79ddbd54 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentData.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentData.java @@ -1,13 +1,12 @@ -package com.iqser.red.service.redaction.v1.server.model.document; +package com.iqser.red.service.redaction.v1.server.data; -import static com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentStructureProto.DocumentStructure; +import static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure; import java.io.Serializable; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPageProto.AllDocumentPages; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPositionDataProto.AllDocumentPositionData; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentStructureWrapper; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentTextDataProto.AllDocumentTextData; +import com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages; +import com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData; +import com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData; import lombok.AccessLevel; import lombok.AllArgsConstructor; diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentPageProto.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentPageProto.java new file mode 100644 index 00000000..781154f7 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentPageProto.java @@ -0,0 +1,1544 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: DocumentPage.proto +// Protobuf Java Version: 4.28.3 + +package com.iqser.red.service.redaction.v1.server.data; + +public final class DocumentPageProto { + private DocumentPageProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + DocumentPageProto.class.getName()); + } + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface AllDocumentPagesOrBuilder extends + // @@protoc_insertion_point(interface_extends:AllDocumentPages) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .DocumentPage documentPages = 1; + */ + java.util.List + getDocumentPagesList(); + /** + * repeated .DocumentPage documentPages = 1; + */ + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage getDocumentPages(int index); + /** + * repeated .DocumentPage documentPages = 1; + */ + int getDocumentPagesCount(); + /** + * repeated .DocumentPage documentPages = 1; + */ + java.util.List + getDocumentPagesOrBuilderList(); + /** + * repeated .DocumentPage documentPages = 1; + */ + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPageOrBuilder getDocumentPagesOrBuilder( + int index); + } + /** + * Protobuf type {@code AllDocumentPages} + */ + public static final class AllDocumentPages extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:AllDocumentPages) + AllDocumentPagesOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + AllDocumentPages.class.getName()); + } + // Use AllDocumentPages.newBuilder() to construct. + private AllDocumentPages(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private AllDocumentPages() { + documentPages_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.internal_static_AllDocumentPages_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.internal_static_AllDocumentPages_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages.class, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages.Builder.class); + } + + public static final int DOCUMENTPAGES_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private java.util.List documentPages_; + /** + * repeated .DocumentPage documentPages = 1; + */ + @java.lang.Override + public java.util.List getDocumentPagesList() { + return documentPages_; + } + /** + * repeated .DocumentPage documentPages = 1; + */ + @java.lang.Override + public java.util.List + getDocumentPagesOrBuilderList() { + return documentPages_; + } + /** + * repeated .DocumentPage documentPages = 1; + */ + @java.lang.Override + public int getDocumentPagesCount() { + return documentPages_.size(); + } + /** + * repeated .DocumentPage documentPages = 1; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage getDocumentPages(int index) { + return documentPages_.get(index); + } + /** + * repeated .DocumentPage documentPages = 1; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPageOrBuilder getDocumentPagesOrBuilder( + int index) { + return documentPages_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < documentPages_.size(); i++) { + output.writeMessage(1, documentPages_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < documentPages_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, documentPages_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages)) { + return super.equals(obj); + } + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages other = (com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages) obj; + + if (!getDocumentPagesList() + .equals(other.getDocumentPagesList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getDocumentPagesCount() > 0) { + hash = (37 * hash) + DOCUMENTPAGES_FIELD_NUMBER; + hash = (53 * hash) + getDocumentPagesList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code AllDocumentPages} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:AllDocumentPages) + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPagesOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.internal_static_AllDocumentPages_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.internal_static_AllDocumentPages_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages.class, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages.Builder.class); + } + + // Construct using com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (documentPagesBuilder_ == null) { + documentPages_ = java.util.Collections.emptyList(); + } else { + documentPages_ = null; + documentPagesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.internal_static_AllDocumentPages_descriptor; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages getDefaultInstanceForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages.getDefaultInstance(); + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages build() { + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages buildPartial() { + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages result = new com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages result) { + if (documentPagesBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + documentPages_ = java.util.Collections.unmodifiableList(documentPages_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.documentPages_ = documentPages_; + } else { + result.documentPages_ = documentPagesBuilder_.build(); + } + } + + private void buildPartial0(com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages result) { + int from_bitField0_ = bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages) { + return mergeFrom((com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages other) { + if (other == com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages.getDefaultInstance()) return this; + if (documentPagesBuilder_ == null) { + if (!other.documentPages_.isEmpty()) { + if (documentPages_.isEmpty()) { + documentPages_ = other.documentPages_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureDocumentPagesIsMutable(); + documentPages_.addAll(other.documentPages_); + } + onChanged(); + } + } else { + if (!other.documentPages_.isEmpty()) { + if (documentPagesBuilder_.isEmpty()) { + documentPagesBuilder_.dispose(); + documentPagesBuilder_ = null; + documentPages_ = other.documentPages_; + bitField0_ = (bitField0_ & ~0x00000001); + documentPagesBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getDocumentPagesFieldBuilder() : null; + } else { + documentPagesBuilder_.addAllMessages(other.documentPages_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage m = + input.readMessage( + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.parser(), + extensionRegistry); + if (documentPagesBuilder_ == null) { + ensureDocumentPagesIsMutable(); + documentPages_.add(m); + } else { + documentPagesBuilder_.addMessage(m); + } + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.util.List documentPages_ = + java.util.Collections.emptyList(); + private void ensureDocumentPagesIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + documentPages_ = new java.util.ArrayList(documentPages_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.Builder, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPageOrBuilder> documentPagesBuilder_; + + /** + * repeated .DocumentPage documentPages = 1; + */ + public java.util.List getDocumentPagesList() { + if (documentPagesBuilder_ == null) { + return java.util.Collections.unmodifiableList(documentPages_); + } else { + return documentPagesBuilder_.getMessageList(); + } + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public int getDocumentPagesCount() { + if (documentPagesBuilder_ == null) { + return documentPages_.size(); + } else { + return documentPagesBuilder_.getCount(); + } + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage getDocumentPages(int index) { + if (documentPagesBuilder_ == null) { + return documentPages_.get(index); + } else { + return documentPagesBuilder_.getMessage(index); + } + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public Builder setDocumentPages( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage value) { + if (documentPagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDocumentPagesIsMutable(); + documentPages_.set(index, value); + onChanged(); + } else { + documentPagesBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public Builder setDocumentPages( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.Builder builderForValue) { + if (documentPagesBuilder_ == null) { + ensureDocumentPagesIsMutable(); + documentPages_.set(index, builderForValue.build()); + onChanged(); + } else { + documentPagesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public Builder addDocumentPages(com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage value) { + if (documentPagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDocumentPagesIsMutable(); + documentPages_.add(value); + onChanged(); + } else { + documentPagesBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public Builder addDocumentPages( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage value) { + if (documentPagesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDocumentPagesIsMutable(); + documentPages_.add(index, value); + onChanged(); + } else { + documentPagesBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public Builder addDocumentPages( + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.Builder builderForValue) { + if (documentPagesBuilder_ == null) { + ensureDocumentPagesIsMutable(); + documentPages_.add(builderForValue.build()); + onChanged(); + } else { + documentPagesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public Builder addDocumentPages( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.Builder builderForValue) { + if (documentPagesBuilder_ == null) { + ensureDocumentPagesIsMutable(); + documentPages_.add(index, builderForValue.build()); + onChanged(); + } else { + documentPagesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public Builder addAllDocumentPages( + java.lang.Iterable values) { + if (documentPagesBuilder_ == null) { + ensureDocumentPagesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, documentPages_); + onChanged(); + } else { + documentPagesBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public Builder clearDocumentPages() { + if (documentPagesBuilder_ == null) { + documentPages_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + documentPagesBuilder_.clear(); + } + return this; + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public Builder removeDocumentPages(int index) { + if (documentPagesBuilder_ == null) { + ensureDocumentPagesIsMutable(); + documentPages_.remove(index); + onChanged(); + } else { + documentPagesBuilder_.remove(index); + } + return this; + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.Builder getDocumentPagesBuilder( + int index) { + return getDocumentPagesFieldBuilder().getBuilder(index); + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPageOrBuilder getDocumentPagesOrBuilder( + int index) { + if (documentPagesBuilder_ == null) { + return documentPages_.get(index); } else { + return documentPagesBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public java.util.List + getDocumentPagesOrBuilderList() { + if (documentPagesBuilder_ != null) { + return documentPagesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(documentPages_); + } + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.Builder addDocumentPagesBuilder() { + return getDocumentPagesFieldBuilder().addBuilder( + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.getDefaultInstance()); + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.Builder addDocumentPagesBuilder( + int index) { + return getDocumentPagesFieldBuilder().addBuilder( + index, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.getDefaultInstance()); + } + /** + * repeated .DocumentPage documentPages = 1; + */ + public java.util.List + getDocumentPagesBuilderList() { + return getDocumentPagesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.Builder, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPageOrBuilder> + getDocumentPagesFieldBuilder() { + if (documentPagesBuilder_ == null) { + documentPagesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.Builder, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPageOrBuilder>( + documentPages_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + documentPages_ = null; + } + return documentPagesBuilder_; + } + + // @@protoc_insertion_point(builder_scope:AllDocumentPages) + } + + // @@protoc_insertion_point(class_scope:AllDocumentPages) + private static final com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages(); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AllDocumentPages parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DocumentPageOrBuilder extends + // @@protoc_insertion_point(interface_extends:DocumentPage) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * The page number, starting with 1.
+     * 
+ * + * int32 number = 1; + * @return The number. + */ + int getNumber(); + + /** + *
+     * The page height in PDF user units.
+     * 
+ * + * int32 height = 2; + * @return The height. + */ + int getHeight(); + + /** + *
+     * The page width in PDF user units.
+     * 
+ * + * int32 width = 3; + * @return The width. + */ + int getWidth(); + + /** + *
+     * The page rotation as specified by the PDF.
+     * 
+ * + * int32 rotation = 4; + * @return The rotation. + */ + int getRotation(); + } + /** + * Protobuf type {@code DocumentPage} + */ + public static final class DocumentPage extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:DocumentPage) + DocumentPageOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + DocumentPage.class.getName()); + } + // Use DocumentPage.newBuilder() to construct. + private DocumentPage(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private DocumentPage() { + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.internal_static_DocumentPage_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.internal_static_DocumentPage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.class, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.Builder.class); + } + + public static final int NUMBER_FIELD_NUMBER = 1; + private int number_ = 0; + /** + *
+     * The page number, starting with 1.
+     * 
+ * + * int32 number = 1; + * @return The number. + */ + @java.lang.Override + public int getNumber() { + return number_; + } + + public static final int HEIGHT_FIELD_NUMBER = 2; + private int height_ = 0; + /** + *
+     * The page height in PDF user units.
+     * 
+ * + * int32 height = 2; + * @return The height. + */ + @java.lang.Override + public int getHeight() { + return height_; + } + + public static final int WIDTH_FIELD_NUMBER = 3; + private int width_ = 0; + /** + *
+     * The page width in PDF user units.
+     * 
+ * + * int32 width = 3; + * @return The width. + */ + @java.lang.Override + public int getWidth() { + return width_; + } + + public static final int ROTATION_FIELD_NUMBER = 4; + private int rotation_ = 0; + /** + *
+     * The page rotation as specified by the PDF.
+     * 
+ * + * int32 rotation = 4; + * @return The rotation. + */ + @java.lang.Override + public int getRotation() { + return rotation_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (number_ != 0) { + output.writeInt32(1, number_); + } + if (height_ != 0) { + output.writeInt32(2, height_); + } + if (width_ != 0) { + output.writeInt32(3, width_); + } + if (rotation_ != 0) { + output.writeInt32(4, rotation_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (number_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, number_); + } + if (height_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, height_); + } + if (width_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(3, width_); + } + if (rotation_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, rotation_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage)) { + return super.equals(obj); + } + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage other = (com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage) obj; + + if (getNumber() + != other.getNumber()) return false; + if (getHeight() + != other.getHeight()) return false; + if (getWidth() + != other.getWidth()) return false; + if (getRotation() + != other.getRotation()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NUMBER_FIELD_NUMBER; + hash = (53 * hash) + getNumber(); + hash = (37 * hash) + HEIGHT_FIELD_NUMBER; + hash = (53 * hash) + getHeight(); + hash = (37 * hash) + WIDTH_FIELD_NUMBER; + hash = (53 * hash) + getWidth(); + hash = (37 * hash) + ROTATION_FIELD_NUMBER; + hash = (53 * hash) + getRotation(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code DocumentPage} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:DocumentPage) + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPageOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.internal_static_DocumentPage_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.internal_static_DocumentPage_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.class, com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.Builder.class); + } + + // Construct using com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + number_ = 0; + height_ = 0; + width_ = 0; + rotation_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.internal_static_DocumentPage_descriptor; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage getDefaultInstanceForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.getDefaultInstance(); + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage build() { + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage buildPartial() { + com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage result = new com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.number_ = number_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.height_ = height_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.width_ = width_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.rotation_ = rotation_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage) { + return mergeFrom((com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage other) { + if (other == com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage.getDefaultInstance()) return this; + if (other.getNumber() != 0) { + setNumber(other.getNumber()); + } + if (other.getHeight() != 0) { + setHeight(other.getHeight()); + } + if (other.getWidth() != 0) { + setWidth(other.getWidth()); + } + if (other.getRotation() != 0) { + setRotation(other.getRotation()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + number_ = input.readInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + height_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 24: { + width_ = input.readInt32(); + bitField0_ |= 0x00000004; + break; + } // case 24 + case 32: { + rotation_ = input.readInt32(); + bitField0_ |= 0x00000008; + break; + } // case 32 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private int number_ ; + /** + *
+       * The page number, starting with 1.
+       * 
+ * + * int32 number = 1; + * @return The number. + */ + @java.lang.Override + public int getNumber() { + return number_; + } + /** + *
+       * The page number, starting with 1.
+       * 
+ * + * int32 number = 1; + * @param value The number to set. + * @return This builder for chaining. + */ + public Builder setNumber(int value) { + + number_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
+       * The page number, starting with 1.
+       * 
+ * + * int32 number = 1; + * @return This builder for chaining. + */ + public Builder clearNumber() { + bitField0_ = (bitField0_ & ~0x00000001); + number_ = 0; + onChanged(); + return this; + } + + private int height_ ; + /** + *
+       * The page height in PDF user units.
+       * 
+ * + * int32 height = 2; + * @return The height. + */ + @java.lang.Override + public int getHeight() { + return height_; + } + /** + *
+       * The page height in PDF user units.
+       * 
+ * + * int32 height = 2; + * @param value The height to set. + * @return This builder for chaining. + */ + public Builder setHeight(int value) { + + height_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+       * The page height in PDF user units.
+       * 
+ * + * int32 height = 2; + * @return This builder for chaining. + */ + public Builder clearHeight() { + bitField0_ = (bitField0_ & ~0x00000002); + height_ = 0; + onChanged(); + return this; + } + + private int width_ ; + /** + *
+       * The page width in PDF user units.
+       * 
+ * + * int32 width = 3; + * @return The width. + */ + @java.lang.Override + public int getWidth() { + return width_; + } + /** + *
+       * The page width in PDF user units.
+       * 
+ * + * int32 width = 3; + * @param value The width to set. + * @return This builder for chaining. + */ + public Builder setWidth(int value) { + + width_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + *
+       * The page width in PDF user units.
+       * 
+ * + * int32 width = 3; + * @return This builder for chaining. + */ + public Builder clearWidth() { + bitField0_ = (bitField0_ & ~0x00000004); + width_ = 0; + onChanged(); + return this; + } + + private int rotation_ ; + /** + *
+       * The page rotation as specified by the PDF.
+       * 
+ * + * int32 rotation = 4; + * @return The rotation. + */ + @java.lang.Override + public int getRotation() { + return rotation_; + } + /** + *
+       * The page rotation as specified by the PDF.
+       * 
+ * + * int32 rotation = 4; + * @param value The rotation to set. + * @return This builder for chaining. + */ + public Builder setRotation(int value) { + + rotation_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + *
+       * The page rotation as specified by the PDF.
+       * 
+ * + * int32 rotation = 4; + * @return This builder for chaining. + */ + public Builder clearRotation() { + bitField0_ = (bitField0_ & ~0x00000008); + rotation_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:DocumentPage) + } + + // @@protoc_insertion_point(class_scope:DocumentPage) + private static final com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage(); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DocumentPage parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_AllDocumentPages_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_AllDocumentPages_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_DocumentPage_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_DocumentPage_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\022DocumentPage.proto\"8\n\020AllDocumentPages" + + "\022$\n\rdocumentPages\030\001 \003(\0132\r.DocumentPage\"O" + + "\n\014DocumentPage\022\016\n\006number\030\001 \001(\005\022\016\n\006height" + + "\030\002 \001(\005\022\r\n\005width\030\003 \001(\005\022\020\n\010rotation\030\004 \001(\005B" + + "C\n.com.iqser.red.service.redaction.v1.se" + + "rver.dataB\021DocumentPageProtob\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_AllDocumentPages_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_AllDocumentPages_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_AllDocumentPages_descriptor, + new java.lang.String[] { "DocumentPages", }); + internal_static_DocumentPage_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_DocumentPage_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_DocumentPage_descriptor, + new java.lang.String[] { "Number", "Height", "Width", "Rotation", }); + descriptor.resolveAllFeaturesImmutable(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentPositionDataProto.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentPositionDataProto.java new file mode 100644 index 00000000..58994861 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentPositionDataProto.java @@ -0,0 +1,2652 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: DocumentPositionData.proto +// Protobuf Java Version: 4.28.3 + +package com.iqser.red.service.redaction.v1.server.data; + +public final class DocumentPositionDataProto { + private DocumentPositionDataProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + DocumentPositionDataProto.class.getName()); + } + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface AllDocumentPositionDataOrBuilder extends + // @@protoc_insertion_point(interface_extends:AllDocumentPositionData) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + java.util.List + getDocumentPositionDataList(); + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData getDocumentPositionData(int index); + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + int getDocumentPositionDataCount(); + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + java.util.List + getDocumentPositionDataOrBuilderList(); + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionDataOrBuilder getDocumentPositionDataOrBuilder( + int index); + } + /** + * Protobuf type {@code AllDocumentPositionData} + */ + public static final class AllDocumentPositionData extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:AllDocumentPositionData) + AllDocumentPositionDataOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + AllDocumentPositionData.class.getName()); + } + // Use AllDocumentPositionData.newBuilder() to construct. + private AllDocumentPositionData(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private AllDocumentPositionData() { + documentPositionData_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_AllDocumentPositionData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_AllDocumentPositionData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData.class, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData.Builder.class); + } + + public static final int DOCUMENTPOSITIONDATA_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private java.util.List documentPositionData_; + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + @java.lang.Override + public java.util.List getDocumentPositionDataList() { + return documentPositionData_; + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + @java.lang.Override + public java.util.List + getDocumentPositionDataOrBuilderList() { + return documentPositionData_; + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + @java.lang.Override + public int getDocumentPositionDataCount() { + return documentPositionData_.size(); + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData getDocumentPositionData(int index) { + return documentPositionData_.get(index); + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionDataOrBuilder getDocumentPositionDataOrBuilder( + int index) { + return documentPositionData_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < documentPositionData_.size(); i++) { + output.writeMessage(1, documentPositionData_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < documentPositionData_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, documentPositionData_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData)) { + return super.equals(obj); + } + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData other = (com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData) obj; + + if (!getDocumentPositionDataList() + .equals(other.getDocumentPositionDataList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getDocumentPositionDataCount() > 0) { + hash = (37 * hash) + DOCUMENTPOSITIONDATA_FIELD_NUMBER; + hash = (53 * hash) + getDocumentPositionDataList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code AllDocumentPositionData} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:AllDocumentPositionData) + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionDataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_AllDocumentPositionData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_AllDocumentPositionData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData.class, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData.Builder.class); + } + + // Construct using com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (documentPositionDataBuilder_ == null) { + documentPositionData_ = java.util.Collections.emptyList(); + } else { + documentPositionData_ = null; + documentPositionDataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_AllDocumentPositionData_descriptor; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData getDefaultInstanceForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData.getDefaultInstance(); + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData build() { + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData buildPartial() { + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData result = new com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData result) { + if (documentPositionDataBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + documentPositionData_ = java.util.Collections.unmodifiableList(documentPositionData_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.documentPositionData_ = documentPositionData_; + } else { + result.documentPositionData_ = documentPositionDataBuilder_.build(); + } + } + + private void buildPartial0(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData result) { + int from_bitField0_ = bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData) { + return mergeFrom((com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData other) { + if (other == com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData.getDefaultInstance()) return this; + if (documentPositionDataBuilder_ == null) { + if (!other.documentPositionData_.isEmpty()) { + if (documentPositionData_.isEmpty()) { + documentPositionData_ = other.documentPositionData_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureDocumentPositionDataIsMutable(); + documentPositionData_.addAll(other.documentPositionData_); + } + onChanged(); + } + } else { + if (!other.documentPositionData_.isEmpty()) { + if (documentPositionDataBuilder_.isEmpty()) { + documentPositionDataBuilder_.dispose(); + documentPositionDataBuilder_ = null; + documentPositionData_ = other.documentPositionData_; + bitField0_ = (bitField0_ & ~0x00000001); + documentPositionDataBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getDocumentPositionDataFieldBuilder() : null; + } else { + documentPositionDataBuilder_.addAllMessages(other.documentPositionData_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData m = + input.readMessage( + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.parser(), + extensionRegistry); + if (documentPositionDataBuilder_ == null) { + ensureDocumentPositionDataIsMutable(); + documentPositionData_.add(m); + } else { + documentPositionDataBuilder_.addMessage(m); + } + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.util.List documentPositionData_ = + java.util.Collections.emptyList(); + private void ensureDocumentPositionDataIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + documentPositionData_ = new java.util.ArrayList(documentPositionData_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Builder, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionDataOrBuilder> documentPositionDataBuilder_; + + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public java.util.List getDocumentPositionDataList() { + if (documentPositionDataBuilder_ == null) { + return java.util.Collections.unmodifiableList(documentPositionData_); + } else { + return documentPositionDataBuilder_.getMessageList(); + } + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public int getDocumentPositionDataCount() { + if (documentPositionDataBuilder_ == null) { + return documentPositionData_.size(); + } else { + return documentPositionDataBuilder_.getCount(); + } + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData getDocumentPositionData(int index) { + if (documentPositionDataBuilder_ == null) { + return documentPositionData_.get(index); + } else { + return documentPositionDataBuilder_.getMessage(index); + } + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public Builder setDocumentPositionData( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData value) { + if (documentPositionDataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDocumentPositionDataIsMutable(); + documentPositionData_.set(index, value); + onChanged(); + } else { + documentPositionDataBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public Builder setDocumentPositionData( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Builder builderForValue) { + if (documentPositionDataBuilder_ == null) { + ensureDocumentPositionDataIsMutable(); + documentPositionData_.set(index, builderForValue.build()); + onChanged(); + } else { + documentPositionDataBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public Builder addDocumentPositionData(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData value) { + if (documentPositionDataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDocumentPositionDataIsMutable(); + documentPositionData_.add(value); + onChanged(); + } else { + documentPositionDataBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public Builder addDocumentPositionData( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData value) { + if (documentPositionDataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDocumentPositionDataIsMutable(); + documentPositionData_.add(index, value); + onChanged(); + } else { + documentPositionDataBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public Builder addDocumentPositionData( + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Builder builderForValue) { + if (documentPositionDataBuilder_ == null) { + ensureDocumentPositionDataIsMutable(); + documentPositionData_.add(builderForValue.build()); + onChanged(); + } else { + documentPositionDataBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public Builder addDocumentPositionData( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Builder builderForValue) { + if (documentPositionDataBuilder_ == null) { + ensureDocumentPositionDataIsMutable(); + documentPositionData_.add(index, builderForValue.build()); + onChanged(); + } else { + documentPositionDataBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public Builder addAllDocumentPositionData( + java.lang.Iterable values) { + if (documentPositionDataBuilder_ == null) { + ensureDocumentPositionDataIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, documentPositionData_); + onChanged(); + } else { + documentPositionDataBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public Builder clearDocumentPositionData() { + if (documentPositionDataBuilder_ == null) { + documentPositionData_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + documentPositionDataBuilder_.clear(); + } + return this; + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public Builder removeDocumentPositionData(int index) { + if (documentPositionDataBuilder_ == null) { + ensureDocumentPositionDataIsMutable(); + documentPositionData_.remove(index); + onChanged(); + } else { + documentPositionDataBuilder_.remove(index); + } + return this; + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Builder getDocumentPositionDataBuilder( + int index) { + return getDocumentPositionDataFieldBuilder().getBuilder(index); + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionDataOrBuilder getDocumentPositionDataOrBuilder( + int index) { + if (documentPositionDataBuilder_ == null) { + return documentPositionData_.get(index); } else { + return documentPositionDataBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public java.util.List + getDocumentPositionDataOrBuilderList() { + if (documentPositionDataBuilder_ != null) { + return documentPositionDataBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(documentPositionData_); + } + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Builder addDocumentPositionDataBuilder() { + return getDocumentPositionDataFieldBuilder().addBuilder( + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.getDefaultInstance()); + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Builder addDocumentPositionDataBuilder( + int index) { + return getDocumentPositionDataFieldBuilder().addBuilder( + index, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.getDefaultInstance()); + } + /** + * repeated .DocumentPositionData documentPositionData = 1; + */ + public java.util.List + getDocumentPositionDataBuilderList() { + return getDocumentPositionDataFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Builder, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionDataOrBuilder> + getDocumentPositionDataFieldBuilder() { + if (documentPositionDataBuilder_ == null) { + documentPositionDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Builder, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionDataOrBuilder>( + documentPositionData_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + documentPositionData_ = null; + } + return documentPositionDataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:AllDocumentPositionData) + } + + // @@protoc_insertion_point(class_scope:AllDocumentPositionData) + private static final com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData(); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AllDocumentPositionData parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DocumentPositionDataOrBuilder extends + // @@protoc_insertion_point(interface_extends:DocumentPositionData) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * Identifier of the text block.
+     * 
+ * + * int64 id = 1; + * @return The id. + */ + long getId(); + + /** + *
+     * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+     * This is required due to the text and position coordinates not being equal.
+     * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @return A list containing the stringIdxToPositionIdx. + */ + java.util.List getStringIdxToPositionIdxList(); + /** + *
+     * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+     * This is required due to the text and position coordinates not being equal.
+     * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @return The count of stringIdxToPositionIdx. + */ + int getStringIdxToPositionIdxCount(); + /** + *
+     * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+     * This is required due to the text and position coordinates not being equal.
+     * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @param index The index of the element to return. + * @return The stringIdxToPositionIdx at the given index. + */ + int getStringIdxToPositionIdx(int index); + + /** + *
+     * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+     * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+     * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+     * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + java.util.List + getPositionsList(); + /** + *
+     * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+     * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+     * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+     * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position getPositions(int index); + /** + *
+     * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+     * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+     * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+     * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + int getPositionsCount(); + /** + *
+     * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+     * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+     * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+     * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + java.util.List + getPositionsOrBuilderList(); + /** + *
+     * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+     * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+     * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+     * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.PositionOrBuilder getPositionsOrBuilder( + int index); + } + /** + * Protobuf type {@code DocumentPositionData} + */ + public static final class DocumentPositionData extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:DocumentPositionData) + DocumentPositionDataOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + DocumentPositionData.class.getName()); + } + // Use DocumentPositionData.newBuilder() to construct. + private DocumentPositionData(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private DocumentPositionData() { + stringIdxToPositionIdx_ = emptyIntList(); + positions_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_DocumentPositionData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_DocumentPositionData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.class, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Builder.class); + } + + public interface PositionOrBuilder extends + // @@protoc_insertion_point(interface_extends:DocumentPositionData.Position) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated float value = 1; + * @return A list containing the value. + */ + java.util.List getValueList(); + /** + * repeated float value = 1; + * @return The count of value. + */ + int getValueCount(); + /** + * repeated float value = 1; + * @param index The index of the element to return. + * @return The value at the given index. + */ + float getValue(int index); + } + /** + *
+     * Definition of a BoundingBox that contains x, y, width, and height.
+     * 
+ * + * Protobuf type {@code DocumentPositionData.Position} + */ + public static final class Position extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:DocumentPositionData.Position) + PositionOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + Position.class.getName()); + } + // Use Position.newBuilder() to construct. + private Position(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private Position() { + value_ = emptyFloatList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_DocumentPositionData_Position_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_DocumentPositionData_Position_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.class, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.Builder.class); + } + + public static final int VALUE_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private com.google.protobuf.Internal.FloatList value_ = + emptyFloatList(); + /** + * repeated float value = 1; + * @return A list containing the value. + */ + @java.lang.Override + public java.util.List + getValueList() { + return value_; + } + /** + * repeated float value = 1; + * @return The count of value. + */ + public int getValueCount() { + return value_.size(); + } + /** + * repeated float value = 1; + * @param index The index of the element to return. + * @return The value at the given index. + */ + public float getValue(int index) { + return value_.getFloat(index); + } + private int valueMemoizedSerializedSize = -1; + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (getValueList().size() > 0) { + output.writeUInt32NoTag(10); + output.writeUInt32NoTag(valueMemoizedSerializedSize); + } + for (int i = 0; i < value_.size(); i++) { + output.writeFloatNoTag(value_.getFloat(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + { + int dataSize = 0; + dataSize = 4 * getValueList().size(); + size += dataSize; + if (!getValueList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + valueMemoizedSerializedSize = dataSize; + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position)) { + return super.equals(obj); + } + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position other = (com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position) obj; + + if (!getValueList() + .equals(other.getValueList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getValueCount() > 0) { + hash = (37 * hash) + VALUE_FIELD_NUMBER; + hash = (53 * hash) + getValueList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+       * Definition of a BoundingBox that contains x, y, width, and height.
+       * 
+ * + * Protobuf type {@code DocumentPositionData.Position} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:DocumentPositionData.Position) + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.PositionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_DocumentPositionData_Position_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_DocumentPositionData_Position_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.class, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.Builder.class); + } + + // Construct using com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + value_ = emptyFloatList(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_DocumentPositionData_Position_descriptor; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position getDefaultInstanceForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.getDefaultInstance(); + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position build() { + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position buildPartial() { + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position result = new com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + value_.makeImmutable(); + result.value_ = value_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position) { + return mergeFrom((com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position other) { + if (other == com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.getDefaultInstance()) return this; + if (!other.value_.isEmpty()) { + if (value_.isEmpty()) { + value_ = other.value_; + value_.makeImmutable(); + bitField0_ |= 0x00000001; + } else { + ensureValueIsMutable(); + value_.addAll(other.value_); + } + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 13: { + float v = input.readFloat(); + ensureValueIsMutable(); + value_.addFloat(v); + break; + } // case 13 + case 10: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + int alloc = length > 4096 ? 4096 : length; + ensureValueIsMutable(alloc / 4); + while (input.getBytesUntilLimit() > 0) { + value_.addFloat(input.readFloat()); + } + input.popLimit(limit); + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private com.google.protobuf.Internal.FloatList value_ = emptyFloatList(); + private void ensureValueIsMutable() { + if (!value_.isModifiable()) { + value_ = makeMutableCopy(value_); + } + bitField0_ |= 0x00000001; + } + private void ensureValueIsMutable(int capacity) { + if (!value_.isModifiable()) { + value_ = makeMutableCopy(value_, capacity); + } + bitField0_ |= 0x00000001; + } + /** + * repeated float value = 1; + * @return A list containing the value. + */ + public java.util.List + getValueList() { + value_.makeImmutable(); + return value_; + } + /** + * repeated float value = 1; + * @return The count of value. + */ + public int getValueCount() { + return value_.size(); + } + /** + * repeated float value = 1; + * @param index The index of the element to return. + * @return The value at the given index. + */ + public float getValue(int index) { + return value_.getFloat(index); + } + /** + * repeated float value = 1; + * @param index The index to set the value at. + * @param value The value to set. + * @return This builder for chaining. + */ + public Builder setValue( + int index, float value) { + + ensureValueIsMutable(); + value_.setFloat(index, value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * repeated float value = 1; + * @param value The value to add. + * @return This builder for chaining. + */ + public Builder addValue(float value) { + + ensureValueIsMutable(); + value_.addFloat(value); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * repeated float value = 1; + * @param values The value to add. + * @return This builder for chaining. + */ + public Builder addAllValue( + java.lang.Iterable values) { + ensureValueIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, value_); + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + * repeated float value = 1; + * @return This builder for chaining. + */ + public Builder clearValue() { + value_ = emptyFloatList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:DocumentPositionData.Position) + } + + // @@protoc_insertion_point(class_scope:DocumentPositionData.Position) + private static final com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position(); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Position parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public static final int ID_FIELD_NUMBER = 1; + private long id_ = 0L; + /** + *
+     * Identifier of the text block.
+     * 
+ * + * int64 id = 1; + * @return The id. + */ + @java.lang.Override + public long getId() { + return id_; + } + + public static final int STRINGIDXTOPOSITIONIDX_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private com.google.protobuf.Internal.IntList stringIdxToPositionIdx_ = + emptyIntList(); + /** + *
+     * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+     * This is required due to the text and position coordinates not being equal.
+     * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @return A list containing the stringIdxToPositionIdx. + */ + @java.lang.Override + public java.util.List + getStringIdxToPositionIdxList() { + return stringIdxToPositionIdx_; + } + /** + *
+     * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+     * This is required due to the text and position coordinates not being equal.
+     * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @return The count of stringIdxToPositionIdx. + */ + public int getStringIdxToPositionIdxCount() { + return stringIdxToPositionIdx_.size(); + } + /** + *
+     * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+     * This is required due to the text and position coordinates not being equal.
+     * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @param index The index of the element to return. + * @return The stringIdxToPositionIdx at the given index. + */ + public int getStringIdxToPositionIdx(int index) { + return stringIdxToPositionIdx_.getInt(index); + } + private int stringIdxToPositionIdxMemoizedSerializedSize = -1; + + public static final int POSITIONS_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private java.util.List positions_; + /** + *
+     * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+     * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+     * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+     * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + @java.lang.Override + public java.util.List getPositionsList() { + return positions_; + } + /** + *
+     * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+     * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+     * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+     * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + @java.lang.Override + public java.util.List + getPositionsOrBuilderList() { + return positions_; + } + /** + *
+     * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+     * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+     * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+     * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + @java.lang.Override + public int getPositionsCount() { + return positions_.size(); + } + /** + *
+     * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+     * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+     * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+     * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position getPositions(int index) { + return positions_.get(index); + } + /** + *
+     * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+     * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+     * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+     * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.PositionOrBuilder getPositionsOrBuilder( + int index) { + return positions_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (id_ != 0L) { + output.writeInt64(1, id_); + } + if (getStringIdxToPositionIdxList().size() > 0) { + output.writeUInt32NoTag(18); + output.writeUInt32NoTag(stringIdxToPositionIdxMemoizedSerializedSize); + } + for (int i = 0; i < stringIdxToPositionIdx_.size(); i++) { + output.writeInt32NoTag(stringIdxToPositionIdx_.getInt(i)); + } + for (int i = 0; i < positions_.size(); i++) { + output.writeMessage(3, positions_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (id_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, id_); + } + { + int dataSize = 0; + for (int i = 0; i < stringIdxToPositionIdx_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(stringIdxToPositionIdx_.getInt(i)); + } + size += dataSize; + if (!getStringIdxToPositionIdxList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + stringIdxToPositionIdxMemoizedSerializedSize = dataSize; + } + for (int i = 0; i < positions_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, positions_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData)) { + return super.equals(obj); + } + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData other = (com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData) obj; + + if (getId() + != other.getId()) return false; + if (!getStringIdxToPositionIdxList() + .equals(other.getStringIdxToPositionIdxList())) return false; + if (!getPositionsList() + .equals(other.getPositionsList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getId()); + if (getStringIdxToPositionIdxCount() > 0) { + hash = (37 * hash) + STRINGIDXTOPOSITIONIDX_FIELD_NUMBER; + hash = (53 * hash) + getStringIdxToPositionIdxList().hashCode(); + } + if (getPositionsCount() > 0) { + hash = (37 * hash) + POSITIONS_FIELD_NUMBER; + hash = (53 * hash) + getPositionsList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code DocumentPositionData} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:DocumentPositionData) + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionDataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_DocumentPositionData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_DocumentPositionData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.class, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Builder.class); + } + + // Construct using com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + id_ = 0L; + stringIdxToPositionIdx_ = emptyIntList(); + if (positionsBuilder_ == null) { + positions_ = java.util.Collections.emptyList(); + } else { + positions_ = null; + positionsBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.internal_static_DocumentPositionData_descriptor; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData getDefaultInstanceForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.getDefaultInstance(); + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData build() { + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData buildPartial() { + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData result = new com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData result) { + if (positionsBuilder_ == null) { + if (((bitField0_ & 0x00000004) != 0)) { + positions_ = java.util.Collections.unmodifiableList(positions_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.positions_ = positions_; + } else { + result.positions_ = positionsBuilder_.build(); + } + } + + private void buildPartial0(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.id_ = id_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + stringIdxToPositionIdx_.makeImmutable(); + result.stringIdxToPositionIdx_ = stringIdxToPositionIdx_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData) { + return mergeFrom((com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData other) { + if (other == com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.getDefaultInstance()) return this; + if (other.getId() != 0L) { + setId(other.getId()); + } + if (!other.stringIdxToPositionIdx_.isEmpty()) { + if (stringIdxToPositionIdx_.isEmpty()) { + stringIdxToPositionIdx_ = other.stringIdxToPositionIdx_; + stringIdxToPositionIdx_.makeImmutable(); + bitField0_ |= 0x00000002; + } else { + ensureStringIdxToPositionIdxIsMutable(); + stringIdxToPositionIdx_.addAll(other.stringIdxToPositionIdx_); + } + onChanged(); + } + if (positionsBuilder_ == null) { + if (!other.positions_.isEmpty()) { + if (positions_.isEmpty()) { + positions_ = other.positions_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensurePositionsIsMutable(); + positions_.addAll(other.positions_); + } + onChanged(); + } + } else { + if (!other.positions_.isEmpty()) { + if (positionsBuilder_.isEmpty()) { + positionsBuilder_.dispose(); + positionsBuilder_ = null; + positions_ = other.positions_; + bitField0_ = (bitField0_ & ~0x00000004); + positionsBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getPositionsFieldBuilder() : null; + } else { + positionsBuilder_.addAllMessages(other.positions_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + id_ = input.readInt64(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + int v = input.readInt32(); + ensureStringIdxToPositionIdxIsMutable(); + stringIdxToPositionIdx_.addInt(v); + break; + } // case 16 + case 18: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + ensureStringIdxToPositionIdxIsMutable(); + while (input.getBytesUntilLimit() > 0) { + stringIdxToPositionIdx_.addInt(input.readInt32()); + } + input.popLimit(limit); + break; + } // case 18 + case 26: { + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position m = + input.readMessage( + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.parser(), + extensionRegistry); + if (positionsBuilder_ == null) { + ensurePositionsIsMutable(); + positions_.add(m); + } else { + positionsBuilder_.addMessage(m); + } + break; + } // case 26 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private long id_ ; + /** + *
+       * Identifier of the text block.
+       * 
+ * + * int64 id = 1; + * @return The id. + */ + @java.lang.Override + public long getId() { + return id_; + } + /** + *
+       * Identifier of the text block.
+       * 
+ * + * int64 id = 1; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(long value) { + + id_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
+       * Identifier of the text block.
+       * 
+ * + * int64 id = 1; + * @return This builder for chaining. + */ + public Builder clearId() { + bitField0_ = (bitField0_ & ~0x00000001); + id_ = 0L; + onChanged(); + return this; + } + + private com.google.protobuf.Internal.IntList stringIdxToPositionIdx_ = emptyIntList(); + private void ensureStringIdxToPositionIdxIsMutable() { + if (!stringIdxToPositionIdx_.isModifiable()) { + stringIdxToPositionIdx_ = makeMutableCopy(stringIdxToPositionIdx_); + } + bitField0_ |= 0x00000002; + } + /** + *
+       * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+       * This is required due to the text and position coordinates not being equal.
+       * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @return A list containing the stringIdxToPositionIdx. + */ + public java.util.List + getStringIdxToPositionIdxList() { + stringIdxToPositionIdx_.makeImmutable(); + return stringIdxToPositionIdx_; + } + /** + *
+       * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+       * This is required due to the text and position coordinates not being equal.
+       * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @return The count of stringIdxToPositionIdx. + */ + public int getStringIdxToPositionIdxCount() { + return stringIdxToPositionIdx_.size(); + } + /** + *
+       * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+       * This is required due to the text and position coordinates not being equal.
+       * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @param index The index of the element to return. + * @return The stringIdxToPositionIdx at the given index. + */ + public int getStringIdxToPositionIdx(int index) { + return stringIdxToPositionIdx_.getInt(index); + } + /** + *
+       * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+       * This is required due to the text and position coordinates not being equal.
+       * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @param index The index to set the value at. + * @param value The stringIdxToPositionIdx to set. + * @return This builder for chaining. + */ + public Builder setStringIdxToPositionIdx( + int index, int value) { + + ensureStringIdxToPositionIdxIsMutable(); + stringIdxToPositionIdx_.setInt(index, value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+       * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+       * This is required due to the text and position coordinates not being equal.
+       * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @param value The stringIdxToPositionIdx to add. + * @return This builder for chaining. + */ + public Builder addStringIdxToPositionIdx(int value) { + + ensureStringIdxToPositionIdxIsMutable(); + stringIdxToPositionIdx_.addInt(value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+       * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+       * This is required due to the text and position coordinates not being equal.
+       * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @param values The stringIdxToPositionIdx to add. + * @return This builder for chaining. + */ + public Builder addAllStringIdxToPositionIdx( + java.lang.Iterable values) { + ensureStringIdxToPositionIdxIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, stringIdxToPositionIdx_); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+       * For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate.
+       * This is required due to the text and position coordinates not being equal.
+       * 
+ * + * repeated int32 stringIdxToPositionIdx = 2; + * @return This builder for chaining. + */ + public Builder clearStringIdxToPositionIdx() { + stringIdxToPositionIdx_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + private java.util.List positions_ = + java.util.Collections.emptyList(); + private void ensurePositionsIsMutable() { + if (!((bitField0_ & 0x00000004) != 0)) { + positions_ = new java.util.ArrayList(positions_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.Builder, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.PositionOrBuilder> positionsBuilder_; + + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public java.util.List getPositionsList() { + if (positionsBuilder_ == null) { + return java.util.Collections.unmodifiableList(positions_); + } else { + return positionsBuilder_.getMessageList(); + } + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public int getPositionsCount() { + if (positionsBuilder_ == null) { + return positions_.size(); + } else { + return positionsBuilder_.getCount(); + } + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position getPositions(int index) { + if (positionsBuilder_ == null) { + return positions_.get(index); + } else { + return positionsBuilder_.getMessage(index); + } + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public Builder setPositions( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position value) { + if (positionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePositionsIsMutable(); + positions_.set(index, value); + onChanged(); + } else { + positionsBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public Builder setPositions( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.Builder builderForValue) { + if (positionsBuilder_ == null) { + ensurePositionsIsMutable(); + positions_.set(index, builderForValue.build()); + onChanged(); + } else { + positionsBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public Builder addPositions(com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position value) { + if (positionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePositionsIsMutable(); + positions_.add(value); + onChanged(); + } else { + positionsBuilder_.addMessage(value); + } + return this; + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public Builder addPositions( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position value) { + if (positionsBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePositionsIsMutable(); + positions_.add(index, value); + onChanged(); + } else { + positionsBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public Builder addPositions( + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.Builder builderForValue) { + if (positionsBuilder_ == null) { + ensurePositionsIsMutable(); + positions_.add(builderForValue.build()); + onChanged(); + } else { + positionsBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public Builder addPositions( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.Builder builderForValue) { + if (positionsBuilder_ == null) { + ensurePositionsIsMutable(); + positions_.add(index, builderForValue.build()); + onChanged(); + } else { + positionsBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public Builder addAllPositions( + java.lang.Iterable values) { + if (positionsBuilder_ == null) { + ensurePositionsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, positions_); + onChanged(); + } else { + positionsBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public Builder clearPositions() { + if (positionsBuilder_ == null) { + positions_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + positionsBuilder_.clear(); + } + return this; + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public Builder removePositions(int index) { + if (positionsBuilder_ == null) { + ensurePositionsIsMutable(); + positions_.remove(index); + onChanged(); + } else { + positionsBuilder_.remove(index); + } + return this; + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.Builder getPositionsBuilder( + int index) { + return getPositionsFieldBuilder().getBuilder(index); + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.PositionOrBuilder getPositionsOrBuilder( + int index) { + if (positionsBuilder_ == null) { + return positions_.get(index); } else { + return positionsBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public java.util.List + getPositionsOrBuilderList() { + if (positionsBuilder_ != null) { + return positionsBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(positions_); + } + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.Builder addPositionsBuilder() { + return getPositionsFieldBuilder().addBuilder( + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.getDefaultInstance()); + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.Builder addPositionsBuilder( + int index) { + return getPositionsFieldBuilder().addBuilder( + index, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.getDefaultInstance()); + } + /** + *
+       * The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block.
+       * The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner.
+       * In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates.
+       * 
+ * + * repeated .DocumentPositionData.Position positions = 3; + */ + public java.util.List + getPositionsBuilderList() { + return getPositionsFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.Builder, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.PositionOrBuilder> + getPositionsFieldBuilder() { + if (positionsBuilder_ == null) { + positionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position.Builder, com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.PositionOrBuilder>( + positions_, + ((bitField0_ & 0x00000004) != 0), + getParentForChildren(), + isClean()); + positions_ = null; + } + return positionsBuilder_; + } + + // @@protoc_insertion_point(builder_scope:DocumentPositionData) + } + + // @@protoc_insertion_point(class_scope:DocumentPositionData) + private static final com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData(); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DocumentPositionData parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_AllDocumentPositionData_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_AllDocumentPositionData_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_DocumentPositionData_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_DocumentPositionData_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_DocumentPositionData_Position_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_DocumentPositionData_Position_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\032DocumentPositionData.proto\"N\n\027AllDocum" + + "entPositionData\0223\n\024documentPositionData\030" + + "\001 \003(\0132\025.DocumentPositionData\"\220\001\n\024Documen" + + "tPositionData\022\n\n\002id\030\001 \001(\003\022\036\n\026stringIdxTo" + + "PositionIdx\030\002 \003(\005\0221\n\tpositions\030\003 \003(\0132\036.D" + + "ocumentPositionData.Position\032\031\n\010Position" + + "\022\r\n\005value\030\001 \003(\002BK\n.com.iqser.red.service" + + ".redaction.v1.server.dataB\031DocumentPosit" + + "ionDataProtob\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_AllDocumentPositionData_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_AllDocumentPositionData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_AllDocumentPositionData_descriptor, + new java.lang.String[] { "DocumentPositionData", }); + internal_static_DocumentPositionData_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_DocumentPositionData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_DocumentPositionData_descriptor, + new java.lang.String[] { "Id", "StringIdxToPositionIdx", "Positions", }); + internal_static_DocumentPositionData_Position_descriptor = + internal_static_DocumentPositionData_descriptor.getNestedTypes().get(0); + internal_static_DocumentPositionData_Position_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_DocumentPositionData_Position_descriptor, + new java.lang.String[] { "Value", }); + descriptor.resolveAllFeaturesImmutable(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentStructureProto.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentStructureProto.java new file mode 100644 index 00000000..4b3e1242 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentStructureProto.java @@ -0,0 +1,694 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: DocumentStructure.proto +// Protobuf Java Version: 4.28.3 + +package com.iqser.red.service.redaction.v1.server.data; + +public final class DocumentStructureProto { + private DocumentStructureProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + DocumentStructureProto.class.getName()); + } + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface DocumentStructureOrBuilder extends + // @@protoc_insertion_point(interface_extends:DocumentStructure) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * The root EntryData represents the Document.
+     * 
+ * + * .EntryData root = 1; + * @return Whether the root field is set. + */ + boolean hasRoot(); + /** + *
+     * The root EntryData represents the Document.
+     * 
+ * + * .EntryData root = 1; + * @return The root. + */ + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData getRoot(); + /** + *
+     * The root EntryData represents the Document.
+     * 
+ * + * .EntryData root = 1; + */ + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder getRootOrBuilder(); + } + /** + * Protobuf type {@code DocumentStructure} + */ + public static final class DocumentStructure extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:DocumentStructure) + DocumentStructureOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + DocumentStructure.class.getName()); + } + // Use DocumentStructure.newBuilder() to construct. + private DocumentStructure(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private DocumentStructure() { + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.internal_static_DocumentStructure_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.internal_static_DocumentStructure_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure.class, com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure.Builder.class); + } + + private int bitField0_; + public static final int ROOT_FIELD_NUMBER = 1; + private com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData root_; + /** + *
+     * The root EntryData represents the Document.
+     * 
+ * + * .EntryData root = 1; + * @return Whether the root field is set. + */ + @java.lang.Override + public boolean hasRoot() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+     * The root EntryData represents the Document.
+     * 
+ * + * .EntryData root = 1; + * @return The root. + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData getRoot() { + return root_ == null ? com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.getDefaultInstance() : root_; + } + /** + *
+     * The root EntryData represents the Document.
+     * 
+ * + * .EntryData root = 1; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder getRootOrBuilder() { + return root_ == null ? com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.getDefaultInstance() : root_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getRoot()); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getRoot()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure)) { + return super.equals(obj); + } + com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure other = (com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure) obj; + + if (hasRoot() != other.hasRoot()) return false; + if (hasRoot()) { + if (!getRoot() + .equals(other.getRoot())) return false; + } + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasRoot()) { + hash = (37 * hash) + ROOT_FIELD_NUMBER; + hash = (53 * hash) + getRoot().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code DocumentStructure} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:DocumentStructure) + com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructureOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.internal_static_DocumentStructure_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.internal_static_DocumentStructure_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure.class, com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure.Builder.class); + } + + // Construct using com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage + .alwaysUseFieldBuilders) { + getRootFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + root_ = null; + if (rootBuilder_ != null) { + rootBuilder_.dispose(); + rootBuilder_ = null; + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.internal_static_DocumentStructure_descriptor; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure getDefaultInstanceForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure.getDefaultInstance(); + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure build() { + com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure buildPartial() { + com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure result = new com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure result) { + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.root_ = rootBuilder_ == null + ? root_ + : rootBuilder_.build(); + to_bitField0_ |= 0x00000001; + } + result.bitField0_ |= to_bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure) { + return mergeFrom((com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure other) { + if (other == com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure.getDefaultInstance()) return this; + if (other.hasRoot()) { + mergeRoot(other.getRoot()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + input.readMessage( + getRootFieldBuilder().getBuilder(), + extensionRegistry); + bitField0_ |= 0x00000001; + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData root_; + private com.google.protobuf.SingleFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder> rootBuilder_; + /** + *
+       * The root EntryData represents the Document.
+       * 
+ * + * .EntryData root = 1; + * @return Whether the root field is set. + */ + public boolean hasRoot() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+       * The root EntryData represents the Document.
+       * 
+ * + * .EntryData root = 1; + * @return The root. + */ + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData getRoot() { + if (rootBuilder_ == null) { + return root_ == null ? com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.getDefaultInstance() : root_; + } else { + return rootBuilder_.getMessage(); + } + } + /** + *
+       * The root EntryData represents the Document.
+       * 
+ * + * .EntryData root = 1; + */ + public Builder setRoot(com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData value) { + if (rootBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + root_ = value; + } else { + rootBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
+       * The root EntryData represents the Document.
+       * 
+ * + * .EntryData root = 1; + */ + public Builder setRoot( + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder builderForValue) { + if (rootBuilder_ == null) { + root_ = builderForValue.build(); + } else { + rootBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
+       * The root EntryData represents the Document.
+       * 
+ * + * .EntryData root = 1; + */ + public Builder mergeRoot(com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData value) { + if (rootBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) && + root_ != null && + root_ != com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.getDefaultInstance()) { + getRootBuilder().mergeFrom(value); + } else { + root_ = value; + } + } else { + rootBuilder_.mergeFrom(value); + } + if (root_ != null) { + bitField0_ |= 0x00000001; + onChanged(); + } + return this; + } + /** + *
+       * The root EntryData represents the Document.
+       * 
+ * + * .EntryData root = 1; + */ + public Builder clearRoot() { + bitField0_ = (bitField0_ & ~0x00000001); + root_ = null; + if (rootBuilder_ != null) { + rootBuilder_.dispose(); + rootBuilder_ = null; + } + onChanged(); + return this; + } + /** + *
+       * The root EntryData represents the Document.
+       * 
+ * + * .EntryData root = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder getRootBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getRootFieldBuilder().getBuilder(); + } + /** + *
+       * The root EntryData represents the Document.
+       * 
+ * + * .EntryData root = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder getRootOrBuilder() { + if (rootBuilder_ != null) { + return rootBuilder_.getMessageOrBuilder(); + } else { + return root_ == null ? + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.getDefaultInstance() : root_; + } + } + /** + *
+       * The root EntryData represents the Document.
+       * 
+ * + * .EntryData root = 1; + */ + private com.google.protobuf.SingleFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder> + getRootFieldBuilder() { + if (rootBuilder_ == null) { + rootBuilder_ = new com.google.protobuf.SingleFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder>( + getRoot(), + getParentForChildren(), + isClean()); + root_ = null; + } + return rootBuilder_; + } + + // @@protoc_insertion_point(builder_scope:DocumentStructure) + } + + // @@protoc_insertion_point(class_scope:DocumentStructure) + private static final com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure(); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DocumentStructure parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_DocumentStructure_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_DocumentStructure_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\027DocumentStructure.proto\032\017EntryData.pro" + + "to\"-\n\021DocumentStructure\022\030\n\004root\030\001 \001(\0132\n." + + "EntryDataBH\n.com.iqser.red.service.redac" + + "tion.v1.server.dataB\026DocumentStructurePr" + + "otob\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.getDescriptor(), + }); + internal_static_DocumentStructure_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_DocumentStructure_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_DocumentStructure_descriptor, + new java.lang.String[] { "Root", }); + descriptor.resolveAllFeaturesImmutable(); + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentStructureWrapper.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentStructureWrapper.java new file mode 100644 index 00000000..f6c91d4a --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentStructureWrapper.java @@ -0,0 +1,115 @@ +package com.iqser.red.service.redaction.v1.server.data; + +import static com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure; +import static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData; + +import java.awt.geom.Rectangle2D; +import java.io.Serializable; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class DocumentStructureWrapper implements Serializable { + + private final DocumentStructure documentStructure; + + public static class TableProperties implements Serializable { + + public static final String NUMBER_OF_ROWS = "numberOfRows"; + public static final String NUMBER_OF_COLS = "numberOfCols"; + + } + + public static class ImageProperties implements Serializable { + + public static final String TRANSPARENT = "transparent"; + public static final String IMAGE_TYPE = "imageType"; + public static final String POSITION = "position"; + public static final String ID = "id"; + + public static final String REPRESENTATION_HASH = "representationHash"; + + } + + public static class TableCellProperties implements Serializable { + + public static final String B_BOX = "bBox"; + public static final String ROW = "row"; + public static final String COL = "col"; + public static final String HEADER = "header"; + + } + + public static class DuplicateParagraphProperties implements Serializable { + + public static final String UNSORTED_TEXTBLOCK_ID = "utbid"; + + } + + public static final String RECTANGLE_DELIMITER = ";"; + + + public static Rectangle2D parseRectangle2D(String bBox) { + + List floats = Arrays.stream(bBox.split(RECTANGLE_DELIMITER)) + .map(Float::parseFloat) + .toList(); + return new Rectangle2D.Float(floats.get(0), floats.get(1), floats.get(2), floats.get(3)); + } + + + public static double[] parseRepresentationVector(String representationHash) { + + String[] stringArray = representationHash.split("[,\\s]+"); + double[] doubleArray = new double[stringArray.length]; + for (int i = 0; i < stringArray.length; i++) { + doubleArray[i] = Double.parseDouble(stringArray[i]); + } + + return doubleArray; + } + + + public EntryData get(List tocId) { + + if (tocId.isEmpty()) { + return documentStructure.getRoot(); + } + EntryData entry = documentStructure.getRoot().getChildrenList() + .get(tocId.get(0)); + for (int id : tocId.subList(1, tocId.size())) { + entry = entry.getChildrenList() + .get(id); + } + return entry; + } + + + public Stream streamAllEntries() { + + return flatten(documentStructure.getRoot()); + } + + + public String toString() { + + return String.join("\n", + streamAllEntries().map(EntryData::toString) + .toList()); + } + + + private static Stream flatten(EntryData entry) { + + return Stream.concat(Stream.of(entry), + entry.getChildrenList() + .stream() + .flatMap(DocumentStructureWrapper::flatten)); + } + +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentTextDataProto.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentTextDataProto.java new file mode 100644 index 00000000..5f9797d0 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/DocumentTextDataProto.java @@ -0,0 +1,3048 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: DocumentTextData.proto +// Protobuf Java Version: 4.28.3 + +package com.iqser.red.service.redaction.v1.server.data; + +public final class DocumentTextDataProto { + private DocumentTextDataProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + DocumentTextDataProto.class.getName()); + } + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface AllDocumentTextDataOrBuilder extends + // @@protoc_insertion_point(interface_extends:AllDocumentTextData) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .DocumentTextData documentTextData = 1; + */ + java.util.List + getDocumentTextDataList(); + /** + * repeated .DocumentTextData documentTextData = 1; + */ + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData getDocumentTextData(int index); + /** + * repeated .DocumentTextData documentTextData = 1; + */ + int getDocumentTextDataCount(); + /** + * repeated .DocumentTextData documentTextData = 1; + */ + java.util.List + getDocumentTextDataOrBuilderList(); + /** + * repeated .DocumentTextData documentTextData = 1; + */ + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextDataOrBuilder getDocumentTextDataOrBuilder( + int index); + } + /** + * Protobuf type {@code AllDocumentTextData} + */ + public static final class AllDocumentTextData extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:AllDocumentTextData) + AllDocumentTextDataOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + AllDocumentTextData.class.getName()); + } + // Use AllDocumentTextData.newBuilder() to construct. + private AllDocumentTextData(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private AllDocumentTextData() { + documentTextData_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.internal_static_AllDocumentTextData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.internal_static_AllDocumentTextData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData.class, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData.Builder.class); + } + + public static final int DOCUMENTTEXTDATA_FIELD_NUMBER = 1; + @SuppressWarnings("serial") + private java.util.List documentTextData_; + /** + * repeated .DocumentTextData documentTextData = 1; + */ + @java.lang.Override + public java.util.List getDocumentTextDataList() { + return documentTextData_; + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + @java.lang.Override + public java.util.List + getDocumentTextDataOrBuilderList() { + return documentTextData_; + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + @java.lang.Override + public int getDocumentTextDataCount() { + return documentTextData_.size(); + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData getDocumentTextData(int index) { + return documentTextData_.get(index); + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextDataOrBuilder getDocumentTextDataOrBuilder( + int index) { + return documentTextData_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < documentTextData_.size(); i++) { + output.writeMessage(1, documentTextData_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < documentTextData_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, documentTextData_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData)) { + return super.equals(obj); + } + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData other = (com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData) obj; + + if (!getDocumentTextDataList() + .equals(other.getDocumentTextDataList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getDocumentTextDataCount() > 0) { + hash = (37 * hash) + DOCUMENTTEXTDATA_FIELD_NUMBER; + hash = (53 * hash) + getDocumentTextDataList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code AllDocumentTextData} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:AllDocumentTextData) + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextDataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.internal_static_AllDocumentTextData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.internal_static_AllDocumentTextData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData.class, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData.Builder.class); + } + + // Construct using com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + if (documentTextDataBuilder_ == null) { + documentTextData_ = java.util.Collections.emptyList(); + } else { + documentTextData_ = null; + documentTextDataBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.internal_static_AllDocumentTextData_descriptor; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData getDefaultInstanceForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData.getDefaultInstance(); + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData build() { + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData buildPartial() { + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData result = new com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData result) { + if (documentTextDataBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + documentTextData_ = java.util.Collections.unmodifiableList(documentTextData_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.documentTextData_ = documentTextData_; + } else { + result.documentTextData_ = documentTextDataBuilder_.build(); + } + } + + private void buildPartial0(com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData result) { + int from_bitField0_ = bitField0_; + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData) { + return mergeFrom((com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData other) { + if (other == com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData.getDefaultInstance()) return this; + if (documentTextDataBuilder_ == null) { + if (!other.documentTextData_.isEmpty()) { + if (documentTextData_.isEmpty()) { + documentTextData_ = other.documentTextData_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureDocumentTextDataIsMutable(); + documentTextData_.addAll(other.documentTextData_); + } + onChanged(); + } + } else { + if (!other.documentTextData_.isEmpty()) { + if (documentTextDataBuilder_.isEmpty()) { + documentTextDataBuilder_.dispose(); + documentTextDataBuilder_ = null; + documentTextData_ = other.documentTextData_; + bitField0_ = (bitField0_ & ~0x00000001); + documentTextDataBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getDocumentTextDataFieldBuilder() : null; + } else { + documentTextDataBuilder_.addAllMessages(other.documentTextData_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData m = + input.readMessage( + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.parser(), + extensionRegistry); + if (documentTextDataBuilder_ == null) { + ensureDocumentTextDataIsMutable(); + documentTextData_.add(m); + } else { + documentTextDataBuilder_.addMessage(m); + } + break; + } // case 10 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private java.util.List documentTextData_ = + java.util.Collections.emptyList(); + private void ensureDocumentTextDataIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + documentTextData_ = new java.util.ArrayList(documentTextData_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.Builder, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextDataOrBuilder> documentTextDataBuilder_; + + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public java.util.List getDocumentTextDataList() { + if (documentTextDataBuilder_ == null) { + return java.util.Collections.unmodifiableList(documentTextData_); + } else { + return documentTextDataBuilder_.getMessageList(); + } + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public int getDocumentTextDataCount() { + if (documentTextDataBuilder_ == null) { + return documentTextData_.size(); + } else { + return documentTextDataBuilder_.getCount(); + } + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData getDocumentTextData(int index) { + if (documentTextDataBuilder_ == null) { + return documentTextData_.get(index); + } else { + return documentTextDataBuilder_.getMessage(index); + } + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public Builder setDocumentTextData( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData value) { + if (documentTextDataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDocumentTextDataIsMutable(); + documentTextData_.set(index, value); + onChanged(); + } else { + documentTextDataBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public Builder setDocumentTextData( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.Builder builderForValue) { + if (documentTextDataBuilder_ == null) { + ensureDocumentTextDataIsMutable(); + documentTextData_.set(index, builderForValue.build()); + onChanged(); + } else { + documentTextDataBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public Builder addDocumentTextData(com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData value) { + if (documentTextDataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDocumentTextDataIsMutable(); + documentTextData_.add(value); + onChanged(); + } else { + documentTextDataBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public Builder addDocumentTextData( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData value) { + if (documentTextDataBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureDocumentTextDataIsMutable(); + documentTextData_.add(index, value); + onChanged(); + } else { + documentTextDataBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public Builder addDocumentTextData( + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.Builder builderForValue) { + if (documentTextDataBuilder_ == null) { + ensureDocumentTextDataIsMutable(); + documentTextData_.add(builderForValue.build()); + onChanged(); + } else { + documentTextDataBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public Builder addDocumentTextData( + int index, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.Builder builderForValue) { + if (documentTextDataBuilder_ == null) { + ensureDocumentTextDataIsMutable(); + documentTextData_.add(index, builderForValue.build()); + onChanged(); + } else { + documentTextDataBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public Builder addAllDocumentTextData( + java.lang.Iterable values) { + if (documentTextDataBuilder_ == null) { + ensureDocumentTextDataIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, documentTextData_); + onChanged(); + } else { + documentTextDataBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public Builder clearDocumentTextData() { + if (documentTextDataBuilder_ == null) { + documentTextData_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + documentTextDataBuilder_.clear(); + } + return this; + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public Builder removeDocumentTextData(int index) { + if (documentTextDataBuilder_ == null) { + ensureDocumentTextDataIsMutable(); + documentTextData_.remove(index); + onChanged(); + } else { + documentTextDataBuilder_.remove(index); + } + return this; + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.Builder getDocumentTextDataBuilder( + int index) { + return getDocumentTextDataFieldBuilder().getBuilder(index); + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextDataOrBuilder getDocumentTextDataOrBuilder( + int index) { + if (documentTextDataBuilder_ == null) { + return documentTextData_.get(index); } else { + return documentTextDataBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public java.util.List + getDocumentTextDataOrBuilderList() { + if (documentTextDataBuilder_ != null) { + return documentTextDataBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(documentTextData_); + } + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.Builder addDocumentTextDataBuilder() { + return getDocumentTextDataFieldBuilder().addBuilder( + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.getDefaultInstance()); + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.Builder addDocumentTextDataBuilder( + int index) { + return getDocumentTextDataFieldBuilder().addBuilder( + index, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.getDefaultInstance()); + } + /** + * repeated .DocumentTextData documentTextData = 1; + */ + public java.util.List + getDocumentTextDataBuilderList() { + return getDocumentTextDataFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.Builder, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextDataOrBuilder> + getDocumentTextDataFieldBuilder() { + if (documentTextDataBuilder_ == null) { + documentTextDataBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.Builder, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextDataOrBuilder>( + documentTextData_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + documentTextData_ = null; + } + return documentTextDataBuilder_; + } + + // @@protoc_insertion_point(builder_scope:AllDocumentTextData) + } + + // @@protoc_insertion_point(class_scope:AllDocumentTextData) + private static final com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData(); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public AllDocumentTextData parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DocumentTextDataOrBuilder extends + // @@protoc_insertion_point(interface_extends:DocumentTextData) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * Identifier of the text block.
+     * 
+ * + * int64 id = 1; + * @return The id. + */ + long getId(); + + /** + *
+     * The page the text block occurs on.
+     * 
+ * + * int64 page = 2; + * @return The page. + */ + long getPage(); + + /** + *
+     * The text of the text block.
+     * 
+ * + * string searchText = 3; + * @return The searchText. + */ + java.lang.String getSearchText(); + /** + *
+     * The text of the text block.
+     * 
+ * + * string searchText = 3; + * @return The bytes for searchText. + */ + com.google.protobuf.ByteString + getSearchTextBytes(); + + /** + *
+     * Each text block is assigned a number on a page, starting from 0.
+     * 
+ * + * int32 numberOnPage = 4; + * @return The numberOnPage. + */ + int getNumberOnPage(); + + /** + *
+     * The text blocks are ordered, this number represents the start of the text block as a string offset.
+     * 
+ * + * int32 start = 5; + * @return The start. + */ + int getStart(); + + /** + *
+     * The text blocks are ordered, this number represents the end of the text block as a string offset.
+     * 
+ * + * int32 end = 6; + * @return The end. + */ + int getEnd(); + + /** + *
+     * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+     * 
+ * + * repeated int32 lineBreaks = 7; + * @return A list containing the lineBreaks. + */ + java.util.List getLineBreaksList(); + /** + *
+     * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+     * 
+ * + * repeated int32 lineBreaks = 7; + * @return The count of lineBreaks. + */ + int getLineBreaksCount(); + /** + *
+     * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+     * 
+ * + * repeated int32 lineBreaks = 7; + * @param index The index of the element to return. + * @return The lineBreaks at the given index. + */ + int getLineBreaks(int index); + + /** + *
+     * The text ranges where the text is italic
+     * 
+ * + * repeated .Range italicTextRanges = 8; + */ + java.util.List + getItalicTextRangesList(); + /** + *
+     * The text ranges where the text is italic
+     * 
+ * + * repeated .Range italicTextRanges = 8; + */ + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range getItalicTextRanges(int index); + /** + *
+     * The text ranges where the text is italic
+     * 
+ * + * repeated .Range italicTextRanges = 8; + */ + int getItalicTextRangesCount(); + /** + *
+     * The text ranges where the text is italic
+     * 
+ * + * repeated .Range italicTextRanges = 8; + */ + java.util.List + getItalicTextRangesOrBuilderList(); + /** + *
+     * The text ranges where the text is italic
+     * 
+ * + * repeated .Range italicTextRanges = 8; + */ + com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder getItalicTextRangesOrBuilder( + int index); + + /** + *
+     * The text ranges where the text is bold
+     * 
+ * + * repeated .Range boldTextRanges = 9; + */ + java.util.List + getBoldTextRangesList(); + /** + *
+     * The text ranges where the text is bold
+     * 
+ * + * repeated .Range boldTextRanges = 9; + */ + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range getBoldTextRanges(int index); + /** + *
+     * The text ranges where the text is bold
+     * 
+ * + * repeated .Range boldTextRanges = 9; + */ + int getBoldTextRangesCount(); + /** + *
+     * The text ranges where the text is bold
+     * 
+ * + * repeated .Range boldTextRanges = 9; + */ + java.util.List + getBoldTextRangesOrBuilderList(); + /** + *
+     * The text ranges where the text is bold
+     * 
+ * + * repeated .Range boldTextRanges = 9; + */ + com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder getBoldTextRangesOrBuilder( + int index); + } + /** + * Protobuf type {@code DocumentTextData} + */ + public static final class DocumentTextData extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:DocumentTextData) + DocumentTextDataOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + DocumentTextData.class.getName()); + } + // Use DocumentTextData.newBuilder() to construct. + private DocumentTextData(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private DocumentTextData() { + searchText_ = ""; + lineBreaks_ = emptyIntList(); + italicTextRanges_ = java.util.Collections.emptyList(); + boldTextRanges_ = java.util.Collections.emptyList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.internal_static_DocumentTextData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.internal_static_DocumentTextData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.class, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.Builder.class); + } + + public static final int ID_FIELD_NUMBER = 1; + private long id_ = 0L; + /** + *
+     * Identifier of the text block.
+     * 
+ * + * int64 id = 1; + * @return The id. + */ + @java.lang.Override + public long getId() { + return id_; + } + + public static final int PAGE_FIELD_NUMBER = 2; + private long page_ = 0L; + /** + *
+     * The page the text block occurs on.
+     * 
+ * + * int64 page = 2; + * @return The page. + */ + @java.lang.Override + public long getPage() { + return page_; + } + + public static final int SEARCHTEXT_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private volatile java.lang.Object searchText_ = ""; + /** + *
+     * The text of the text block.
+     * 
+ * + * string searchText = 3; + * @return The searchText. + */ + @java.lang.Override + public java.lang.String getSearchText() { + java.lang.Object ref = searchText_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + searchText_ = s; + return s; + } + } + /** + *
+     * The text of the text block.
+     * 
+ * + * string searchText = 3; + * @return The bytes for searchText. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getSearchTextBytes() { + java.lang.Object ref = searchText_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + searchText_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int NUMBERONPAGE_FIELD_NUMBER = 4; + private int numberOnPage_ = 0; + /** + *
+     * Each text block is assigned a number on a page, starting from 0.
+     * 
+ * + * int32 numberOnPage = 4; + * @return The numberOnPage. + */ + @java.lang.Override + public int getNumberOnPage() { + return numberOnPage_; + } + + public static final int START_FIELD_NUMBER = 5; + private int start_ = 0; + /** + *
+     * The text blocks are ordered, this number represents the start of the text block as a string offset.
+     * 
+ * + * int32 start = 5; + * @return The start. + */ + @java.lang.Override + public int getStart() { + return start_; + } + + public static final int END_FIELD_NUMBER = 6; + private int end_ = 0; + /** + *
+     * The text blocks are ordered, this number represents the end of the text block as a string offset.
+     * 
+ * + * int32 end = 6; + * @return The end. + */ + @java.lang.Override + public int getEnd() { + return end_; + } + + public static final int LINEBREAKS_FIELD_NUMBER = 7; + @SuppressWarnings("serial") + private com.google.protobuf.Internal.IntList lineBreaks_ = + emptyIntList(); + /** + *
+     * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+     * 
+ * + * repeated int32 lineBreaks = 7; + * @return A list containing the lineBreaks. + */ + @java.lang.Override + public java.util.List + getLineBreaksList() { + return lineBreaks_; + } + /** + *
+     * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+     * 
+ * + * repeated int32 lineBreaks = 7; + * @return The count of lineBreaks. + */ + public int getLineBreaksCount() { + return lineBreaks_.size(); + } + /** + *
+     * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+     * 
+ * + * repeated int32 lineBreaks = 7; + * @param index The index of the element to return. + * @return The lineBreaks at the given index. + */ + public int getLineBreaks(int index) { + return lineBreaks_.getInt(index); + } + private int lineBreaksMemoizedSerializedSize = -1; + + public static final int ITALICTEXTRANGES_FIELD_NUMBER = 8; + @SuppressWarnings("serial") + private java.util.List italicTextRanges_; + /** + *
+     * The text ranges where the text is italic
+     * 
+ * + * repeated .Range italicTextRanges = 8; + */ + @java.lang.Override + public java.util.List getItalicTextRangesList() { + return italicTextRanges_; + } + /** + *
+     * The text ranges where the text is italic
+     * 
+ * + * repeated .Range italicTextRanges = 8; + */ + @java.lang.Override + public java.util.List + getItalicTextRangesOrBuilderList() { + return italicTextRanges_; + } + /** + *
+     * The text ranges where the text is italic
+     * 
+ * + * repeated .Range italicTextRanges = 8; + */ + @java.lang.Override + public int getItalicTextRangesCount() { + return italicTextRanges_.size(); + } + /** + *
+     * The text ranges where the text is italic
+     * 
+ * + * repeated .Range italicTextRanges = 8; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range getItalicTextRanges(int index) { + return italicTextRanges_.get(index); + } + /** + *
+     * The text ranges where the text is italic
+     * 
+ * + * repeated .Range italicTextRanges = 8; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder getItalicTextRangesOrBuilder( + int index) { + return italicTextRanges_.get(index); + } + + public static final int BOLDTEXTRANGES_FIELD_NUMBER = 9; + @SuppressWarnings("serial") + private java.util.List boldTextRanges_; + /** + *
+     * The text ranges where the text is bold
+     * 
+ * + * repeated .Range boldTextRanges = 9; + */ + @java.lang.Override + public java.util.List getBoldTextRangesList() { + return boldTextRanges_; + } + /** + *
+     * The text ranges where the text is bold
+     * 
+ * + * repeated .Range boldTextRanges = 9; + */ + @java.lang.Override + public java.util.List + getBoldTextRangesOrBuilderList() { + return boldTextRanges_; + } + /** + *
+     * The text ranges where the text is bold
+     * 
+ * + * repeated .Range boldTextRanges = 9; + */ + @java.lang.Override + public int getBoldTextRangesCount() { + return boldTextRanges_.size(); + } + /** + *
+     * The text ranges where the text is bold
+     * 
+ * + * repeated .Range boldTextRanges = 9; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range getBoldTextRanges(int index) { + return boldTextRanges_.get(index); + } + /** + *
+     * The text ranges where the text is bold
+     * 
+ * + * repeated .Range boldTextRanges = 9; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder getBoldTextRangesOrBuilder( + int index) { + return boldTextRanges_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (id_ != 0L) { + output.writeInt64(1, id_); + } + if (page_ != 0L) { + output.writeInt64(2, page_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(searchText_)) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, searchText_); + } + if (numberOnPage_ != 0) { + output.writeInt32(4, numberOnPage_); + } + if (start_ != 0) { + output.writeInt32(5, start_); + } + if (end_ != 0) { + output.writeInt32(6, end_); + } + if (getLineBreaksList().size() > 0) { + output.writeUInt32NoTag(58); + output.writeUInt32NoTag(lineBreaksMemoizedSerializedSize); + } + for (int i = 0; i < lineBreaks_.size(); i++) { + output.writeInt32NoTag(lineBreaks_.getInt(i)); + } + for (int i = 0; i < italicTextRanges_.size(); i++) { + output.writeMessage(8, italicTextRanges_.get(i)); + } + for (int i = 0; i < boldTextRanges_.size(); i++) { + output.writeMessage(9, boldTextRanges_.get(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (id_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, id_); + } + if (page_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, page_); + } + if (!com.google.protobuf.GeneratedMessage.isStringEmpty(searchText_)) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, searchText_); + } + if (numberOnPage_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, numberOnPage_); + } + if (start_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(5, start_); + } + if (end_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(6, end_); + } + { + int dataSize = 0; + for (int i = 0; i < lineBreaks_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(lineBreaks_.getInt(i)); + } + size += dataSize; + if (!getLineBreaksList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + lineBreaksMemoizedSerializedSize = dataSize; + } + for (int i = 0; i < italicTextRanges_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(8, italicTextRanges_.get(i)); + } + for (int i = 0; i < boldTextRanges_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(9, boldTextRanges_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData)) { + return super.equals(obj); + } + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData other = (com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData) obj; + + if (getId() + != other.getId()) return false; + if (getPage() + != other.getPage()) return false; + if (!getSearchText() + .equals(other.getSearchText())) return false; + if (getNumberOnPage() + != other.getNumberOnPage()) return false; + if (getStart() + != other.getStart()) return false; + if (getEnd() + != other.getEnd()) return false; + if (!getLineBreaksList() + .equals(other.getLineBreaksList())) return false; + if (!getItalicTextRangesList() + .equals(other.getItalicTextRangesList())) return false; + if (!getBoldTextRangesList() + .equals(other.getBoldTextRangesList())) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getId()); + hash = (37 * hash) + PAGE_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getPage()); + hash = (37 * hash) + SEARCHTEXT_FIELD_NUMBER; + hash = (53 * hash) + getSearchText().hashCode(); + hash = (37 * hash) + NUMBERONPAGE_FIELD_NUMBER; + hash = (53 * hash) + getNumberOnPage(); + hash = (37 * hash) + START_FIELD_NUMBER; + hash = (53 * hash) + getStart(); + hash = (37 * hash) + END_FIELD_NUMBER; + hash = (53 * hash) + getEnd(); + if (getLineBreaksCount() > 0) { + hash = (37 * hash) + LINEBREAKS_FIELD_NUMBER; + hash = (53 * hash) + getLineBreaksList().hashCode(); + } + if (getItalicTextRangesCount() > 0) { + hash = (37 * hash) + ITALICTEXTRANGES_FIELD_NUMBER; + hash = (53 * hash) + getItalicTextRangesList().hashCode(); + } + if (getBoldTextRangesCount() > 0) { + hash = (37 * hash) + BOLDTEXTRANGES_FIELD_NUMBER; + hash = (53 * hash) + getBoldTextRangesList().hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code DocumentTextData} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:DocumentTextData) + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextDataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.internal_static_DocumentTextData_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.internal_static_DocumentTextData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.class, com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.Builder.class); + } + + // Construct using com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + id_ = 0L; + page_ = 0L; + searchText_ = ""; + numberOnPage_ = 0; + start_ = 0; + end_ = 0; + lineBreaks_ = emptyIntList(); + if (italicTextRangesBuilder_ == null) { + italicTextRanges_ = java.util.Collections.emptyList(); + } else { + italicTextRanges_ = null; + italicTextRangesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000080); + if (boldTextRangesBuilder_ == null) { + boldTextRanges_ = java.util.Collections.emptyList(); + } else { + boldTextRanges_ = null; + boldTextRangesBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000100); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.internal_static_DocumentTextData_descriptor; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData getDefaultInstanceForType() { + return com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.getDefaultInstance(); + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData build() { + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData buildPartial() { + com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData result = new com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData result) { + if (italicTextRangesBuilder_ == null) { + if (((bitField0_ & 0x00000080) != 0)) { + italicTextRanges_ = java.util.Collections.unmodifiableList(italicTextRanges_); + bitField0_ = (bitField0_ & ~0x00000080); + } + result.italicTextRanges_ = italicTextRanges_; + } else { + result.italicTextRanges_ = italicTextRangesBuilder_.build(); + } + if (boldTextRangesBuilder_ == null) { + if (((bitField0_ & 0x00000100) != 0)) { + boldTextRanges_ = java.util.Collections.unmodifiableList(boldTextRanges_); + bitField0_ = (bitField0_ & ~0x00000100); + } + result.boldTextRanges_ = boldTextRanges_; + } else { + result.boldTextRanges_ = boldTextRangesBuilder_.build(); + } + } + + private void buildPartial0(com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.id_ = id_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.page_ = page_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.searchText_ = searchText_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + result.numberOnPage_ = numberOnPage_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.start_ = start_; + } + if (((from_bitField0_ & 0x00000020) != 0)) { + result.end_ = end_; + } + if (((from_bitField0_ & 0x00000040) != 0)) { + lineBreaks_.makeImmutable(); + result.lineBreaks_ = lineBreaks_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData) { + return mergeFrom((com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData other) { + if (other == com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData.getDefaultInstance()) return this; + if (other.getId() != 0L) { + setId(other.getId()); + } + if (other.getPage() != 0L) { + setPage(other.getPage()); + } + if (!other.getSearchText().isEmpty()) { + searchText_ = other.searchText_; + bitField0_ |= 0x00000004; + onChanged(); + } + if (other.getNumberOnPage() != 0) { + setNumberOnPage(other.getNumberOnPage()); + } + if (other.getStart() != 0) { + setStart(other.getStart()); + } + if (other.getEnd() != 0) { + setEnd(other.getEnd()); + } + if (!other.lineBreaks_.isEmpty()) { + if (lineBreaks_.isEmpty()) { + lineBreaks_ = other.lineBreaks_; + lineBreaks_.makeImmutable(); + bitField0_ |= 0x00000040; + } else { + ensureLineBreaksIsMutable(); + lineBreaks_.addAll(other.lineBreaks_); + } + onChanged(); + } + if (italicTextRangesBuilder_ == null) { + if (!other.italicTextRanges_.isEmpty()) { + if (italicTextRanges_.isEmpty()) { + italicTextRanges_ = other.italicTextRanges_; + bitField0_ = (bitField0_ & ~0x00000080); + } else { + ensureItalicTextRangesIsMutable(); + italicTextRanges_.addAll(other.italicTextRanges_); + } + onChanged(); + } + } else { + if (!other.italicTextRanges_.isEmpty()) { + if (italicTextRangesBuilder_.isEmpty()) { + italicTextRangesBuilder_.dispose(); + italicTextRangesBuilder_ = null; + italicTextRanges_ = other.italicTextRanges_; + bitField0_ = (bitField0_ & ~0x00000080); + italicTextRangesBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getItalicTextRangesFieldBuilder() : null; + } else { + italicTextRangesBuilder_.addAllMessages(other.italicTextRanges_); + } + } + } + if (boldTextRangesBuilder_ == null) { + if (!other.boldTextRanges_.isEmpty()) { + if (boldTextRanges_.isEmpty()) { + boldTextRanges_ = other.boldTextRanges_; + bitField0_ = (bitField0_ & ~0x00000100); + } else { + ensureBoldTextRangesIsMutable(); + boldTextRanges_.addAll(other.boldTextRanges_); + } + onChanged(); + } + } else { + if (!other.boldTextRanges_.isEmpty()) { + if (boldTextRangesBuilder_.isEmpty()) { + boldTextRangesBuilder_.dispose(); + boldTextRangesBuilder_ = null; + boldTextRanges_ = other.boldTextRanges_; + bitField0_ = (bitField0_ & ~0x00000100); + boldTextRangesBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getBoldTextRangesFieldBuilder() : null; + } else { + boldTextRangesBuilder_.addAllMessages(other.boldTextRanges_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + id_ = input.readInt64(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + page_ = input.readInt64(); + bitField0_ |= 0x00000002; + break; + } // case 16 + case 26: { + searchText_ = input.readStringRequireUtf8(); + bitField0_ |= 0x00000004; + break; + } // case 26 + case 32: { + numberOnPage_ = input.readInt32(); + bitField0_ |= 0x00000008; + break; + } // case 32 + case 40: { + start_ = input.readInt32(); + bitField0_ |= 0x00000010; + break; + } // case 40 + case 48: { + end_ = input.readInt32(); + bitField0_ |= 0x00000020; + break; + } // case 48 + case 56: { + int v = input.readInt32(); + ensureLineBreaksIsMutable(); + lineBreaks_.addInt(v); + break; + } // case 56 + case 58: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + ensureLineBreaksIsMutable(); + while (input.getBytesUntilLimit() > 0) { + lineBreaks_.addInt(input.readInt32()); + } + input.popLimit(limit); + break; + } // case 58 + case 66: { + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range m = + input.readMessage( + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.parser(), + extensionRegistry); + if (italicTextRangesBuilder_ == null) { + ensureItalicTextRangesIsMutable(); + italicTextRanges_.add(m); + } else { + italicTextRangesBuilder_.addMessage(m); + } + break; + } // case 66 + case 74: { + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range m = + input.readMessage( + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.parser(), + extensionRegistry); + if (boldTextRangesBuilder_ == null) { + ensureBoldTextRangesIsMutable(); + boldTextRanges_.add(m); + } else { + boldTextRangesBuilder_.addMessage(m); + } + break; + } // case 74 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private long id_ ; + /** + *
+       * Identifier of the text block.
+       * 
+ * + * int64 id = 1; + * @return The id. + */ + @java.lang.Override + public long getId() { + return id_; + } + /** + *
+       * Identifier of the text block.
+       * 
+ * + * int64 id = 1; + * @param value The id to set. + * @return This builder for chaining. + */ + public Builder setId(long value) { + + id_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
+       * Identifier of the text block.
+       * 
+ * + * int64 id = 1; + * @return This builder for chaining. + */ + public Builder clearId() { + bitField0_ = (bitField0_ & ~0x00000001); + id_ = 0L; + onChanged(); + return this; + } + + private long page_ ; + /** + *
+       * The page the text block occurs on.
+       * 
+ * + * int64 page = 2; + * @return The page. + */ + @java.lang.Override + public long getPage() { + return page_; + } + /** + *
+       * The page the text block occurs on.
+       * 
+ * + * int64 page = 2; + * @param value The page to set. + * @return This builder for chaining. + */ + public Builder setPage(long value) { + + page_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+       * The page the text block occurs on.
+       * 
+ * + * int64 page = 2; + * @return This builder for chaining. + */ + public Builder clearPage() { + bitField0_ = (bitField0_ & ~0x00000002); + page_ = 0L; + onChanged(); + return this; + } + + private java.lang.Object searchText_ = ""; + /** + *
+       * The text of the text block.
+       * 
+ * + * string searchText = 3; + * @return The searchText. + */ + public java.lang.String getSearchText() { + java.lang.Object ref = searchText_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + searchText_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * The text of the text block.
+       * 
+ * + * string searchText = 3; + * @return The bytes for searchText. + */ + public com.google.protobuf.ByteString + getSearchTextBytes() { + java.lang.Object ref = searchText_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + searchText_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * The text of the text block.
+       * 
+ * + * string searchText = 3; + * @param value The searchText to set. + * @return This builder for chaining. + */ + public Builder setSearchText( + java.lang.String value) { + if (value == null) { throw new NullPointerException(); } + searchText_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + *
+       * The text of the text block.
+       * 
+ * + * string searchText = 3; + * @return This builder for chaining. + */ + public Builder clearSearchText() { + searchText_ = getDefaultInstance().getSearchText(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + /** + *
+       * The text of the text block.
+       * 
+ * + * string searchText = 3; + * @param value The bytes for searchText to set. + * @return This builder for chaining. + */ + public Builder setSearchTextBytes( + com.google.protobuf.ByteString value) { + if (value == null) { throw new NullPointerException(); } + checkByteStringIsUtf8(value); + searchText_ = value; + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + + private int numberOnPage_ ; + /** + *
+       * Each text block is assigned a number on a page, starting from 0.
+       * 
+ * + * int32 numberOnPage = 4; + * @return The numberOnPage. + */ + @java.lang.Override + public int getNumberOnPage() { + return numberOnPage_; + } + /** + *
+       * Each text block is assigned a number on a page, starting from 0.
+       * 
+ * + * int32 numberOnPage = 4; + * @param value The numberOnPage to set. + * @return This builder for chaining. + */ + public Builder setNumberOnPage(int value) { + + numberOnPage_ = value; + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + *
+       * Each text block is assigned a number on a page, starting from 0.
+       * 
+ * + * int32 numberOnPage = 4; + * @return This builder for chaining. + */ + public Builder clearNumberOnPage() { + bitField0_ = (bitField0_ & ~0x00000008); + numberOnPage_ = 0; + onChanged(); + return this; + } + + private int start_ ; + /** + *
+       * The text blocks are ordered, this number represents the start of the text block as a string offset.
+       * 
+ * + * int32 start = 5; + * @return The start. + */ + @java.lang.Override + public int getStart() { + return start_; + } + /** + *
+       * The text blocks are ordered, this number represents the start of the text block as a string offset.
+       * 
+ * + * int32 start = 5; + * @param value The start to set. + * @return This builder for chaining. + */ + public Builder setStart(int value) { + + start_ = value; + bitField0_ |= 0x00000010; + onChanged(); + return this; + } + /** + *
+       * The text blocks are ordered, this number represents the start of the text block as a string offset.
+       * 
+ * + * int32 start = 5; + * @return This builder for chaining. + */ + public Builder clearStart() { + bitField0_ = (bitField0_ & ~0x00000010); + start_ = 0; + onChanged(); + return this; + } + + private int end_ ; + /** + *
+       * The text blocks are ordered, this number represents the end of the text block as a string offset.
+       * 
+ * + * int32 end = 6; + * @return The end. + */ + @java.lang.Override + public int getEnd() { + return end_; + } + /** + *
+       * The text blocks are ordered, this number represents the end of the text block as a string offset.
+       * 
+ * + * int32 end = 6; + * @param value The end to set. + * @return This builder for chaining. + */ + public Builder setEnd(int value) { + + end_ = value; + bitField0_ |= 0x00000020; + onChanged(); + return this; + } + /** + *
+       * The text blocks are ordered, this number represents the end of the text block as a string offset.
+       * 
+ * + * int32 end = 6; + * @return This builder for chaining. + */ + public Builder clearEnd() { + bitField0_ = (bitField0_ & ~0x00000020); + end_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.Internal.IntList lineBreaks_ = emptyIntList(); + private void ensureLineBreaksIsMutable() { + if (!lineBreaks_.isModifiable()) { + lineBreaks_ = makeMutableCopy(lineBreaks_); + } + bitField0_ |= 0x00000040; + } + /** + *
+       * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+       * 
+ * + * repeated int32 lineBreaks = 7; + * @return A list containing the lineBreaks. + */ + public java.util.List + getLineBreaksList() { + lineBreaks_.makeImmutable(); + return lineBreaks_; + } + /** + *
+       * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+       * 
+ * + * repeated int32 lineBreaks = 7; + * @return The count of lineBreaks. + */ + public int getLineBreaksCount() { + return lineBreaks_.size(); + } + /** + *
+       * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+       * 
+ * + * repeated int32 lineBreaks = 7; + * @param index The index of the element to return. + * @return The lineBreaks at the given index. + */ + public int getLineBreaks(int index) { + return lineBreaks_.getInt(index); + } + /** + *
+       * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+       * 
+ * + * repeated int32 lineBreaks = 7; + * @param index The index to set the value at. + * @param value The lineBreaks to set. + * @return This builder for chaining. + */ + public Builder setLineBreaks( + int index, int value) { + + ensureLineBreaksIsMutable(); + lineBreaks_.setInt(index, value); + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + /** + *
+       * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+       * 
+ * + * repeated int32 lineBreaks = 7; + * @param value The lineBreaks to add. + * @return This builder for chaining. + */ + public Builder addLineBreaks(int value) { + + ensureLineBreaksIsMutable(); + lineBreaks_.addInt(value); + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + /** + *
+       * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+       * 
+ * + * repeated int32 lineBreaks = 7; + * @param values The lineBreaks to add. + * @return This builder for chaining. + */ + public Builder addAllLineBreaks( + java.lang.Iterable values) { + ensureLineBreaksIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, lineBreaks_); + bitField0_ |= 0x00000040; + onChanged(); + return this; + } + /** + *
+       * The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak.
+       * 
+ * + * repeated int32 lineBreaks = 7; + * @return This builder for chaining. + */ + public Builder clearLineBreaks() { + lineBreaks_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000040); + onChanged(); + return this; + } + + private java.util.List italicTextRanges_ = + java.util.Collections.emptyList(); + private void ensureItalicTextRangesIsMutable() { + if (!((bitField0_ & 0x00000080) != 0)) { + italicTextRanges_ = new java.util.ArrayList(italicTextRanges_); + bitField0_ |= 0x00000080; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder, com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder> italicTextRangesBuilder_; + + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public java.util.List getItalicTextRangesList() { + if (italicTextRangesBuilder_ == null) { + return java.util.Collections.unmodifiableList(italicTextRanges_); + } else { + return italicTextRangesBuilder_.getMessageList(); + } + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public int getItalicTextRangesCount() { + if (italicTextRangesBuilder_ == null) { + return italicTextRanges_.size(); + } else { + return italicTextRangesBuilder_.getCount(); + } + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range getItalicTextRanges(int index) { + if (italicTextRangesBuilder_ == null) { + return italicTextRanges_.get(index); + } else { + return italicTextRangesBuilder_.getMessage(index); + } + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public Builder setItalicTextRanges( + int index, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range value) { + if (italicTextRangesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureItalicTextRangesIsMutable(); + italicTextRanges_.set(index, value); + onChanged(); + } else { + italicTextRangesBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public Builder setItalicTextRanges( + int index, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder builderForValue) { + if (italicTextRangesBuilder_ == null) { + ensureItalicTextRangesIsMutable(); + italicTextRanges_.set(index, builderForValue.build()); + onChanged(); + } else { + italicTextRangesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public Builder addItalicTextRanges(com.iqser.red.service.redaction.v1.server.data.RangeProto.Range value) { + if (italicTextRangesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureItalicTextRangesIsMutable(); + italicTextRanges_.add(value); + onChanged(); + } else { + italicTextRangesBuilder_.addMessage(value); + } + return this; + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public Builder addItalicTextRanges( + int index, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range value) { + if (italicTextRangesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureItalicTextRangesIsMutable(); + italicTextRanges_.add(index, value); + onChanged(); + } else { + italicTextRangesBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public Builder addItalicTextRanges( + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder builderForValue) { + if (italicTextRangesBuilder_ == null) { + ensureItalicTextRangesIsMutable(); + italicTextRanges_.add(builderForValue.build()); + onChanged(); + } else { + italicTextRangesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public Builder addItalicTextRanges( + int index, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder builderForValue) { + if (italicTextRangesBuilder_ == null) { + ensureItalicTextRangesIsMutable(); + italicTextRanges_.add(index, builderForValue.build()); + onChanged(); + } else { + italicTextRangesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public Builder addAllItalicTextRanges( + java.lang.Iterable values) { + if (italicTextRangesBuilder_ == null) { + ensureItalicTextRangesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, italicTextRanges_); + onChanged(); + } else { + italicTextRangesBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public Builder clearItalicTextRanges() { + if (italicTextRangesBuilder_ == null) { + italicTextRanges_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000080); + onChanged(); + } else { + italicTextRangesBuilder_.clear(); + } + return this; + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public Builder removeItalicTextRanges(int index) { + if (italicTextRangesBuilder_ == null) { + ensureItalicTextRangesIsMutable(); + italicTextRanges_.remove(index); + onChanged(); + } else { + italicTextRangesBuilder_.remove(index); + } + return this; + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder getItalicTextRangesBuilder( + int index) { + return getItalicTextRangesFieldBuilder().getBuilder(index); + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder getItalicTextRangesOrBuilder( + int index) { + if (italicTextRangesBuilder_ == null) { + return italicTextRanges_.get(index); } else { + return italicTextRangesBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public java.util.List + getItalicTextRangesOrBuilderList() { + if (italicTextRangesBuilder_ != null) { + return italicTextRangesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(italicTextRanges_); + } + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder addItalicTextRangesBuilder() { + return getItalicTextRangesFieldBuilder().addBuilder( + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.getDefaultInstance()); + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder addItalicTextRangesBuilder( + int index) { + return getItalicTextRangesFieldBuilder().addBuilder( + index, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.getDefaultInstance()); + } + /** + *
+       * The text ranges where the text is italic
+       * 
+ * + * repeated .Range italicTextRanges = 8; + */ + public java.util.List + getItalicTextRangesBuilderList() { + return getItalicTextRangesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder, com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder> + getItalicTextRangesFieldBuilder() { + if (italicTextRangesBuilder_ == null) { + italicTextRangesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder, com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder>( + italicTextRanges_, + ((bitField0_ & 0x00000080) != 0), + getParentForChildren(), + isClean()); + italicTextRanges_ = null; + } + return italicTextRangesBuilder_; + } + + private java.util.List boldTextRanges_ = + java.util.Collections.emptyList(); + private void ensureBoldTextRangesIsMutable() { + if (!((bitField0_ & 0x00000100) != 0)) { + boldTextRanges_ = new java.util.ArrayList(boldTextRanges_); + bitField0_ |= 0x00000100; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder, com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder> boldTextRangesBuilder_; + + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public java.util.List getBoldTextRangesList() { + if (boldTextRangesBuilder_ == null) { + return java.util.Collections.unmodifiableList(boldTextRanges_); + } else { + return boldTextRangesBuilder_.getMessageList(); + } + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public int getBoldTextRangesCount() { + if (boldTextRangesBuilder_ == null) { + return boldTextRanges_.size(); + } else { + return boldTextRangesBuilder_.getCount(); + } + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range getBoldTextRanges(int index) { + if (boldTextRangesBuilder_ == null) { + return boldTextRanges_.get(index); + } else { + return boldTextRangesBuilder_.getMessage(index); + } + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public Builder setBoldTextRanges( + int index, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range value) { + if (boldTextRangesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureBoldTextRangesIsMutable(); + boldTextRanges_.set(index, value); + onChanged(); + } else { + boldTextRangesBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public Builder setBoldTextRanges( + int index, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder builderForValue) { + if (boldTextRangesBuilder_ == null) { + ensureBoldTextRangesIsMutable(); + boldTextRanges_.set(index, builderForValue.build()); + onChanged(); + } else { + boldTextRangesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public Builder addBoldTextRanges(com.iqser.red.service.redaction.v1.server.data.RangeProto.Range value) { + if (boldTextRangesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureBoldTextRangesIsMutable(); + boldTextRanges_.add(value); + onChanged(); + } else { + boldTextRangesBuilder_.addMessage(value); + } + return this; + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public Builder addBoldTextRanges( + int index, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range value) { + if (boldTextRangesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureBoldTextRangesIsMutable(); + boldTextRanges_.add(index, value); + onChanged(); + } else { + boldTextRangesBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public Builder addBoldTextRanges( + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder builderForValue) { + if (boldTextRangesBuilder_ == null) { + ensureBoldTextRangesIsMutable(); + boldTextRanges_.add(builderForValue.build()); + onChanged(); + } else { + boldTextRangesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public Builder addBoldTextRanges( + int index, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder builderForValue) { + if (boldTextRangesBuilder_ == null) { + ensureBoldTextRangesIsMutable(); + boldTextRanges_.add(index, builderForValue.build()); + onChanged(); + } else { + boldTextRangesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public Builder addAllBoldTextRanges( + java.lang.Iterable values) { + if (boldTextRangesBuilder_ == null) { + ensureBoldTextRangesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, boldTextRanges_); + onChanged(); + } else { + boldTextRangesBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public Builder clearBoldTextRanges() { + if (boldTextRangesBuilder_ == null) { + boldTextRanges_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000100); + onChanged(); + } else { + boldTextRangesBuilder_.clear(); + } + return this; + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public Builder removeBoldTextRanges(int index) { + if (boldTextRangesBuilder_ == null) { + ensureBoldTextRangesIsMutable(); + boldTextRanges_.remove(index); + onChanged(); + } else { + boldTextRangesBuilder_.remove(index); + } + return this; + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder getBoldTextRangesBuilder( + int index) { + return getBoldTextRangesFieldBuilder().getBuilder(index); + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder getBoldTextRangesOrBuilder( + int index) { + if (boldTextRangesBuilder_ == null) { + return boldTextRanges_.get(index); } else { + return boldTextRangesBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public java.util.List + getBoldTextRangesOrBuilderList() { + if (boldTextRangesBuilder_ != null) { + return boldTextRangesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(boldTextRanges_); + } + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder addBoldTextRangesBuilder() { + return getBoldTextRangesFieldBuilder().addBuilder( + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.getDefaultInstance()); + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder addBoldTextRangesBuilder( + int index) { + return getBoldTextRangesFieldBuilder().addBuilder( + index, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.getDefaultInstance()); + } + /** + *
+       * The text ranges where the text is bold
+       * 
+ * + * repeated .Range boldTextRanges = 9; + */ + public java.util.List + getBoldTextRangesBuilderList() { + return getBoldTextRangesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder, com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder> + getBoldTextRangesFieldBuilder() { + if (boldTextRangesBuilder_ == null) { + boldTextRangesBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder, com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder>( + boldTextRanges_, + ((bitField0_ & 0x00000100) != 0), + getParentForChildren(), + isClean()); + boldTextRanges_ = null; + } + return boldTextRangesBuilder_; + } + + // @@protoc_insertion_point(builder_scope:DocumentTextData) + } + + // @@protoc_insertion_point(class_scope:DocumentTextData) + private static final com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData(); + } + + public static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DocumentTextData parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_AllDocumentTextData_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_AllDocumentTextData_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_DocumentTextData_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_DocumentTextData_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\026DocumentTextData.proto\032\013Range.proto\"B\n" + + "\023AllDocumentTextData\022+\n\020documentTextData" + + "\030\001 \003(\0132\021.DocumentTextData\"\310\001\n\020DocumentTe" + + "xtData\022\n\n\002id\030\001 \001(\003\022\014\n\004page\030\002 \001(\003\022\022\n\nsear" + + "chText\030\003 \001(\t\022\024\n\014numberOnPage\030\004 \001(\005\022\r\n\005st" + + "art\030\005 \001(\005\022\013\n\003end\030\006 \001(\005\022\022\n\nlineBreaks\030\007 \003" + + "(\005\022 \n\020italicTextRanges\030\010 \003(\0132\006.Range\022\036\n\016" + + "boldTextRanges\030\t \003(\0132\006.RangeBG\n.com.iqse" + + "r.red.service.redaction.v1.server.dataB\025" + + "DocumentTextDataProtob\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + com.iqser.red.service.redaction.v1.server.data.RangeProto.getDescriptor(), + }); + internal_static_AllDocumentTextData_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_AllDocumentTextData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_AllDocumentTextData_descriptor, + new java.lang.String[] { "DocumentTextData", }); + internal_static_DocumentTextData_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_DocumentTextData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_DocumentTextData_descriptor, + new java.lang.String[] { "Id", "Page", "SearchText", "NumberOnPage", "Start", "End", "LineBreaks", "ItalicTextRanges", "BoldTextRanges", }); + descriptor.resolveAllFeaturesImmutable(); + com.iqser.red.service.redaction.v1.server.data.RangeProto.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/EntryDataProto.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/EntryDataProto.java new file mode 100644 index 00000000..eb787ad8 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/EntryDataProto.java @@ -0,0 +1,2556 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: EntryData.proto +// Protobuf Java Version: 4.28.3 + +package com.iqser.red.service.redaction.v1.server.data; + +public final class EntryDataProto { + private EntryDataProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + EntryDataProto.class.getName()); + } + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface EntryDataOrBuilder extends + // @@protoc_insertion_point(interface_extends:EntryData) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * Type of the semantic node.
+     * 
+ * + * .NodeType type = 1; + * @return The enum numeric value on the wire for type. + */ + int getTypeValue(); + /** + *
+     * Type of the semantic node.
+     * 
+ * + * .NodeType type = 1; + * @return The type. + */ + com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.NodeType getType(); + + /** + *
+     * Specifies the position in the parsed tree structure.
+     * 
+ * + * repeated int32 treeId = 2; + * @return A list containing the treeId. + */ + java.util.List getTreeIdList(); + /** + *
+     * Specifies the position in the parsed tree structure.
+     * 
+ * + * repeated int32 treeId = 2; + * @return The count of treeId. + */ + int getTreeIdCount(); + /** + *
+     * Specifies the position in the parsed tree structure.
+     * 
+ * + * repeated int32 treeId = 2; + * @param index The index of the element to return. + * @return The treeId at the given index. + */ + int getTreeId(int index); + + /** + *
+     * Specifies the text block IDs associated with this semantic node.
+     * 
+ * + * repeated int64 atomicBlockIds = 3; + * @return A list containing the atomicBlockIds. + */ + java.util.List getAtomicBlockIdsList(); + /** + *
+     * Specifies the text block IDs associated with this semantic node.
+     * 
+ * + * repeated int64 atomicBlockIds = 3; + * @return The count of atomicBlockIds. + */ + int getAtomicBlockIdsCount(); + /** + *
+     * Specifies the text block IDs associated with this semantic node.
+     * 
+ * + * repeated int64 atomicBlockIds = 3; + * @param index The index of the element to return. + * @return The atomicBlockIds at the given index. + */ + long getAtomicBlockIds(int index); + + /** + *
+     * Specifies the pages this semantic node appears on.
+     * 
+ * + * repeated int64 pageNumbers = 4; + * @return A list containing the pageNumbers. + */ + java.util.List getPageNumbersList(); + /** + *
+     * Specifies the pages this semantic node appears on.
+     * 
+ * + * repeated int64 pageNumbers = 4; + * @return The count of pageNumbers. + */ + int getPageNumbersCount(); + /** + *
+     * Specifies the pages this semantic node appears on.
+     * 
+ * + * repeated int64 pageNumbers = 4; + * @param index The index of the element to return. + * @return The pageNumbers at the given index. + */ + long getPageNumbers(int index); + + /** + *
+     * Some semantic nodes have additional information, this information is stored in this Map.
+     * 
+ * + * map<string, string> properties = 5; + */ + int getPropertiesCount(); + /** + *
+     * Some semantic nodes have additional information, this information is stored in this Map.
+     * 
+ * + * map<string, string> properties = 5; + */ + boolean containsProperties( + java.lang.String key); + /** + * Use {@link #getPropertiesMap()} instead. + */ + @java.lang.Deprecated + java.util.Map + getProperties(); + /** + *
+     * Some semantic nodes have additional information, this information is stored in this Map.
+     * 
+ * + * map<string, string> properties = 5; + */ + java.util.Map + getPropertiesMap(); + /** + *
+     * Some semantic nodes have additional information, this information is stored in this Map.
+     * 
+ * + * map<string, string> properties = 5; + */ + /* nullable */ +java.lang.String getPropertiesOrDefault( + java.lang.String key, + /* nullable */ +java.lang.String defaultValue); + /** + *
+     * Some semantic nodes have additional information, this information is stored in this Map.
+     * 
+ * + * map<string, string> properties = 5; + */ + java.lang.String getPropertiesOrThrow( + java.lang.String key); + + /** + *
+     * All child Entries of this Entry.
+     * 
+ * + * repeated .EntryData children = 6; + */ + java.util.List + getChildrenList(); + /** + *
+     * All child Entries of this Entry.
+     * 
+ * + * repeated .EntryData children = 6; + */ + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData getChildren(int index); + /** + *
+     * All child Entries of this Entry.
+     * 
+ * + * repeated .EntryData children = 6; + */ + int getChildrenCount(); + /** + *
+     * All child Entries of this Entry.
+     * 
+ * + * repeated .EntryData children = 6; + */ + java.util.List + getChildrenOrBuilderList(); + /** + *
+     * All child Entries of this Entry.
+     * 
+ * + * repeated .EntryData children = 6; + */ + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder getChildrenOrBuilder( + int index); + + /** + *
+     * Describes the origin of the semantic node.
+     * 
+ * + * repeated .LayoutEngine engines = 7; + * @return A list containing the engines. + */ + java.util.List getEnginesList(); + /** + *
+     * Describes the origin of the semantic node.
+     * 
+ * + * repeated .LayoutEngine engines = 7; + * @return The count of engines. + */ + int getEnginesCount(); + /** + *
+     * Describes the origin of the semantic node.
+     * 
+ * + * repeated .LayoutEngine engines = 7; + * @param index The index of the element to return. + * @return The engines at the given index. + */ + com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine getEngines(int index); + /** + *
+     * Describes the origin of the semantic node.
+     * 
+ * + * repeated .LayoutEngine engines = 7; + * @return A list containing the enum numeric values on the wire for engines. + */ + java.util.List + getEnginesValueList(); + /** + *
+     * Describes the origin of the semantic node.
+     * 
+ * + * repeated .LayoutEngine engines = 7; + * @param index The index of the value to return. + * @return The enum numeric value on the wire of engines at the given index. + */ + int getEnginesValue(int index); + } + /** + * Protobuf type {@code EntryData} + */ + public static final class EntryData extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:EntryData) + EntryDataOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + EntryData.class.getName()); + } + // Use EntryData.newBuilder() to construct. + private EntryData(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private EntryData() { + type_ = 0; + treeId_ = emptyIntList(); + atomicBlockIds_ = emptyLongList(); + pageNumbers_ = emptyLongList(); + children_ = java.util.Collections.emptyList(); + engines_ = emptyIntList(); + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.EntryDataProto.internal_static_EntryData_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 5: + return internalGetProperties(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.EntryDataProto.internal_static_EntryData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.class, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder.class); + } + + public static final int TYPE_FIELD_NUMBER = 1; + private int type_ = 0; + /** + *
+     * Type of the semantic node.
+     * 
+ * + * .NodeType type = 1; + * @return The enum numeric value on the wire for type. + */ + @java.lang.Override public int getTypeValue() { + return type_; + } + /** + *
+     * Type of the semantic node.
+     * 
+ * + * .NodeType type = 1; + * @return The type. + */ + @java.lang.Override public com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.NodeType getType() { + com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.NodeType result = com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.NodeType.forNumber(type_); + return result == null ? com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.NodeType.UNRECOGNIZED : result; + } + + public static final int TREEID_FIELD_NUMBER = 2; + @SuppressWarnings("serial") + private com.google.protobuf.Internal.IntList treeId_ = + emptyIntList(); + /** + *
+     * Specifies the position in the parsed tree structure.
+     * 
+ * + * repeated int32 treeId = 2; + * @return A list containing the treeId. + */ + @java.lang.Override + public java.util.List + getTreeIdList() { + return treeId_; + } + /** + *
+     * Specifies the position in the parsed tree structure.
+     * 
+ * + * repeated int32 treeId = 2; + * @return The count of treeId. + */ + public int getTreeIdCount() { + return treeId_.size(); + } + /** + *
+     * Specifies the position in the parsed tree structure.
+     * 
+ * + * repeated int32 treeId = 2; + * @param index The index of the element to return. + * @return The treeId at the given index. + */ + public int getTreeId(int index) { + return treeId_.getInt(index); + } + private int treeIdMemoizedSerializedSize = -1; + + public static final int ATOMICBLOCKIDS_FIELD_NUMBER = 3; + @SuppressWarnings("serial") + private com.google.protobuf.Internal.LongList atomicBlockIds_ = + emptyLongList(); + /** + *
+     * Specifies the text block IDs associated with this semantic node.
+     * 
+ * + * repeated int64 atomicBlockIds = 3; + * @return A list containing the atomicBlockIds. + */ + @java.lang.Override + public java.util.List + getAtomicBlockIdsList() { + return atomicBlockIds_; + } + /** + *
+     * Specifies the text block IDs associated with this semantic node.
+     * 
+ * + * repeated int64 atomicBlockIds = 3; + * @return The count of atomicBlockIds. + */ + public int getAtomicBlockIdsCount() { + return atomicBlockIds_.size(); + } + /** + *
+     * Specifies the text block IDs associated with this semantic node.
+     * 
+ * + * repeated int64 atomicBlockIds = 3; + * @param index The index of the element to return. + * @return The atomicBlockIds at the given index. + */ + public long getAtomicBlockIds(int index) { + return atomicBlockIds_.getLong(index); + } + private int atomicBlockIdsMemoizedSerializedSize = -1; + + public static final int PAGENUMBERS_FIELD_NUMBER = 4; + @SuppressWarnings("serial") + private com.google.protobuf.Internal.LongList pageNumbers_ = + emptyLongList(); + /** + *
+     * Specifies the pages this semantic node appears on.
+     * 
+ * + * repeated int64 pageNumbers = 4; + * @return A list containing the pageNumbers. + */ + @java.lang.Override + public java.util.List + getPageNumbersList() { + return pageNumbers_; + } + /** + *
+     * Specifies the pages this semantic node appears on.
+     * 
+ * + * repeated int64 pageNumbers = 4; + * @return The count of pageNumbers. + */ + public int getPageNumbersCount() { + return pageNumbers_.size(); + } + /** + *
+     * Specifies the pages this semantic node appears on.
+     * 
+ * + * repeated int64 pageNumbers = 4; + * @param index The index of the element to return. + * @return The pageNumbers at the given index. + */ + public long getPageNumbers(int index) { + return pageNumbers_.getLong(index); + } + private int pageNumbersMemoizedSerializedSize = -1; + + public static final int PROPERTIES_FIELD_NUMBER = 5; + private static final class PropertiesDefaultEntryHolder { + static final com.google.protobuf.MapEntry< + java.lang.String, java.lang.String> defaultEntry = + com.google.protobuf.MapEntry + .newDefaultInstance( + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.internal_static_EntryData_PropertiesEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + @SuppressWarnings("serial") + private com.google.protobuf.MapField< + java.lang.String, java.lang.String> properties_; + private com.google.protobuf.MapField + internalGetProperties() { + if (properties_ == null) { + return com.google.protobuf.MapField.emptyMapField( + PropertiesDefaultEntryHolder.defaultEntry); + } + return properties_; + } + public int getPropertiesCount() { + return internalGetProperties().getMap().size(); + } + /** + *
+     * Some semantic nodes have additional information, this information is stored in this Map.
+     * 
+ * + * map<string, string> properties = 5; + */ + @java.lang.Override + public boolean containsProperties( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + return internalGetProperties().getMap().containsKey(key); + } + /** + * Use {@link #getPropertiesMap()} instead. + */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getProperties() { + return getPropertiesMap(); + } + /** + *
+     * Some semantic nodes have additional information, this information is stored in this Map.
+     * 
+ * + * map<string, string> properties = 5; + */ + @java.lang.Override + public java.util.Map getPropertiesMap() { + return internalGetProperties().getMap(); + } + /** + *
+     * Some semantic nodes have additional information, this information is stored in this Map.
+     * 
+ * + * map<string, string> properties = 5; + */ + @java.lang.Override + public /* nullable */ +java.lang.String getPropertiesOrDefault( + java.lang.String key, + /* nullable */ +java.lang.String defaultValue) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = + internalGetProperties().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + /** + *
+     * Some semantic nodes have additional information, this information is stored in this Map.
+     * 
+ * + * map<string, string> properties = 5; + */ + @java.lang.Override + public java.lang.String getPropertiesOrThrow( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = + internalGetProperties().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public static final int CHILDREN_FIELD_NUMBER = 6; + @SuppressWarnings("serial") + private java.util.List children_; + /** + *
+     * All child Entries of this Entry.
+     * 
+ * + * repeated .EntryData children = 6; + */ + @java.lang.Override + public java.util.List getChildrenList() { + return children_; + } + /** + *
+     * All child Entries of this Entry.
+     * 
+ * + * repeated .EntryData children = 6; + */ + @java.lang.Override + public java.util.List + getChildrenOrBuilderList() { + return children_; + } + /** + *
+     * All child Entries of this Entry.
+     * 
+ * + * repeated .EntryData children = 6; + */ + @java.lang.Override + public int getChildrenCount() { + return children_.size(); + } + /** + *
+     * All child Entries of this Entry.
+     * 
+ * + * repeated .EntryData children = 6; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData getChildren(int index) { + return children_.get(index); + } + /** + *
+     * All child Entries of this Entry.
+     * 
+ * + * repeated .EntryData children = 6; + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder getChildrenOrBuilder( + int index) { + return children_.get(index); + } + + public static final int ENGINES_FIELD_NUMBER = 7; + @SuppressWarnings("serial") + private com.google.protobuf.Internal.IntList engines_; + private static final com.google.protobuf.Internal.IntListAdapter.IntConverter< + com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine> engines_converter_ = + new com.google.protobuf.Internal.IntListAdapter.IntConverter< + com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine>() { + public com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine convert(int from) { + com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine result = com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine.forNumber(from); + return result == null ? com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine.UNRECOGNIZED : result; + } + }; + /** + *
+     * Describes the origin of the semantic node.
+     * 
+ * + * repeated .LayoutEngine engines = 7; + * @return A list containing the engines. + */ + @java.lang.Override + public java.util.List getEnginesList() { + return new com.google.protobuf.Internal.IntListAdapter< + com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine>(engines_, engines_converter_); + } + /** + *
+     * Describes the origin of the semantic node.
+     * 
+ * + * repeated .LayoutEngine engines = 7; + * @return The count of engines. + */ + @java.lang.Override + public int getEnginesCount() { + return engines_.size(); + } + /** + *
+     * Describes the origin of the semantic node.
+     * 
+ * + * repeated .LayoutEngine engines = 7; + * @param index The index of the element to return. + * @return The engines at the given index. + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine getEngines(int index) { + return engines_converter_.convert(engines_.getInt(index)); + } + /** + *
+     * Describes the origin of the semantic node.
+     * 
+ * + * repeated .LayoutEngine engines = 7; + * @return A list containing the enum numeric values on the wire for engines. + */ + @java.lang.Override + public java.util.List + getEnginesValueList() { + return engines_; + } + /** + *
+     * Describes the origin of the semantic node.
+     * 
+ * + * repeated .LayoutEngine engines = 7; + * @param index The index of the value to return. + * @return The enum numeric value on the wire of engines at the given index. + */ + @java.lang.Override + public int getEnginesValue(int index) { + return engines_.getInt(index); + } + private int enginesMemoizedSerializedSize; + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (type_ != com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.NodeType.DOCUMENT.getNumber()) { + output.writeEnum(1, type_); + } + if (getTreeIdList().size() > 0) { + output.writeUInt32NoTag(18); + output.writeUInt32NoTag(treeIdMemoizedSerializedSize); + } + for (int i = 0; i < treeId_.size(); i++) { + output.writeInt32NoTag(treeId_.getInt(i)); + } + if (getAtomicBlockIdsList().size() > 0) { + output.writeUInt32NoTag(26); + output.writeUInt32NoTag(atomicBlockIdsMemoizedSerializedSize); + } + for (int i = 0; i < atomicBlockIds_.size(); i++) { + output.writeInt64NoTag(atomicBlockIds_.getLong(i)); + } + if (getPageNumbersList().size() > 0) { + output.writeUInt32NoTag(34); + output.writeUInt32NoTag(pageNumbersMemoizedSerializedSize); + } + for (int i = 0; i < pageNumbers_.size(); i++) { + output.writeInt64NoTag(pageNumbers_.getLong(i)); + } + com.google.protobuf.GeneratedMessage + .serializeStringMapTo( + output, + internalGetProperties(), + PropertiesDefaultEntryHolder.defaultEntry, + 5); + for (int i = 0; i < children_.size(); i++) { + output.writeMessage(6, children_.get(i)); + } + if (getEnginesList().size() > 0) { + output.writeUInt32NoTag(58); + output.writeUInt32NoTag(enginesMemoizedSerializedSize); + } + for (int i = 0; i < engines_.size(); i++) { + output.writeEnumNoTag(engines_.getInt(i)); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (type_ != com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.NodeType.DOCUMENT.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, type_); + } + { + int dataSize = 0; + for (int i = 0; i < treeId_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(treeId_.getInt(i)); + } + size += dataSize; + if (!getTreeIdList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + treeIdMemoizedSerializedSize = dataSize; + } + { + int dataSize = 0; + for (int i = 0; i < atomicBlockIds_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt64SizeNoTag(atomicBlockIds_.getLong(i)); + } + size += dataSize; + if (!getAtomicBlockIdsList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + atomicBlockIdsMemoizedSerializedSize = dataSize; + } + { + int dataSize = 0; + for (int i = 0; i < pageNumbers_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeInt64SizeNoTag(pageNumbers_.getLong(i)); + } + size += dataSize; + if (!getPageNumbersList().isEmpty()) { + size += 1; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + pageNumbersMemoizedSerializedSize = dataSize; + } + for (java.util.Map.Entry entry + : internalGetProperties().getMap().entrySet()) { + com.google.protobuf.MapEntry + properties__ = PropertiesDefaultEntryHolder.defaultEntry.newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, properties__); + } + for (int i = 0; i < children_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(6, children_.get(i)); + } + { + int dataSize = 0; + for (int i = 0; i < engines_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeEnumSizeNoTag(engines_.getInt(i)); + } + size += dataSize; + if (!getEnginesList().isEmpty()) { size += 1; + size += com.google.protobuf.CodedOutputStream + .computeUInt32SizeNoTag(dataSize); + }enginesMemoizedSerializedSize = dataSize; + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData)) { + return super.equals(obj); + } + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData other = (com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData) obj; + + if (type_ != other.type_) return false; + if (!getTreeIdList() + .equals(other.getTreeIdList())) return false; + if (!getAtomicBlockIdsList() + .equals(other.getAtomicBlockIdsList())) return false; + if (!getPageNumbersList() + .equals(other.getPageNumbersList())) return false; + if (!internalGetProperties().equals( + other.internalGetProperties())) return false; + if (!getChildrenList() + .equals(other.getChildrenList())) return false; + if (!engines_.equals(other.engines_)) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TYPE_FIELD_NUMBER; + hash = (53 * hash) + type_; + if (getTreeIdCount() > 0) { + hash = (37 * hash) + TREEID_FIELD_NUMBER; + hash = (53 * hash) + getTreeIdList().hashCode(); + } + if (getAtomicBlockIdsCount() > 0) { + hash = (37 * hash) + ATOMICBLOCKIDS_FIELD_NUMBER; + hash = (53 * hash) + getAtomicBlockIdsList().hashCode(); + } + if (getPageNumbersCount() > 0) { + hash = (37 * hash) + PAGENUMBERS_FIELD_NUMBER; + hash = (53 * hash) + getPageNumbersList().hashCode(); + } + if (!internalGetProperties().getMap().isEmpty()) { + hash = (37 * hash) + PROPERTIES_FIELD_NUMBER; + hash = (53 * hash) + internalGetProperties().hashCode(); + } + if (getChildrenCount() > 0) { + hash = (37 * hash) + CHILDREN_FIELD_NUMBER; + hash = (53 * hash) + getChildrenList().hashCode(); + } + if (getEnginesCount() > 0) { + hash = (37 * hash) + ENGINES_FIELD_NUMBER; + hash = (53 * hash) + engines_.hashCode(); + } + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code EntryData} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:EntryData) + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.EntryDataProto.internal_static_EntryData_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMapFieldReflection( + int number) { + switch (number) { + case 5: + return internalGetProperties(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapFieldReflectionAccessor internalGetMutableMapFieldReflection( + int number) { + switch (number) { + case 5: + return internalGetMutableProperties(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.EntryDataProto.internal_static_EntryData_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.class, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder.class); + } + + // Construct using com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + type_ = 0; + treeId_ = emptyIntList(); + atomicBlockIds_ = emptyLongList(); + pageNumbers_ = emptyLongList(); + internalGetMutableProperties().clear(); + if (childrenBuilder_ == null) { + children_ = java.util.Collections.emptyList(); + } else { + children_ = null; + childrenBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + engines_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.iqser.red.service.redaction.v1.server.data.EntryDataProto.internal_static_EntryData_descriptor; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData getDefaultInstanceForType() { + return com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.getDefaultInstance(); + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData build() { + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData buildPartial() { + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData result = new com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData(this); + buildPartialRepeatedFields(result); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartialRepeatedFields(com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData result) { + if (childrenBuilder_ == null) { + if (((bitField0_ & 0x00000020) != 0)) { + children_ = java.util.Collections.unmodifiableList(children_); + bitField0_ = (bitField0_ & ~0x00000020); + } + result.children_ = children_; + } else { + result.children_ = childrenBuilder_.build(); + } + if (((bitField0_ & 0x00000040) != 0)) { + engines_.makeImmutable(); + bitField0_ = (bitField0_ & ~0x00000040); + } + result.engines_ = engines_; + } + + private void buildPartial0(com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.type_ = type_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + treeId_.makeImmutable(); + result.treeId_ = treeId_; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + atomicBlockIds_.makeImmutable(); + result.atomicBlockIds_ = atomicBlockIds_; + } + if (((from_bitField0_ & 0x00000008) != 0)) { + pageNumbers_.makeImmutable(); + result.pageNumbers_ = pageNumbers_; + } + if (((from_bitField0_ & 0x00000010) != 0)) { + result.properties_ = internalGetProperties(); + result.properties_.makeImmutable(); + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData) { + return mergeFrom((com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData other) { + if (other == com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.getDefaultInstance()) return this; + if (other.type_ != 0) { + setTypeValue(other.getTypeValue()); + } + if (!other.treeId_.isEmpty()) { + if (treeId_.isEmpty()) { + treeId_ = other.treeId_; + treeId_.makeImmutable(); + bitField0_ |= 0x00000002; + } else { + ensureTreeIdIsMutable(); + treeId_.addAll(other.treeId_); + } + onChanged(); + } + if (!other.atomicBlockIds_.isEmpty()) { + if (atomicBlockIds_.isEmpty()) { + atomicBlockIds_ = other.atomicBlockIds_; + atomicBlockIds_.makeImmutable(); + bitField0_ |= 0x00000004; + } else { + ensureAtomicBlockIdsIsMutable(); + atomicBlockIds_.addAll(other.atomicBlockIds_); + } + onChanged(); + } + if (!other.pageNumbers_.isEmpty()) { + if (pageNumbers_.isEmpty()) { + pageNumbers_ = other.pageNumbers_; + pageNumbers_.makeImmutable(); + bitField0_ |= 0x00000008; + } else { + ensurePageNumbersIsMutable(); + pageNumbers_.addAll(other.pageNumbers_); + } + onChanged(); + } + internalGetMutableProperties().mergeFrom( + other.internalGetProperties()); + bitField0_ |= 0x00000010; + if (childrenBuilder_ == null) { + if (!other.children_.isEmpty()) { + if (children_.isEmpty()) { + children_ = other.children_; + bitField0_ = (bitField0_ & ~0x00000020); + } else { + ensureChildrenIsMutable(); + children_.addAll(other.children_); + } + onChanged(); + } + } else { + if (!other.children_.isEmpty()) { + if (childrenBuilder_.isEmpty()) { + childrenBuilder_.dispose(); + childrenBuilder_ = null; + children_ = other.children_; + bitField0_ = (bitField0_ & ~0x00000020); + childrenBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getChildrenFieldBuilder() : null; + } else { + childrenBuilder_.addAllMessages(other.children_); + } + } + } + if (!other.engines_.isEmpty()) { + if (engines_.isEmpty()) { + engines_ = other.engines_; + bitField0_ = (bitField0_ & ~0x00000040); + } else { + ensureEnginesIsMutable(); + engines_.addAll(other.engines_); + } + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + type_ = input.readEnum(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + int v = input.readInt32(); + ensureTreeIdIsMutable(); + treeId_.addInt(v); + break; + } // case 16 + case 18: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + ensureTreeIdIsMutable(); + while (input.getBytesUntilLimit() > 0) { + treeId_.addInt(input.readInt32()); + } + input.popLimit(limit); + break; + } // case 18 + case 24: { + long v = input.readInt64(); + ensureAtomicBlockIdsIsMutable(); + atomicBlockIds_.addLong(v); + break; + } // case 24 + case 26: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + ensureAtomicBlockIdsIsMutable(); + while (input.getBytesUntilLimit() > 0) { + atomicBlockIds_.addLong(input.readInt64()); + } + input.popLimit(limit); + break; + } // case 26 + case 32: { + long v = input.readInt64(); + ensurePageNumbersIsMutable(); + pageNumbers_.addLong(v); + break; + } // case 32 + case 34: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + ensurePageNumbersIsMutable(); + while (input.getBytesUntilLimit() > 0) { + pageNumbers_.addLong(input.readInt64()); + } + input.popLimit(limit); + break; + } // case 34 + case 42: { + com.google.protobuf.MapEntry + properties__ = input.readMessage( + PropertiesDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry); + internalGetMutableProperties().getMutableMap().put( + properties__.getKey(), properties__.getValue()); + bitField0_ |= 0x00000010; + break; + } // case 42 + case 50: { + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData m = + input.readMessage( + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.parser(), + extensionRegistry); + if (childrenBuilder_ == null) { + ensureChildrenIsMutable(); + children_.add(m); + } else { + childrenBuilder_.addMessage(m); + } + break; + } // case 50 + case 56: { + int tmpRaw = input.readEnum(); + ensureEnginesIsMutable(); + engines_.addInt(tmpRaw); + break; + } // case 56 + case 58: { + int length = input.readRawVarint32(); + int oldLimit = input.pushLimit(length); + while(input.getBytesUntilLimit() > 0) { + int tmpRaw = input.readEnum(); + ensureEnginesIsMutable(); + engines_.addInt(tmpRaw); + } + input.popLimit(oldLimit); + break; + } // case 58 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private int type_ = 0; + /** + *
+       * Type of the semantic node.
+       * 
+ * + * .NodeType type = 1; + * @return The enum numeric value on the wire for type. + */ + @java.lang.Override public int getTypeValue() { + return type_; + } + /** + *
+       * Type of the semantic node.
+       * 
+ * + * .NodeType type = 1; + * @param value The enum numeric value on the wire for type to set. + * @return This builder for chaining. + */ + public Builder setTypeValue(int value) { + type_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
+       * Type of the semantic node.
+       * 
+ * + * .NodeType type = 1; + * @return The type. + */ + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.NodeType getType() { + com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.NodeType result = com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.NodeType.forNumber(type_); + return result == null ? com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.NodeType.UNRECOGNIZED : result; + } + /** + *
+       * Type of the semantic node.
+       * 
+ * + * .NodeType type = 1; + * @param value The type to set. + * @return This builder for chaining. + */ + public Builder setType(com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.NodeType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + type_ = value.getNumber(); + onChanged(); + return this; + } + /** + *
+       * Type of the semantic node.
+       * 
+ * + * .NodeType type = 1; + * @return This builder for chaining. + */ + public Builder clearType() { + bitField0_ = (bitField0_ & ~0x00000001); + type_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.Internal.IntList treeId_ = emptyIntList(); + private void ensureTreeIdIsMutable() { + if (!treeId_.isModifiable()) { + treeId_ = makeMutableCopy(treeId_); + } + bitField0_ |= 0x00000002; + } + /** + *
+       * Specifies the position in the parsed tree structure.
+       * 
+ * + * repeated int32 treeId = 2; + * @return A list containing the treeId. + */ + public java.util.List + getTreeIdList() { + treeId_.makeImmutable(); + return treeId_; + } + /** + *
+       * Specifies the position in the parsed tree structure.
+       * 
+ * + * repeated int32 treeId = 2; + * @return The count of treeId. + */ + public int getTreeIdCount() { + return treeId_.size(); + } + /** + *
+       * Specifies the position in the parsed tree structure.
+       * 
+ * + * repeated int32 treeId = 2; + * @param index The index of the element to return. + * @return The treeId at the given index. + */ + public int getTreeId(int index) { + return treeId_.getInt(index); + } + /** + *
+       * Specifies the position in the parsed tree structure.
+       * 
+ * + * repeated int32 treeId = 2; + * @param index The index to set the value at. + * @param value The treeId to set. + * @return This builder for chaining. + */ + public Builder setTreeId( + int index, int value) { + + ensureTreeIdIsMutable(); + treeId_.setInt(index, value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+       * Specifies the position in the parsed tree structure.
+       * 
+ * + * repeated int32 treeId = 2; + * @param value The treeId to add. + * @return This builder for chaining. + */ + public Builder addTreeId(int value) { + + ensureTreeIdIsMutable(); + treeId_.addInt(value); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+       * Specifies the position in the parsed tree structure.
+       * 
+ * + * repeated int32 treeId = 2; + * @param values The treeId to add. + * @return This builder for chaining. + */ + public Builder addAllTreeId( + java.lang.Iterable values) { + ensureTreeIdIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, treeId_); + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+       * Specifies the position in the parsed tree structure.
+       * 
+ * + * repeated int32 treeId = 2; + * @return This builder for chaining. + */ + public Builder clearTreeId() { + treeId_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000002); + onChanged(); + return this; + } + + private com.google.protobuf.Internal.LongList atomicBlockIds_ = emptyLongList(); + private void ensureAtomicBlockIdsIsMutable() { + if (!atomicBlockIds_.isModifiable()) { + atomicBlockIds_ = makeMutableCopy(atomicBlockIds_); + } + bitField0_ |= 0x00000004; + } + /** + *
+       * Specifies the text block IDs associated with this semantic node.
+       * 
+ * + * repeated int64 atomicBlockIds = 3; + * @return A list containing the atomicBlockIds. + */ + public java.util.List + getAtomicBlockIdsList() { + atomicBlockIds_.makeImmutable(); + return atomicBlockIds_; + } + /** + *
+       * Specifies the text block IDs associated with this semantic node.
+       * 
+ * + * repeated int64 atomicBlockIds = 3; + * @return The count of atomicBlockIds. + */ + public int getAtomicBlockIdsCount() { + return atomicBlockIds_.size(); + } + /** + *
+       * Specifies the text block IDs associated with this semantic node.
+       * 
+ * + * repeated int64 atomicBlockIds = 3; + * @param index The index of the element to return. + * @return The atomicBlockIds at the given index. + */ + public long getAtomicBlockIds(int index) { + return atomicBlockIds_.getLong(index); + } + /** + *
+       * Specifies the text block IDs associated with this semantic node.
+       * 
+ * + * repeated int64 atomicBlockIds = 3; + * @param index The index to set the value at. + * @param value The atomicBlockIds to set. + * @return This builder for chaining. + */ + public Builder setAtomicBlockIds( + int index, long value) { + + ensureAtomicBlockIdsIsMutable(); + atomicBlockIds_.setLong(index, value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + *
+       * Specifies the text block IDs associated with this semantic node.
+       * 
+ * + * repeated int64 atomicBlockIds = 3; + * @param value The atomicBlockIds to add. + * @return This builder for chaining. + */ + public Builder addAtomicBlockIds(long value) { + + ensureAtomicBlockIdsIsMutable(); + atomicBlockIds_.addLong(value); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + *
+       * Specifies the text block IDs associated with this semantic node.
+       * 
+ * + * repeated int64 atomicBlockIds = 3; + * @param values The atomicBlockIds to add. + * @return This builder for chaining. + */ + public Builder addAllAtomicBlockIds( + java.lang.Iterable values) { + ensureAtomicBlockIdsIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, atomicBlockIds_); + bitField0_ |= 0x00000004; + onChanged(); + return this; + } + /** + *
+       * Specifies the text block IDs associated with this semantic node.
+       * 
+ * + * repeated int64 atomicBlockIds = 3; + * @return This builder for chaining. + */ + public Builder clearAtomicBlockIds() { + atomicBlockIds_ = emptyLongList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + return this; + } + + private com.google.protobuf.Internal.LongList pageNumbers_ = emptyLongList(); + private void ensurePageNumbersIsMutable() { + if (!pageNumbers_.isModifiable()) { + pageNumbers_ = makeMutableCopy(pageNumbers_); + } + bitField0_ |= 0x00000008; + } + /** + *
+       * Specifies the pages this semantic node appears on.
+       * 
+ * + * repeated int64 pageNumbers = 4; + * @return A list containing the pageNumbers. + */ + public java.util.List + getPageNumbersList() { + pageNumbers_.makeImmutable(); + return pageNumbers_; + } + /** + *
+       * Specifies the pages this semantic node appears on.
+       * 
+ * + * repeated int64 pageNumbers = 4; + * @return The count of pageNumbers. + */ + public int getPageNumbersCount() { + return pageNumbers_.size(); + } + /** + *
+       * Specifies the pages this semantic node appears on.
+       * 
+ * + * repeated int64 pageNumbers = 4; + * @param index The index of the element to return. + * @return The pageNumbers at the given index. + */ + public long getPageNumbers(int index) { + return pageNumbers_.getLong(index); + } + /** + *
+       * Specifies the pages this semantic node appears on.
+       * 
+ * + * repeated int64 pageNumbers = 4; + * @param index The index to set the value at. + * @param value The pageNumbers to set. + * @return This builder for chaining. + */ + public Builder setPageNumbers( + int index, long value) { + + ensurePageNumbersIsMutable(); + pageNumbers_.setLong(index, value); + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + *
+       * Specifies the pages this semantic node appears on.
+       * 
+ * + * repeated int64 pageNumbers = 4; + * @param value The pageNumbers to add. + * @return This builder for chaining. + */ + public Builder addPageNumbers(long value) { + + ensurePageNumbersIsMutable(); + pageNumbers_.addLong(value); + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + *
+       * Specifies the pages this semantic node appears on.
+       * 
+ * + * repeated int64 pageNumbers = 4; + * @param values The pageNumbers to add. + * @return This builder for chaining. + */ + public Builder addAllPageNumbers( + java.lang.Iterable values) { + ensurePageNumbersIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, pageNumbers_); + bitField0_ |= 0x00000008; + onChanged(); + return this; + } + /** + *
+       * Specifies the pages this semantic node appears on.
+       * 
+ * + * repeated int64 pageNumbers = 4; + * @return This builder for chaining. + */ + public Builder clearPageNumbers() { + pageNumbers_ = emptyLongList(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + return this; + } + + private com.google.protobuf.MapField< + java.lang.String, java.lang.String> properties_; + private com.google.protobuf.MapField + internalGetProperties() { + if (properties_ == null) { + return com.google.protobuf.MapField.emptyMapField( + PropertiesDefaultEntryHolder.defaultEntry); + } + return properties_; + } + private com.google.protobuf.MapField + internalGetMutableProperties() { + if (properties_ == null) { + properties_ = com.google.protobuf.MapField.newMapField( + PropertiesDefaultEntryHolder.defaultEntry); + } + if (!properties_.isMutable()) { + properties_ = properties_.copy(); + } + bitField0_ |= 0x00000010; + onChanged(); + return properties_; + } + public int getPropertiesCount() { + return internalGetProperties().getMap().size(); + } + /** + *
+       * Some semantic nodes have additional information, this information is stored in this Map.
+       * 
+ * + * map<string, string> properties = 5; + */ + @java.lang.Override + public boolean containsProperties( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + return internalGetProperties().getMap().containsKey(key); + } + /** + * Use {@link #getPropertiesMap()} instead. + */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getProperties() { + return getPropertiesMap(); + } + /** + *
+       * Some semantic nodes have additional information, this information is stored in this Map.
+       * 
+ * + * map<string, string> properties = 5; + */ + @java.lang.Override + public java.util.Map getPropertiesMap() { + return internalGetProperties().getMap(); + } + /** + *
+       * Some semantic nodes have additional information, this information is stored in this Map.
+       * 
+ * + * map<string, string> properties = 5; + */ + @java.lang.Override + public /* nullable */ +java.lang.String getPropertiesOrDefault( + java.lang.String key, + /* nullable */ +java.lang.String defaultValue) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = + internalGetProperties().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + /** + *
+       * Some semantic nodes have additional information, this information is stored in this Map.
+       * 
+ * + * map<string, string> properties = 5; + */ + @java.lang.Override + public java.lang.String getPropertiesOrThrow( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + java.util.Map map = + internalGetProperties().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + public Builder clearProperties() { + bitField0_ = (bitField0_ & ~0x00000010); + internalGetMutableProperties().getMutableMap() + .clear(); + return this; + } + /** + *
+       * Some semantic nodes have additional information, this information is stored in this Map.
+       * 
+ * + * map<string, string> properties = 5; + */ + public Builder removeProperties( + java.lang.String key) { + if (key == null) { throw new NullPointerException("map key"); } + internalGetMutableProperties().getMutableMap() + .remove(key); + return this; + } + /** + * Use alternate mutation accessors instead. + */ + @java.lang.Deprecated + public java.util.Map + getMutableProperties() { + bitField0_ |= 0x00000010; + return internalGetMutableProperties().getMutableMap(); + } + /** + *
+       * Some semantic nodes have additional information, this information is stored in this Map.
+       * 
+ * + * map<string, string> properties = 5; + */ + public Builder putProperties( + java.lang.String key, + java.lang.String value) { + if (key == null) { throw new NullPointerException("map key"); } + if (value == null) { throw new NullPointerException("map value"); } + internalGetMutableProperties().getMutableMap() + .put(key, value); + bitField0_ |= 0x00000010; + return this; + } + /** + *
+       * Some semantic nodes have additional information, this information is stored in this Map.
+       * 
+ * + * map<string, string> properties = 5; + */ + public Builder putAllProperties( + java.util.Map values) { + internalGetMutableProperties().getMutableMap() + .putAll(values); + bitField0_ |= 0x00000010; + return this; + } + + private java.util.List children_ = + java.util.Collections.emptyList(); + private void ensureChildrenIsMutable() { + if (!((bitField0_ & 0x00000020) != 0)) { + children_ = new java.util.ArrayList(children_); + bitField0_ |= 0x00000020; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder> childrenBuilder_; + + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public java.util.List getChildrenList() { + if (childrenBuilder_ == null) { + return java.util.Collections.unmodifiableList(children_); + } else { + return childrenBuilder_.getMessageList(); + } + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public int getChildrenCount() { + if (childrenBuilder_ == null) { + return children_.size(); + } else { + return childrenBuilder_.getCount(); + } + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData getChildren(int index) { + if (childrenBuilder_ == null) { + return children_.get(index); + } else { + return childrenBuilder_.getMessage(index); + } + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public Builder setChildren( + int index, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData value) { + if (childrenBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureChildrenIsMutable(); + children_.set(index, value); + onChanged(); + } else { + childrenBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public Builder setChildren( + int index, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder builderForValue) { + if (childrenBuilder_ == null) { + ensureChildrenIsMutable(); + children_.set(index, builderForValue.build()); + onChanged(); + } else { + childrenBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public Builder addChildren(com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData value) { + if (childrenBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureChildrenIsMutable(); + children_.add(value); + onChanged(); + } else { + childrenBuilder_.addMessage(value); + } + return this; + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public Builder addChildren( + int index, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData value) { + if (childrenBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureChildrenIsMutable(); + children_.add(index, value); + onChanged(); + } else { + childrenBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public Builder addChildren( + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder builderForValue) { + if (childrenBuilder_ == null) { + ensureChildrenIsMutable(); + children_.add(builderForValue.build()); + onChanged(); + } else { + childrenBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public Builder addChildren( + int index, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder builderForValue) { + if (childrenBuilder_ == null) { + ensureChildrenIsMutable(); + children_.add(index, builderForValue.build()); + onChanged(); + } else { + childrenBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public Builder addAllChildren( + java.lang.Iterable values) { + if (childrenBuilder_ == null) { + ensureChildrenIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, children_); + onChanged(); + } else { + childrenBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public Builder clearChildren() { + if (childrenBuilder_ == null) { + children_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000020); + onChanged(); + } else { + childrenBuilder_.clear(); + } + return this; + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public Builder removeChildren(int index) { + if (childrenBuilder_ == null) { + ensureChildrenIsMutable(); + children_.remove(index); + onChanged(); + } else { + childrenBuilder_.remove(index); + } + return this; + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder getChildrenBuilder( + int index) { + return getChildrenFieldBuilder().getBuilder(index); + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder getChildrenOrBuilder( + int index) { + if (childrenBuilder_ == null) { + return children_.get(index); } else { + return childrenBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public java.util.List + getChildrenOrBuilderList() { + if (childrenBuilder_ != null) { + return childrenBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(children_); + } + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder addChildrenBuilder() { + return getChildrenFieldBuilder().addBuilder( + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.getDefaultInstance()); + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder addChildrenBuilder( + int index) { + return getChildrenFieldBuilder().addBuilder( + index, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.getDefaultInstance()); + } + /** + *
+       * All child Entries of this Entry.
+       * 
+ * + * repeated .EntryData children = 6; + */ + public java.util.List + getChildrenBuilderList() { + return getChildrenFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder> + getChildrenFieldBuilder() { + if (childrenBuilder_ == null) { + childrenBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData.Builder, com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryDataOrBuilder>( + children_, + ((bitField0_ & 0x00000020) != 0), + getParentForChildren(), + isClean()); + children_ = null; + } + return childrenBuilder_; + } + + private com.google.protobuf.Internal.IntList engines_ = + emptyIntList(); + private void ensureEnginesIsMutable() { + if (!((bitField0_ & 0x00000040) != 0)) { + engines_ = makeMutableCopy(engines_); + bitField0_ |= 0x00000040; + } + } + /** + *
+       * Describes the origin of the semantic node.
+       * 
+ * + * repeated .LayoutEngine engines = 7; + * @return A list containing the engines. + */ + public java.util.List getEnginesList() { + return new com.google.protobuf.Internal.IntListAdapter< + com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine>(engines_, engines_converter_); + } + /** + *
+       * Describes the origin of the semantic node.
+       * 
+ * + * repeated .LayoutEngine engines = 7; + * @return The count of engines. + */ + public int getEnginesCount() { + return engines_.size(); + } + /** + *
+       * Describes the origin of the semantic node.
+       * 
+ * + * repeated .LayoutEngine engines = 7; + * @param index The index of the element to return. + * @return The engines at the given index. + */ + public com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine getEngines(int index) { + return engines_converter_.convert(engines_.getInt(index)); + } + /** + *
+       * Describes the origin of the semantic node.
+       * 
+ * + * repeated .LayoutEngine engines = 7; + * @param index The index to set the value at. + * @param value The engines to set. + * @return This builder for chaining. + */ + public Builder setEngines( + int index, com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine value) { + if (value == null) { + throw new NullPointerException(); + } + ensureEnginesIsMutable(); + engines_.setInt(index, value.getNumber()); + onChanged(); + return this; + } + /** + *
+       * Describes the origin of the semantic node.
+       * 
+ * + * repeated .LayoutEngine engines = 7; + * @param value The engines to add. + * @return This builder for chaining. + */ + public Builder addEngines(com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine value) { + if (value == null) { + throw new NullPointerException(); + } + ensureEnginesIsMutable(); + engines_.addInt(value.getNumber()); + onChanged(); + return this; + } + /** + *
+       * Describes the origin of the semantic node.
+       * 
+ * + * repeated .LayoutEngine engines = 7; + * @param values The engines to add. + * @return This builder for chaining. + */ + public Builder addAllEngines( + java.lang.Iterable values) { + ensureEnginesIsMutable(); + for (com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine value : values) { + engines_.addInt(value.getNumber()); + } + onChanged(); + return this; + } + /** + *
+       * Describes the origin of the semantic node.
+       * 
+ * + * repeated .LayoutEngine engines = 7; + * @return This builder for chaining. + */ + public Builder clearEngines() { + engines_ = emptyIntList(); + bitField0_ = (bitField0_ & ~0x00000040); + onChanged(); + return this; + } + /** + *
+       * Describes the origin of the semantic node.
+       * 
+ * + * repeated .LayoutEngine engines = 7; + * @return A list containing the enum numeric values on the wire for engines. + */ + public java.util.List + getEnginesValueList() { + return java.util.Collections.unmodifiableList(engines_); + } + /** + *
+       * Describes the origin of the semantic node.
+       * 
+ * + * repeated .LayoutEngine engines = 7; + * @param index The index of the value to return. + * @return The enum numeric value on the wire of engines at the given index. + */ + public int getEnginesValue(int index) { + return engines_.getInt(index); + } + /** + *
+       * Describes the origin of the semantic node.
+       * 
+ * + * repeated .LayoutEngine engines = 7; + * @param index The index to set the value at. + * @param value The enum numeric value on the wire for engines to set. + * @return This builder for chaining. + */ + public Builder setEnginesValue( + int index, int value) { + ensureEnginesIsMutable(); + engines_.setInt(index, value); + onChanged(); + return this; + } + /** + *
+       * Describes the origin of the semantic node.
+       * 
+ * + * repeated .LayoutEngine engines = 7; + * @param value The enum numeric value on the wire for engines to add. + * @return This builder for chaining. + */ + public Builder addEnginesValue(int value) { + ensureEnginesIsMutable(); + engines_.addInt(value); + onChanged(); + return this; + } + /** + *
+       * Describes the origin of the semantic node.
+       * 
+ * + * repeated .LayoutEngine engines = 7; + * @param values The enum numeric values on the wire for engines to add. + * @return This builder for chaining. + */ + public Builder addAllEnginesValue( + java.lang.Iterable values) { + ensureEnginesIsMutable(); + for (int value : values) { + engines_.addInt(value); + } + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:EntryData) + } + + // @@protoc_insertion_point(class_scope:EntryData) + private static final com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData(); + } + + public static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public EntryData parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_EntryData_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_EntryData_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_EntryData_PropertiesEntry_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_EntryData_PropertiesEntry_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\017EntryData.proto\032\022LayoutEngine.proto\032\016N" + + "odeType.proto\"\202\002\n\tEntryData\022\027\n\004type\030\001 \001(" + + "\0162\t.NodeType\022\016\n\006treeId\030\002 \003(\005\022\026\n\016atomicBl" + + "ockIds\030\003 \003(\003\022\023\n\013pageNumbers\030\004 \003(\003\022.\n\npro" + + "perties\030\005 \003(\0132\032.EntryData.PropertiesEntr" + + "y\022\034\n\010children\030\006 \003(\0132\n.EntryData\022\036\n\007engin" + + "es\030\007 \003(\0162\r.LayoutEngine\0321\n\017PropertiesEnt" + + "ry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B@\n.co" + + "m.iqser.red.service.redaction.v1.server." + + "dataB\016EntryDataProtob\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.getDescriptor(), + com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.getDescriptor(), + }); + internal_static_EntryData_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_EntryData_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_EntryData_descriptor, + new java.lang.String[] { "Type", "TreeId", "AtomicBlockIds", "PageNumbers", "Properties", "Children", "Engines", }); + internal_static_EntryData_PropertiesEntry_descriptor = + internal_static_EntryData_descriptor.getNestedTypes().get(0); + internal_static_EntryData_PropertiesEntry_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_EntryData_PropertiesEntry_descriptor, + new java.lang.String[] { "Key", "Value", }); + descriptor.resolveAllFeaturesImmutable(); + com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.getDescriptor(); + com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/LayoutEngineProto.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/LayoutEngineProto.java new file mode 100644 index 00000000..f3abacf0 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/LayoutEngineProto.java @@ -0,0 +1,176 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: LayoutEngine.proto +// Protobuf Java Version: 4.28.3 + +package com.iqser.red.service.redaction.v1.server.data; + +public final class LayoutEngineProto { + private LayoutEngineProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + LayoutEngineProto.class.getName()); + } + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + /** + * Protobuf enum {@code LayoutEngine} + */ + public enum LayoutEngine + implements com.google.protobuf.ProtocolMessageEnum { + /** + * ALGORITHM = 0; + */ + ALGORITHM(0), + /** + * AI = 1; + */ + AI(1), + /** + * OUTLINE = 2; + */ + OUTLINE(2), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + LayoutEngine.class.getName()); + } + /** + * ALGORITHM = 0; + */ + public static final int ALGORITHM_VALUE = 0; + /** + * AI = 1; + */ + public static final int AI_VALUE = 1; + /** + * OUTLINE = 2; + */ + public static final int OUTLINE_VALUE = 2; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static LayoutEngine valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static LayoutEngine forNumber(int value) { + switch (value) { + case 0: return ALGORITHM; + case 1: return AI; + case 2: return OUTLINE; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + LayoutEngine> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public LayoutEngine findValueByNumber(int number) { + return LayoutEngine.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.getDescriptor().getEnumTypes().get(0); + } + + private static final LayoutEngine[] VALUES = values(); + + public static LayoutEngine valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private LayoutEngine(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:LayoutEngine) + } + + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\022LayoutEngine.proto*2\n\014LayoutEngine\022\r\n\t" + + "ALGORITHM\020\000\022\006\n\002AI\020\001\022\013\n\007OUTLINE\020\002BC\n.com." + + "iqser.red.service.redaction.v1.server.da" + + "taB\021LayoutEngineProtob\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + descriptor.resolveAllFeaturesImmutable(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/NodeTypeProto.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/NodeTypeProto.java new file mode 100644 index 00000000..7a060a67 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/NodeTypeProto.java @@ -0,0 +1,261 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: NodeType.proto +// Protobuf Java Version: 4.28.3 + +package com.iqser.red.service.redaction.v1.server.data; + +public final class NodeTypeProto { + private NodeTypeProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + NodeTypeProto.class.getName()); + } + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + /** + * Protobuf enum {@code NodeType} + */ + public enum NodeType + implements com.google.protobuf.ProtocolMessageEnum { + /** + * DOCUMENT = 0; + */ + DOCUMENT(0), + /** + * SECTION = 1; + */ + SECTION(1), + /** + * SUPER_SECTION = 2; + */ + SUPER_SECTION(2), + /** + * HEADLINE = 3; + */ + HEADLINE(3), + /** + * PARAGRAPH = 4; + */ + PARAGRAPH(4), + /** + * TABLE = 5; + */ + TABLE(5), + /** + * TABLE_CELL = 6; + */ + TABLE_CELL(6), + /** + * IMAGE = 7; + */ + IMAGE(7), + /** + * HEADER = 8; + */ + HEADER(8), + /** + * FOOTER = 9; + */ + FOOTER(9), + /** + * TABLE_OF_CONTENTS = 10; + */ + TABLE_OF_CONTENTS(10), + /** + * TABLE_OF_CONTENTS_ITEM = 11; + */ + TABLE_OF_CONTENTS_ITEM(11), + UNRECOGNIZED(-1), + ; + + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + NodeType.class.getName()); + } + /** + * DOCUMENT = 0; + */ + public static final int DOCUMENT_VALUE = 0; + /** + * SECTION = 1; + */ + public static final int SECTION_VALUE = 1; + /** + * SUPER_SECTION = 2; + */ + public static final int SUPER_SECTION_VALUE = 2; + /** + * HEADLINE = 3; + */ + public static final int HEADLINE_VALUE = 3; + /** + * PARAGRAPH = 4; + */ + public static final int PARAGRAPH_VALUE = 4; + /** + * TABLE = 5; + */ + public static final int TABLE_VALUE = 5; + /** + * TABLE_CELL = 6; + */ + public static final int TABLE_CELL_VALUE = 6; + /** + * IMAGE = 7; + */ + public static final int IMAGE_VALUE = 7; + /** + * HEADER = 8; + */ + public static final int HEADER_VALUE = 8; + /** + * FOOTER = 9; + */ + public static final int FOOTER_VALUE = 9; + /** + * TABLE_OF_CONTENTS = 10; + */ + public static final int TABLE_OF_CONTENTS_VALUE = 10; + /** + * TABLE_OF_CONTENTS_ITEM = 11; + */ + public static final int TABLE_OF_CONTENTS_ITEM_VALUE = 11; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static NodeType valueOf(int value) { + return forNumber(value); + } + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static NodeType forNumber(int value) { + switch (value) { + case 0: return DOCUMENT; + case 1: return SECTION; + case 2: return SUPER_SECTION; + case 3: return HEADLINE; + case 4: return PARAGRAPH; + case 5: return TABLE; + case 6: return TABLE_CELL; + case 7: return IMAGE; + case 8: return HEADER; + case 9: return FOOTER; + case 10: return TABLE_OF_CONTENTS; + case 11: return TABLE_OF_CONTENTS_ITEM; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + NodeType> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public NodeType findValueByNumber(int number) { + return NodeType.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.NodeTypeProto.getDescriptor().getEnumTypes().get(0); + } + + private static final NodeType[] VALUES = values(); + + public static NodeType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private NodeType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:NodeType) + } + + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\016NodeType.proto*\306\001\n\010NodeType\022\014\n\010DOCUMEN" + + "T\020\000\022\013\n\007SECTION\020\001\022\021\n\rSUPER_SECTION\020\002\022\014\n\010H" + + "EADLINE\020\003\022\r\n\tPARAGRAPH\020\004\022\t\n\005TABLE\020\005\022\016\n\nT" + + "ABLE_CELL\020\006\022\t\n\005IMAGE\020\007\022\n\n\006HEADER\020\010\022\n\n\006FO" + + "OTER\020\t\022\025\n\021TABLE_OF_CONTENTS\020\n\022\032\n\026TABLE_O" + + "F_CONTENTS_ITEM\020\013B?\n.com.iqser.red.servi" + + "ce.redaction.v1.server.dataB\rNodeTypePro" + + "tob\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + descriptor.resolveAllFeaturesImmutable(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/RangeProto.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/RangeProto.java new file mode 100644 index 00000000..5cf85f0f --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/RangeProto.java @@ -0,0 +1,606 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// NO CHECKED-IN PROTOBUF GENCODE +// source: Range.proto +// Protobuf Java Version: 4.28.3 + +package com.iqser.red.service.redaction.v1.server.data; + +public final class RangeProto { + private RangeProto() {} + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + RangeProto.class.getName()); + } + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface RangeOrBuilder extends + // @@protoc_insertion_point(interface_extends:Range) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * A start index.
+     * 
+ * + * int32 start = 1; + * @return The start. + */ + int getStart(); + + /** + *
+     * An end index.
+     * 
+ * + * int32 end = 2; + * @return The end. + */ + int getEnd(); + } + /** + * Protobuf type {@code Range} + */ + public static final class Range extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:Range) + RangeOrBuilder { + private static final long serialVersionUID = 0L; + static { + com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion( + com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC, + /* major= */ 4, + /* minor= */ 28, + /* patch= */ 3, + /* suffix= */ "", + Range.class.getName()); + } + // Use Range.newBuilder() to construct. + private Range(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private Range() { + } + + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.RangeProto.internal_static_Range_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.RangeProto.internal_static_Range_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.class, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder.class); + } + + public static final int START_FIELD_NUMBER = 1; + private int start_ = 0; + /** + *
+     * A start index.
+     * 
+ * + * int32 start = 1; + * @return The start. + */ + @java.lang.Override + public int getStart() { + return start_; + } + + public static final int END_FIELD_NUMBER = 2; + private int end_ = 0; + /** + *
+     * An end index.
+     * 
+ * + * int32 end = 2; + * @return The end. + */ + @java.lang.Override + public int getEnd() { + return end_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (start_ != 0) { + output.writeInt32(1, start_); + } + if (end_ != 0) { + output.writeInt32(2, end_); + } + getUnknownFields().writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (start_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, start_); + } + if (end_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(2, end_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof com.iqser.red.service.redaction.v1.server.data.RangeProto.Range)) { + return super.equals(obj); + } + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range other = (com.iqser.red.service.redaction.v1.server.data.RangeProto.Range) obj; + + if (getStart() + != other.getStart()) return false; + if (getEnd() + != other.getEnd()) return false; + if (!getUnknownFields().equals(other.getUnknownFields())) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + START_FIELD_NUMBER; + hash = (53 * hash) + getStart(); + hash = (37 * hash) + END_FIELD_NUMBER; + hash = (53 * hash) + getEnd(); + hash = (29 * hash) + getUnknownFields().hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.iqser.red.service.redaction.v1.server.data.RangeProto.Range prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code Range} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:Range) + com.iqser.red.service.redaction.v1.server.data.RangeProto.RangeOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.iqser.red.service.redaction.v1.server.data.RangeProto.internal_static_Range_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.iqser.red.service.redaction.v1.server.data.RangeProto.internal_static_Range_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.class, com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.Builder.class); + } + + // Construct using com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.newBuilder() + private Builder() { + + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + + } + @java.lang.Override + public Builder clear() { + super.clear(); + bitField0_ = 0; + start_ = 0; + end_ = 0; + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.iqser.red.service.redaction.v1.server.data.RangeProto.internal_static_Range_descriptor; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range getDefaultInstanceForType() { + return com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.getDefaultInstance(); + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range build() { + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range buildPartial() { + com.iqser.red.service.redaction.v1.server.data.RangeProto.Range result = new com.iqser.red.service.redaction.v1.server.data.RangeProto.Range(this); + if (bitField0_ != 0) { buildPartial0(result); } + onBuilt(); + return result; + } + + private void buildPartial0(com.iqser.red.service.redaction.v1.server.data.RangeProto.Range result) { + int from_bitField0_ = bitField0_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.start_ = start_; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.end_ = end_; + } + } + + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.iqser.red.service.redaction.v1.server.data.RangeProto.Range) { + return mergeFrom((com.iqser.red.service.redaction.v1.server.data.RangeProto.Range)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.iqser.red.service.redaction.v1.server.data.RangeProto.Range other) { + if (other == com.iqser.red.service.redaction.v1.server.data.RangeProto.Range.getDefaultInstance()) return this; + if (other.getStart() != 0) { + setStart(other.getStart()); + } + if (other.getEnd() != 0) { + setEnd(other.getEnd()); + } + this.mergeUnknownFields(other.getUnknownFields()); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + start_ = input.readInt32(); + bitField0_ |= 0x00000001; + break; + } // case 8 + case 16: { + end_ = input.readInt32(); + bitField0_ |= 0x00000002; + break; + } // case 16 + default: { + if (!super.parseUnknownField(input, extensionRegistry, tag)) { + done = true; // was an endgroup tag + } + break; + } // default: + } // switch (tag) + } // while (!done) + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.unwrapIOException(); + } finally { + onChanged(); + } // finally + return this; + } + private int bitField0_; + + private int start_ ; + /** + *
+       * A start index.
+       * 
+ * + * int32 start = 1; + * @return The start. + */ + @java.lang.Override + public int getStart() { + return start_; + } + /** + *
+       * A start index.
+       * 
+ * + * int32 start = 1; + * @param value The start to set. + * @return This builder for chaining. + */ + public Builder setStart(int value) { + + start_ = value; + bitField0_ |= 0x00000001; + onChanged(); + return this; + } + /** + *
+       * A start index.
+       * 
+ * + * int32 start = 1; + * @return This builder for chaining. + */ + public Builder clearStart() { + bitField0_ = (bitField0_ & ~0x00000001); + start_ = 0; + onChanged(); + return this; + } + + private int end_ ; + /** + *
+       * An end index.
+       * 
+ * + * int32 end = 2; + * @return The end. + */ + @java.lang.Override + public int getEnd() { + return end_; + } + /** + *
+       * An end index.
+       * 
+ * + * int32 end = 2; + * @param value The end to set. + * @return This builder for chaining. + */ + public Builder setEnd(int value) { + + end_ = value; + bitField0_ |= 0x00000002; + onChanged(); + return this; + } + /** + *
+       * An end index.
+       * 
+ * + * int32 end = 2; + * @return This builder for chaining. + */ + public Builder clearEnd() { + bitField0_ = (bitField0_ & ~0x00000002); + end_ = 0; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:Range) + } + + // @@protoc_insertion_point(class_scope:Range) + private static final com.iqser.red.service.redaction.v1.server.data.RangeProto.Range DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.iqser.red.service.redaction.v1.server.data.RangeProto.Range(); + } + + public static com.iqser.red.service.redaction.v1.server.data.RangeProto.Range getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Range parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + Builder builder = newBuilder(); + try { + builder.mergeFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(builder.buildPartial()); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial()); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e) + .setUnfinishedMessage(builder.buildPartial()); + } + return builder.buildPartial(); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public com.iqser.red.service.redaction.v1.server.data.RangeProto.Range getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_Range_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_Range_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\013Range.proto\"#\n\005Range\022\r\n\005start\030\001 \001(\005\022\013\n" + + "\003end\030\002 \001(\005B<\n.com.iqser.red.service.reda" + + "ction.v1.server.dataB\nRangeProtob\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_Range_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_Range_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_Range_descriptor, + new java.lang.String[] { "Start", "End", }); + descriptor.resolveAllFeaturesImmutable(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentPage.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentPage.java new file mode 100644 index 00000000..5b46ff27 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentPage.java @@ -0,0 +1,25 @@ +package com.iqser.red.service.redaction.v1.server.data.old; + +import java.io.Serializable; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldDefaults; + +@Deprecated +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE) +public class DocumentPage implements Serializable { + + int number; + int height; + int width; + int rotation; + +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentPositionData.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentPositionData.java new file mode 100644 index 00000000..7e6faf54 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentPositionData.java @@ -0,0 +1,24 @@ +package com.iqser.red.service.redaction.v1.server.data.old; + +import java.io.Serializable; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldDefaults; + +@Deprecated +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE) +public class DocumentPositionData implements Serializable { + + Long id; + int[] stringIdxToPositionIdx; + float[][] positions; + +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentStructure.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentStructure.java new file mode 100644 index 00000000..1f3c27a0 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentStructure.java @@ -0,0 +1,158 @@ +package com.iqser.red.service.redaction.v1.server.data.old; + +import java.awt.geom.Rectangle2D; +import java.io.Serializable; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldDefaults; + +@Deprecated +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE) +public class DocumentStructure implements Serializable { + + EntryData root; + + public static class TableProperties implements Serializable { + + public static final String NUMBER_OF_ROWS = "numberOfRows"; + public static final String NUMBER_OF_COLS = "numberOfCols"; + + } + + public static class ImageProperties implements Serializable { + + public static final String TRANSPARENT = "transparent"; + public static final String IMAGE_TYPE = "imageType"; + public static final String POSITION = "position"; + public static final String ID = "id"; + + public static final String REPRESENTATION_HASH = "representationHash"; + + } + + public static class TableCellProperties implements Serializable { + + public static final String B_BOX = "bBox"; + public static final String ROW = "row"; + public static final String COL = "col"; + public static final String HEADER = "header"; + + } + + public static class DuplicateParagraphProperties implements Serializable { + + public static final String UNSORTED_TEXTBLOCK_ID = "utbid"; + + } + + public static final String RECTANGLE_DELIMITER = ";"; + + + public static Rectangle2D parseRectangle2D(String bBox) { + + List floats = Arrays.stream(bBox.split(RECTANGLE_DELIMITER)) + .map(Float::parseFloat) + .toList(); + return new Rectangle2D.Float(floats.get(0), floats.get(1), floats.get(2), floats.get(3)); + } + + + public static double[] parseRepresentationVector(String representationHash) { + + String[] stringArray = representationHash.split("[,\\s]+"); + double[] doubleArray = new double[stringArray.length]; + for (int i = 0; i < stringArray.length; i++) { + doubleArray[i] = Double.parseDouble(stringArray[i]); + } + + return doubleArray; + } + + + public EntryData get(List tocId) { + + if (tocId.isEmpty()) { + return root; + } + EntryData entry = root.children.get(tocId.get(0)); + for (int id : tocId.subList(1, tocId.size())) { + entry = entry.children.get(id); + } + return entry; + } + + + public Stream streamAllEntries() { + + return Stream.concat(Stream.of(root), root.children.stream()) + .flatMap(DocumentStructure::flatten); + } + + + public String toString() { + + return String.join("\n", + streamAllEntries().map(EntryData::toString) + .toList()); + } + + + private static Stream flatten(EntryData entry) { + + return Stream.concat(Stream.of(entry), + entry.children.stream() + .flatMap(DocumentStructure::flatten)); + } + + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + @FieldDefaults(level = AccessLevel.PRIVATE) + public static class EntryData implements Serializable { + + NodeType type; + int[] treeId; + Long[] atomicBlockIds; + Long[] pageNumbers; + Map properties; + List children; + Set engines; + + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("["); + for (int i : treeId) { + sb.append(i); + sb.append(","); + } + sb.delete(sb.length() - 1, sb.length()); + sb.append("]: "); + + sb.append(type); + sb.append(" atbs = "); + sb.append(atomicBlockIds.length); + + return sb.toString(); + } + + } + +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentTextData.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentTextData.java new file mode 100644 index 00000000..d8ae3287 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/DocumentTextData.java @@ -0,0 +1,28 @@ +package com.iqser.red.service.redaction.v1.server.data.old; + +import java.io.Serializable; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.FieldDefaults; + +@Deprecated +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE) +public class DocumentTextData implements Serializable { + + Long id; + Long page; + String searchText; + int numberOnPage; + int start; + int end; + int[] lineBreaks; + +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/LayoutEngine.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/LayoutEngine.java new file mode 100644 index 00000000..227f01fd --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/LayoutEngine.java @@ -0,0 +1,8 @@ +package com.iqser.red.service.redaction.v1.server.data.old; + +@Deprecated +public enum LayoutEngine { + ALGORITHM, + AI, + OUTLINE +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/NodeType.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/NodeType.java new file mode 100644 index 00000000..fa6c7d53 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/data/old/NodeType.java @@ -0,0 +1,24 @@ +package com.iqser.red.service.redaction.v1.server.data.old; + +import java.io.Serializable; +import java.util.Locale; + +@Deprecated +public enum NodeType implements Serializable { + DOCUMENT, + SECTION, + SUPER_SECTION, + HEADLINE, + PARAGRAPH, + TABLE, + TABLE_CELL, + IMAGE, + HEADER, + FOOTER; + + + public String toString() { + + return this.name().charAt(0) + this.name().substring(1).toLowerCase(Locale.ROOT); + } +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/mapper/DocumentDataMapper.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/mapper/DocumentDataMapper.java new file mode 100644 index 00000000..6255a6b4 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/mapper/DocumentDataMapper.java @@ -0,0 +1,197 @@ +package com.iqser.red.service.redaction.v1.server.mapper; + +import java.awt.geom.Rectangle2D; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.iqser.red.service.redaction.v1.server.data.DocumentData; +import com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages; +import com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage; +import com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData; +import com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData; +import com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position; +import com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure; +import com.iqser.red.service.redaction.v1.server.data.DocumentStructureWrapper; +import com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData; +import com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData; +import com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData; +import com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto; +import com.iqser.red.service.redaction.v1.server.data.NodeTypeProto; +import com.iqser.red.service.redaction.v1.server.data.RangeProto; +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.DuplicatedParagraph; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +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.Table; +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 lombok.experimental.UtilityClass; + +@UtilityClass +public class DocumentDataMapper { + + public DocumentData toDocumentData(Document document) { + + List documentTextData = document.streamTerminalTextBlocksInOrder() + .flatMap(textBlock -> textBlock.getAtomicTextBlocks() + .stream()) + .distinct() + .map(DocumentDataMapper::toAtomicTextBlockData) + .toList(); + + AllDocumentTextData allDocumentTextData = AllDocumentTextData.newBuilder().addAllDocumentTextData(documentTextData).build(); + + List atomicPositionBlockData = document.streamTerminalTextBlocksInOrder() + .flatMap(textBlock -> textBlock.getAtomicTextBlocks() + .stream()) + .distinct() + .map(DocumentDataMapper::toAtomicPositionBlockData) + .toList(); + + AllDocumentPositionData allDocumentPositionData = AllDocumentPositionData.newBuilder().addAllDocumentPositionData(atomicPositionBlockData).build(); + + List documentPageData = document.getPages() + .stream() + .map(DocumentDataMapper::toPageData) + .toList(); + + AllDocumentPages allDocumentPages = AllDocumentPages.newBuilder().addAllDocumentPages(documentPageData).build(); + DocumentStructureWrapper tableOfContentsData = toDocumentTreeData(document.getDocumentTree()); + return DocumentData.builder() + .documentTextData(allDocumentTextData) + .documentPositionData(allDocumentPositionData) + .documentPages(allDocumentPages) + .documentStructureWrapper(tableOfContentsData) + .build(); + } + + + private DocumentStructureWrapper toDocumentTreeData(DocumentTree documentTree) { + + return new DocumentStructureWrapper(DocumentStructure.newBuilder().setRoot(toEntryData(documentTree.getRoot())).build()); + } + + + private EntryData toEntryData(DocumentTree.Entry entry) { + + List atomicTextBlocks; + + if (entry.getNode().isLeaf()) { + atomicTextBlocks = toAtomicTextBlockIds(entry.getNode().getLeafTextBlock()); + } else { + atomicTextBlocks = new ArrayList<>(); + } + + Map properties = switch (entry.getType()) { + case TABLE -> PropertiesMapper.buildTableProperties((Table) entry.getNode()); + case TABLE_CELL -> PropertiesMapper.buildTableCellProperties((TableCell) entry.getNode()); + case IMAGE -> PropertiesMapper.buildImageProperties((Image) entry.getNode()); + case PARAGRAPH -> + entry.getNode() instanceof DuplicatedParagraph duplicatedParagraph ? PropertiesMapper.buildDuplicateParagraphProperties(duplicatedParagraph) : new HashMap<>(); + default -> new HashMap<>(); + }; + + var documentBuilder = EntryData.newBuilder() + .addAllTreeId(entry.getTreeId()) + .addAllChildren(entry.getChildren() + .stream() + .map(DocumentDataMapper::toEntryData) + .toList()) + .setType(resolveType(entry.getType())) + .addAllAtomicBlockIds(atomicTextBlocks) + .addAllPageNumbers(entry.getNode().getPages() + .stream() + .map(Page::getNumber) + .map(Integer::longValue) + .toList()) + .putAllProperties(properties); + + if (entry.getNode() != null) { + documentBuilder.addAllEngines(entry.getNode().getEngines() + .stream() + .map(engine -> LayoutEngineProto.LayoutEngine.valueOf(engine.name())) + .toList()); + } else { + documentBuilder.addAllEngines(new HashSet<>(Set.of(LayoutEngineProto.LayoutEngine.ALGORITHM))); + } + return documentBuilder.build(); + } + + + private static NodeTypeProto.NodeType resolveType(NodeType type) { + + return NodeTypeProto.NodeType.valueOf(type.name()); + } + + + private List toAtomicTextBlockIds(TextBlock textBlock) { + + return textBlock.getAtomicTextBlocks() + .stream() + .map(AtomicTextBlock::getId) + .toList(); + } + + + private DocumentPage toPageData(Page p) { + + return DocumentPage.newBuilder().setRotation(p.getRotation()).setHeight(p.getHeight()).setWidth(p.getWidth()).setNumber(p.getNumber()).build(); + } + + + private DocumentTextData toAtomicTextBlockData(AtomicTextBlock atomicTextBlock) { + + return DocumentTextData.newBuilder() + .setId(atomicTextBlock.getId()) + .setPage(atomicTextBlock.getPage().getNumber().longValue()) + .setSearchText(atomicTextBlock.getSearchText()) + .setNumberOnPage(atomicTextBlock.getNumberOnPage()) + .setStart(atomicTextBlock.getTextRange().start()) + .setEnd(atomicTextBlock.getTextRange().end()) + .addAllLineBreaks(atomicTextBlock.getLineBreaks()) + .addAllItalicTextRanges(atomicTextBlock.getItalicTextRanges() + .stream() + .map(r -> RangeProto.Range.newBuilder().setStart(r.start()).setEnd(r.end()).build()) + .toList()) + .addAllBoldTextRanges(atomicTextBlock.getBoldTextRanges() + .stream() + .map(r -> RangeProto.Range.newBuilder().setStart(r.start()).setEnd(r.end()).build()) + .toList()) + .build(); + } + + + private DocumentPositionData toAtomicPositionBlockData(AtomicTextBlock atomicTextBlock) { + + return DocumentPositionData.newBuilder() + .setId(atomicTextBlock.getId()) + .addAllPositions(toPositions(atomicTextBlock.getPositions())) + .addAllStringIdxToPositionIdx(atomicTextBlock.getStringIdxToPositionIdx()) + .build(); + } + + + private static List toPositions(List rects) { + + List positions = new ArrayList<>(); + for (Rectangle2D rect : rects) { + positions.add(toPosition(rect)); + } + return positions; + } + + + private static Position toPosition(Rectangle2D rect) { + + return Position.newBuilder().addValue((float) rect.getMinX()).addValue((float) rect.getMinY()).addValue((float) rect.getWidth()).addValue((float) rect.getHeight()).build(); + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/DocumentGraphMapper.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/mapper/DocumentGraphMapper.java similarity index 72% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/DocumentGraphMapper.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/mapper/DocumentGraphMapper.java index 8198a80f..3d1c8136 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/DocumentGraphMapper.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/mapper/DocumentGraphMapper.java @@ -1,17 +1,18 @@ -package com.iqser.red.service.redaction.v1.server.service.document; +package com.iqser.red.service.redaction.v1.server.mapper; -import static com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPageProto.DocumentPage; -import static com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPositionDataProto.AllDocumentPositionData; -import static com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentTextDataProto.AllDocumentTextData; -import static com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.EntryDataProto.EntryData; +import static com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.DocumentPage; +import static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData; +import static com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData; +import static com.iqser.red.service.redaction.v1.server.data.EntryDataProto.EntryData; import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.NoSuchElementException; -import com.iqser.red.service.redaction.v1.server.model.document.DocumentData; +import com.iqser.red.service.redaction.v1.server.data.DocumentData; 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.DuplicatedParagraph; @@ -19,6 +20,7 @@ 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.Headline; import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.LayoutEngine; 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; @@ -26,6 +28,8 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNo import com.iqser.red.service.redaction.v1.server.model.document.nodes.SuperSection; 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.nodes.TableOfContents; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.TableOfContentsItem; 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; @@ -41,15 +45,15 @@ public class DocumentGraphMapper { DocumentTree documentTree = new DocumentTree(document); Context context = new Context(documentData, documentTree); - context.pageData.addAll(documentData.getDocumentPages().getDocumentPagesList() - .stream() - .map(DocumentGraphMapper::buildPage) - .toList()); + context.pages.addAll(documentData.getDocumentPages().getDocumentPagesList() + .stream() + .map(DocumentGraphMapper::buildPage) + .toList()); context.documentTree.getRoot().getChildren().addAll(buildEntries(documentData.getDocumentStructure().getRoot().getChildrenList(), context)); document.setDocumentTree(context.documentTree); - document.setPages(new HashSet<>(context.pageData)); + document.setPages(new HashSet<>(context.pages)); document.setNumberOfPages(documentData.getDocumentPages().getDocumentPagesCount()); document.setTextBlock(document.getTextBlock()); @@ -70,20 +74,21 @@ public class DocumentGraphMapper { SemanticNode node = switch (entryData.getType()) { case SECTION -> buildSection(context); case SUPER_SECTION -> buildSuperSection(context); - case PARAGRAPH -> buildParagraph(context, entryData.getProperties()); + case PARAGRAPH -> buildParagraph(context, entryData.getPropertiesMap()); case HEADLINE -> buildHeadline(context); case HEADER -> buildHeader(context); case FOOTER -> buildFooter(context); - case TABLE -> buildTable(context, entryData.getProperties()); - case TABLE_CELL -> buildTableCell(context, entryData.getProperties()); - case IMAGE -> buildImage(context, entryData.getProperties(), entryData.getPageNumbersList()); + case TABLE -> buildTable(context, entryData.getPropertiesMap()); + case TABLE_CELL -> buildTableCell(context, entryData.getPropertiesMap()); + case IMAGE -> buildImage(context, entryData.getPropertiesMap(), entryData.getPageNumbersList()); + case TABLE_OF_CONTENTS -> buildTableOfContents(context); + case TABLE_OF_CONTENTS_ITEM -> buildTableOfContentsItem(context); default -> throw new UnsupportedOperationException("Not yet implemented for type " + entryData.getType()); }; if (entryData.getAtomicBlockIdsCount() > 0) { TextBlock textBlock = toTextBlock(entryData.getAtomicBlockIdsList(), context, node); node.setLeafTextBlock(textBlock); - switch (entryData.getType()) { case HEADER -> pages.forEach(page -> page.setHeader((Header) node)); case FOOTER -> pages.forEach(page -> page.setFooter((Footer) node)); @@ -91,15 +96,30 @@ public class DocumentGraphMapper { default -> textBlock.getAtomicTextBlocks() .forEach(atb -> atb.getPage().getTextBlocksOnPage().add(atb)); } - } List treeId = entryData.getTreeIdList(); - entryData.getEnginesList() - .forEach(node::addEngine); node.setTreeId(treeId); + entryData.getEnginesList() + .stream() + .map(engine -> LayoutEngine.valueOf(engine.name())) + .forEach(node::addEngine); + newEntries.add(DocumentTree.Entry.builder().treeId(treeId).children(buildEntries(entryData.getChildrenList(), context)).node(node).build()); - } return newEntries; + } + return newEntries; + } + + + private static TableOfContents buildTableOfContents(Context context) { + + return TableOfContents.builder().documentTree(context.documentTree).build(); + } + + + private static TableOfContentsItem buildTableOfContentsItem(Context context) { + + return TableOfContentsItem.builder().documentTree(context.documentTree).build(); } @@ -184,10 +204,13 @@ public class DocumentGraphMapper { private AtomicTextBlock getAtomicTextBlock(Context context, SemanticNode parent, Long atomicTextBlockId) { - return AtomicTextBlock.fromAtomicTextBlockData(context.documentTextData.getDocumentTextData(Math.toIntExact(atomicTextBlockId)), - context.documentPositionData.getDocumentPositionData(Math.toIntExact(atomicTextBlockId)), + return AtomicTextBlock.fromAtomicTextBlockData(context.documentTextDataBlockData.getDocumentTextDataList() + .get(Math.toIntExact(atomicTextBlockId)), + context.atomicPositionBlockData.getDocumentPositionDataList() + .get(Math.toIntExact(atomicTextBlockId)), parent, - context.getPage(context.documentTextData.getDocumentTextData(Math.toIntExact(atomicTextBlockId)).getPage())); + context.getPage(context.documentTextDataBlockData.getDocumentTextDataList() + .get(Math.toIntExact(atomicTextBlockId)).getPage())); } @@ -200,28 +223,31 @@ public class DocumentGraphMapper { static final class Context { private final DocumentTree documentTree; - private final List pageData; - private final AllDocumentTextData documentTextData; - private final AllDocumentPositionData documentPositionData; + private final List pages; + private final AllDocumentTextData documentTextDataBlockData; + private final AllDocumentPositionData atomicPositionBlockData; Context(DocumentData documentData, DocumentTree documentTree) { this.documentTree = documentTree; - this.pageData = new ArrayList<>(); - this.documentTextData = documentData.getDocumentTextData(); - this.documentPositionData = documentData.getDocumentPositionData(); + this.pages = new LinkedList<>(); + this.documentTextDataBlockData = documentData.getDocumentTextData(); + this.atomicPositionBlockData = documentData.getDocumentPositionData(); } - private Page getPage(Long pageIndex) { + public Page getPage(Long pageIndex) { - Page page = pageData.get(Math.toIntExact(pageIndex) - 1); - assert page.getNumber() == Math.toIntExact(pageIndex); - return page; + return pages.stream() + .filter(page -> page.getNumber() == Math.toIntExact(pageIndex)) + .findFirst() + .orElseThrow(() -> new NoSuchElementException(String.format("ClassificationPage with number %d not found", pageIndex))); } } } + + diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/mapper/PropertiesMapper.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/mapper/PropertiesMapper.java new file mode 100644 index 00000000..a5b987e9 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/mapper/PropertiesMapper.java @@ -0,0 +1,151 @@ +package com.iqser.red.service.redaction.v1.server.mapper; + +import java.awt.geom.Rectangle2D; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import com.iqser.red.service.redaction.v1.server.data.DocumentStructureWrapper; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.DuplicatedParagraph; +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.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; + +import lombok.experimental.UtilityClass; + +@UtilityClass +public class PropertiesMapper { + + public static Map buildImageProperties(Image image) { + + Map properties = new HashMap<>(); + properties.put(DocumentStructureWrapper.ImageProperties.IMAGE_TYPE, image.getImageType().name()); + properties.put(DocumentStructureWrapper.ImageProperties.TRANSPARENT, String.valueOf(image.isTransparent())); + properties.put(DocumentStructureWrapper.ImageProperties.POSITION, toString(image.getPosition())); + properties.put(DocumentStructureWrapper.ImageProperties.ID, image.getId()); + properties.put(DocumentStructureWrapper.ImageProperties.REPRESENTATION_HASH, image.getRepresentationHash()); + return properties; + } + + + public static Map buildTableCellProperties(TableCell tableCell) { + + Map properties = new HashMap<>(); + properties.put(DocumentStructureWrapper.TableCellProperties.ROW, String.valueOf(tableCell.getRow())); + properties.put(DocumentStructureWrapper.TableCellProperties.COL, String.valueOf(tableCell.getCol())); + properties.put(DocumentStructureWrapper.TableCellProperties.HEADER, String.valueOf(tableCell.isHeader())); + + if (tableCell.getPages().size() > 1 || tableCell.getBBox().keySet().size() > 1) { + throw new IllegalArgumentException("TableCell can only occur on a single page!"); + } + String bBoxString = toString(tableCell.getBBox() + .get(tableCell.getPages() + .stream() + .findFirst() + .get())); + properties.put(DocumentStructureWrapper.TableCellProperties.B_BOX, bBoxString); + + return properties; + } + + + public static Map buildTableProperties(Table table) { + + Map properties = new HashMap<>(); + properties.put(DocumentStructureWrapper.TableProperties.NUMBER_OF_ROWS, String.valueOf(table.getNumberOfRows())); + properties.put(DocumentStructureWrapper.TableProperties.NUMBER_OF_COLS, String.valueOf(table.getNumberOfCols())); + return properties; + } + + + public static void parseImageProperties(Map properties, Image.ImageBuilder builder) { + + builder.imageType(parseImageType(properties.get(DocumentStructureWrapper.ImageProperties.IMAGE_TYPE))); + builder.transparent(Boolean.parseBoolean(properties.get(DocumentStructureWrapper.ImageProperties.TRANSPARENT))); + builder.position(DocumentStructureWrapper.parseRectangle2D(properties.get(DocumentStructureWrapper.ImageProperties.POSITION))); + } + + + public static void parseTableCellProperties(Map properties, TableCell.TableCellBuilder builder) { + + builder.row(Integer.parseInt(properties.get(DocumentStructureWrapper.TableCellProperties.ROW))); + builder.col(Integer.parseInt(properties.get(DocumentStructureWrapper.TableCellProperties.COL))); + builder.header(Boolean.parseBoolean(properties.get(DocumentStructureWrapper.TableCellProperties.HEADER))); + builder.bBox(DocumentStructureWrapper.parseRectangle2D(properties.get(DocumentStructureWrapper.TableCellProperties.B_BOX))); + } + + + public static void parseTableProperties(Map properties, Table.TableBuilder builder) { + + builder.numberOfRows(Integer.parseInt(properties.get(DocumentStructureWrapper.TableProperties.NUMBER_OF_ROWS))); + builder.numberOfCols(Integer.parseInt(properties.get(DocumentStructureWrapper.TableProperties.NUMBER_OF_COLS))); + } + + + public static Map buildDuplicateParagraphProperties(DuplicatedParagraph duplicatedParagraph) { + + Map properties = new HashMap<>(); + properties.put(DocumentStructureWrapper.DuplicateParagraphProperties.UNSORTED_TEXTBLOCK_ID, + Arrays.toString(toAtomicTextBlockIds(duplicatedParagraph.getUnsortedLeafTextBlock()))); + return properties; + } + + + public static boolean isDuplicateParagraph(Map properties) { + + return properties.containsKey(DocumentStructureWrapper.DuplicateParagraphProperties.UNSORTED_TEXTBLOCK_ID); + } + + + public static List getUnsortedTextblockIds(Map properties) { + + return toLongList(properties.get(DocumentStructureWrapper.DuplicateParagraphProperties.UNSORTED_TEXTBLOCK_ID)); + } + + + public static List toLongList(String ids) { + + return Arrays.stream(ids.substring(1, ids.length() - 1).trim().split(",")) + .map(Long::valueOf) + .toList(); + } + + + private static ImageType parseImageType(String imageType) { + + try { + return ImageType.valueOf(imageType.toUpperCase(Locale.ROOT)); + } catch (IllegalArgumentException e) { + return ImageType.OTHER; + } + } + + + public static String toString(Rectangle2D rectangle2D) { + + return String.format(Locale.US, + "%f%s%f%s%f%s%f", + rectangle2D.getX(), + DocumentStructureWrapper.RECTANGLE_DELIMITER, + rectangle2D.getY(), + DocumentStructureWrapper.RECTANGLE_DELIMITER, + rectangle2D.getWidth(), + DocumentStructureWrapper.RECTANGLE_DELIMITER, + rectangle2D.getHeight()); + } + + + private static Long[] toAtomicTextBlockIds(TextBlock textBlock) { + + return textBlock.getAtomicTextBlocks() + .stream() + .map(AtomicTextBlock::getId) + .toArray(Long[]::new); + } + +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/AbstractNodeVisitor.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/AbstractNodeVisitor.java new file mode 100644 index 00000000..6d6423ee --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/AbstractNodeVisitor.java @@ -0,0 +1,116 @@ +package com.iqser.red.service.redaction.v1.server.model.document; + +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +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.Headline; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +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.SuperSection; +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.nodes.TableOfContents; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.TableOfContentsItem; + +public abstract class AbstractNodeVisitor implements NodeVisitor { + + @Override + public void visit(Document document) { + + defaultVisit(document); + } + + + @Override + public void visit(SuperSection superSection) { + + defaultVisit(superSection); + } + + + @Override + public void visit(Section section) { + + defaultVisit(section); + } + + + @Override + public void visit(Headline headline) { + + defaultVisit(headline); + } + + + @Override + public void visit(Paragraph paragraph) { + + defaultVisit(paragraph); + } + + + @Override + public void visit(Footer footer) { + + defaultVisit(footer); + } + + + @Override + public void visit(Header header) { + + defaultVisit(header); + } + + + @Override + public void visit(Image image) { + + defaultVisit(image); + } + + + @Override + public void visit(Table table) { + + defaultVisit(table); + } + + + @Override + public void visit(TableCell tableCell) { + + defaultVisit(tableCell); + } + + + @Override + public void visit(TableOfContents toc) { + + defaultVisit(toc); + } + + + @Override + public void visit(TableOfContentsItem toci) { + + defaultVisit(toci); + } + + + public void visitNodeDefault(SemanticNode node) { + // By default, it does nothing + } + + + protected void defaultVisit(SemanticNode semanticNode) { + + visitNodeDefault(semanticNode); + semanticNode.streamChildren() + .forEach(node -> node.accept(this)); + + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/ConsecutiveBoundaryCollector.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/ConsecutiveBoundaryCollector.java similarity index 100% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/ConsecutiveBoundaryCollector.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/ConsecutiveBoundaryCollector.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentTree.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentTree.java similarity index 96% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentTree.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentTree.java index c19fd30d..5c7ba341 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentTree.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/DocumentTree.java @@ -296,6 +296,22 @@ public class DocumentTree { } + public Optional findEntryById(List treeId) { + + if (treeId.isEmpty()) { + return Optional.of(root); + } + Entry entry = root; + for (int id : treeId) { + if (id < 0 || id >= entry.children.size()) { + return Optional.empty(); + } + entry = entry.children.get(id); + } + return Optional.of(entry); + } + + public Stream mainEntries() { return root.children.stream(); diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/NodeVisitor.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/NodeVisitor.java new file mode 100644 index 00000000..2483af13 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/NodeVisitor.java @@ -0,0 +1,53 @@ +package com.iqser.red.service.redaction.v1.server.model.document; + +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; +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.Headline; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.Image; +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.SuperSection; +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.nodes.TableOfContents; +import com.iqser.red.service.redaction.v1.server.model.document.nodes.TableOfContentsItem; + +public interface NodeVisitor { + + void visit(Document document); + + + void visit(SuperSection superSection); + + + void visit(Section section); + + + void visit(Headline headline); + + + void visit(Paragraph paragraph); + + + void visit(Footer footer); + + + void visit(Header header); + + + void visit(Image image); + + + void visit(Table table); + + + void visit(TableCell tableCell); + + + void visit(TableOfContents tableOfContents); + + + void visit(TableOfContentsItem tableOfContentsItem); + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/TextRange.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/TextRange.java similarity index 98% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/TextRange.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/TextRange.java index d0f2e8a5..5efdbc3a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/TextRange.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/TextRange.java @@ -134,6 +134,12 @@ public class TextRange implements Comparable { } + public boolean containsExclusive(int index) { + + return start <= index && index < end; + } + + /** * Checks if this {@link TextRange} intersects with another {@link TextRange}. * diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/EntityType.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/EntityType.java similarity index 100% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/EntityType.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/EntityType.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/IEntity.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/IEntity.java similarity index 94% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/IEntity.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/IEntity.java index 9929cc3c..2e8aba2d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/IEntity.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/IEntity.java @@ -6,7 +6,6 @@ import java.util.PriorityQueue; import java.util.Set; import com.iqser.red.service.redaction.v1.server.model.document.TextRange; -import com.iqser.red.service.redaction.v1.server.model.drools.RuleIdentifier; import lombok.NonNull; @@ -95,6 +94,7 @@ public interface IEntity { */ // 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() { + if (this.getMatchedRule().isHigherPriorityThanManual()) { return getMatchedRule().isApplied(); } @@ -120,6 +120,7 @@ public interface IEntity { * @return True if ignored, false otherwise. */ default boolean ignored() { + if (this.getMatchedRule().isHigherPriorityThanManual()) { return getMatchedRule().isIgnored(); } @@ -135,10 +136,11 @@ public interface IEntity { * @return True if removed, false otherwise. */ default boolean removed() { - if (this.getMatchedRule().isHigherPriorityThanManual()) { - return getMatchedRule().isRemoved(); - } - return getManualOverwrite().getRemoved() + + if (this.getMatchedRule().isHigherPriorityThanManual()) { + return getMatchedRule().isRemoved(); + } + return getManualOverwrite().getRemoved() .orElse(getMatchedRule().isRemoved()); } @@ -149,6 +151,7 @@ public interface IEntity { * @return True if resized, false otherwise. */ default boolean resized() { + if (this.getMatchedRule().isHigherPriorityThanManual()) { return getMatchedRule().isRemoved(); } @@ -384,15 +387,9 @@ public interface IEntity { * * @return The built reason string. */ - default String buildReasonWithManualChangeDescriptions() { + default String buildReason() { - if (getManualOverwrite().getDescriptions().isEmpty()) { - return getMatchedRule().getReason(); - } - if (getMatchedRule().getReason().isEmpty()) { - return String.join(", ", getManualOverwrite().getDescriptions()); - } - return getMatchedRule().getReason() + ", " + String.join(", ", getManualOverwrite().getDescriptions()); + return getMatchedRule().getReason(); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/ManualChangeOverwrite.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/ManualChangeOverwrite.java similarity index 82% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/ManualChangeOverwrite.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/ManualChangeOverwrite.java index d68ab337..559fd517 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/ManualChangeOverwrite.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/ManualChangeOverwrite.java @@ -1,10 +1,8 @@ package com.iqser.red.service.redaction.v1.server.model.document.entity; -import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; -import java.util.Map; import java.util.Optional; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.BaseAnnotation; @@ -14,7 +12,6 @@ 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.ManualRedactionEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction; -import com.iqser.red.service.redaction.v1.server.model.RectangleWithPage; import lombok.AccessLevel; import lombok.AllArgsConstructor; @@ -26,18 +23,9 @@ import lombok.experimental.FieldDefaults; @FieldDefaults(level = AccessLevel.PRIVATE) public class ManualChangeOverwrite { - private static final Map, String> MANUAL_CHANGE_DESCRIPTIONS = Map.of(// - ManualRedactionEntry.class, "created by manual change", // - ManualLegalBasisChange.class, "legal basis was manually changed", // - ManualResizeRedaction.class, "resized by manual override", // - ManualForceRedaction.class, "forced by manual override", // - IdRemoval.class, "removed by manual override", // - ManualRecategorization.class, "recategorized by manual override"); - @Builder.Default List manualChanges = new LinkedList<>(); boolean changed; - List descriptions; String type; String legalBasis; String section; @@ -63,6 +51,7 @@ public class ManualChangeOverwrite { this.manualChanges = new LinkedList<>(); } + public ManualChangeOverwrite(EntityType entityType, String section) { this(entityType); @@ -95,8 +84,6 @@ public class ManualChangeOverwrite { private void updateFields(List sortedManualChanges) { - descriptions = new LinkedList<>(); - for (BaseAnnotation manualChange : sortedManualChanges) { // ManualRedactionEntries are created prior to rule execution in analysis service. @@ -151,8 +138,6 @@ public class ManualChangeOverwrite { legalBasis = recategorization.getLegalBasis(); } } - - descriptions.add(MANUAL_CHANGE_DESCRIPTIONS.get(manualChange.getClass())); } changed = false; } @@ -245,13 +230,6 @@ public class ManualChangeOverwrite { } - public List getDescriptions() { - - calculateCurrentOverride(); - return descriptions == null ? Collections.emptyList() : descriptions; - } - - public Optional> getPositions() { calculateCurrentOverride(); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/MatchedRule.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/MatchedRule.java similarity index 94% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/MatchedRule.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/MatchedRule.java index 02f485c4..5265bf94 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/MatchedRule.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/MatchedRule.java @@ -5,9 +5,6 @@ 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; @@ -57,11 +54,14 @@ public final class MatchedRule implements Comparable { return MatchedRule.builder().ruleIdentifier(RuleIdentifier.empty()).build(); } + public boolean isHigherPriorityThanManual() { - return (-1 < RULE_TYPE_PRIORITIES.indexOf(this.ruleIdentifier.type())) && - (RULE_TYPE_PRIORITIES.indexOf(this.ruleIdentifier.type()) < RULE_TYPE_PRIORITIES.indexOf(MANUAL_TYPE)); + + return (-1 < RULE_TYPE_PRIORITIES.indexOf(this.ruleIdentifier.type())) && (RULE_TYPE_PRIORITIES.indexOf(this.ruleIdentifier.type()) < RULE_TYPE_PRIORITIES.indexOf( + MANUAL_TYPE)); } + /** * Returns a modified instance of {@link MatchedRule} based on its applied status. * If the rule has been applied, it returns a new {@link MatchedRule} instance that retains all properties of the original diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/PositionOnPage.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/PositionOnPage.java similarity index 100% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/PositionOnPage.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/PositionOnPage.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/RectangleWithPage.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/RectangleWithPage.java similarity index 95% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/RectangleWithPage.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/RectangleWithPage.java index 447dd4d9..fa36a7ba 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/RectangleWithPage.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/RectangleWithPage.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.model; +package com.iqser.red.service.redaction.v1.server.model.document.entity; 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/model/drools/RuleIdentifier.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/RuleIdentifier.java similarity index 97% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleIdentifier.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/RuleIdentifier.java index 63a907d7..10209cac 100644 --- 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/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/RuleIdentifier.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.model.drools; +package com.iqser.red.service.redaction.v1.server.model.document.entity; import java.util.Objects; 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/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/RuleType.java similarity index 85% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/drools/RuleType.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/RuleType.java index 81152c11..8e200988 100644 --- 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/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/RuleType.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.model.drools; +package com.iqser.red.service.redaction.v1.server.model.document.entity; import java.util.regex.Pattern; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/TextEntity.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/TextEntity.java similarity index 100% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/TextEntity.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/TextEntity.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/AbstractSemanticNode.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/AbstractSemanticNode.java similarity index 94% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/AbstractSemanticNode.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/AbstractSemanticNode.java index 486bb67d..ddf32c06 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/AbstractSemanticNode.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/AbstractSemanticNode.java @@ -9,7 +9,6 @@ import java.util.Set; 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; 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/model/document/nodes/Document.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Document.java similarity index 97% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Document.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Document.java index 404061d5..534534a7 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Document.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Document.java @@ -9,8 +9,8 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -import com.iqser.red.service.redaction.v1.server.model.document.ConsecutiveTextBlockCollector; import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.AccessLevel; @@ -169,4 +169,11 @@ public class Document extends AbstractSemanticNode { return bBox; } + + @Override + public void accept(NodeVisitor visitor) { + + visitor.visit(this); + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/DuplicatedParagraph.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/DuplicatedParagraph.java similarity index 100% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/DuplicatedParagraph.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/DuplicatedParagraph.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Footer.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Footer.java similarity index 87% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Footer.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Footer.java index cb984c65..9557c4d9 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Footer.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Footer.java @@ -1,5 +1,6 @@ package com.iqser.red.service.redaction.v1.server.model.document.nodes; +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.AccessLevel; @@ -57,4 +58,11 @@ public class Footer extends AbstractSemanticNode { return getTreeId() + ": " + NodeType.FOOTER + ": " + leafTextBlock.buildSummary(); } + + @Override + public void accept(NodeVisitor visitor) { + + visitor.visit(this); + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/GenericSemanticNode.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/GenericSemanticNode.java similarity index 100% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/GenericSemanticNode.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/GenericSemanticNode.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Header.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Header.java similarity index 88% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Header.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Header.java index a58066d7..f911679a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Header.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Header.java @@ -1,5 +1,6 @@ package com.iqser.red.service.redaction.v1.server.model.document.nodes; +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.AccessLevel; @@ -60,4 +61,11 @@ public class Header extends AbstractSemanticNode { return getTreeId() + ": " + NodeType.HEADER + ": " + leafTextBlock.buildSummary(); } + + @Override + public void accept(NodeVisitor visitor) { + + visitor.visit(this); + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Headline.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Headline.java similarity index 93% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Headline.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Headline.java index 590e794e..3d93d2e0 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Headline.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Headline.java @@ -1,5 +1,6 @@ package com.iqser.red.service.redaction.v1.server.model.document.nodes; +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; @@ -99,4 +100,11 @@ public class Headline extends AbstractSemanticNode { .isPresent(); } + + @Override + public void accept(NodeVisitor visitor) { + + visitor.visit(this); + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Image.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Image.java similarity index 81% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Image.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Image.java index 194a9799..dc8c9276 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Image.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Image.java @@ -8,6 +8,7 @@ import java.util.Map; import java.util.PriorityQueue; import java.util.Set; +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; import com.iqser.red.service.redaction.v1.server.model.document.TextRange; import com.iqser.red.service.redaction.v1.server.model.document.entity.IEntity; import com.iqser.red.service.redaction.v1.server.model.document.entity.ManualChangeOverwrite; @@ -24,8 +25,7 @@ import lombok.experimental.FieldDefaults; import lombok.experimental.SuperBuilder; /** - * - Represents an image within the document. + * Represents an image within the document. */ @Data @SuperBuilder @@ -37,6 +37,7 @@ public class Image extends AbstractSemanticNode implements IEntity { String id; + String representationHash; TextBlock leafTextBlock; ImageType imageType; @@ -73,6 +74,18 @@ public class Image extends AbstractSemanticNode implements IEntity { } + public boolean isFullPageImage() { + + return imageType.equals(ImageType.OCR) || getArea() >= 0.5 * page.getArea(); + } + + + private double getArea() { + + return position.getWidth() * position.getHeight(); + } + + @Override public TextRange getTextRange() { @@ -90,14 +103,15 @@ public class Image extends AbstractSemanticNode implements IEntity { @Override public String type() { - return getManualOverwrite().getType().orElse(imageType.toString().toLowerCase(Locale.ENGLISH)); + return getManualOverwrite().getType() + .orElse(imageType.toString().toLowerCase(Locale.ENGLISH)); } @Override public String toString() { - return getTreeId() + ": " + getValue() + " " + position; + return getTreeId() + ": " + getValue() + " [%.2f,%.2f,%.2f,%.2f]".formatted(position.getX(), position.getY(), position.getWidth(), position.getHeight()); } @@ -148,4 +162,18 @@ public class Image extends AbstractSemanticNode implements IEntity { return (area / calculatedIntersection) > containmentThreshold; } + + @Override + public void accept(NodeVisitor visitor) { + + visitor.visit(this); + } + + + @Override + public boolean isLeaf() { + + return true; + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/ImageType.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/ImageType.java similarity index 100% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/ImageType.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/ImageType.java diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/LayoutEngine.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/LayoutEngine.java new file mode 100644 index 00000000..3bab25ef --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/LayoutEngine.java @@ -0,0 +1,7 @@ +package com.iqser.red.service.redaction.v1.server.model.document.nodes; + +public enum LayoutEngine { + ALGORITHM, + AI, + OUTLINE +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeType.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeType.java similarity index 85% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeType.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeType.java index 34016fa8..d32cb603 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeType.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeType.java @@ -12,7 +12,9 @@ public enum NodeType { TABLE_CELL, IMAGE, HEADER, - FOOTER; + FOOTER, + TABLE_OF_CONTENTS, + TABLE_OF_CONTENTS_ITEM; public String toString() { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Page.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Page.java similarity index 98% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Page.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Page.java index ef0b8ddd..03a91e0d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Page.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Page.java @@ -118,4 +118,10 @@ public class Page { return "Page: " + number; } + + public double getArea() { + + return width * height; + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Paragraph.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Paragraph.java similarity index 85% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Paragraph.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Paragraph.java index 80d070df..849bf3bd 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Paragraph.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Paragraph.java @@ -1,5 +1,6 @@ package com.iqser.red.service.redaction.v1.server.model.document.nodes; +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import lombok.AccessLevel; @@ -49,4 +50,11 @@ public class Paragraph extends AbstractSemanticNode { return getTreeId() + ": " + NodeType.PARAGRAPH + ": " + leafTextBlock.buildSummary(); } + + @Override + public void accept(NodeVisitor visitor) { + + visitor.visit(this); + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Section.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Section.java similarity index 93% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Section.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Section.java index 4f6107e3..39ed0699 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Section.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Section.java @@ -1,5 +1,7 @@ package com.iqser.red.service.redaction.v1.server.model.document.nodes; +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; + import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; @@ -89,4 +91,11 @@ public class Section extends AbstractSemanticNode { return streamAllSubNodesOfType(NodeType.HEADLINE).anyMatch(h -> h.containsStringIgnoreCase(value)); } + + @Override + public void accept(NodeVisitor visitor) { + + visitor.visit(this); + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SectionIdentifier.java b/redaction-service-v1/document/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/model/document/nodes/SectionIdentifier.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SectionIdentifier.java index dbea02c7..2e306f2f 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SectionIdentifier.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SectionIdentifier.java @@ -20,7 +20,7 @@ import lombok.experimental.FieldDefaults; @FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE) public class SectionIdentifier { - public static Pattern numericalIdentifierPattern = Pattern.compile("^[\\s]?(\\d+)[\\s.,;]?(\\d+)?[\\s.,;]?(\\d+)?[\\s.,;]?(\\d+)?"); + public static Pattern numericalIdentifierPattern = Pattern.compile("^[\\s]?(\\d{1,2})(?:[\\s.,;](\\d{1,2}))?(?:[\\s.,;](\\d{1,2}))?(?:[\\s.,;](\\d{1,2}))?"); public static Pattern alphanumericIdentifierPattern = Pattern.compile("^[\\s]?[A-Za-z][\\s.,;]?(\\d+)[\\s.,;]?(\\d+)?[\\s.,;]?(\\d+)?[\\s.,;]?(\\d+)?[\\s.,;]?"); protected enum Format { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java similarity index 98% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java index ad3fd9ba..c8b33c3d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SemanticNode.java @@ -14,18 +14,17 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -import com.iqser.red.service.redaction.v1.server.model.document.ConsecutiveTextBlockCollector; import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; import com.iqser.red.service.redaction.v1.server.model.document.TextRange; import com.iqser.red.service.redaction.v1.server.model.document.entity.IEntity; 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.ConsecutiveTextBlockCollector; 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.service.document.NodeVisitor; import com.iqser.red.service.redaction.v1.server.utils.RectangleTransformations; import com.iqser.red.service.redaction.v1.server.utils.RedactionSearchUtility; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; public interface SemanticNode { @@ -819,16 +818,12 @@ public interface SemanticNode { /** * Accepts a {@link NodeVisitor} and initiates a depth-first traversal of the semantic tree rooted at this node. - * The visitor's {@link NodeVisitor#visit(SemanticNode)} method is invoked for each node encountered during the traversal. + * The visitor's {@link NodeVisitor#visit} method is invoked for each node encountered during the traversal. * * @param visitor The {@link NodeVisitor} to accept and apply during the traversal. * @see NodeVisitor */ - default void accept(NodeVisitor visitor) { - - visitor.visit(this); - streamChildren().forEach(childNode -> childNode.accept(visitor)); - } + void accept(NodeVisitor visitor); /** diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SuperSection.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SuperSection.java similarity index 93% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SuperSection.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SuperSection.java index 9ee87951..15a41aee 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SuperSection.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SuperSection.java @@ -1,5 +1,7 @@ package com.iqser.red.service.redaction.v1.server.model.document.nodes; +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; + import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; @@ -89,4 +91,11 @@ public class SuperSection extends AbstractSemanticNode { return streamAllSubNodesOfType(NodeType.HEADLINE).anyMatch(h -> h.containsStringIgnoreCase(value)); } + + @Override + public void accept(NodeVisitor visitor) { + + visitor.visit(this); + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Table.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Table.java similarity index 98% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Table.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Table.java index 6b0ab0cb..6e5e03a9 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Table.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/Table.java @@ -14,10 +14,10 @@ import java.util.stream.IntStream; import java.util.stream.Stream; import com.iqser.red.service.redaction.v1.server.model.document.DocumentTree; +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; 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 com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; import lombok.AccessLevel; import lombok.AllArgsConstructor; @@ -419,4 +419,11 @@ public class Table implements SemanticNode { return treeId.toString() + ": " + NodeType.TABLE + ": #cols: " + numberOfCols + ", #rows: " + numberOfRows + ", " + this.getTextBlock().buildSummary(); } + + @Override + public void accept(NodeVisitor visitor) { + + visitor.visit(this); + } + } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableCell.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableCell.java similarity index 91% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableCell.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableCell.java index 64dce481..7288cc9e 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableCell.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableCell.java @@ -4,6 +4,7 @@ import java.awt.geom.Rectangle2D; import java.util.HashMap; import java.util.Map; +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlockCollector; @@ -80,4 +81,11 @@ public class TableCell extends AbstractSemanticNode { return getTreeId() + ": " + NodeType.TABLE_CELL + ": " + this.getTextBlock().buildSummary(); } + + @Override + public void accept(NodeVisitor visitor) { + + visitor.visit(this); + } + } diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableOfContents.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableOfContents.java new file mode 100644 index 00000000..0fd0df03 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableOfContents.java @@ -0,0 +1,47 @@ +package com.iqser.red.service.redaction.v1.server.model.document.nodes; + +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.FieldDefaults; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +@AllArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE) +@EqualsAndHashCode(callSuper = true) +public class TableOfContents extends AbstractSemanticNode { + + @Override + public NodeType getType() { + + return NodeType.TABLE_OF_CONTENTS; + } + + + public Headline getHeadline() { + + return streamChildrenOfType(NodeType.HEADLINE).map(node -> (Headline) node) + .findFirst() + .orElseGet(() -> getParent().getHeadline()); + } + + + @Override + public void accept(NodeVisitor visitor) { + + visitor.visit(this); + } + + + @Override + public String toString() { + + return getTreeId() + ": " + NodeType.TABLE_OF_CONTENTS_ITEM + ": " + getTextBlock().buildSummary(); + } + +} diff --git a/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableOfContentsItem.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableOfContentsItem.java new file mode 100644 index 00000000..3a974585 --- /dev/null +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/TableOfContentsItem.java @@ -0,0 +1,57 @@ +package com.iqser.red.service.redaction.v1.server.model.document.nodes; + +import com.iqser.red.service.redaction.v1.server.model.document.NodeVisitor; +import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.FieldDefaults; +import lombok.experimental.SuperBuilder; + +@Data +@SuperBuilder +@AllArgsConstructor +@FieldDefaults(level = AccessLevel.PRIVATE) +@EqualsAndHashCode(callSuper = true) +public class TableOfContentsItem extends AbstractSemanticNode { + + TextBlock leafTextBlock; + + + @Override + public NodeType getType() { + + return NodeType.TABLE_OF_CONTENTS_ITEM; + } + + + @Override + public boolean isLeaf() { + + return true; + } + + + @Override + public void accept(NodeVisitor visitor) { + + visitor.visit(this); + } + + + @Override + public TextBlock getTextBlock() { + + return leafTextBlock; + } + + + @Override + public String toString() { + + return getTreeId() + ": " + NodeType.TABLE_OF_CONTENTS_ITEM + ": " + leafTextBlock.buildSummary(); + } + +} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java similarity index 88% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java index 8049d0b0..42f53764 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/AtomicTextBlock.java @@ -1,6 +1,6 @@ package com.iqser.red.service.redaction.v1.server.model.document.textblock; -import static com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPositionDataProto.DocumentPositionData; +import static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData; import static java.lang.String.format; import java.awt.geom.Rectangle2D; @@ -16,12 +16,12 @@ import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.DocumentPositionData.Position; +import com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.DocumentTextData; 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.DocumentPositionDataProto.DocumentPositionData.Position; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentTextDataProto.DocumentTextData; import lombok.AccessLevel; import lombok.AllArgsConstructor; @@ -29,6 +29,7 @@ import lombok.Builder; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Getter; +import lombok.NonNull; import lombok.experimental.FieldDefaults; @Data @@ -37,21 +38,33 @@ import lombok.experimental.FieldDefaults; @FieldDefaults(level = AccessLevel.PRIVATE) public class AtomicTextBlock implements TextBlock { + @NonNull Long id; + @NonNull Integer numberOnPage; + @NonNull Page page; //string coordinates + @NonNull TextRange textRange; + @NonNull String searchText; + @NonNull List lineBreaks; + @NonNull + List italicTextRanges; + @NonNull + List boldTextRanges; SoftReference searchTextLowerCaseCache; SoftReference> wordsCache; //position coordinates + @NonNull List stringIdxToPositionIdx; @Getter + @NonNull List positions; @EqualsAndHashCode.Exclude @@ -77,6 +90,8 @@ public class AtomicTextBlock implements TextBlock { .stringIdxToPositionIdx(Collections.emptyList()) .positions(Collections.emptyList()) .parent(parent) + .boldTextRanges(Collections.emptyList()) + .italicTextRanges(Collections.emptyList()) .build(); } @@ -92,6 +107,14 @@ public class AtomicTextBlock implements TextBlock { .lineBreaks(atomicTextBlockData.getLineBreaksList()) .stringIdxToPositionIdx(atomicPositionBlockData.getStringIdxToPositionIdxList()) .positions(toRectangle2DList(atomicPositionBlockData.getPositionsList())) + .italicTextRanges(atomicTextBlockData.getItalicTextRangesList() + .stream() + .map(r -> new TextRange(r.getStart(), r.getEnd())) + .toList()) + .boldTextRanges(atomicTextBlockData.getBoldTextRangesList() + .stream() + .map(r -> new TextRange(r.getStart(), r.getEnd())) + .toList()) .parent(parent) .build(); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java similarity index 94% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java index 965bebc4..bbcc874d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConcatenatedTextBlock.java @@ -18,6 +18,7 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.Page; import lombok.AccessLevel; import lombok.Data; +import lombok.NonNull; import lombok.experimental.FieldDefaults; @Data @@ -162,6 +163,26 @@ public class ConcatenatedTextBlock implements TextBlock { } + @Override + public List getItalicTextRanges() { + + return getAtomicTextBlocks().stream() + .flatMap(atomicTextBlock -> atomicTextBlock.getItalicTextRanges() + .stream()) + .toList(); + } + + + @Override + public List getBoldTextRanges() { + + return getAtomicTextBlocks().stream() + .flatMap(atomicTextBlock -> atomicTextBlock.getBoldTextRanges() + .stream()) + .toList(); + } + + @Override public Rectangle2D getPosition(int stringIdx) { @@ -279,6 +300,7 @@ public class ConcatenatedTextBlock implements TextBlock { } + @NonNull @Override public String toString() { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/ConsecutiveTextBlockCollector.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConsecutiveTextBlockCollector.java similarity index 91% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/ConsecutiveTextBlockCollector.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConsecutiveTextBlockCollector.java index 83d4f2f3..b6822027 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/ConsecutiveTextBlockCollector.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/ConsecutiveTextBlockCollector.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.model.document; +package com.iqser.red.service.redaction.v1.server.model.document.textblock; import java.util.LinkedList; import java.util.List; @@ -10,9 +10,6 @@ import java.util.function.Supplier; import java.util.stream.Collector; import java.util.stream.Stream; -import com.iqser.red.service.redaction.v1.server.model.document.textblock.ConcatenatedTextBlock; -import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; - import lombok.NoArgsConstructor; @NoArgsConstructor diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java similarity index 97% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java index 1bfc82de..b0a5aee5 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlock.java @@ -55,6 +55,12 @@ public interface TextBlock extends CharSequence { String subSequenceWithLineBreaks(TextRange textRange); + List getItalicTextRanges(); + + + List getBoldTextRanges(); + + int numberOfLines(); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlockCollector.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlockCollector.java similarity index 100% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlockCollector.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/textblock/TextBlockCollector.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/IdBuilder.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/utils/IdBuilder.java similarity index 100% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/IdBuilder.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/utils/IdBuilder.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/Patterns.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/utils/Patterns.java similarity index 100% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/Patterns.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/utils/Patterns.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RectangleTransformations.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RectangleTransformations.java similarity index 100% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RectangleTransformations.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RectangleTransformations.java diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RedactionSearchUtility.java b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RedactionSearchUtility.java similarity index 99% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RedactionSearchUtility.java rename to redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RedactionSearchUtility.java index a830b7cd..f97f628a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RedactionSearchUtility.java +++ b/redaction-service-v1/document/src/main/java/com/iqser/red/service/redaction/v1/server/utils/RedactionSearchUtility.java @@ -313,7 +313,7 @@ public class RedactionSearchUtility { while (matcher.find()) { boundaries.add(new TextRange(matcher.start(group) + textBlock.getTextRange().start(), matcher.end(group) + textBlock.getTextRange().start())); } - }catch (StackOverflowError stackOverflowError){ + } catch (StackOverflowError stackOverflowError) { log.warn("Stackoverflow error for pattern {} in text: {}", pattern.pattern(), textBlock); } return boundaries; @@ -322,7 +322,6 @@ public class RedactionSearchUtility { private static List getTextRangesByPatternWithLineBreaks(TextBlock textBlock, int group, Pattern pattern) { - String searchTextWithLineBreaks = textBlock.searchTextWithLineBreaks(); Matcher matcher = pattern.matcher(searchTextWithLineBreaks); List boundaries = new LinkedList<>(); @@ -330,7 +329,7 @@ public class RedactionSearchUtility { while (matcher.find()) { boundaries.add(new TextRange(matcher.start(group) + textBlock.getTextRange().start(), matcher.end(group) + textBlock.getTextRange().start())); } - }catch (StackOverflowError stackOverflowError){ + } catch (StackOverflowError stackOverflowError) { log.warn("Stackoverflow error for pattern {} in text with linebreaks: {}", pattern.pattern(), searchTextWithLineBreaks); } return boundaries; diff --git a/redaction-service-v1/document/src/main/resources/DocumentPage.proto b/redaction-service-v1/document/src/main/resources/DocumentPage.proto new file mode 100644 index 00000000..f3765930 --- /dev/null +++ b/redaction-service-v1/document/src/main/resources/DocumentPage.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; + +option java_outer_classname = "DocumentPageProto"; +option java_package = "com.iqser.red.service.redaction.v1.server.data"; + + +message AllDocumentPages { + + repeated DocumentPage documentPages = 1; +} + +message DocumentPage { + // The page number, starting with 1. + int32 number = 1; + + // The page height in PDF user units. + int32 height = 2; + + // The page width in PDF user units. + int32 width = 3; + + // The page rotation as specified by the PDF. + int32 rotation = 4; +} + diff --git a/redaction-service-v1/document/src/main/resources/DocumentPositionData.proto b/redaction-service-v1/document/src/main/resources/DocumentPositionData.proto new file mode 100644 index 00000000..40487d54 --- /dev/null +++ b/redaction-service-v1/document/src/main/resources/DocumentPositionData.proto @@ -0,0 +1,28 @@ +syntax = "proto3"; + +option java_outer_classname = "DocumentPositionDataProto"; +option java_package = "com.iqser.red.service.redaction.v1.server.data"; + +message AllDocumentPositionData { + + repeated DocumentPositionData documentPositionData = 1; +} + +message DocumentPositionData { + // Identifier of the text block. + int64 id = 1; + + // For each string coordinate in the search text of the text block, the array contains an entry relating the string coordinate to the position coordinate. + // This is required due to the text and position coordinates not being equal. + repeated int32 stringIdxToPositionIdx = 2; + + // The bounding box for each glyph as a rectangle. This matrix is of size (n,4), where n is the number of glyphs in the text block. + // The second dimension specifies the rectangle with the value x, y, width, height, with x, y specifying the lower left corner. + // In order to access this information, the stringIdxToPositionIdx array must be used to transform the coordinates. + repeated Position positions = 3; + + // Definition of a BoundingBox that contains x, y, width, and height. + message Position { + repeated float value = 1; + } +} diff --git a/redaction-service-v1/document/src/main/resources/DocumentStructure.proto b/redaction-service-v1/document/src/main/resources/DocumentStructure.proto new file mode 100644 index 00000000..ccad316d --- /dev/null +++ b/redaction-service-v1/document/src/main/resources/DocumentStructure.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +option java_outer_classname = "DocumentStructureProto"; +option java_package = "com.iqser.red.service.redaction.v1.server.data"; + + +import "EntryData.proto"; + +message DocumentStructure { + // The root EntryData represents the Document. + EntryData root = 1; +} diff --git a/redaction-service-v1/document/src/main/resources/DocumentTextData.proto b/redaction-service-v1/document/src/main/resources/DocumentTextData.proto new file mode 100644 index 00000000..c3312114 --- /dev/null +++ b/redaction-service-v1/document/src/main/resources/DocumentTextData.proto @@ -0,0 +1,40 @@ +syntax = "proto3"; + +import "Range.proto"; + +option java_outer_classname = "DocumentTextDataProto"; +option java_package = "com.iqser.red.service.redaction.v1.server.data"; + +message AllDocumentTextData { + + repeated DocumentTextData documentTextData = 1; +} + +message DocumentTextData { + // Identifier of the text block. + int64 id = 1; + + // The page the text block occurs on. + int64 page = 2; + + // The text of the text block. + string searchText = 3; + + // Each text block is assigned a number on a page, starting from 0. + int32 numberOnPage = 4; + + // The text blocks are ordered, this number represents the start of the text block as a string offset. + int32 start = 5; + + // The text blocks are ordered, this number represents the end of the text block as a string offset. + int32 end = 6; + + // The line breaks in the text of this semantic node in string offsets. They are exclusive end. At the end of each semantic node there is an implicit linebreak. + repeated int32 lineBreaks = 7; + + // The text ranges where the text is italic + repeated Range italicTextRanges = 8; + + // The text ranges where the text is bold + repeated Range boldTextRanges = 9; +} diff --git a/redaction-service-v1/document/src/main/resources/EntryData.proto b/redaction-service-v1/document/src/main/resources/EntryData.proto new file mode 100644 index 00000000..bd039458 --- /dev/null +++ b/redaction-service-v1/document/src/main/resources/EntryData.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; + +import "LayoutEngine.proto"; +import "NodeType.proto"; + +option java_outer_classname = "EntryDataProto"; +option java_package = "com.iqser.red.service.redaction.v1.server.data"; + +message EntryData { + // Type of the semantic node. + NodeType type = 1; + + // Specifies the position in the parsed tree structure. + repeated int32 treeId = 2; + + // Specifies the text block IDs associated with this semantic node. + repeated int64 atomicBlockIds = 3; + + // Specifies the pages this semantic node appears on. + repeated int64 pageNumbers = 4; + + // Some semantic nodes have additional information, this information is stored in this Map. + map properties = 5; + + // All child Entries of this Entry. + repeated EntryData children = 6; + + // Describes the origin of the semantic node. + repeated LayoutEngine engines = 7; +} diff --git a/redaction-service-v1/document/src/main/resources/LayoutEngine.proto b/redaction-service-v1/document/src/main/resources/LayoutEngine.proto new file mode 100644 index 00000000..5188b4e6 --- /dev/null +++ b/redaction-service-v1/document/src/main/resources/LayoutEngine.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; + +option java_outer_classname = "LayoutEngineProto"; +option java_package = "com.iqser.red.service.redaction.v1.server.data"; + +enum LayoutEngine { + ALGORITHM = 0; + AI = 1; + OUTLINE = 2; +} diff --git a/redaction-service-v1/document/src/main/resources/NodeType.proto b/redaction-service-v1/document/src/main/resources/NodeType.proto new file mode 100644 index 00000000..1c2d5012 --- /dev/null +++ b/redaction-service-v1/document/src/main/resources/NodeType.proto @@ -0,0 +1,19 @@ +syntax = "proto3"; + +option java_outer_classname = "NodeTypeProto"; +option java_package = "com.iqser.red.service.redaction.v1.server.data"; + +enum NodeType { + DOCUMENT = 0; + SECTION = 1; + SUPER_SECTION = 2; + HEADLINE = 3; + PARAGRAPH = 4; + TABLE = 5; + TABLE_CELL = 6; + IMAGE = 7; + HEADER = 8; + FOOTER = 9; + TABLE_OF_CONTENTS = 10; + TABLE_OF_CONTENTS_ITEM = 11; +} diff --git a/redaction-service-v1/document/src/main/resources/Range.proto b/redaction-service-v1/document/src/main/resources/Range.proto new file mode 100644 index 00000000..a0e7cb56 --- /dev/null +++ b/redaction-service-v1/document/src/main/resources/Range.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; + +option java_outer_classname = "RangeProto"; +option java_package = "com.iqser.red.service.redaction.v1.server.data"; + + + +message Range { + // A start index. + int32 start = 1; + + // An end index. + int32 end = 2; +} \ No newline at end of file diff --git a/redaction-service-v1/document/src/main/resources/generate_proto_files.sh b/redaction-service-v1/document/src/main/resources/generate_proto_files.sh new file mode 100644 index 00000000..4a929be5 --- /dev/null +++ b/redaction-service-v1/document/src/main/resources/generate_proto_files.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Minimum required protoc version +MIN_VERSION="28.3" + +# Get the installed protoc version +INSTALLED_VERSION=$(protoc --version | awk '{print $2}') + +# Function to compare versions +version_lt() { + [ "$(printf '%s\n' "$1" "$2" | sort -V | head -n1)" != "$1" ] +} + +# Check if protoc is installed and meets the minimum version +if ! command -v protoc &> /dev/null; then + echo "Error: protoc is not installed. Please install version $MIN_VERSION or later." + exit 1 +fi + +if version_lt "$INSTALLED_VERSION" "$MIN_VERSION"; then + echo "Error: protoc version $INSTALLED_VERSION is too old. Please upgrade to version $MIN_VERSION or later." + exit 1 +fi + +# Generate Java files from proto files +protoc --java_out=../java ./*.proto diff --git a/redaction-service-v1/document/src/test/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/LayoutEngineMappingTest.java b/redaction-service-v1/document/src/test/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/LayoutEngineMappingTest.java new file mode 100644 index 00000000..8decb157 --- /dev/null +++ b/redaction-service-v1/document/src/test/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/LayoutEngineMappingTest.java @@ -0,0 +1,33 @@ +package com.iqser.red.service.redaction.v1.server.model.document.nodes; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto; + +public class LayoutEngineMappingTest { + + @Test + public void assertAllValuesMatch() { + + for (LayoutEngine value : LayoutEngine.values()) { + var engine = LayoutEngineProto.LayoutEngine.valueOf(value.name()); + assertEquals(engine.name(), value.name()); + } + } + + + @Test + public void assertAllValuesMatchReverse() { + + for (LayoutEngineProto.LayoutEngine value : LayoutEngineProto.LayoutEngine.values()) { + if (value.equals(LayoutEngineProto.LayoutEngine.UNRECOGNIZED)) { + continue; + } + var engine = LayoutEngine.valueOf(value.name()); + assertEquals(engine.name(), value.name()); + } + } + +} diff --git a/redaction-service-v1/document/src/test/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeTypeMappingTest.java b/redaction-service-v1/document/src/test/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeTypeMappingTest.java new file mode 100644 index 00000000..b20d6341 --- /dev/null +++ b/redaction-service-v1/document/src/test/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/NodeTypeMappingTest.java @@ -0,0 +1,33 @@ +package com.iqser.red.service.redaction.v1.server.model.document.nodes; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import com.iqser.red.service.redaction.v1.server.data.NodeTypeProto; + +public class NodeTypeMappingTest { + + @Test + public void assertAllValuesMatch() { + + for (NodeType value : NodeType.values()) { + var engine = NodeTypeProto.NodeType.valueOf(value.name()); + assertEquals(engine.name(), value.name()); + } + } + + + @Test + public void assertAllValuesMatchReverse() { + + for (NodeTypeProto.NodeType value : NodeTypeProto.NodeType.values()) { + if (value.equals(NodeTypeProto.NodeType.UNRECOGNIZED)) { + continue; + } + var engine = NodeType.valueOf(value.name()); + assertEquals(engine.name(), value.name()); + } + } + +} diff --git a/redaction-service-v1/document/src/test/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SectionIdentifierTest.java b/redaction-service-v1/document/src/test/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SectionIdentifierTest.java new file mode 100644 index 00000000..1fd9ed9d --- /dev/null +++ b/redaction-service-v1/document/src/test/java/com/iqser/red/service/redaction/v1/server/model/document/nodes/SectionIdentifierTest.java @@ -0,0 +1,144 @@ +package com.iqser.red.service.redaction.v1.server.model.document.nodes; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.List; + +import org.junit.jupiter.api.Test; + +class SectionIdentifierTest { + + @Test + void testSectionIdentifier() { + + SectionIdentifier identifier = SectionIdentifier.fromSearchText("1.1.2: Headline"); + assertEquals(SectionIdentifier.Format.NUMERICAL, identifier.getFormat()); + assertEquals(3, identifier.level()); + assertEquals(List.of(1, 1, 2), identifier.getIdentifiers()); + + SectionIdentifier child = SectionIdentifier.asChildOf(identifier); + assertTrue(child.isChildOf(identifier)); + + SectionIdentifier parent = SectionIdentifier.fromSearchText("1.1: Headline"); + assertTrue(parent.isParentOf(identifier)); + } + + + @Test + void testSectionIdentifier2() { + + SectionIdentifier identifier = SectionIdentifier.fromSearchText("A.1.2: Headline"); + assertEquals(SectionIdentifier.Format.ALPHANUMERIC, identifier.getFormat()); + assertEquals(3, identifier.level()); + assertEquals(List.of(1, 1, 2), identifier.getIdentifiers()); + } + + + @Test + void testSectionIdentifier3() { + + SectionIdentifier identifier = SectionIdentifier.fromSearchText("D.1.2: Headline"); + assertEquals(SectionIdentifier.Format.ALPHANUMERIC, identifier.getFormat()); + assertEquals(3, identifier.level()); + assertEquals(List.of(4, 1, 2), identifier.getIdentifiers()); + } + + + @Test + void testSectionIdentifier4() { + + SectionIdentifier identifier = SectionIdentifier.fromSearchText("4.1.2.4: Headline"); + assertEquals(SectionIdentifier.Format.NUMERICAL, identifier.getFormat()); + assertEquals(4, identifier.level()); + assertEquals(List.of(4, 1, 2, 4), identifier.getIdentifiers()); + } + + + @Test + void testSectionIdentifier5() { + + SectionIdentifier identifier = SectionIdentifier.fromSearchText("D.1.2.4.5: Headline"); + assertEquals(SectionIdentifier.Format.ALPHANUMERIC, identifier.getFormat()); + assertEquals(4, identifier.level()); + assertEquals(List.of(4, 1, 2, 4), identifier.getIdentifiers()); + } + + + @Test + void testSectionIdentifier6() { + + SectionIdentifier identifier = SectionIdentifier.fromSearchText("d.1.2.4.5: Headline"); + assertEquals(SectionIdentifier.Format.ALPHANUMERIC, identifier.getFormat()); + assertEquals(4, identifier.level()); + assertEquals(List.of(4, 1, 2, 4), identifier.getIdentifiers()); + } + + + @Test + void testSectionIdentifier7() { + + SectionIdentifier identifier = SectionIdentifier.fromSearchText("4.1.2.4.5: Headline"); + assertEquals(SectionIdentifier.Format.NUMERICAL, identifier.getFormat()); + assertEquals(4, identifier.level()); + assertEquals(List.of(4, 1, 2, 4), identifier.getIdentifiers()); + } + + + @Test + void testFalsePositive111() { + + SectionIdentifier identifier = SectionIdentifier.fromSearchText("111: Headline"); + assertEquals(SectionIdentifier.Format.NUMERICAL, identifier.getFormat()); + assertEquals(1, identifier.level()); + } + + + @Test + public void testParentOf() { + + var headline = SectionIdentifier.fromSearchText("1 Did you ever hear the tragedy of Darth Plagueis The Wise?"); + var headline1 = SectionIdentifier.fromSearchText("1.0 I thought not. It’s not a story the Jedi would tell you."); + var headline2 = SectionIdentifier.fromSearchText("1.1 It’s a Sith legend. Darth Plagueis was a Dark Lord of the Sith, "); + var headline3 = SectionIdentifier.fromSearchText("1.2.3 so powerful and so wise he could use the Force to influence the midichlorians to create life…"); + var headline4 = SectionIdentifier.fromSearchText("1.2.3.4 He had such a knowledge of the dark side that he could even keep the ones he cared about from dying."); + var headline5 = SectionIdentifier.fromSearchText("1.2.3.4.5 The dark side of the Force is a pathway to many abilities some consider to be unnatural."); + var headline6 = SectionIdentifier.fromSearchText("2.0 He became so powerful…"); + var headline7 = SectionIdentifier.fromSearchText("10000.0 the only thing he was afraid of was losing his power,"); + var headline8 = SectionIdentifier.fromSearchText("A.0 which eventually, of course, he did."); + var headline9 = SectionIdentifier.fromSearchText("Unfortunately, he taught his apprentice everything he knew, then his apprentice killed him in his sleep."); + var headline10 = SectionIdentifier.fromSearchText("2.1.2 Ironic."); + var headline11 = SectionIdentifier.fromSearchText("2.He could save others from death,"); + var headline12 = SectionIdentifier.fromSearchText(" 2. but not himself."); + + var paragraph1 = SectionIdentifier.asChildOf(headline); + assertTrue(paragraph1.isChildOf(headline)); + assertTrue(headline.isParentOf(paragraph1)); + assertFalse(paragraph1.isParentOf(headline)); + + assertFalse(headline.isParentOf(headline1)); + assertTrue(headline.isParentOf(headline2)); + assertTrue(headline.isParentOf(headline3)); + assertTrue(headline.isParentOf(headline4)); + assertTrue(headline.isParentOf(headline5)); + assertTrue(headline1.isParentOf(headline2)); + assertFalse(headline1.isParentOf(headline1)); + assertTrue(headline3.isParentOf(headline4)); + assertFalse(headline4.isParentOf(headline5)); + assertFalse(headline2.isParentOf(headline3)); + assertFalse(headline2.isParentOf(headline4)); + assertTrue(headline1.isParentOf(headline3)); + assertTrue(headline1.isParentOf(headline4)); + assertFalse(headline1.isParentOf(headline6)); + assertFalse(headline1.isParentOf(headline7)); + assertFalse(headline8.isParentOf(headline1)); + assertFalse(headline8.isParentOf(headline2)); + assertFalse(headline8.isParentOf(headline3)); + assertFalse(headline8.isParentOf(headline4)); + assertFalse(headline9.isParentOf(headline9)); + assertTrue(headline10.isChildOf(headline11)); + assertTrue(headline10.isChildOf(headline12)); + } + +} \ No newline at end of file diff --git a/redaction-service-v1/redaction-service-server-v1/build.gradle.kts b/redaction-service-v1/redaction-service-server-v1/build.gradle.kts index fb76bd65..aeda2c69 100644 --- a/redaction-service-v1/redaction-service-server-v1/build.gradle.kts +++ b/redaction-service-v1/redaction-service-server-v1/build.gradle.kts @@ -31,15 +31,10 @@ configurations { } } -configurations.all { - resolutionStrategy { - force("com.google.protobuf:protobuf-java:4.27.1") - } -} - dependencies { implementation(project(":redaction-service-api-v1")) { exclude(group = "com.iqser.red.service", module = "persistence-service-internal-api-v1") } + implementation(project(":document")) implementation("com.iqser.red.service:persistence-service-internal-api-v1:${persistenceServiceVersion}") { exclude(group = "org.springframework.boot") } implementation("com.iqser.red.service:persistence-service-shared-mongo-v1:${persistenceServiceVersion}") { @@ -69,7 +64,6 @@ dependencies { implementation("org.drools:drools-engine:${droolsVersion}") implementation("org.drools:drools-mvel:${droolsVersion}") implementation("org.kie:kie-spring:7.74.1.Final") - implementation("com.google.protobuf:protobuf-java:4.27.1") implementation("org.locationtech.jts:jts-core:1.19.0") @@ -186,13 +180,19 @@ tasks.register("generateJavaDoc", Javadoc::class) { dependsOn("compileJava") dependsOn("delombok") classpath = project.sourceSets["main"].runtimeClasspath - source = fileTree("${buildDir}/generated/sources/delombok/java/main") { + val documentFiles = fileTree("${project(":document").layout.buildDirectory.get()}/generated/sources/delombok/java/main") { include(droolsImports) } - destinationDir = file(project.findProperty("javadocDestinationDir")?.toString() ?: "") + val mainFiles = fileTree("${layout.buildDirectory.get()}/generated/sources/delombok/java/main") { + include(droolsImports) + } + source = documentFiles + mainFiles + + setDestinationDir(file(project.findProperty("javadocDestinationDir")?.toString() ?: "")) options.memberLevel = JavadocMemberLevel.PUBLIC (options as StandardJavadocDocletOptions).apply { title = "API Documentation for Redaction Service ${project.version}" } } + diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/DeprecatedElementsFinder.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/DeprecatedElementsFinder.java index 2b0e3bc5..547989b8 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/DeprecatedElementsFinder.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/DeprecatedElementsFinder.java @@ -10,11 +10,13 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.regex.Pattern; import java.util.stream.Collectors; import org.reflections.Reflections; import org.reflections.scanners.Scanners; import org.reflections.util.ConfigurationBuilder; +import org.reflections.util.FilterBuilder; import com.iqser.red.service.redaction.v1.server.model.dictionary.SearchImplementation; @@ -25,6 +27,8 @@ import lombok.extern.slf4j.Slf4j; public class DeprecatedElementsFinder { public static final String PACKAGE_NAME = "com.iqser.red.service.redaction.v1.server"; + public static final Pattern DATA_PACKAGE = Pattern.compile(".*/data/.*"); + private Set deprecatedMethods; @Getter private Map deprecatedMethodsSignaturesMap; @@ -43,7 +47,10 @@ public class DeprecatedElementsFinder { Reflections reflections = new Reflections(new ConfigurationBuilder().forPackage(PACKAGE_NAME) .setExpandSuperTypes(true) - .setScanners(Scanners.MethodsAnnotated, Scanners.TypesAnnotated, Scanners.SubTypes)); + .setScanners(Scanners.MethodsAnnotated, Scanners.TypesAnnotated, Scanners.SubTypes) + .filterInputsBy(new FilterBuilder().includePackage(PACKAGE_NAME).excludePackage(PACKAGE_NAME + ".data") + // Exclude the generated proto data package + )); deprecatedMethods = reflections.get(Scanners.MethodsAnnotated.with(Deprecated.class).as(Method.class)); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/PrecursorEntity.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/PrecursorEntity.java index e942c582..3157a7ee 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/PrecursorEntity.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/PrecursorEntity.java @@ -19,6 +19,7 @@ import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityTyp import com.iqser.red.service.redaction.v1.server.model.document.entity.IEntity; 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.RectangleWithPage; 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/model/component/Component.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/component/Component.java index 7f90fa7d..e577cf0b 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/component/Component.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/component/Component.java @@ -3,7 +3,7 @@ package com.iqser.red.service.redaction.v1.server.model.component; import java.util.Collection; import java.util.List; -import com.iqser.red.service.redaction.v1.server.model.drools.RuleIdentifier; +import com.iqser.red.service.redaction.v1.server.model.document.entity.RuleIdentifier; 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/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 index 1a2460c6..19667e05 100644 --- 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 @@ -3,6 +3,8 @@ package com.iqser.red.service.redaction.v1.server.model.drools; import org.drools.drl.ast.descr.AttributeDescr; import org.drools.drl.ast.descr.RuleDescr; +import com.iqser.red.service.redaction.v1.server.model.document.entity.RuleIdentifier; + import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; 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 index 04983fc4..c75afa7c 100644 --- 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 @@ -4,6 +4,8 @@ import java.util.List; import java.util.Objects; import java.util.Optional; +import com.iqser.red.service.redaction.v1.server.model.document.entity.RuleType; + public record RuleClass(RuleType ruleType, List ruleUnits) { public Optional findRuleUnitByInteger(Integer 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 index 338e58a7..3aa1cdef 100644 --- 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 @@ -11,6 +11,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import com.iqser.red.service.redaction.v1.model.DroolsValidation; +import com.iqser.red.service.redaction.v1.server.model.document.entity.RuleIdentifier; +import com.iqser.red.service.redaction.v1.server.model.document.entity.RuleType; 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/service/AnalysisFinalizationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisFinalizationService.java index 45858e22..192df98a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisFinalizationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisFinalizationService.java @@ -3,7 +3,6 @@ package com.iqser.red.service.redaction.v1.server.service; import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.concurrent.CompletableFuture; import org.springframework.stereotype.Service; @@ -14,7 +13,6 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribu import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogChanges; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; import com.iqser.red.service.redaction.v1.server.logger.Context; import com.iqser.red.service.redaction.v1.server.model.KieWrapper; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisPreparationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisPreparationService.java index 91f80ede..706cd462 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisPreparationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalysisPreparationService.java @@ -19,9 +19,9 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequ import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.imported.ImportedRedactions; -import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type; import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; import com.iqser.red.service.redaction.v1.server.client.model.NerEntitiesModel; +import com.iqser.red.service.redaction.v1.server.mapper.DocumentGraphMapper; import com.iqser.red.service.redaction.v1.server.model.KieWrapper; import com.iqser.red.service.redaction.v1.server.model.NerEntities; import com.iqser.red.service.redaction.v1.server.model.PrecursorEntity; @@ -31,7 +31,6 @@ import com.iqser.red.service.redaction.v1.server.model.dictionary.DictionaryVers 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.SemanticNode; -import com.iqser.red.service.redaction.v1.server.service.document.DocumentGraphMapper; import com.iqser.red.service.redaction.v1.server.service.document.ImportedRedactionEntryService; import com.iqser.red.service.redaction.v1.server.service.document.ManualRedactionEntryService; import com.iqser.red.service.redaction.v1.server.service.document.NerEntitiesAdapter; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalyzeService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalyzeService.java index 5e6485ad..35819726 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalyzeService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/AnalyzeService.java @@ -9,33 +9,24 @@ import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Optional; -import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestBody; -import com.iqser.gin4.commons.metrics.meters.FunctionTimerValues; import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest; import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeResult; import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttribute; -import com.iqser.red.service.persistence.service.v1.api.shared.model.MessageType; import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType; -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.componentlog.ComponentLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogChanges; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.imported.ImportedLegalBases; import com.iqser.red.service.persistence.service.v1.api.shared.model.mapper.ImportedLegalBasisMapper; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.EntityLogMongoService; -import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; import com.iqser.red.service.redaction.v1.server.logger.Context; import com.iqser.red.service.redaction.v1.server.model.KieWrapper; -import com.iqser.red.service.redaction.v1.server.model.component.Component; -import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; import com.iqser.red.service.redaction.v1.server.service.AnalysisPreparationService.AnalysisData; -import com.iqser.red.service.redaction.v1.server.service.components.ComponentLogCreatorService; -import com.iqser.red.service.redaction.v1.server.service.drools.ComponentDroolsExecutionService; import com.iqser.red.service.redaction.v1.server.service.drools.EntityDroolsExecutionService; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; import com.knecon.fforesight.tenantcommons.TenantContext; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DocumentSearchService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DocumentSearchService.java index 68114ffc..f6626c90 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DocumentSearchService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/DocumentSearchService.java @@ -12,10 +12,9 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.BulkLocalRe import com.iqser.red.service.persistence.service.v1.api.shared.model.BulkLocalResponse; import com.iqser.red.service.persistence.service.v1.api.shared.model.FoundTerm; import com.iqser.red.service.redaction.v1.model.QueueNames; +import com.iqser.red.service.redaction.v1.server.mapper.DocumentGraphMapper; 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.document.DocumentGraphMapper; -import com.iqser.red.service.redaction.v1.server.service.document.EntityFindingUtility; import com.iqser.red.service.redaction.v1.server.storage.ObservedStorageService; import com.knecon.fforesight.tenantcommons.TenantContext; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityFindingUtility.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityFindingUtility.java similarity index 97% rename from redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityFindingUtility.java rename to redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityFindingUtility.java index 3fc6cf33..5e760c87 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityFindingUtility.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityFindingUtility.java @@ -1,4 +1,4 @@ -package com.iqser.red.service.redaction.v1.server.service.document; +package com.iqser.red.service.redaction.v1.server.service; import static java.lang.String.format; import static java.util.stream.Collectors.groupingBy; @@ -20,15 +20,17 @@ import org.springframework.stereotype.Service; import com.google.common.collect.Sets; import com.iqser.red.service.redaction.v1.server.model.ClosestEntity; import com.iqser.red.service.redaction.v1.server.model.PrecursorEntity; -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.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.RectangleWithPage; 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.SemanticNode; import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; +import com.iqser.red.service.redaction.v1.server.service.document.EntityCreationService; +import com.iqser.red.service.redaction.v1.server.service.document.EntityEnrichmentService; import com.iqser.red.service.redaction.v1.server.utils.RectangleTransformations; 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/service/EntityLogCreatorService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java index 380a1cf7..ba644071 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/EntityLogCreatorService.java @@ -11,7 +11,6 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; -import java.util.stream.Stream; import org.springframework.stereotype.Service; @@ -207,9 +206,14 @@ public class EntityLogCreatorService { textEntities.forEach(entityNode -> entries.addAll(toEntityLogEntries(entityNode, analysisNumber, manualChangesMap))); - images.forEach(imageNode -> entries.add(createEntityLogEntry(imageNode, dossierTemplateId, analysisNumber, manualChangesMap.getOrDefault(imageNode.getId(), new ArrayList<>())))); + images.forEach(imageNode -> entries.add(createEntityLogEntry(imageNode, + dossierTemplateId, + analysisNumber, + manualChangesMap.getOrDefault(imageNode.getId(), new ArrayList<>())))); - notFoundPrecursorEntities.forEach(precursorEntity -> entries.add(createEntityLogEntry(precursorEntity, analysisNumber, manualChangesMap.getOrDefault(precursorEntity.getId(), new ArrayList<>())))); + notFoundPrecursorEntities.forEach(precursorEntity -> entries.add(createEntityLogEntry(precursorEntity, + analysisNumber, + manualChangesMap.getOrDefault(precursorEntity.getId(), new ArrayList<>())))); return entries; } @@ -250,7 +254,7 @@ public class EntityLogCreatorService { .id(image.getId()) .value(image.getValue()) .type(imageType) - .reason(image.buildReasonWithManualChangeDescriptions()) + .reason(image.buildReason()) .legalBasis(image.legalBasis()) .matchedRule(image.getMatchedRule().getRuleIdentifier().toString()) .dictionaryEntry(false) @@ -280,7 +284,7 @@ public class EntityLogCreatorService { return EntityLogEntry.builder() .id(precursorEntity.getId()) - .reason(precursorEntity.buildReasonWithManualChangeDescriptions()) + .reason(precursorEntity.buildReason()) .legalBasis(precursorEntity.legalBasis()) .value(precursorEntity.value()) .type(type) @@ -327,7 +331,7 @@ public class EntityLogCreatorService { List allManualChanges = ManualChangeFactory.toLocalManualChangeList(entity.getManualOverwrite().getManualChangeLog(), true, analysisNumber); return EntityLogEntry.builder() - .reason(entity.buildReasonWithManualChangeDescriptions()) + .reason(entity.buildReason()) .legalBasis(entity.legalBasis()) .value(entity.getManualOverwrite().getValue() .orElse(entity.getMatchedRule().isWriteValueWithLineBreaks() ? entity.getValueWithLineBreaks() : entity.getValue())) diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangesApplicationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangesApplicationService.java index bf8135ab..42f10e75 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangesApplicationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangesApplicationService.java @@ -24,7 +24,6 @@ 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.SemanticNode; -import com.iqser.red.service.redaction.v1.server.service.document.EntityFindingUtility; import com.iqser.red.service.redaction.v1.server.utils.RectangleTransformations; import lombok.AccessLevel; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/NotFoundImportedEntitiesService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/NotFoundImportedEntitiesService.java index 2ef3505b..64d12959 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/NotFoundImportedEntitiesService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/NotFoundImportedEntitiesService.java @@ -20,7 +20,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Position; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ChangeFactory; import com.iqser.red.service.redaction.v1.server.model.PrecursorEntity; -import com.iqser.red.service.redaction.v1.server.model.RectangleWithPage; +import com.iqser.red.service.redaction.v1.server.model.document.entity.RectangleWithPage; import io.micrometer.core.annotation.Timed; import io.micrometer.observation.annotation.Observed; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/UnprocessedChangesService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/UnprocessedChangesService.java index 8a72f897..446dc723 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/UnprocessedChangesService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/UnprocessedChangesService.java @@ -23,11 +23,10 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations import com.iqser.red.service.redaction.v1.model.AnalyzeResponse; import com.iqser.red.service.redaction.v1.model.QueueNames; import com.iqser.red.service.redaction.v1.model.UnprocessedManualEntity; +import com.iqser.red.service.redaction.v1.server.mapper.DocumentGraphMapper; import com.iqser.red.service.redaction.v1.server.model.PrecursorEntity; 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.document.DocumentGraphMapper; -import com.iqser.red.service.redaction.v1.server.service.document.EntityFindingUtility; import com.iqser.red.service.redaction.v1.server.service.document.EntityFromPrecursorCreationService; import com.iqser.red.service.redaction.v1.server.storage.ObservedStorageService; import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService; @@ -63,7 +62,10 @@ public class UnprocessedChangesService { dictionaryService.updateDictionary(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId()); - List annotationIds = analyzeRequest.getManualRedactions().buildAll().stream().map(BaseAnnotation::getAnnotationId).toList(); + List annotationIds = analyzeRequest.getManualRedactions().buildAll() + .stream() + .map(BaseAnnotation::getAnnotationId) + .toList(); List entityLogEntries = redactionStorageService.getEntityLogEntriesById(analyzeRequest.getDossierId(), analyzeRequest.getFileId(), annotationIds); Document document = DocumentGraphMapper.toDocumentGraph(observedStorageService.getDocumentData(analyzeRequest.getDossierId(), analyzeRequest.getFileId())); @@ -81,8 +83,7 @@ public class UnprocessedChangesService { List manualResizeRedactions = analyzeRequest.getManualRedactions().getResizeRedactions() .stream() .toList(); - List manualEntitiesToBeResized = entityLogEntries - .stream() + List manualEntitiesToBeResized = entityLogEntries.stream() .filter(entityLogEntry -> resizeIds.contains(entityLogEntry.getId())) .filter(entityLogEntry -> entityLogEntry.getEngines().contains(Engine.MANUAL)) .toList() diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java index 30d34278..87fc39b5 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/ComponentCreationService.java @@ -24,8 +24,8 @@ import org.kie.api.runtime.KieSession; import com.iqser.red.service.redaction.v1.server.model.component.Component; import com.iqser.red.service.redaction.v1.server.model.component.Entity; +import com.iqser.red.service.redaction.v1.server.model.document.entity.RuleIdentifier; import com.iqser.red.service.redaction.v1.server.model.document.nodes.TableCell; -import com.iqser.red.service.redaction.v1.server.model.drools.RuleIdentifier; import com.iqser.red.service.redaction.v1.server.utils.ComponentCreationUtils; import com.iqser.red.service.redaction.v1.server.utils.DateConverter; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java index 156ffb54..934f9a9a 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityCreationService.java @@ -1476,7 +1476,6 @@ public class EntityCreationService { } - private void addDuplicateEntityToGraph(TextEntity entityToDuplicate, TextRange newTextRange, SemanticNode node) { entityToDuplicate.addTextRange(newTextRange); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityEnrichmentService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityEnrichmentService.java index f39bb722..4cc70ca9 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityEnrichmentService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityEnrichmentService.java @@ -6,9 +6,9 @@ import java.util.Objects; import org.springframework.stereotype.Service; +import com.iqser.red.service.redaction.v1.server.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/service/document/EntityFromPrecursorCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityFromPrecursorCreationService.java index b8dd1268..d2d03c70 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityFromPrecursorCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/EntityFromPrecursorCreationService.java @@ -22,6 +22,7 @@ import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityTyp import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity; import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; import com.iqser.red.service.redaction.v1.server.service.DictionaryService; +import com.iqser.red.service.redaction.v1.server.service.EntityFindingUtility; import lombok.AccessLevel; import lombok.RequiredArgsConstructor; @@ -130,10 +131,8 @@ public class EntityFromPrecursorCreationService { } else { String section = precursorEntity.getManualOverwrite().getSection() .orElse(null); - if ((section == null || section.isBlank()) - && precursorEntity.getSection() != null - && !precursorEntity.getSection().isBlank() - && precursorEntity.getEngines().contains(Engine.IMPORTED)) { + if ((section == null || section.isBlank()) && precursorEntity.getSection() != null && !precursorEntity.getSection().isBlank() && precursorEntity.getEngines() + .contains(Engine.IMPORTED)) { section = precursorEntity.getSection(); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/IntersectingNodeVisitor.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/IntersectingNodeVisitor.java index 5c76e6a1..cccfed8d 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/IntersectingNodeVisitor.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/IntersectingNodeVisitor.java @@ -3,12 +3,13 @@ package com.iqser.red.service.redaction.v1.server.service.document; import java.util.HashSet; import java.util.Set; +import com.iqser.red.service.redaction.v1.server.model.document.AbstractNodeVisitor; import com.iqser.red.service.redaction.v1.server.model.document.TextRange; import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; import lombok.Getter; -public class IntersectingNodeVisitor implements NodeVisitor { +public class IntersectingNodeVisitor extends AbstractNodeVisitor { @Getter private Set intersectingNodes; @@ -23,9 +24,9 @@ public class IntersectingNodeVisitor implements NodeVisitor { @Override - public void visit(SemanticNode node) { + public void visitNodeDefault(SemanticNode node) { - if (node.getTextRange().intersects(textRange)) { + if (textRange.intersects(node.getTextRange())) { intersectingNodes.add(node); } } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/NodeVisitor.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/NodeVisitor.java deleted file mode 100644 index 53436c91..00000000 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/NodeVisitor.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.iqser.red.service.redaction.v1.server.service.document; - -import com.iqser.red.service.redaction.v1.server.model.document.nodes.SemanticNode; - -public interface NodeVisitor { - - void visit(SemanticNode node); - -} diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/PropertiesMapper.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/PropertiesMapper.java deleted file mode 100644 index 1ddae7a0..00000000 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/document/PropertiesMapper.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.iqser.red.service.redaction.v1.server.service.document; - -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.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.DocumentStructureWrapper; - -import lombok.experimental.UtilityClass; - -@UtilityClass -public class PropertiesMapper { - - public void parseImageProperties(Map properties, Image.ImageBuilder builder) { - - builder.imageType(ImageType.fromString(properties.get(DocumentStructureWrapper.ImageProperties.IMAGE_TYPE))); - builder.transparent(Boolean.parseBoolean(properties.get(DocumentStructureWrapper.ImageProperties.TRANSPARENT))); - builder.position(parseRectangle2D(properties.get(DocumentStructureWrapper.ImageProperties.POSITION))); - builder.id(properties.get(DocumentStructureWrapper.ImageProperties.ID)); - } - - - public void parseTableCellProperties(Map properties, TableCell.TableCellBuilder builder) { - - builder.row(Integer.parseInt(properties.get(DocumentStructureWrapper.TableCellProperties.ROW))); - builder.col(Integer.parseInt(properties.get(DocumentStructureWrapper.TableCellProperties.COL))); - builder.header(Boolean.parseBoolean(properties.get(DocumentStructureWrapper.TableCellProperties.HEADER))); - builder.bBox(parseRectangle2D(properties.get(DocumentStructureWrapper.TableCellProperties.B_BOX))); - } - - - public void parseTableProperties(Map properties, Table.TableBuilder builder) { - - builder.numberOfRows(Integer.parseInt(properties.get(DocumentStructureWrapper.TableProperties.NUMBER_OF_ROWS))); - builder.numberOfCols(Integer.parseInt(properties.get(DocumentStructureWrapper.TableProperties.NUMBER_OF_COLS))); - } - - - private Rectangle2D parseRectangle2D(String bBox) { - - List floats = Arrays.stream(bBox.split(DocumentStructureWrapper.RECTANGLE_DELIMITER)) - .map(Float::parseFloat) - .toList(); - return new Rectangle2D.Float(floats.get(0), floats.get(1), floats.get(2), floats.get(3)); - } - - - public static boolean isDuplicateParagraph(Map properties) { - - return properties.containsKey(DocumentStructureWrapper.DuplicateParagraphProperties.UNSORTED_TEXTBLOCK_ID); - } - - - public static List getUnsortedTextblockIds(Map properties) { - - return toLongList(properties.get(DocumentStructureWrapper.DuplicateParagraphProperties.UNSORTED_TEXTBLOCK_ID)); - } - - - public static List toLongList(String ids) { - - return Arrays.stream(ids.substring(1, ids.length() - 1).trim().split(",")).map(Long::valueOf).toList(); - } - - -} 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 index 375dc0f2..cd6a953e 100644 --- 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 @@ -17,12 +17,12 @@ import org.drools.drl.parser.DrlParser; import org.kie.internal.builder.conf.LanguageLevelOption; import com.iqser.red.service.redaction.v1.model.DroolsValidation; +import com.iqser.red.service.redaction.v1.server.model.document.entity.RuleIdentifier; +import com.iqser.red.service.redaction.v1.server.model.document.entity.RuleType; import com.iqser.red.service.redaction.v1.server.model.drools.BasicQuery; 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; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/DocumentDataFallbackService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/DocumentDataFallbackService.java index c6b2c5d6..0f5d5d2e 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/DocumentDataFallbackService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/DocumentDataFallbackService.java @@ -16,17 +16,17 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.primitives.Floats; import com.google.protobuf.Message; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType; +import com.iqser.red.service.redaction.v1.server.data.DocumentPageProto; +import com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto; +import com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto; +import com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto; +import com.iqser.red.service.redaction.v1.server.data.EntryDataProto; +import com.iqser.red.service.redaction.v1.server.data.NodeTypeProto; +import com.iqser.red.service.redaction.v1.server.data.old.DocumentPage; +import com.iqser.red.service.redaction.v1.server.data.old.DocumentPositionData; +import com.iqser.red.service.redaction.v1.server.data.old.DocumentStructure; +import com.iqser.red.service.redaction.v1.server.data.old.DocumentTextData; import com.iqser.red.storage.commons.service.StorageService; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPage; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPageProto; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPositionData; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPositionDataProto; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentStructure; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentStructureProto; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentTextData; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentTextDataProto; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.EntryDataProto; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.NodeTypeProto; import com.knecon.fforesight.tenantcommons.TenantContext; import lombok.RequiredArgsConstructor; @@ -172,7 +172,7 @@ public class DocumentDataFallbackService { DocumentPositionDataProto.DocumentPositionData.Builder builder = DocumentPositionDataProto.DocumentPositionData.newBuilder() .setId(oldData.getId()) .addAllStringIdxToPositionIdx(Arrays.stream(oldData.getStringIdxToPositionIdx()).boxed() - .collect(Collectors.toList())); + .toList()); for (float[] pos : oldData.getPositions()) { DocumentPositionDataProto.DocumentPositionData.Position position = DocumentPositionDataProto.DocumentPositionData.Position.newBuilder() diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/ObservedStorageService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/ObservedStorageService.java index becdb04b..464e4d69 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/ObservedStorageService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/storage/ObservedStorageService.java @@ -2,7 +2,7 @@ package com.iqser.red.service.redaction.v1.server.storage; import org.springframework.stereotype.Service; -import com.iqser.red.service.redaction.v1.server.model.document.DocumentData; +import com.iqser.red.service.redaction.v1.server.data.DocumentData; import io.micrometer.observation.annotation.Observed; import lombok.RequiredArgsConstructor; 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 182fabfb..d1307a38 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 @@ -1,6 +1,6 @@ package com.iqser.red.service.redaction.v1.server.storage; -import static com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPositionDataProto.AllDocumentPositionData; +import static com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto.AllDocumentPositionData; import static org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME; import java.io.File; @@ -30,18 +30,18 @@ import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.Com import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.EntityLogMongoService; import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; import com.iqser.red.service.redaction.v1.server.client.model.NerEntitiesModel; -import com.iqser.red.service.redaction.v1.server.model.document.DocumentData; +import com.iqser.red.service.redaction.v1.server.data.DocumentData; +import com.iqser.red.service.redaction.v1.server.data.DocumentPageProto; +import com.iqser.red.service.redaction.v1.server.data.DocumentPageProto.AllDocumentPages; +import com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto; +import com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto.DocumentStructure; +import com.iqser.red.service.redaction.v1.server.data.DocumentStructureWrapper; +import com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto; +import com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto.AllDocumentTextData; import com.iqser.red.service.redaction.v1.server.utils.exception.NotFoundException; import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.llm.service.LlmNerEntities; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPageProto; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPageProto.AllDocumentPages; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPositionDataProto; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentStructureProto.DocumentStructure; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentStructureWrapper; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentTextDataProto; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentTextDataProto.AllDocumentTextData; import com.knecon.fforesight.tenantcommons.TenantContext; import io.micrometer.core.annotation.Timed; diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/resources/drools/all_rules_documine.drl b/redaction-service-v1/redaction-service-server-v1/src/main/resources/drools/all_rules_documine.drl index 851e61cb..86084a63 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/resources/drools/all_rules_documine.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/main/resources/drools/all_rules_documine.drl @@ -47,7 +47,7 @@ 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; +import com.iqser.red.service.redaction.v1.server.data.LayoutEngineProto.LayoutEngine; global Document document global EntityCreationService entityCreationService 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 83129523..df024380 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 @@ -242,7 +242,9 @@ public abstract class AbstractRedactionIntegrationTest { @BeforeAll public static void init() { - PDFNet.initialize("demo:1650351709282:7bd235e003000000004ec28a6743e1163a085e2115de2536ab6e2cfe5a"); + synchronized (PDFNet.class) { + PDFNet.initialize("demo:1650351709282:7bd235e003000000004ec28a6743e1163a085e2115de2536ab6e2cfe5a"); + } } diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/MapEntityLogToDocumentDataTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/MapEntityLogToDocumentDataTest.java index 9636b5c8..c749b98e 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/MapEntityLogToDocumentDataTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/MapEntityLogToDocumentDataTest.java @@ -37,19 +37,19 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryState; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryType; +import com.iqser.red.service.redaction.v1.server.data.DocumentData; +import com.iqser.red.service.redaction.v1.server.data.DocumentPageProto; +import com.iqser.red.service.redaction.v1.server.data.DocumentPositionDataProto; +import com.iqser.red.service.redaction.v1.server.data.DocumentStructureProto; +import com.iqser.red.service.redaction.v1.server.data.DocumentStructureWrapper; +import com.iqser.red.service.redaction.v1.server.data.DocumentTextDataProto; +import com.iqser.red.service.redaction.v1.server.mapper.DocumentGraphMapper; import com.iqser.red.service.redaction.v1.server.model.PrecursorEntity; -import com.iqser.red.service.redaction.v1.server.model.document.DocumentData; 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.DictionaryService; +import com.iqser.red.service.redaction.v1.server.service.EntityFindingUtility; import com.iqser.red.service.redaction.v1.server.service.EntityLogCreatorService; -import com.iqser.red.service.redaction.v1.server.service.document.DocumentGraphMapper; -import com.iqser.red.service.redaction.v1.server.service.document.EntityFindingUtility; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPageProto; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPositionDataProto; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentStructureProto; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentStructureWrapper; -import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentTextDataProto; import com.knecon.fforesight.tenantcommons.TenantContext; import lombok.SneakyThrows; 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 b1eba29c..729d527d 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 @@ -52,7 +52,6 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryState; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryType; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.ManualRedactionType; -import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ForceRedactionRequest; 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.Rectangle; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.IdRemoval; @@ -69,12 +68,12 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Point; 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.model.document.DocumentData; +import com.iqser.red.service.redaction.v1.server.data.DocumentData; +import com.iqser.red.service.redaction.v1.server.mapper.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.rules.RulesIntegrationTest; -import com.iqser.red.service.redaction.v1.server.service.document.DocumentGraphMapper; import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType; import com.knecon.fforesight.service.layoutparser.processor.utils.ProtobufUtil; import com.knecon.fforesight.tenantcommons.TenantContext; @@ -1286,7 +1285,6 @@ public class RedactionIntegrationTest extends RulesIntegrationTest { String EFSA_SANITISATION_RULES = loadFromClassPath("drools/efsa_sanitisation.drl"); when(rulesClient.getRules(TEST_DOSSIER_TEMPLATE_ID, RuleFileType.ENTITY)).thenReturn(JSONPrimitive.of(EFSA_SANITISATION_RULES)); - AnalyzeRequest request = uploadFileToStorage("files/new/SYNGENTA_EFSA_sanitisation_GFL_v1 (1).pdf"); ClassPathResource imageServiceResponseFileResource = new ClassPathResource("files/new/SYNGENTA_EFSA_sanitisation_GFL_v1 (1).IMAGE_INFO.json"); @@ -1307,7 +1305,6 @@ public class RedactionIntegrationTest extends RulesIntegrationTest { .findFirst() .get(); - var newId = UUID.randomUUID().toString(); request.setManualRedactions(ManualRedactions.builder() .legalBasisChanges(Set.of(ManualLegalBasisChange.builder() @@ -1879,9 +1876,6 @@ public class RedactionIntegrationTest extends RulesIntegrationTest { .get(0).getType(), ChangeType.ADDED); assertEquals(inLibraryOutlook.getChanges() .get(1).getType(), ChangeType.RESIZED); - assertEquals(inLibraryOutlook.getChanges() - .get(1).getPropertyChanges() - .get("reason"), "Found by Email Regex -> Found by Email Regex, resized by manual override"); assertEquals(inLibraryOutlook.getChanges() .get(1).getPropertyChanges() .get("startOffset"), "3793 -> 3790"); @@ -1989,7 +1983,7 @@ public class RedactionIntegrationTest extends RulesIntegrationTest { .get(1).getType(), ChangeType.IGNORED); assertEquals(responseDavidKsenia.getChanges() .get(1).getPropertyChanges() - .get("reason"), "No vertebrate found -> removed by manual override"); + .get("reason"), "No vertebrate found -> "); assertEquals(responseDavidKsenia.getChanges() .get(1).getPropertyChanges() .get("matchedRule"), "CBI.13.2 -> "); @@ -2043,7 +2037,7 @@ public class RedactionIntegrationTest extends RulesIntegrationTest { .get(1).getType(), ChangeType.RECATEGORIZE); assertEquals(responseDavidKsenia.getChanges() .get(1).getPropertyChanges() - .get("reason"), "No vertebrate found -> Recategorized entities are applied by default., recategorized by manual override"); + .get("reason"), "No vertebrate found -> Recategorized entities are applied by default."); assertEquals(responseDavidKsenia.getChanges() .get(1).getPropertyChanges() .get("matchedRule"), "CBI.13.2 -> MAN.3.3"); @@ -2097,9 +2091,6 @@ public class RedactionIntegrationTest extends RulesIntegrationTest { .get(0).getType(), ChangeType.ADDED); assertEquals(responseDavidKsenia.getChanges() .get(1).getType(), ChangeType.FORCE_REDACT); - assertEquals(responseDavidKsenia.getChanges() - .get(1).getPropertyChanges() - .get("reason"), "No vertebrate found -> No vertebrate found, forced by manual override"); assertEquals(responseDavidKsenia.getChanges() .get(1).getPropertyChanges() .get("legalBasis"), " -> new legal basis"); 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 32fb8fbd..926279be 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 @@ -22,6 +22,7 @@ public class TextEntityTest { assertThat(entity.getMatchedRuleUnit()).isEqualTo(13); } + @Test public void testMatchedRule2() { 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 07770c84..c11f1334 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 @@ -7,8 +7,8 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest; 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.mapper.DocumentGraphMapper; import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; -import com.iqser.red.service.redaction.v1.server.service.document.DocumentGraphMapper; import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType; 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/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 888f41b8..283fd487 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.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.document.EntityCreationService; import com.iqser.red.service.redaction.v1.server.service.document.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 32d678d5..f5679fa4 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 @@ -84,4 +84,16 @@ class TextRangeTest { assertEquals(1, afterTextRange.compareTo(startTextRange)); } + + @Test + void testContainsExclusive() { + + assertTrue(startTextRange.containsExclusive(11)); + assertTrue(startTextRange.containsExclusive(50)); + assertFalse(startTextRange.containsExclusive(9)); + assertFalse(startTextRange.containsExclusive(100)); + assertFalse(startTextRange.containsExclusive(150)); + assertFalse(startTextRange.containsExclusive(-123)); + } + } \ 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 094905fb..6ea85b4c 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 @@ -49,10 +49,10 @@ import com.iqser.red.service.redaction.v1.server.AbstractRedactionIntegrationTes import com.iqser.red.service.redaction.v1.server.Application; 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.mapper.DocumentGraphMapper; import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; import com.iqser.red.service.redaction.v1.server.redaction.utils.OsUtils; -import com.iqser.red.service.redaction.v1.server.service.document.DocumentGraphMapper; import com.iqser.red.service.redaction.v1.server.service.document.EntityCreationService; import com.iqser.red.service.redaction.v1.server.service.document.EntityEnrichmentService; 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/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 7353acb7..ce91c661 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 @@ -10,19 +10,14 @@ import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.UUID; import java.util.stream.Collectors; import org.junit.jupiter.api.Test; import com.google.common.collect.Sets; -import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest; -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.ChangeType; -import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Rectangle; 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.ManualRedactionEntry; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction; import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType; import com.iqser.red.service.redaction.v1.server.model.document.entity.PositionOnPage; @@ -30,7 +25,6 @@ import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntit 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.rules.RulesIntegrationTest; -import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType; public class ManualChangesIntegrationTest extends RulesIntegrationTest { 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 4e12dd27..b370bf1e 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 @@ -62,7 +62,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest { entity.getManualOverwrite().addChange(removal); assertTrue(entity.ignored()); assertFalse(entity.applied()); - assertEquals(reason + ", removed by manual override", entity.buildReasonWithManualChangeDescriptions()); + assertEquals(reason, entity.buildReason()); // force again ManualForceRedaction forceRedaction = ManualForceRedaction.builder() @@ -76,7 +76,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest { assertTrue(entity.applied()); assertFalse(entity.ignored()); assertFalse(entity.removed()); - assertEquals(reason + ", removed by manual override, forced by manual override", entity.buildReasonWithManualChangeDescriptions()); + assertEquals(reason, entity.buildReason()); assertEquals("coolio", entity.getManualOverwrite().getLegalBasis() .orElse(entity.getMatchedRule().getLegalBasis())); @@ -86,7 +86,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest { entity.getManualOverwrite().addChange(removal2); assertTrue(entity.ignored()); assertFalse(entity.applied()); - assertEquals(reason + ", removed by manual override, forced by manual override, removed by manual override", entity.buildReasonWithManualChangeDescriptions()); + assertEquals(reason, entity.buildReason()); // force again, with requestDate before removal2, but after force1 ManualForceRedaction forceRedaction2 = ManualForceRedaction.builder() @@ -99,8 +99,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest { entity.getManualOverwrite().addChange(forceRedaction2); assertTrue(entity.ignored()); assertFalse(entity.applied()); - assertEquals(reason + ", removed by manual override, forced by manual override, forced by manual override, removed by manual override", - entity.buildReasonWithManualChangeDescriptions()); + assertEquals(reason, entity.buildReason()); String legalBasis = "Yeah"; String section = "Some random section!"; @@ -117,8 +116,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest { entity.getManualOverwrite().addChange(legalBasisChange); assertTrue(entity.ignored()); assertFalse(entity.applied()); - assertEquals(reason + ", removed by manual override, forced by manual override, forced by manual override, removed by manual override, legal basis was manually changed", - entity.buildReasonWithManualChangeDescriptions()); + assertEquals(reason, entity.buildReason()); assertEquals(value, entity.getManualOverwrite().getValue() .orElse(entity.getValue())); @@ -173,7 +171,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest { entity.getManualOverwrite().addChange(removal); assertTrue(entity.ignored()); assertFalse(entity.applied()); - assertEquals(reason + ", removed by manual override", entity.buildReasonWithManualChangeDescriptions()); + assertEquals(reason, entity.buildReason()); // force again ManualForceRedaction forceRedaction = ManualForceRedaction.builder() @@ -187,7 +185,7 @@ public class ManualChangesUnitTest extends BuildDocumentIntegrationTest { assertFalse(entity.applied()); assertFalse(entity.ignored()); assertFalse(entity.removed()); - assertEquals(reason + ", removed by manual override, forced by manual override", entity.buildReasonWithManualChangeDescriptions()); + assertEquals(reason, entity.buildReason()); assertEquals("coolio", entity.getManualOverwrite().getLegalBasis() .orElse(entity.getMatchedRule().getLegalBasis())); diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/PrecursorEntityTest.java b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/PrecursorEntityTest.java index 4b6212b3..9a3f8dba 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/PrecursorEntityTest.java +++ b/redaction-service-v1/redaction-service-server-v1/src/test/java/com/iqser/red/service/redaction/v1/server/manualchanges/PrecursorEntityTest.java @@ -134,11 +134,7 @@ public class PrecursorEntityTest extends BuildDocumentIntegrationTest { assertEquals(1, notFoundManualEntities.size()); assertTrue(document.getEntities().isEmpty()); - EntityLogChanges entityLogChanges = entityLogCreatorService.createInitialEntityLog(new AnalyzeRequest(), - document, - notFoundManualEntities, - new DictionaryVersion(), - 0L); + EntityLogChanges entityLogChanges = entityLogCreatorService.createInitialEntityLog(new AnalyzeRequest(), document, notFoundManualEntities, new DictionaryVersion(), 0L); List entityLogEntries = entityLogChanges.getEntityLog().getEntityLogEntry(); assertEquals(1, entityLogEntries.size()); 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 6bede2ee..3c919839 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 @@ -12,7 +12,6 @@ import java.util.Collection; import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -24,17 +23,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.document.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.model.NerEntities; 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.entity.TextEntity; import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document; import com.iqser.red.service.redaction.v1.server.service.document.EntityCreationService; import com.iqser.red.service.redaction.v1.server.service.document.EntityEnrichmentService; +import com.iqser.red.service.redaction.v1.server.service.document.NerEntitiesAdapter; 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/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 0dc66e6c..e38431d0 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,10 +13,10 @@ 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.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.nodes.Page; import com.iqser.red.service.redaction.v1.server.model.document.textblock.AtomicTextBlock; import com.iqser.red.service.redaction.v1.server.model.document.textblock.TextBlock; @@ -127,6 +127,7 @@ public class PdfVisualisationUtility { case TABLE -> Color.ORANGE; case TABLE_CELL -> Color.GRAY; case IMAGE -> Color.MAGENTA; + default -> Color.PINK; }).build(); } 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 eb0b93b5..1a45de3f 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 @@ -35,6 +35,7 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIde 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.nodes.LayoutEngine; 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; @@ -55,8 +56,6 @@ 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; - global Document document global EntityCreationService entityCreationService global ManualChangesApplicationService manualChangesApplicationService @@ -273,6 +272,7 @@ rule "CBI.11.0: Recommend all CBI_author entities in Table with Vertebrate Study $table.getEntitiesOfType("CBI_author").stream().filter(IEntity::applied).forEach(entity -> dictionary.addMultipleAuthorsAsRecommendation(entity)); end + // Rule unit: CBI.16 rule "CBI.16.0: Do not redact Names and Addresses if published information found in Section without tables" when @@ -1291,7 +1291,6 @@ rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE" retract($entity) end - rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE" salience 64 when @@ -1430,7 +1429,6 @@ rule "X.11.1: Remove non manual entity which intersects with a manual entity" retract($nonManualEntity); end - rule "X.11.2: Remove non manual entity which are equal to manual entity" salience 70 when diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/all_redact_manager_rules.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/all_redact_manager_rules.drl index 0e8ab237..5cae1486 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/all_redact_manager_rules.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/all_redact_manager_rules.drl @@ -35,6 +35,7 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIde 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.nodes.LayoutEngine; 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; @@ -55,8 +56,6 @@ 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; - global Document document global EntityCreationService entityCreationService global ManualChangesApplicationService manualChangesApplicationService @@ -340,7 +339,7 @@ rule "CBI.11.0: Recommend all CBI_author entities in Table with Vertebrate Study end -// Rule unit: CBI.12 - table rules remains +// Rule unit: CBI.12 rule "CBI.12.0: Redact and recommend TableCell with header 'Author' or 'Author(s)' and header 'Vertebrate study Y/N' with value 'Yes'" agenda-group "LOCAL_DICTIONARY_ADDS" when @@ -404,8 +403,6 @@ rule "CBI.12.3: Skip TableCell with header 'Author' or 'Author(s)' and header 'V .ifPresent(authorEntity -> authorEntity.skip("CBI.12.3", "Not redacted because it's row does not belong to a vertebrate study")); end - -//from CBI.3.3 rule "CBI.12.4: Redacted because table row contains a redaction_indicator" when $table: Table(hasEntitiesOfType("CBI_author") || hasEntitiesOfType("CBI_address")) @@ -422,8 +419,6 @@ rule "CBI.12.4: Redacted because table row contains a redaction_indicator" }); end - -//from CBI.3.1 rule "CBI.12.5: Redacted because table row contains a vertebrate" when $table: Table(hasEntitiesOfType("CBI_author") || hasEntitiesOfType("CBI_address")) @@ -440,7 +435,6 @@ rule "CBI.12.5: Redacted because table row contains a vertebrate" }); end - rule "CBI.12.6: Skip Addresses on TableCell with header 'Owner'" salience -1 when @@ -535,7 +529,7 @@ rule "CBI.12.15: Redacted because table row contains a vertebrate, a no_redactio end -// Rule unit: CBI.13 - section rules +// Rule unit: CBI.13 rule "CBI.13.0: Ignore CBI Address recommendations" when not FileAttribute(label == "Vertebrate Study", value soundslike "Yes" || value.toLowerCase() == "y") @@ -545,7 +539,6 @@ rule "CBI.13.0: Ignore CBI Address recommendations" retract($entity) end -// from CBI.3.0 rule "CBI.13.1: Redacted because Section contains a vertebrate" when $section: Section(!hasTables(), hasEntitiesOfType("vertebrate"), (hasEntitiesOfType("CBI_author") || hasEntitiesOfType("CBI_address"))) @@ -561,7 +554,6 @@ rule "CBI.13.1: Redacted because Section contains a vertebrate" }); end -//from CBI.3.2 rule "CBI.13.2: Do not redact because Section does not contain a vertebrate" when $section: Section(!hasTables(), !hasEntitiesOfType("vertebrate"), (hasEntitiesOfType("CBI_author") || hasEntitiesOfType("CBI_address"))) @@ -570,8 +562,6 @@ rule "CBI.13.2: Do not redact because Section does not contain a vertebrate" .forEach(entity -> entity.skip("CBI.13.2", "No vertebrate found")); end - -// from CBI.4.0 rule "CBI.13.3: Do not redact Names and Addresses if vertebrate and no_redaction_indicator is found in Section" when $section: Section(!hasTables(), @@ -589,8 +579,6 @@ rule "CBI.13.3: Do not redact Names and Addresses if vertebrate and no_redaction }); end - -// from CBI.5.0 rule "CBI.13.4: Redact Names and Addresses if vertebrate and no_redaction_indicator but also redaction_indicator is found in Section" when $section: Section(!hasTables(), @@ -612,7 +600,6 @@ rule "CBI.13.4: Redact Names and Addresses if vertebrate and no_redaction_indica }); end -// From CBI.8.0 rule "CBI.13.5: Redacted because Section contains must_redact entity" when $section: Section(!hasTables(), hasEntitiesOfType("must_redact"), (hasEntitiesOfType("CBI_author") || hasEntitiesOfType("CBI_address"))) @@ -628,6 +615,7 @@ rule "CBI.13.5: Redacted because Section contains must_redact entity" }); end + // Rule unit: CBI.14 rule "CBI.14.0: Redact CBI_sponsor entities if preceded by \"batches produced at\"" when @@ -742,6 +730,7 @@ rule "CBI.16.3: Do not redact PII if published information found in same table r $pii.skipWithReferences("CBI.16.3", "Published Information found in row", $table.getEntitiesOfTypeInSameRow("published_information", $pii)); end + // Rule unit: CBI.17 rule "CBI.17.0: Add recommendation for Addresses in Test Organism sections, without colon" when @@ -847,7 +836,6 @@ rule "CBI.20.3: Redact between \"PERFORMING LABORATORY\" and \"LABORATORY PROJEC // Rule unit: CBI.21 -// from CBI.6 rule "CBI.21.0: Do not redact Names and Addresses if published_information is found in Section" when $section: Section(!hasTables(), @@ -882,7 +870,6 @@ rule "CBI.21.1: Do not redact Names and Addresses if published_information is fo }); end - rule "CBI.21.2: Redact short Authors section (non vertebrate study)" when not FileAttribute(label == "Vertebrate Study", value soundslike "Yes" || value.toLowerCase() == "y") @@ -1397,7 +1384,6 @@ rule "PII.8.2: Redact contact information if producer is found (vertebrate study end -// UPDATED WITH LIMIT // Rule unit: PII.9 rule "PII.9.0: Redact between \"AUTHOR(S)\" and \"(STUDY) COMPLETION DATE\"" when @@ -1444,7 +1430,6 @@ rule "PII.10.0: Redact study director abbreviation (non vertebrate study)" .forEach(entity -> entity.redact("PII.10.0", "Personal information found", "Article 39(e)(3) of Regulation (EC) No 178/2002")); end - rule "PII.10.1: Redact study director abbreviation (vertebrate study)" when FileAttribute(label == "Vertebrate Study", value soundslike "Yes" || value.toLowerCase() == "y") @@ -1475,8 +1460,6 @@ rule "PII.12.0: Expand PII entities with salutation prefix" .ifPresent(expandedEntity -> expandedEntity.apply("PII.12.0", "Expanded PII with salutation prefix", "Article 39(e)(3) of Regulation (EC) No 178/2002")); end - -// Rule unit: PII.12 rule "PII.12.1: Expand PII entities with salutation prefix" when FileAttribute(label == "Vertebrate Study", value soundslike "Yes" || value.toLowerCase() == "y") @@ -1591,7 +1574,6 @@ rule "ETC.3.3: Redact logos" $logo.redact("ETC.3.3", "Logo Found", "Article 4(1)(b), Regulation (EC) No 1049/2001 (Personal data)"); end -// from preGFL Knoell rule "ETC.3.4: Skip logos" when $logo: Image(imageType == ImageType.LOGO) @@ -1759,6 +1741,7 @@ rule "ETC.12.3: Skip dossier_redaction (Vertebrate study)" $dossierRedaction.skip("ETC.12.3", "Dossier dictionary entry found"); end + //------------------------------------ AI rules ------------------------------------ // Rule unit: AI.0 @@ -1885,7 +1868,7 @@ rule "AI.7.0: Add all NER Entities of type Address" end -//------------------------------------ Manual redaction rules ------------------------------------ +//------------------------------------ Manual changes rules ------------------------------------ // Rule unit: MAN.0 rule "MAN.0.0: Apply manual resize redaction" @@ -2075,7 +2058,6 @@ rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE" retract($entity) end - rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE" salience 64 when @@ -2214,7 +2196,6 @@ rule "X.11.0: Remove dictionary entity which intersects with a manual entity" retract($dictionaryEntity); end - rule "X.11.1: Remove non manual entity which intersects with a manual entity" salience 64 when @@ -2225,7 +2206,6 @@ rule "X.11.1: Remove non manual entity which intersects with a manual entity" retract($nonManualEntity); end - rule "X.11.2: Remove non manual entity which are equal to manual entity" salience 70 when 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 77d6bf13..8b3442c1 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 @@ -13,12 +13,14 @@ import java.util.stream.Stream; import java.util.Optional; import com.iqser.red.service.redaction.v1.server.logger.RulesLogger; +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.IEntity; +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.TableCell; @@ -30,8 +32,15 @@ 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.nodes.LayoutEngine; +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; @@ -47,8 +56,6 @@ 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; - global Document document global EntityCreationService entityCreationService global ManualChangesApplicationService manualChangesApplicationService @@ -1419,7 +1426,6 @@ rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE" retract($entity) end - rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE" salience 64 when diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/efsa_sanitisation.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/efsa_sanitisation.drl index a3fd859f..f15ae429 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/efsa_sanitisation.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/efsa_sanitisation.drl @@ -35,6 +35,7 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIde 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.nodes.LayoutEngine; 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; @@ -55,8 +56,6 @@ 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; - global Document document global EntityCreationService entityCreationService global ManualChangesApplicationService manualChangesApplicationService @@ -139,6 +138,7 @@ rule "CBI.0.4: Redact CBI Authors (vertebrate Study)" $entity.redact("CBI.0.4", "Author found", "Article 39(e)(2) of Regulation (EC) No 178/2002"); end + // Rule unit: CBI.1 rule "CBI.1.0: Do not redact CBI Address (non vertebrate Study)" when @@ -439,7 +439,6 @@ rule "PII.3.2: Redact telephone numbers by RegEx (vertebrate study)" .forEach(entity -> entity.redact("PII.3.2", "Telephone number found by regex", "Article 39(e)(2) of Regulation (EC) No 178/2002")); end - rule "PII.3.4: Redact telephone numbers by RegEx (Non vertebrate study)" when not FileAttribute(label == "Vertebrate Study", value soundslike "Yes" || value.toLowerCase() == "y") @@ -599,7 +598,6 @@ rule "PII.10.0: Redact study director abbreviation (non vertebrate study)" .forEach(entity -> entity.redact("PII.10.0", "Personal information found", "Article 39(e)(3) of Regulation (EC) No 178/2002")); end - rule "PII.10.1: Redact study director abbreviation (vertebrate study)" when FileAttribute(label == "Vertebrate Study", value soundslike "Yes" || value.toLowerCase() == "y") @@ -708,6 +706,7 @@ rule "ETC.5.1: Remove dossier_redaction entries if confidentiality is not 'confi retract($dossierRedaction); end + // Rule unit: ETC.12 rule "ETC.12.2: Skip dossier_redaction (Non vertebrate study)" when @@ -725,6 +724,7 @@ rule "ETC.12.3: Skip dossier_redaction (Vertebrate study)" $dossierRedaction.skip("ETC.12.3", "Dossier dictionary entry found"); end + //------------------------------------ AI rules ------------------------------------ // Rule unit: AI.0 @@ -1018,7 +1018,6 @@ rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE" retract($entity) end - rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE" salience 64 when @@ -1157,7 +1156,6 @@ rule "X.11.1: Remove non manual entity which intersects with a manual entity" retract($nonManualEntity); end - rule "X.11.2: Remove non manual entity which are equal to manual entity" salience 70 when 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 03612b29..47594a31 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 @@ -35,6 +35,7 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIde 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.nodes.LayoutEngine; 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; @@ -55,8 +56,6 @@ 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; - global Document document global EntityCreationService entityCreationService global ManualChangesApplicationService manualChangesApplicationService @@ -149,7 +148,7 @@ rule "AI.7.0: Add all NER Entities of type Address" end -//------------------------------------ Manual redaction rules ------------------------------------ +//------------------------------------ Manual changes rules ------------------------------------ // Rule unit: MAN.0 rule "MAN.0.0: Apply manual resize redaction" @@ -339,7 +338,6 @@ rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE" retract($entity) end - rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE" salience 64 when @@ -478,7 +476,6 @@ rule "X.11.1: Remove non manual entity which intersects with a manual entity" retract($nonManualEntity); end - rule "X.11.2: Remove non manual entity which are equal to manual entity" salience 70 when 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 a74133d3..e11a5b7b 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 @@ -35,6 +35,7 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIde 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.nodes.LayoutEngine; 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; @@ -55,8 +56,6 @@ 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; - global Document document global EntityCreationService entityCreationService global ManualChangesApplicationService manualChangesApplicationService @@ -85,6 +84,7 @@ rule "SYN.0.0: Redact if CTL/* or BL/* was found (Non Vertebrate Study)" //------------------------------------ CBI rules ------------------------------------ + // Rule unit: CBI.0 rule "CBI.0.0: Add CBI_author with \"et al.\" RegEx" agenda-group "LOCAL_DICTIONARY_ADDS" @@ -177,7 +177,7 @@ rule "CBI.11.0: Recommend all CBI_author entities in Table with Vertebrate Study end -// Rule unit: CBI.12 - table rules remains +// Rule unit: CBI.12 rule "CBI.12.0: Redact and recommend TableCell with header 'Author' or 'Author(s)' and header 'Vertebrate study Y/N' with value 'Yes'" agenda-group "LOCAL_DICTIONARY_ADDS" when @@ -241,8 +241,6 @@ rule "CBI.12.3: Skip TableCell with header 'Author' or 'Author(s)' and header 'V .ifPresent(authorEntity -> authorEntity.skip("CBI.12.3", "Not redacted because it's row does not belong to a vertebrate study")); end - -//from CBI.3.3 rule "CBI.12.4: Redacted because table row contains a redaction_indicator" when $table: Table(hasEntitiesOfType("CBI_author") || hasEntitiesOfType("CBI_address")) @@ -259,8 +257,6 @@ rule "CBI.12.4: Redacted because table row contains a redaction_indicator" }); end - -//from CBI.3.1 rule "CBI.12.5: Redacted because table row contains a vertebrate" when $table: Table(hasEntitiesOfType("CBI_author") || hasEntitiesOfType("CBI_address")) @@ -278,8 +274,7 @@ rule "CBI.12.5: Redacted because table row contains a vertebrate" end -// Rule unit: CBI.13 - section rules -// from CBI.3.0 +// Rule unit: CBI.13 rule "CBI.13.1: Redacted because Section contains a vertebrate" when $section: Section(!hasTables(), hasEntitiesOfType("vertebrate"), (hasEntitiesOfType("CBI_author") || hasEntitiesOfType("CBI_address"))) @@ -295,7 +290,6 @@ rule "CBI.13.1: Redacted because Section contains a vertebrate" }); end -//from CBI.3.2 rule "CBI.13.2: Do not redact because Section does not contain a vertebrate" when $section: Section(!hasTables(), !hasEntitiesOfType("vertebrate"), (hasEntitiesOfType("CBI_author") || hasEntitiesOfType("CBI_address"))) @@ -304,8 +298,6 @@ rule "CBI.13.2: Do not redact because Section does not contain a vertebrate" .forEach(entity -> entity.skip("CBI.13.2", "No vertebrate found")); end - -// from CBI.4.0 rule "CBI.13.3: Do not redact Names and Addresses if vertebrate and no_redaction_indicator is found in Section" when $section: Section(!hasTables(), @@ -323,8 +315,6 @@ rule "CBI.13.3: Do not redact Names and Addresses if vertebrate and no_redaction }); end - -// from CBI.5.0 rule "CBI.13.4: Redact Names and Addresses if vertebrate and no_redaction_indicator but also redaction_indicator is found in Section" when $section: Section(!hasTables(), @@ -346,7 +336,6 @@ rule "CBI.13.4: Redact Names and Addresses if vertebrate and no_redaction_indica }); end -// From CBI.8.0 rule "CBI.13.5: Redacted because Section contains must_redact entity" when $section: Section(!hasTables(), hasEntitiesOfType("must_redact"), (hasEntitiesOfType("CBI_author") || hasEntitiesOfType("CBI_address"))) @@ -362,6 +351,7 @@ rule "CBI.13.5: Redacted because Section contains must_redact entity" }); end + // Rule unit: CBI.14 rule "CBI.14.0: Redact CBI_sponsor entities if preceded by \"batches produced at\"" when @@ -1133,7 +1123,7 @@ rule "AI.7.0: Add all NER Entities of type Address" end -//------------------------------------ Manual redaction rules ------------------------------------ +//------------------------------------ Manual changes rules ------------------------------------ // Rule unit: MAN.0 rule "MAN.0.0: Apply manual resize redaction" @@ -1323,7 +1313,6 @@ rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE" retract($entity) end - rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE" salience 64 when @@ -1462,7 +1451,6 @@ rule "X.11.1: Remove non manual entity which intersects with a manual entity" retract($nonManualEntity); end - rule "X.11.2: Remove non manual entity which are equal to manual entity" salience 70 when 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 fa34d1fd..17e1c255 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 @@ -35,6 +35,7 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIde 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.nodes.LayoutEngine; 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; @@ -55,8 +56,6 @@ 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; - global Document document global EntityCreationService entityCreationService global ManualChangesApplicationService manualChangesApplicationService @@ -397,7 +396,6 @@ rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE" retract($entity) end - rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE" salience 64 when @@ -536,7 +534,6 @@ rule "X.11.1: Remove non manual entity which intersects with a manual entity" retract($nonManualEntity); end - rule "X.11.2: Remove non manual entity which are equal to manual entity" salience 70 when diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo.drl index 840ce18e..0166e897 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/table_demo.drl @@ -35,6 +35,7 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIde 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.nodes.LayoutEngine; 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; @@ -55,8 +56,6 @@ 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; - global Document document global EntityCreationService entityCreationService global ManualChangesApplicationService manualChangesApplicationService @@ -489,7 +488,6 @@ rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE" retract($entity) end - rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE" salience 64 when @@ -639,7 +637,6 @@ rule "X.11.1: Remove non manual entity which intersects with a manual entity" retract($nonManualEntity); end - rule "X.11.2: Remove non manual entity which are equal to manual entity" salience 70 when diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/test_rules.drl b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/test_rules.drl index 699c4182..f8c0bbcc 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/test_rules.drl +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools/test_rules.drl @@ -35,6 +35,7 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIde 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.nodes.LayoutEngine; 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; @@ -55,8 +56,6 @@ 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; - global Document document global EntityCreationService entityCreationService global ManualChangesApplicationService manualChangesApplicationService @@ -389,31 +388,6 @@ rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE" retract($entity) end - -rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE" - salience 64 - when - $falsePositive: TextEntity($type: type(), entityType == EntityType.FALSE_POSITIVE, active()) - $entity: TextEntity(containedBy($falsePositive), type() == $type, (entityType == EntityType.HINT), !hasManualChanges()) - then - $entity.getIntersectingNodes().forEach(node -> update(node)); - $entity.remove("X.2.1", "remove Entity of type ENTITY when contained by FALSE_POSITIVE"); - retract($entity) - end - - -// Rule unit: X.2 -rule "X.2.0: Remove Entity of type ENTITY when contained by FALSE_POSITIVE" - salience 64 - when - $falsePositive: TextEntity($type: type(), entityType == EntityType.FALSE_POSITIVE, active()) - $entity: TextEntity(containedBy($falsePositive), type() == $type, (entityType == EntityType.ENTITY), !hasManualChanges()) - then - $entity.remove("X.2.0", "remove Entity of type ENTITY when contained by FALSE_POSITIVE"); - retract($entity) - end - - rule "X.2.1: Remove Entity of type HINT when contained by FALSE_POSITIVE" salience 64 when @@ -563,7 +537,6 @@ rule "X.11.1: Remove non manual entity which intersects with a manual entity" retract($nonManualEntity); end - rule "X.11.2: Remove non manual entity which are equal to manual entity" salience 70 when diff --git a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/syngenta b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/syngenta index 57e6e0dd..5705cc07 160000 --- a/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/syngenta +++ b/redaction-service-v1/redaction-service-server-v1/src/test/resources/files/syngenta @@ -1 +1 @@ -Subproject commit 57e6e0dd3c08a3a65ec59b5dfb70f0f77ebcc7c7 +Subproject commit 5705cc0782605fdca5dfff134b436f7143c9e421 diff --git a/redaction-service-v1/rules-management/src/main/java/com/knecon/fforesight/utility/rules/management/migration/RuleFileMigrator.java b/redaction-service-v1/rules-management/src/main/java/com/knecon/fforesight/utility/rules/management/migration/RuleFileMigrator.java index 94975b8e..c002fed3 100644 --- a/redaction-service-v1/rules-management/src/main/java/com/knecon/fforesight/utility/rules/management/migration/RuleFileMigrator.java +++ b/redaction-service-v1/rules-management/src/main/java/com/knecon/fforesight/utility/rules/management/migration/RuleFileMigrator.java @@ -4,13 +4,11 @@ import java.io.File; import java.io.FileOutputStream; import java.nio.charset.StandardCharsets; import java.util.List; -import java.util.Map; import com.knecon.fforesight.utility.rules.management.factory.RuleFileFactory; import com.knecon.fforesight.utility.rules.management.factory.RuleFileParser; import com.knecon.fforesight.utility.rules.management.models.BasicRule; import com.knecon.fforesight.utility.rules.management.models.RuleFileBluePrint; -import com.knecon.fforesight.utility.rules.management.models.RuleIdentifier; import com.knecon.fforesight.utility.rules.management.utils.RuleFileIO; import lombok.SneakyThrows; @@ -23,7 +21,6 @@ import lombok.experimental.UtilityClass; @UtilityClass public class RuleFileMigrator { - @SneakyThrows public void migrateFile(File ruleFile) { @@ -53,21 +50,12 @@ public class RuleFileMigrator { private static void replaceRuleIdentifiers(RuleFileBluePrint combinedBluePrint, RuleFileBluePrint ruleFileBluePrint) { - Map identifierReplaceMap = Map.of("CBI.7.0", "CBI.16.0", "CBI.7.1", "CBI.16.1", "CBI.7.2", "CBI.16.2", "CBI.7.3", "CBI.16.3"); - for (String identifier : identifierReplaceMap.keySet()) { - RuleIdentifier ruleId = RuleIdentifier.fromString(identifier); - RuleIdentifier otherRuleId = RuleIdentifier.fromString(identifierReplaceMap.get(identifier)); - - List rulesToAdd = combinedBluePrint.findRuleByIdentifier(otherRuleId); - List otherRulesToAdd = combinedBluePrint.findRuleByIdentifier(ruleId); - boolean removeRules = ruleFileBluePrint.removeRule(ruleId); - boolean removeOtherRules = ruleFileBluePrint.removeRule(otherRuleId); - if (removeRules) { - rulesToAdd.forEach(ruleFileBluePrint::addRule); - } - if (removeOtherRules) { - otherRulesToAdd.forEach(ruleFileBluePrint::addRule); + for (BasicRule rule : combinedBluePrint.getAllRules()) { + if (ruleFileBluePrint.findRuleByIdentifier(rule.identifier()).isEmpty()) { + continue; } + ruleFileBluePrint.removeRule(rule.identifier()); + ruleFileBluePrint.addRule(rule); } } diff --git a/redaction-service-v1/rules-management/src/main/java/com/knecon/fforesight/utility/rules/management/models/RuleIdentifier.java b/redaction-service-v1/rules-management/src/main/java/com/knecon/fforesight/utility/rules/management/models/RuleIdentifier.java index 1c863af2..569412e4 100644 --- a/redaction-service-v1/rules-management/src/main/java/com/knecon/fforesight/utility/rules/management/models/RuleIdentifier.java +++ b/redaction-service-v1/rules-management/src/main/java/com/knecon/fforesight/utility/rules/management/models/RuleIdentifier.java @@ -26,6 +26,15 @@ public record RuleIdentifier(@NonNull RuleType type, Integer unit, Integer id) { } + public static Set fromListOfIdentifiersString(String input) { + + return Arrays.stream(input.split(",")) + .map(String::trim) + .map(RuleIdentifier::fromString) + .collect(Collectors.toSet()); + } + + public static RuleIdentifier fromString(String identifier) { String[] values = identifier.split("\\."); @@ -36,15 +45,6 @@ public record RuleIdentifier(@NonNull RuleType type, Integer unit, Integer id) { } - 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) { String cleanedValue = value; @@ -65,7 +65,6 @@ public record RuleIdentifier(@NonNull RuleType type, Integer unit, Integer id) { 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())); - } diff --git a/redaction-service-v1/rules-management/src/main/resources/all_redact_manager_rules.drl b/redaction-service-v1/rules-management/src/main/resources/all_redact_manager_rules.drl index 7d841391..8b46eecc 100644 --- a/redaction-service-v1/rules-management/src/main/resources/all_redact_manager_rules.drl +++ b/redaction-service-v1/rules-management/src/main/resources/all_redact_manager_rules.drl @@ -35,6 +35,7 @@ import com.iqser.red.service.redaction.v1.server.model.document.nodes.SectionIde 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.nodes.LayoutEngine; 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; @@ -55,8 +56,6 @@ 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; - global Document document global EntityCreationService entityCreationService global ManualChangesApplicationService manualChangesApplicationService diff --git a/redaction-service-v1/rules-management/src/main/resources/all_rules_documine.drl b/redaction-service-v1/rules-management/src/main/resources/all_rules_documine.drl index 851e61cb..3eac9dd4 100644 --- a/redaction-service-v1/rules-management/src/main/resources/all_rules_documine.drl +++ b/redaction-service-v1/rules-management/src/main/resources/all_rules_documine.drl @@ -13,12 +13,14 @@ import java.util.stream.Stream; import java.util.Optional; import com.iqser.red.service.redaction.v1.server.logger.RulesLogger; +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.IEntity; +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.TableCell; @@ -30,8 +32,15 @@ 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.nodes.LayoutEngine; +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; @@ -47,8 +56,6 @@ 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.knecon.fforesight.service.layoutparser.internal.api.data.redaction.LayoutEngineProto.LayoutEngine; - global Document document global EntityCreationService entityCreationService global ManualChangesApplicationService manualChangesApplicationService diff --git a/redaction-service-v1/rules-management/src/test/java/com/knecon/fforesight/utility/rules/management/RuleFileMigrationTest.java b/redaction-service-v1/rules-management/src/test/java/com/knecon/fforesight/utility/rules/management/RuleFileMigrationTest.java index bea04152..2fc8aa7c 100644 --- a/redaction-service-v1/rules-management/src/test/java/com/knecon/fforesight/utility/rules/management/RuleFileMigrationTest.java +++ b/redaction-service-v1/rules-management/src/test/java/com/knecon/fforesight/utility/rules/management/RuleFileMigrationTest.java @@ -25,12 +25,9 @@ public class RuleFileMigrationTest { // Put your redaction service drools paths and dossier-templates paths both RM and DM here static final List ruleFileDirs = List.of( - //"/Users/maverickstuder/Documents/RedactManager/redaction-service/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools", - // "/Users/maverickstuder/Documents/RedactManager/dossier-templates-v2" - "/Users/maverickstuder/Documents/PM" - - ); - + "/home/kschuettler/iqser/redaction/redaction-service/redaction-service-v1/redaction-service-server-v1/src/test/resources/drools", + "/home/kschuettler/iqser/redaction/dossier-templates-v2", + "/home/kschuettler/iqser/fforesight/dossier-templates-v2"); @Test diff --git a/settings.gradle.kts b/settings.gradle.kts index 4fd3292f..9f2cfcbe 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,6 +2,8 @@ rootProject.name = "redaction-service" include(":redaction-service-api-v1") include(":redaction-service-server-v1") include(":rules-management") +include(":document") project(":redaction-service-api-v1").projectDir = file("redaction-service-v1/redaction-service-api-v1") project(":redaction-service-server-v1").projectDir = file("redaction-service-v1/redaction-service-server-v1") project(":rules-management").projectDir = file("redaction-service-v1/rules-management") +project(":document").projectDir = file("redaction-service-v1/document")