Pull request #198: RED-3242
Merge in RED/persistence-service from RED-3242 to master * commit 'a2066533e286e8a92c9900a15aa1430c40fe81a2': Fixded PMD Fixded PMD Final touches for RED-3242 RED-3242 - excluded from automatic analysis
This commit is contained in:
commit
36a8fc74ba
@ -0,0 +1,17 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.model.annotations;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
@Data
|
||||
public class BaseAnnotation {
|
||||
|
||||
private String annotationId;
|
||||
private String fileId;
|
||||
private String user;
|
||||
private AnnotationStatus status;
|
||||
private OffsetDateTime requestDate;
|
||||
private OffsetDateTime processedDate;
|
||||
private OffsetDateTime softDeletedTime;
|
||||
}
|
||||
@ -5,21 +5,12 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class IdRemoval {
|
||||
public class IdRemoval extends BaseAnnotation {
|
||||
|
||||
private String annotationId;
|
||||
private String fileId;
|
||||
private String user;
|
||||
private AnnotationStatus status;
|
||||
private boolean removeFromDictionary;
|
||||
private OffsetDateTime requestDate;
|
||||
private OffsetDateTime processedDate;
|
||||
private OffsetDateTime softDeletedTime;
|
||||
|
||||
}
|
||||
|
||||
@ -5,21 +5,12 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ManualForceRedaction {
|
||||
public class ManualForceRedaction extends BaseAnnotation {
|
||||
|
||||
private String annotationId;
|
||||
private String fileId;
|
||||
private String user;
|
||||
private AnnotationStatus status;
|
||||
private String legalBasis;
|
||||
private OffsetDateTime requestDate;
|
||||
private OffsetDateTime processedDate;
|
||||
private OffsetDateTime softDeletedTime;
|
||||
|
||||
}
|
||||
|
||||
@ -5,20 +5,11 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ManualImageRecategorization {
|
||||
public class ManualImageRecategorization extends BaseAnnotation {
|
||||
|
||||
private String annotationId;
|
||||
private String fileId;
|
||||
private String user;
|
||||
private AnnotationStatus status;
|
||||
private String type;
|
||||
private OffsetDateTime requestDate;
|
||||
private OffsetDateTime processedDate;
|
||||
private OffsetDateTime softDeletedTime;
|
||||
}
|
||||
|
||||
@ -5,23 +5,14 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ManualLegalBasisChange {
|
||||
public class ManualLegalBasisChange extends BaseAnnotation {
|
||||
|
||||
private String annotationId;
|
||||
private String fileId;
|
||||
private String user;
|
||||
private AnnotationStatus status;
|
||||
private String section;
|
||||
private String value;
|
||||
private String legalBasis;
|
||||
private OffsetDateTime requestDate;
|
||||
private OffsetDateTime processedDate;
|
||||
private OffsetDateTime softDeletedTime;
|
||||
|
||||
}
|
||||
|
||||
@ -5,7 +5,6 @@ import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@ -13,23 +12,16 @@ import java.util.List;
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ManualRedactionEntry {
|
||||
public class ManualRedactionEntry extends BaseAnnotation {
|
||||
|
||||
private String annotationId;
|
||||
private String fileId;
|
||||
private String user;
|
||||
private String type;
|
||||
private String value;
|
||||
private String reason;
|
||||
private String legalBasis;
|
||||
private AnnotationStatus status;
|
||||
private String section;
|
||||
private boolean rectangle;
|
||||
private boolean addToDictionary;
|
||||
private boolean addToDossierDictionary;
|
||||
private OffsetDateTime requestDate;
|
||||
private OffsetDateTime processedDate;
|
||||
private OffsetDateTime softDeletedTime;
|
||||
private List<Rectangle> positions = new ArrayList<>();
|
||||
private String textBefore;
|
||||
private String textAfter;
|
||||
|
||||
@ -1,27 +1,19 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.model.annotations;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ManualResizeRedaction {
|
||||
public class ManualResizeRedaction extends BaseAnnotation {
|
||||
|
||||
private String annotationId;
|
||||
private String fileId;
|
||||
private String user;
|
||||
private AnnotationStatus status;
|
||||
private OffsetDateTime requestDate;
|
||||
private OffsetDateTime processedDate;
|
||||
private OffsetDateTime softDeletedTime;
|
||||
private String value;
|
||||
@Builder.Default
|
||||
private List<Rectangle> positions = new ArrayList<>();
|
||||
|
||||
@ -21,29 +21,31 @@ public interface ReanalysisResource {
|
||||
|
||||
@PostMapping(value = REANALYZE_PATH + DOSSIER_ID_PATH_PARAM)
|
||||
void reanalyzeDossier(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
|
||||
@RequestParam(value = "triggeredByUser", required = false, defaultValue = FALSE) boolean triggeredByUser,
|
||||
@RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force);
|
||||
|
||||
|
||||
@PostMapping(value = REANALYZE_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_PARAM)
|
||||
void reanalyzeFile(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID_PARAM) String fileId,
|
||||
@RequestBody Set<Integer> sectionsToReanalyse);
|
||||
|
||||
|
||||
@PostMapping(value = REANALYZE_PATH + DOSSIER_ID_PATH_PARAM + BULK_REST_PATH)
|
||||
void reanalyzeFiles(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestBody Set<String> fileIds,
|
||||
@RequestParam(value = "triggeredByUser", required = false, defaultValue = FALSE) boolean triggeredByUser,
|
||||
@RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force);
|
||||
|
||||
|
||||
@PostMapping(value = OCR_REANALYZE_PATH + DOSSIER_ID_PATH_PARAM)
|
||||
void ocrDossier(@PathVariable(DOSSIER_ID_PARAM) String dossierId);
|
||||
void ocrDossier(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
|
||||
@RequestParam(value = "triggeredByUser", required = false, defaultValue = FALSE) boolean triggeredByUser);
|
||||
|
||||
|
||||
@PostMapping(value = OCR_REANALYZE_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_PARAM)
|
||||
void ocrFile(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID_PARAM) String fileId, @RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force);
|
||||
void ocrFile(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID_PARAM) String fileId,
|
||||
@RequestParam(value = "triggeredByUser", required = false, defaultValue = FALSE) boolean triggeredByUser,
|
||||
@RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force);
|
||||
|
||||
|
||||
@PostMapping(value = OCR_REANALYZE_PATH + DOSSIER_ID_PATH_PARAM + BULK_REST_PATH)
|
||||
void ocrFiles(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestBody Set<String> fileIds);
|
||||
void ocrFiles(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
|
||||
@RequestParam(value = "triggeredByUser", required = false, defaultValue = FALSE) boolean triggeredByUser,
|
||||
@RequestBody Set<String> fileIds);
|
||||
|
||||
|
||||
@PostMapping(value = REINDEX_PATH)
|
||||
|
||||
@ -24,6 +24,8 @@ public interface StatusResource {
|
||||
|
||||
String EXCLUDED_STATUS_PARAM = "excluded";
|
||||
|
||||
String EXCLUDED_FROM_AUTOMATIC_ANALYSIS_PARAM = "excludedFromAutomaticAnalysis";
|
||||
|
||||
String APPROVER_ID_REQUEST_PARAM = "approverId";
|
||||
String ASSIGNEE_ID_REQUEST_PARAM = "assigneeId";
|
||||
String USER_ID_REQUEST_PARAM = "userId";
|
||||
@ -74,6 +76,9 @@ public interface StatusResource {
|
||||
@PostMapping(value = STATUS_PATH + "/toggle-analysis" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE)
|
||||
void toggleExclusion(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(EXCLUDED_STATUS_PARAM) boolean excluded);
|
||||
|
||||
@PostMapping(value = STATUS_PATH + "/toggle-automatic-analysis" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE)
|
||||
void toggleAutomaticAnalysis(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(EXCLUDED_STATUS_PARAM) boolean excludedFromAutomaticAnalysis);
|
||||
|
||||
@PostMapping(value = STATUS_PATH + "/exclude-pages" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE)
|
||||
void excludePages(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody Set<Integer> pages);
|
||||
|
||||
|
||||
@ -0,0 +1,24 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.entity.annotations;
|
||||
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
|
||||
public interface IBaseAnnotation {
|
||||
|
||||
AnnotationEntityId getId();
|
||||
|
||||
AnnotationStatus getStatus();
|
||||
|
||||
OffsetDateTime getRequestDate();
|
||||
|
||||
void setRequestDate(OffsetDateTime requestedDate);
|
||||
|
||||
OffsetDateTime getProcessedDate();
|
||||
|
||||
void setProcessedDate(OffsetDateTime processedDate);
|
||||
|
||||
OffsetDateTime getSoftDeletedTime();
|
||||
|
||||
void setSoftDeletedTime(OffsetDateTime softDeletedTime);
|
||||
}
|
||||
@ -16,7 +16,7 @@ import java.time.OffsetDateTime;
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class IdRemovalEntity {
|
||||
public class IdRemovalEntity implements IBaseAnnotation {
|
||||
|
||||
@EmbeddedId
|
||||
private AnnotationEntityId id;
|
||||
|
||||
@ -16,7 +16,7 @@ import java.time.OffsetDateTime;
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name = "manual_force_redaction")
|
||||
public class ManualForceRedactionEntity {
|
||||
public class ManualForceRedactionEntity implements IBaseAnnotation {
|
||||
|
||||
@EmbeddedId
|
||||
private AnnotationEntityId id;
|
||||
|
||||
@ -16,7 +16,7 @@ import java.time.OffsetDateTime;
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name = "manual_image_recategorization")
|
||||
public class ManualImageRecategorizationEntity {
|
||||
public class ManualImageRecategorizationEntity implements IBaseAnnotation {
|
||||
|
||||
@EmbeddedId
|
||||
private AnnotationEntityId id;
|
||||
|
||||
@ -16,7 +16,7 @@ import java.time.OffsetDateTime;
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name = "manual_legal_basis_change")
|
||||
public class ManualLegalBasisChangeEntity {
|
||||
public class ManualLegalBasisChangeEntity implements IBaseAnnotation {
|
||||
|
||||
@EmbeddedId
|
||||
private AnnotationEntityId id;
|
||||
|
||||
@ -18,7 +18,7 @@ import java.util.List;
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Table(name = "manual_redaction")
|
||||
public class ManualRedactionEntryEntity {
|
||||
public class ManualRedactionEntryEntity implements IBaseAnnotation {
|
||||
|
||||
@EmbeddedId
|
||||
private AnnotationEntityId id;
|
||||
|
||||
@ -1,33 +1,24 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.entity.annotations;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.ElementCollection;
|
||||
import javax.persistence.EmbeddedId;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name = "manual_resize_redaction")
|
||||
public class ManualResizeRedactionEntity {
|
||||
public class ManualResizeRedactionEntity implements IBaseAnnotation {
|
||||
|
||||
@EmbeddedId
|
||||
private AnnotationEntityId id;
|
||||
|
||||
@ -118,6 +118,9 @@ public class FileEntity {
|
||||
@Column
|
||||
private boolean excluded;
|
||||
|
||||
@Column
|
||||
private boolean excludedFromAutomaticAnalysis;
|
||||
|
||||
@Column
|
||||
private OffsetDateTime hardDeletedTime;
|
||||
|
||||
|
||||
@ -71,7 +71,7 @@ public class FileStatusPersistenceService {
|
||||
if (isFileDeleted(fileId)) {
|
||||
return;
|
||||
}
|
||||
fileRepository.updateFlags(fileId, OffsetDateTime.now(), hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates);
|
||||
fileRepository.updateFlags(fileId, OffsetDateTime.now(), hasRedactions, hasHints, hasImages, hasSuggestions, hasComments, hasUpdates);
|
||||
}
|
||||
|
||||
|
||||
@ -81,9 +81,8 @@ public class FileStatusPersistenceService {
|
||||
if (isFileDeleted(fileId)) {
|
||||
return;
|
||||
}
|
||||
fileRepository.updateWorkflowStatus(fileId, workflowStatus,
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
|
||||
approval ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null);
|
||||
fileRepository.updateWorkflowStatus(fileId, workflowStatus, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
|
||||
approval ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null, approval);
|
||||
|
||||
}
|
||||
|
||||
@ -97,9 +96,9 @@ public class FileStatusPersistenceService {
|
||||
if (processingStatus == ProcessingStatus.PROCESSED) {
|
||||
// In case the file is updated to "processed", "lastProcessed" date should be updated to "now"
|
||||
fileRepository.updateProcessingStatus(fileId, processingStatus, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
} else {
|
||||
fileRepository.updateProcessingStatus(fileId, processingStatus, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
fileRepository.updateProcessingStatus(fileId, processingStatus, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
}
|
||||
|
||||
@ -112,7 +111,7 @@ public class FileStatusPersistenceService {
|
||||
}
|
||||
fileRepository.setUpdateStatusIndexingSuccessful(fileId, ProcessingStatus.PROCESSED,
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
|
||||
|
||||
@ -122,7 +121,7 @@ public class FileStatusPersistenceService {
|
||||
if (isFileDeleted(fileId)) {
|
||||
return;
|
||||
}
|
||||
fileRepository.updateLastOCRTime(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), time);
|
||||
fileRepository.updateLastOCRTime(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), time);
|
||||
}
|
||||
|
||||
|
||||
@ -132,7 +131,7 @@ public class FileStatusPersistenceService {
|
||||
if (isFileDeleted(fileId)) {
|
||||
return;
|
||||
}
|
||||
fileRepository.updateHasComments(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), hasComments);
|
||||
fileRepository.updateHasComments(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), hasComments);
|
||||
}
|
||||
|
||||
|
||||
@ -142,7 +141,7 @@ public class FileStatusPersistenceService {
|
||||
if (isFileDeleted(fileId)) {
|
||||
return;
|
||||
}
|
||||
fileRepository.updateLastManualRedaction(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), date);
|
||||
fileRepository.updateLastManualRedaction(fileId, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), date);
|
||||
}
|
||||
|
||||
|
||||
@ -154,7 +153,7 @@ public class FileStatusPersistenceService {
|
||||
return;
|
||||
}
|
||||
fileRepository.setUpdateLastManualRedactionAndHasSuggestions(fileId,
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), date, hasSuggestions);
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), date, hasSuggestions);
|
||||
}
|
||||
|
||||
|
||||
@ -171,7 +170,7 @@ public class FileStatusPersistenceService {
|
||||
var fileAttributeEntities = convertFileAttributes(dossierId, file, fileAttributes);
|
||||
file.setLastFileAttributeChange(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setFileAttributes(fileAttributeEntities);
|
||||
file.setFileAttributes(fileAttributeEntities);
|
||||
}, () -> {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
});
|
||||
@ -188,7 +187,7 @@ public class FileStatusPersistenceService {
|
||||
|
||||
file.setLastManualRedaction(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
file.setExcludedPages(excludedPages);
|
||||
file.setExcludedPages(excludedPages);
|
||||
}, () -> {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
});
|
||||
@ -224,7 +223,7 @@ public class FileStatusPersistenceService {
|
||||
public void softDelete(String fileId, OffsetDateTime softDeletedTime) {
|
||||
|
||||
int countUpdate = fileRepository.setSoftDelete(fileId, ProcessingStatus.DELETED,
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), softDeletedTime);
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), softDeletedTime);
|
||||
if (countUpdate == 0) {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
}
|
||||
@ -237,7 +236,7 @@ public class FileStatusPersistenceService {
|
||||
int countUpdate = fileRepository.setHardDelete(fileId, ProcessingStatus.DELETED,
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
if (countUpdate == 0) {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
}
|
||||
@ -279,7 +278,18 @@ public class FileStatusPersistenceService {
|
||||
if (isFileDeleted(fileId)) {
|
||||
return;
|
||||
}
|
||||
int countUpdate = fileRepository.toggleExclusion(fileId, excluded, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
int countUpdate = fileRepository.toggleExclusion(fileId, excluded, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
if (countUpdate == 0) {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void toggleAutomaticAnalysis(String fileId, boolean excludedFromAutomaticAnalysis) {
|
||||
if (isFileDeleted(fileId)) {
|
||||
return;
|
||||
}
|
||||
int countUpdate = fileRepository.toggleAutomaticAnalysis(fileId, excludedFromAutomaticAnalysis, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
if (countUpdate == 0) {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
}
|
||||
@ -296,7 +306,7 @@ public class FileStatusPersistenceService {
|
||||
int countUpdate = fileRepository.overwriteFile(fileId, filename, uploader, ProcessingStatus.FULLREPROCESS,
|
||||
WorkflowStatus.NEW,
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
if (countUpdate == 0) {
|
||||
throw new NotFoundException("Unknown file=" + fileId);
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations;
|
||||
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity;
|
||||
@ -16,9 +16,9 @@ import javax.transaction.Transactional;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
@ -28,7 +28,7 @@ public class AddRedactionPersistenceService {
|
||||
private final ManualRedactionRepository manualRedactionRepository;
|
||||
|
||||
|
||||
public void insert(String fileId, String annotationId, AddRedactionRequest addRedactionRequest) {
|
||||
public ManualRedactionEntryEntity insert(String fileId, String annotationId, AddRedactionRequest addRedactionRequest) {
|
||||
|
||||
ManualRedactionEntryEntity manualRedactionEntry = new ManualRedactionEntryEntity();
|
||||
manualRedactionEntry.setId(new AnnotationEntityId(annotationId, fileId));
|
||||
@ -37,13 +37,18 @@ public class AddRedactionPersistenceService {
|
||||
manualRedactionEntry.setPositions(convert(addRedactionRequest.getPositions()));
|
||||
manualRedactionEntry.setTypeId(addRedactionRequest.getTypeId());
|
||||
|
||||
manualRedactionRepository.save(manualRedactionEntry);
|
||||
if (addRedactionRequest.getStatus() == AnnotationStatus.APPROVED) {
|
||||
manualRedactionEntry.setProcessedDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
|
||||
|
||||
return manualRedactionRepository.save(manualRedactionEntry);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void updateSurroundingText(AnnotationEntityId id, String textBefore, String textAfter){
|
||||
public void updateSurroundingText(AnnotationEntityId id, String textBefore, String textAfter) {
|
||||
manualRedactionRepository.updateSurroundingText(id, textBefore, textAfter);
|
||||
}
|
||||
|
||||
@ -69,7 +74,7 @@ public class AddRedactionPersistenceService {
|
||||
|
||||
public Set<ManualRedactionEntryEntity> findAddRedactions(String fileId, boolean includeDeletions) {
|
||||
|
||||
return manualRedactionRepository.findByFileIdIncludeDeletions(fileId, includeDeletions).stream().collect(Collectors.toSet());
|
||||
return new HashSet<>(manualRedactionRepository.findByFileIdIncludeDeletions(fileId, includeDeletions));
|
||||
|
||||
}
|
||||
|
||||
@ -94,19 +99,13 @@ public class AddRedactionPersistenceService {
|
||||
@Transactional
|
||||
public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) {
|
||||
|
||||
manualRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId),
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
|
||||
annotationStatus);
|
||||
manualRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary
|
||||
, boolean isAddOrRemoveFromDossierDictionary) {
|
||||
public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary, boolean isAddOrRemoveFromDossierDictionary) {
|
||||
|
||||
manualRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId),
|
||||
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
|
||||
annotationStatus,
|
||||
isAddOrRemoveFromDictionary, isAddOrRemoveFromDossierDictionary);
|
||||
manualRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus, isAddOrRemoveFromDictionary, isAddOrRemoveFromDossierDictionary);
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations;
|
||||
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.CommentEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
|
||||
@ -1,12 +1,14 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualForceRedaction;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@ -33,17 +35,12 @@ public class ForceRedactionPersistenceService {
|
||||
manualForceRedaction.setId(new AnnotationEntityId(forceRedactionRequest.getAnnotationId(), fileId));
|
||||
BeanUtils.copyProperties(forceRedactionRequest, manualForceRedaction);
|
||||
manualForceRedaction.setRequestDate(OffsetDateTime.now());
|
||||
if(manualForceRedaction.getStatus().equals(AnnotationStatus.APPROVED)) {
|
||||
manualForceRedaction.setProcessedDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
|
||||
forceRedactionRepository.save(manualForceRedaction);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) {
|
||||
forceRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus,
|
||||
OffsetDateTime.now());
|
||||
forceRedactionRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus);
|
||||
}
|
||||
|
||||
|
||||
@ -72,7 +69,10 @@ public class ForceRedactionPersistenceService {
|
||||
|
||||
public Set<ManualForceRedactionEntity> findForceRedactions(String fileId, boolean includeDeletions) {
|
||||
|
||||
return forceRedactionRepository.findByFileIdIncludeDeletions(fileId, includeDeletions).stream().collect(Collectors.toSet());
|
||||
return new HashSet<>(forceRedactionRepository.findByFileIdIncludeDeletions(fileId, includeDeletions));
|
||||
}
|
||||
|
||||
public void markAsProcessed(ManualForceRedaction e) {
|
||||
forceRedactionRepository.markAsProcessed(new AnnotationEntityId(e.getAnnotationId(), e.getFileId()), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations;
|
||||
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualImageRecategorizationEntity;
|
||||
@ -6,12 +6,15 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ImageRecategorizationRepository;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImageRecategorizationRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualForceRedaction;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualImageRecategorization;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
@ -34,8 +37,7 @@ public class ImageRecategorizationPersistenceService {
|
||||
@Transactional
|
||||
public void updateStatus(String fileId, String annotationId, AnnotationStatus annotationStatus) {
|
||||
|
||||
imageRecategorizationRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus,
|
||||
OffsetDateTime.now());
|
||||
imageRecategorizationRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), annotationStatus);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@ -68,5 +70,7 @@ public class ImageRecategorizationPersistenceService {
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void markAsProcessed(ManualImageRecategorization e) {
|
||||
imageRecategorizationRepository.markAsProcessed(new AnnotationEntityId(e.getAnnotationId(), e.getFileId()), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations;
|
||||
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualLegalBasisChangeEntity;
|
||||
@ -12,6 +12,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -22,13 +23,18 @@ public class LegalBasisChangePersistenceService {
|
||||
private final LegalBasisChangeRepository legalBasisChangeRepository;
|
||||
|
||||
|
||||
public void insert(String fileId, LegalBasisChangeRequest legalBasisChangeRequest) {
|
||||
public ManualLegalBasisChangeEntity insert(String fileId, LegalBasisChangeRequest legalBasisChangeRequest) {
|
||||
|
||||
ManualLegalBasisChangeEntity manualLegalBasisChange = new ManualLegalBasisChangeEntity();
|
||||
manualLegalBasisChange.setId(new AnnotationEntityId(legalBasisChangeRequest.getAnnotationId(), fileId));
|
||||
BeanUtils.copyProperties(legalBasisChangeRequest, manualLegalBasisChange);
|
||||
manualLegalBasisChange.setRequestDate(OffsetDateTime.now());
|
||||
legalBasisChangeRepository.save(manualLegalBasisChange);
|
||||
manualLegalBasisChange.setRequestDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
|
||||
if(legalBasisChangeRequest.getStatus() == AnnotationStatus.APPROVED) {
|
||||
manualLegalBasisChange.setProcessedDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
|
||||
return legalBasisChangeRepository.save(manualLegalBasisChange);
|
||||
|
||||
}
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations;
|
||||
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.IdRemovalEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.RemoveRedactionRepository;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.IdRemoval;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.RemoveRedactionRequest;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@ -12,6 +13,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -74,5 +76,8 @@ public class RemoveRedactionPersistenceService {
|
||||
annotationStatus, OffsetDateTime.now(), isAddOrRemoveFromDictionary);
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void markAsProcessed(IdRemoval e) {
|
||||
removeRedactionRepository.markAsProcessed(new AnnotationEntityId(e.getAnnotationId(), e.getFileId()), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations;
|
||||
|
||||
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
|
||||
|
||||
@ -29,18 +29,19 @@ public class ResizeRedactionPersistenceService {
|
||||
|
||||
|
||||
@Transactional
|
||||
public void insert(String fileId, ResizeRedactionRequest resizeRedactionRequest) {
|
||||
public ManualResizeRedactionEntity insert(String fileId, ResizeRedactionRequest resizeRedactionRequest) {
|
||||
|
||||
ManualResizeRedactionEntity manualResizeRedaction = new ManualResizeRedactionEntity();
|
||||
manualResizeRedaction.setId(new AnnotationEntityId(resizeRedactionRequest.getAnnotationId(), fileId));
|
||||
BeanUtils.copyProperties(resizeRedactionRequest, manualResizeRedaction);
|
||||
manualResizeRedaction.setPositions(convert(resizeRedactionRequest.getPositions(), RectangleEntity.class));
|
||||
manualResizeRedaction.setRequestDate(OffsetDateTime.now());
|
||||
|
||||
if(manualResizeRedaction.getStatus().equals(AnnotationStatus.APPROVED)) {
|
||||
manualResizeRedaction.setProcessedDate(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||
}
|
||||
|
||||
resizeRedactionRepository.save(manualResizeRedaction);
|
||||
return resizeRedactionRepository.save(manualResizeRedaction);
|
||||
}
|
||||
|
||||
|
||||
@ -45,9 +45,9 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
|
||||
int analysisVersion, OffsetDateTime lastUpdated, OffsetDateTime lastProcessed, int analysisNumber);
|
||||
|
||||
@Modifying
|
||||
@Query("update FileEntity f set f.workflowStatus = :workflowStatus, f.lastUpdated = :lastUpdated, f.approvalDate = :approvalDate " +
|
||||
"where f.id = :fileId")
|
||||
void updateWorkflowStatus(String fileId, WorkflowStatus workflowStatus, OffsetDateTime lastUpdated, OffsetDateTime approvalDate);
|
||||
@Query("update FileEntity f set f.workflowStatus = :workflowStatus, f.lastUpdated = :lastUpdated, f.approvalDate = :approvalDate," +
|
||||
" f.excludedFromAutomaticAnalysis = :excludedFromAutomaticAnalysis where f.id = :fileId")
|
||||
void updateWorkflowStatus(String fileId, WorkflowStatus workflowStatus, OffsetDateTime lastUpdated, OffsetDateTime approvalDate, boolean excludedFromAutomaticAnalysis);
|
||||
|
||||
@Modifying(clearAutomatically = true)
|
||||
@Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated " +
|
||||
@ -109,6 +109,10 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
|
||||
@Query("update FileEntity f set f.excluded = :excluded, f.lastUpdated = :lastUpdated where f.id = :fileId")
|
||||
int toggleExclusion(String fileId, boolean excluded, OffsetDateTime lastUpdated);
|
||||
|
||||
@Modifying(clearAutomatically = true)
|
||||
@Query("update FileEntity f set f.excludedFromAutomaticAnalysis = :excludedFromAutomaticAnalysis, f.lastUpdated = :lastUpdated where f.id = :fileId")
|
||||
int toggleAutomaticAnalysis(String fileId, boolean excludedFromAutomaticAnalysis, OffsetDateTime lastUpdated);
|
||||
|
||||
@Modifying(clearAutomatically = true)
|
||||
@Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " +
|
||||
"f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, " +
|
||||
|
||||
@ -16,9 +16,9 @@ public interface ForceRedactionRepository extends JpaRepository<ManualForceRedac
|
||||
List<ManualForceRedactionEntity> findByIdFileId(String fileId);
|
||||
|
||||
@Modifying
|
||||
@Query("update ManualForceRedactionEntity mfr set mfr.status = :annotationStatus, mfr.processedDate = :processedDate " +
|
||||
@Query("update ManualForceRedactionEntity mfr set mfr.status = :annotationStatus " +
|
||||
"where mfr.id = :annotationEntityId")
|
||||
void updateStatus(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus, OffsetDateTime processedDate);
|
||||
void updateStatus(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus);
|
||||
|
||||
@Modifying
|
||||
@Query("update ManualForceRedactionEntity mfr set mfr.softDeletedTime = :softDeletedTime " +
|
||||
@ -31,4 +31,7 @@ public interface ForceRedactionRepository extends JpaRepository<ManualForceRedac
|
||||
@Query("select mfr from ManualForceRedactionEntity mfr where mfr.id.fileId = :fileId and (:includeDeletions = true or mfr.softDeletedTime is null)")
|
||||
List<ManualForceRedactionEntity> findByFileIdIncludeDeletions(String fileId, boolean includeDeletions);
|
||||
|
||||
@Modifying
|
||||
@Query("update ManualForceRedactionEntity mfr set mfr.processedDate = :processedDate where mfr.id = :annotationEntityId")
|
||||
void markAsProcessed(AnnotationEntityId annotationEntityId, OffsetDateTime processedDate);
|
||||
}
|
||||
|
||||
@ -15,9 +15,9 @@ public interface ImageRecategorizationRepository extends JpaRepository<ManualIma
|
||||
List<ManualImageRecategorizationEntity> findByIdFileId(String fileId);
|
||||
|
||||
@Modifying
|
||||
@Query("update ManualImageRecategorizationEntity mir set mir.status = :annotationStatus, mir.processedDate = :processedDate " +
|
||||
@Query("update ManualImageRecategorizationEntity mir set mir.status = :annotationStatus " +
|
||||
"where mir.id = :annotationEntityId")
|
||||
void updateStatus(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus, OffsetDateTime processedDate);
|
||||
void updateStatus(AnnotationEntityId annotationEntityId, AnnotationStatus annotationStatus);
|
||||
|
||||
@Modifying
|
||||
@Query("update ManualImageRecategorizationEntity mir set mir.softDeletedTime = :softDeletedTime " +
|
||||
@ -29,4 +29,8 @@ public interface ImageRecategorizationRepository extends JpaRepository<ManualIma
|
||||
|
||||
@Query("select mir from ManualImageRecategorizationEntity mir where mir.id.fileId = :fileId and (:includeDeletions = true or mir.softDeletedTime is null)")
|
||||
List<ManualImageRecategorizationEntity> findByFileIdIncludeDeletions(String fileId, boolean includeDeletions);
|
||||
|
||||
@Modifying
|
||||
@Query("update ManualImageRecategorizationEntity mir set mir.processedDate = :processedDate where mir.id = :annotationEntityId")
|
||||
void markAsProcessed(AnnotationEntityId annotationEntityId, OffsetDateTime processedDate);
|
||||
}
|
||||
|
||||
@ -13,8 +13,6 @@ import java.util.Optional;
|
||||
|
||||
public interface LegalBasisChangeRepository extends JpaRepository<ManualLegalBasisChangeEntity, AnnotationEntityId> {
|
||||
|
||||
List<ManualLegalBasisChangeEntity> findByIdFileId(String fileId);
|
||||
|
||||
@Modifying
|
||||
@Query("update ManualLegalBasisChangeEntity mlbc set mlbc.status = :annotationStatus, mlbc.processedDate = :processedDate " +
|
||||
"where mlbc.id = :annotationEntityId")
|
||||
|
||||
@ -20,14 +20,13 @@ public interface ManualRedactionRepository extends JpaRepository<ManualRedaction
|
||||
void updateSoftDelete(AnnotationEntityId id, OffsetDateTime softDeleteTime);
|
||||
|
||||
@Modifying
|
||||
@Query("update ManualRedactionEntryEntity m set m.processedDate = :processedDate, m.status = :annotationStatus" +
|
||||
" where m.id = :id")
|
||||
void updateStatus(AnnotationEntityId id, OffsetDateTime processedDate, AnnotationStatus annotationStatus);
|
||||
@Query("update ManualRedactionEntryEntity m set m.status = :annotationStatus where m.id = :id")
|
||||
void updateStatus(AnnotationEntityId id, AnnotationStatus annotationStatus);
|
||||
|
||||
@Modifying
|
||||
@Query("update ManualRedactionEntryEntity m set m.processedDate = :processedDate, m.status = :annotationStatus," +
|
||||
@Query("update ManualRedactionEntryEntity m set m.status = :annotationStatus," +
|
||||
" m.addToDictionary = :isAddOrRemoveFromDictionary, m.addToDossierDictionary = :isAddOrRemoveFromDossierDictionary where m.id = :id")
|
||||
void updateStatus(AnnotationEntityId id, OffsetDateTime processedDate, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary,
|
||||
void updateStatus(AnnotationEntityId id, AnnotationStatus annotationStatus, boolean isAddOrRemoveFromDictionary,
|
||||
boolean isAddOrRemoveFromDossierDictionary);
|
||||
|
||||
@Query("select m from ManualRedactionEntryEntity m where m.id = :id and m.softDeletedTime is null")
|
||||
|
||||
@ -37,4 +37,7 @@ public interface RemoveRedactionRepository extends JpaRepository<IdRemovalEntity
|
||||
@Query("select idr from IdRemovalEntity idr where idr.id.fileId = :fileId and (:includeDeletions = true or idr.softDeletedTime is null)")
|
||||
List<IdRemovalEntity> findByFileIdIncludeDeletions(String fileId, boolean includeDeletions);
|
||||
|
||||
@Modifying
|
||||
@Query("update IdRemovalEntity idr set idr.processedDate = :processedDate where idr.id = :annotationEntityId")
|
||||
void markAsProcessed(AnnotationEntityId annotationEntityId, OffsetDateTime processedDate);
|
||||
}
|
||||
|
||||
@ -149,6 +149,13 @@ public class FileStatusController implements StatusResource {
|
||||
|
||||
}
|
||||
|
||||
public void toggleAutomaticAnalysis(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
|
||||
@PathVariable(FILE_ID) String fileId, @RequestParam(EXCLUDED_STATUS_PARAM) boolean excludedFromAutomaticAnalysis) {
|
||||
|
||||
excludeFromAnalysis.toggleAutomaticAnalysis(dossierId, fileId, excludedFromAutomaticAnalysis);
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void excludePages(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestBody Set<Integer> pages) {
|
||||
FileEntity fileStatus = fileStatusService.getStatus(fileId);
|
||||
|
||||
@ -41,51 +41,35 @@ public class ReanalysisController implements ReanalysisResource {
|
||||
|
||||
@Override
|
||||
public void reanalyzeDossier(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
|
||||
@RequestParam(value = "triggeredByUser", required = false, defaultValue = FALSE) boolean triggeredByUser,
|
||||
@RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force) {
|
||||
|
||||
var relevantFiles = getRelevantFiles(dossierId);
|
||||
|
||||
var relevantFiles = getRelevantFiles(dossierId, triggeredByUser);
|
||||
reanalyseFiles(dossierId, force, relevantFiles);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void reanalyzeFile(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
|
||||
@PathVariable(FILE_ID_PARAM) String fileId,
|
||||
@RequestBody Set<Integer> sectionsToReanalyse) {
|
||||
|
||||
log.info("Reanalyse: {} / {} with sections: {}", dossierId, fileId, sectionsToReanalyse);
|
||||
if (sectionsToReanalyse != null) {
|
||||
var relevantFiles = getRelevantFiles(dossierId, Sets.newHashSet(fileId));
|
||||
relevantFiles.forEach(file -> {
|
||||
fileStatusService.setStatusReprocess(dossierId, fileId, 10, sectionsToReanalyse);
|
||||
});
|
||||
} else {
|
||||
this.reanalyzeFiles(dossierId, Sets.newHashSet(fileId), false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void reanalyzeFiles(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestBody Set<String> fileIds,
|
||||
@RequestParam(value = "triggeredByUser", required = false, defaultValue = FALSE) boolean triggeredByUser,
|
||||
@RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force) {
|
||||
|
||||
var relevantFiles = getRelevantFiles(dossierId, fileIds);
|
||||
var relevantFiles = getRelevantFiles(dossierId, fileIds, triggeredByUser);
|
||||
reanalyseFiles(dossierId, force, relevantFiles);
|
||||
}
|
||||
|
||||
|
||||
public void ocrDossier(@PathVariable(DOSSIER_ID_PARAM) String dossierId) {
|
||||
public void ocrDossier(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestParam(value = "triggeredByUser", required = false, defaultValue = FALSE) boolean triggeredByUser) {
|
||||
|
||||
var relevantFiles = getRelevantFiles(dossierId);
|
||||
var relevantFiles = getRelevantFiles(dossierId, triggeredByUser);
|
||||
|
||||
relevantFiles.stream().filter(fileStatus -> fileStatus.getLastOCRTime() == null).forEach(fileStatus -> fileStatusService.setStatusOcrProcessing(dossierId, fileStatus.getId()));
|
||||
}
|
||||
|
||||
|
||||
public void ocrFiles(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestBody Set<String> fileIds) {
|
||||
public void ocrFiles(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @RequestParam(value = "triggeredByUser", required = false, defaultValue = FALSE) boolean triggeredByUser, @RequestBody Set<String> fileIds) {
|
||||
|
||||
var relevantFiles = getRelevantFiles(dossierId, fileIds);
|
||||
var relevantFiles = getRelevantFiles(dossierId, fileIds, triggeredByUser);
|
||||
|
||||
relevantFiles.stream().filter(fileStatus -> fileStatus.getLastOCRTime() == null).forEach(fileStatus -> fileStatusService.setStatusOcrProcessing(dossierId, fileStatus.getId()));
|
||||
}
|
||||
@ -96,7 +80,9 @@ public class ReanalysisController implements ReanalysisResource {
|
||||
}
|
||||
|
||||
|
||||
public void ocrFile(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID_PARAM) String fileId, @RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force) {
|
||||
public void ocrFile(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID_PARAM) String fileId,
|
||||
@RequestParam(value = "triggeredByUser", required = false, defaultValue = FALSE) boolean triggeredByUser,
|
||||
@RequestParam(value = "force", required = false, defaultValue = FALSE) boolean force) {
|
||||
|
||||
dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
|
||||
@ -110,26 +96,27 @@ public class ReanalysisController implements ReanalysisResource {
|
||||
if (dossierFile.getLastOCRTime() != null) {
|
||||
throw new ConflictException("File already has been OCR processed");
|
||||
}
|
||||
ocrFiles(dossierId, Sets.newHashSet(fileId));
|
||||
ocrFiles(dossierId,triggeredByUser, Sets.newHashSet(fileId));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private List<FileEntity> getRelevantFiles(String dossierId) {
|
||||
private List<FileEntity> getRelevantFiles(String dossierId, boolean triggeredByUser) {
|
||||
|
||||
var dossier = dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
return fileStatusService.getDossierStatus(dossier.getId())
|
||||
.stream()
|
||||
.filter(fileStatus -> !fileStatus.getProcessingStatus().equals(ProcessingStatus.DELETED))
|
||||
.filter(fileStatus -> !fileStatus.getWorkflowStatus().equals(WorkflowStatus.APPROVED))
|
||||
.filter(fileStatus -> triggeredByUser || !fileStatus.isExcludedFromAutomaticAnalysis())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
}
|
||||
|
||||
|
||||
private List<FileEntity> getRelevantFiles(String dossierId, Collection<String> fileIds) {
|
||||
private List<FileEntity> getRelevantFiles(String dossierId, Collection<String> fileIds, boolean triggeredByUser) {
|
||||
|
||||
var relevantDossierFiles = getRelevantFiles(dossierId);
|
||||
var relevantDossierFiles = getRelevantFiles(dossierId, triggeredByUser);
|
||||
|
||||
var relevantFiles = new ArrayList<FileEntity>();
|
||||
for (var fileId : fileIds) {
|
||||
@ -140,10 +127,6 @@ public class ReanalysisController implements ReanalysisResource {
|
||||
|
||||
var dossierFile = dossierFileOptional.get();
|
||||
|
||||
if (dossierFile.getProcessingStatus().equals(ProcessingStatus.DELETED) || dossierFile.getWorkflowStatus().equals(WorkflowStatus.APPROVED)) {
|
||||
throw new ConflictException("Cannot analyse a deleted/approved file");
|
||||
}
|
||||
|
||||
relevantFiles.add(dossierFile);
|
||||
|
||||
}
|
||||
@ -155,14 +138,14 @@ public class ReanalysisController implements ReanalysisResource {
|
||||
|
||||
if (force) {
|
||||
filesToReanalyse.forEach(file -> {
|
||||
fileStatusService.setStatusReprocess(dossierId, file.getId(), 2);
|
||||
fileStatusService.setStatusReprocess(dossierId, file.getId(), 2, true);
|
||||
});
|
||||
} else {
|
||||
var enhancedAndConvertedFiles = reanalysisRequiredStatusService.enhanceFileStatusWithAnalysisRequirements(convert(
|
||||
fileStatusService.getAllStatuses(), FileModel.class, new FileModelMapper()));
|
||||
|
||||
enhancedAndConvertedFiles.forEach(file -> {
|
||||
fileStatusService.setStatusReprocess(dossierId, file.getId(), 2);
|
||||
fileStatusService.setStatusReprocess(dossierId, file.getId(), 2, true);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -1,65 +0,0 @@
|
||||
package com.iqser.red.service.peristence.v1.server.service;
|
||||
|
||||
import com.iqser.red.service.peristence.v1.server.client.SearchClient;
|
||||
import com.iqser.red.service.peristence.v1.server.controller.ReanalysisController;
|
||||
import com.iqser.red.service.search.v1.model.MatchedSection;
|
||||
import com.iqser.red.service.search.v1.model.SearchRequest;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class DictionarySearchAndNotifyService {
|
||||
|
||||
private final ReanalysisController reanalysisClient;
|
||||
private final SearchClient searchClient;
|
||||
|
||||
public void dictionaryEntriesUpdated(String dossierTemplateId, Collection<String> changedEntries) {
|
||||
|
||||
log.info("Detect Changes for dossierTemplateId: {} and entries: {}", dossierTemplateId, changedEntries);
|
||||
|
||||
Map<SearchKey, Set<Integer>> searchResultMap = new HashMap<>();
|
||||
|
||||
for (var entry : changedEntries) {
|
||||
|
||||
|
||||
var searchResult = searchClient.getDossierStatus(SearchRequest.builder()
|
||||
.dossierTemplateIds(Collections.singletonList(dossierTemplateId)).page(1).pageSize(10_000)
|
||||
.returnSections(true)
|
||||
.queryString(entry)
|
||||
.build());
|
||||
|
||||
log.info("Got changes: {} for entry: {}", searchResult.getTotal(), entry);
|
||||
|
||||
searchResult.getMatchedDocuments().forEach(document -> {
|
||||
|
||||
var currentSections = searchResultMap.computeIfAbsent(SearchKey.builder().fileId(document.getFileId()).dossierId(document.getDossierId()).build(), (data) -> new HashSet<>());
|
||||
currentSections.addAll(document.getMatchedSections().stream().map(MatchedSection::getSectionNumber).collect(Collectors.toList()));
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
log.info("Should reanalyse: {}", searchResultMap);
|
||||
searchResultMap.forEach((searchKey, sectionNumbers) -> {
|
||||
log.info("Reanalyse: {} / {} ", searchKey, sectionNumbers);
|
||||
reanalysisClient.reanalyzeFile(searchKey.getDossierId(), searchKey.getFileId(), sectionNumbers);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
public static class SearchKey {
|
||||
private String fileId;
|
||||
private String dossierId;
|
||||
}
|
||||
|
||||
}
|
||||
@ -9,10 +9,8 @@ import org.springframework.stereotype.Service;
|
||||
@RequiredArgsConstructor
|
||||
public class ExcludeFromAnalysisService {
|
||||
|
||||
|
||||
private final FileStatusService fileStatusService;
|
||||
|
||||
|
||||
public void toggleExclusion(String dossierId, String fileId, boolean excluded) {
|
||||
|
||||
var status = fileStatusService.getStatus(fileId);
|
||||
@ -31,4 +29,16 @@ public class ExcludeFromAnalysisService {
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void toggleAutomaticAnalysis(String dossierId, String fileId, boolean excludedFromAutomaticAnalysis) {
|
||||
|
||||
// toggle status
|
||||
fileStatusService.toggleAutomaticAnalysis(fileId, excludedFromAutomaticAnalysis);
|
||||
|
||||
if (!excludedFromAutomaticAnalysis) {
|
||||
// if file has been re-enabled - process it
|
||||
fileStatusService.setStatusFullReprocess(dossierId, fileId, 2);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.BadRe
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.*;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
|
||||
|
||||
@ -31,7 +31,7 @@ public class FileStatusProcessingUpdateService {
|
||||
|
||||
case SURROUNDING_TEXT:
|
||||
fileStatusService.setStatusProcessed(analyzeResult.getFileId());
|
||||
manualRedactionService.updateManualRedactions(fileId, analyzeResult.getManualRedactions());
|
||||
manualRedactionService.updateSurroundingText(fileId, analyzeResult.getManualRedactions());
|
||||
break;
|
||||
case REANALYSE:
|
||||
case FULL_ANALYSE:
|
||||
@ -47,6 +47,7 @@ public class FileStatusProcessingUpdateService {
|
||||
indexingService.addToIndexingQueue(IndexMessageType.INSERT, dossier.getDossierTemplateId(), dossierId, fileId, 2);
|
||||
}
|
||||
|
||||
manualRedactionService.updateProcessedDate(fileId, analyzeResult.getManualRedactions());
|
||||
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
|
||||
}
|
||||
|
||||
|
||||
@ -12,13 +12,13 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.UserNotFoundException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.*;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
|
||||
import com.iqser.red.service.redaction.v1.model.AnalyzeRequest;
|
||||
import com.iqser.red.service.redaction.v1.model.AnalyzeResult;
|
||||
import com.iqser.red.service.redaction.v1.model.MessageType;
|
||||
import com.iqser.red.service.search.v1.model.IndexMessageType;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@ -128,12 +128,18 @@ public class FileStatusService {
|
||||
@Transactional
|
||||
public void setStatusReprocess(String dossierId, String fileId, int priority) {
|
||||
|
||||
setStatusReprocess(dossierId, fileId, priority, Sets.newHashSet());
|
||||
setStatusReprocess(dossierId, fileId, priority, Sets.newHashSet(), false);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void setStatusReprocess(String dossierId, String fileId, int priority, boolean triggeredManually) {
|
||||
|
||||
setStatusReprocess(dossierId, fileId, priority, Sets.newHashSet(), triggeredManually);
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void setStatusReprocess(String dossierId, String fileId, int priority, Set<Integer> sectionsToReanalyse) {
|
||||
public void setStatusReprocess(String dossierId, String fileId, int priority, Set<Integer> sectionsToReanalyse, boolean triggeredManually) {
|
||||
|
||||
log.info("Reprocessing file: {} from dossier {}", fileId, dossierId);
|
||||
|
||||
@ -144,6 +150,11 @@ public class FileStatusService {
|
||||
return;
|
||||
}
|
||||
|
||||
if(fileStatus.isExcludedFromAutomaticAnalysis() && !triggeredManually){
|
||||
log.debug("File {} is excluded from automatic analysis", fileStatus.getId());
|
||||
return;
|
||||
}
|
||||
|
||||
fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.REPROCESS);
|
||||
addToAnalysisQueue(dossierId, fileId, priority, sectionsToReanalyse);
|
||||
}
|
||||
@ -241,6 +252,12 @@ public class FileStatusService {
|
||||
}
|
||||
|
||||
|
||||
public void toggleAutomaticAnalysis(String fileId, boolean excludedFromAutomaticAnalysis) {
|
||||
|
||||
fileStatusPersistenceService.toggleAutomaticAnalysis(fileId, excludedFromAutomaticAnalysis);
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
protected void addToAnalysisQueue(String dossierId, String fileId, int priority, Set<Integer> sectionsToReanalyse) {
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ import com.iqser.red.service.peristence.v1.server.utils.ManualRedactionMapper;
|
||||
import com.iqser.red.service.peristence.v1.server.utils.ManualResizeRedactionMapper;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.CommentEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ManualRedactionEntryEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.*;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.*;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@ -13,21 +13,22 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.*;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.*;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
|
||||
import com.iqser.red.service.redaction.v1.model.AnalyzeRequest;
|
||||
import com.iqser.red.service.redaction.v1.model.MessageType;
|
||||
import com.iqser.red.service.redaction.v1.model.RedactionLog;
|
||||
import com.iqser.red.service.redaction.v1.model.RedactionLogEntry;
|
||||
|
||||
import feign.FeignException;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.springframework.amqp.rabbit.core.RabbitTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
@ -64,6 +65,7 @@ public class ManualRedactionService {
|
||||
private final HashFunction hashFunction = Hashing.murmur3_128();
|
||||
|
||||
|
||||
@Transactional
|
||||
public ManualAddResponse addAddRedaction(String dossierId, String fileId, AddRedactionRequest addRedactionRequest) {
|
||||
|
||||
dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
@ -83,6 +85,7 @@ public class ManualRedactionService {
|
||||
|
||||
String annotationId = hashFunction.hashString(fileId + addRedactionRequest, StandardCharsets.UTF_8).toString();
|
||||
OffsetDateTime now = OffsetDateTime.now();
|
||||
|
||||
addRedactionPersistenceService.insert(fileId, annotationId, addRedactionRequest);
|
||||
|
||||
Long commentId = null;
|
||||
@ -110,7 +113,6 @@ public class ManualRedactionService {
|
||||
return ManualAddResponse.builder().annotationId(annotationId).commentId(commentId).build();
|
||||
}
|
||||
|
||||
|
||||
public ManualAddResponse addRemoveRedaction(String dossierId, String fileId,
|
||||
RemoveRedactionRequest removeRedactionRequest) {
|
||||
|
||||
@ -138,7 +140,7 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
if (removeRedactionRequest.getStatus().equals(AnnotationStatus.APPROVED)) {
|
||||
fileStatusService.setStatusReprocess(dossierId, fileId, 2);
|
||||
reprocess(dossierId, fileId);
|
||||
}
|
||||
|
||||
return ManualAddResponse.builder()
|
||||
@ -171,7 +173,7 @@ public class ManualRedactionService {
|
||||
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
|
||||
|
||||
if (forceRedactionRequest.getStatus().equals(AnnotationStatus.APPROVED)) {
|
||||
fileStatusService.setStatusReprocess(dossierId, fileId, 2);
|
||||
reprocess(dossierId, fileId);
|
||||
}
|
||||
|
||||
return ManualAddResponse.builder()
|
||||
@ -228,7 +230,7 @@ public class ManualRedactionService {
|
||||
fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, now, true);
|
||||
} else {
|
||||
fileStatusPersistenceService.updateLastManualRedaction(fileId, now);
|
||||
fileStatusService.setStatusReprocess(dossierId, fileId, 2);
|
||||
reprocess(dossierId, fileId);
|
||||
}
|
||||
|
||||
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
|
||||
@ -240,17 +242,6 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
public CommentEntity addComment(String fileId, String annotationId, CommentRequest commentRequest) {
|
||||
|
||||
var createdComment = addComment(fileId, annotationId, commentRequest.getText(), commentRequest.getUser());
|
||||
|
||||
fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now());
|
||||
fileStatusPersistenceService.updateHasComments(fileId, true);
|
||||
|
||||
return createdComment;
|
||||
}
|
||||
|
||||
|
||||
public ManualAddResponse addResizeRedaction(String dossierId, String fileId,
|
||||
ResizeRedactionRequest resizeRedactionRequest) {
|
||||
|
||||
@ -283,6 +274,16 @@ public class ManualRedactionService {
|
||||
.build();
|
||||
}
|
||||
|
||||
public CommentEntity addComment(String fileId, String annotationId, CommentRequest commentRequest) {
|
||||
|
||||
var createdComment = addComment(fileId, annotationId, commentRequest.getText(), commentRequest.getUser());
|
||||
|
||||
fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now());
|
||||
fileStatusPersistenceService.updateHasComments(fileId, true);
|
||||
|
||||
return createdComment;
|
||||
}
|
||||
|
||||
|
||||
public ManualRedactionEntryEntity getAddRedaction(String fileId, String annotationId) {
|
||||
|
||||
@ -408,7 +409,7 @@ public class ManualRedactionService {
|
||||
fileStatusPersistenceService.setUpdateLastManualRedactionAndHasSuggestions(fileId, OffsetDateTime.now(), hasSuggestions);
|
||||
} else {
|
||||
fileStatusPersistenceService.updateLastManualRedaction(fileId, OffsetDateTime.now());
|
||||
fileStatusService.setStatusReprocess(dossierId, fileId, 2);
|
||||
reprocess(dossierId, fileId);
|
||||
}
|
||||
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
|
||||
}
|
||||
@ -456,7 +457,7 @@ public class ManualRedactionService {
|
||||
.filter(entry -> entry.getId().equals(idRemoval.getId().getAnnotationId()))
|
||||
.findFirst();
|
||||
|
||||
if (!redactionLogEntryOptional.isPresent()) {
|
||||
if (redactionLogEntryOptional.isEmpty()) {
|
||||
throw new NotFoundException("Annotation does not exist in redaction log.");
|
||||
}
|
||||
|
||||
@ -482,16 +483,6 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
private String buildTypeId(RedactionLogEntry redactionLogEntry, DossierEntity dossier) {
|
||||
|
||||
if (redactionLogEntry.isDossierDictionaryEntry()) {
|
||||
return toTypeId(redactionLogEntry.getType(), dossier.getDossierTemplateId(), dossier.getId());
|
||||
} else {
|
||||
return toTypeId(redactionLogEntry.getType(), dossier.getDossierTemplateId());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void updateForceRedactionStatus(String dossierId, String fileId, String annotationId,
|
||||
AnnotationStatus annotationStatus) {
|
||||
|
||||
@ -503,6 +494,7 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void updateLegalBasisChangeStatus(String dossierId, String fileId, String annotationId,
|
||||
AnnotationStatus annotationStatus) {
|
||||
|
||||
@ -523,10 +515,10 @@ public class ManualRedactionService {
|
||||
|
||||
// if it was previously approved, revert the delete
|
||||
if (imageRecategorization.getStatus() == AnnotationStatus.APPROVED) {
|
||||
fileStatusService.setStatusReprocess(dossierId, fileId, 2);
|
||||
reprocess(dossierId, fileId);
|
||||
}
|
||||
} else if (annotationStatus.equals(AnnotationStatus.APPROVED)) {
|
||||
fileStatusService.setStatusReprocess(dossierId, fileId, 2);
|
||||
reprocess(dossierId, fileId);
|
||||
}
|
||||
|
||||
dossierPersistenceService.getAndValidateDossier(dossierId);
|
||||
@ -581,6 +573,40 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void updateSurroundingText(String fileId, ManualRedactions manualRedactions) {
|
||||
|
||||
// These are marked as processed once surrounding text is computed ( TBD if this is correct ? )
|
||||
manualRedactions.getEntriesToAdd().forEach(e -> addRedactionPersistenceService.updateSurroundingText(new AnnotationEntityId(e.getAnnotationId(), fileId), e.getTextBefore(), e.getTextAfter()));
|
||||
manualRedactions.getResizeRedactions().forEach(e -> resizeRedactionPersistenceService.updateSurroundingText(new AnnotationEntityId(e.getAnnotationId(), fileId), e.getTextBefore(), e.getTextAfter()));
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void updateProcessedDate(String fileId, ManualRedactions manualRedactions) {
|
||||
|
||||
// These are marked as processed once analysis completes, not when they are set as approved
|
||||
manualRedactions.getIdsToRemove().forEach(removeRedactionPersistenceService::markAsProcessed);
|
||||
manualRedactions.getForceRedactions().forEach(forceRedactionPersistenceService::markAsProcessed);
|
||||
manualRedactions.getImageRecategorization().forEach(recategorizationPersistenceService::markAsProcessed);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void reprocess(String dossierId, String fileId) {
|
||||
fileStatusService.setStatusReprocess(dossierId, fileId, 2);
|
||||
}
|
||||
|
||||
|
||||
private String buildTypeId(RedactionLogEntry redactionLogEntry, DossierEntity dossier) {
|
||||
|
||||
if (redactionLogEntry.isDossierDictionaryEntry()) {
|
||||
return toTypeId(redactionLogEntry.getType(), dossier.getDossierTemplateId(), dossier.getId());
|
||||
} else {
|
||||
return toTypeId(redactionLogEntry.getType(), dossier.getDossierTemplateId());
|
||||
}
|
||||
}
|
||||
|
||||
private void handleAddToDictionary(String fileId, String annotationId, String typeId, String value,
|
||||
AnnotationStatus status, boolean addToDictionary, boolean addToDossierDictionary,
|
||||
boolean revert, String dossierId) {
|
||||
@ -615,7 +641,7 @@ public class ManualRedactionService {
|
||||
.filter(entry -> entry.getId().equals(annotationId))
|
||||
.findFirst();
|
||||
|
||||
if (!redactionLogEntryOptional.isPresent()) {
|
||||
if (redactionLogEntryOptional.isEmpty()) {
|
||||
throw new NotFoundException("Annotation does not exist in redaction log.");
|
||||
}
|
||||
|
||||
@ -638,7 +664,7 @@ public class ManualRedactionService {
|
||||
log.debug("Adding entries to {} for {} / {}", typeId, dossierId, fileId);
|
||||
dictionaryController.addEntries(typeId, List.of(value), false, false);
|
||||
|
||||
fileStatusService.setStatusReprocess(dossierId, fileId, 2);
|
||||
reprocess(dossierId, fileId);
|
||||
} catch (Exception e) {
|
||||
throw new BadRequestException(e.getMessage());
|
||||
}
|
||||
@ -650,7 +676,7 @@ public class ManualRedactionService {
|
||||
try {
|
||||
log.debug("Deleting entries to {} for {} / {}", typeId, dossierId, fileId);
|
||||
dictionaryController.deleteEntries(typeId, List.of(value));
|
||||
fileStatusService.setStatusReprocess(dossierId, fileId, 2);
|
||||
reprocess(dossierId, fileId);
|
||||
} catch (FeignException e) {
|
||||
throw new BadRequestException(e.getMessage());
|
||||
}
|
||||
@ -711,18 +737,6 @@ public class ManualRedactionService {
|
||||
}
|
||||
|
||||
|
||||
public void updateManualRedactions(String fileId, ManualRedactions manualRedactions) {
|
||||
|
||||
manualRedactions.getEntriesToAdd().forEach(e -> {
|
||||
addRedactionPersistenceService.updateSurroundingText(new AnnotationEntityId(e.getAnnotationId(), fileId), e.getTextBefore(), e.getTextAfter());
|
||||
});
|
||||
|
||||
manualRedactions.getResizeRedactions().forEach(e -> {
|
||||
resizeRedactionPersistenceService.updateSurroundingText(new AnnotationEntityId(e.getAnnotationId(), fileId), e.getTextBefore(), e.getTextAfter());
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void addManualRedactionToAnalysisQueue(String dossierId, String fileId, ManualRedactions manualRedactions) {
|
||||
|
||||
fileStatusPersistenceService.updateProcessingStatus(fileId, ProcessingStatus.SURROUNDING_TEXT_PROCESSING);
|
||||
|
||||
@ -67,7 +67,7 @@ public class AutomaticAnalysisScheduler {
|
||||
if (next.isFullAnalysisRequired()) {
|
||||
log.info("Queued file: {} for automatic full analysis! ", next.getFilename());
|
||||
fileStatusService.setStatusFullReprocess(next.getDossierId(), next.getId(), 1);
|
||||
} else if(next.isReanalysisRequired()){
|
||||
} else if (next.isReanalysisRequired()) {
|
||||
log.info("Queued file: {} for automatic reanalysis! ", next.getFilename());
|
||||
fileStatusService.setStatusReprocess(next.getDossierId(), next.getId(), 1);
|
||||
}
|
||||
@ -86,6 +86,7 @@ public class AutomaticAnalysisScheduler {
|
||||
.stream()
|
||||
.filter(f -> !f.getProcessingStatus().equals(ProcessingStatus.DELETED))
|
||||
.filter(f -> !f.getWorkflowStatus().equals(WorkflowStatus.APPROVED))
|
||||
.filter(f -> !f.isExcludedFromAutomaticAnalysis())
|
||||
.filter(f -> !isProcessing(f))
|
||||
.filter(f -> f.getDossier().getSoftDeletedTime() == null && f.getDossier().getHardDeletedTime() == null && f.getDossier().getArchivedTime() == null)
|
||||
.collect(Collectors.toList()), FileModel.class, new FileModelMapper()))
|
||||
|
||||
@ -0,0 +1,24 @@
|
||||
databaseChangeLog:
|
||||
- changeSet:
|
||||
id: add-excluded-from-automatic-analysis-column
|
||||
author: timo
|
||||
changes:
|
||||
- addColumn:
|
||||
columns:
|
||||
- column:
|
||||
name: excluded_from_automatic_analysis
|
||||
type: BOOLEAN
|
||||
defaultValue: false
|
||||
tableName: file
|
||||
- changeSet:
|
||||
id: updated-excluded-from-automatic-analysis-column
|
||||
author: timo
|
||||
changes:
|
||||
- update:
|
||||
columns:
|
||||
- column:
|
||||
name: excluded_from_automatic_analysis
|
||||
value: true
|
||||
schemaName: public
|
||||
tableName: file
|
||||
where: workflow_status = 'APPROVED'
|
||||
@ -9,3 +9,5 @@ databaseChangeLog:
|
||||
file: db/changelog/4-archived-dossier.changelog.yaml
|
||||
- include:
|
||||
file: db/changelog/5-imported-annotation.changelog.yaml
|
||||
- include:
|
||||
file: db/changelog/6-excluded-from-automatic-analysis-file-column.changelog.yaml
|
||||
|
||||
@ -1,20 +1,20 @@
|
||||
package com.iqser.red.service.peristence.v1.server.integration.tests;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.FileProcessingClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.UploadClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
|
||||
import com.iqser.red.service.redaction.v1.model.AnalyzeResult;
|
||||
import com.iqser.red.service.redaction.v1.model.MessageType;
|
||||
import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
@ -48,6 +48,7 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
|
||||
assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR);
|
||||
|
||||
fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder()
|
||||
.manualRedactions(new ManualRedactions())
|
||||
.messageType(MessageType.FULL_ANALYSE)
|
||||
.analysisVersion(100)
|
||||
.fileId(file.getId())
|
||||
@ -97,6 +98,7 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
|
||||
assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.ERROR);
|
||||
|
||||
fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder()
|
||||
.manualRedactions(new ManualRedactions())
|
||||
.messageType(MessageType.FULL_ANALYSE)
|
||||
.analysisVersion(100)
|
||||
.fileId(file.getId())
|
||||
@ -132,12 +134,13 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
|
||||
@Test
|
||||
public void testFileReanlyseAfterToggleExclusion(){
|
||||
public void testFileReanlyseAfterToggleExclusion() {
|
||||
var dossier = dossierTesterAndProvider.provideTestDossier();
|
||||
|
||||
var file = fileTesterAndProvider.testAndProvideFile(dossier);
|
||||
|
||||
fileProcessingClient.analysisSuccessful(dossier.getId(), file.getId(), AnalyzeResult.builder()
|
||||
.manualRedactions(new ManualRedactions())
|
||||
.messageType(MessageType.FULL_ANALYSE)
|
||||
.analysisVersion(100)
|
||||
.fileId(file.getId())
|
||||
|
||||
@ -291,8 +291,7 @@ public class ManualRedactionTest extends AbstractPersistenceServerServiceTest {
|
||||
.build());
|
||||
var loadedForceRedaction2 = manualRedactionClient.getForceRedaction(file.getId(), forceRedaction2.getAnnotationId());
|
||||
assertThat(loadedForceRedaction2.getStatus()).isEqualTo(AnnotationStatus.APPROVED);
|
||||
assertThat(loadedForceRedaction2.getProcessedDate()).isNotNull();
|
||||
|
||||
assertThat(loadedForceRedaction2.getProcessedDate()).isNull();
|
||||
|
||||
manualRedactionClient.updateForceRedactionStatus(dossier.getId(), file.getId(), forceRedaction2.getAnnotationId(), JSONPrimitive.of(AnnotationStatus.REQUESTED));
|
||||
loadedForceRedaction2 = manualRedactionClient.getForceRedaction(file.getId(), forceRedaction2.getAnnotationId());
|
||||
|
||||
@ -42,33 +42,28 @@ public class ReanalysisTest extends AbstractPersistenceServerServiceTest {
|
||||
var file = fileTesterAndProvider.testAndProvideFile(dossier);
|
||||
|
||||
|
||||
reanalysisClient.ocrDossier(dossier.getId());
|
||||
reanalysisClient.ocrDossier(dossier.getId(),true);
|
||||
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
|
||||
assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.OCR_PROCESSING);
|
||||
resetProcessingStatus(file);
|
||||
|
||||
reanalysisClient.ocrFile(dossier.getId(), file.getId(), true);
|
||||
reanalysisClient.ocrFile(dossier.getId(), file.getId(),true, true);
|
||||
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
|
||||
assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.OCR_PROCESSING);
|
||||
resetProcessingStatus(file);
|
||||
|
||||
|
||||
reanalysisClient.ocrFiles(dossier.getId(), Set.of(file.getId()));
|
||||
reanalysisClient.ocrFiles(dossier.getId(),true, Set.of(file.getId()));
|
||||
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
|
||||
assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.OCR_PROCESSING);
|
||||
resetProcessingStatus(file);
|
||||
|
||||
reanalysisClient.reanalyzeFiles(dossier.getId(), Set.of(file.getId()), true);
|
||||
reanalysisClient.reanalyzeFiles(dossier.getId(), Set.of(file.getId()), true,true);
|
||||
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
|
||||
assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING);
|
||||
resetProcessingStatus(file);
|
||||
|
||||
reanalysisClient.reanalyzeFile(dossier.getId(), file.getId(), Sets.newHashSet());
|
||||
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
|
||||
assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING);
|
||||
resetProcessingStatus(file);
|
||||
|
||||
reanalysisClient.reanalyzeDossier(dossier.getId(), true);
|
||||
reanalysisClient.reanalyzeDossier(dossier.getId(), true,true);
|
||||
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
|
||||
assertThat(loadedFile.getProcessingStatus()).isEqualTo(ProcessingStatus.PROCESSING);
|
||||
resetProcessingStatus(file);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user