Pull request #402: RED-4014: Renamed and added metrics
Merge in RED/redaction-service from RED-4014 to master * commit '6fb7600de2ab7a00d6071de3c701c3a7410e8fb7': RED-4014: Renamed and added metrics
This commit is contained in:
commit
20c7e19343
@ -58,7 +58,7 @@ public class AnalyzeService {
|
|||||||
private final ImportedRedactionService importedRedactionService;
|
private final ImportedRedactionService importedRedactionService;
|
||||||
|
|
||||||
|
|
||||||
@Timed("analyzeDocumentStructure")
|
@Timed("redactmanager_analyzeDocumentStructure")
|
||||||
public AnalyzeResult analyzeDocumentStructure(StructureAnalyzeRequest analyzeRequest) {
|
public AnalyzeResult analyzeDocumentStructure(StructureAnalyzeRequest analyzeRequest) {
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
@ -107,7 +107,7 @@ public class AnalyzeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Timed("reanalyze")
|
@Timed("redactmanager_reanalyze")
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public AnalyzeResult reanalyze(@RequestBody AnalyzeRequest analyzeRequest) {
|
public AnalyzeResult reanalyze(@RequestBody AnalyzeRequest analyzeRequest) {
|
||||||
|
|
||||||
@ -121,14 +121,10 @@ public class AnalyzeService {
|
|||||||
return analyze(analyzeRequest);
|
return analyze(analyzeRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
// var dis = System.currentTimeMillis();
|
|
||||||
DictionaryIncrement dictionaryIncrement = dictionaryService.getDictionaryIncrements(analyzeRequest.getDossierTemplateId(), new DictionaryVersion(redactionLog.getDictionaryVersion(), redactionLog.getDossierDictionaryVersion()), analyzeRequest.getDossierId());
|
DictionaryIncrement dictionaryIncrement = dictionaryService.getDictionaryIncrements(analyzeRequest.getDossierTemplateId(), new DictionaryVersion(redactionLog.getDictionaryVersion(), redactionLog.getDossierDictionaryVersion()), analyzeRequest.getDossierId());
|
||||||
// log.info("Dictionary Increment time time: {} ms", (System.currentTimeMillis() - dis));
|
|
||||||
|
|
||||||
// var fis = System.currentTimeMillis();
|
|
||||||
Set<Integer> sectionsToReanalyse = !analyzeRequest.getSectionsToReanalyse()
|
Set<Integer> sectionsToReanalyse = !analyzeRequest.getSectionsToReanalyse()
|
||||||
.isEmpty() ? analyzeRequest.getSectionsToReanalyse() : findSectionsToReanalyse(dictionaryIncrement, redactionLog, text, analyzeRequest);
|
.isEmpty() ? analyzeRequest.getSectionsToReanalyse() : findSectionsToReanalyse(dictionaryIncrement, redactionLog, text, analyzeRequest);
|
||||||
// log.info("Find sections time: {} ms", (System.currentTimeMillis() - fis));
|
|
||||||
|
|
||||||
if (sectionsToReanalyse.isEmpty()) {
|
if (sectionsToReanalyse.isEmpty()) {
|
||||||
return finalizeAnalysis(analyzeRequest, startTime, redactionLog, text, dictionaryIncrement.getDictionaryVersion(), true);
|
return finalizeAnalysis(analyzeRequest, startTime, redactionLog, text, dictionaryIncrement.getDictionaryVersion(), true);
|
||||||
@ -146,36 +142,26 @@ public class AnalyzeService {
|
|||||||
.filter(sectionText -> sectionsToReanalyse.contains(sectionText.getSectionNumber()))
|
.filter(sectionText -> sectionsToReanalyse.contains(sectionText.getSectionNumber()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
// long kis = System.currentTimeMillis();
|
|
||||||
KieContainer kieContainer = droolsExecutionService.updateRules(analyzeRequest.getDossierTemplateId());
|
KieContainer kieContainer = droolsExecutionService.updateRules(analyzeRequest.getDossierTemplateId());
|
||||||
// log.info("Kie time: {} ms", (System.currentTimeMillis() - kis));
|
|
||||||
|
|
||||||
// long dds = System.currentTimeMillis();
|
|
||||||
Dictionary dictionary = dictionaryService.getDeepCopyDictionary(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId());
|
Dictionary dictionary = dictionaryService.getDeepCopyDictionary(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId());
|
||||||
// log.info("Dict Time time: {} ms", (System.currentTimeMillis() - dds));
|
|
||||||
|
|
||||||
// long pis = System.currentTimeMillis();
|
|
||||||
PageEntities pageEntities = entityRedactionService.findEntities(dictionary, reanalysisSections, kieContainer, analyzeRequest, nerEntities);
|
PageEntities pageEntities = entityRedactionService.findEntities(dictionary, reanalysisSections, kieContainer, analyzeRequest, nerEntities);
|
||||||
// log.info("Find Entities time: {}", (System.currentTimeMillis() - pis));
|
|
||||||
|
|
||||||
// long crs = System.currentTimeMillis();
|
|
||||||
var newRedactionLogEntries = redactionLogCreatorService.createRedactionLog(pageEntities, text.getNumberOfPages(), analyzeRequest.getDossierTemplateId());
|
var newRedactionLogEntries = redactionLogCreatorService.createRedactionLog(pageEntities, text.getNumberOfPages(), analyzeRequest.getDossierTemplateId());
|
||||||
// log.info("Create Redaction-log time: {} ms", (System.currentTimeMillis() - crs));
|
|
||||||
// long prs = System.currentTimeMillis();
|
|
||||||
var importedRedactionFilteredEntries = importedRedactionService.processImportedRedactions(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId(), analyzeRequest.getFileId(), newRedactionLogEntries, false);
|
var importedRedactionFilteredEntries = importedRedactionService.processImportedRedactions(analyzeRequest.getDossierTemplateId(), analyzeRequest.getDossierId(), analyzeRequest.getFileId(), newRedactionLogEntries, false);
|
||||||
// log.info("Process imports time: {} ms", (System.currentTimeMillis() - prs));
|
|
||||||
redactionLog.getRedactionLogEntry()
|
redactionLog.getRedactionLogEntry()
|
||||||
.removeIf(entry -> sectionsToReanalyse.contains(entry.getSectionNumber()) && !entry.getType()
|
.removeIf(entry -> sectionsToReanalyse.contains(entry.getSectionNumber()) && !entry.getType()
|
||||||
.equals(IMPORTED_REDACTION_TYPE));
|
.equals(IMPORTED_REDACTION_TYPE));
|
||||||
redactionLog.getRedactionLogEntry().addAll(importedRedactionFilteredEntries);
|
redactionLog.getRedactionLogEntry().addAll(importedRedactionFilteredEntries);
|
||||||
|
|
||||||
// var fls = System.currentTimeMillis();
|
|
||||||
// log.info("Finalize time: {} ms", (System.currentTimeMillis() - fls));
|
|
||||||
return finalizeAnalysis(analyzeRequest, startTime, redactionLog, text, dictionaryIncrement.getDictionaryVersion(), true);
|
return finalizeAnalysis(analyzeRequest, startTime, redactionLog, text, dictionaryIncrement.getDictionaryVersion(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Timed("analyze")
|
@Timed("redactmanager_analyze")
|
||||||
public AnalyzeResult analyze(AnalyzeRequest analyzeRequest) {
|
public AnalyzeResult analyze(AnalyzeRequest analyzeRequest) {
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
@ -208,6 +194,7 @@ public class AnalyzeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_findSectionsToReanalyse")
|
||||||
private Set<Integer> findSectionsToReanalyse(DictionaryIncrement dictionaryIncrement, RedactionLog redactionLog,
|
private Set<Integer> findSectionsToReanalyse(DictionaryIncrement dictionaryIncrement, RedactionLog redactionLog,
|
||||||
Text text, AnalyzeRequest analyzeRequest) {
|
Text text, AnalyzeRequest analyzeRequest) {
|
||||||
|
|
||||||
@ -225,7 +212,6 @@ public class AnalyzeService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// long ss = System.currentTimeMillis();
|
|
||||||
|
|
||||||
var dictionaryIncrementsSearch = new SearchImplementation(dictionaryIncrement.getValues().stream()
|
var dictionaryIncrementsSearch = new SearchImplementation(dictionaryIncrement.getValues().stream()
|
||||||
.map(DictionaryIncrementValue::getValue).collect(Collectors.toList()), true);
|
.map(DictionaryIncrementValue::getValue).collect(Collectors.toList()), true);
|
||||||
@ -237,7 +223,6 @@ public class AnalyzeService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// log.info("Section Find time: {}", (System.currentTimeMillis() - ss));
|
|
||||||
|
|
||||||
log.info("Should reanalyze {} sections for request: {}, took: {}", sectionsToReanalyse.size(), analyzeRequest, System.currentTimeMillis() - start);
|
log.info("Should reanalyze {} sections for request: {}, took: {}", sectionsToReanalyse.size(), analyzeRequest, System.currentTimeMillis() - start);
|
||||||
|
|
||||||
|
|||||||
@ -5,9 +5,12 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ty
|
|||||||
import com.iqser.red.service.redaction.v1.server.client.DictionaryClient;
|
import com.iqser.red.service.redaction.v1.server.client.DictionaryClient;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.Dictionary;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.Dictionary;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.*;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.*;
|
||||||
|
|
||||||
import feign.FeignException;
|
import feign.FeignException;
|
||||||
|
import io.micrometer.core.annotation.Timed;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.SerializationUtils;
|
import org.apache.commons.lang3.SerializationUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -17,7 +20,6 @@ import java.util.List;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@ -29,6 +31,7 @@ public class DictionaryService {
|
|||||||
private final Map<String, DictionaryRepresentation> dictionariesByDossier = new HashMap<>();
|
private final Map<String, DictionaryRepresentation> dictionariesByDossier = new HashMap<>();
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_updateDictionary")
|
||||||
public DictionaryVersion updateDictionary(String dossierTemplateId, String dossierId) {
|
public DictionaryVersion updateDictionary(String dossierTemplateId, String dossierId) {
|
||||||
|
|
||||||
log.info("Updating dictionary data for dossierTemplate {} and dossier {}", dossierTemplateId, dossierId);
|
log.info("Updating dictionary data for dossierTemplate {} and dossier {}", dossierTemplateId, dossierId);
|
||||||
@ -44,11 +47,16 @@ public class DictionaryService {
|
|||||||
updateDictionaryEntry(dossierTemplateId, dossierDictionaryVersion, getVersion(dossierDictionary), dossierId);
|
updateDictionaryEntry(dossierTemplateId, dossierDictionaryVersion, getVersion(dossierDictionary), dossierId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return DictionaryVersion.builder().dossierTemplateVersion(dossierTemplateDictionaryVersion).dossierVersion(dossierDictionaryVersion).build();
|
return DictionaryVersion.builder()
|
||||||
|
.dossierTemplateVersion(dossierTemplateDictionaryVersion)
|
||||||
|
.dossierVersion(dossierDictionaryVersion)
|
||||||
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public DictionaryIncrement getDictionaryIncrements(String dossierTemplateId, DictionaryVersion fromVersion, String dossierId) {
|
@Timed("redactmanager_getDictionaryIncrements")
|
||||||
|
public DictionaryIncrement getDictionaryIncrements(String dossierTemplateId, DictionaryVersion fromVersion,
|
||||||
|
String dossierId) {
|
||||||
|
|
||||||
DictionaryVersion version = updateDictionary(dossierTemplateId, dossierId);
|
DictionaryVersion version = updateDictionary(dossierTemplateId, dossierId);
|
||||||
|
|
||||||
@ -102,58 +110,69 @@ public class DictionaryService {
|
|||||||
try {
|
try {
|
||||||
DictionaryRepresentation dictionaryRepresentation = new DictionaryRepresentation();
|
DictionaryRepresentation dictionaryRepresentation = new DictionaryRepresentation();
|
||||||
|
|
||||||
var typeResponse = dossierId == null ? dictionaryClient.getAllTypesForDossierTemplate(dossierTemplateId, false)
|
var typeResponse = dossierId == null ? dictionaryClient.getAllTypesForDossierTemplate(dossierTemplateId, false) : dictionaryClient.getAllTypesForDossier(dossierId, false);
|
||||||
: dictionaryClient.getAllTypesForDossier(dossierId, false);
|
|
||||||
if (CollectionUtils.isNotEmpty(typeResponse)) {
|
if (CollectionUtils.isNotEmpty(typeResponse)) {
|
||||||
|
|
||||||
List<DictionaryModel> dictionary = typeResponse
|
List<DictionaryModel> dictionary = typeResponse.stream().map(t -> {
|
||||||
.stream()
|
|
||||||
.map(t -> {
|
|
||||||
|
|
||||||
Optional<DictionaryModel> oldModel;
|
Optional<DictionaryModel> oldModel;
|
||||||
if (dossierId == null) {
|
if (dossierId == null) {
|
||||||
var representation = dictionariesByDossierTemplate.get(dossierTemplateId);
|
var representation = dictionariesByDossierTemplate.get(dossierTemplateId);
|
||||||
oldModel = representation != null ? representation.getDictionary().stream().filter(f -> f.getType().equals(t.getType())).findAny() : Optional.empty();
|
oldModel = representation != null ? representation.getDictionary()
|
||||||
} else {
|
.stream()
|
||||||
var representation = dictionariesByDossier.get(dossierId);
|
.filter(f -> f.getType().equals(t.getType()))
|
||||||
oldModel = representation != null ? representation.getDictionary().stream().filter(f -> f.getType().equals(t.getType())).findAny() : Optional.empty();
|
.findAny() : Optional.empty();
|
||||||
}
|
} else {
|
||||||
|
var representation = dictionariesByDossier.get(dossierId);
|
||||||
|
oldModel = representation != null ? representation.getDictionary()
|
||||||
|
.stream()
|
||||||
|
.filter(f -> f.getType().equals(t.getType()))
|
||||||
|
.findAny() : Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
Set<DictionaryEntry> entries = new HashSet<>();
|
Set<DictionaryEntry> entries = new HashSet<>();
|
||||||
Set<DictionaryEntry> falsePositives = new HashSet<>();
|
Set<DictionaryEntry> falsePositives = new HashSet<>();
|
||||||
Set<DictionaryEntry> falseRecommendations = new HashSet<>();
|
Set<DictionaryEntry> falseRecommendations = new HashSet<>();
|
||||||
|
|
||||||
DictionaryEntries newEntries = getEntries(t.getId(), currentVersion);
|
DictionaryEntries newEntries = getEntries(t.getId(), currentVersion);
|
||||||
|
|
||||||
var newValues = newEntries.getEntries().stream().map(DictionaryEntry::getValue).collect(Collectors.toSet());
|
var newValues = newEntries.getEntries()
|
||||||
var newFalsePositivesValues = newEntries.getFalsePositives().stream().map(DictionaryEntry::getValue).collect(Collectors.toSet());
|
.stream()
|
||||||
var newFalseRecommendationsValues = newEntries.getFalseRecommendations().stream().map(DictionaryEntry::getValue).collect(Collectors.toSet());
|
.map(DictionaryEntry::getValue)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
var newFalsePositivesValues = newEntries.getFalsePositives()
|
||||||
|
.stream()
|
||||||
|
.map(DictionaryEntry::getValue)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
var newFalseRecommendationsValues = newEntries.getFalseRecommendations()
|
||||||
|
.stream()
|
||||||
|
.map(DictionaryEntry::getValue)
|
||||||
|
.collect(Collectors.toSet());
|
||||||
|
|
||||||
|
oldModel.ifPresent(oldDictionaryModel -> {
|
||||||
|
|
||||||
oldModel.ifPresent(oldDictionaryModel -> {
|
});
|
||||||
|
// add old entries from existing DictionaryModel
|
||||||
|
oldModel.ifPresent(dictionaryModel -> entries.addAll(dictionaryModel.getEntries()
|
||||||
|
.stream()
|
||||||
|
.filter(f -> !newValues.contains(f.getValue()))
|
||||||
|
.collect(Collectors.toList())));
|
||||||
|
oldModel.ifPresent(dictionaryModel -> falsePositives.addAll(dictionaryModel.getFalsePositives()
|
||||||
|
.stream()
|
||||||
|
.filter(f -> !newFalsePositivesValues.contains(f.getValue()))
|
||||||
|
.collect(Collectors.toList())));
|
||||||
|
oldModel.ifPresent(dictionaryModel -> falseRecommendations.addAll(dictionaryModel.getFalseRecommendations()
|
||||||
|
.stream()
|
||||||
|
.filter(f -> !newFalseRecommendationsValues.contains(f.getValue()))
|
||||||
|
.collect(Collectors.toList())));
|
||||||
|
|
||||||
});
|
// Add Increments
|
||||||
// add old entries from existing DictionaryModel
|
entries.addAll(newEntries.getEntries());
|
||||||
oldModel.ifPresent(dictionaryModel -> entries.addAll(dictionaryModel.getEntries().stream().filter(
|
falsePositives.addAll(newEntries.getFalsePositives());
|
||||||
f -> !newValues.contains(f.getValue())).collect(Collectors.toList())
|
falseRecommendations.addAll(newEntries.getFalseRecommendations());
|
||||||
));
|
|
||||||
oldModel.ifPresent(dictionaryModel -> falsePositives.addAll(dictionaryModel.getFalsePositives().stream().filter(
|
|
||||||
f -> !newFalsePositivesValues.contains(f.getValue())).collect(Collectors.toList())
|
|
||||||
));
|
|
||||||
oldModel.ifPresent(dictionaryModel -> falseRecommendations.addAll(dictionaryModel.getFalseRecommendations().stream().filter(
|
|
||||||
f -> !newFalseRecommendationsValues.contains(f.getValue())).collect(Collectors.toList())
|
|
||||||
));
|
|
||||||
|
|
||||||
// Add Increments
|
return new DictionaryModel(t.getType(), t.getRank(), convertColor(t.getHexColor()), t.isCaseInsensitive(), t.isHint(), entries, falsePositives, falseRecommendations, dossierId != null);
|
||||||
entries.addAll(newEntries.getEntries());
|
}).sorted(Comparator.comparingInt(DictionaryModel::getRank).reversed()).collect(Collectors.toList());
|
||||||
falsePositives.addAll(newEntries.getFalsePositives());
|
|
||||||
falseRecommendations.addAll(newEntries.getFalseRecommendations());
|
|
||||||
|
|
||||||
return new DictionaryModel(t.getType(), t.getRank(), convertColor(t.getHexColor()), t.isCaseInsensitive(), t
|
|
||||||
.isHint(), entries, falsePositives, falseRecommendations, dossierId != null);
|
|
||||||
})
|
|
||||||
.sorted(Comparator.comparingInt(DictionaryModel::getRank).reversed())
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
dictionary.forEach(dm -> dictionaryRepresentation.getLocalAccessMap().put(dm.getType(), dm));
|
dictionary.forEach(dm -> dictionaryRepresentation.getLocalAccessMap().put(dm.getType(), dm));
|
||||||
|
|
||||||
@ -193,11 +212,11 @@ public class DictionaryService {
|
|||||||
falsePositives.forEach(entry -> entry.setValue(entry.getValue().toLowerCase(Locale.ROOT)));
|
falsePositives.forEach(entry -> entry.setValue(entry.getValue().toLowerCase(Locale.ROOT)));
|
||||||
falseRecommendations.forEach(entry -> entry.setValue(entry.getValue().toLowerCase(Locale.ROOT)));
|
falseRecommendations.forEach(entry -> entry.setValue(entry.getValue().toLowerCase(Locale.ROOT)));
|
||||||
}
|
}
|
||||||
|
log.info("Dictionary update returned {} entries {} falsePositives and {} falseRecommendations for type {}", entries.size(), falsePositives.size(), falseRecommendations.size(), type.getType());
|
||||||
return new DictionaryEntries(entries, falsePositives, falseRecommendations);
|
return new DictionaryEntries(entries, falsePositives, falseRecommendations);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private float[] convertColor(String hex) {
|
private float[] convertColor(String hex) {
|
||||||
|
|
||||||
Color color = Color.decode(hex);
|
Color color = Color.decode(hex);
|
||||||
@ -225,6 +244,7 @@ public class DictionaryService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_getDeepCopyDictionary")
|
||||||
public Dictionary getDeepCopyDictionary(String dossierTemplateId, String dossierId) {
|
public Dictionary getDeepCopyDictionary(String dossierTemplateId, String dossierId) {
|
||||||
|
|
||||||
List<DictionaryModel> copy = new ArrayList<>();
|
List<DictionaryModel> copy = new ArrayList<>();
|
||||||
@ -244,7 +264,12 @@ public class DictionaryService {
|
|||||||
dossierDictionaryVersion = dossierRepresentation.getDictionaryVersion();
|
dossierDictionaryVersion = dossierRepresentation.getDictionaryVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Dictionary(copy.stream().sorted(Comparator.comparingInt(DictionaryModel::getRank).reversed()).collect(Collectors.toList()), DictionaryVersion.builder().dossierTemplateVersion(dossierTemplateRepresentation.getDictionaryVersion()).dossierVersion(dossierDictionaryVersion).build());
|
return new Dictionary(copy.stream()
|
||||||
|
.sorted(Comparator.comparingInt(DictionaryModel::getRank).reversed())
|
||||||
|
.collect(Collectors.toList()), DictionaryVersion.builder()
|
||||||
|
.dossierTemplateVersion(dossierTemplateRepresentation.getDictionaryVersion())
|
||||||
|
.dossierVersion(dossierDictionaryVersion)
|
||||||
|
.build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -255,10 +280,12 @@ public class DictionaryService {
|
|||||||
|
|
||||||
|
|
||||||
private Long getVersion(DictionaryRepresentation dictionaryRepresentation) {
|
private Long getVersion(DictionaryRepresentation dictionaryRepresentation) {
|
||||||
|
|
||||||
if (dictionaryRepresentation == null) {
|
if (dictionaryRepresentation == null) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
return dictionaryRepresentation.getDictionaryVersion();
|
return dictionaryRepresentation.getDictionaryVersion();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,8 @@ package com.iqser.red.service.redaction.v1.server.redaction.service;
|
|||||||
import com.iqser.red.service.redaction.v1.server.client.RulesClient;
|
import com.iqser.red.service.redaction.v1.server.client.RulesClient;
|
||||||
import com.iqser.red.service.redaction.v1.server.exception.RulesValidationException;
|
import com.iqser.red.service.redaction.v1.server.exception.RulesValidationException;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.Section;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.Section;
|
||||||
|
|
||||||
|
import io.micrometer.core.annotation.Timed;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.kie.api.KieServices;
|
import org.kie.api.KieServices;
|
||||||
@ -41,6 +43,7 @@ public class DroolsExecutionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_executeRules")
|
||||||
public Section executeRules(KieContainer kieContainer, Section section) {
|
public Section executeRules(KieContainer kieContainer, Section section) {
|
||||||
|
|
||||||
KieSession kieSession = kieContainer.newKieSession();
|
KieSession kieSession = kieContainer.newKieSession();
|
||||||
|
|||||||
@ -37,6 +37,7 @@ import com.iqser.red.service.redaction.v1.server.redaction.utils.FindEntityDetai
|
|||||||
import com.iqser.red.service.redaction.v1.server.redaction.utils.IdBuilder;
|
import com.iqser.red.service.redaction.v1.server.redaction.utils.IdBuilder;
|
||||||
import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings;
|
import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings;
|
||||||
|
|
||||||
|
import io.micrometer.core.annotation.Timed;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@ -50,6 +51,7 @@ public class EntityRedactionService {
|
|||||||
private final SurroundingWordsService surroundingWordsService;
|
private final SurroundingWordsService surroundingWordsService;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public PageEntities findEntities(Dictionary dictionary, List<SectionText> sectionTexts, KieContainer kieContainer,
|
public PageEntities findEntities(Dictionary dictionary, List<SectionText> sectionTexts, KieContainer kieContainer,
|
||||||
AnalyzeRequest analyzeRequest, NerEntities nerEntities) {
|
AnalyzeRequest analyzeRequest, NerEntities nerEntities) {
|
||||||
|
|
||||||
@ -236,6 +238,7 @@ public class EntityRedactionService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_findEntities")
|
||||||
private Entities findEntities(SearchableText searchableText, String headline, int sectionNumber,
|
private Entities findEntities(SearchableText searchableText, String headline, int sectionNumber,
|
||||||
Dictionary dictionary, boolean local, NerEntities nerEntities,
|
Dictionary dictionary, boolean local, NerEntities nerEntities,
|
||||||
List<Integer> cellStarts, ManualRedactions manualRedactions) {
|
List<Integer> cellStarts, ManualRedactions manualRedactions) {
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import com.iqser.red.service.redaction.v1.model.Rectangle;
|
|||||||
import com.iqser.red.service.redaction.v1.model.RedactionLogEntry;
|
import com.iqser.red.service.redaction.v1.model.RedactionLogEntry;
|
||||||
import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService;
|
import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService;
|
||||||
|
|
||||||
|
import io.micrometer.core.annotation.Timed;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@ -23,6 +24,7 @@ public class ImportedRedactionService {
|
|||||||
private final RedactionStorageService redactionStorageService;
|
private final RedactionStorageService redactionStorageService;
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_processImportedRedactions")
|
||||||
public List<RedactionLogEntry> processImportedRedactions(String dossierTemplateId, String dossierId, String fileId,
|
public List<RedactionLogEntry> processImportedRedactions(String dossierTemplateId, String dossierId, String fileId,
|
||||||
List<RedactionLogEntry> redactionLogEntries,
|
List<RedactionLogEntry> redactionLogEntries,
|
||||||
boolean addImportedRedactions) {
|
boolean addImportedRedactions) {
|
||||||
|
|||||||
@ -24,6 +24,7 @@ import com.iqser.red.service.redaction.v1.server.redaction.utils.FindEntityDetai
|
|||||||
import com.iqser.red.service.redaction.v1.server.redaction.utils.SearchImplementation;
|
import com.iqser.red.service.redaction.v1.server.redaction.utils.SearchImplementation;
|
||||||
import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService;
|
import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService;
|
||||||
|
|
||||||
|
import io.micrometer.core.annotation.Timed;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@ -35,7 +36,7 @@ public class ManualRedactionSurroundingTextService {
|
|||||||
private final RedactionStorageService redactionStorageService;
|
private final RedactionStorageService redactionStorageService;
|
||||||
private final SurroundingWordsService surroundingWordsService;
|
private final SurroundingWordsService surroundingWordsService;
|
||||||
|
|
||||||
|
@Timed("redactmanager_SurroundingTextAnalysis")
|
||||||
public AnalyzeResult addSurroundingText(String dossierId, String fileId, ManualRedactions manualRedactions) {
|
public AnalyzeResult addSurroundingText(String dossierId, String fileId, ManualRedactions manualRedactions) {
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
|||||||
@ -2,6 +2,8 @@ package com.iqser.red.service.redaction.v1.server.redaction.service;
|
|||||||
|
|
||||||
import com.iqser.red.service.redaction.v1.model.*;
|
import com.iqser.red.service.redaction.v1.model.*;
|
||||||
import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService;
|
import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService;
|
||||||
|
|
||||||
|
import io.micrometer.core.annotation.Timed;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -18,6 +20,7 @@ public class RedactionChangeLogService {
|
|||||||
private final RedactionStorageService redactionStorageService;
|
private final RedactionStorageService redactionStorageService;
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_computeChanges")
|
||||||
public RedactionLogChanges computeChanges(String dossierId, String fileId, RedactionLog currentRedactionLog, int analysisNumber) {
|
public RedactionLogChanges computeChanges(String dossierId, String fileId, RedactionLog currentRedactionLog, int analysisNumber) {
|
||||||
|
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
|
|||||||
@ -22,6 +22,7 @@ import com.iqser.red.service.redaction.v1.server.redaction.model.Image;
|
|||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.PageEntities;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.PageEntities;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.utils.IdBuilder;
|
import com.iqser.red.service.redaction.v1.server.redaction.utils.IdBuilder;
|
||||||
|
|
||||||
|
import io.micrometer.core.annotation.Timed;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
@ -33,6 +34,7 @@ public class RedactionLogCreatorService {
|
|||||||
private final DictionaryService dictionaryService;
|
private final DictionaryService dictionaryService;
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_createRedactionLog")
|
||||||
public List<RedactionLogEntry> createRedactionLog(PageEntities pageEntities, int numberOfPages,
|
public List<RedactionLogEntry> createRedactionLog(PageEntities pageEntities, int numberOfPages,
|
||||||
String dossierTemplateId) {
|
String dossierTemplateId) {
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,8 @@ import com.iqser.red.service.redaction.v1.model.Rectangle;
|
|||||||
import com.iqser.red.service.redaction.v1.model.*;
|
import com.iqser.red.service.redaction.v1.model.*;
|
||||||
import com.iqser.red.service.redaction.v1.server.exception.NotFoundException;
|
import com.iqser.red.service.redaction.v1.server.exception.NotFoundException;
|
||||||
import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService;
|
import com.iqser.red.service.redaction.v1.server.storage.RedactionStorageService;
|
||||||
|
|
||||||
|
import io.micrometer.core.annotation.Timed;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@ -34,6 +36,8 @@ public class RedactionLogMergeService {
|
|||||||
|
|
||||||
private final RedactionStorageService redactionStorageService;
|
private final RedactionStorageService redactionStorageService;
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_getMergedRedactionLog")
|
||||||
public RedactionLog provideRedactionLog(RedactionRequest redactionRequest) {
|
public RedactionLog provideRedactionLog(RedactionRequest redactionRequest) {
|
||||||
log.debug("Requested preview for: {}", redactionRequest);
|
log.debug("Requested preview for: {}", redactionRequest);
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,8 @@ import com.iqser.red.service.redaction.v1.server.redaction.model.Dictionary;
|
|||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.Entity;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.Entity;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.SearchableText;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.SearchableText;
|
||||||
import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings;
|
import com.iqser.red.service.redaction.v1.server.settings.RedactionServiceSettings;
|
||||||
|
|
||||||
|
import io.micrometer.core.annotation.Timed;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
@ -19,6 +21,7 @@ public class SurroundingWordsService {
|
|||||||
private final RedactionServiceSettings redactionServiceSettings;
|
private final RedactionServiceSettings redactionServiceSettings;
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_addSurroundingText")
|
||||||
public void addSurroundingText(Set<Entity> entities, SearchableText searchableText, Dictionary dictionary) {
|
public void addSurroundingText(Set<Entity> entities, SearchableText searchableText, Dictionary dictionary) {
|
||||||
|
|
||||||
if (entities.isEmpty()) {
|
if (entities.isEmpty()) {
|
||||||
@ -39,6 +42,7 @@ public class SurroundingWordsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_addSurroundingText_tables")
|
||||||
public void addSurroundingText(Set<Entity> entities, SearchableText searchableText, Dictionary dictionary,
|
public void addSurroundingText(Set<Entity> entities, SearchableText searchableText, Dictionary dictionary,
|
||||||
List<Integer> cellstarts) {
|
List<Integer> cellstarts) {
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,8 @@ package com.iqser.red.service.redaction.v1.server.redaction.utils;
|
|||||||
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions;
|
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ManualRedactions;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.Dictionary;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.Dictionary;
|
||||||
import com.iqser.red.service.redaction.v1.server.redaction.model.*;
|
import com.iqser.red.service.redaction.v1.server.redaction.model.*;
|
||||||
|
|
||||||
|
import io.micrometer.core.annotation.Timed;
|
||||||
import lombok.experimental.UtilityClass;
|
import lombok.experimental.UtilityClass;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
|
|||||||
@ -12,10 +12,13 @@ import com.iqser.red.service.redaction.v1.server.client.model.NerEntities;
|
|||||||
import com.iqser.red.service.redaction.v1.server.exception.NotFoundException;
|
import com.iqser.red.service.redaction.v1.server.exception.NotFoundException;
|
||||||
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
|
import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist;
|
||||||
import com.iqser.red.storage.commons.service.StorageService;
|
import com.iqser.red.storage.commons.service.StorageService;
|
||||||
|
|
||||||
|
import io.micrometer.core.annotation.Timed;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
|
||||||
import org.springframework.core.io.InputStreamResource;
|
import org.springframework.core.io.InputStreamResource;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
@ -41,21 +44,6 @@ public class RedactionStorageService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@SneakyThrows
|
|
||||||
public void storeObject(String dossierId, String fileId, FileType fileType, Object any) {
|
|
||||||
var baos = new ByteArrayOutputStream();
|
|
||||||
try {
|
|
||||||
dslJson.serialize(any, baos);
|
|
||||||
} catch (com.dslplatform.json.SerializationException e){
|
|
||||||
// Fails on file 49 Cyprodinil - EU AIR3 - MCA Section 8 Supplement - Ecotoxicological studies on the active substance.pdf
|
|
||||||
var bytes = objectMapper.writeValueAsBytes(any);
|
|
||||||
storageService.storeObject(StorageIdUtils.getStorageId(dossierId, fileId, fileType), bytes);
|
|
||||||
dslJson.newWriter();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
storageService.storeObject(StorageIdUtils.getStorageId(dossierId, fileId, fileType), baos.toByteArray());
|
|
||||||
}
|
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public void storeObject(String dossierId, String fileId, FileType fileType, InputStream inputStream) {
|
public void storeObject(String dossierId, String fileId, FileType fileType, InputStream inputStream) {
|
||||||
|
|
||||||
@ -63,6 +51,33 @@ public class RedactionStorageService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
@Timed("redactmanager_storeObject")
|
||||||
|
public void storeObject(String dossierId, String fileId, FileType fileType, Object any) {
|
||||||
|
|
||||||
|
var bytes = serializeObject(any);
|
||||||
|
storageService.storeObject(StorageIdUtils.getStorageId(dossierId, fileId, fileType), bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
@Timed("redactmanager_serializeObject")
|
||||||
|
private byte[] serializeObject(Object any) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
var baos = new ByteArrayOutputStream();
|
||||||
|
dslJson.serialize(any, baos);
|
||||||
|
return baos.toByteArray();
|
||||||
|
} catch (com.dslplatform.json.SerializationException e) {
|
||||||
|
// Fails on file 49 Cyprodinil - EU AIR3 - MCA Section 8 Supplement - Ecotoxicological studies on the active substance.pdf
|
||||||
|
var bytes = objectMapper.writeValueAsBytes(any);
|
||||||
|
dslJson.newWriter();
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_getImportedRedactions")
|
||||||
public ImportedRedactions getImportedRedactions(String dossierId, String fileId) {
|
public ImportedRedactions getImportedRedactions(String dossierId, String fileId) {
|
||||||
|
|
||||||
InputStreamResource inputStreamResource;
|
InputStreamResource inputStreamResource;
|
||||||
@ -73,6 +88,13 @@ public class RedactionStorageService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return deserializeImportedRedactions(inputStreamResource);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_deserializeImportedRedactions")
|
||||||
|
private ImportedRedactions deserializeImportedRedactions(InputStreamResource inputStreamResource) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return dslJson.deserialize(ImportedRedactions.class, inputStreamResource.getInputStream());
|
return dslJson.deserialize(ImportedRedactions.class, inputStreamResource.getInputStream());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@ -81,6 +103,7 @@ public class RedactionStorageService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_getRedactionLog")
|
||||||
public RedactionLog getRedactionLog(String dossierId, String fileId) {
|
public RedactionLog getRedactionLog(String dossierId, String fileId) {
|
||||||
|
|
||||||
InputStreamResource inputStreamResource;
|
InputStreamResource inputStreamResource;
|
||||||
@ -91,6 +114,13 @@ public class RedactionStorageService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return deserializeRedactionLog(inputStreamResource);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_deserializeRedactionLog")
|
||||||
|
private RedactionLog deserializeRedactionLog(InputStreamResource inputStreamResource) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return dslJson.deserialize(RedactionLog.class, inputStreamResource.getInputStream());
|
return dslJson.deserialize(RedactionLog.class, inputStreamResource.getInputStream());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@ -99,6 +129,7 @@ public class RedactionStorageService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_deserializeRedactionLog")
|
||||||
public Text getText(String dossierId, String fileId) {
|
public Text getText(String dossierId, String fileId) {
|
||||||
|
|
||||||
InputStreamResource inputStreamResource;
|
InputStreamResource inputStreamResource;
|
||||||
@ -109,6 +140,13 @@ public class RedactionStorageService {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return deserializeText(inputStreamResource);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_deserializeText")
|
||||||
|
private Text deserializeText(InputStreamResource inputStreamResource) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return dslJson.deserialize(Text.class, inputStreamResource.getInputStream());
|
return dslJson.deserialize(Text.class, inputStreamResource.getInputStream());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@ -117,6 +155,7 @@ public class RedactionStorageService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_getNerEntities")
|
||||||
public NerEntities getNerEntities(String dossierId, String fileId) {
|
public NerEntities getNerEntities(String dossierId, String fileId) {
|
||||||
|
|
||||||
InputStreamResource inputStreamResource;
|
InputStreamResource inputStreamResource;
|
||||||
@ -126,6 +165,13 @@ public class RedactionStorageService {
|
|||||||
throw new NotFoundException("NER Entities are not available.");
|
throw new NotFoundException("NER Entities are not available.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return deserializeNerEntities(inputStreamResource);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_deserializeNerEntities")
|
||||||
|
private NerEntities deserializeNerEntities(InputStreamResource inputStreamResource) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return dslJson.deserialize(NerEntities.class, inputStreamResource.getInputStream());
|
return dslJson.deserialize(NerEntities.class, inputStreamResource.getInputStream());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@ -134,15 +180,27 @@ public class RedactionStorageService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_getSectionGrid")
|
||||||
public SectionGrid getSectionGrid(String dossierId, String fileId) {
|
public SectionGrid getSectionGrid(String dossierId, String fileId) {
|
||||||
|
|
||||||
|
InputStreamResource inputStreamResource;
|
||||||
try {
|
try {
|
||||||
var sectionGrid = storageService.getObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.SECTION_GRID));
|
inputStreamResource = storageService.getObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.SECTION_GRID));
|
||||||
return dslJson.deserialize(SectionGrid.class, sectionGrid.getInputStream());
|
|
||||||
} catch (StorageObjectDoesNotExist e) {
|
} catch (StorageObjectDoesNotExist e) {
|
||||||
throw new NotFoundException("Section Grid is not available.");
|
throw new NotFoundException("Section Grid is not available.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return deserializeSectionGrid(inputStreamResource);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Timed("redactmanager_deserializeSectionGrid")
|
||||||
|
private SectionGrid deserializeSectionGrid(InputStreamResource inputStreamResource) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
return dslJson.deserialize(SectionGrid.class, inputStreamResource.getInputStream());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException("Could not convert RedactionLog", e);
|
throw new RuntimeException("Could not convert SectionGrid", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user