DM-285: fully deprecated RedactionLog, added component rule file

* return 404, when component rule file hasn't been created yet
This commit is contained in:
Kilian Schuettler 2023-09-11 13:34:23 +02:00
parent 91b13c41ce
commit db40f5a1a9
6 changed files with 78 additions and 32 deletions

View File

@ -20,8 +20,8 @@ import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RedactionClient;
import com.iqser.red.service.persistence.management.v1.processor.exception.FileUploadException; import com.iqser.red.service.persistence.management.v1.processor.exception.FileUploadException;
import com.iqser.red.service.persistence.management.v1.processor.service.RulesValidationService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.AuditPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.RulesPersistenceService;
import com.iqser.red.service.persistence.service.v1.api.external.resource.RulesResource; import com.iqser.red.service.persistence.service.v1.api.external.resource.RulesResource;
@ -45,7 +45,7 @@ public class RulesController implements RulesResource {
private static final String DOWNLOAD_FILE_NAME = "rules.drl"; private static final String DOWNLOAD_FILE_NAME = "rules.drl";
private final RulesPersistenceService rulesPersistenceService; private final RulesPersistenceService rulesPersistenceService;
private final RedactionClient redactionServiceClient; private final RulesValidationService rulesValidationService;
private final AuditPersistenceService auditPersistenceService; private final AuditPersistenceService auditPersistenceService;
@ -53,7 +53,7 @@ public class RulesController implements RulesResource {
@PreAuthorize("hasAuthority('" + WRITE_RULES + "')") @PreAuthorize("hasAuthority('" + WRITE_RULES + "')")
public ResponseEntity<?> upload(@RequestBody RulesUploadRequest rules) { public ResponseEntity<?> upload(@RequestBody RulesUploadRequest rules) {
DroolsSyntaxValidation droolsSyntaxValidation = redactionServiceClient.testRules(rules.getRules()); DroolsSyntaxValidation droolsSyntaxValidation = rulesValidationService.validateRules(rules.getRuleFileType(), rules.getRules());
if (!droolsSyntaxValidation.isCompiled()) { if (!droolsSyntaxValidation.isCompiled()) {
var rulesSyntaxErrorMessages = droolsSyntaxValidation.getDroolsSyntaxErrorMessages() var rulesSyntaxErrorMessages = droolsSyntaxValidation.getDroolsSyntaxErrorMessages()
.stream() .stream()

View File

@ -0,0 +1,24 @@
package com.iqser.red.service.persistence.management.v1.processor.service;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.client.redactionservice.RedactionClient;
import com.iqser.red.service.persistence.service.v1.api.shared.model.RuleFileType;
import com.iqser.red.service.redaction.v1.model.DroolsSyntaxValidation;
import com.iqser.red.service.redaction.v1.model.RuleValidationModel;
import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class RulesValidationService {
private final RedactionClient redactionServiceClient;
public DroolsSyntaxValidation validateRules(RuleFileType ruleFileType, String rules) {
return redactionServiceClient.testRules(new RuleValidationModel(ruleFileType.name(), rules));
}
}

View File

@ -3,11 +3,8 @@ package com.iqser.red.service.persistence.service.v1.api.shared.model.analysislo
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationStatus;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
@ -31,7 +28,6 @@ public class EntityLogEntry {
String value; String value;
String reason; String reason;
String matchedRule; String matchedRule;
boolean rectangle;
String legalBasis; String legalBasis;
boolean imported; boolean imported;
@ -51,13 +47,11 @@ public class EntityLogEntry {
boolean imageHasTransparency; boolean imageHasTransparency;
boolean isDictionaryEntry; boolean dictionaryEntry;
boolean isDossierDictionaryEntry; boolean dossierDictionaryEntry;
boolean excluded; boolean excluded;
String sourceId;
@EqualsAndHashCode.Exclude @EqualsAndHashCode.Exclude
@Builder.Default @Builder.Default
List<Change> changes = new ArrayList<>(); List<Change> changes = new ArrayList<>();
@ -75,23 +69,4 @@ public class EntityLogEntry {
@Builder.Default @Builder.Default
Set<String> importedRedactionIntersections = new HashSet<>(); Set<String> importedRedactionIntersections = new HashSet<>();
public boolean lastChangeIsRemoved() {
return last(changes).map(c -> c.getType() == ChangeType.REMOVED).orElse(false);
}
public boolean isManuallyRemoved() {
return manualChanges != null && manualChanges.stream()
.anyMatch(mc -> mc.getManualRedactionType() == ManualRedactionType.REMOVE_LOCALLY && mc.getAnnotationStatus() == AnnotationStatus.APPROVED);
}
private <T> Optional<T> last(List<T> list) {
return list == null || list.isEmpty() ? Optional.empty() : Optional.of(list.get(list.size() - 1));
}
} }

View File

@ -6,5 +6,6 @@ public enum EntryType {
FALSE_POSITIVE, FALSE_POSITIVE,
RECOMMENDATION, RECOMMENDATION,
FALSE_RECOMMENDATION, FALSE_RECOMMENDATION,
IMAGE IMAGE,
AREA
} }

View File

@ -1,5 +1,7 @@
package com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog; package com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog;
import java.awt.geom.Rectangle2D;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@ -15,4 +17,48 @@ public class Position {
float[] rectangle; // x, y, w, h float[] rectangle; // x, y, w, h
int pageNumber; int pageNumber;
public Position(float x, float y, float w, float h, int pageNumber) {
this.rectangle = new float[]{x, y, w, h};
this.pageNumber = pageNumber;
}
public Position(Rectangle2D rectangle2D, int pageNumber) {
this.rectangle = new float[]{(float) rectangle2D.getX(), (float) rectangle2D.getY(), (float) rectangle2D.getWidth(), (float) rectangle2D.getHeight()};
this.pageNumber = pageNumber;
}
public Rectangle2D toRectangle2D() {
return new Rectangle2D.Float(x(), y(), w(), h());
}
public float x() {
return rectangle[0];
}
public float y() {
return rectangle[1];
}
public float w() {
return rectangle[2];
}
public float h() {
return rectangle[3];
}
} }

View File

@ -29,7 +29,7 @@
</modules> </modules>
<properties> <properties>
<redaction-service.version>4.112.0</redaction-service.version> <redaction-service.version>DM-285-1</redaction-service.version>
<search-service.version>2.71.0</search-service.version> <search-service.version>2.71.0</search-service.version>
<pdftron-redaction-service.version>4.29.0</pdftron-redaction-service.version> <pdftron-redaction-service.version>4.29.0</pdftron-redaction-service.version>
<redaction-report-service.version>4.13.0</redaction-report-service.version> <redaction-report-service.version>4.13.0</redaction-report-service.version>