Ported async flag caluculation
This commit is contained in:
parent
ca00c7125f
commit
896cb2e203
@ -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) {
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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];
|
||||
}
|
||||
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user