From fbd97f9970b8728afdb86c2f5a647816c2a4cb57 Mon Sep 17 00:00:00 2001 From: mauvaisetroupe Date: Mon, 25 Dec 2023 16:34:25 +0100 Subject: [PATCH] Improve DO import error message - frontend error message display - error when DO parent does not exist --- .../importfile/DataObjectImportService.java | 73 +++++++++------ .../importfile/dto/DataObjectImport.java | 5 +- .../data-object-import-upload-file.vue | 14 +++ .../shared/model/data-objects-import.model.ts | 4 + .../service/importfile/ImportDataObjects.java | 84 +++++++++++++++++- ...-with-capas-and-dataobjects-corrected.xlsx | Bin 0 -> 27273 bytes 6 files changed, 149 insertions(+), 31 deletions(-) create mode 100644 src/test/resources/junit/05-import-multi-flows-with-capas-and-dataobjects-corrected.xlsx diff --git a/src/main/java/com/mauvaisetroupe/eadesignit/service/importfile/DataObjectImportService.java b/src/main/java/com/mauvaisetroupe/eadesignit/service/importfile/DataObjectImportService.java index 63751d3d..9d47212d 100644 --- a/src/main/java/com/mauvaisetroupe/eadesignit/service/importfile/DataObjectImportService.java +++ b/src/main/java/com/mauvaisetroupe/eadesignit/service/importfile/DataObjectImportService.java @@ -121,36 +121,40 @@ public DataObjectDTO importExcel(InputStream excel) throws IOException { // Create Data Object from fullpath if (StringUtils.hasText(dto.getDataobject())) { - String[] dos = dto.getDataobject().split("\\w*>\\w*"); - DataObject dataObject = null; - DataObject dataObjectParent = null; - for (int i = 0; i < dos.length; i++) { - String doName = dos[i].trim(); - // application in excel file is for DO but also for DO parents - dataObject = findOrCreateDO(doName, dataObjectParent, application); - dataObjectParent = dataObject; - } - dataObject.setBusinessObject(bo); - dataObject.setType(dto.getType()); - dataObjectRepository.save(dataObject); - - // Create link to Application - if (application != null) { - dataObject.setApplication(application); - dataObjectRepository.save(dataObject); - } + try { + if (application == null) { + dto.setErrorMessage("Application should not be null"); + dto.setImportStatus(ImportStatus.ERROR); + throw new IllegalStateException(); + } - // create link to landascape - if (dto.getLandscapes() != null && dto.getLandscapes().size() > 0) { - for (String landscapename : dto.getLandscapes()) { - LandscapeView landscape = landscapeViewRepository.findByDiagramNameIgnoreCase(landscapename); - if (landscape == null) { - throw new IllegalStateException("Cannot find landscape " + landscapename); + String[] dos = dto.getDataobject().split("\\w*>\\w*"); + DataObject dataObjectParent = null; + if (dos.length > 1) { + dataObjectParent = checkParentExist(dos, application); + if (dataObjectParent == null) { + dto.setErrorMessage("All DataObject parents should be exist and be declared in a previous line"); + dto.setImportStatus(ImportStatus.ERROR); + throw new IllegalStateException(); + } + } + String dataObjectName = dos[dos.length - 1].trim(); + DataObject dataObject = findOrCreateDO(dataObjectName, dataObjectParent, application); + + // create link to landascape + if (dto.getLandscapes() != null && dto.getLandscapes().size() > 0) { + for (String landscapename : dto.getLandscapes()) { + LandscapeView landscape = landscapeViewRepository.findByDiagramNameIgnoreCase(landscapename); + if (landscape == null) { + throw new IllegalStateException("Cannot find landscape " + landscapename); + } + dataObject.addLandscapes(landscape); + landscapeViewRepository.save(landscape); } - dataObject.addLandscapes(landscape); - landscapeViewRepository.save(landscape); + dataObjectRepository.save(dataObject); } - dataObjectRepository.save(dataObject); + } catch (IllegalStateException e) { + log.error("Error with line " + map); } } result.add(dto); @@ -162,6 +166,20 @@ public DataObjectDTO importExcel(InputStream excel) throws IOException { return dataObjectDTO; } + private DataObject checkParentExist(String[] dos, Application application) { + DataObject dataObjectParent = null; + DataObject dataObject = null; + for (int i = 0; i < dos.length - 1; i++) { + String doName = dos[i].trim(); + dataObject = + dataObjectRepository.findByNameIgnoreCaseAndParentAndApplication(doName, dataObjectParent, application).orElse(null); + + if (dataObject == null) return null; + dataObjectParent = dataObject; + } + return dataObject; + } + private BusinessObject findOrCreateBO(BusinessObject parent, String boName) { BusinessObject bo; bo = @@ -187,6 +205,7 @@ private DataObject findOrCreateDO(String dataObjectName, DataObject parent, Appl if (dataObj.getId() == null) { dataObj.setName(dataObjectName); dataObj.setParent(parent); + dataObj.setApplication(application); dataObjectRepository.save(dataObj); } return dataObj; diff --git a/src/main/java/com/mauvaisetroupe/eadesignit/service/importfile/dto/DataObjectImport.java b/src/main/java/com/mauvaisetroupe/eadesignit/service/importfile/dto/DataObjectImport.java index 3ae1f26f..c17f90dd 100644 --- a/src/main/java/com/mauvaisetroupe/eadesignit/service/importfile/dto/DataObjectImport.java +++ b/src/main/java/com/mauvaisetroupe/eadesignit/service/importfile/dto/DataObjectImport.java @@ -17,6 +17,8 @@ public class DataObjectImport implements Serializable { private String dataobject; private String application; private DataObjectType type; + private ImportStatus importStatus; + private String errorMessage; public DataObjectType getType() { return type; @@ -59,9 +61,6 @@ public void setLandscapes(List landscapes) { this.landscapes = landscapes; } - private ImportStatus importStatus; - private String errorMessage; - public ImportStatus getImportStatus() { return importStatus; } diff --git a/src/main/webapp/app/entities/data-object-import/data-object-import-upload-file.vue b/src/main/webapp/app/entities/data-object-import/data-object-import-upload-file.vue index 33979350..85f50b40 100644 --- a/src/main/webapp/app/entities/data-object-import/data-object-import-upload-file.vue +++ b/src/main/webapp/app/entities/data-object-import/data-object-import-upload-file.vue @@ -31,19 +31,27 @@ + + + + + + @@ -55,3 +63,9 @@ + diff --git a/src/main/webapp/app/shared/model/data-objects-import.model.ts b/src/main/webapp/app/shared/model/data-objects-import.model.ts index 44e02607..4e059670 100644 --- a/src/main/webapp/app/shared/model/data-objects-import.model.ts +++ b/src/main/webapp/app/shared/model/data-objects-import.model.ts @@ -1,4 +1,6 @@ export interface IDataObjectImport { + errorMessage?: string; + importStatus?: string; businessobject?: string; generalization?: string; abstractValue?: boolean; @@ -9,6 +11,8 @@ export interface IDataObjectImport { export class DataObjectImport implements IDataObjectImport { constructor( + public errorMessage?: string, + public importStatus?: string, public businessobject?: string, public generalization?: string, public abstractValue?: boolean, diff --git a/src/test/java/com/mauvaisetroupe/eadesignit/service/importfile/ImportDataObjects.java b/src/test/java/com/mauvaisetroupe/eadesignit/service/importfile/ImportDataObjects.java index c072818c..53dcf8e7 100644 --- a/src/test/java/com/mauvaisetroupe/eadesignit/service/importfile/ImportDataObjects.java +++ b/src/test/java/com/mauvaisetroupe/eadesignit/service/importfile/ImportDataObjects.java @@ -18,7 +18,7 @@ public class ImportDataObjects extends ImportFlowTest { @Test @Transactional - void testImportDataObjects() throws EncryptedDocumentException, IOException { + void testImportDataObjectsWithIncorrectLine() throws EncryptedDocumentException, IOException { String filename = "/junit/05-import-multi-flows-with-capas-and-dataobjects.xlsx"; // Party yes @@ -62,6 +62,8 @@ void testImportDataObjects() throws EncryptedDocumentException, IOException { file = this.getClass().getResourceAsStream(filename); dataObjectImportService.importExcel(file); + assertEquals(11, dataObjectRepository.findAll().size()); + List allCustomerDO = dataObjectRepository.findByNameIgnoreCase("Customer"); assertEquals(4, allCustomerDO.size()); @@ -95,5 +97,85 @@ void testImportDataObjects() throws EncryptedDocumentException, IOException { application_0005 ); assertTrue(RiskDOOptional.isPresent()); + + // Prospect GOLDEN_SOURCE APPLICATION-0001 Payment Landscape + // Prospect READ_ONLY_REPLICA APPLICATION-0002 Payment Landscape + // Prospect > External Assets READ_ONLY_REPLICA APPLICATION-0001 Payment Landscape + // Prospect > External Assets GOLDEN_SOURCE APPLICATION-0002 Payment Landscape + // Prospect > External Assets > Cash GOLDEN_SOURCE APPLICATION-0003 Payment Landscape // INCORRECT + assertEquals(2, dataObjectRepository.findByNameIgnoreCase("Prospect").size()); + assertEquals(2, dataObjectRepository.findByNameIgnoreCase("External Assets").size()); + + for (String appName : new String[] { "APPLICATION-0001", "APPLICATION-0002" }) { + Application app = applicationRepository.findByNameIgnoreCase(appName); + assertThat( + dataObjectRepository + .findByNameIgnoreCaseAndParentAndApplication( + "External Assets", + dataObjectRepository.findByNameIgnoreCaseAndParentAndApplication("Prospect", null, app).orElseThrow(), + app + ) + .isPresent() + ); + } + } + + @Test + @Transactional + void testImportDataObjectsWithCorrectLine() throws EncryptedDocumentException, IOException { + String filename = "/junit/05-import-multi-flows-with-capas-and-dataobjects-corrected.xlsx"; + + assertEquals(0, applicationRepository.findAll().size()); + assertEquals(0, landscapeViewRepository.findAll().size()); + assertEquals(0, functionalFlowRepository.findAll().size()); + + ///////////////////// + // Import APPLICATION + ///////////////////// + InputStream file = this.getClass().getResourceAsStream(filename); + applicationImportService.importExcel(file, "WE.DONT.CARE.NOT.USED"); + + /////////////////////////// + // Import FLW.01, ... FLW.04 + /////////////////////////// + + file = this.getClass().getResourceAsStream(filename); + flowImportService.importExcelWithMultiFLWSheets(file, "FLW.01"); + file = this.getClass().getResourceAsStream(filename); + flowImportService.importExcelWithMultiFLWSheets(file, "FLW.02"); + file = this.getClass().getResourceAsStream(filename); + flowImportService.importExcelWithMultiFLWSheets(file, "FLW.03"); + file = this.getClass().getResourceAsStream(filename); + flowImportService.importExcelWithMultiFLWSheets(file, "FLW.04"); + checkNbLandscapes(4); + + file = this.getClass().getResourceAsStream(filename); + dataObjectImportService.importExcel(file); + + assertEquals(14, dataObjectRepository.findAll().size()); + + // Prospect GOLDEN_SOURCE APPLICATION-0001 Payment Landscape + // Prospect READ_ONLY_REPLICA APPLICATION-0002 Payment Landscape + // Prospect > External Assets READ_ONLY_REPLICA APPLICATION-0001 Payment Landscape + // Prospect > External Assets GOLDEN_SOURCE APPLICATION-0002 Payment Landscape + // Prospect GOLDEN_SOURCE APPLICATION-0003 Payment Landscape + // Prospect > External Assets GOLDEN_SOURCE APPLICATION-0003 Payment Landscape + // Prospect > External Assets > Cash GOLDEN_SOURCE APPLICATION-0003 Payment Landscape + + assertEquals(3, dataObjectRepository.findByNameIgnoreCase("Prospect").size()); + assertEquals(3, dataObjectRepository.findByNameIgnoreCase("External Assets").size()); + + for (String appName : new String[] { "APPLICATION-0001", "APPLICATION-0002", "APPLICATION-0003" }) { + Application app = applicationRepository.findByNameIgnoreCase(appName); + assertThat( + dataObjectRepository + .findByNameIgnoreCaseAndParentAndApplication( + "External Assets", + dataObjectRepository.findByNameIgnoreCaseAndParentAndApplication("Prospect", null, app).orElseThrow(), + app + ) + .isPresent() + ); + } } } diff --git a/src/test/resources/junit/05-import-multi-flows-with-capas-and-dataobjects-corrected.xlsx b/src/test/resources/junit/05-import-multi-flows-with-capas-and-dataobjects-corrected.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..da30fa16a5225e5cf197e9a33fb1603354fe94a2 GIT binary patch literal 27273 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
StatusError Message Business Object Data Object Business Object abstract GeneralizationApplication Landscapes
+ {{ dto.importStatus }} + {{ dto.errorMessage }} {{ dto.businessobject }} {{ dto.dataobject }} {{ dto.abstractValue }} {{ dto.generalization }}{{ dto.application }} , {{ landscape }}