RED-3243: Read redaction annotation from preview documents
This commit is contained in:
parent
713d1fc5bc
commit
abd311a2e0
@ -0,0 +1,8 @@
|
||||
package com.iqser.red.service.persistence.service.v1.api.model.annotations;
|
||||
|
||||
public enum ImportedAnnotationStatus {
|
||||
NEW,
|
||||
APPROVED,
|
||||
DECLINED,
|
||||
ADDED
|
||||
}
|
||||
@ -0,0 +1,54 @@
|
||||
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.ImportedAnnotationStatus;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Entity
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Table(name = "imported_annotation")
|
||||
public class ImportedAnnotationEntity {
|
||||
|
||||
@EmbeddedId
|
||||
private AnnotationEntityId id;
|
||||
|
||||
@Column(name = "user_id")
|
||||
private String user;
|
||||
|
||||
@Column
|
||||
@Enumerated(EnumType.STRING)
|
||||
private ImportedAnnotationStatus status;
|
||||
|
||||
@Column
|
||||
private OffsetDateTime processedDate;
|
||||
|
||||
@ElementCollection
|
||||
private List<RectangleEntity> positions = new ArrayList<>();
|
||||
|
||||
@ManyToOne
|
||||
private FileEntity fileStatus;
|
||||
|
||||
@Column
|
||||
private String comment;
|
||||
|
||||
}
|
||||
@ -0,0 +1,86 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.iqser.red.service.pdftron.redaction.v1.api.model.Annotation;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ImportedAnnotationEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.RectangleEntity;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ImportedAnnotationRepository;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImportedAnnotationStatus;
|
||||
import com.iqser.red.service.redaction.v1.model.Rectangle;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class ImportedAnnotationPersistenceService {
|
||||
|
||||
private final ImportedAnnotationRepository importedAnnotationRepository;
|
||||
|
||||
|
||||
@Transactional
|
||||
public void insert(String fileId, List<Annotation> annotations) {
|
||||
|
||||
annotations.forEach(annotation -> insert(fileId, annotation, ImportedAnnotationStatus.NEW, null, null));
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void insert(String fileId, Annotation annotation, ImportedAnnotationStatus status, String userId, String comment) {
|
||||
|
||||
ImportedAnnotationEntity importedAnnotationEntity = new ImportedAnnotationEntity();
|
||||
importedAnnotationEntity.setId(new AnnotationEntityId(annotation.getId(), fileId));
|
||||
importedAnnotationEntity.setStatus(status);
|
||||
importedAnnotationEntity.setProcessedDate(status == ImportedAnnotationStatus.ADDED ? OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS) : null);
|
||||
importedAnnotationEntity.setUser(userId);
|
||||
importedAnnotationEntity.setComment(comment);
|
||||
importedAnnotationEntity.setPositions(convert(annotation.getPositions()));
|
||||
importedAnnotationRepository.save(importedAnnotationEntity);
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void updateStatus(String fileId, String annotationId, ImportedAnnotationStatus annotationStatus,
|
||||
String comment, String userId) {
|
||||
|
||||
importedAnnotationRepository.updateStatus(new AnnotationEntityId(annotationId, fileId), OffsetDateTime.now()
|
||||
.truncatedTo(ChronoUnit.MILLIS), annotationStatus, comment, userId);
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void delete(String fileId, String annotationId){
|
||||
importedAnnotationRepository.deleteById(new AnnotationEntityId(annotationId, fileId));
|
||||
}
|
||||
|
||||
|
||||
public List<ImportedAnnotationEntity> findImportedAnnotations(String fileId) {
|
||||
|
||||
return importedAnnotationRepository.findByIdFileId(fileId);
|
||||
}
|
||||
|
||||
|
||||
private List<RectangleEntity> convert(List<Rectangle> positions) {
|
||||
|
||||
List<RectangleEntity> rectangleEntities = new ArrayList<>();
|
||||
positions.forEach(p -> {
|
||||
RectangleEntity re = new RectangleEntity();
|
||||
re.setTopLeftX(p.getTopLeft().getX());
|
||||
re.setTopLeftY(p.getTopLeft().getY());
|
||||
re.setWidth(p.getWidth());
|
||||
re.setHeight(p.getHeight());
|
||||
re.setPage(p.getPage());
|
||||
rectangleEntities.add(re);
|
||||
});
|
||||
return rectangleEntities;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
package com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.AnnotationEntityId;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.entity.annotations.ImportedAnnotationEntity;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImportedAnnotationStatus;
|
||||
|
||||
public interface ImportedAnnotationRepository extends JpaRepository<ImportedAnnotationEntity, AnnotationEntityId> {
|
||||
|
||||
List<ImportedAnnotationEntity> findByIdFileId(String fileId);
|
||||
|
||||
|
||||
@Modifying
|
||||
@Query("update ImportedAnnotationEntity m set m.processedDate = :processedDate, m.status = :annotationStatus, m.comment = :comment, m.user = :userId where m.id = :id")
|
||||
void updateStatus(AnnotationEntityId id, OffsetDateTime processedDate, ImportedAnnotationStatus annotationStatus,
|
||||
String comment, String userId);
|
||||
|
||||
}
|
||||
@ -2,6 +2,8 @@ package com.iqser.red.service.peristence.v1.server.service;
|
||||
|
||||
import com.google.common.hash.HashFunction;
|
||||
import com.google.common.hash.Hashing;
|
||||
import com.iqser.red.service.pdftron.redaction.v1.api.model.AnnotationExtractionResponse;
|
||||
import com.iqser.red.service.pdftron.redaction.v1.api.model.DocumentRequest;
|
||||
import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronOptimizeRequest;
|
||||
import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronOptimizeResponse;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient;
|
||||
@ -47,6 +49,7 @@ public class FileService {
|
||||
private final LegalBasisChangePersistenceService legalBasisChangePersistenceService;
|
||||
private final ResizeRedactionPersistenceService resizeRedactionPersistenceService;
|
||||
private final IndexingService indexingService;
|
||||
private final ImportedAnnotationPersistenceService importedAnnotationPersistenceService;
|
||||
|
||||
|
||||
public JSONPrimitive<String> upload(BinaryFileRequest request) {
|
||||
@ -68,7 +71,9 @@ public class FileService {
|
||||
}
|
||||
|
||||
try {
|
||||
PdfTronOptimizeResponse optimized = pdfTronRedactionClient.optimize(new PdfTronOptimizeRequest(request.getData()));
|
||||
AnnotationExtractionResponse optimized = pdfTronRedactionClient.optimizeGetAndRemoveAnnotations(new DocumentRequest(request.getData()));
|
||||
importedAnnotationPersistenceService.insert(fileId, optimized.getAnnotations());
|
||||
|
||||
if (optimized.getNumberOfPages() == 0) {
|
||||
throw new BadRequestException("Empty document");
|
||||
}
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
<properties>
|
||||
<redaction-service.version>3.56.0</redaction-service.version>
|
||||
<search-service.version>2.18.0</search-service.version>
|
||||
<pdftron-redaction-service.version>3.17.0</pdftron-redaction-service.version>
|
||||
<pdftron-redaction-service.version>3.28.0</pdftron-redaction-service.version>
|
||||
<redaction-report-service.version>3.19.0</redaction-report-service.version>
|
||||
</properties>
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user