This commit is contained in:
maverickstuder 2024-03-13 15:26:35 +01:00
parent c7d650abb9
commit 2dbc4ef348
15 changed files with 223 additions and 92 deletions

View File

@ -81,7 +81,7 @@ public class EntityLogMergeService {
List<EntityLogEntry> matchingEntities = entityLog.getEntityLogEntry()
.stream()
.filter(entityLogEntry -> manualChangesIds.contains(entityLogEntry.getId()))
.filter(entityLogEntry -> manualChangesIds.contains(entityLogEntry.getEntryId()))
.collect(Collectors.toList());
final int analysisNumber = entityLog.getAnalysisNumber();
@ -143,7 +143,7 @@ public class EntityLogMergeService {
private EntityLogEntry findMatchingEntry(String annotationId, List<EntityLogEntry> matchingEntities) {
return matchingEntities.stream()
.filter(entityLogEntry -> entityLogEntry.getId().equals(annotationId))
.filter(entityLogEntry -> entityLogEntry.getEntryId().equals(annotationId))
.findAny()
.orElseThrow(() -> new NotFoundException("No matching EntityLogEntry found for id " + annotationId));
}
@ -182,7 +182,7 @@ public class EntityLogMergeService {
boolean isHint = isHint(manualRedactionEntry.getType(), dossier);
EntityLogEntry entityLogEntry = EntityLogEntry.builder()
.id(manualRedactionEntry.getAnnotationId())
.entryId(manualRedactionEntry.getAnnotationId())
.type(manualRedactionEntry.getType())
.value(manualRedactionEntry.getValue())
.legalBasis(manualRedactionEntry.getLegalBasis())
@ -237,7 +237,7 @@ public class EntityLogMergeService {
private void mergeIdsToRemove(IdRemoval idRemoval, List<EntityLogEntry> entityLogEntries, int analysisNumber) {
var entity = entityLogEntries.stream()
.filter(entityLogEntry -> entityLogEntry.getId().equals(idRemoval.getAnnotationId()))
.filter(entityLogEntry -> entityLogEntry.getEntryId().equals(idRemoval.getAnnotationId()))
.findAny();
entity.ifPresent(entityLogEntry -> {
entityLogEntry.setState(EntryState.IGNORED);
@ -258,7 +258,7 @@ public class EntityLogMergeService {
private void mergeResizeRedactions(ManualResizeRedaction manualResizeRedaction, List<EntityLogEntry> entityLogEntries, int analysisNumber) {
var entity = entityLogEntries.stream()
.filter(entityLogEntry -> entityLogEntry.getId().equals(manualResizeRedaction.getAnnotationId()))
.filter(entityLogEntry -> entityLogEntry.getEntryId().equals(manualResizeRedaction.getAnnotationId()))
.findAny();
entity.ifPresent(entityLogEntry -> {
entityLogEntry.setTextAfter(manualResizeRedaction.getTextAfter());
@ -283,7 +283,7 @@ public class EntityLogMergeService {
private void mergeLegalBasisChanges(ManualLegalBasisChange manualLegalBasisChange, List<EntityLogEntry> entityLogEntries, int analysisNumber) {
var entity = entityLogEntries.stream()
.filter(entityLogEntry -> entityLogEntry.getId().equals(manualLegalBasisChange.getAnnotationId()))
.filter(entityLogEntry -> entityLogEntry.getEntryId().equals(manualLegalBasisChange.getAnnotationId()))
.findAny();
entity.ifPresent(entityLogEntry -> {
entityLogEntry.setLegalBasis(manualLegalBasisChange.getLegalBasis());
@ -325,7 +325,7 @@ public class EntityLogMergeService {
boolean isHint = isHint(recategorization.getType(), dossier);
var entity = entityLogEntries.stream()
.filter(entityLogEntry -> entityLogEntry.getId().equals(recategorization.getAnnotationId()))
.filter(entityLogEntry -> entityLogEntry.getEntryId().equals(recategorization.getAnnotationId()))
.findAny();
entity.ifPresent(entityLogEntry -> {
entityLogEntry.setType(recategorization.getType());
@ -348,7 +348,7 @@ public class EntityLogMergeService {
private void mergeForceRedactions(ManualForceRedaction forceRedaction, List<EntityLogEntry> entityLogEntries, int analysisNumber) {
var entity = entityLogEntries.stream()
.filter(entityLogEntry -> entityLogEntry.getId().equals(forceRedaction.getAnnotationId()))
.filter(entityLogEntry -> entityLogEntry.getEntryId().equals(forceRedaction.getAnnotationId()))
.findAny();
entity.ifPresent(entityLogEntry -> {
entityLogEntry.setLegalBasis(forceRedaction.getLegalBasis());

View File

@ -80,7 +80,7 @@ public class EntityLogService {
Map<String, Integer> commentCountPerAnnotationId = commentService.getCommentCounts(fileId);
entityLog.getEntityLogEntry()
.forEach(entityLogEntry -> entityLogEntry.setNumberOfComments(commentCountPerAnnotationId.getOrDefault(entityLogEntry.getId(), 0)));
.forEach(entityLogEntry -> entityLogEntry.setNumberOfComments(commentCountPerAnnotationId.getOrDefault(entityLogEntry.getEntryId(), 0)));
return entityLog;
}

View File

@ -10,7 +10,6 @@ import java.util.Set;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog;
@ -187,7 +186,7 @@ public class ManualRedactionMapper {
return entityLog.getEntityLogEntry()
.stream()
.filter(entry -> entry.getId().equals(annotationId))
.filter(entry -> entry.getEntryId().equals(annotationId))
.findFirst()
.orElseThrow(() -> new NotFoundException("Annotation does not exist in entity log."));
}

View File

@ -348,7 +348,7 @@ public class ManualRedactionService {
return entityLog.getEntityLogEntry()
.stream()
.filter(entry -> entry.getId().equals(annotationId))
.filter(entry -> entry.getEntryId().equals(annotationId))
.findFirst()
.orElseThrow(() -> new NotFoundException("Annotation does not exist in entity log."));
}

View File

@ -343,7 +343,7 @@ public class ManualRedactionUndoService {
return entityLog.getEntityLogEntry()
.stream()
.filter(entry -> entry.getId().equals(annotationId))
.filter(entry -> entry.getEntryId().equals(annotationId))
.findFirst()
.orElseThrow(() -> new NotFoundException("Annotation does not exist in entity log."));
}

View File

@ -35,7 +35,7 @@ public class PendingDictionaryEntryFactory {
.propertyChanges(Map.of("value", manualRedactionEntry.getValue()))
.build());
return EntityLogEntry.builder()
.id(manualRedactionEntry.getAnnotationId())
.entryId(manualRedactionEntry.getAnnotationId())
.value(manualRedactionEntry.getValue())
.type(manualRedactionEntry.getType())
.entryType(Optional.ofNullable(manualRedactionEntry.getDictionaryEntryType())
@ -82,7 +82,7 @@ public class PendingDictionaryEntryFactory {
.build());
return EntityLogEntry.builder()
.id(originalEntry.getId())
.entryId(originalEntry.getEntryId())
.value(originalEntry.getValue())
.type(originalEntry.getType())
.entryType(originalEntry.getEntryType())
@ -121,7 +121,7 @@ public class PendingDictionaryEntryFactory {
.propertyChanges(propertyChanges)
.build());
return EntityLogEntry.builder()
.id(originalEntry.getId())
.entryId(originalEntry.getEntryId())
.value(manualChange.getValue())
.type(originalEntry.getType())
.entryType(originalEntry.getEntryType())
@ -171,7 +171,7 @@ public class PendingDictionaryEntryFactory {
.build());
return EntityLogEntry.builder()
.id(originalEntry.getId())
.entryId(originalEntry.getEntryId())
.value(originalEntry.getValue())
.type(manualChange.getType())
.entryType(originalEntry.getEntryType())

View File

@ -66,10 +66,12 @@ public class FileTesterAndProvider {
fileManagementStorageService.saveEntityLog(dossier.getId(),
file.getFileId(),
new EntityLog(1,
new EntityLog(dossier.getId(),
fileId,
1,
1,
List.of(EntityLogEntry.builder()
.id("annotationId")
.entryId("annotationId")
.type("manual")
.value("value entry")
.entryType(EntryType.ENTITY)

View File

@ -120,7 +120,7 @@ public class EntityLogMergeTest {
ManualRedactions manualRedactions = provideManualRedactions(entryToAddId, entryToRemoveId, entryToResizeId, entryLegalBasisId, forceRedactionId, fileId, rectangleToAddId);
var entityLog = provideEntityLog(entryToRemoveId, entryToResizeId, entryLegalBasisId, forceRedactionId);
var entityLog = provideEntityLog(dossierId, fileId, entryToRemoveId, entryToResizeId, entryLegalBasisId, forceRedactionId);
when(manualRedactionProviderService.getManualRedactions(any(), any())).thenReturn(manualRedactions);
when(fileStatusService.getStatus(fileId)).thenReturn(FileModel.builder().excluded(false).dossierStatusId(dossierTemplateId).id(fileId).build());
@ -137,7 +137,7 @@ public class EntityLogMergeTest {
var optionalEntityLogEntry = response.getEntityLogEntry()
.stream()
.filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryToAddId))
.filter(entityLogEntry1 -> entityLogEntry1.getEntryId().equals(entryToAddId))
.findFirst();
assertTrue(optionalEntityLogEntry.isPresent());
var entityLogEntry = optionalEntityLogEntry.get();
@ -152,7 +152,7 @@ public class EntityLogMergeTest {
var optionalRemoveEntryLogEntry = response.getEntityLogEntry()
.stream()
.filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryToRemoveId))
.filter(entityLogEntry1 -> entityLogEntry1.getEntryId().equals(entryToRemoveId))
.findFirst();
assertTrue(optionalRemoveEntryLogEntry.isPresent());
var removeEntryLogEntry = optionalRemoveEntryLogEntry.get();
@ -166,7 +166,7 @@ public class EntityLogMergeTest {
var optionalResizeEntryLogEntry = response.getEntityLogEntry()
.stream()
.filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryToResizeId))
.filter(entityLogEntry1 -> entityLogEntry1.getEntryId().equals(entryToResizeId))
.findFirst();
assertTrue(optionalResizeEntryLogEntry.isPresent());
var resizeEntryLogEntry = optionalResizeEntryLogEntry.get();
@ -190,7 +190,7 @@ public class EntityLogMergeTest {
var optionalLegalBasisEntryLogEntry = response.getEntityLogEntry()
.stream()
.filter(entityLogEntry1 -> entityLogEntry1.getId().equals(entryLegalBasisId))
.filter(entityLogEntry1 -> entityLogEntry1.getEntryId().equals(entryLegalBasisId))
.findFirst();
assertTrue(optionalLegalBasisEntryLogEntry.isPresent());
var legalBasisEntryLogEntry = optionalLegalBasisEntryLogEntry.get();
@ -205,7 +205,7 @@ public class EntityLogMergeTest {
var optionalForceRedactionEntryLogEntry = response.getEntityLogEntry()
.stream()
.filter(entityLogEntry1 -> entityLogEntry1.getId().equals(forceRedactionId))
.filter(entityLogEntry1 -> entityLogEntry1.getEntryId().equals(forceRedactionId))
.findFirst();
assertTrue(optionalForceRedactionEntryLogEntry.isPresent());
var forceRedactionEntryLogEntry = optionalForceRedactionEntryLogEntry.get();
@ -220,7 +220,7 @@ public class EntityLogMergeTest {
var optionalRectangleEntryLogEntry = response.getEntityLogEntry()
.stream()
.filter(entityLogEntry1 -> entityLogEntry1.getId().equals(rectangleToAddId))
.filter(entityLogEntry1 -> entityLogEntry1.getEntryId().equals(rectangleToAddId))
.findFirst();
assertTrue(optionalRectangleEntryLogEntry.isPresent());
var rectangleEntryLogEntry = optionalRectangleEntryLogEntry.get();
@ -236,22 +236,24 @@ public class EntityLogMergeTest {
}
private EntityLog provideEntityLog(String entryToRemoveId, String entryToResizeId, String entryLegalBasisId, String forceRedactionId) {
private EntityLog provideEntityLog(String dossierId, String fileId, String entryToRemoveId, String entryToResizeId, String entryLegalBasisId, String forceRedactionId) {
List<Position> positions = new ArrayList<>();
positions.add(new Position(1, 1, 1, 1, 1));
return new EntityLog(1,
return new EntityLog(dossierId,
fileId,
1,
Lists.newArrayList(EntityLogEntry.builder()
.id(entryToRemoveId)
1,
Lists.newArrayList(EntityLogEntry.builder().entityLogId(EntityLog.getId(dossierId, fileId))
.entryId(entryToRemoveId)
.type("manual")
.value("Luke Skywalker")
.entryType(EntryType.ENTITY)
.state(EntryState.APPLIED)
.dictionaryEntry(true)
.build(),
EntityLogEntry.builder()
.id(entryToResizeId)
EntityLogEntry.builder().entityLogId(EntityLog.getId(dossierId, fileId))
.entryId(entryToResizeId)
.type("manual")
.value("Darth Vader")
.entryType(EntryType.ENTITY)
@ -259,8 +261,8 @@ public class EntityLogMergeTest {
.dictionaryEntry(true)
.positions(positions)
.build(),
EntityLogEntry.builder()
.id(entryLegalBasisId)
EntityLogEntry.builder().entityLogId(EntityLog.getId(dossierId, fileId))
.entryId(entryLegalBasisId)
.type("manual")
.value("Darth Luke")
.entryType(EntryType.ENTITY)
@ -268,8 +270,8 @@ public class EntityLogMergeTest {
.dictionaryEntry(true)
.positions(positions)
.build(),
EntityLogEntry.builder()
.id(forceRedactionId)
EntityLogEntry.builder().entityLogId(EntityLog.getId(dossierId, fileId))
.entryId(forceRedactionId)
.type("manual")
.value("Darth Luke")
.entryType(EntryType.ENTITY)

View File

@ -369,10 +369,13 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
var type = typeProvider.testAndProvideType(dossierTemplate, null, "manual");
var annotationId = "imagine_this_makes_sense";
EntityLog entityLog = new EntityLog(1,
EntityLog entityLog = new EntityLog(dossierId,
fileId,
1,
1,
List.of(EntityLogEntry.builder()
.id(annotationId)
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId(annotationId)
.type(type.getType())
.value("value entry")
.state(EntryState.APPLIED)

View File

@ -45,10 +45,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.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.persistence.service.v1.api.shared.model.annotations.AddRedactionRequest;
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.ManualRedactionEntry;
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.DictionaryEntryType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequestModel;
@ -124,10 +121,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("Luke Skywalker"), false, dossier.getId(), DictionaryEntryType.ENTRY);
var entityLog = new EntityLog(1,
var entityLog = new EntityLog(dossier.getId(),
file.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id("AnnotationId")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("AnnotationId")
.type(type.getType())
.value("Luke Skywalker")
.entryType(EntryType.ENTITY)
@ -318,10 +318,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
Dictionary dossierDictionary = dictionaryClient.getDictionaryForType(type.getType(), type.getDossierTemplateId(), dossier.getId());
assertThat(dossierDictionary.getEntries()).containsExactlyInAnyOrder("Luke Skywalker");
var entityLog = new EntityLog(1,
var entityLog = new EntityLog(dossier.getId(),
file.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id("AnnotationId")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("AnnotationId")
.type("test")
.value("Luke Skywalker")
.entryType(EntryType.ENTITY)
@ -378,10 +381,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
// CreateTypeValue dossierDictionaryType = MagicConverter.convert(type, CreateTypeValue.class);
// dictionaryClient.addType(dossierDictionaryType, dossier.getId());
var entityLog = new EntityLog(1,
var entityLog = new EntityLog(dossier.getId(),
file.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id("AnnotationId")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("AnnotationId")
.type("test")
.value("Luke Skywalker")
.entryType(EntryType.ENTITY)
@ -433,10 +439,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
// dictionaryClient.addType(dossierDictionaryType, dossier.getId());
dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("Luke Skywalker"), false, dossier.getId(), DictionaryEntryType.ENTRY);
var entityLog = new EntityLog(1,
var entityLog = new EntityLog(dossier.getId(),
file.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id("AnnotationId")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("AnnotationId")
.type("test")
.value("Luke Skywalker")
.entryType(EntryType.ENTITY)
@ -520,10 +529,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
var addRedactions = manualRedactionClient.addRedactionBulk(dossier1.getId(), file1.getId(), Set.of(redactionDos, redactionDosTempDict));
var loadedRedactionsFile1 = manualRedactionClient.getManualRedactions(file1.getDossierId(), file1.getFileId(), false, true);
var entityLog1 = new EntityLog(1,
var entityLog1 = new EntityLog(dossier1.getId(),
file1.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id(addRedactions.get(0).getAnnotationId())
.entityLogId(EntityLog.getId(dossier1.getId(), file1.getFileId()))
.entryId(addRedactions.get(0).getAnnotationId())
.type(typeDosDict.getType())
.value("test redaction in dossier")
.dossierDictionaryEntry(true)
@ -531,7 +543,8 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
.state(EntryState.APPLIED)
.build(),
EntityLogEntry.builder()
.id(addRedactions.get(1).getAnnotationId())
.entityLogId(EntityLog.getId(dossier1.getId(), file1.getFileId()))
.entryId(addRedactions.get(1).getAnnotationId())
.type(typeDosTempDict.getType())
.value("test redaction in dossier template")
.dictionaryEntry(true)
@ -547,10 +560,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
var redactionRequest1 = RedactionRequest.builder().dossierId(file1.getDossierId()).fileId(file1.getFileId()).dossierTemplateId(file1.getDossierTemplateId()).build();
when(entityLogService.getEntityLog(eq(file1.getDossierId()), eq(file1.getFileId()), any(), anyBoolean())).thenReturn(entityLog1);
var entityLog2 = new EntityLog(1,
var entityLog2 = new EntityLog(dossier2.getId(),
file2.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id(addRedactions.get(1).getAnnotationId())
.entityLogId(EntityLog.getId(dossier2.getId(), file2.getFileId()))
.entryId(addRedactions.get(1).getAnnotationId())
.type(typeDosTempDict.getType())
.value("test redaction in dossier template")
.dictionaryEntry(true)
@ -685,10 +701,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
var addRedactions = manualRedactionClient.addRedactionBulk(dossier1.getId(), file1.getId(), Set.of(redactionDos, redactionDosTempDict));
var loadedRedactionsFile1 = manualRedactionClient.getManualRedactions(file1.getDossierId(), file1.getFileId(), false, true);
var entityLog1 = new EntityLog(1,
var entityLog1 = new EntityLog(dossier1.getId(),
file1.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id(addRedactions.get(0).getAnnotationId())
.entityLogId(EntityLog.getId(dossier1.getId(), file1.getFileId()))
.entryId(addRedactions.get(0).getAnnotationId())
.type(typeDosDict.getType())
.value("test redaction in dossier yayy")
.dossierDictionaryEntry(true)
@ -696,7 +715,8 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
.state(EntryState.APPLIED)
.build(),
EntityLogEntry.builder()
.id(addRedactions.get(1).getAnnotationId())
.entityLogId(EntityLog.getId(dossier1.getId(), file1.getFileId()))
.entryId(addRedactions.get(1).getAnnotationId())
.type(typeDosTempDict.getType())
.value("test redaction in dossier template yayy")
.dictionaryEntry(true)
@ -712,10 +732,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
var redactionRequest1 = RedactionRequest.builder().dossierId(file1.getDossierId()).fileId(file1.getFileId()).dossierTemplateId(file1.getDossierTemplateId()).build();
when(entityLogService.getEntityLog(eq(file1.getDossierId()), eq(file1.getFileId()), any(), anyBoolean())).thenReturn(entityLog1);
var entityLog2 = new EntityLog(1,
var entityLog2 = new EntityLog(dossier2.getId(),
file2.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id(addRedactions.get(1).getAnnotationId())
.entityLogId(EntityLog.getId(dossier2.getId(), file2.getFileId()))
.entryId(addRedactions.get(1).getAnnotationId())
.type(typeDosTempDict.getType())
.value("test redaction in dossier template yayy")
.dictionaryEntry(true)
@ -854,10 +877,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
var addRedactions = manualRedactionClient.addRedactionBulk(dossier1.getId(), file1.getId(), Set.of(redactionDos, redactionDosTempDict));
var entityLog1 = new EntityLog(1,
var entityLog1 = new EntityLog(dossier1.getId(),
file1.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id(addRedactions.get(0).getAnnotationId())
.entityLogId(EntityLog.getId(dossier1.getId(), file1.getFileId()))
.entryId(addRedactions.get(0).getAnnotationId())
.type(typeDosDict.getType())
.value("test redaction in dossier")
.dossierDictionaryEntry(true)
@ -865,7 +891,8 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
.state(EntryState.APPLIED)
.build(),
EntityLogEntry.builder()
.id(addRedactions.get(1).getAnnotationId())
.entityLogId(EntityLog.getId(dossier1.getId(), file1.getFileId()))
.entryId(addRedactions.get(1).getAnnotationId())
.type(typeDosTempDict.getType())
.value("test redaction in dossier template")
.dictionaryEntry(true)
@ -881,10 +908,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
var redactionRequest1 = RedactionRequest.builder().dossierId(file1.getDossierId()).fileId(file1.getFileId()).dossierTemplateId(file1.getDossierTemplateId()).build();
when(entityLogService.getEntityLog(file1.getDossierId(), file1.getFileId())).thenReturn(entityLog1);
var entityLog2 = new EntityLog(1,
var entityLog2 = new EntityLog(dossier2.getId(),
file2.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id(addRedactions.get(1).getAnnotationId())
.entityLogId(EntityLog.getId(dossier2.getId(), file2.getFileId()))
.entryId(addRedactions.get(1).getAnnotationId())
.type(typeDosTempDict.getType())
.value("test redaction in dossier template")
.dictionaryEntry(true)
@ -1020,10 +1050,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
var addRedactions = manualRedactionClient.addRedactionBulk(dossier1.getId(), file1.getId(), Set.of(redactionDos, redactionDosTempDict));
var entityLog1 = new EntityLog(1,
var entityLog1 = new EntityLog(dossier1.getId(),
file1.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id(addRedactions.get(0).getAnnotationId())
.entityLogId(EntityLog.getId(dossier1.getId(), file1.getFileId()))
.entryId(addRedactions.get(0).getAnnotationId())
.type(typeDosDict.getType())
.value("test redaction in dossier yayy")
.dossierDictionaryEntry(true)
@ -1031,7 +1064,8 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
.state(EntryState.APPLIED)
.build(),
EntityLogEntry.builder()
.id(addRedactions.get(1).getAnnotationId())
.entityLogId(EntityLog.getId(dossier1.getId(), file1.getFileId()))
.entryId(addRedactions.get(1).getAnnotationId())
.type(typeDosTempDict.getType())
.value("test redaction in dossier template yayy")
.dictionaryEntry(true)
@ -1047,10 +1081,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
var redactionRequest1 = RedactionRequest.builder().dossierId(file1.getDossierId()).fileId(file1.getFileId()).dossierTemplateId(file1.getDossierTemplateId()).build();
when(entityLogService.getEntityLog(file1.getDossierId(), file1.getFileId())).thenReturn(entityLog1);
var entityLog2 = new EntityLog(1,
var entityLog2 = new EntityLog(dossier2.getId(),
file2.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id(addRedactions.get(1).getAnnotationId())
.entityLogId(EntityLog.getId(dossier2.getId(), file2.getFileId()))
.entryId(addRedactions.get(1).getAnnotationId())
.type(typeDosTempDict.getType())
.value("test redaction in dossier template yayy")
.dictionaryEntry(true)
@ -1171,10 +1208,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
assertThat(dossierDictionary2.getEntries()).isEmpty();
var annotationId = "AnnotationId";
var entityLog = new EntityLog(1,
var entityLog = new EntityLog(dossier.getId(),
file.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id(annotationId)
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId(annotationId)
.type(type.getType())
.value(lukeSkywalker)
.dictionaryEntry(true)
@ -1255,10 +1295,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
assertThat(dossierDictionary2.getEntries()).isEmpty();
var annotationId = "AnnotationId";
var entityLog = new EntityLog(1,
var entityLog = new EntityLog(dossier.getId(),
file.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id(annotationId)
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId(annotationId)
.type(type.getType())
.value(lukeSkywalker)
.dictionaryEntry(true)
@ -1426,10 +1469,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("Anakin"), false, dossier.getId(), DictionaryEntryType.ENTRY);
var entityLog = new EntityLog(1,
var entityLog = new EntityLog(dossier.getId(),
file.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id("AnnotationId")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("AnnotationId")
.type(type.getType())
.value("Anakin")
.entryType(EntryType.ENTITY)
@ -1437,7 +1483,8 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
.dictionaryEntry(false)
.build(),
EntityLogEntry.builder()
.id("AnnotationId2")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("AnnotationId2")
.type(type.getType())
.value("Anakin2")
.entryType(EntryType.ENTITY)
@ -1625,10 +1672,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("Darth Vader"), false, dossier.getId(), DictionaryEntryType.ENTRY);
var entityLog = new EntityLog(1,
var entityLog = new EntityLog(dossier.getId(),
file.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id("dv")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("dv")
.type(type.getType())
.value("Darth Vader")
.entryType(EntryType.ENTITY)
@ -1636,7 +1686,8 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
.dictionaryEntry(false)
.build(),
EntityLogEntry.builder()
.id("dv2")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("dv2")
.type(type.getType())
.value("Vader Darth")
.entryType(EntryType.ENTITY)
@ -1731,10 +1782,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("Luke Skywalker"), false, dossier.getId(), DictionaryEntryType.ENTRY);
var entityLog = new EntityLog(1,
var entityLog = new EntityLog(dossier.getId(),
file.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id("AnnotationId")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("AnnotationId")
.type(type.getType())
.value("Luke Skywalker")
.entryType(EntryType.ENTITY)
@ -1742,7 +1796,8 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
.dictionaryEntry(false)
.build(),
EntityLogEntry.builder()
.id("AnnotationId2")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("AnnotationId2")
.type(type.getType())
.value("Skywalker Luke")
.entryType(EntryType.ENTITY)
@ -1841,10 +1896,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
dictionaryClient.addEntry(type.getType(), type.getDossierTemplateId(), List.of("Luke Skywalker"), false, dossier.getId(), DictionaryEntryType.ENTRY);
var entityLog = new EntityLog(1,
var entityLog = new EntityLog(dossier.getId(),
file.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id("AnnotationId")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("AnnotationId")
.type(type.getType())
.value("Luke Skywalker")
.entryType(EntryType.ENTITY)
@ -1852,7 +1910,8 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
.dictionaryEntry(false)
.build(),
EntityLogEntry.builder()
.id("AnnotationId2")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("AnnotationId2")
.type(type.getType())
.value("Skywalker Luke")
.entryType(EntryType.ENTITY)
@ -1917,10 +1976,13 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
var type = typeProvider.testAndProvideType(dossierTemplate, null, "type", false);
var entityLog = new EntityLog(1,
var entityLog = new EntityLog(dossier.getId(),
file.getFileId(),
1,
1,
List.of(EntityLogEntry.builder()
.id("annotationId")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("annotationId")
.type(type.getType())
.value("lukeSkywalker")
.dictionaryEntry(true)
@ -1928,7 +1990,8 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
.state(EntryState.APPLIED)
.build(),
EntityLogEntry.builder()
.id("annotationId2")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("annotationId2")
.type(type.getType())
.value("Johannesbrotkernmehl")
.dictionaryEntry(true)
@ -1936,7 +1999,8 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
.state(EntryState.APPLIED)
.build(),
EntityLogEntry.builder()
.id("annotationId3")
.entityLogId(EntityLog.getId(dossier.getId(), file.getFileId()))
.entryId("annotationId3")
.type(type.getType())
.value("Baustelle")
.dictionaryEntry(true)

View File

@ -299,8 +299,10 @@ public abstract class AbstractPersistenceServerServiceTest {
// doNothing().when(pdfTronRedactionClient).testDigitalCurrentSignature(Mockito.any());
when(amqpAdmin.getQueueInfo(Mockito.any())).thenReturn(null);
when(entityLogService.getEntityLog(Mockito.any(), Mockito.any())).thenReturn(new EntityLog(1, 1, Lists.newArrayList(), null, 0, 0, 0, 0));
when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(new EntityLog(1,
when(entityLogService.getEntityLog(Mockito.any(), Mockito.any())).thenReturn(new EntityLog("", "", 1, 1, Lists.newArrayList(), null, 0, 0, 0, 0));
when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(new EntityLog("",
"",
1,
1,
Lists.newArrayList(),
null,

View File

@ -11,6 +11,7 @@ dependencies {
api("org.springframework.boot:spring-boot-starter-validation:3.1.3")
api("com.iqser.red.commons:jackson-commons:2.1.0")
api("com.iqser.red.commons:dictionary-merge-commons:1.3.0")
implementation("org.springframework.boot:spring-boot-starter-data-mongodb:${springBootStarterVersion}")
testImplementation("com.iqser.red.commons:test-commons:2.1.0")
testImplementation("org.springframework.boot:spring-boot-starter-test:3.0.4")
compileOnly("org.springdoc:springdoc-openapi-ui:1.7.0")

View File

@ -0,0 +1,12 @@
package com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface CascadeSave {
//
}

View File

@ -3,6 +3,10 @@ package com.iqser.red.service.persistence.service.v1.api.shared.model.analysislo
import java.util.ArrayList;
import java.util.List;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -10,8 +14,15 @@ import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "entity-logs")
public class EntityLog {
@Id
private String id;
private String dossierId;
private String fileId;
/**
* Version 0 Redaction Logs have manual redactions merged inside them
* Version 1 Redaction Logs only contain system ( rule/dictionary ) redactions. Manual Redactions are merged in at runtime.
@ -23,6 +34,8 @@ public class EntityLog {
*/
private int analysisNumber;
@DBRef
@CascadeSave
private List<EntityLogEntry> entityLogEntry = new ArrayList<>();
private List<EntityLogLegalBasis> legalBasis = new ArrayList<>();
@ -31,4 +44,33 @@ public class EntityLog {
private long rulesVersion = -1;
private long legalBasisVersion = -1;
public EntityLog(String dossierId,
String fileId,
long analysisVersion,
int analysisNumber,
List<EntityLogEntry> entityLogEntry,
List<EntityLogLegalBasis> legalBasis,
long dictionaryVersion,
long dossierDictionaryVersion,
long rulesVersion,
long legalBasisVersion) {
this.id = getId(dossierId, fileId);
this.dossierId = dossierId;
this.fileId = fileId;
this.analysisVersion = analysisVersion;
this.analysisNumber = analysisNumber;
this.entityLogEntry = entityLogEntry;
this.legalBasis = legalBasis;
this.dictionaryVersion = dictionaryVersion;
this.dossierDictionaryVersion = dossierDictionaryVersion;
this.rulesVersion = rulesVersion;
this.legalBasisVersion = legalBasisVersion;
}
public static String getId(String dossierId, String fileId) {
return dossierId + "/" + fileId;
}
}

View File

@ -5,6 +5,8 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
@ -19,9 +21,11 @@ import lombok.experimental.FieldDefaults;
@AllArgsConstructor
@EqualsAndHashCode
@FieldDefaults(level = AccessLevel.PRIVATE)
@Document(collection = "entity-log-entries")
public class EntityLogEntry {
String id;
String entryId;
String entityLogId;
String type;
EntryType entryType;
EntryState state;