RED-2200 - Dossier Template export and import

- modification to search by name for watermarks, dossier states and types (type) in case of updating existing dossier template
This commit is contained in:
devplant 2022-09-15 12:58:19 +03:00
parent ab27eaad98
commit 6e45a657bc

View File

@ -5,7 +5,10 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.ColorsEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.FileAttributesGeneralConfigurationEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.TypeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.WatermarkEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierStatusEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierTemplateEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
@ -67,6 +70,7 @@ public class DossierTemplateImportService {
private final DossierAttributeConfigPersistenceService dossierAttributeConfigPersistenceService;
private final FileAttributeConfigPersistenceService fileAttributeConfigPersistenceService;
private final ColorsService colorsService;
private final DictionaryPersistenceService dictionaryPersistenceService;
private final DossierStatusPersistenceService dossierStatusPersistenceService;
private final WatermarkService watermarkService;
private final ReportTemplateService reportTemplateService;
@ -94,6 +98,72 @@ public class DossierTemplateImportService {
dossierTemplate.get().setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(dossierTemplate.get()).name()));
// set colors
this.setColors(dossierTemplateId, request.getColors());
// set watermarks
if (CollectionUtils.isNotEmpty(request.getWatermarks())) {
Set<String> toSetWatermarks = request.getWatermarks().stream().map(Watermark::getName).filter(Objects::nonNull).collect(Collectors.toSet());
var currentWatermarkConfigs = watermarkService.getWatermarksForDossierTemplateId(dossierTemplateId);
Set<WatermarkEntity> configsToRemove = currentWatermarkConfigs.stream().filter(c -> !toSetWatermarks.contains(c.getName())).collect(Collectors.toSet());
var watermarkNameToEntity = currentWatermarkConfigs.stream().collect(Collectors.toMap(WatermarkEntity::getName, Function.identity()));
request.getWatermarks().forEach(watermark -> {
try {
if (!watermarkNameToEntity.isEmpty() && watermarkNameToEntity.get(watermark.getName()) != null) {
watermark.setId(watermarkNameToEntity.get(watermark.getName()).getId());
}
watermarkService.createOrUpdateWatermark(watermark);
} catch (BadRequestException e) {
log.debug(" Conflict while validating watermark: " + watermark.getId());
}
});
configsToRemove.forEach(watermark -> watermarkService.deleteWatermark(watermark.getId()));
}
// update the types
if (CollectionUtils.isNotEmpty(request.getTypes())) {
Set<String> toSetTypes = request.getTypes().stream().map(Type::getType).filter(Objects::nonNull).collect(Collectors.toSet());
List<TypeEntity> currentTypes = dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplateId, true);
Set<TypeEntity> typesToRemove = currentTypes.stream().filter(c -> !toSetTypes.contains(c.getType())).collect(Collectors.toSet());
var typeToEntityMap = currentTypes.stream().collect(Collectors.toMap(TypeEntity::getType, Function.identity()));
for (var type : request.getTypes()) {
type.setDossierTemplateId(dossierTemplateId);
String typeId;
if (!typeToEntityMap.isEmpty() && typeToEntityMap.get(type.getType()) != null) {
typeId = typeToEntityMap.get(type.getType()).getId();
dictionaryService.updateTypeValue(typeId, type);
} else {
var returnedType = dictionaryService.addType(type);
typeId = returnedType.getTypeId();
}
this.addEntries(request.getEntries(), typeId, type.getType(), DictionaryEntryType.ENTRY);
this.addEntries(request.getFalsePositives(), typeId, type.getType(), DictionaryEntryType.FALSE_POSITIVE);
this.addEntries(request.getFalseRecommendations(), typeId, type.getType(), DictionaryEntryType.FALSE_RECOMMENDATION);
}
typesToRemove.forEach(type -> dictionaryService.deleteType(type.getId()));
}
// dossier status
if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) {
Set<String> toSetTypes = request.getDossierStatusInfos().stream().map(DossierStatusInfo::getName).filter(Objects::nonNull).collect(Collectors.toSet());
List<DossierStatusInfo> currentStates = dossierStatusPersistenceService.getAllDossierStatusForTemplate(dossierTemplateId);
Set<DossierStatusInfo> statesToRemove = currentStates.stream().filter(c -> !toSetTypes.contains(c.getName())).collect(Collectors.toSet());
var stateToEntityMap = currentStates.stream().collect(Collectors.toMap(DossierStatusInfo::getName, Function.identity()));
for (var state : request.getDossierStatusInfos()) {
state.setDossierTemplateId(dossierTemplateId);
if (!stateToEntityMap.isEmpty() && stateToEntityMap.get(state.getName()) != null) {
state.setId(stateToEntityMap.get(state.getName()).getId());
}
updateDossierStates(dossierTemplateId, state);
}
statesToRemove.forEach(state -> dossierStatusPersistenceService.deleteDossierStatus(state.getId(), null));
}
} else {
// creates new dossier template
@ -113,6 +183,37 @@ public class DossierTemplateImportService {
loadedDossierTemplate.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(loadedDossierTemplate));
dossierTemplateId = loadedDossierTemplate.getId();
// set colors
this.setColors(dossierTemplateId, request.getColors());
// set watermarks
if (CollectionUtils.isNotEmpty(request.getWatermarks())) {
request.getWatermarks().forEach(watermark -> {
watermark.setDossierTemplateId(dossierTemplateId);
try {
watermarkService.createOrUpdateWatermark(watermark);
} catch (BadRequestException e) {
log.debug(" Conflict while validating watermark: " + watermark.getId());
}
});
}
//set types
if (CollectionUtils.isNotEmpty(request.getTypes())) {
for (var type : request.getTypes()) {
type.setDossierTemplateId(dossierTemplateId);
var returnedType = dictionaryService.addType(type);
this.addEntries(request.getEntries(), returnedType.getTypeId(), returnedType.getType(), DictionaryEntryType.ENTRY);
this.addEntries(request.getFalsePositives(), returnedType.getTypeId(), returnedType.getType(), DictionaryEntryType.FALSE_POSITIVE);
this.addEntries(request.getFalseRecommendations(), returnedType.getTypeId(), returnedType.getType(), DictionaryEntryType.FALSE_RECOMMENDATION);
}
}
// dossier status
if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) {
request.getDossierStatusInfos().forEach(state -> this.updateDossierStates(dossierTemplateId, state));
}
}
// set legal basis
if (CollectionUtils.isNotEmpty(request.getLegalBases())) {
@ -123,10 +224,6 @@ public class DossierTemplateImportService {
dossierAttributeConfigPersistenceService.setDossierAttributesConfig(dossierTemplateId,
convert(request.getDossierAttributesConfigs(), DossierAttributeConfigEntity.class));
}
// dossier status
if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) {
updateDossierStates(dossierTemplateId, request.getDossierStatusInfos());
}
//set file attributes
if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) {
@ -145,51 +242,21 @@ public class DossierTemplateImportService {
reportTemplateService.uploadTemplate(reportRequest);
});
}
}
private void addEntries(Map<String, List<String>> entries, String typeId, String typeType, DictionaryEntryType dictionaryType) {
if (entries != null && !entries.isEmpty() && !entries.get(typeType).isEmpty()) {
dictionaryService.addEntries(typeId, entries.get(typeType), true, true, dictionaryType);
}
}
private void setColors(String dossierTemplateId, Colors requestedColors) {
// set colors
if (request.getColors() != null) {
ColorsEntity colorsEntity = convert(request.getColors(), ColorsEntity.class);
if (requestedColors != null) {
ColorsEntity colorsEntity = convert(requestedColors, ColorsEntity.class);
colorsEntity.setDossierTemplateId(dossierTemplateId);
colorsService.saveColors(colorsEntity);
}
// set watermarks
if (CollectionUtils.isNotEmpty(request.getWatermarks())) {
request.getWatermarks().forEach(watermark -> {
try {
watermarkService.createOrUpdateWatermark(watermark);
} catch (BadRequestException e) {
log.debug(" Conflict while validating watermark: " + watermark.getId());
}
});
}
// set the types
// should delete existing types? in case of conflicts
for (var type: request.getTypes()) {
type.setDossierTemplateId(dossierTemplateId);
String typeId = type.getTypeId();
if (dictionaryService.checkForExistingType(type)) {
dictionaryService.updateTypeValue(type.getTypeId(), type);
} else {
var returnedType = dictionaryService.addType(type);
typeId = returnedType.getTypeId();
}
if (request.getEntries() != null && !request.getEntries().isEmpty()
&& !request.getEntries().get(type.getType()).isEmpty()) {
dictionaryService.addEntries(typeId, request.getEntries().get(type.getType()), true, true, DictionaryEntryType.ENTRY);
}
if (request.getFalsePositives() != null && !request.getFalsePositives().isEmpty()
&& !request.getFalsePositives().get(type.getType()).isEmpty()) {
dictionaryService.addEntries(typeId, request.getFalsePositives().get(type.getType()), true, true, DictionaryEntryType.FALSE_POSITIVE);
}
if (request.getFalseRecommendations() != null && !request.getFalseRecommendations().isEmpty()
&& !request.getFalseRecommendations().get(type.getType()).isEmpty()) {
dictionaryService.addEntries(typeId, request.getFalseRecommendations().get(type.getType()), true, true, DictionaryEntryType.FALSE_RECOMMENDATION);
}
}
}
private void updateDossierTemplateMeta(DossierTemplateEntity dossierTemplateEntity, DossierTemplate dossierTemplate, String userId) {
@ -209,8 +276,7 @@ public class DossierTemplateImportService {
}
private void updateDossierStates(String dossierTemplateId, List<DossierStatusInfo> dossierStatusInfoList) {
dossierStatusInfoList.forEach(state -> {
private void updateDossierStates(String dossierTemplateId, DossierStatusInfo state) {
var dossierStatusRequest = CreateOrUpdateDossierStatusRequest.builder()
.dossierStatusId(state.getId())
.name(state.getName())
@ -228,7 +294,6 @@ public class DossierTemplateImportService {
} catch (NotFoundException e) {
log.debug(" Not found dossier status id " + state.getId());
}
});
}
public ImportTemplateResult handleArchive(ImportDossierTemplateRequest request) {
@ -346,7 +411,7 @@ public class DossierTemplateImportService {
});
reportTemplateMap = reportTemplateList.stream()
.collect(Collectors.toMap(ReportTemplate::getFileName, Function.identity()));
reportTemplateFilenameList = reportTemplateList.stream().map(rt -> rt.getFileName()).collect(Collectors.toList());
reportTemplateFilenameList = reportTemplateList.stream().map(ReportTemplate::getFileName).collect(Collectors.toList());
} else {
reportTemplateBytesMap.put(ze.getName(), bos);
}