From f1deb374ba5c4f29f39f9a559b94f9acaa1125f3 Mon Sep 17 00:00:00 2001 From: Kilian Schuettler Date: Thu, 25 Apr 2024 17:22:22 +0200 Subject: [PATCH] RED-9042: fix recategorization merge with legal-basis --- .../redaction-service-api-v1/build.gradle.kts | 2 +- .../build.gradle.kts | 2 +- .../v1/server/model/MigrationEntity.java | 4 +- .../entity/ManualChangeOverwrite.java | 14 +++-- .../service/EntityLogCreatorService.java | 7 ++- .../server/service/ManualChangeFactory.java | 59 ------------------- .../ManualChangesApplicationService.java | 37 ++++++++---- .../drools/KieContainerCreationService.java | 4 +- 8 files changed, 46 insertions(+), 83 deletions(-) delete mode 100644 redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangeFactory.java diff --git a/redaction-service-v1/redaction-service-api-v1/build.gradle.kts b/redaction-service-v1/redaction-service-api-v1/build.gradle.kts index de4ed8bd..6ba38d78 100644 --- a/redaction-service-v1/redaction-service-api-v1/build.gradle.kts +++ b/redaction-service-v1/redaction-service-api-v1/build.gradle.kts @@ -7,7 +7,7 @@ description = "redaction-service-api-v1" dependencies { implementation("org.springframework:spring-web:6.0.12") - implementation("com.iqser.red.service:persistence-service-internal-api-v1:2.338.0") + implementation("com.iqser.red.service:persistence-service-internal-api-v1:2.349.56") } publishing { 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 b8380366..dca3e8f4 100644 --- a/redaction-service-v1/redaction-service-server-v1/build.gradle.kts +++ b/redaction-service-v1/redaction-service-server-v1/build.gradle.kts @@ -16,7 +16,7 @@ val layoutParserVersion = "0.89.11" val jacksonVersion = "2.15.2" val droolsVersion = "9.44.0.Final" val pdfBoxVersion = "3.0.0" -val persistenceServiceVersion = "2.349.26" +val persistenceServiceVersion = "2.349.56" val springBootStarterVersion = "3.1.5" configurations { diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/MigrationEntity.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/MigrationEntity.java index 6d7a55d1..bf31e2c2 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/MigrationEntity.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/MigrationEntity.java @@ -18,6 +18,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.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.Position; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualChangeFactory; 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.BaseAnnotation; import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization; @@ -34,7 +35,6 @@ import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntit 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.service.DictionaryService; -import com.iqser.red.service.redaction.v1.server.service.ManualChangeFactory; import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService; import lombok.AllArgsConstructor; @@ -196,7 +196,7 @@ public final class MigrationEntity { throw new UnsupportedOperationException("Unknown subclass " + migratedEntity.getClass()); } - entityLogEntry.setManualChanges(ManualChangeFactory.toManualChangeList(migratedEntity.getManualOverwrite().getManualChangeLog(), redactionLogEntry.isHint())); + entityLogEntry.setManualChanges(ManualChangeFactory.toLocalManualChangeList(migratedEntity.getManualOverwrite().getManualChangeLog(), true)); entityLogEntry.setColor(redactionLogEntry.getColor()); entityLogEntry.setChanges(redactionLogEntry.getChanges() .stream() 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/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/ManualChangeOverwrite.java index 0f9e56f9..224af679 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/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/model/document/entity/ManualChangeOverwrite.java @@ -132,10 +132,16 @@ public class ManualChangeOverwrite { // recategorization logic happens in ManualChangesApplicationService. recategorized = true; // this is only relevant for ManualEntities. Image and TextEntity is recategorized in the ManualChangesApplicationService. - type = recategorization.getType(); - section = recategorization.getSection(); - value = recategorization.getValue(); - if (recategorization.getLegalBasis() != null && !recategorization.getLegalBasis().isEmpty()) { + if (recategorization.getType() != null) { + type = recategorization.getType(); + } + if (recategorization.getSection() != null) { + section = recategorization.getSection(); + } + if (recategorization.getValue() != null) { + value = recategorization.getValue(); + } + if (recategorization.getLegalBasis() != null) { legalBasis = recategorization.getLegalBasis(); } } 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 2f03ef2c..ca0a87c2 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 @@ -19,6 +19,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.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.Position; +import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualChangeFactory; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.legalbasis.LegalBasis; import com.iqser.red.service.redaction.v1.server.RedactionServiceSettings; import com.iqser.red.service.redaction.v1.server.client.LegalBasisClient; @@ -202,7 +203,7 @@ public class EntityLogCreatorService { .section(image.getManualOverwrite().getSection() .orElse(image.getParent().toString())) .imageHasTransparency(image.isTransparent()) - .manualChanges(ManualChangeFactory.toManualChangeList(image.getManualOverwrite().getManualChangeLog(), isHint)) + .manualChanges(ManualChangeFactory.toLocalManualChangeList(image.getManualOverwrite().getManualChangeLog(), true)) .state(buildEntryState(image)) .entryType(isHint ? EntryType.IMAGE_HINT : EntryType.IMAGE) .engines(getEngines(null, image.getManualOverwrite())) @@ -245,7 +246,7 @@ public class EntityLogCreatorService { //(was .imported(precursorEntity.getEngines() != null && precursorEntity.getEngines().contains(Engine.IMPORTED))) .imported(false) .reference(Collections.emptySet()) - .manualChanges(ManualChangeFactory.toManualChangeList(precursorEntity.getManualOverwrite().getManualChangeLog(), isHint)) + .manualChanges(ManualChangeFactory.toLocalManualChangeList(precursorEntity.getManualOverwrite().getManualChangeLog(), true)) .build(); } @@ -281,7 +282,7 @@ public class EntityLogCreatorService { //(was .imported(entity.getEngines() != null && entity.getEngines().contains(Engine.IMPORTED))) .imported(false) .reference(referenceIds) - .manualChanges(ManualChangeFactory.toManualChangeList(entity.getManualOverwrite().getManualChangeLog(), isHint)) + .manualChanges(ManualChangeFactory.toLocalManualChangeList(entity.getManualOverwrite().getManualChangeLog(), true)) .state(buildEntryState(entity)) .entryType(buildEntryType(entity)) .build(); diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangeFactory.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangeFactory.java deleted file mode 100644 index 402e8422..00000000 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/ManualChangeFactory.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.iqser.red.service.redaction.v1.server.service; - -import java.time.OffsetDateTime; -import java.util.List; -import java.util.stream.Collectors; - -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.ManualChange; -import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.ManualRedactionType; -import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.BaseAnnotation; -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.ManualLegalBasisChange; -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 lombok.experimental.UtilityClass; - -@UtilityClass -public class ManualChangeFactory { - - public List toManualChangeList(List manualChanges, boolean isHint) { - - return manualChanges.stream() - .map(baseAnnotation -> toManualChange(baseAnnotation, isHint)) - .collect(Collectors.toList()); - } - - - public ManualChange toManualChange(BaseAnnotation baseAnnotation, boolean isHint) { - - ManualChange manualChange = ManualChange.from(baseAnnotation); - if (baseAnnotation instanceof ManualRecategorization recategorization) { - manualChange.withManualRedactionType(ManualRedactionType.RECATEGORIZE) - .withChange("type", recategorization.getType()) - .withChange("section", recategorization.getSection()) - .withChange("legalBasis", recategorization.getLegalBasis()) - .withChange("value", recategorization.getValue()); - } else if (baseAnnotation instanceof IdRemoval manualRemoval) { - manualChange.withManualRedactionType(manualRemoval.isRemoveFromDictionary() ? ManualRedactionType.REMOVE_FROM_DICTIONARY : ManualRedactionType.REMOVE); - } else if (baseAnnotation instanceof ManualForceRedaction manualForceRedaction) { - manualChange.withManualRedactionType(ManualRedactionType.FORCE).withChange("legalBasis", manualForceRedaction.getLegalBasis()); - } else if (baseAnnotation instanceof ManualResizeRedaction manualResizeRedact) { - manualChange.withManualRedactionType(manualResizeRedact.getUpdateDictionary() ? ManualRedactionType.RESIZE_IN_DICTIONARY : ManualRedactionType.RESIZE) - .withChange("value", manualResizeRedact.getValue()); - } else if (baseAnnotation instanceof ManualRedactionEntry manualRedactionEntry) { - manualChange.withManualRedactionType(manualRedactionEntry.isAddToDictionary() ? ManualRedactionType.ADD_TO_DICTIONARY : ManualRedactionType.ADD) - .withChange("value", manualRedactionEntry.getValue()); - } else if (baseAnnotation instanceof ManualLegalBasisChange manualLegalBasisChange) { - manualChange.withManualRedactionType(ManualRedactionType.LEGAL_BASIS_CHANGE) - .withChange("section", manualLegalBasisChange.getSection()) - .withChange("value", manualLegalBasisChange.getValue()) - .withChange("legalBasis", manualLegalBasisChange.getLegalBasis()); - } - manualChange.setProcessedDate(OffsetDateTime.now()); - return manualChange; - } - -} 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 d709f211..08816bae 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 @@ -47,6 +47,10 @@ public class ManualChangesApplicationService { entityToBeReCategorized.getMatchedRuleList().clear(); entityToBeReCategorized.getManualOverwrite().addChange(manualRecategorization); + if (manualRecategorization.getType() == null) { + return; + } + if (entityToBeReCategorized instanceof Image image) { image.setImageType(ImageType.fromString(manualRecategorization.getType())); return; @@ -74,9 +78,9 @@ public class ManualChangesApplicationService { .orElseThrow(() -> new NoSuchElementException("No redaction position with matching annotation id found!")); positionOnPageToBeResized.setRectanglePerLine(manualResizeRedaction.getPositions() - .stream() - .map(ManualChangesApplicationService::toRectangle2D) - .collect(Collectors.toList())); + .stream() + .map(ManualChangesApplicationService::toRectangle2D) + .collect(Collectors.toList())); entityToBeResized.getManualOverwrite().addChange(manualResizeRedaction); @@ -90,11 +94,17 @@ public class ManualChangesApplicationService { if (closestEntity.isPresent()) { copyValuesFromClosestEntity(entityToBeResized, manualResizeRedaction, closestEntity.get()); - possibleEntities.values().stream().flatMap(Collection::stream).forEach(TextEntity::removeFromGraph); + possibleEntities.values() + .stream() + .flatMap(Collection::stream) + .forEach(TextEntity::removeFromGraph); return; } - possibleEntities.values().stream().flatMap(Collection::stream).forEach(TextEntity::removeFromGraph); + possibleEntities.values() + .stream() + .flatMap(Collection::stream) + .forEach(TextEntity::removeFromGraph); if (node.hasParent()) { node = node.getParent(); @@ -110,14 +120,18 @@ public class ManualChangesApplicationService { Set currentIntersectingNodes = new HashSet<>(entityToBeResized.getIntersectingNodes()); Set newIntersectingNodes = new HashSet<>(closestEntity.getIntersectingNodes()); - Sets.difference(currentIntersectingNodes, newIntersectingNodes).forEach(removedNode -> removedNode.getEntities().remove(entityToBeResized)); - Sets.difference(newIntersectingNodes, currentIntersectingNodes).forEach(addedNode -> addedNode.getEntities().add(entityToBeResized)); + Sets.difference(currentIntersectingNodes, newIntersectingNodes) + .forEach(removedNode -> removedNode.getEntities().remove(entityToBeResized)); + Sets.difference(newIntersectingNodes, currentIntersectingNodes) + .forEach(addedNode -> addedNode.getEntities().add(entityToBeResized)); Set currentIntersectingPages = new HashSet<>(entityToBeResized.getPages()); Set newIntersectingPages = new HashSet<>(closestEntity.getPages()); - Sets.difference(currentIntersectingPages, newIntersectingPages).forEach(removedPage -> removedPage.getEntities().remove(entityToBeResized)); - Sets.difference(newIntersectingPages, currentIntersectingPages).forEach(addedPage -> addedPage.getEntities().add(entityToBeResized)); + Sets.difference(currentIntersectingPages, newIntersectingPages) + .forEach(removedPage -> removedPage.getEntities().remove(entityToBeResized)); + Sets.difference(newIntersectingPages, currentIntersectingPages) + .forEach(addedPage -> addedPage.getEntities().add(entityToBeResized)); entityToBeResized.setDeepestFullyContainingNode(closestEntity.getDeepestFullyContainingNode()); entityToBeResized.setIntersectingNodes(new ArrayList<>(newIntersectingNodes)); @@ -135,7 +149,10 @@ public class ManualChangesApplicationService { if (manualResizeRedaction.getPositions().isEmpty() || manualResizeRedaction.getPositions() == null) { return; } - var bBox = RectangleTransformations.rectangle2DBBox(manualResizeRedaction.getPositions().stream().map(ManualChangesApplicationService::toRectangle2D).toList()); + var bBox = RectangleTransformations.rectangle2DBBox(manualResizeRedaction.getPositions() + .stream() + .map(ManualChangesApplicationService::toRectangle2D) + .toList()); image.setPosition(bBox); image.getManualOverwrite().addChange(manualResizeRedaction); } diff --git a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/KieContainerCreationService.java b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/KieContainerCreationService.java index 1e9e3f92..c83ca4a2 100644 --- a/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/KieContainerCreationService.java +++ b/redaction-service-v1/redaction-service-server-v1/src/main/java/com/iqser/red/service/redaction/v1/server/service/drools/KieContainerCreationService.java @@ -30,8 +30,7 @@ public class KieContainerCreationService { private final RulesClient rulesClient; - @Observed(name = "KieContainerCreationService", - contextualName = "get-kie-container") + @Observed(name = "KieContainerCreationService", contextualName = "get-kie-container") public KieWrapper getLatestKieContainer(String dossierTemplateId, RuleFileType ruleFileType) { try { @@ -65,7 +64,6 @@ public class KieContainerCreationService { try { return kieServices.newKieContainer(getReleaseId(dossierTemplateId, version, ruleFileType)); } catch (Exception e) { - registerNewKieContainerVersion(dossierTemplateId, version, ruleFileType); return kieServices.newKieContainer(getReleaseId(dossierTemplateId, version, ruleFileType)); } -- 2.47.2