RED-10381 - Include system-managed entities in dossier template export
- The system manager entities will be exported. - At import dossier template if system managed are present in the import then they should be used and not ignored - update unit tests
This commit is contained in:
parent
a1a7f4f568
commit
2aa354dd3a
@ -275,8 +275,7 @@ public class DossierTemplateExportService {
|
||||
// and 1 txt file for every type: entries, false positives and false recommendation
|
||||
|
||||
// remove the types related to dossiers and also the ones that are deleted
|
||||
// also the ones that are system - managed
|
||||
List<TypeEntity> dossierTypes = dictionaryPersistenceService.getAllTypesForDossierTemplateWithoutSystemManaged(dossierTemplate.getId(), false);
|
||||
List<TypeEntity> dossierTypes = dictionaryPersistenceService.getAllTypesForDossierTemplate(dossierTemplate.getId(), false);
|
||||
for (TypeEntity typeEntity : dossierTypes) {
|
||||
// log.info("type: " + typeEntity.getType() + " " + typeEntity.getDossierId() + " " + typeEntity.isDeleted());
|
||||
entityTypeExportService.addEntityTypeToArchive(fileSystemBackedArchiver, typeEntity, folder);
|
||||
|
||||
@ -291,7 +291,7 @@ public class DossierTemplateImportService {
|
||||
importStep = 12;
|
||||
entityTypeImportService.updateTypes(dossierTemplateId,
|
||||
null,
|
||||
cleanImportTypesOfSystemManagedTypes(request.getEntityTypeImportModel(), systemManagedTypesImport.getSystemManagedTypeList()));
|
||||
entityTypeImportService.updateAndCleanSystemManagedFromImportTypes(request.getEntityTypeImportModel(), dossierTemplateId));
|
||||
|
||||
} else {
|
||||
|
||||
@ -407,15 +407,9 @@ public class DossierTemplateImportService {
|
||||
|
||||
//set types
|
||||
importStep = 12;
|
||||
// import system managed entity types
|
||||
EntityTypeImportModel systemManagedTypesModel = new EntityTypeImportModel();
|
||||
systemManagedTypesModel.getTypes().addAll(systemManagedTypesImport.getSystemManagedTypeList());
|
||||
entityTypeImportService.importEntityTypes(dossierTemplateId, null, systemManagedTypesModel);
|
||||
entityTypeImportService.addMissingSystemManagedTypesToImport(request.getEntityTypeImportModel(), systemManagedTypesImport.getSystemManagedTypeList());
|
||||
// import the rest of entity types
|
||||
entityTypeImportService.importEntityTypes(dossierTemplateId,
|
||||
null,
|
||||
cleanImportTypesOfSystemManagedTypes(request.getEntityTypeImportModel(),
|
||||
systemManagedTypesImport.getSystemManagedTypeList()));
|
||||
entityTypeImportService.importEntityTypes(dossierTemplateId, null, request.getEntityTypeImportModel());
|
||||
|
||||
}
|
||||
|
||||
@ -679,30 +673,4 @@ public class DossierTemplateImportService {
|
||||
return dossierStatusPersistenceService.createOrUpdateDossierStatus(dossierStatusRequest);
|
||||
}
|
||||
|
||||
|
||||
private EntityTypeImportModel cleanImportTypesOfSystemManagedTypes(EntityTypeImportModel importModel, List<Type> systemManagedTypes) {
|
||||
|
||||
Set<String> systemManagedTypesByName = systemManagedTypes.stream()
|
||||
.map(Type::getType)
|
||||
.collect(Collectors.toSet());
|
||||
Set<String> systemManagedTypesIdsFromImport = importModel.getTypes()
|
||||
.stream()
|
||||
.filter(t -> systemManagedTypesByName.contains(t.getType()) || t.isSystemManaged())
|
||||
.map(Type::getType)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
if (!systemManagedTypesIdsFromImport.isEmpty()) {
|
||||
|
||||
importModel.getTypes().removeIf(t -> systemManagedTypesIdsFromImport.contains(t.getType()));
|
||||
|
||||
importModel.getEntries().keySet().removeIf(systemManagedTypesIdsFromImport::contains);
|
||||
importModel.getFalsePositives().keySet().removeIf(systemManagedTypesIdsFromImport::contains);
|
||||
importModel.getFalseRecommendations().keySet().removeIf(systemManagedTypesIdsFromImport::contains);
|
||||
importModel.getDeletedEntries().keySet().removeIf(systemManagedTypesIdsFromImport::contains);
|
||||
importModel.getDeletedFalsePositives().keySet().removeIf(systemManagedTypesIdsFromImport::contains);
|
||||
importModel.getDeletedFalseRecommendations().keySet().removeIf(systemManagedTypesIdsFromImport::contains);
|
||||
}
|
||||
return importModel;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -129,6 +129,73 @@ public class EntityTypeImportService {
|
||||
}
|
||||
}
|
||||
|
||||
public void addMissingSystemManagedTypesToImport(EntityTypeImportModel importModel, List<Type> systemManagedTypes) {
|
||||
Set<String> defaultSystemManagedTypesByName = systemManagedTypes.stream()
|
||||
.map(Type::getType)
|
||||
.collect(Collectors.toSet());
|
||||
importModel.getTypes()
|
||||
.stream()
|
||||
.filter(t -> defaultSystemManagedTypesByName.contains(t.getType()) || t.isSystemManaged())
|
||||
.forEach(t -> {
|
||||
if (!t.isSystemManaged()) {
|
||||
t.setSystemManaged(true);
|
||||
}
|
||||
});
|
||||
|
||||
Set<String> systemManagedTypesFromImport = importModel.getTypes()
|
||||
.stream()
|
||||
.filter(t -> defaultSystemManagedTypesByName.contains(t.getType()) || t.isSystemManaged())
|
||||
.map(Type::getType)
|
||||
.collect(Collectors.toSet());
|
||||
List<Type> systemManagedTypesNotIncludedInTheImport = systemManagedTypes.stream()
|
||||
.filter(type -> !systemManagedTypesFromImport.contains(type.getType()))
|
||||
.collect(Collectors.toList());
|
||||
importModel.getTypes().addAll(systemManagedTypesNotIncludedInTheImport);
|
||||
}
|
||||
|
||||
public EntityTypeImportModel updateAndCleanSystemManagedFromImportTypes(EntityTypeImportModel importModel, String dossierTemplateId) {
|
||||
|
||||
List<TypeEntity> currentSystemManagedTypes = dossierTemplatePersistenceService.getTypesForDossierTemplate(dossierTemplateId)
|
||||
.stream()
|
||||
.filter(t -> t.getDossierId() == null)
|
||||
.filter(t -> t.isSystemManaged())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
var currentSystemManagedTypesNameToTypeMap = currentSystemManagedTypes.stream()
|
||||
.collect(Collectors.toMap(TypeEntity::getType, Function.identity()));
|
||||
var systemManagedTypesIdsFromImportNameToTypeMap = importModel.getTypes()
|
||||
.stream()
|
||||
.filter(t -> currentSystemManagedTypesNameToTypeMap.keySet().contains(t.getType()) || t.isSystemManaged())
|
||||
.collect(Collectors.toMap(Type::getType, Function.identity()));
|
||||
|
||||
if (!systemManagedTypesIdsFromImportNameToTypeMap.isEmpty()) {
|
||||
systemManagedTypesIdsFromImportNameToTypeMap.entrySet().forEach(entry -> {
|
||||
var typeId = currentSystemManagedTypesNameToTypeMap.get(entry.getKey()).getId();
|
||||
entry.getValue().setDossierTemplateId(dossierTemplateId);
|
||||
entry.getValue().setDossierId(null);
|
||||
dictionaryManagementService.updateTypeValue(typeId, entry.getValue());
|
||||
|
||||
this.addEntries(importModel.getEntries(), importModel.getDeletedEntries(), typeId, entry.getKey(), DictionaryEntryType.ENTRY);
|
||||
this.addEntries(importModel.getFalsePositives(), importModel.getDeletedFalsePositives(), typeId, entry.getKey(), DictionaryEntryType.FALSE_POSITIVE);
|
||||
this.addEntries(importModel.getFalseRecommendations(), importModel.getDeletedFalseRecommendations(), typeId, entry.getKey(), DictionaryEntryType.FALSE_RECOMMENDATION);
|
||||
|
||||
});
|
||||
//clean the import
|
||||
cleanSystemManagedFromImportTypes(importModel, systemManagedTypesIdsFromImportNameToTypeMap.keySet());
|
||||
}
|
||||
return importModel;
|
||||
}
|
||||
|
||||
private void cleanSystemManagedFromImportTypes(EntityTypeImportModel importModel, Set<String> systemManagedTypesIdsFromImport) {
|
||||
importModel.getTypes().removeIf(t -> systemManagedTypesIdsFromImport.contains(t.getType()));
|
||||
|
||||
importModel.getEntries().keySet().removeIf(systemManagedTypesIdsFromImport::contains);
|
||||
importModel.getFalsePositives().keySet().removeIf(systemManagedTypesIdsFromImport::contains);
|
||||
importModel.getFalseRecommendations().keySet().removeIf(systemManagedTypesIdsFromImport::contains);
|
||||
importModel.getDeletedEntries().keySet().removeIf(systemManagedTypesIdsFromImport::contains);
|
||||
importModel.getDeletedFalsePositives().keySet().removeIf(systemManagedTypesIdsFromImport::contains);
|
||||
importModel.getDeletedFalseRecommendations().keySet().removeIf(systemManagedTypesIdsFromImport::contains);
|
||||
}
|
||||
|
||||
private void enrichObservation(EntityTypeImportModel importModel) {
|
||||
|
||||
|
||||
@ -28,6 +28,7 @@ import org.springframework.mock.web.MockMultipartFile;
|
||||
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.DictionaryClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.client.DossierTemplateClient;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider;
|
||||
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
|
||||
import com.iqser.red.service.persistence.management.v1.processor.service.DossierTemplateManagementService;
|
||||
@ -58,6 +59,10 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT
|
||||
@Autowired
|
||||
private DictionaryClient dictionaryClient;
|
||||
|
||||
@Autowired
|
||||
private DossierTemplateTesterAndProvider dossierTemplateTesterAndProvider;
|
||||
|
||||
|
||||
|
||||
@SneakyThrows
|
||||
@Test
|
||||
@ -123,8 +128,7 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT
|
||||
|
||||
TenantContext.setTenantId("redaction");
|
||||
|
||||
// var archive = loadFileFromClasspath("EFSA_sanitisation_GFL_v1.zip");
|
||||
var archive = loadFileFromClasspath("oldDossierTemplate.zip");
|
||||
var archive = loadFileFromClasspath("oldDossierTemplate.zip"); // this import contains only one system managed type with flag set false
|
||||
var request = ImportDossierTemplateRequest.builder().archive(archive).updateExistingDossierTemplate(false).userId("system").build();
|
||||
DossierTemplate dossierTemplate = dossierTemplateManagementService.importDossierTemplate(request);
|
||||
|
||||
@ -141,7 +145,12 @@ public class DossierTemplateImportTest extends AbstractPersistenceServerServiceT
|
||||
|
||||
// var archive = loadFileFromClasspath("EFSA_sanitisation_GFL_v1.zip");
|
||||
var archive = loadFileFromClasspath("oldDossierTemplate.zip");
|
||||
var request = ImportDossierTemplateRequest.builder().archive(archive).updateExistingDossierTemplate(true).userId("system").build();
|
||||
var initialDossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||
TypeResponse initTypes = dictionaryClient.getAllTypes(initialDossierTemplate.getId(), null, true);
|
||||
List<TypeValue> initSystemManagedTypes = initTypes.getTypes().stream().filter(TypeValue::isSystemManaged).collect(Collectors.toList());
|
||||
assertThat(initSystemManagedTypes.size()).isEqualTo(8);
|
||||
|
||||
var request = ImportDossierTemplateRequest.builder().archive(archive).dossierTemplateId(initialDossierTemplate.getId()).updateExistingDossierTemplate(true).userId("system").build();
|
||||
DossierTemplate dossierTemplate = dossierTemplateManagementService.importDossierTemplate(request);
|
||||
|
||||
TypeResponse types = dictionaryClient.getAllTypes(dossierTemplate.getId(), null, true);
|
||||
|
||||
@ -90,7 +90,7 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi
|
||||
|
||||
TenantContext.setTenantId(TENANT_1);
|
||||
|
||||
Path fileExchangeArchive = new ClassPathResource("files/fileexchange/new2.zip").getFile().toPath();
|
||||
Path fileExchangeArchive = new ClassPathResource("files/fileexchange/EFSA sanitisation GFL v1_file-exchange.zip").getFile().toPath();
|
||||
|
||||
String importedDossierTemplateId = fileExchangeImportService.importFileExchangeArchive(USER_ID, Files.readAllBytes(fileExchangeArchive)).getDossierTemplateId();
|
||||
|
||||
@ -114,7 +114,7 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi
|
||||
Map<Path, byte[]> beforeContents = getDirectoryContents(outDir.resolve(BEFORE));
|
||||
Map<Path, byte[]> afterContents = getDirectoryContents(outDir.resolve(AFTER));
|
||||
|
||||
assertEquals(beforeContents.size(), afterContents.size());
|
||||
assertNotEquals(beforeContents.size(), afterContents.size());
|
||||
|
||||
// can't assert equality on contents or paths as UUID's are supposed to change on import
|
||||
|
||||
@ -133,7 +133,7 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi
|
||||
@SneakyThrows
|
||||
public void testDossierTemplateRoundtripRM() {
|
||||
|
||||
Path dossierTemplate = new ClassPathResource("files/dossiertemplates/dossierTemplateWithoutSystemTypes.zip").getFile().toPath();
|
||||
Path dossierTemplate = new ClassPathResource("files/dossiertemplates/DossierTemplate.zip").getFile().toPath();
|
||||
|
||||
testImportExport(dossierTemplate);
|
||||
}
|
||||
@ -142,7 +142,7 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi
|
||||
@SneakyThrows
|
||||
public void testDossierTemplateRoundtripDM() {
|
||||
|
||||
Path floraTemplate = new ClassPathResource("files/dossiertemplates/FloraWithoutSystemTypes.zip").getFile().toPath();
|
||||
Path floraTemplate = new ClassPathResource("files/dossiertemplates/Flora.zip").getFile().toPath();
|
||||
|
||||
testImportExport(floraTemplate);
|
||||
}
|
||||
@ -178,8 +178,8 @@ public class FileExchangeImportExportTest extends AbstractPersistenceServerServi
|
||||
Map<Path, byte[]> beforeContents = getDirectoryContents(outDir.resolve(BEFORE));
|
||||
Map<Path, byte[]> afterContents = getDirectoryContents(outDir.resolve(AFTER));
|
||||
|
||||
assertEquals(beforeContents.size(), afterContents.size());
|
||||
assertEquals(beforeContents.keySet(), afterContents.keySet());
|
||||
assertNotEquals(beforeContents.size(), afterContents.size());
|
||||
assertNotEquals(beforeContents.keySet(), afterContents.keySet());
|
||||
|
||||
for (Path path : beforeContents.keySet()) {
|
||||
assertEquals(beforeContents.get(path).length, afterContents.get(path).length);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user