RED-2200 - Dossier Template export and import
- return the dossier template as result of the import
This commit is contained in:
parent
6e45a657bc
commit
16e3c562f5
@ -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);
|
||||
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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 ) {
|
||||
|
||||
@ -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")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user