Merge branch 'RED-9116' into 'master'
RED-9116 - Get the latest EntityLog entries for component rules execution Closes RED-9116 See merge request redactmanager/redaction-service!392
This commit is contained in:
commit
730f6c601c
@ -105,13 +105,9 @@ public class AnalyzeService {
|
|||||||
Set<String> relevantManuallyModifiedAnnotationIds = getRelevantManuallyModifiedAnnotationIds(analyzeRequest.getManualRedactions());
|
Set<String> relevantManuallyModifiedAnnotationIds = getRelevantManuallyModifiedAnnotationIds(analyzeRequest.getManualRedactions());
|
||||||
|
|
||||||
Set<Integer> sectionsToReanalyseIds = redactionStorageService.findIdsOfSectionsToReanalyse(analyzeRequest.getDossierId(),
|
Set<Integer> sectionsToReanalyseIds = redactionStorageService.findIdsOfSectionsToReanalyse(analyzeRequest.getDossierId(),
|
||||||
analyzeRequest.getFileId(),
|
analyzeRequest.getFileId(),
|
||||||
relevantManuallyModifiedAnnotationIds);
|
relevantManuallyModifiedAnnotationIds);
|
||||||
sectionsToReanalyseIds.addAll(getSectionsToReanalyseIds(analyzeRequest,
|
sectionsToReanalyseIds.addAll(getSectionsToReanalyseIds(analyzeRequest, document, dictionaryIncrement, importedRedactions, relevantManuallyModifiedAnnotationIds));
|
||||||
document,
|
|
||||||
dictionaryIncrement,
|
|
||||||
importedRedactions,
|
|
||||||
relevantManuallyModifiedAnnotationIds));
|
|
||||||
|
|
||||||
List<SemanticNode> sectionsToReAnalyse = getSectionsToReAnalyse(document, sectionsToReanalyseIds);
|
List<SemanticNode> sectionsToReAnalyse = getSectionsToReAnalyse(document, sectionsToReanalyseIds);
|
||||||
log.info("{} Sections to reanalyze found for file {} in dossier {}", sectionsToReanalyseIds.size(), analyzeRequest.getFileId(), analyzeRequest.getDossierId());
|
log.info("{} Sections to reanalyze found for file {} in dossier {}", sectionsToReanalyseIds.size(), analyzeRequest.getFileId(), analyzeRequest.getDossierId());
|
||||||
@ -130,7 +126,6 @@ public class AnalyzeService {
|
|||||||
entityLogChanges,
|
entityLogChanges,
|
||||||
document,
|
document,
|
||||||
document.getNumberOfPages(),
|
document.getNumberOfPages(),
|
||||||
dictionaryIncrement.getDictionaryVersion(),
|
|
||||||
true,
|
true,
|
||||||
Collections.emptySet());
|
Collections.emptySet());
|
||||||
}
|
}
|
||||||
@ -180,7 +175,6 @@ public class AnalyzeService {
|
|||||||
entityLogChanges,
|
entityLogChanges,
|
||||||
document,
|
document,
|
||||||
document.getNumberOfPages(),
|
document.getNumberOfPages(),
|
||||||
dictionaryIncrement.getDictionaryVersion(),
|
|
||||||
true,
|
true,
|
||||||
new HashSet<>(allFileAttributes));
|
new HashSet<>(allFileAttributes));
|
||||||
}
|
}
|
||||||
@ -245,7 +239,6 @@ public class AnalyzeService {
|
|||||||
entityLogChanges,
|
entityLogChanges,
|
||||||
document,
|
document,
|
||||||
document.getNumberOfPages(),
|
document.getNumberOfPages(),
|
||||||
dictionary.getVersion(),
|
|
||||||
false,
|
false,
|
||||||
new HashSet<>(allFileAttributes));
|
new HashSet<>(allFileAttributes));
|
||||||
}
|
}
|
||||||
@ -257,7 +250,6 @@ public class AnalyzeService {
|
|||||||
EntityLogChanges entityLogChanges,
|
EntityLogChanges entityLogChanges,
|
||||||
Document document,
|
Document document,
|
||||||
int numberOfPages,
|
int numberOfPages,
|
||||||
DictionaryVersion dictionaryVersion,
|
|
||||||
boolean isReanalysis,
|
boolean isReanalysis,
|
||||||
Set<FileAttribute> addedFileAttributes) {
|
Set<FileAttribute> addedFileAttributes) {
|
||||||
|
|
||||||
@ -281,7 +273,7 @@ public class AnalyzeService {
|
|||||||
|
|
||||||
log.info("Created entity log for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId());
|
log.info("Created entity log for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId());
|
||||||
if (entityLogChanges.hasChanges() || !isReanalysis) {
|
if (entityLogChanges.hasChanges() || !isReanalysis) {
|
||||||
computeComponentsWhenRulesArePresent(analyzeRequest, kieWrapperComponentRules, document, addedFileAttributes, entityLogChanges, dictionaryVersion);
|
computeComponentsWhenRulesArePresent(analyzeRequest, kieWrapperComponentRules, document, addedFileAttributes, entityLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
log.info("Stored analysis logs for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId());
|
log.info("Stored analysis logs for file {} in dossier {}", analyzeRequest.getFileId(), analyzeRequest.getDossierId());
|
||||||
@ -314,15 +306,17 @@ public class AnalyzeService {
|
|||||||
KieWrapper kieWrapperComponentRules,
|
KieWrapper kieWrapperComponentRules,
|
||||||
Document document,
|
Document document,
|
||||||
Set<FileAttribute> addedFileAttributes,
|
Set<FileAttribute> addedFileAttributes,
|
||||||
EntityLogChanges entityLogChanges,
|
EntityLog entityLog) {
|
||||||
DictionaryVersion dictionaryVersion) {
|
|
||||||
|
|
||||||
if (!kieWrapperComponentRules.isPresent()) {
|
if (!kieWrapperComponentRules.isPresent()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// We need the latest EntityLog entries for components rules execution
|
||||||
|
entityLog.getEntityLogEntry().addAll(redactionStorageService.getEntityLog(analyzeRequest.getDossierId(), analyzeRequest.getFileId()).getEntityLogEntry());
|
||||||
|
|
||||||
List<Component> components = componentDroolsExecutionService.executeRules(kieWrapperComponentRules.container(),
|
List<Component> components = componentDroolsExecutionService.executeRules(kieWrapperComponentRules.container(),
|
||||||
entityLogChanges.getEntityLog(),
|
entityLog,
|
||||||
document,
|
document,
|
||||||
addedFileAttributes.stream()
|
addedFileAttributes.stream()
|
||||||
.toList());
|
.toList());
|
||||||
@ -350,11 +344,7 @@ public class AnalyzeService {
|
|||||||
ImportedRedactions importedRedactions,
|
ImportedRedactions importedRedactions,
|
||||||
Set<String> relevantManuallyModifiedAnnotationIds) {
|
Set<String> relevantManuallyModifiedAnnotationIds) {
|
||||||
|
|
||||||
return sectionFinderService.findSectionsToReanalyse(dictionaryIncrement,
|
return sectionFinderService.findSectionsToReanalyse(dictionaryIncrement, document, analyzeRequest, importedRedactions, relevantManuallyModifiedAnnotationIds);
|
||||||
document,
|
|
||||||
analyzeRequest,
|
|
||||||
importedRedactions,
|
|
||||||
relevantManuallyModifiedAnnotationIds);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,12 +1,16 @@
|
|||||||
package com.iqser.red.service.redaction.v1.server;
|
package com.iqser.red.service.redaction.v1.server;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.time.OffsetDateTime;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Disabled;
|
import org.junit.jupiter.api.Disabled;
|
||||||
@ -28,6 +32,8 @@ import com.iqser.red.commons.jackson.ObjectMapperFactory;
|
|||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.AnalyzeRequest;
|
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.AnalyzeResult;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType;
|
||||||
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactions;
|
||||||
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.entitymapped.IdRemoval;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.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.type.Type;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.type.Type;
|
||||||
@ -150,10 +156,15 @@ public class DocumineFloraTest extends AbstractRedactionIntegrationTest {
|
|||||||
var componentLog = redactionStorageService.getComponentLog(TEST_DOSSIER_ID, TEST_FILE_ID);
|
var componentLog = redactionStorageService.getComponentLog(TEST_DOSSIER_ID, TEST_FILE_ID);
|
||||||
assertNotNull(componentLog);
|
assertNotNull(componentLog);
|
||||||
|
|
||||||
var experimentalDates = componentLog.getComponentLogEntries().stream().filter(c -> c.getName().equals("Experimental_Starting_Date")).findFirst().get();
|
var experimentalDates = componentLog.getComponentLogEntries()
|
||||||
|
.stream()
|
||||||
|
.filter(c -> c.getName().equals("Experimental_Starting_Date"))
|
||||||
|
.findFirst()
|
||||||
|
.get();
|
||||||
assertNotNull(experimentalDates);
|
assertNotNull(experimentalDates);
|
||||||
|
|
||||||
String dates = experimentalDates.getComponentValues().get(0).getValue();
|
String dates = experimentalDates.getComponentValues()
|
||||||
|
.get(0).getValue();
|
||||||
String[] dateArray = dates.split(", ");
|
String[] dateArray = dates.split(", ");
|
||||||
boolean allEqual = true;
|
boolean allEqual = true;
|
||||||
for (String date : dateArray) {
|
for (String date : dateArray) {
|
||||||
@ -215,4 +226,64 @@ public class DocumineFloraTest extends AbstractRedactionIntegrationTest {
|
|||||||
when(dictionaryClient.getColors(TEST_DOSSIER_TEMPLATE_ID)).thenReturn(colors);
|
when(dictionaryClient.getColors(TEST_DOSSIER_TEMPLATE_ID)).thenReturn(colors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testComponentLogWithManualRemoval() throws IOException {
|
||||||
|
|
||||||
|
AnalyzeRequest request = uploadFileToStorage("files/Documine/Flora/402Study-ocred.pdf");
|
||||||
|
|
||||||
|
ClassPathResource importedRedactionClasspathResource = new ClassPathResource(
|
||||||
|
"files/ImportedRedactions/18 Chlorothalonil RAR 08 Volume 3CA B 6a Oct 2017.IMPORTED_REDACTIONS.json");
|
||||||
|
storageService.storeObject(TenantContext.getTenantId(),
|
||||||
|
RedactionStorageService.StorageIdUtils.getStorageId(TEST_DOSSIER_ID, TEST_FILE_ID, FileType.IMPORTED_REDACTIONS),
|
||||||
|
importedRedactionClasspathResource.getInputStream());
|
||||||
|
|
||||||
|
System.out.println("Start Full integration test");
|
||||||
|
analyzeDocumentStructure(LayoutParsingType.DOCUMINE, request);
|
||||||
|
System.out.println("Finished structure analysis");
|
||||||
|
AnalyzeResult result = analyzeService.analyze(request);
|
||||||
|
System.out.println("Finished analysis");
|
||||||
|
var entityLog = redactionStorageService.getEntityLog(TEST_DOSSIER_ID, TEST_FILE_ID);
|
||||||
|
var componentLog = redactionStorageService.getComponentLog(TEST_DOSSIER_ID, TEST_FILE_ID);
|
||||||
|
var glpStudy = componentLog.getComponentLogEntries()
|
||||||
|
.stream()
|
||||||
|
.filter(componentLogEntry -> componentLogEntry.getName().equals("GLP_Study"))
|
||||||
|
.findFirst()
|
||||||
|
.get();
|
||||||
|
assertEquals("Yes",
|
||||||
|
glpStudy.getComponentValues()
|
||||||
|
.get(0).getValue());
|
||||||
|
var glpStudyAnnotations = entityLog.getEntityLogEntry()
|
||||||
|
.stream()
|
||||||
|
.filter(entityLogEntry -> entityLogEntry.getMatchedRule().contains("DOC.8.0"))
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
Set<IdRemoval> idRemovalSet = new HashSet<>();
|
||||||
|
glpStudyAnnotations.forEach(glpStudyAnnotation -> {
|
||||||
|
idRemovalSet.add(IdRemoval.builder()
|
||||||
|
.annotationId(glpStudyAnnotation.getId())
|
||||||
|
.removeFromAllDossiers(false)
|
||||||
|
.removeFromDictionary(false)
|
||||||
|
.requestDate(OffsetDateTime.now())
|
||||||
|
.user("user")
|
||||||
|
.fileId(TEST_FILE_ID)
|
||||||
|
.build());
|
||||||
|
});
|
||||||
|
request.setManualRedactions(ManualRedactions.builder()
|
||||||
|
.idsToRemove(idRemovalSet)
|
||||||
|
.build());
|
||||||
|
|
||||||
|
analyzeService.reanalyze(request);
|
||||||
|
|
||||||
|
componentLog = redactionStorageService.getComponentLog(TEST_DOSSIER_ID, TEST_FILE_ID);
|
||||||
|
glpStudy = componentLog.getComponentLogEntries()
|
||||||
|
.stream()
|
||||||
|
.filter(componentLogEntry -> componentLogEntry.getName().equals("GLP_Study"))
|
||||||
|
.findFirst()
|
||||||
|
.get();
|
||||||
|
assertEquals("No",
|
||||||
|
glpStudy.getComponentValues()
|
||||||
|
.get(0).getValue());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user