Merge branch 'RED-7631' into 'master'
RED-7631: add EntryType IMAGE_HINT Closes RED-7631 See merge request redactmanager/redaction-service!181
This commit is contained in:
commit
ddb94e4480
@ -16,7 +16,7 @@ val layoutParserVersion = "0.74.0"
|
|||||||
val jacksonVersion = "2.15.2"
|
val jacksonVersion = "2.15.2"
|
||||||
val droolsVersion = "9.44.0.Final"
|
val droolsVersion = "9.44.0.Final"
|
||||||
val pdfBoxVersion = "3.0.0"
|
val pdfBoxVersion = "3.0.0"
|
||||||
val persistenceServiceVersion = "2.223.0"
|
val persistenceServiceVersion = "2.229.0"
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
all {
|
all {
|
||||||
|
|||||||
@ -18,7 +18,6 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileTyp
|
|||||||
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.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.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.EntityLogChanges;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Comment;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileType;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.legalbasis.LegalBasis;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.legalbasis.LegalBasis;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLog;
|
||||||
@ -112,7 +111,9 @@ public class AnalyzeService {
|
|||||||
startTime,
|
startTime,
|
||||||
kieContainerCreationService.getLatestKieContainer(analyzeRequest.getDossierTemplateId(), RuleFileType.COMPONENT),
|
kieContainerCreationService.getLatestKieContainer(analyzeRequest.getDossierTemplateId(), RuleFileType.COMPONENT),
|
||||||
entityLogCreatorService.updateVersionsAndReturnChanges(previousEntityLog,
|
entityLogCreatorService.updateVersionsAndReturnChanges(previousEntityLog,
|
||||||
dictionaryIncrement.getDictionaryVersion(), analyzeRequest.getDossierTemplateId(), false), document,
|
dictionaryIncrement.getDictionaryVersion(),
|
||||||
|
analyzeRequest.getDossierTemplateId(),
|
||||||
|
false), document,
|
||||||
previousRedactionLog,
|
previousRedactionLog,
|
||||||
document.getNumberOfPages(),
|
document.getNumberOfPages(),
|
||||||
dictionaryIncrement.getDictionaryVersion(),
|
dictionaryIncrement.getDictionaryVersion(),
|
||||||
@ -153,7 +154,10 @@ public class AnalyzeService {
|
|||||||
dictionary.getVersion());
|
dictionary.getVersion());
|
||||||
|
|
||||||
return finalizeAnalysis(analyzeRequest,
|
return finalizeAnalysis(analyzeRequest,
|
||||||
startTime, kieContainerCreationService.getLatestKieContainer(analyzeRequest.getDossierTemplateId(), RuleFileType.COMPONENT), entityLogChanges, document,
|
startTime,
|
||||||
|
kieContainerCreationService.getLatestKieContainer(analyzeRequest.getDossierTemplateId(), RuleFileType.COMPONENT),
|
||||||
|
entityLogChanges,
|
||||||
|
document,
|
||||||
redactionLog,
|
redactionLog,
|
||||||
document.getNumberOfPages(),
|
document.getNumberOfPages(),
|
||||||
dictionaryIncrement.getDictionaryVersion(),
|
dictionaryIncrement.getDictionaryVersion(),
|
||||||
@ -222,9 +226,7 @@ public class AnalyzeService {
|
|||||||
Set<Integer> sectionsToReanalyseIds) {
|
Set<Integer> sectionsToReanalyseIds) {
|
||||||
|
|
||||||
List<RedactionLogEntry> newRedactionLogEntries = redactionLogCreatorService.createRedactionLog(document,
|
List<RedactionLogEntry> newRedactionLogEntries = redactionLogCreatorService.createRedactionLog(document,
|
||||||
analyzeRequest.getDossierTemplateId(),
|
analyzeRequest.getDossierTemplateId(), notFoundManualRedactionEntries);
|
||||||
notFoundManualRedactionEntries,
|
|
||||||
getComments(analyzeRequest));
|
|
||||||
|
|
||||||
var importedRedactionFilteredEntries = importedRedactionService.processImportedRedactions(analyzeRequest.getDossierTemplateId(),
|
var importedRedactionFilteredEntries = importedRedactionService.processImportedRedactions(analyzeRequest.getDossierTemplateId(),
|
||||||
analyzeRequest.getDossierId(),
|
analyzeRequest.getDossierId(),
|
||||||
@ -375,9 +377,7 @@ public class AnalyzeService {
|
|||||||
KieWrapper wrapper) {
|
KieWrapper wrapper) {
|
||||||
|
|
||||||
List<RedactionLogEntry> redactionLogEntries = redactionLogCreatorService.createRedactionLog(document,
|
List<RedactionLogEntry> redactionLogEntries = redactionLogCreatorService.createRedactionLog(document,
|
||||||
analyzeRequest.getDossierTemplateId(),
|
analyzeRequest.getDossierTemplateId(), notFoundManualRedactionEntries);
|
||||||
notFoundManualRedactionEntries,
|
|
||||||
getComments(analyzeRequest));
|
|
||||||
|
|
||||||
List<LegalBasis> legalBasis = legalBasisClient.getLegalBasisMapping(analyzeRequest.getDossierTemplateId());
|
List<LegalBasis> legalBasis = legalBasisClient.getLegalBasisMapping(analyzeRequest.getDossierTemplateId());
|
||||||
RedactionLog redactionLog = new RedactionLog(redactionServiceSettings.getAnalysisVersion(),
|
RedactionLog redactionLog = new RedactionLog(redactionServiceSettings.getAnalysisVersion(),
|
||||||
@ -399,18 +399,6 @@ public class AnalyzeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static Map<String, List<Comment>> getComments(AnalyzeRequest analyzeRequest) {
|
|
||||||
|
|
||||||
if (analyzeRequest.getManualRedactions() == null) {
|
|
||||||
return Collections.emptyMap();
|
|
||||||
}
|
|
||||||
if (analyzeRequest.getManualRedactions().getComments() == null) {
|
|
||||||
return Collections.emptyMap();
|
|
||||||
}
|
|
||||||
return analyzeRequest.getManualRedactions().getComments();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public List<RedactionLogLegalBasis> toRedactionLogLegalBasis(List<LegalBasis> legalBasis) {
|
public List<RedactionLogLegalBasis> toRedactionLogLegalBasis(List<LegalBasis> legalBasis) {
|
||||||
|
|
||||||
return legalBasis.stream().map(l -> new RedactionLogLegalBasis(l.getName(), l.getDescription(), l.getReason())).collect(Collectors.toList());
|
return legalBasis.stream().map(l -> new RedactionLogLegalBasis(l.getName(), l.getDescription(), l.getReason())).collect(Collectors.toList());
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
package com.iqser.red.service.redaction.v1.server.service;
|
package com.iqser.red.service.redaction.v1.server.service;
|
||||||
|
|
||||||
|
import static com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryType.IMAGE;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -205,8 +207,7 @@ public class EntityLogCreatorService {
|
|||||||
.section(image.getManualOverwrite().getSection().orElse(image.getParent().toString()))
|
.section(image.getManualOverwrite().getSection().orElse(image.getParent().toString()))
|
||||||
.imageHasTransparency(image.isTransparent())
|
.imageHasTransparency(image.isTransparent())
|
||||||
.manualChanges(manualChangeFactory.toManualChangeList(image.getManualOverwrite().getManualChangeLog(), isHint))
|
.manualChanges(manualChangeFactory.toManualChangeList(image.getManualOverwrite().getManualChangeLog(), isHint))
|
||||||
.state(buildEntryState(image))
|
.state(buildEntryState(image)).entryType(isHint ? EntryType.IMAGE_HINT : EntryType.IMAGE)
|
||||||
.entryType(buildEntryType(image))
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -312,12 +313,10 @@ public class EntityLogCreatorService {
|
|||||||
if (entity instanceof TextEntity textEntity) {
|
if (entity instanceof TextEntity textEntity) {
|
||||||
return getEntryType(textEntity.getEntityType());
|
return getEntryType(textEntity.getEntityType());
|
||||||
} else if (entity instanceof ManualEntity manualEntity) {
|
} else if (entity instanceof ManualEntity manualEntity) {
|
||||||
if (((ManualEntity) entity).isRectangle()) {
|
if (manualEntity.isRectangle()) {
|
||||||
return EntryType.AREA;
|
return EntryType.AREA;
|
||||||
}
|
}
|
||||||
return getEntryType(manualEntity.getEntityType());
|
return getEntryType(manualEntity.getEntityType());
|
||||||
} else if (entity instanceof Image) {
|
|
||||||
return EntryType.IMAGE;
|
|
||||||
}
|
}
|
||||||
throw new UnsupportedOperationException(String.format("Entity subclass %s is not implemented!", entity.getClass()));
|
throw new UnsupportedOperationException(String.format("Entity subclass %s is not implemented!", entity.getClass()));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import java.util.Collections;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -15,13 +14,11 @@ import org.springframework.beans.BeanUtils;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Comment;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Engine;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.ManualChange;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.ManualChange;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.ManualRedactionType;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.ManualRedactionType;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Point;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Point;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Rectangle;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.Rectangle;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogComment;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.redactionlog.RedactionLogEntry;
|
||||||
import com.iqser.red.service.redaction.v1.server.model.ManualEntity;
|
import com.iqser.red.service.redaction.v1.server.model.ManualEntity;
|
||||||
import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType;
|
import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType;
|
||||||
@ -47,17 +44,14 @@ public class RedactionLogCreatorService {
|
|||||||
|
|
||||||
|
|
||||||
public List<RedactionLogEntry> createRedactionLog(Document document,
|
public List<RedactionLogEntry> createRedactionLog(Document document,
|
||||||
String dossierTemplateId,
|
String dossierTemplateId, List<ManualEntity> notFoundManualRedactionEntries) {
|
||||||
List<ManualEntity> notFoundManualRedactionEntries,
|
|
||||||
Map<String, List<Comment>> comments) {
|
|
||||||
|
|
||||||
List<RedactionLogEntry> entries = new ArrayList<>();
|
List<RedactionLogEntry> entries = new ArrayList<>();
|
||||||
Set<String> processIds = new HashSet<>();
|
Set<String> processIds = new HashSet<>();
|
||||||
document.getEntities().stream().filter(RedactionLogCreatorService::notFalsePositiveOrFalseRecommendation)
|
document.getEntities().stream().filter(RedactionLogCreatorService::notFalsePositiveOrFalseRecommendation)
|
||||||
.filter(IEntity::active)
|
.filter(IEntity::active).forEach(entityNode -> entries.addAll(toRedactionLogEntries(entityNode, dossierTemplateId, processIds)));
|
||||||
.forEach(entityNode -> entries.addAll(toRedactionLogEntries(entityNode, dossierTemplateId, comments, processIds)));
|
document.streamAllImages().filter(image -> !image.removed()).forEach(imageNode -> entries.add(createRedactionLogEntry(imageNode, dossierTemplateId)));
|
||||||
document.streamAllImages().filter(image -> !image.removed()).forEach(imageNode -> entries.add(createRedactionLogEntry(imageNode, dossierTemplateId, comments)));
|
notFoundManualRedactionEntries.forEach(entityIdentifier -> entries.add(createRedactionLogEntry(entityIdentifier, dossierTemplateId)));
|
||||||
notFoundManualRedactionEntries.forEach(entityIdentifier -> entries.add(createRedactionLogEntry(entityIdentifier, dossierTemplateId, comments)));
|
|
||||||
return entries;
|
return entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +62,7 @@ public class RedactionLogCreatorService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private List<RedactionLogEntry> toRedactionLogEntries(TextEntity textEntity, String dossierTemplateId, Map<String, List<Comment>> comments, Set<String> processedIds) {
|
private List<RedactionLogEntry> toRedactionLogEntries(TextEntity textEntity, String dossierTemplateId, Set<String> processedIds) {
|
||||||
|
|
||||||
List<RedactionLogEntry> redactionLogEntities = new ArrayList<>();
|
List<RedactionLogEntry> redactionLogEntities = new ArrayList<>();
|
||||||
|
|
||||||
@ -82,7 +76,6 @@ public class RedactionLogCreatorService {
|
|||||||
|
|
||||||
RedactionLogEntry redactionLogEntry = createRedactionLogEntry(textEntity, dossierTemplateId);
|
RedactionLogEntry redactionLogEntry = createRedactionLogEntry(textEntity, dossierTemplateId);
|
||||||
redactionLogEntry.setId(positionOnPage.getId());
|
redactionLogEntry.setId(positionOnPage.getId());
|
||||||
redactionLogEntry.setComments(buildRedactionLogComments(comments, positionOnPage.getId()));
|
|
||||||
|
|
||||||
List<Rectangle> rectanglesPerLine = positionOnPage.getRectanglePerLine()
|
List<Rectangle> rectanglesPerLine = positionOnPage.getRectanglePerLine()
|
||||||
.stream()
|
.stream()
|
||||||
@ -97,37 +90,6 @@ public class RedactionLogCreatorService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private List<RedactionLogComment> buildRedactionLogComments(Map<String, List<Comment>> commentsPerId, String id) {
|
|
||||||
|
|
||||||
if (!commentsPerId.containsKey(id)) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
List<Comment> comments = commentsPerId.get(id);
|
|
||||||
if (comments == null || comments.isEmpty()) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
return toRedactionLogComments(comments);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private List<RedactionLogComment> toRedactionLogComments(List<Comment> comments) {
|
|
||||||
|
|
||||||
return comments.stream().map(this::toRedactionLogComment).toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private RedactionLogComment toRedactionLogComment(Comment comment) {
|
|
||||||
|
|
||||||
return new RedactionLogComment(comment.getId(),
|
|
||||||
comment.getUser(),
|
|
||||||
comment.getText(),
|
|
||||||
comment.getAnnotationId(),
|
|
||||||
comment.getFileId(),
|
|
||||||
comment.getDate(),
|
|
||||||
comment.getSoftDeletedTime());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private RedactionLogEntry createRedactionLogEntry(TextEntity entity, String dossierTemplateId) {
|
private RedactionLogEntry createRedactionLogEntry(TextEntity entity, String dossierTemplateId) {
|
||||||
|
|
||||||
Set<String> referenceIds = new HashSet<>();
|
Set<String> referenceIds = new HashSet<>();
|
||||||
@ -220,7 +182,7 @@ public class RedactionLogCreatorService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public RedactionLogEntry createRedactionLogEntry(Image image, String dossierTemplateId, Map<String, List<Comment>> comments) {
|
public RedactionLogEntry createRedactionLogEntry(Image image, String dossierTemplateId) {
|
||||||
|
|
||||||
String imageType = image.getImageType().equals(ImageType.OTHER) ? "image" : image.getImageType().toString().toLowerCase(Locale.ENGLISH);
|
String imageType = image.getImageType().equals(ImageType.OTHER) ? "image" : image.getImageType().toString().toLowerCase(Locale.ENGLISH);
|
||||||
boolean isHint = dictionaryService.isHint(imageType, dossierTemplateId);
|
boolean isHint = dictionaryService.isHint(imageType, dossierTemplateId);
|
||||||
@ -240,7 +202,6 @@ public class RedactionLogCreatorService {
|
|||||||
.section(image.getManualOverwrite().getSection().orElse(image.getParent().toString()))
|
.section(image.getManualOverwrite().getSection().orElse(image.getParent().toString()))
|
||||||
.imageHasTransparency(image.isTransparent())
|
.imageHasTransparency(image.isTransparent())
|
||||||
.manualChanges(mapManualChanges(image.getManualOverwrite(), isHint))
|
.manualChanges(mapManualChanges(image.getManualOverwrite(), isHint))
|
||||||
.comments(buildRedactionLogComments(comments, image.getId()))
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -252,7 +213,7 @@ public class RedactionLogCreatorService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public RedactionLogEntry createRedactionLogEntry(ManualEntity manualEntity, String dossierTemplateId, Map<String, List<Comment>> comments) {
|
public RedactionLogEntry createRedactionLogEntry(ManualEntity manualEntity, String dossierTemplateId) {
|
||||||
|
|
||||||
String type = manualEntity.getManualOverwrite().getType().orElse(manualEntity.getType());
|
String type = manualEntity.getManualOverwrite().getType().orElse(manualEntity.getType());
|
||||||
boolean isHint = isHint(manualEntity.getEntityType());
|
boolean isHint = isHint(manualEntity.getEntityType());
|
||||||
@ -282,7 +243,6 @@ public class RedactionLogCreatorService {
|
|||||||
.engines(Collections.emptySet())
|
.engines(Collections.emptySet())
|
||||||
.reference(Collections.emptySet())
|
.reference(Collections.emptySet())
|
||||||
.manualChanges(mapManualChanges(manualEntity.getManualOverwrite(), isHint))
|
.manualChanges(mapManualChanges(manualEntity.getManualOverwrite(), isHint))
|
||||||
.comments(buildRedactionLogComments(comments, manualEntity.getId()))
|
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -50,7 +50,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.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.EntryType;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Comment;
|
|
||||||
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.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.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.IdRemoval;
|
||||||
@ -214,17 +213,16 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
AnalyzeRequest request = uploadFileToStorage("files/new/crafted document.pdf");
|
AnalyzeRequest request = uploadFileToStorage("files/new/crafted document.pdf");
|
||||||
ManualResizeRedaction manualResizeRedaction = ManualResizeRedaction.builder()
|
|
||||||
|
ManualRedactions manualRedactions = ManualRedactions.builder()
|
||||||
|
.resizeRedactions(Set.of(ManualResizeRedaction.builder()
|
||||||
.annotationId("c6be5277f5ee60dc3d83527798b7fe02")
|
.annotationId("c6be5277f5ee60dc3d83527798b7fe02")
|
||||||
.value("Dr. Alan")
|
.value("Dr. Alan")
|
||||||
.positions(List.of(new Rectangle(236.8f, 182.90005f, 40.584f, 12.642f, 7)))
|
.positions(List.of(new Rectangle(236.8f, 182.90005f, 40.584f, 12.642f, 7)))
|
||||||
.status(AnnotationStatus.APPROVED)
|
.status(AnnotationStatus.APPROVED)
|
||||||
.requestDate(OffsetDateTime.now())
|
.requestDate(OffsetDateTime.now())
|
||||||
.build();
|
.updateDictionary(false)
|
||||||
manualResizeRedaction.setUpdateDictionary(false);
|
.build()))
|
||||||
|
|
||||||
ManualRedactions manualRedactions = ManualRedactions.builder().resizeRedactions(Set.of())
|
|
||||||
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
request.setManualRedactions(manualRedactions);
|
request.setManualRedactions(manualRedactions);
|
||||||
@ -573,7 +571,9 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
|
|||||||
fileOutputStream.write(objectMapper.writeValueAsBytes(redactionStorageService.getDocumentData(TEST_DOSSIER_ID, TEST_FILE_ID)));
|
fileOutputStream.write(objectMapper.writeValueAsBytes(redactionStorageService.getDocumentData(TEST_DOSSIER_ID, TEST_FILE_ID)));
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> valuesInDocument = entityLog.getEntityLogEntry().stream().filter(e -> !e.getEntryType().equals(EntryType.IMAGE))
|
List<String> valuesInDocument = entityLog.getEntityLogEntry()
|
||||||
|
.stream()
|
||||||
|
.filter(e -> !e.getEntryType().equals(EntryType.IMAGE))
|
||||||
.map(redactionLogEntry -> new TextRange(redactionLogEntry.getStartOffset(), redactionLogEntry.getEndOffset()))
|
.map(redactionLogEntry -> new TextRange(redactionLogEntry.getStartOffset(), redactionLogEntry.getEndOffset()))
|
||||||
.map(boundary -> documentGraph.getTextBlock().subSequence(boundary).toString())
|
.map(boundary -> documentGraph.getTextBlock().subSequence(boundary).toString())
|
||||||
.toList();
|
.toList();
|
||||||
@ -900,9 +900,9 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
|
|||||||
.value("Bera P")
|
.value("Bera P")
|
||||||
.positions(List.of(new Rectangle(382.12485f, 235.94246f, 8.768621f, -21.632504f, 1)))
|
.positions(List.of(new Rectangle(382.12485f, 235.94246f, 8.768621f, -21.632504f, 1)))
|
||||||
.textBefore("")
|
.textBefore("")
|
||||||
|
.updateDictionary(false)
|
||||||
.textAfter("")
|
.textAfter("")
|
||||||
.build();
|
.build();
|
||||||
manualResizeRedaction.setUpdateDictionary(false);
|
|
||||||
manualRedactions.getResizeRedactions().add(manualResizeRedaction);
|
manualRedactions.getResizeRedactions().add(manualResizeRedaction);
|
||||||
|
|
||||||
request.setManualRedactions(manualRedactions);
|
request.setManualRedactions(manualRedactions);
|
||||||
@ -980,7 +980,6 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
|
|||||||
|
|
||||||
String manualAddId = UUID.randomUUID().toString();
|
String manualAddId = UUID.randomUUID().toString();
|
||||||
|
|
||||||
Comment comment = Comment.builder().date(OffsetDateTime.now()).user("TEST_USER").text("This is a comment test").build();
|
|
||||||
manualRedactions.setIdsToRemove(Set.of(IdRemoval.builder()
|
manualRedactions.setIdsToRemove(Set.of(IdRemoval.builder()
|
||||||
.annotationId("5b940b2cb401ed9f5be6fc24f6e77bcf")
|
.annotationId("5b940b2cb401ed9f5be6fc24f6e77bcf")
|
||||||
.fileId("fileId")
|
.fileId("fileId")
|
||||||
@ -997,10 +996,6 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
|
|||||||
.processedDate(OffsetDateTime.now())
|
.processedDate(OffsetDateTime.now())
|
||||||
.build()));
|
.build()));
|
||||||
|
|
||||||
manualRedactions.getComments().put("e5be0f1d941bbb92a068e198648d06c4", List.of(comment));
|
|
||||||
manualRedactions.getComments().put("0836727c3508a0b2ea271da69c04cc2f", List.of(comment));
|
|
||||||
manualRedactions.getComments().put(manualAddId, List.of(comment));
|
|
||||||
|
|
||||||
ManualRedactionEntry manualRedactionEntry = new ManualRedactionEntry();
|
ManualRedactionEntry manualRedactionEntry = new ManualRedactionEntry();
|
||||||
manualRedactionEntry.setAnnotationId(manualAddId);
|
manualRedactionEntry.setAnnotationId(manualAddId);
|
||||||
manualRedactionEntry.setFileId("fileId");
|
manualRedactionEntry.setFileId("fileId");
|
||||||
@ -1047,6 +1042,7 @@ public class RedactionIntegrationTest extends AbstractRedactionIntegrationTest {
|
|||||||
Rectangle.builder().topLeftX(307.89517f).topLeftY(327.567f).width(7.648041f).height(61.670967f).page(1).build(),
|
Rectangle.builder().topLeftX(307.89517f).topLeftY(327.567f).width(7.648041f).height(61.670967f).page(1).build(),
|
||||||
Rectangle.builder().topLeftX(316.99985f).topLeftY(327.567f).width(7.648041f).height(38.104286f).page(1).build()))
|
Rectangle.builder().topLeftX(316.99985f).topLeftY(327.567f).width(7.648041f).height(38.104286f).page(1).build()))
|
||||||
.status(AnnotationStatus.APPROVED)
|
.status(AnnotationStatus.APPROVED)
|
||||||
|
.updateDictionary(false)
|
||||||
.build()));
|
.build()));
|
||||||
|
|
||||||
analyzeService.reanalyze(request);
|
analyzeService.reanalyze(request);
|
||||||
|
|||||||
@ -94,7 +94,7 @@ public class MigrationPocTest extends BuildDocumentIntegrationTest {
|
|||||||
Document document = DocumentGraphMapper.toDocumentGraph(redactionStorageService.getDocumentData(request.getDossierId(), request.getFileId()));
|
Document document = DocumentGraphMapper.toDocumentGraph(redactionStorageService.getDocumentData(request.getDossierId(), request.getFileId()));
|
||||||
List<ManualEntity> notFoundManualRedactionEntries = redactionLogAdapter.toTextEntity(originalRedactionLog, document);
|
List<ManualEntity> notFoundManualRedactionEntries = redactionLogAdapter.toTextEntity(originalRedactionLog, document);
|
||||||
|
|
||||||
var migratedRedactionLogEntries = redactionLogCreatorService.createRedactionLog(document, TEST_DOSSIER_TEMPLATE_ID, notFoundManualRedactionEntries, Collections.emptyMap());
|
var migratedRedactionLogEntries = redactionLogCreatorService.createRedactionLog(document, TEST_DOSSIER_TEMPLATE_ID, notFoundManualRedactionEntries);
|
||||||
|
|
||||||
Map<String, RedactionLogEntry> migratedIds = migratedRedactionLogEntries.stream().collect(toMap(RedactionLogEntry::getId, Functions.identity()));
|
Map<String, RedactionLogEntry> migratedIds = migratedRedactionLogEntries.stream().collect(toMap(RedactionLogEntry::getId, Functions.identity()));
|
||||||
Map<String, RedactionLogEntry> newIds = newRedactionLog.getRedactionLogEntry().stream().collect(toMap(RedactionLogEntry::getId, Functions.identity()));
|
Map<String, RedactionLogEntry> newIds = newRedactionLog.getRedactionLogEntry().stream().collect(toMap(RedactionLogEntry::getId, Functions.identity()));
|
||||||
|
|||||||
@ -40,7 +40,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.EntryState;
|
||||||
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.analysislog.entitylog.ManualRedactionType;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.Comment;
|
|
||||||
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.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.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.IdRemoval;
|
||||||
@ -160,7 +159,9 @@ public class ManualChangesEnd2EndTest extends AbstractRedactionIntegrationTest {
|
|||||||
TextEntity expandedEntity = entityCreationService.byString(expandedEntityKeyword, "PII", EntityType.ENTITY, document).findFirst().get();
|
TextEntity expandedEntity = entityCreationService.byString(expandedEntityKeyword, "PII", EntityType.ENTITY, document).findFirst().get();
|
||||||
|
|
||||||
String idToResize = redactionLog.getEntityLogEntry()
|
String idToResize = redactionLog.getEntityLogEntry()
|
||||||
.stream().filter(entry -> entry.getValue().equals(testEntityValue1)).max(Comparator.comparingInt(EntityLogEntry::getStartOffset))
|
.stream()
|
||||||
|
.filter(entry -> entry.getValue().equals(testEntityValue1))
|
||||||
|
.max(Comparator.comparingInt(EntityLogEntry::getStartOffset))
|
||||||
.get()
|
.get()
|
||||||
.getId();
|
.getId();
|
||||||
List<Rectangle> resizedPositions = expandedEntity.getPositionsOnPagePerPage()
|
List<Rectangle> resizedPositions = expandedEntity.getPositionsOnPagePerPage()
|
||||||
@ -175,6 +176,7 @@ public class ManualChangesEnd2EndTest extends AbstractRedactionIntegrationTest {
|
|||||||
.positions(resizedPositions)
|
.positions(resizedPositions)
|
||||||
.requestDate(OffsetDateTime.now())
|
.requestDate(OffsetDateTime.now())
|
||||||
.status(AnnotationStatus.APPROVED)
|
.status(AnnotationStatus.APPROVED)
|
||||||
|
.updateDictionary(false)
|
||||||
.build();
|
.build();
|
||||||
manualResizeRedaction.setUpdateDictionary(false);
|
manualResizeRedaction.setUpdateDictionary(false);
|
||||||
ManualRedactions manualRedactions = new ManualRedactions();
|
ManualRedactions manualRedactions = new ManualRedactions();
|
||||||
@ -218,7 +220,6 @@ public class ManualChangesEnd2EndTest extends AbstractRedactionIntegrationTest {
|
|||||||
|
|
||||||
String manualAddId = UUID.randomUUID().toString();
|
String manualAddId = UUID.randomUUID().toString();
|
||||||
|
|
||||||
Comment comment = Comment.builder().date(OffsetDateTime.now()).user("TEST_USER").text("This is a comment test").build();
|
|
||||||
manualRedactions.setIdsToRemove(Set.of(IdRemoval.builder().annotationId("5b940b2cb401ed9f5be6fc24f6e77bcf").fileId("fileId").status(AnnotationStatus.DECLINED).build()));
|
manualRedactions.setIdsToRemove(Set.of(IdRemoval.builder().annotationId("5b940b2cb401ed9f5be6fc24f6e77bcf").fileId("fileId").status(AnnotationStatus.DECLINED).build()));
|
||||||
manualRedactions.setForceRedactions(Set.of(ManualForceRedaction.builder()
|
manualRedactions.setForceRedactions(Set.of(ManualForceRedaction.builder()
|
||||||
.annotationId("675eba69b0c2917de55462c817adaa05")
|
.annotationId("675eba69b0c2917de55462c817adaa05")
|
||||||
@ -227,10 +228,6 @@ public class ManualChangesEnd2EndTest extends AbstractRedactionIntegrationTest {
|
|||||||
.status(AnnotationStatus.APPROVED)
|
.status(AnnotationStatus.APPROVED)
|
||||||
.build()));
|
.build()));
|
||||||
|
|
||||||
manualRedactions.getComments().put("e5be0f1d941bbb92a068e198648d06c4", List.of(comment));
|
|
||||||
manualRedactions.getComments().put("0836727c3508a0b2ea271da69c04cc2f", List.of(comment));
|
|
||||||
manualRedactions.getComments().put(manualAddId, List.of(comment));
|
|
||||||
|
|
||||||
ManualRedactionEntry manualRedactionEntry = new ManualRedactionEntry();
|
ManualRedactionEntry manualRedactionEntry = new ManualRedactionEntry();
|
||||||
manualRedactionEntry.setAnnotationId(manualAddId);
|
manualRedactionEntry.setAnnotationId(manualAddId);
|
||||||
manualRedactionEntry.setFileId("fileId");
|
manualRedactionEntry.setFileId("fileId");
|
||||||
@ -362,9 +359,10 @@ public class ManualChangesEnd2EndTest extends AbstractRedactionIntegrationTest {
|
|||||||
.annotationId(annotationId)
|
.annotationId(annotationId)
|
||||||
.requestDate(OffsetDateTime.now())
|
.requestDate(OffsetDateTime.now())
|
||||||
.value("Expand to Hint")
|
.value("Expand to Hint")
|
||||||
.positions(List.of(new Rectangle(new Point(56.8f, 496.27f), 61.25f, 12.83f, 2))).status(AnnotationStatus.APPROVED)
|
.positions(List.of(new Rectangle(new Point(56.8f, 496.27f), 61.25f, 12.83f, 2)))
|
||||||
|
.status(AnnotationStatus.APPROVED)
|
||||||
|
.updateDictionary(false)
|
||||||
.build();
|
.build();
|
||||||
manualResizeRedaction.setUpdateDictionary(false);
|
|
||||||
manualRedactions.setResizeRedactions(Set.of(manualResizeRedaction));
|
manualRedactions.setResizeRedactions(Set.of(manualResizeRedaction));
|
||||||
request.setManualRedactions(manualRedactions);
|
request.setManualRedactions(manualRedactions);
|
||||||
|
|
||||||
|
|||||||
@ -5,10 +5,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
|
|||||||
import static org.wildfly.common.Assert.assertFalse;
|
import static org.wildfly.common.Assert.assertFalse;
|
||||||
|
|
||||||
import java.awt.geom.Rectangle2D;
|
import java.awt.geom.Rectangle2D;
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -28,30 +26,20 @@ import org.springframework.context.annotation.Bean;
|
|||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.context.annotation.Import;
|
import org.springframework.context.annotation.Import;
|
||||||
|
|
||||||
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.annotations.AnnotationStatus;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
|
||||||
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.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.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.ManualForceRedaction;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualRecategorization;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.ManualResizeRedaction;
|
||||||
import com.iqser.red.service.redaction.v1.server.annotate.AnnotateRequest;
|
|
||||||
import com.iqser.red.service.redaction.v1.server.annotate.AnnotateResponse;
|
|
||||||
import com.iqser.red.service.redaction.v1.server.document.graph.BuildDocumentIntegrationTest;
|
import com.iqser.red.service.redaction.v1.server.document.graph.BuildDocumentIntegrationTest;
|
||||||
import com.iqser.red.service.redaction.v1.server.model.document.entity.EntityType;
|
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.PositionOnPage;
|
||||||
|
import com.iqser.red.service.redaction.v1.server.model.document.entity.TextEntity;
|
||||||
import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document;
|
import com.iqser.red.service.redaction.v1.server.model.document.nodes.Document;
|
||||||
import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph;
|
import com.iqser.red.service.redaction.v1.server.model.document.nodes.Paragraph;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.utils.OsUtils;
|
import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService;
|
||||||
import com.iqser.red.service.redaction.v1.server.service.document.EntityCreationService;
|
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.EntityEnrichmentService;
|
||||||
import com.iqser.red.service.redaction.v1.server.service.ManualChangesApplicationService;
|
|
||||||
import com.iqser.red.service.redaction.v1.server.utils.exception.NotFoundException;
|
|
||||||
import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingType;
|
|
||||||
|
|
||||||
import lombok.SneakyThrows;
|
|
||||||
|
|
||||||
@Import(ManualChangesIntegrationTest.TestConfiguration.class)
|
@Import(ManualChangesIntegrationTest.TestConfiguration.class)
|
||||||
public class ManualChangesIntegrationTest extends BuildDocumentIntegrationTest {
|
public class ManualChangesIntegrationTest extends BuildDocumentIntegrationTest {
|
||||||
@ -117,9 +105,9 @@ public class ManualChangesIntegrationTest extends BuildDocumentIntegrationTest {
|
|||||||
.positions(toAnnotationRectangles(biggerEntity.getPositionsOnPagePerPage().get(0)))
|
.positions(toAnnotationRectangles(biggerEntity.getPositionsOnPagePerPage().get(0)))
|
||||||
.status(AnnotationStatus.APPROVED)
|
.status(AnnotationStatus.APPROVED)
|
||||||
.requestDate(OffsetDateTime.now())
|
.requestDate(OffsetDateTime.now())
|
||||||
|
.updateDictionary(false)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
||||||
kieSession.insert(document);
|
kieSession.insert(document);
|
||||||
document.streamAllSubNodes().forEach(kieSession::insert);
|
document.streamAllSubNodes().forEach(kieSession::insert);
|
||||||
kieSession.insert(manualResizeRedaction);
|
kieSession.insert(manualResizeRedaction);
|
||||||
@ -153,7 +141,6 @@ public class ManualChangesIntegrationTest extends BuildDocumentIntegrationTest {
|
|||||||
.requestDate(OffsetDateTime.now())
|
.requestDate(OffsetDateTime.now())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
||||||
kieSession.insert(manualForceRedaction);
|
kieSession.insert(manualForceRedaction);
|
||||||
kieSession.insert(document);
|
kieSession.insert(document);
|
||||||
document.streamAllSubNodes().forEach(kieSession::insert);
|
document.streamAllSubNodes().forEach(kieSession::insert);
|
||||||
@ -183,7 +170,6 @@ public class ManualChangesIntegrationTest extends BuildDocumentIntegrationTest {
|
|||||||
String initialId = entity.getPositionsOnPagePerPage().get(0).getId();
|
String initialId = entity.getPositionsOnPagePerPage().get(0).getId();
|
||||||
IdRemoval idRemoval = IdRemoval.builder().annotationId(initialId).status(AnnotationStatus.APPROVED).requestDate(OffsetDateTime.now()).build();
|
IdRemoval idRemoval = IdRemoval.builder().annotationId(initialId).status(AnnotationStatus.APPROVED).requestDate(OffsetDateTime.now()).build();
|
||||||
|
|
||||||
|
|
||||||
kieSession.insert(document);
|
kieSession.insert(document);
|
||||||
document.streamAllSubNodes().forEach(kieSession::insert);
|
document.streamAllSubNodes().forEach(kieSession::insert);
|
||||||
kieSession.insert(idRemoval);
|
kieSession.insert(idRemoval);
|
||||||
@ -213,7 +199,6 @@ public class ManualChangesIntegrationTest extends BuildDocumentIntegrationTest {
|
|||||||
.requestDate(OffsetDateTime.now())
|
.requestDate(OffsetDateTime.now())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
|
||||||
kieSession.insert(document);
|
kieSession.insert(document);
|
||||||
document.streamAllSubNodes().forEach(kieSession::insert);
|
document.streamAllSubNodes().forEach(kieSession::insert);
|
||||||
kieSession.insert(idRemoval);
|
kieSession.insert(idRemoval);
|
||||||
@ -242,7 +227,6 @@ public class ManualChangesIntegrationTest extends BuildDocumentIntegrationTest {
|
|||||||
String initialId = entity.getPositionsOnPagePerPage().get(0).getId();
|
String initialId = entity.getPositionsOnPagePerPage().get(0).getId();
|
||||||
IdRemoval idRemoval = IdRemoval.builder().annotationId(initialId).status(AnnotationStatus.REQUESTED).build();
|
IdRemoval idRemoval = IdRemoval.builder().annotationId(initialId).status(AnnotationStatus.REQUESTED).build();
|
||||||
|
|
||||||
|
|
||||||
kieSession.insert(idRemoval);
|
kieSession.insert(idRemoval);
|
||||||
kieSession.insert(document);
|
kieSession.insert(document);
|
||||||
document.streamAllSubNodes().forEach(kieSession::insert);
|
document.streamAllSubNodes().forEach(kieSession::insert);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user