RED-9947: different logic in case of disabled auto analysis
This commit is contained in:
parent
1de9d75883
commit
1abcd56e97
@ -6,6 +6,8 @@ import static com.iqser.red.service.persistence.management.v1.processor.roles.Ac
|
|||||||
import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DO_MANUAL_REDACTION;
|
import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.DO_MANUAL_REDACTION;
|
||||||
import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_MANUAL_REDACTIONS;
|
import static com.iqser.red.service.persistence.management.v1.processor.roles.ActionRoles.READ_MANUAL_REDACTIONS;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
@ -21,8 +23,11 @@ import com.iqser.red.service.persistence.management.v1.processor.model.ManualCha
|
|||||||
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.CommentService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.CommentService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.DossierManagementService;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.DossierService;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogMergeService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusManagementService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusManagementService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.FileStatusService;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionProviderService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionUndoService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.ManualRedactionUndoService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.PendingEntryFactory;
|
import com.iqser.red.service.persistence.management.v1.processor.service.manualredactions.PendingEntryFactory;
|
||||||
@ -33,6 +38,9 @@ import com.iqser.red.service.persistence.service.v1.api.external.resource.Manual
|
|||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.AuditCategory;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.CommentResponse;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.CommentResponse;
|
||||||
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.EntityLogEntry;
|
||||||
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLogEntryResponse;
|
||||||
|
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.Position;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationComments;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationComments;
|
||||||
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.Comment;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.CommentRequest;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.CommentRequest;
|
||||||
@ -40,6 +48,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations
|
|||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactionResponse;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.ManualRedactionResponse;
|
||||||
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.audit.AuditRequest;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AuditRequest;
|
||||||
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileModel;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddCommentRequestModel;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddCommentRequestModel;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionBulkLocalRequestModel;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionBulkLocalRequestModel;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequestModel;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.AddRedactionRequestModel;
|
||||||
@ -80,6 +89,8 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
PendingEntryFactory pendingEntryFactory;
|
PendingEntryFactory pendingEntryFactory;
|
||||||
DictionaryPersistenceService dictionaryPersistenceService;
|
DictionaryPersistenceService dictionaryPersistenceService;
|
||||||
|
|
||||||
|
EntityLogController entityLogController;
|
||||||
|
|
||||||
|
|
||||||
@PreAuthorize("hasAuthority('" + DELETE_MANUAL_REDACTION + "')")
|
@PreAuthorize("hasAuthority('" + DELETE_MANUAL_REDACTION + "')")
|
||||||
public void undo(@PathVariable(DOSSIER_ID) String dossierId,
|
public void undo(@PathVariable(DOSSIER_ID) String dossierId,
|
||||||
@ -249,28 +260,43 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
public ManualRedactionResponse removeRedactionBulkLocal(String dossierId,
|
public ManualRedactionResponse removeRedactionBulkLocal(String dossierId,
|
||||||
String fileId,
|
String fileId,
|
||||||
RemoveRedactionBulkLocalRequestModel removeRedactionRequest,
|
RemoveRedactionBulkLocalRequestModel removeRedactionRequest,
|
||||||
boolean removeUnprocessed) {
|
boolean includeUnprocessed) {
|
||||||
|
|
||||||
verifyAccess(dossierId, fileId);
|
verifyAccess(dossierId, fileId);
|
||||||
|
|
||||||
Set<String> entryIds;
|
Set<RemoveRedactionRequestModel> removeRedactionRequestModels;
|
||||||
if (!removeRedactionRequest.isRectangle()) {
|
FileModel status = fileStatusService.getStatus(fileId);
|
||||||
entryIds = entityLogMongoService.findEntryIdsByValueWithFilters(removeRedactionRequest.getValue(),
|
|
||||||
|
if (!status.isExcludedFromAutomaticAnalysis()) {
|
||||||
|
Set<String> entryIds = getFilteredEntityLogEntryIds(removeRedactionRequest.isRectangle(),
|
||||||
|
removeRedactionRequest.getValue(),
|
||||||
removeRedactionRequest.isCaseSensitive(),
|
removeRedactionRequest.isCaseSensitive(),
|
||||||
removeRedactionRequest.getOriginTypes(),
|
removeRedactionRequest.getOriginTypes(),
|
||||||
removeRedactionRequest.getOriginLegalBases(),
|
removeRedactionRequest.getOriginLegalBases(),
|
||||||
removeRedactionRequest.getPageNumbers());
|
removeRedactionRequest.getPageNumbers(),
|
||||||
} else {
|
removeRedactionRequest.getPosition());
|
||||||
entryIds = entityLogMongoService.findEntryIdsByMatchingFullPositionWithFilters(removeRedactionRequest.getPosition().getRectangle(),
|
removeRedactionRequestModels = entryIds.stream()
|
||||||
removeRedactionRequest.getOriginTypes(),
|
|
||||||
removeRedactionRequest.getOriginLegalBases(),
|
|
||||||
removeRedactionRequest.getPageNumbers());
|
|
||||||
}
|
|
||||||
Set<RemoveRedactionRequestModel> removeRedactionRequestModels = entryIds.stream()
|
|
||||||
.map(entryId -> RemoveRedactionRequestModel.builder().annotationId(entryId).build())
|
.map(entryId -> RemoveRedactionRequestModel.builder().annotationId(entryId).build())
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
return removeRedactionBulk(dossierId, fileId, removeRedactionRequestModels, removeUnprocessed);
|
} else {
|
||||||
|
|
||||||
|
List<EntityLogEntryResponse> filteredEntityLogResponses = getFilteredEntityLogResponses(dossierId,
|
||||||
|
fileId,
|
||||||
|
includeUnprocessed,
|
||||||
|
removeRedactionRequest.isRectangle(),
|
||||||
|
removeRedactionRequest.getValue(),
|
||||||
|
removeRedactionRequest.isCaseSensitive(),
|
||||||
|
removeRedactionRequest.getOriginTypes(),
|
||||||
|
removeRedactionRequest.getOriginLegalBases(),
|
||||||
|
removeRedactionRequest.getPageNumbers(),
|
||||||
|
removeRedactionRequest.getPosition());
|
||||||
|
|
||||||
|
removeRedactionRequestModels = filteredEntityLogResponses.stream()
|
||||||
|
.map(entityLogEntry -> RemoveRedactionRequestModel.builder().annotationId(entityLogEntry.getId()).build())
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
}
|
||||||
|
return removeRedactionBulk(dossierId, fileId, removeRedactionRequestModels, includeUnprocessed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -346,21 +372,19 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
boolean includeUnprocessed) {
|
boolean includeUnprocessed) {
|
||||||
|
|
||||||
verifyAccess(dossierId, fileId);
|
verifyAccess(dossierId, fileId);
|
||||||
|
Set<RecategorizationRequestModel> recategorizationRequestModels;
|
||||||
|
FileModel status = fileStatusService.getStatus(fileId);
|
||||||
|
|
||||||
Set<String> entryIds;
|
if (!status.isExcludedFromAutomaticAnalysis()) {
|
||||||
if (!recategorizationRequest.isRectangle()) {
|
Set<String> entryIds = getFilteredEntityLogEntryIds(recategorizationRequest.isRectangle(),
|
||||||
entryIds = entityLogMongoService.findEntryIdsByValueWithFilters(recategorizationRequest.getValue(),
|
recategorizationRequest.getValue(),
|
||||||
recategorizationRequest.isCaseSensitive(),
|
recategorizationRequest.isCaseSensitive(),
|
||||||
recategorizationRequest.getOriginTypes(),
|
recategorizationRequest.getOriginTypes(),
|
||||||
recategorizationRequest.getOriginLegalBases(),
|
recategorizationRequest.getOriginLegalBases(),
|
||||||
recategorizationRequest.getPageNumbers());
|
recategorizationRequest.getPageNumbers(),
|
||||||
} else {
|
recategorizationRequest.getPosition());
|
||||||
entryIds = entityLogMongoService.findEntryIdsByMatchingFullPositionWithFilters(recategorizationRequest.getPosition().getRectangle(),
|
|
||||||
recategorizationRequest.getOriginTypes(),
|
recategorizationRequestModels = entryIds.stream()
|
||||||
recategorizationRequest.getOriginLegalBases(),
|
|
||||||
recategorizationRequest.getPageNumbers());
|
|
||||||
}
|
|
||||||
Set<RecategorizationRequestModel> recategorizationRequestModels = entryIds.stream()
|
|
||||||
.map(entryId -> RecategorizationRequestModel.builder()
|
.map(entryId -> RecategorizationRequestModel.builder()
|
||||||
.annotationId(entryId)
|
.annotationId(entryId)
|
||||||
.type(recategorizationRequest.getType())
|
.type(recategorizationRequest.getType())
|
||||||
@ -370,6 +394,30 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
.build())
|
.build())
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
List<EntityLogEntryResponse> filteredEntityLogResponses = getFilteredEntityLogResponses(dossierId,
|
||||||
|
fileId,
|
||||||
|
includeUnprocessed,
|
||||||
|
recategorizationRequest.isRectangle(),
|
||||||
|
recategorizationRequest.getValue(),
|
||||||
|
recategorizationRequest.isCaseSensitive(),
|
||||||
|
recategorizationRequest.getOriginTypes(),
|
||||||
|
recategorizationRequest.getOriginLegalBases(),
|
||||||
|
recategorizationRequest.getPageNumbers(),
|
||||||
|
recategorizationRequest.getPosition());
|
||||||
|
|
||||||
|
recategorizationRequestModels = filteredEntityLogResponses.stream()
|
||||||
|
.map(entityLogEntry -> RecategorizationRequestModel.builder()
|
||||||
|
.annotationId(entityLogEntry.getId())
|
||||||
|
.type(recategorizationRequest.getType())
|
||||||
|
.legalBasis(recategorizationRequest.getLegalBasis())
|
||||||
|
.section(recategorizationRequest.getSection())
|
||||||
|
.value(recategorizationRequest.getValue())
|
||||||
|
.build())
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
}
|
||||||
|
|
||||||
return recategorizeBulk(dossierId, fileId, recategorizationRequestModels, includeUnprocessed);
|
return recategorizeBulk(dossierId, fileId, recategorizationRequestModels, includeUnprocessed);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -396,6 +444,125 @@ public class ManualRedactionController implements ManualRedactionResource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private Set<String> getFilteredEntityLogEntryIds(boolean rectangle,
|
||||||
|
String value,
|
||||||
|
boolean caseSensitive,
|
||||||
|
Set<String> originTypes,
|
||||||
|
Set<String> originLegalBases,
|
||||||
|
Set<Integer> pageNumbers,
|
||||||
|
Position position) {
|
||||||
|
|
||||||
|
Set<String> entryIds;
|
||||||
|
if (!rectangle) {
|
||||||
|
entryIds = entityLogMongoService.findEntryIdsByValueWithFilters(value, caseSensitive, originTypes, originLegalBases, pageNumbers);
|
||||||
|
} else {
|
||||||
|
entryIds = entityLogMongoService.findEntryIdsByMatchingFullPositionWithFilters(position.getRectangle(), originTypes, originLegalBases, pageNumbers);
|
||||||
|
}
|
||||||
|
return entryIds;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<EntityLogEntryResponse> getFilteredEntityLogResponses(String dossierId,
|
||||||
|
String fileId,
|
||||||
|
boolean includeUnprocessed,
|
||||||
|
boolean rectangle,
|
||||||
|
String value,
|
||||||
|
boolean caseSensitive,
|
||||||
|
Set<String> originTypes,
|
||||||
|
Set<String> originLegalBases,
|
||||||
|
Set<Integer> pageNumbers,
|
||||||
|
Position position) {
|
||||||
|
|
||||||
|
List<EntityLogEntryResponse> entityLogEntryResponses = entityLogController.getEntityLog(dossierId, fileId, Collections.emptyList(), includeUnprocessed).getEntityLogEntry()
|
||||||
|
.stream()
|
||||||
|
.filter(entityLogEntryResponse -> !entityLogEntryResponse.getState().equals(EntryState.PENDING))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
if (!rectangle) {
|
||||||
|
entityLogEntryResponses = filterEntriesByValueWithFilters(entityLogEntryResponses, value, caseSensitive, originTypes, originLegalBases, pageNumbers);
|
||||||
|
} else {
|
||||||
|
entityLogEntryResponses = filterEntriesByMatchingPositionWithFilters(entityLogEntryResponses, position.getRectangle(), originTypes, originLegalBases, pageNumbers);
|
||||||
|
}
|
||||||
|
|
||||||
|
return entityLogEntryResponses;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public List<EntityLogEntryResponse> filterEntriesByValueWithFilters(List<EntityLogEntryResponse> entries,
|
||||||
|
String value,
|
||||||
|
boolean caseSensitive,
|
||||||
|
Set<String> originTypes,
|
||||||
|
Set<String> originLegalBases,
|
||||||
|
Set<Integer> pageNumbers) {
|
||||||
|
|
||||||
|
return entries.stream()
|
||||||
|
.filter(entry -> filterByValue(entry, value, caseSensitive))
|
||||||
|
.filter(entry -> filterByOriginType(entry, originTypes))
|
||||||
|
.filter(entry -> filterByLegalBases(entry, originLegalBases))
|
||||||
|
.filter(entry -> filterByPageNumbers(entry, pageNumbers))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public List<EntityLogEntryResponse> filterEntriesByMatchingPositionWithFilters(List<EntityLogEntryResponse> entries,
|
||||||
|
float[] rectangle,
|
||||||
|
Set<String> originTypes,
|
||||||
|
Set<String> originLegalBases,
|
||||||
|
Set<Integer> pageNumbers) {
|
||||||
|
|
||||||
|
return entries.stream()
|
||||||
|
.filter(entry -> filterByRectangle(entry, rectangle))
|
||||||
|
.filter(entry -> filterByOriginType(entry, originTypes))
|
||||||
|
.filter(entry -> filterByLegalBases(entry, originLegalBases))
|
||||||
|
.filter(entry -> filterByPageNumbers(entry, pageNumbers))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean filterByValue(EntityLogEntryResponse entry, String value, boolean caseSensitive) {
|
||||||
|
|
||||||
|
if (caseSensitive) {
|
||||||
|
return entry.getValue().equals(value);
|
||||||
|
} else {
|
||||||
|
return entry.getValue().equalsIgnoreCase(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean filterByOriginType(EntityLogEntryResponse entry, Set<String> originTypes) {
|
||||||
|
|
||||||
|
return originTypes == null || originTypes.isEmpty() || originTypes.contains(entry.getType());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean filterByLegalBases(EntityLogEntryResponse entry, Set<String> originLegalBases) {
|
||||||
|
|
||||||
|
return originLegalBases == null || originLegalBases.isEmpty() || originLegalBases.contains(entry.getLegalBasis());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean filterByPageNumbers(EntityLogEntryResponse entry, Set<Integer> pageNumbers) {
|
||||||
|
|
||||||
|
if (pageNumbers == null || pageNumbers.isEmpty()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return entry.getPositions()
|
||||||
|
.stream()
|
||||||
|
.anyMatch(pos -> pageNumbers.contains(pos.getPageNumber()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean filterByRectangle(EntityLogEntryResponse entry, float[] rectangle) {
|
||||||
|
|
||||||
|
if (rectangle == null || rectangle.length == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return entry.getPositions()
|
||||||
|
.stream()
|
||||||
|
.anyMatch(pos -> Arrays.equals(pos.getRectangle(), rectangle));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void verifyAccessForDossier(String dossierId, String fileId, boolean allDossiersAffected) {
|
private void verifyAccessForDossier(String dossierId, String fileId, boolean allDossiersAffected) {
|
||||||
|
|
||||||
accessControlService.checkAccessPermissionsToDossier(dossierId);
|
accessControlService.checkAccessPermissionsToDossier(dossierId);
|
||||||
|
|||||||
@ -1,20 +1,18 @@
|
|||||||
package com.iqser.red.service.persistence.management.v1.processor.service.manualredactions;
|
package com.iqser.red.service.persistence.management.v1.processor.service.manualredactions;
|
||||||
|
|
||||||
import java.time.OffsetDateTime;
|
import java.time.OffsetDateTime;
|
||||||
import java.time.temporal.ChronoUnit;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import org.springframework.beans.BeanUtils;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity;
|
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Engine;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.Engine;
|
||||||
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.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.EntryState;
|
||||||
@ -58,13 +56,13 @@ public class PendingEntryFactory {
|
|||||||
|
|
||||||
public EntityLogEntry buildAddToDictionaryEntry(ManualRedactionEntry manualRedactionEntry) {
|
public EntityLogEntry buildAddToDictionaryEntry(ManualRedactionEntry manualRedactionEntry) {
|
||||||
|
|
||||||
var manualChanges = List.of(ManualChange.builder()
|
var manualChanges = new ArrayList<>(List.of(ManualChange.builder()
|
||||||
.manualRedactionType(ManualRedactionType.ADD_TO_DICTIONARY)
|
.manualRedactionType(ManualRedactionType.ADD_TO_DICTIONARY)
|
||||||
.requestedDate(manualRedactionEntry.getRequestDate())
|
.requestedDate(manualRedactionEntry.getRequestDate())
|
||||||
.processedDate(null)
|
.processedDate(null)
|
||||||
.userId(manualRedactionEntry.getUser())
|
.userId(manualRedactionEntry.getUser())
|
||||||
.propertyChanges(Map.of("value", manualRedactionEntry.getValue()))
|
.propertyChanges(Map.of("value", manualRedactionEntry.getValue()))
|
||||||
.build());
|
.build()));
|
||||||
|
|
||||||
DictionaryEntryType dictionaryEntryType = Optional.ofNullable(manualRedactionEntry.getDictionaryEntryType())
|
DictionaryEntryType dictionaryEntryType = Optional.ofNullable(manualRedactionEntry.getDictionaryEntryType())
|
||||||
.orElse(DictionaryEntryType.ENTRY);
|
.orElse(DictionaryEntryType.ENTRY);
|
||||||
@ -96,7 +94,7 @@ public class PendingEntryFactory {
|
|||||||
.endOffset(-1)
|
.endOffset(-1)
|
||||||
.changes(Collections.emptyList())
|
.changes(Collections.emptyList())
|
||||||
.manualChanges(manualChanges)
|
.manualChanges(manualChanges)
|
||||||
.engines(Set.of(Engine.DICTIONARY))
|
.engines(new HashSet<>(Set.of(Engine.DICTIONARY)))
|
||||||
.reference(Collections.emptySet())
|
.reference(Collections.emptySet())
|
||||||
.importedRedactionIntersections(Collections.emptySet())
|
.importedRedactionIntersections(Collections.emptySet())
|
||||||
.build();
|
.build();
|
||||||
@ -105,13 +103,13 @@ public class PendingEntryFactory {
|
|||||||
|
|
||||||
public EntityLogEntry buildAddRedactionBulkLocalEntry(AddRedactionBulkLocalRequestModel addRedactionBulkLocalRequestModel) {
|
public EntityLogEntry buildAddRedactionBulkLocalEntry(AddRedactionBulkLocalRequestModel addRedactionBulkLocalRequestModel) {
|
||||||
|
|
||||||
var manualChanges = List.of(ManualChange.builder()
|
var manualChanges = new ArrayList<>(List.of(ManualChange.builder()
|
||||||
.manualRedactionType(ManualRedactionType.ADD)
|
.manualRedactionType(ManualRedactionType.ADD)
|
||||||
.requestedDate(OffsetDateTime.now())
|
.requestedDate(OffsetDateTime.now())
|
||||||
.processedDate(null)
|
.processedDate(null)
|
||||||
.userId(KeycloakSecurity.getUserId())
|
.userId(KeycloakSecurity.getUserId())
|
||||||
.propertyChanges(Map.of("value", addRedactionBulkLocalRequestModel.getValue()))
|
.propertyChanges(Map.of("value", addRedactionBulkLocalRequestModel.getValue()))
|
||||||
.build());
|
.build()));
|
||||||
|
|
||||||
return EntityLogEntry.builder()
|
return EntityLogEntry.builder()
|
||||||
.id("")
|
.id("")
|
||||||
@ -132,7 +130,7 @@ public class PendingEntryFactory {
|
|||||||
.endOffset(-1)
|
.endOffset(-1)
|
||||||
.changes(Collections.emptyList())
|
.changes(Collections.emptyList())
|
||||||
.manualChanges(manualChanges)
|
.manualChanges(manualChanges)
|
||||||
.engines(Set.of(Engine.MANUAL))
|
.engines(new HashSet<>(Set.of(Engine.MANUAL)))
|
||||||
.reference(Collections.emptySet())
|
.reference(Collections.emptySet())
|
||||||
.importedRedactionIntersections(Collections.emptySet())
|
.importedRedactionIntersections(Collections.emptySet())
|
||||||
.build();
|
.build();
|
||||||
@ -149,13 +147,13 @@ public class PendingEntryFactory {
|
|||||||
|
|
||||||
public EntityLogEntry buildRemoveFromDictionary(IdRemoval manualChange, EntityLogEntry originalEntry) {
|
public EntityLogEntry buildRemoveFromDictionary(IdRemoval manualChange, EntityLogEntry originalEntry) {
|
||||||
|
|
||||||
var manualChanges = List.of(ManualChange.builder()
|
var manualChanges = new ArrayList<>(List.of(ManualChange.builder()
|
||||||
.manualRedactionType(ManualRedactionType.REMOVE_FROM_DICTIONARY)
|
.manualRedactionType(ManualRedactionType.REMOVE_FROM_DICTIONARY)
|
||||||
.requestedDate(manualChange.getRequestDate())
|
.requestedDate(manualChange.getRequestDate())
|
||||||
.processedDate(manualChange.getProcessedDate())
|
.processedDate(manualChange.getProcessedDate())
|
||||||
.userId(manualChange.getUser())
|
.userId(manualChange.getUser())
|
||||||
.propertyChanges(Map.of("remove", originalEntry.getValue()))
|
.propertyChanges(Map.of("remove", originalEntry.getValue()))
|
||||||
.build());
|
.build()));
|
||||||
|
|
||||||
String reason = String.format("%s has been removed from the dictionary", shortenValueIfNecessary(originalEntry.getValue()));
|
String reason = String.format("%s has been removed from the dictionary", shortenValueIfNecessary(originalEntry.getValue()));
|
||||||
|
|
||||||
@ -180,7 +178,7 @@ public class PendingEntryFactory {
|
|||||||
.endOffset(-1)
|
.endOffset(-1)
|
||||||
.changes(Collections.emptyList())
|
.changes(Collections.emptyList())
|
||||||
.manualChanges(manualChanges)
|
.manualChanges(manualChanges)
|
||||||
.engines(Set.of(Engine.DICTIONARY))
|
.engines(new HashSet<>(Set.of(Engine.DICTIONARY)))
|
||||||
.reference(Collections.emptySet())
|
.reference(Collections.emptySet())
|
||||||
.importedRedactionIntersections(Collections.emptySet())
|
.importedRedactionIntersections(Collections.emptySet())
|
||||||
.build();
|
.build();
|
||||||
@ -191,13 +189,13 @@ public class PendingEntryFactory {
|
|||||||
|
|
||||||
Map<String, String> propertyChanges = buildPropertyChangesForManualResize(manualChange, originalEntry);
|
Map<String, String> propertyChanges = buildPropertyChangesForManualResize(manualChange, originalEntry);
|
||||||
|
|
||||||
var manualChanges = List.of(ManualChange.builder()
|
var manualChanges = new ArrayList<>(List.of(ManualChange.builder()
|
||||||
.manualRedactionType(ManualRedactionType.RESIZE_IN_DICTIONARY)
|
.manualRedactionType(ManualRedactionType.RESIZE_IN_DICTIONARY)
|
||||||
.requestedDate(manualChange.getRequestDate())
|
.requestedDate(manualChange.getRequestDate())
|
||||||
.processedDate(manualChange.getProcessedDate())
|
.processedDate(manualChange.getProcessedDate())
|
||||||
.userId(manualChange.getUser())
|
.userId(manualChange.getUser())
|
||||||
.propertyChanges(propertyChanges)
|
.propertyChanges(propertyChanges)
|
||||||
.build());
|
.build()));
|
||||||
|
|
||||||
String reason;
|
String reason;
|
||||||
if (manualChange.getValue().length() > originalEntry.getValue().length()) {
|
if (manualChange.getValue().length() > originalEntry.getValue().length()) {
|
||||||
@ -229,7 +227,7 @@ public class PendingEntryFactory {
|
|||||||
.endOffset(-1)
|
.endOffset(-1)
|
||||||
.changes(Collections.emptyList())
|
.changes(Collections.emptyList())
|
||||||
.manualChanges(manualChanges)
|
.manualChanges(manualChanges)
|
||||||
.engines(Set.of(Engine.DICTIONARY))
|
.engines(new HashSet<>(Set.of(Engine.DICTIONARY)))
|
||||||
.reference(Collections.emptySet())
|
.reference(Collections.emptySet())
|
||||||
.importedRedactionIntersections(Collections.emptySet())
|
.importedRedactionIntersections(Collections.emptySet())
|
||||||
.build();
|
.build();
|
||||||
@ -250,7 +248,7 @@ public class PendingEntryFactory {
|
|||||||
|
|
||||||
public EntityLogEntry buildRecategorizeWithDictionary(ManualRecategorization manualChange, EntityLogEntry originalEntry) {
|
public EntityLogEntry buildRecategorizeWithDictionary(ManualRecategorization manualChange, EntityLogEntry originalEntry) {
|
||||||
|
|
||||||
var manualChanges = List.of(ManualChange.builder()
|
var manualChanges = new ArrayList<>(List.of(ManualChange.builder()
|
||||||
.manualRedactionType(ManualRedactionType.RECATEGORIZE_IN_DICTIONARY)
|
.manualRedactionType(ManualRedactionType.RECATEGORIZE_IN_DICTIONARY)
|
||||||
.requestedDate(manualChange.getRequestDate())
|
.requestedDate(manualChange.getRequestDate())
|
||||||
.processedDate(manualChange.getProcessedDate())
|
.processedDate(manualChange.getProcessedDate())
|
||||||
@ -263,7 +261,7 @@ public class PendingEntryFactory {
|
|||||||
manualChange.getSection(),
|
manualChange.getSection(),
|
||||||
"value",
|
"value",
|
||||||
manualChange.getValue()))
|
manualChange.getValue()))
|
||||||
.build());
|
.build()));
|
||||||
|
|
||||||
String reason = String.format("%s has been added to dictionary %s and removed from dictionary %s",
|
String reason = String.format("%s has been added to dictionary %s and removed from dictionary %s",
|
||||||
shortenValueIfNecessary(originalEntry.getValue()),
|
shortenValueIfNecessary(originalEntry.getValue()),
|
||||||
@ -291,7 +289,7 @@ public class PendingEntryFactory {
|
|||||||
.endOffset(-1)
|
.endOffset(-1)
|
||||||
.changes(Collections.emptyList())
|
.changes(Collections.emptyList())
|
||||||
.manualChanges(manualChanges)
|
.manualChanges(manualChanges)
|
||||||
.engines(Set.of(Engine.DICTIONARY))
|
.engines(new HashSet<>(Set.of(Engine.DICTIONARY)))
|
||||||
.reference(Collections.emptySet())
|
.reference(Collections.emptySet())
|
||||||
.importedRedactionIntersections(Collections.emptySet())
|
.importedRedactionIntersections(Collections.emptySet())
|
||||||
.build();
|
.build();
|
||||||
@ -325,7 +323,7 @@ public class PendingEntryFactory {
|
|||||||
.endOffset(-1)
|
.endOffset(-1)
|
||||||
.changes(Collections.emptyList())
|
.changes(Collections.emptyList())
|
||||||
.manualChanges(manualChanges)
|
.manualChanges(manualChanges)
|
||||||
.engines(Set.of(Engine.MANUAL))
|
.engines(new HashSet<>(Set.of(Engine.MANUAL)))
|
||||||
.reference(Collections.emptySet())
|
.reference(Collections.emptySet())
|
||||||
.importedRedactionIntersections(Collections.emptySet())
|
.importedRedactionIntersections(Collections.emptySet())
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
@ -398,6 +398,37 @@ public class EntityLogMongoServiceTest extends AbstractPersistenceServerServiceT
|
|||||||
Collections.emptySet());
|
Collections.emptySet());
|
||||||
assertEquals(baldridgeSetWithLegalBasesFilter.size(), 1);
|
assertEquals(baldridgeSetWithLegalBasesFilter.size(), 1);
|
||||||
|
|
||||||
|
|
||||||
|
String albaValueCapitalA = "Alba";
|
||||||
|
Set<String> albaSet = entityLogMongoService.findEntryIdsByValueWithFilters(albaValueCapitalA,
|
||||||
|
true,
|
||||||
|
Collections.emptySet(),
|
||||||
|
Collections.emptySet(),
|
||||||
|
Collections.emptySet());
|
||||||
|
assertEquals(albaSet.size(), 4);
|
||||||
|
|
||||||
|
albaSet = entityLogMongoService.findEntryIdsByValueWithFilters(albaValueCapitalA,
|
||||||
|
false,
|
||||||
|
Collections.emptySet(),
|
||||||
|
Collections.emptySet(),
|
||||||
|
Collections.emptySet());
|
||||||
|
assertEquals(albaSet.size(), 4);
|
||||||
|
|
||||||
|
String albaValue = "alba";
|
||||||
|
albaSet = entityLogMongoService.findEntryIdsByValueWithFilters(albaValue,
|
||||||
|
false,
|
||||||
|
Collections.emptySet(),
|
||||||
|
Collections.emptySet(),
|
||||||
|
Collections.emptySet());
|
||||||
|
assertEquals(albaSet.size(), 4);
|
||||||
|
|
||||||
|
albaSet = entityLogMongoService.findEntryIdsByValueWithFilters(albaValue,
|
||||||
|
true,
|
||||||
|
Collections.emptySet(),
|
||||||
|
Collections.emptySet(),
|
||||||
|
Collections.emptySet());
|
||||||
|
assertEquals(albaSet.size(), 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -35,7 +35,7 @@ public class EntityLogEntryDocumentCustomRepositoryImpl implements EntityLogEntr
|
|||||||
if (caseSensitive) {
|
if (caseSensitive) {
|
||||||
criteriaList.add(Criteria.where("value").is(value));
|
criteriaList.add(Criteria.where("value").is(value));
|
||||||
} else {
|
} else {
|
||||||
criteriaList.add(Criteria.where("value").regex(Pattern.compile(Pattern.quote(value), Pattern.CASE_INSENSITIVE)));
|
criteriaList.add(Criteria.where("value").regex(Pattern.compile("^" + Pattern.quote(value) + "$", Pattern.CASE_INSENSITIVE)));
|
||||||
}
|
}
|
||||||
|
|
||||||
addCommonCriteria(originTypes, originLegalBases, pageNumbers, criteriaList);
|
addCommonCriteria(originTypes, originLegalBases, pageNumbers, criteriaList);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user