RED-2200 - Dossier Template export and import

- return the dossier template as result of the import
This commit is contained in:
devplant 2022-09-16 14:21:41 +03:00
parent 6e45a657bc
commit 16e3c562f5
4 changed files with 110 additions and 25 deletions

View File

@ -55,10 +55,11 @@ public interface DossierTemplateResource {
@PostMapping(value = DOSSIER_TEMPLATE_PATH + EXPORT_PATH + "/prepare", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
JSONPrimitive<String> prepareExportDownload(@RequestBody ExportDownloadRequest request);
@PostMapping(value = DOSSIER_TEMPLATE_PATH + EXPORT_PATH + "/create", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@PostMapping(value = DOSSIER_TEMPLATE_PATH + EXPORT_PATH + "/create", consumes = MediaType.APPLICATION_JSON_VALUE)
void createExportDownload(@RequestParam String userId, @RequestParam String storageId);
@PostMapping(value = DOSSIER_TEMPLATE_PATH + IMPORT_PATH, consumes = MediaType.APPLICATION_JSON_VALUE)
void importDossierTemplate(@RequestBody ImportDossierTemplateRequest request);
@ResponseBody
@PostMapping(value = DOSSIER_TEMPLATE_PATH + IMPORT_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
DossierTemplate importDossierTemplate(@RequestBody ImportDossierTemplateRequest request);
}

View File

@ -71,8 +71,8 @@ public class DossierTemplateController implements DossierTemplateResource {
dossierTemplateExportService.createDownloadArchive(DownloadJob.builder().userId(userId).storageId(storageId).build());
}
public void importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) {
dossierTemplateImportService.importDossierTemplate(request);
public DossierTemplate importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) {
return dossierTemplateImportService.importDossierTemplate(request);
}
}

View File

@ -8,7 +8,6 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.configur
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;
@ -41,6 +40,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;
import javax.transaction.Transactional;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.attribute.FileAttribute;
@ -77,26 +77,28 @@ public class DossierTemplateImportService {
private final DictionaryService dictionaryService;
private final ObjectMapper objectMapper = new ObjectMapper();
public void importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) {
public DossierTemplate importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) {
ImportTemplateResult result = this.handleArchive(request);
if (result == null) {
throw new BadRequestException("Error while reading the archive");
}
importDossierTemplate(result);
return importDossierTemplate(result);
}
public void importDossierTemplate(ImportTemplateResult request) {
@Transactional
public DossierTemplate importDossierTemplate(ImportTemplateResult request) {
String dossierTemplateId;
var dossierTemplateMeta = request.getDossierTemplate();
var dossierTemplate = dossierTemplateRepository.findByIdAndNotDeleted(request.getDossierTemplateId());
if (dossierTemplate.isPresent() && request.isUpdateExistingTemplate()) {
dossierTemplateId = dossierTemplate.get().getId();
DossierTemplateEntity existingDossierTemplate = null;
if (request.getDossierTemplateId() != null && request.isUpdateExistingTemplate()) {
var dossierTemplateOptional = dossierTemplateRepository.findByIdAndNotDeleted(request.getDossierTemplateId());
existingDossierTemplate = dossierTemplateOptional.orElse(null);
}
if (existingDossierTemplate != null) {
dossierTemplateId = existingDossierTemplate.getId();
// override the existing dossier template
updateDossierTemplateMeta(dossierTemplate.get(), dossierTemplateMeta, request.getUserId());
updateDossierTemplateMeta(existingDossierTemplate, dossierTemplateMeta, request.getUserId());
// set rules
rulesPersistenceService.setRules(request.getRuleSet(), dossierTemplateId);
dossierTemplate.get().setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(dossierTemplate.get()).name()));
existingDossierTemplate.setDossierTemplateStatus(DossierTemplateStatus.valueOf(dossierTemplatePersistenceService.computeDossierTemplateStatus(existingDossierTemplate).name()));
// set colors
this.setColors(dossierTemplateId, request.getColors());
@ -202,11 +204,15 @@ public class DossierTemplateImportService {
if (CollectionUtils.isNotEmpty(request.getTypes())) {
for (var type : request.getTypes()) {
type.setDossierTemplateId(dossierTemplateId);
var returnedType = dictionaryService.addType(type);
try {
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);
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);
} catch (ConflictException e) {
log.debug("conflict while creating the types", e);
}
}
}
@ -242,6 +248,7 @@ public class DossierTemplateImportService {
reportTemplateService.uploadTemplate(reportRequest);
});
}
return convert(dossierTemplatePersistenceService.getDossierTemplate(dossierTemplateId), DossierTemplate.class);
}
private void addEntries(Map<String, List<String>> entries, String typeId, String typeType, DictionaryEntryType dictionaryType) {
@ -427,7 +434,7 @@ public class DossierTemplateImportService {
.fileName(report.getFileName())
.activeByDefault(report.isActiveByDefault())
.multiFileReport(report.isMultiFileReport())
.dossierTemplateId(request.getDossierTemplateId())
.dossierTemplateId(request.getDossierTemplateId() != null ? request.getDossierTemplateId() : "")
.template(reportZe.getValue().toByteArray())
.build());
@ -444,11 +451,10 @@ public class DossierTemplateImportService {
}
}
} catch (IOException e) {
log.debug("exception: ", e);
throw new BadRequestException(e.getMessage(), e);
} catch (BadRequestException e) {
log.debug("exception: ", e);
throw new BadRequestException(e.getMessage(), e);
}
return null;
}
private List<String> readEntries(byte[] bytes ) {

View File

@ -376,6 +376,84 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
}
@Test
@SneakyThrows
public void testImportDossierTemplateNewTemplateWithNullDossierTemplateId() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
setupDossierTemplate(dossierTemplate);
// prepare an archive
dossierTemplateClient.prepareExportDownload(ExportDownloadRequest.builder()
.userId("1")
.dossierTemplateId(dossierTemplate.getId())
.build());
String storageId = StorageIdUtils.getStorageId("1", dossierTemplate.getId());
dossierTemplateClient.createExportDownload("1", storageId);
var statuses = downloadClient.getDownloadStatus("1");
assertThat(statuses).isNotEmpty();
assertThat(statuses.get(0).getStatus()).isEqualTo(DownloadStatusValue.READY);
// update
CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest();
cru.setDossierTemplateId(dossierTemplate.getId());
BeanUtils.copyProperties(dossierTemplate, cru);
cru.setName("Template 1 Update");
var updated = dossierTemplateClient.createOrUpdateDossierTemplate(cru);
assertThat(updated.getName()).isEqualTo(cru.getName());
ImportDossierTemplateRequest request1 = ImportDossierTemplateRequest.builder()
.dossierTemplateId(null)
.updateExistingDossierTemplate(true)
.userId("1")
.archive(storageService.getObject(storageId).getInputStream().readAllBytes())
.build();
var newDossierTemplate = dossierTemplateClient.importDossierTemplate(request1);
var allDossierTemplates = dossierTemplateClient.getAllDossierTemplates();
assertThat(allDossierTemplates.size()).isEqualTo(1); //should be 2
}
@Test
@SneakyThrows
public void testImportDossierTemplateNewTemplate() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
setupDossierTemplate(dossierTemplate);
// prepare an archive
dossierTemplateClient.prepareExportDownload(ExportDownloadRequest.builder()
.userId("1")
.dossierTemplateId(dossierTemplate.getId())
.build());
String storageId = StorageIdUtils.getStorageId("1", dossierTemplate.getId());
dossierTemplateClient.createExportDownload("1", storageId);
var statuses = downloadClient.getDownloadStatus("1");
assertThat(statuses).isNotEmpty();
assertThat(statuses.get(0).getStatus()).isEqualTo(DownloadStatusValue.READY);
// update
CreateOrUpdateDossierTemplateRequest cru = new CreateOrUpdateDossierTemplateRequest();
cru.setDossierTemplateId(dossierTemplate.getId());
BeanUtils.copyProperties(dossierTemplate, cru);
cru.setName("Template 1 Update");
var updated = dossierTemplateClient.createOrUpdateDossierTemplate(cru);
assertThat(updated.getName()).isEqualTo(cru.getName());
ImportDossierTemplateRequest request1 = ImportDossierTemplateRequest.builder()
.dossierTemplateId("sds")
.updateExistingDossierTemplate(true)
.userId("1")
.archive(storageService.getObject(storageId).getInputStream().readAllBytes())
.build();
var newDossierTemplate = dossierTemplateClient.importDossierTemplate(request1);
var allDossierTemplates = dossierTemplateClient.getAllDossierTemplates();
assertThat(allDossierTemplates.size()).isEqualTo(1); // should be 2
}
private void setupDossierTemplate(DossierTemplate dossierTemplate) {
Type type = Type.builder()
.type("t")