RED-9868 - Import older template zip with incompatible component rules breaks the stack - bp
- specify the step in which the import process failed. - unit test updated
This commit is contained in:
parent
9b88283d2f
commit
9098f93aaf
@ -96,7 +96,34 @@ public interface DossierTemplateResource {
|
|||||||
@ResponseStatus(value = HttpStatus.NO_CONTENT)
|
@ResponseStatus(value = HttpStatus.NO_CONTENT)
|
||||||
@PostMapping(value = DOSSIER_TEMPLATE_PATH + IMPORT_PATH, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
|
@PostMapping(value = DOSSIER_TEMPLATE_PATH + IMPORT_PATH, consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||||
@Operation(summary = "Receives an archive to import", description = "None")
|
@Operation(summary = "Receives an archive to import", description = "None")
|
||||||
@ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Archive have successfully imported"), @ApiResponse(responseCode = "400", description = "Validation failed during import"), @ApiResponse(responseCode = "404", description = "The dossier template to update does not exist")})
|
@ApiResponses(value = {@ApiResponse(responseCode = "204", description = "Archive have successfully imported"), @ApiResponse(responseCode = "400", description = "Import process stuck in one of the steps:"
|
||||||
|
+ "0 - Reading the archive content\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "1 - store information about the dossier template\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "2 - store the colors\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "3 - store the watermarks\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "4 - store the dossier status\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "5 - store the dossier attributes\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "6 - store the file attributes\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "7 - store the report templates\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "8 - store the legal basis\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "9 - store the file attribute configuration\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "10 - store the component definitions\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "11 - store the component mappings\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "12 - store the types and entities\n"
|
||||||
|
+ "\n"
|
||||||
|
+ "13 - store the rules and component rules"), @ApiResponse(responseCode = "404", description = "The dossier template to update does not exist")})
|
||||||
DossierTemplateModel importDossierTemplate(@Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file,
|
DossierTemplateModel importDossierTemplate(@Schema(type = "string", format = "binary", name = "file") @RequestPart(name = "file") MultipartFile file,
|
||||||
@RequestParam(value = DOSSIER_TEMPLATE_ID, required = false) String dossierTemplateId,
|
@RequestParam(value = DOSSIER_TEMPLATE_ID, required = false) String dossierTemplateId,
|
||||||
@RequestParam(value = "updateExistingDossierTemplate", required = false, defaultValue = "false") boolean updateExistingDossierTemplate);
|
@RequestParam(value = "updateExistingDossierTemplate", required = false, defaultValue = "false") boolean updateExistingDossierTemplate);
|
||||||
|
|||||||
@ -101,7 +101,12 @@ public class DossierTemplateImportService {
|
|||||||
|
|
||||||
public String importDossierTemplate(ImportDossierTemplateRequest request) {
|
public String importDossierTemplate(ImportDossierTemplateRequest request) {
|
||||||
|
|
||||||
ImportTemplateResult archiveResult = readDossierTemplateImportArchive(request);
|
ImportTemplateResult archiveResult;
|
||||||
|
try {
|
||||||
|
archiveResult = readDossierTemplateImportArchive(request);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new BadRequestException("The import process failed in step: 0 - while reading the archive content with error: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
return importDossierTemplate(archiveResult).getDossierTemplateId();
|
return importDossierTemplate(archiveResult).getDossierTemplateId();
|
||||||
}
|
}
|
||||||
@ -121,11 +126,13 @@ public class DossierTemplateImportService {
|
|||||||
return dossierTemplateArchiveReader.buildResult();
|
return dossierTemplateArchiveReader.buildResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Observed(name = "DossierTemplateImportService", contextualName = "import-template")
|
@Observed(name = "DossierTemplateImportService", contextualName = "import-template")
|
||||||
public TemplateImportInfo importDossierTemplate(ImportTemplateResult request) {
|
public TemplateImportInfo importDossierTemplate(ImportTemplateResult request) {
|
||||||
|
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
String dossierTemplateId;
|
String dossierTemplateId;
|
||||||
|
int importStep = 1;
|
||||||
var dossierTemplateMeta = request.getDossierTemplate();
|
var dossierTemplateMeta = request.getDossierTemplate();
|
||||||
|
|
||||||
TemplateImportInfo templateImportInfo = TemplateImportInfo.builder().build();
|
TemplateImportInfo templateImportInfo = TemplateImportInfo.builder().build();
|
||||||
@ -136,217 +143,259 @@ public class DossierTemplateImportService {
|
|||||||
existingDossierTemplate = dossierTemplateOptional.orElse(null);
|
existingDossierTemplate = dossierTemplateOptional.orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (existingDossierTemplate != null) {
|
try {
|
||||||
dossierTemplateId = existingDossierTemplate.getId();
|
if (existingDossierTemplate != null) {
|
||||||
|
dossierTemplateId = existingDossierTemplate.getId();
|
||||||
|
|
||||||
// override the existing dossier template
|
// override the existing dossier template
|
||||||
updateDossierTemplateMeta(existingDossierTemplate, dossierTemplateMeta, request.getUserId());
|
updateDossierTemplateMeta(existingDossierTemplate, dossierTemplateMeta, request.getUserId());
|
||||||
dossierTemplateRepository.save(existingDossierTemplate);
|
dossierTemplateRepository.save(existingDossierTemplate);
|
||||||
|
|
||||||
existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(existingDossierTemplate)
|
existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(
|
||||||
.name()));
|
existingDossierTemplate).name()));
|
||||||
|
|
||||||
// set colors
|
// set colors
|
||||||
this.setColors(dossierTemplateId, request.getColors());
|
importStep = 2;
|
||||||
|
this.setColors(dossierTemplateId, request.getColors());
|
||||||
|
|
||||||
// set watermarks
|
// set watermarks
|
||||||
if (CollectionUtils.isNotEmpty(request.getWatermarks())) {
|
if (CollectionUtils.isNotEmpty(request.getWatermarks())) {
|
||||||
Set<String> toSetWatermarks = request.getWatermarks()
|
importStep = 3;
|
||||||
.stream()
|
Set<String> toSetWatermarks = request.getWatermarks()
|
||||||
.map(WatermarkModel::getName)
|
.stream()
|
||||||
.filter(Objects::nonNull)
|
.map(WatermarkModel::getName)
|
||||||
.collect(Collectors.toSet());
|
.filter(Objects::nonNull)
|
||||||
var currentWatermarkConfigs = watermarkService.getWatermarksForDossierTemplateId(dossierTemplateId);
|
.collect(Collectors.toSet());
|
||||||
Set<WatermarkEntity> configsToRemove = currentWatermarkConfigs.stream()
|
var currentWatermarkConfigs = watermarkService.getWatermarksForDossierTemplateId(dossierTemplateId);
|
||||||
.filter(c -> !toSetWatermarks.contains(c.getName()))
|
Set<WatermarkEntity> configsToRemove = currentWatermarkConfigs.stream()
|
||||||
.collect(Collectors.toSet());
|
.filter(c -> !toSetWatermarks.contains(c.getName()))
|
||||||
var watermarkNameToEntity = currentWatermarkConfigs.stream()
|
.collect(Collectors.toSet());
|
||||||
.collect(Collectors.toMap(WatermarkEntity::getName, Function.identity()));
|
var watermarkNameToEntity = currentWatermarkConfigs.stream()
|
||||||
|
.collect(Collectors.toMap(WatermarkEntity::getName, Function.identity()));
|
||||||
|
|
||||||
request.getWatermarks()
|
request.getWatermarks()
|
||||||
.forEach(watermark -> {
|
.forEach(watermark -> {
|
||||||
log.info("watermark to add: " + watermark.getName());
|
log.info("watermark to add: " + watermark.getName());
|
||||||
Long initialId = watermark.getId();
|
Long initialId = watermark.getId();
|
||||||
if (!watermarkNameToEntity.isEmpty() && watermarkNameToEntity.get(watermark.getName()) != null) {
|
if (!watermarkNameToEntity.isEmpty() && watermarkNameToEntity.get(watermark.getName()) != null) {
|
||||||
|
|
||||||
watermark.setId(watermarkNameToEntity.get(watermark.getName()).getId());
|
watermark.setId(watermarkNameToEntity.get(watermark.getName()).getId());
|
||||||
} else {
|
} else {
|
||||||
|
watermark.setId(null);
|
||||||
|
}
|
||||||
|
watermark.setDossierTemplateId(dossierTemplateId);
|
||||||
|
var entity = watermarkService.createOrUpdateWatermark(watermark);
|
||||||
|
templateImportInfo.getLongMapping().put(initialId, entity.getId());
|
||||||
|
});
|
||||||
|
configsToRemove.forEach(watermark -> watermarkService.deleteWatermark(watermark.getId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// dossier status
|
||||||
|
importStep = 4;
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) {
|
||||||
|
this.updateDossierStates(request, dossierTemplateId);
|
||||||
|
} else { // no states to add, delete current states
|
||||||
|
List<DossierStatusInfo> currentStates = dossierStatusPersistenceService.getAllDossierStatusForTemplate(dossierTemplateId);
|
||||||
|
currentStates.forEach(state -> dossierStatusPersistenceService.deleteDossierStatus(state.getId(), null));
|
||||||
|
}
|
||||||
|
|
||||||
|
// update dossier attributes
|
||||||
|
importStep = 5;
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getDossierAttributesConfigs())) {
|
||||||
|
this.updateDossierAttributes(request, dossierTemplateId, templateImportInfo);
|
||||||
|
} else { // no dossier attributes to add, but delete existing ones
|
||||||
|
var currentConfigs = dossierAttributeConfigPersistenceService.getDossierAttributes(dossierTemplateId);
|
||||||
|
currentConfigs.forEach(da -> dossierAttributeConfigPersistenceService.deleteDossierAttribute(da.getId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
//update file attributes
|
||||||
|
importStep = 6;
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) {
|
||||||
|
this.updateFileAttributes(request, dossierTemplateId, templateImportInfo);
|
||||||
|
} else { // no file attributes to add, but delete existing
|
||||||
|
var currentConfigs = fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId);
|
||||||
|
currentConfigs.forEach(fa -> fileAttributeConfigPersistenceService.deleteFileAttribute(fa.getId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
//set report templates
|
||||||
|
importStep = 7;
|
||||||
|
var existingReports = reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplateId);
|
||||||
|
|
||||||
|
List<String> reportsUpdated = new ArrayList<>();
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getReportTemplateUploadRequests())) {
|
||||||
|
request.getReportTemplateUploadRequests()
|
||||||
|
.forEach(reportRequest -> {
|
||||||
|
reportRequest.setDossierTemplateId(dossierTemplateId);
|
||||||
|
var report = reportTemplateService.uploadTemplate(reportRequest);
|
||||||
|
reportsUpdated.add(report.getTemplateId());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete the reports that were not in the import
|
||||||
|
existingReports.forEach(r -> {
|
||||||
|
String storageId = r.getStorageId();
|
||||||
|
if (!reportsUpdated.contains(r.getTemplateId())) {
|
||||||
|
storageService.deleteObject(TenantContext.getTenantId(), storageId);
|
||||||
|
reportTemplatePersistenceService.delete(r.getTemplateId());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// set legal basis
|
||||||
|
importStep = 8;
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getLegalBases())) {
|
||||||
|
legalBasisMappingPersistenceService.setLegalBasisMapping(dossierTemplateId, request.getLegalBases());
|
||||||
|
} else { // delete existing
|
||||||
|
legalBasisMappingPersistenceService.deleteLegalBasis(dossierTemplateId);
|
||||||
|
}
|
||||||
|
|
||||||
|
// file attribute general configuration
|
||||||
|
if (request.getFileAttributesGeneralConfiguration() != null) {
|
||||||
|
importStep = 9;
|
||||||
|
fileAttributeConfigPersistenceService.setFileAttributesGeneralConfig(dossierTemplateId,
|
||||||
|
convert(request.getFileAttributesGeneralConfiguration(),
|
||||||
|
FileAttributesGeneralConfigurationEntity.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
// component definitions
|
||||||
|
importStep = 10;
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getComponentDefinitions())) {
|
||||||
|
this.updateComponents(request, dossierTemplateId);
|
||||||
|
} else { // no components to add, but remove existing ones
|
||||||
|
List<ComponentDefinitionEntity> currentComponents = componentDefinitionPersistenceService.findComponentsByDossierTemplateId(dossierTemplateId);
|
||||||
|
this.deleteComponents(currentComponents);
|
||||||
|
}
|
||||||
|
|
||||||
|
//set component mappings
|
||||||
|
importStep = 11;
|
||||||
|
setComponentMappings(dossierTemplateId, request.getComponentMappings());
|
||||||
|
|
||||||
|
importStep = 12;
|
||||||
|
entityTypeImportService.updateTypes(dossierTemplateId, null, request.getEntityTypeImportModel());
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// creates new dossier template
|
||||||
|
if (StringUtils.isEmpty(dossierTemplateMeta.getName())) {
|
||||||
|
throw new ConflictException("DossierTemplate name must be set");
|
||||||
|
}
|
||||||
|
dossierTemplateMeta.setId("");
|
||||||
|
this.validateDossierTemplateName(dossierTemplateMeta);
|
||||||
|
DossierTemplateEntity dossierTemplateEntity = new DossierTemplateEntity();
|
||||||
|
|
||||||
|
// order is important
|
||||||
|
BeanUtils.copyProperties(dossierTemplateMeta, dossierTemplateEntity);
|
||||||
|
dossierTemplateEntity.setId(UUID.randomUUID().toString());
|
||||||
|
dossierTemplateEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
||||||
|
dossierTemplateEntity.setCreatedBy(request.getUserId());
|
||||||
|
|
||||||
|
var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplateEntity);
|
||||||
|
loadedDossierTemplate.setDossierTemplateStatus(dossierTemplatePersistenceService.computeDossierTemplateStatus(loadedDossierTemplate));
|
||||||
|
|
||||||
|
dossierTemplateId = loadedDossierTemplate.getId();
|
||||||
|
|
||||||
|
// set colors
|
||||||
|
importStep = 2;
|
||||||
|
this.setColors(dossierTemplateId, request.getColors());
|
||||||
|
|
||||||
|
// set watermarks
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getWatermarks())) {
|
||||||
|
importStep = 3;
|
||||||
|
request.getWatermarks()
|
||||||
|
.forEach(watermark -> {
|
||||||
|
Long initialId = watermark.getId();
|
||||||
|
watermark.setDossierTemplateId(dossierTemplateId);
|
||||||
watermark.setId(null);
|
watermark.setId(null);
|
||||||
}
|
var en = watermarkService.createOrUpdateWatermark(watermark);
|
||||||
watermark.setDossierTemplateId(dossierTemplateId);
|
templateImportInfo.getLongMapping().put(initialId, en.getId());
|
||||||
var entity = watermarkService.createOrUpdateWatermark(watermark);
|
});
|
||||||
templateImportInfo.getLongMapping().put(initialId, entity.getId());
|
|
||||||
});
|
|
||||||
configsToRemove.forEach(watermark -> watermarkService.deleteWatermark(watermark.getId()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// dossier status
|
|
||||||
if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) {
|
|
||||||
this.updateDossierStates(request, dossierTemplateId);
|
|
||||||
} else { // no states to add, delete current states
|
|
||||||
List<DossierStatusInfo> currentStates = dossierStatusPersistenceService.getAllDossierStatusForTemplate(dossierTemplateId);
|
|
||||||
currentStates.forEach(state -> dossierStatusPersistenceService.deleteDossierStatus(state.getId(), null));
|
|
||||||
}
|
|
||||||
|
|
||||||
// update dossier attributes
|
|
||||||
if (CollectionUtils.isNotEmpty(request.getDossierAttributesConfigs())) {
|
|
||||||
this.updateDossierAttributes(request, dossierTemplateId, templateImportInfo);
|
|
||||||
} else { // no dossier attributes to add, but delete existing ones
|
|
||||||
var currentConfigs = dossierAttributeConfigPersistenceService.getDossierAttributes(dossierTemplateId);
|
|
||||||
currentConfigs.forEach(da -> dossierAttributeConfigPersistenceService.deleteDossierAttribute(da.getId()));
|
|
||||||
}
|
|
||||||
|
|
||||||
//update file attributes
|
|
||||||
if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) {
|
|
||||||
this.updateFileAttributes(request, dossierTemplateId, templateImportInfo);
|
|
||||||
} else { // no file attributes to add, but delete existing
|
|
||||||
var currentConfigs = fileAttributeConfigPersistenceService.getFileAttributes(dossierTemplateId);
|
|
||||||
currentConfigs.forEach(fa -> fileAttributeConfigPersistenceService.deleteFileAttribute(fa.getId()));
|
|
||||||
}
|
|
||||||
|
|
||||||
entityTypeImportService.updateTypes(dossierTemplateId, null, request.getEntityTypeImportModel());
|
|
||||||
|
|
||||||
if (CollectionUtils.isNotEmpty(request.getComponentDefinitions())) {
|
|
||||||
this.updateComponents(request, dossierTemplateId);
|
|
||||||
} else { // no components to add, but remove existing ones
|
|
||||||
List<ComponentDefinitionEntity> currentComponents = componentDefinitionPersistenceService.findComponentsByDossierTemplateId(dossierTemplateId);
|
|
||||||
this.deleteComponents(currentComponents);
|
|
||||||
}
|
|
||||||
|
|
||||||
//set report templates
|
|
||||||
var existingReports = reportTemplatePersistenceService.findByDossierTemplateId(dossierTemplateId);
|
|
||||||
|
|
||||||
List<String> reportsUpdated = new ArrayList<>();
|
|
||||||
if (CollectionUtils.isNotEmpty(request.getReportTemplateUploadRequests())) {
|
|
||||||
request.getReportTemplateUploadRequests()
|
|
||||||
.forEach(reportRequest -> {
|
|
||||||
reportRequest.setDossierTemplateId(dossierTemplateId);
|
|
||||||
var report = reportTemplateService.uploadTemplate(reportRequest);
|
|
||||||
reportsUpdated.add(report.getTemplateId());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// delete the reports that were not in the import
|
|
||||||
existingReports.forEach(r -> {
|
|
||||||
String storageId = r.getStorageId();
|
|
||||||
if (!reportsUpdated.contains(r.getTemplateId())) {
|
|
||||||
storageService.deleteObject(TenantContext.getTenantId(), storageId);
|
|
||||||
reportTemplatePersistenceService.delete(r.getTemplateId());
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
// set legal basis
|
// dossier status
|
||||||
if (CollectionUtils.isNotEmpty(request.getLegalBases())) {
|
if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) {
|
||||||
legalBasisMappingPersistenceService.setLegalBasisMapping(dossierTemplateId, request.getLegalBases());
|
importStep = 4;
|
||||||
} else { // delete existing
|
request.getDossierStatusInfos()
|
||||||
legalBasisMappingPersistenceService.deleteLegalBasis(dossierTemplateId);
|
.forEach(state -> {
|
||||||
}
|
state.setId(null);
|
||||||
|
this.updateDossierStatus(dossierTemplateId, state);
|
||||||
} else {
|
});
|
||||||
// creates new dossier template
|
|
||||||
if (StringUtils.isEmpty(dossierTemplateMeta.getName())) {
|
|
||||||
throw new ConflictException("DossierTemplate name must be set");
|
|
||||||
}
|
|
||||||
dossierTemplateMeta.setId("");
|
|
||||||
this.validateDossierTemplateName(dossierTemplateMeta);
|
|
||||||
DossierTemplateEntity dossierTemplateEntity = new DossierTemplateEntity();
|
|
||||||
|
|
||||||
// order is important
|
|
||||||
BeanUtils.copyProperties(dossierTemplateMeta, dossierTemplateEntity);
|
|
||||||
dossierTemplateEntity.setId(UUID.randomUUID().toString());
|
|
||||||
dossierTemplateEntity.setDateAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
|
|
||||||
dossierTemplateEntity.setCreatedBy(request.getUserId());
|
|
||||||
//set rules
|
|
||||||
|
|
||||||
var loadedDossierTemplate = dossierTemplateRepository.save(dossierTemplateEntity);
|
|
||||||
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 -> {
|
|
||||||
Long initialId = watermark.getId();
|
|
||||||
watermark.setDossierTemplateId(dossierTemplateId);
|
|
||||||
watermark.setId(null);
|
|
||||||
var en = watermarkService.createOrUpdateWatermark(watermark);
|
|
||||||
templateImportInfo.getLongMapping().put(initialId, en.getId());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// dossier status
|
|
||||||
if (CollectionUtils.isNotEmpty(request.getDossierStatusInfos())) {
|
|
||||||
request.getDossierStatusInfos()
|
|
||||||
.forEach(state -> {
|
|
||||||
state.setId(null);
|
|
||||||
this.updateDossierStatus(dossierTemplateId, state);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//set dossier attributes
|
|
||||||
if (CollectionUtils.isNotEmpty(request.getDossierAttributesConfigs())) {
|
|
||||||
request.getDossierAttributesConfigs()
|
|
||||||
.forEach(da -> {
|
|
||||||
String initialId = da.getId();
|
|
||||||
da.setId(null); // in order to create a new dossier attribute
|
|
||||||
var e = dossierAttributeConfigPersistenceService.addOrUpdateDossierAttribute(dossierTemplateId, convert(da, DossierAttributeConfigEntity.class));
|
|
||||||
templateImportInfo.getIdMapping().put(initialId, e.getId());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//set file attributes
|
|
||||||
if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) {
|
|
||||||
request.getFileAttributesConfigs()
|
|
||||||
.forEach(fa -> {
|
|
||||||
String initialId = fa.getId();
|
|
||||||
fa.setId(null); // in order to force creation of new file attribute
|
|
||||||
var e = fileAttributeConfigPersistenceService.addOrUpdateFileAttribute(dossierTemplateId, convert(fa, FileAttributeConfigEntity.class));
|
|
||||||
templateImportInfo.getIdMapping().put(initialId, e.getId());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//set types
|
|
||||||
entityTypeImportService.importEntityTypes(dossierTemplateId, null, request.getEntityTypeImportModel());
|
|
||||||
|
|
||||||
// set components
|
|
||||||
if (CollectionUtils.isNotEmpty(request.getComponentDefinitions())) {
|
|
||||||
for (ComponentDefinition componentDefinition : request.getComponentDefinitions()) {
|
|
||||||
ComponentDefinitionAddRequest componentDefinitionAddRequest = ComponentDefinitionAddRequest.builder()
|
|
||||||
.displayName(componentDefinition.getDisplayName())
|
|
||||||
.description(componentDefinition.getDescription())
|
|
||||||
.technicalName(componentDefinition.getTechnicalName())
|
|
||||||
.build();
|
|
||||||
componentDefinitionPersistenceService.insert(componentDefinitionAddRequest, componentDefinition.getRank(), dossierTemplateId);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//set dossier attributes
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getDossierAttributesConfigs())) {
|
||||||
|
importStep = 5;
|
||||||
|
request.getDossierAttributesConfigs()
|
||||||
|
.forEach(da -> {
|
||||||
|
String initialId = da.getId();
|
||||||
|
da.setId(null); // in order to create a new dossier attribute
|
||||||
|
var e = dossierAttributeConfigPersistenceService.addOrUpdateDossierAttribute(dossierTemplateId, convert(da, DossierAttributeConfigEntity.class));
|
||||||
|
templateImportInfo.getIdMapping().put(initialId, e.getId());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//set file attributes
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getFileAttributesConfigs())) {
|
||||||
|
importStep = 6;
|
||||||
|
request.getFileAttributesConfigs()
|
||||||
|
.forEach(fa -> {
|
||||||
|
String initialId = fa.getId();
|
||||||
|
fa.setId(null); // in order to force creation of new file attribute
|
||||||
|
var e = fileAttributeConfigPersistenceService.addOrUpdateFileAttribute(dossierTemplateId, convert(fa, FileAttributeConfigEntity.class));
|
||||||
|
templateImportInfo.getIdMapping().put(initialId, e.getId());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//set report templates
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getReportTemplateUploadRequests())) {
|
||||||
|
importStep = 7;
|
||||||
|
request.getReportTemplateUploadRequests()
|
||||||
|
.forEach(reportRequest -> {
|
||||||
|
reportRequest.setDossierTemplateId(dossierTemplateId);
|
||||||
|
reportTemplateService.uploadTemplate(reportRequest);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// set legal basis
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getLegalBases())) {
|
||||||
|
importStep = 8;
|
||||||
|
legalBasisMappingPersistenceService.setLegalBasisMapping(dossierTemplateId, request.getLegalBases());
|
||||||
|
}
|
||||||
|
|
||||||
|
// file attribute general configuration
|
||||||
|
if (request.getFileAttributesGeneralConfiguration() != null) {
|
||||||
|
importStep = 9;
|
||||||
|
fileAttributeConfigPersistenceService.setFileAttributesGeneralConfig(dossierTemplateId,
|
||||||
|
convert(request.getFileAttributesGeneralConfiguration(),
|
||||||
|
FileAttributesGeneralConfigurationEntity.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
// set components
|
||||||
|
if (CollectionUtils.isNotEmpty(request.getComponentDefinitions())) {
|
||||||
|
importStep = 10;
|
||||||
|
for (ComponentDefinition componentDefinition : request.getComponentDefinitions()) {
|
||||||
|
ComponentDefinitionAddRequest componentDefinitionAddRequest = ComponentDefinitionAddRequest.builder()
|
||||||
|
.displayName(componentDefinition.getDisplayName())
|
||||||
|
.description(componentDefinition.getDescription())
|
||||||
|
.technicalName(componentDefinition.getTechnicalName())
|
||||||
|
.build();
|
||||||
|
componentDefinitionPersistenceService.insert(componentDefinitionAddRequest, componentDefinition.getRank(), dossierTemplateId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//set component mappings
|
||||||
|
importStep = 11;
|
||||||
|
setComponentMappings(dossierTemplateId, request.getComponentMappings());
|
||||||
|
|
||||||
|
//set types
|
||||||
|
importStep = 12;
|
||||||
|
entityTypeImportService.importEntityTypes(dossierTemplateId, null, request.getEntityTypeImportModel());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//set report templates
|
importStep = 13;
|
||||||
if (CollectionUtils.isNotEmpty(request.getReportTemplateUploadRequests())) {
|
setRulesWhenCompiled(request, dossierTemplateId);
|
||||||
request.getReportTemplateUploadRequests()
|
|
||||||
.forEach(reportRequest -> {
|
} catch (Exception e) {
|
||||||
reportRequest.setDossierTemplateId(dossierTemplateId);
|
throw new BadRequestException("The import process failed in step: " + importStep + " with error: " + e.getMessage());
|
||||||
reportTemplateService.uploadTemplate(reportRequest);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// set legal basis
|
|
||||||
if (CollectionUtils.isNotEmpty(request.getLegalBases())) {
|
|
||||||
legalBasisMappingPersistenceService.setLegalBasisMapping(dossierTemplateId, request.getLegalBases());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// file attribute general configuration
|
|
||||||
if (request.getFileAttributesGeneralConfiguration() != null) {
|
|
||||||
fileAttributeConfigPersistenceService.setFileAttributesGeneralConfig(dossierTemplateId,
|
|
||||||
convert(request.getFileAttributesGeneralConfiguration(),
|
|
||||||
FileAttributesGeneralConfigurationEntity.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
setRulesWhenCompiled(request, dossierTemplateId);
|
|
||||||
setComponentMappings(dossierTemplateId, request.getComponentMappings());
|
|
||||||
|
|
||||||
templateImportInfo.setDossierTemplateId(dossierTemplateId);
|
templateImportInfo.setDossierTemplateId(dossierTemplateId);
|
||||||
|
|
||||||
long elapsedTime = System.currentTimeMillis() - start;
|
long elapsedTime = System.currentTimeMillis() - start;
|
||||||
|
|||||||
@ -154,6 +154,7 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT
|
|||||||
var e = assertThrows(BadRequestException.class,
|
var e = assertThrows(BadRequestException.class,
|
||||||
() -> dossierTemplateManagementService.importDossierTemplate(request));
|
() -> dossierTemplateManagementService.importDossierTemplate(request));
|
||||||
|
|
||||||
|
assertThat(e.getMessage().contains("The import process failed in step: 13")).isTrue();
|
||||||
var reportTemplates = reportTemplateRepository.findAll();
|
var reportTemplates = reportTemplateRepository.findAll();
|
||||||
assertThat(reportTemplates).hasSize(2);
|
assertThat(reportTemplates).hasSize(2);
|
||||||
var alldossierTemplates = dossierTemplateManagementService.getAllDossierTemplates();
|
var alldossierTemplates = dossierTemplateManagementService.getAllDossierTemplates();
|
||||||
@ -182,8 +183,6 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@Test
|
@Test
|
||||||
public void testDossierTemplateImportOverwrite() {
|
public void testDossierTemplateImportOverwrite() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user