Ported async flag caluculation

This commit is contained in:
Dominique Eifländer 2021-09-29 14:01:53 +02:00
parent ca00c7125f
commit 896cb2e203
5 changed files with 124 additions and 6 deletions

View File

@ -64,6 +64,20 @@ public class FileStatusPersistenceService {
}
@Transactional
public void updateFlags(String fileId,boolean hasRedactions,boolean hasHints,boolean hasImages,boolean hasSuggestions,boolean hasComments){
fileRepository.findById(fileId).ifPresentOrElse((file) -> {
file.setHasRedactions(hasRedactions);
file.setHasHints(hasHints);
file.setHasImages(hasImages);
file.setHasSuggestions(hasSuggestions);
file.setHasAnnotationComments(hasComments);
}, () -> {
throw new NotFoundException("Unknown file=" + fileId);
});
}
@Transactional
public void updateStatusSuccessful(String fileId, FileStatus status, boolean approval) {

View File

@ -1,5 +1,6 @@
package com.iqser.red.service.peristence.v1.server.controller;
import com.iqser.red.service.peristence.v1.server.service.AnalysisFlagsCalculationService;
import com.iqser.red.service.peristence.v1.server.service.DossierService;
import com.iqser.red.service.peristence.v1.server.service.ExcludeFromAnalysisService;
import com.iqser.red.service.peristence.v1.server.service.FileStatusService;
@ -28,6 +29,7 @@ public class FileStatusController implements StatusResource {
private final FileStatusService fileStatusService;
private final DossierService dossierService;
private final ExcludeFromAnalysisService excludeFromAnalysis;
private final AnalysisFlagsCalculationService analysisFlagsCalculationService;
@Override
public List<FileModel> getAllStatuses() {
@ -121,6 +123,7 @@ public class FileStatusController implements StatusResource {
excludedPages.addAll(pages);
fileStatusService.setExcludedPages(fileId, pages);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -130,6 +133,7 @@ public class FileStatusController implements StatusResource {
Set<Integer> excludedPages = fileStatus.getExcludedPages();
excludedPages.removeAll(pages);
fileStatusService.setExcludedPages(fileId, excludedPages);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
}

View File

@ -1,5 +1,6 @@
package com.iqser.red.service.peristence.v1.server.controller;
import com.iqser.red.service.peristence.v1.server.service.AnalysisFlagsCalculationService;
import com.iqser.red.service.peristence.v1.server.service.ManualRedactionService;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.*;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
@ -16,6 +17,7 @@ import static com.iqser.red.service.persistence.management.v1.processor.utils.Ma
public class ManualRedactionController implements ManualRedactionResource {
private final ManualRedactionService manualRedactionService;
private final AnalysisFlagsCalculationService analysisFlagsCalculationService;
@Override
@ -23,7 +25,9 @@ public class ManualRedactionController implements ManualRedactionResource {
@PathVariable(FILE_ID) String fileId,
@RequestBody AddRedactionRequest addRedactionRequest) {
return manualRedactionService.addAddRedaction(dossierId, fileId, addRedactionRequest);
var resp = manualRedactionService.addAddRedaction(dossierId, fileId, addRedactionRequest);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
return resp;
}
@ -32,7 +36,9 @@ public class ManualRedactionController implements ManualRedactionResource {
@PathVariable(FILE_ID) String fileId,
@RequestBody RemoveRedactionRequest removeRedactionRequest) {
return manualRedactionService.addRemoveRedaction(dossierId, fileId, removeRedactionRequest);
var resp = manualRedactionService.addRemoveRedaction(dossierId, fileId, removeRedactionRequest);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
return resp;
}
@ -41,7 +47,9 @@ public class ManualRedactionController implements ManualRedactionResource {
@PathVariable(FILE_ID) String fileId,
@RequestBody ForceRedactionRequest forceRedactionRequest) {
return manualRedactionService.addForceRedaction(dossierId, fileId, forceRedactionRequest);
var resp = manualRedactionService.addForceRedaction(dossierId, fileId, forceRedactionRequest);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
return resp;
}
@ -50,7 +58,9 @@ public class ManualRedactionController implements ManualRedactionResource {
@PathVariable(FILE_ID) String fileId,
@RequestBody LegalBasisChangeRequest legalBasisChangeRequest) {
return manualRedactionService.addLegalBasisChange(dossierId, fileId, legalBasisChangeRequest);
var resp = manualRedactionService.addLegalBasisChange(dossierId, fileId, legalBasisChangeRequest);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
return resp;
}
@ -59,7 +69,9 @@ public class ManualRedactionController implements ManualRedactionResource {
@PathVariable(FILE_ID) String fileId,
@RequestBody ImageRecategorizationRequest imageRecategorizationRequest) {
return manualRedactionService.addImageRecategorization(dossierId, fileId, imageRecategorizationRequest);
var resp = manualRedactionService.addImageRecategorization(dossierId, fileId, imageRecategorizationRequest);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
return resp;
}
@ -68,7 +80,9 @@ public class ManualRedactionController implements ManualRedactionResource {
@PathVariable(ANNOTATION_ID) String annotationId,
@RequestBody CommentRequest comment) {
return convert(manualRedactionService.addComment(fileId, annotationId, comment), Comment.class);
var resp = convert(manualRedactionService.addComment(fileId, annotationId, comment), Comment.class);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
return resp;
}
@ -122,6 +136,7 @@ public class ManualRedactionController implements ManualRedactionResource {
@PathVariable(ANNOTATION_ID) String annotationId) {
manualRedactionService.deleteAddRedaction(dossierId, fileId, annotationId);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -130,6 +145,7 @@ public class ManualRedactionController implements ManualRedactionResource {
@PathVariable(ANNOTATION_ID) String annotationId) {
manualRedactionService.deleteRemoveRedaction(dossierId, fileId, annotationId);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -138,6 +154,7 @@ public class ManualRedactionController implements ManualRedactionResource {
@PathVariable(ANNOTATION_ID) String annotationId) {
manualRedactionService.deleteForceRedaction(dossierId, fileId, annotationId);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -146,6 +163,7 @@ public class ManualRedactionController implements ManualRedactionResource {
@PathVariable(ANNOTATION_ID) String annotationId) {
manualRedactionService.deleteLegalBasisChange(dossierId, fileId, annotationId);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -155,6 +173,7 @@ public class ManualRedactionController implements ManualRedactionResource {
@PathVariable(ANNOTATION_ID) String annotationId) {
manualRedactionService.deleteImageRecategorization(dossierId, fileId, annotationId);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -162,6 +181,7 @@ public class ManualRedactionController implements ManualRedactionResource {
public void deleteComment(@PathVariable(FILE_ID) String fileId, @PathVariable(COMMENT_ID) long commentId) {
manualRedactionService.deleteComment(fileId, commentId);
// TODO analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -172,6 +192,7 @@ public class ManualRedactionController implements ManualRedactionResource {
@RequestBody JSONPrimitive<AnnotationStatus> updateStatusRequest) {
manualRedactionService.updateAddRedactionStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue());
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -182,6 +203,7 @@ public class ManualRedactionController implements ManualRedactionResource {
@RequestBody JSONPrimitive<AnnotationStatus> updateStatusRequest) {
manualRedactionService.updateRemoveRedactionStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue());
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -192,6 +214,7 @@ public class ManualRedactionController implements ManualRedactionResource {
@RequestBody JSONPrimitive<AnnotationStatus> updateStatusRequest) {
manualRedactionService.updateForceRedactionStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue());
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -201,6 +224,7 @@ public class ManualRedactionController implements ManualRedactionResource {
@RequestBody JSONPrimitive<AnnotationStatus> updateStatusRequest) {
manualRedactionService.updateLegalBasisChangeStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue());
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
@ -211,6 +235,7 @@ public class ManualRedactionController implements ManualRedactionResource {
@RequestBody JSONPrimitive<AnnotationStatus> updateStatusRequest) {
manualRedactionService.updateImageRecategorizationStatus(dossierId, fileId, annotationId, updateStatusRequest.getValue());
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}

View File

@ -0,0 +1,73 @@
package com.iqser.red.service.peristence.v1.server.service;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus;
import com.iqser.red.service.redaction.v1.model.RedactionLogEntry;
import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class AnalysisFlagsCalculationService {
private final FileStatusPersistenceService fileStatusPersistenceService;
private final RedactionLogService redactionLogService;
@Async
public void calculateFlags(String dossierId, String fileId) {
var redactionLog = redactionLogService.getRedactionLog(dossierId, fileId, true);
boolean hasRedactions = false;
boolean hasHints = false;
boolean hasSuggestions = false;
boolean hasImages = false;
boolean hasComments = false;
for (RedactionLogEntry entry : redactionLog.getRedactionLogEntry()) {
if (entry.isExcluded()) {
continue;
}
String type = getType(entry.getTypeId());
if (entry.isRedacted() && !entry.isManual() || entry.isManual() && entry.getStatus()
.equals(AnnotationStatus.APPROVED)) {
hasRedactions = true;
}
if (entry.isHint() && !type.equals("false_positive")) {
hasHints = true;
}
if (entry.isHint() && type.equals("image") || entry.isImage()) {
hasImages = true;
}
if (entry.isManual() && entry.getStatus()
.equals(AnnotationStatus.REQUESTED)) {
hasSuggestions = true;
}
if (entry.getComments() != null && !entry.getComments().isEmpty()) {
hasComments = true;
}
if (hasRedactions && hasHints && hasSuggestions && hasImages && hasComments) {
break;
}
}
fileStatusPersistenceService.updateFlags(fileId, hasRedactions, hasHints, hasImages, hasSuggestions, hasComments);
}
private String getType(String typeId){
return typeId.split(":")[0];
}
}

View File

@ -19,6 +19,7 @@ public class FileStatusProcessingUpdateService {
private final FileStatusService fileStatusService;
private final IndexingService indexingService;
private final DossierPersistenceService dossierPersistenceService;
private final AnalysisFlagsCalculationService analysisFlagsCalculationService;
public void analysisSuccessful(String dossierId, String fileId, AnalyzeResult analyzeResult) {
@ -37,6 +38,7 @@ public class FileStatusProcessingUpdateService {
indexingService.addToIndexingQueue(dossier.getDossierTemplateId(), dossierId, fileId, 2);
}
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}