Pull request #544: RED-2200 - Dossier Template export and import
Merge in RED/persistence-service from bugfix/RED-5313 to master * commit '132d8c5a0ecf7209bdf7d2658cc162844e7bc7fb': RED-2200 - Dossier Template export and import RED-2200 - Dossier Template export and import
This commit is contained in:
commit
40eaea7562
@ -65,6 +65,11 @@ public class FileAttributeConfigPersistenceService {
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void updatePrimaryAttribute(String fileAttribute) {
|
||||
fileAttributeConfigRepository.updatePrimaryAttributeValueToTrue(fileAttribute);
|
||||
}
|
||||
|
||||
public FileAttributesGeneralConfigurationEntity setFileAttributesGeneralConfig(String dossierTemplateId, FileAttributesGeneralConfigurationEntity fileAttributesConfig) {
|
||||
fileAttributesConfig.setDossierTemplateId(dossierTemplateId);
|
||||
fileAttributesConfig.setDossierTemplate(dossierTemplateRepository.getOne(dossierTemplateId));
|
||||
|
||||
@ -16,6 +16,10 @@ public interface FileAttributeConfigRepository extends JpaRepository<FileAttribu
|
||||
@Query("update FileAttributeConfigEntity e set e.primaryAttribute = false where e.dossierTemplate.id = :dossierTemplateId")
|
||||
void updateAllPrimaryAttributeValuesToFalse(String dossierTemplateId);
|
||||
|
||||
@Modifying
|
||||
@Query("update FileAttributeConfigEntity e set e.primaryAttribute = true where e.id = :fileAttributeId")
|
||||
void updatePrimaryAttributeValueToTrue(String fileAttributeId);
|
||||
|
||||
@Query("select fa from FileAttributeConfigEntity fa where fa.dossierTemplate.id = :dossierTemplateId and (fa.id = :fileAttributeId or fa.label = :label)")
|
||||
Optional<FileAttributeConfigEntity> findByIdOrDossierTemplateIdAndLabel(String dossierTemplateId, String fileAttributeId, String label);
|
||||
}
|
||||
|
||||
@ -26,6 +26,7 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.im
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntryType;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type;
|
||||
import com.iqser.red.storage.commons.service.StorageService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
@ -73,6 +74,8 @@ public class DossierTemplateImportService {
|
||||
private final ReportTemplateService reportTemplateService;
|
||||
private final DictionaryService dictionaryService;
|
||||
private final EntryPersistenceService entryPersistenceService;
|
||||
private final ReportTemplatePersistenceService reportTemplatePersistenceService;
|
||||
private final StorageService storageService;
|
||||
private final ObjectMapper objectMapper = new ObjectMapper();
|
||||
|
||||
public String importDossierTemplate(@RequestBody ImportDossierTemplateRequest request) {
|
||||
@ -155,6 +158,26 @@ public class DossierTemplateImportService {
|
||||
this.deleteTypes(currentTypes, new HashSet<>());
|
||||
}
|
||||
|
||||
//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(storageId);
|
||||
reportTemplatePersistenceService.delete(r.getTemplateId());
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
// creates new dossier template
|
||||
if (StringUtils.isEmpty(dossierTemplateMeta.getName())) {
|
||||
@ -222,6 +245,14 @@ public class DossierTemplateImportService {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//set report templates
|
||||
if (CollectionUtils.isNotEmpty(request.getReportTemplateUploadRequests())) {
|
||||
request.getReportTemplateUploadRequests().forEach(reportRequest -> {
|
||||
reportRequest.setDossierTemplateId(dossierTemplateId);
|
||||
reportTemplateService.uploadTemplate(reportRequest);
|
||||
});
|
||||
}
|
||||
}
|
||||
// set legal basis
|
||||
if (CollectionUtils.isNotEmpty(request.getLegalBases())) {
|
||||
@ -234,19 +265,12 @@ public class DossierTemplateImportService {
|
||||
convert(request.getFileAttributesGeneralConfiguration(), FileAttributesGeneralConfigurationEntity.class));
|
||||
}
|
||||
|
||||
//set report templates
|
||||
if (CollectionUtils.isNotEmpty(request.getReportTemplateUploadRequests())) {
|
||||
request.getReportTemplateUploadRequests().forEach(reportRequest -> {
|
||||
reportRequest.setDossierTemplateId(dossierTemplateId);
|
||||
reportTemplateService.uploadTemplate(reportRequest);
|
||||
});
|
||||
}
|
||||
return dossierTemplateId;
|
||||
}
|
||||
|
||||
private void addEntries(Map<String, List<String>> entries, String typeId, String initialTypeId, DictionaryEntryType dictionaryType) {
|
||||
if (entries != null && !entries.isEmpty() && entries.get(initialTypeId) != null && !entries.get(initialTypeId).isEmpty()) {
|
||||
dictionaryService.addEntries(typeId, entries.get(initialTypeId), true, true, dictionaryType);
|
||||
private void addEntries(Map<String, List<String>> entries, String typeId, String typeName, DictionaryEntryType dictionaryType) {
|
||||
if (entries != null && !entries.isEmpty() && entries.get(typeName) != null && !entries.get(typeName).isEmpty()) {
|
||||
dictionaryService.addEntries(typeId, entries.get(typeName), true, true, dictionaryType);
|
||||
} else { // no entries, delete current entries
|
||||
List<String> existing = entryPersistenceService.getEntries(typeId, dictionaryType, null)
|
||||
.stream()
|
||||
@ -342,9 +366,9 @@ public class DossierTemplateImportService {
|
||||
}
|
||||
typeIdsAdded.add(typeId);
|
||||
|
||||
this.addEntries(request.getEntries(), typeId, type.getTypeId(), DictionaryEntryType.ENTRY);
|
||||
this.addEntries(request.getFalsePositives(), typeId, type.getTypeId(), DictionaryEntryType.FALSE_POSITIVE);
|
||||
this.addEntries(request.getFalseRecommendations(), typeId, type.getTypeId(), DictionaryEntryType.FALSE_RECOMMENDATION);
|
||||
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);
|
||||
}
|
||||
// remove additional types and not included in the archive
|
||||
this.deleteTypes(currentTypes, typeIdsAdded);
|
||||
@ -416,6 +440,9 @@ public class DossierTemplateImportService {
|
||||
fa.setId(fileAttributeConfigPersistenceService.getFileAttributeByIdOrName(dossierTemplateId, fa.getId(), fa.getLabel()));
|
||||
FileAttributeConfigEntity fileAttributeAdded = fileAttributeConfigPersistenceService.addOrUpdateFileAttribute(dossierTemplateId, convert(fa, FileAttributeConfigEntity.class));
|
||||
fileAttributeIdsAdded.add(fileAttributeAdded.getId());
|
||||
if (fa.isPrimaryAttribute()) {
|
||||
fileAttributeConfigPersistenceService.updatePrimaryAttribute(fileAttributeAdded.getId());
|
||||
}
|
||||
});
|
||||
// remove existing file attributes and not included in archive
|
||||
Set<String> attributesToRemove = currentFileAttributeIds.stream().filter(fa -> !fileAttributeIdsAdded.contains(fa)).collect(Collectors.toSet());
|
||||
|
||||
@ -19,6 +19,7 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.do
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileAttributeType;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.importexport.ExportDownloadRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.importexport.ImportDossierTemplateRequest;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.legalbasis.LegalBasis;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntry;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntryType;
|
||||
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.Type;
|
||||
@ -35,6 +36,7 @@ import java.time.OffsetDateTime;
|
||||
import java.util.*;
|
||||
|
||||
import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert;
|
||||
import static org.assertj.core.api.Assertions.as;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
|
||||
@ -81,6 +83,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
|
||||
@Autowired
|
||||
private StorageService storageService;
|
||||
|
||||
@Autowired
|
||||
private LegalBasisClient legalBasisClient;
|
||||
|
||||
@Test
|
||||
public void testDownload() {
|
||||
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||
@ -361,6 +366,21 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
|
||||
assertThat(statuses).isNotEmpty();
|
||||
assertThat(statuses.get(0).getStatus()).isEqualTo(DownloadStatusValue.READY);
|
||||
|
||||
// add legal basis
|
||||
legalBasisClient.addOrUpdateLegalBasis(dossierTemplate.getId(), new LegalBasis("name2", "description2", "reason2"));
|
||||
var legalBasis = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId());
|
||||
assertThat(legalBasis.size()).isEqualTo(2);
|
||||
|
||||
//add report
|
||||
reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder()
|
||||
.template("some text2222".getBytes(StandardCharsets.UTF_8))
|
||||
.dossierTemplateId(dossierTemplate.getId())
|
||||
.fileName("Report Template 2")
|
||||
.activeByDefault(true)
|
||||
.multiFileReport(false)
|
||||
.build());
|
||||
var reports = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId());
|
||||
assertThat(reports.size()).isEqualTo(2);
|
||||
ImportDossierTemplateRequest request1 = ImportDossierTemplateRequest.builder()
|
||||
.dossierTemplateId(dossierTemplate.getId())
|
||||
.updateExistingDossierTemplate(true)
|
||||
@ -374,6 +394,12 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
|
||||
assertThat(updatedDossierTemplate.getDateModified()).isNotNull();
|
||||
assertThat(watermarkClient.getWatermarksForDossierTemplateId(updatedDossierTemplate.getId()).size()).isEqualTo(1);
|
||||
|
||||
reports = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId());
|
||||
assertThat(reports.size()).isEqualTo(1);
|
||||
|
||||
legalBasis = legalBasisClient.getLegalBasisMapping(dossierTemplate.getId());
|
||||
assertThat(legalBasis.size()).isEqualTo(1);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -454,6 +480,46 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@SneakyThrows
|
||||
public void testImportDossierTemplateUpdateTemplate() {
|
||||
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);
|
||||
|
||||
ImportDossierTemplateRequest request1 = ImportDossierTemplateRequest.builder()
|
||||
.dossierTemplateId(dossierTemplate.getId())
|
||||
.updateExistingDossierTemplate(true)
|
||||
.userId("1")
|
||||
.archive(storageService.getObject(storageId).getInputStream().readAllBytes())
|
||||
.build();
|
||||
|
||||
assertThat(dossierTemplate.getDateModified()).isNull();
|
||||
var fileAttributes = fileAttributeConfigClient.getFileAttributeConfigs(dossierTemplate.getId());
|
||||
assertThat(fileAttributes.get(0).isPrimaryAttribute()).isTrue();
|
||||
var updatedDossierTemplate = dossierTemplateClient.importDossierTemplate(request1);
|
||||
var allDossierTemplates = dossierTemplateClient.getAllDossierTemplates();
|
||||
assertThat(allDossierTemplates.size()).isEqualTo(1);
|
||||
assertThat(updatedDossierTemplate.getDateModified()).isNotNull();
|
||||
assertThat(updatedDossierTemplate.getId()).isEqualTo(dossierTemplate.getId());
|
||||
var typeIdForT = "t:" + dossierTemplate.getId();
|
||||
var updatedEntries = dictionaryClient.getEntriesForType("t:" + dossierTemplate.getId(), null, DictionaryEntryType.ENTRY);
|
||||
assertThat(updatedEntries.size()).isEqualTo(2);
|
||||
fileAttributes = fileAttributeConfigClient.getFileAttributeConfigs(dossierTemplate.getId());
|
||||
assertThat(fileAttributes.get(0).isPrimaryAttribute()).isTrue();
|
||||
|
||||
}
|
||||
|
||||
private void setupDossierTemplate(DossierTemplate dossierTemplate) {
|
||||
Type type = Type.builder()
|
||||
.type("t")
|
||||
@ -470,9 +536,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
|
||||
.label("t.getLabel()")
|
||||
.dossierId(null)
|
||||
.version(23)
|
||||
.entries(List.of(DictionaryEntry.builder().entryId(1001).value("dictEntry1").version(23).deleted(false).typeId("t.getType()").build()))
|
||||
.falsePositiveEntries(List.of(DictionaryEntry.builder().entryId(2001).value("dictEntry2").version(23).deleted(false).typeId("t.getType()").build()))
|
||||
.falseRecommendationEntries(List.of(DictionaryEntry.builder().entryId(3001).value("dictEntry3").version(23).deleted(false).typeId("t.getType()").build()))
|
||||
.entries(List.of(DictionaryEntry.builder().entryId(1001).value("dictEntry1").version(23).deleted(false).typeId("t:" + dossierTemplate.getId()).build()))
|
||||
.falsePositiveEntries(List.of(DictionaryEntry.builder().entryId(2001).value("dictEntry2").version(23).deleted(false).typeId("t:" + dossierTemplate.getId()).build()))
|
||||
.falseRecommendationEntries(List.of(DictionaryEntry.builder().entryId(3001).value("dictEntry3").version(23).deleted(false).typeId("t:" + dossierTemplate.getId()).build()))
|
||||
.hasDictionary(true)
|
||||
.systemManaged(false)
|
||||
.build();
|
||||
@ -491,9 +557,9 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
|
||||
.label("t2.getLabel()")
|
||||
.dossierId(null)
|
||||
.version(23)
|
||||
.entries(List.of(DictionaryEntry.builder().entryId(1001).value("dictEntry1").version(23).deleted(false).typeId("t2.getType()").build()))
|
||||
.falsePositiveEntries(List.of(DictionaryEntry.builder().entryId(2001).value("dictEntry2").version(23).deleted(false).typeId("t2.getType()").build()))
|
||||
.falseRecommendationEntries(List.of(DictionaryEntry.builder().entryId(3001).value("dictEntry3").version(23).deleted(false).typeId("t2.getType()").build()))
|
||||
.entries(List.of(DictionaryEntry.builder().entryId(1011).value("dictEntry1").version(23).deleted(false).typeId("t2:" + dossierTemplate.getId()).build()))
|
||||
.falsePositiveEntries(List.of(DictionaryEntry.builder().entryId(2011).value("dictEntry2").version(23).deleted(false).typeId("t2:" + dossierTemplate.getId()).build()))
|
||||
.falseRecommendationEntries(List.of(DictionaryEntry.builder().entryId(3011).value("dictEntry3").version(23).deleted(false).typeId("t2:" + dossierTemplate.getId()).build()))
|
||||
.hasDictionary(true)
|
||||
.systemManaged(false)
|
||||
.build();
|
||||
@ -527,17 +593,6 @@ public class DossierTemplateTest extends AbstractPersistenceServerServiceTest {
|
||||
.type(FileAttributeType.TEXT)
|
||||
.placeholder("placeholderFile")
|
||||
.build()));
|
||||
ReportTemplateEntity rte = ReportTemplateEntity.builder()
|
||||
.templateId("templateId")
|
||||
.dossierTemplate(convert(dossierTemplate, DossierTemplateEntity.class))
|
||||
.dossierTemplateId(dossierTemplate.getId())
|
||||
.dossiers(null)
|
||||
.activeByDefault(false)
|
||||
.fileName("rte")
|
||||
.multiFileReport(false)
|
||||
.storageId("storageId")
|
||||
.uploadDate(OffsetDateTime.now())
|
||||
.build();
|
||||
reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder()
|
||||
.template("some text".getBytes(StandardCharsets.UTF_8))
|
||||
.dossierTemplateId(dossierTemplate.getId())
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user