From f745edf7717cbefa690a0e326f4c3fc44f67eefa Mon Sep 17 00:00:00 2001 From: Alrick Oudot <alrick.oudot@supagro.fr> Date: Thu, 11 Jan 2024 10:50:50 +0100 Subject: [PATCH 01/10] stepImport method extraction in DataTreeCell --- .../po2vocabmanager/utils/DataTreeCell.java | 261 +++++++++--------- 1 file changed, 136 insertions(+), 125 deletions(-) diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java index a81920b0..18c73d9f 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -1026,131 +1026,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { MenuItem importStep = new MenuItem("Import Step"); importStep.setGraphic(new ImageView(UITools.getImage("resources/images/file-import-16.png"))); importStep.disableProperty().bind(Bindings.not(mainApp.getEditProperty())); - importStep.setOnAction(event -> { - StepFile file = (StepFile) item.getFile(); - FileChooser fileChooser = new FileChooser(); - fileChooser.setTitle("Import file"); - fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Xlsx files (*.xlsx)","*.xlsx")); - File fileImport = fileChooser.showOpenDialog(MainApp.primaryStage); - if (fileImport != null) { - MainApp.logger.info("start importing file " + fileImport.getName()); - ImportReport importReport = file.realPreConst(fileImport); - if(importReport.success()) { - - // validation de l'import par l'utilisateur - Dialog<ButtonType> validateImport = new Dialog(); - validateImport.setTitle("import validation"); - validateImport.initOwner(MainApp.primaryStage); - validateImport.initModality(Modality.WINDOW_MODAL); - ButtonType importButtonType = new ButtonType("Import", ButtonBar.ButtonData.OK_DONE); - validateImport.getDialogPane().getButtonTypes().addAll(importButtonType, ButtonType.CANCEL); - - GridPane paneImport = new GridPane(); - paneImport.setHgap(20); - paneImport.setVgap(20); - - Integer comptLine = 0; - Text stepText = new Text(file.getNameProperty().getValue()); - Text sepa = new Text(" : "); - paneImport.add(new ImageView(UITools.getImage("resources/images/treeview/step.png")), 0, comptLine); - paneImport.add(stepText, 1, comptLine); - paneImport.add(sepa, 2, comptLine); - paneImport.add(new ImageView(UITools.getImage("resources/images/update_30.png")), 3, comptLine); - - comptLine++; - - - for (ObservationFile obsF : file.getObservationFiles()) { - Text obsText = new Text(obsF.getCID().getValue().get()); - Text sepa2 = new Text(" : "); - paneImport.add(new ImageView(UITools.getImage("resources/images/treeview/observation.png")), 0, comptLine); - paneImport.add(obsText, 1, comptLine); - paneImport.add(sepa2, 2, comptLine); - if (importReport.getObsMapping().containsValue(obsF)) { - paneImport.add(new ImageView(UITools.getImage("resources/images/update_30.png")), 3, comptLine); - } else { - paneImport.add(new ImageView(UITools.getImage("resources/images/del_30.png")), 3, comptLine); - } - comptLine++; - } - - for(XSSFSheet oo : importReport.getObsMapping().keySet()) { - if(importReport.getObsMapping().get(oo) == null) { // new obs - Text obsText = new Text(oo.getSheetName()); - Text sepa2 = new Text(" : "); - paneImport.add(new ImageView(UITools.getImage("resources/images/treeview/observation.png")), 0, comptLine); - paneImport.add(obsText, 1, comptLine); - paneImport.add(sepa2, 2, comptLine); - paneImport.add(new ImageView(UITools.getImage("resources/images/add_30.png")), 3, comptLine); - comptLine++; - } - } - - for (CompositionFile compoF : file.getCompositionFile().keySet()) { - Text compoText = new Text(compoF.getCompositionID().getValue().get()); - Text sepa2 = new Text(" : "); - paneImport.add(new ImageView(UITools.getImage("resources/images/treeview/composition.png")), 0, comptLine); - paneImport.add(compoText, 1, comptLine); - paneImport.add(sepa2, 2, comptLine); - if(importReport.getCompoMapping().values().stream().map(org.apache.commons.lang3.tuple.Pair::getLeft).noneMatch(c -> c.equals(compoF))) { - paneImport.add(new ImageView(UITools.getImage("resources/images/del_30.png")), 3, comptLine); - } else { - paneImport.add(new ImageView(UITools.getImage("resources/images/update_30.png")), 3, comptLine); - } - comptLine++; - } - - for(XSSFSheet oo : importReport.getCompoMapping().keySet()) { - if(importReport.getCompoMapping().get(oo).getLeft() == null) { // new Compo - Text compoText = new Text(oo.getSheetName()); - Text sepa2 = new Text(" : "); - paneImport.add(new ImageView(UITools.getImage("resources/images/treeview/composition.png")), 0, comptLine); - paneImport.add(compoText, 1, comptLine); - paneImport.add(sepa2, 2, comptLine); - paneImport.add(new ImageView(UITools.getImage("resources/images/add_30.png")), 3, comptLine); - comptLine++; - } - } - - validateImport.getDialogPane().setContent(paneImport); - Optional<ButtonType> result = validateImport.showAndWait(); - if (result.isPresent() && result.get() == importButtonType) { - // l'utilisateru valide la la mise à jour - Report report = file.constructDataFromImport(fileImport); - if(report.success()) { - file.getData().setModified(true); - - MainApp.getDataControler().buildProcessTree(file.getGeneralFile()); - MainApp.getDataControler().selectNode(file); - Alert okImport = new Alert(Alert.AlertType.INFORMATION); - okImport.setGraphic(new ImageView(UITools.getImage("resources/images/valid.png"))); - okImport.setHeaderText(null); - okImport.setTitle("Successful import"); - okImport.setContentText("Successful import"); - okImport.initModality(Modality.APPLICATION_MODAL); - okImport.initOwner(MainApp.primaryStage); - okImport.showAndWait(); - } else { - file.getData().setModified(true); - Alert errorImport = new Alert(Alert.AlertType.ERROR); - errorImport.setTitle("Import error"); - errorImport.setContentText(report.toString()); - errorImport.initModality(Modality.APPLICATION_MODAL); - errorImport.initOwner(MainApp.primaryStage); - errorImport.showAndWait(); - } - } - - } else { - Alert errorImport = new Alert(Alert.AlertType.ERROR); - errorImport.setTitle("Import error"); - errorImport.setContentText(importReport.toString()); - errorImport.initModality(Modality.APPLICATION_MODAL); - errorImport.initOwner(MainApp.primaryStage); - errorImport.showAndWait(); - } - } - }); + importStep.setOnAction(event -> stepImport(item)); menu.getItems().add(importStep); MenuItem deleteStep = new MenuItem("Delete Step"); @@ -1229,6 +1105,14 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { addStep(iti, null); }); + MenuItem addProcessStepFromCSV = new MenuItem("Create New Step From CSV"); + addProcessStepFromCSV.setGraphic(new ImageView(UITools.getImage("resources/images/treeview/step_csv.png"))); + addProcessStepFromCSV.disableProperty().bind(Bindings.not(mainApp.getEditProperty())); + addProcessStepFromCSV.setOnAction(event -> { + ItineraryFile iti = (ItineraryFile) item.getFile(); + addStep(iti, null); + }); + MenuItem addProcessExistingStep = new MenuItem("Add Existing Step"); addProcessExistingStep.setGraphic(new ImageView(UITools.getImage("resources/images/treeview/step.png"))); addProcessExistingStep.disableProperty().bind(Bindings.not(mainApp.getEditProperty())); @@ -1251,6 +1135,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { }); menu.getItems().add(addProcessStep); + menu.getItems().add(addProcessStepFromCSV); menu.getItems().add(addProcessExistingStep); menu.getItems().add(newObsIti); menu.getItems().add(new SeparatorMenuItem()); @@ -1264,4 +1149,130 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { } } + private static void stepImport(DataNode item) { + StepFile file = (StepFile) item.getFile(); + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("Import file"); + fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Xlsx files (*.xlsx)","*.xlsx")); + File fileImport = fileChooser.showOpenDialog(MainApp.primaryStage); + if (fileImport != null) { + MainApp.logger.info("start importing file " + fileImport.getName()); + ImportReport importReport = file.realPreConst(fileImport); + if(importReport.success()) { + + // validation de l'import par l'utilisateur + Dialog<ButtonType> validateImport = new Dialog(); + validateImport.setTitle("import validation"); + validateImport.initOwner(MainApp.primaryStage); + validateImport.initModality(Modality.WINDOW_MODAL); + ButtonType importButtonType = new ButtonType("Import", ButtonBar.ButtonData.OK_DONE); + validateImport.getDialogPane().getButtonTypes().addAll(importButtonType, ButtonType.CANCEL); + + GridPane paneImport = new GridPane(); + paneImport.setHgap(20); + paneImport.setVgap(20); + + Integer comptLine = 0; + Text stepText = new Text(file.getNameProperty().getValue()); + Text sepa = new Text(" : "); + paneImport.add(new ImageView(UITools.getImage("resources/images/treeview/step.png")), 0, comptLine); + paneImport.add(stepText, 1, comptLine); + paneImport.add(sepa, 2, comptLine); + paneImport.add(new ImageView(UITools.getImage("resources/images/update_30.png")), 3, comptLine); + + comptLine++; + + + for (ObservationFile obsF : file.getObservationFiles()) { + Text obsText = new Text(obsF.getCID().getValue().get()); + Text sepa2 = new Text(" : "); + paneImport.add(new ImageView(UITools.getImage("resources/images/treeview/observation.png")), 0, comptLine); + paneImport.add(obsText, 1, comptLine); + paneImport.add(sepa2, 2, comptLine); + if (importReport.getObsMapping().containsValue(obsF)) { + paneImport.add(new ImageView(UITools.getImage("resources/images/update_30.png")), 3, comptLine); + } else { + paneImport.add(new ImageView(UITools.getImage("resources/images/del_30.png")), 3, comptLine); + } + comptLine++; + } + + for(XSSFSheet oo : importReport.getObsMapping().keySet()) { + if(importReport.getObsMapping().get(oo) == null) { // new obs + Text obsText = new Text(oo.getSheetName()); + Text sepa2 = new Text(" : "); + paneImport.add(new ImageView(UITools.getImage("resources/images/treeview/observation.png")), 0, comptLine); + paneImport.add(obsText, 1, comptLine); + paneImport.add(sepa2, 2, comptLine); + paneImport.add(new ImageView(UITools.getImage("resources/images/add_30.png")), 3, comptLine); + comptLine++; + } + } + + for (CompositionFile compoF : file.getCompositionFile().keySet()) { + Text compoText = new Text(compoF.getCompositionID().getValue().get()); + Text sepa2 = new Text(" : "); + paneImport.add(new ImageView(UITools.getImage("resources/images/treeview/composition.png")), 0, comptLine); + paneImport.add(compoText, 1, comptLine); + paneImport.add(sepa2, 2, comptLine); + if(importReport.getCompoMapping().values().stream().map(org.apache.commons.lang3.tuple.Pair::getLeft).noneMatch(c -> c.equals(compoF))) { + paneImport.add(new ImageView(UITools.getImage("resources/images/del_30.png")), 3, comptLine); + } else { + paneImport.add(new ImageView(UITools.getImage("resources/images/update_30.png")), 3, comptLine); + } + comptLine++; + } + + for(XSSFSheet oo : importReport.getCompoMapping().keySet()) { + if(importReport.getCompoMapping().get(oo).getLeft() == null) { // new Compo + Text compoText = new Text(oo.getSheetName()); + Text sepa2 = new Text(" : "); + paneImport.add(new ImageView(UITools.getImage("resources/images/treeview/composition.png")), 0, comptLine); + paneImport.add(compoText, 1, comptLine); + paneImport.add(sepa2, 2, comptLine); + paneImport.add(new ImageView(UITools.getImage("resources/images/add_30.png")), 3, comptLine); + comptLine++; + } + } + + validateImport.getDialogPane().setContent(paneImport); + Optional<ButtonType> result = validateImport.showAndWait(); + if (result.isPresent() && result.get() == importButtonType) { + // l'utilisateru valide la la mise à jour + Report report = file.constructDataFromImport(fileImport); + if(report.success()) { + file.getData().setModified(true); + + MainApp.getDataControler().buildProcessTree(file.getGeneralFile()); + MainApp.getDataControler().selectNode(file); + Alert okImport = new Alert(Alert.AlertType.INFORMATION); + okImport.setGraphic(new ImageView(UITools.getImage("resources/images/valid.png"))); + okImport.setHeaderText(null); + okImport.setTitle("Successful import"); + okImport.setContentText("Successful import"); + okImport.initModality(Modality.APPLICATION_MODAL); + okImport.initOwner(MainApp.primaryStage); + okImport.showAndWait(); + } else { + file.getData().setModified(true); + Alert errorImport = new Alert(Alert.AlertType.ERROR); + errorImport.setTitle("Import error"); + errorImport.setContentText(report.toString()); + errorImport.initModality(Modality.APPLICATION_MODAL); + errorImport.initOwner(MainApp.primaryStage); + errorImport.showAndWait(); + } + } + + } else { + Alert errorImport = new Alert(Alert.AlertType.ERROR); + errorImport.setTitle("Import error"); + errorImport.setContentText(importReport.toString()); + errorImport.initModality(Modality.APPLICATION_MODAL); + errorImport.initOwner(MainApp.primaryStage); + errorImport.showAndWait(); + } + } + } + } -- GitLab From 7923004c45a202bce66705c631de02401435d39b Mon Sep 17 00:00:00 2001 From: Alrick Oudot <alrick.oudot@supagro.fr> Date: Thu, 11 Jan 2024 10:51:17 +0100 Subject: [PATCH 02/10] csv step import icon --- .../resources/images/treeview/step_csv.png | Bin 0 -> 335 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/resources/images/treeview/step_csv.png diff --git a/src/main/resources/resources/images/treeview/step_csv.png b/src/main/resources/resources/images/treeview/step_csv.png new file mode 100644 index 0000000000000000000000000000000000000000..de79cfe12b4a6a1645b23cd96cf1e274a6ab17e7 GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=fts&^Fr)3Yh>t+QC!Q{jAr}5eCpmT<au9Icy{eaQk;1wo!e{R7 zK6A&RVEvAu!k3I8$CN7+=34h`7A#a=wq|~b_u{5bu6+R|fA9Zv<w}a{WMR#FIl<*} zmcie|XWyRhNUn4L{Ddv#;;dK$!R>R)S>v1-TWa68E1niQZYy~6fz$c=_}340R$lnN z*V_DqP>b>%!GBA?9k9<{HGNg@+r<BC^CWg~tA#B3bjjf3{BIo3^->~dFJCZg-3IG7 z`wfivm-wsxim>`=5wa!lyT)<5Usq1`L~IhiWbc`Da<@ZQTCeU6r(l&lOMT-XF=zFH dzS{LzGBPcxP=9wIXdckN44$rjF6*2UngE4Ui=qGk literal 0 HcmV?d00001 -- GitLab From 8ace53080a4068e4a796d95f74c995096bfa6031 Mon Sep 17 00:00:00 2001 From: Alrick Oudot <alrick.oudot@supagro.fr> Date: Thu, 11 Jan 2024 11:19:53 +0100 Subject: [PATCH 03/10] isNewImport boolean added to stepImport() --- .../java/fr/inra/po2vocabmanager/utils/DataTreeCell.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java index 18c73d9f..9522d025 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -1026,7 +1026,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { MenuItem importStep = new MenuItem("Import Step"); importStep.setGraphic(new ImageView(UITools.getImage("resources/images/file-import-16.png"))); importStep.disableProperty().bind(Bindings.not(mainApp.getEditProperty())); - importStep.setOnAction(event -> stepImport(item)); + importStep.setOnAction(event -> stepImport(item, false)); menu.getItems().add(importStep); MenuItem deleteStep = new MenuItem("Delete Step"); @@ -1111,6 +1111,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { addProcessStepFromCSV.setOnAction(event -> { ItineraryFile iti = (ItineraryFile) item.getFile(); addStep(iti, null); + stepImport(item, true); }); MenuItem addProcessExistingStep = new MenuItem("Add Existing Step"); @@ -1149,7 +1150,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { } } - private static void stepImport(DataNode item) { + private static void stepImport(DataNode item, boolean isNewImport) { StepFile file = (StepFile) item.getFile(); FileChooser fileChooser = new FileChooser(); fileChooser.setTitle("Import file"); @@ -1157,7 +1158,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { File fileImport = fileChooser.showOpenDialog(MainApp.primaryStage); if (fileImport != null) { MainApp.logger.info("start importing file " + fileImport.getName()); - ImportReport importReport = file.realPreConst(fileImport); + ImportReport importReport = file.realPreConst(fileImport, isNewImport); if(importReport.success()) { // validation de l'import par l'utilisateur -- GitLab From 947fc0c1e49eb541d129f97084e191130f836c7e Mon Sep 17 00:00:00 2001 From: Alrick Oudot <alrick.oudot@supagro.fr> Date: Wed, 17 Jan 2024 09:14:34 +0100 Subject: [PATCH 04/10] addStepData() extracted from addStep() --- .../po2vocabmanager/utils/DataTreeCell.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java index 9522d025..e57e0015 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -248,34 +248,39 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { Button bok = (Button) diagNewStep.getDialogPane().lookupButton(ButtonType.OK); bok.disableProperty().bind(Bindings.or(nextStepName.textProperty().isEmpty(), Bindings.and(rbCopy.selectedProperty(), comboStep.valueProperty().isNull()))); bok.setOnAction(actionEvent -> { + addStepData(itineraryFile, parentStep, current, nextStepName.getText(), rbCopy.isSelected(), comboStep); + }); + diagNewStep.showAndWait(); + + } + + private static StepFile addStepData(ItineraryFile itiFile, StepFile parentStep, GeneralFile current, String stepName, boolean rbCopy, ComboBox<StepFile> comboStep) { StepFile s = new StepFile("new step", current); - s.setId(nextStepName.getText()); - if(rbCopy.isSelected()) { + s.setId(stepName); + if(rbCopy && comboStep != null) { StepFile initial = comboStep.getSelectionModel().getSelectedItem(); - s.cloneFrom(initial, itineraryFile, new HashMap<>(), itineraryFile, null); + s.cloneFrom(initial, itiFile, new HashMap<>(), itiFile, null); } if(parentStep != null) { parentStep.addSubStep(s); } - itineraryFile.addLinkItinerary(s, null); + itiFile.addLinkItinerary(s, null); DataNode stepNode = new DataNode(DataNodeType.STEP); - stepNode.setItineraryFile(itineraryFile); + stepNode.setItineraryFile(itiFile); if(parentStep != null) { - MainApp.getDataControler().addNode(s,stepNode, MainApp.getDataControler().getDataNode(parentStep, itineraryFile)); + MainApp.getDataControler().addNode(s,stepNode, MainApp.getDataControler().getDataNode(parentStep, itiFile)); } else { - MainApp.getDataControler().addNode(s,stepNode, MainApp.getDataControler().getDataNode(itineraryFile) ); + MainApp.getDataControler().addNode(s,stepNode, MainApp.getDataControler().getDataNode(itiFile) ); } - if(rbCopy.isSelected()) { - MainApp.getDataControler().buildItineraryTree(itineraryFile); + if(rbCopy) { + MainApp.getDataControler().buildItineraryTree(itiFile); } MainApp.getDataControler().selectNode(s); current.getData().setModified(true); - }); - diagNewStep.showAndWait(); - + return s; } -- GitLab From 3129852b8553b5d91f5e8eaf2d5551bc9578b5b6 Mon Sep 17 00:00:00 2001 From: Alrick Oudot <alrick.oudot@supagro.fr> Date: Wed, 17 Jan 2024 09:18:56 +0100 Subject: [PATCH 05/10] =?UTF-8?q?Suppression=20de=20la=20blank=20step=20ut?= =?UTF-8?q?ilis=C3=A9=20pour=20l'import=20si=20celui=20ci=20est=20interrom?= =?UTF-8?q?pu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fr/inra/po2vocabmanager/utils/DataTreeCell.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java index e57e0015..d918d86e 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -1260,6 +1260,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { okImport.initOwner(MainApp.primaryStage); okImport.showAndWait(); } else { + deleteBlankStepBeingImported(file, isNewStep); file.getData().setModified(true); Alert errorImport = new Alert(Alert.AlertType.ERROR); errorImport.setTitle("Import error"); @@ -1268,9 +1269,12 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { errorImport.initOwner(MainApp.primaryStage); errorImport.showAndWait(); } + } else { + deleteBlankStepBeingImported(file, isNewStep); } } else { + deleteBlankStepBeingImported(file, isNewStep); Alert errorImport = new Alert(Alert.AlertType.ERROR); errorImport.setTitle("Import error"); errorImport.setContentText(importReport.toString()); @@ -1278,6 +1282,15 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { errorImport.initOwner(MainApp.primaryStage); errorImport.showAndWait(); } + } else { + deleteBlankStepBeingImported(file, isNewStep); + } + } + + private static void deleteBlankStepBeingImported(StepFile file, boolean isNewStep) { + if (isNewStep) { + file.removeFile(); + MainApp.getDataControler().deleteDataNode(file); } } -- GitLab From e318dabdc6444dd11125d52b648ffd964498f90c Mon Sep 17 00:00:00 2001 From: Alrick Oudot <alrick.oudot@supagro.fr> Date: Wed, 17 Jan 2024 09:19:24 +0100 Subject: [PATCH 06/10] Mise en service de la fonction d'import d'une nouvelle Step par fichier CSV --- .../po2vocabmanager/utils/DataTreeCell.java | 51 +++++++++---------- 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java index d918d86e..c2097b16 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -255,31 +255,31 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { } private static StepFile addStepData(ItineraryFile itiFile, StepFile parentStep, GeneralFile current, String stepName, boolean rbCopy, ComboBox<StepFile> comboStep) { - StepFile s = new StepFile("new step", current); + StepFile s = new StepFile("new step", current); s.setId(stepName); if(rbCopy && comboStep != null) { - StepFile initial = comboStep.getSelectionModel().getSelectedItem(); + StepFile initial = comboStep.getSelectionModel().getSelectedItem(); s.cloneFrom(initial, itiFile, new HashMap<>(), itiFile, null); - } + } - if(parentStep != null) { - parentStep.addSubStep(s); - } + if(parentStep != null) { + parentStep.addSubStep(s); + } itiFile.addLinkItinerary(s, null); - DataNode stepNode = new DataNode(DataNodeType.STEP); + DataNode stepNode = new DataNode(DataNodeType.STEP); stepNode.setItineraryFile(itiFile); - if(parentStep != null) { + if(parentStep != null) { MainApp.getDataControler().addNode(s,stepNode, MainApp.getDataControler().getDataNode(parentStep, itiFile)); - } else { + } else { MainApp.getDataControler().addNode(s,stepNode, MainApp.getDataControler().getDataNode(itiFile) ); - } + } if(rbCopy) { MainApp.getDataControler().buildItineraryTree(itiFile); - } - MainApp.getDataControler().selectNode(s); - current.getData().setModified(true); + } + MainApp.getDataControler().selectNode(s); + current.getData().setModified(true); return s; } @@ -1031,13 +1031,13 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { MenuItem importStep = new MenuItem("Import Step"); importStep.setGraphic(new ImageView(UITools.getImage("resources/images/file-import-16.png"))); importStep.disableProperty().bind(Bindings.not(mainApp.getEditProperty())); - importStep.setOnAction(event -> stepImport(item, false)); + importStep.setOnAction(event -> stepImport((StepFile) item.getFile(), false)); menu.getItems().add(importStep); - MenuItem deleteStep = new MenuItem("Delete Step"); - deleteStep.setGraphic(new ImageView(UITools.getImage("resources/images/del_16.png"))); - deleteStep.disableProperty().bind(Bindings.not(mainApp.getEditProperty())); - deleteStep.setOnAction(event -> { + MenuItem deleteStepButton = new MenuItem("Delete Step"); + deleteStepButton.setGraphic(new ImageView(UITools.getImage("resources/images/del_16.png"))); + deleteStepButton.disableProperty().bind(Bindings.not(mainApp.getEditProperty())); + deleteStepButton.setOnAction(event -> { StepFile stepFile = (StepFile) item.getFile(); Alert a = new Alert(Alert.AlertType.CONFIRMATION); a.setTitle("Delete Step"); @@ -1068,7 +1068,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { menu.getItems().add(new SeparatorMenuItem()); menu.getItems().add(removeStepIti); - menu.getItems().add(deleteStep); + menu.getItems().add(deleteStepButton); break; case ITINERARY: MenuItem delItinerary = new MenuItem("Delete Itinerary"); @@ -1115,8 +1115,8 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { addProcessStepFromCSV.disableProperty().bind(Bindings.not(mainApp.getEditProperty())); addProcessStepFromCSV.setOnAction(event -> { ItineraryFile iti = (ItineraryFile) item.getFile(); - addStep(iti, null); - stepImport(item, true); + StepFile step = addStepData(iti, null, iti.getProcessFile(), "emptyTemplateForImportingNewStep", false, null); + stepImport(step, true); }); MenuItem addProcessExistingStep = new MenuItem("Add Existing Step"); @@ -1155,15 +1155,14 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { } } - private static void stepImport(DataNode item, boolean isNewImport) { - StepFile file = (StepFile) item.getFile(); + private static void stepImport(StepFile file, boolean isNewStep) { FileChooser fileChooser = new FileChooser(); fileChooser.setTitle("Import file"); fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Xlsx files (*.xlsx)","*.xlsx")); File fileImport = fileChooser.showOpenDialog(MainApp.primaryStage); if (fileImport != null) { MainApp.logger.info("start importing file " + fileImport.getName()); - ImportReport importReport = file.realPreConst(fileImport, isNewImport); + ImportReport importReport = file.realPreConst(fileImport, isNewStep); if(importReport.success()) { // validation de l'import par l'utilisateur @@ -1244,8 +1243,8 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { validateImport.getDialogPane().setContent(paneImport); Optional<ButtonType> result = validateImport.showAndWait(); if (result.isPresent() && result.get() == importButtonType) { - // l'utilisateru valide la la mise à jour - Report report = file.constructDataFromImport(fileImport); + // l'utilisateur valide la la mise à jour + Report report = file.constructDataFromImport(fileImport, isNewStep); if(report.success()) { file.getData().setModified(true); -- GitLab From 57780b96f7313cfc557003574eb4ed475a02e4a1 Mon Sep 17 00:00:00 2001 From: Alrick Oudot <alrick.oudot@supagro.fr> Date: Tue, 30 Jan 2024 15:26:56 +0100 Subject: [PATCH 07/10] =?UTF-8?q?Travail=20au=20d=C3=A9couplage=20front/en?= =?UTF-8?q?gine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../po2vocabmanager/utils/DataTreeCell.java | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java index c2097b16..fa28e597 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -1115,8 +1115,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { addProcessStepFromCSV.disableProperty().bind(Bindings.not(mainApp.getEditProperty())); addProcessStepFromCSV.setOnAction(event -> { ItineraryFile iti = (ItineraryFile) item.getFile(); - StepFile step = addStepData(iti, null, iti.getProcessFile(), "emptyTemplateForImportingNewStep", false, null); - stepImport(step, true); + stepImport(iti.initBlankStepForExcelImport(), true); }); MenuItem addProcessExistingStep = new MenuItem("Add Existing Step"); @@ -1241,8 +1240,11 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { } validateImport.getDialogPane().setContent(paneImport); - Optional<ButtonType> result = validateImport.showAndWait(); - if (result.isPresent() && result.get() == importButtonType) { + Optional<ButtonType> result = Optional.empty(); + if(!isNewStep) { + result = validateImport.showAndWait(); + } + if (isNewStep || result.isPresent() && result.get() == importButtonType) { // l'utilisateur valide la la mise à jour Report report = file.constructDataFromImport(fileImport, isNewStep); if(report.success()) { @@ -1259,7 +1261,6 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { okImport.initOwner(MainApp.primaryStage); okImport.showAndWait(); } else { - deleteBlankStepBeingImported(file, isNewStep); file.getData().setModified(true); Alert errorImport = new Alert(Alert.AlertType.ERROR); errorImport.setTitle("Import error"); @@ -1269,11 +1270,9 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { errorImport.showAndWait(); } } else { - deleteBlankStepBeingImported(file, isNewStep); } } else { - deleteBlankStepBeingImported(file, isNewStep); Alert errorImport = new Alert(Alert.AlertType.ERROR); errorImport.setTitle("Import error"); errorImport.setContentText(importReport.toString()); @@ -1282,15 +1281,8 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { errorImport.showAndWait(); } } else { - deleteBlankStepBeingImported(file, isNewStep); } } - private static void deleteBlankStepBeingImported(StepFile file, boolean isNewStep) { - if (isNewStep) { - file.removeFile(); - MainApp.getDataControler().deleteDataNode(file); - } - } } -- GitLab From a6a9bd700ef27e19cafd9d54aff0e54652596eaf Mon Sep 17 00:00:00 2001 From: Alrick Oudot <alrick.oudot@supagro.fr> Date: Wed, 13 Mar 2024 13:50:39 +0100 Subject: [PATCH 08/10] Extraction handleInterfaceUpdate(), updateAndNotifyInterfaceOfModification(), showErrorImportAlert() et showOkImportAlert() --- .../po2vocabmanager/utils/DataTreeCell.java | 79 +++++++++---------- 1 file changed, 36 insertions(+), 43 deletions(-) diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java index fa28e597..1fd77487 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -386,14 +386,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { }); MainApp.getDataControler().showNodeDetails(projectFile, projectFile); if(report.success()) { - Alert okImport = new Alert(Alert.AlertType.INFORMATION); - okImport.setGraphic(new ImageView(UITools.getImage("resources/images/valid.png"))); - okImport.setHeaderText(null); - okImport.setTitle("Successful import"); - okImport.setContentText("Successful import"); - okImport.initModality(Modality.APPLICATION_MODAL); - okImport.initOwner(MainApp.primaryStage); - okImport.showAndWait(); + showOkImportAlert(); } else { Alert errorImport = new Alert(Alert.AlertType.INFORMATION); errorImport.setTitle("Import result"); @@ -703,21 +696,11 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { } } else { // error lors de l'import - Alert errorImport = new Alert(Alert.AlertType.ERROR); - errorImport.setTitle("Import error"); - errorImport.setContentText("Bad UUID file. You are trying to import on a wrong observation file"); - errorImport.initModality(Modality.APPLICATION_MODAL); - errorImport.initOwner(MainApp.primaryStage); - errorImport.showAndWait(); + showErrorImportAlert("Bad UUID file. You are trying to import on a wrong observation file"); } } else { // error lors de l'import - Alert errorImport = new Alert(Alert.AlertType.ERROR); - errorImport.setTitle("Import error"); - errorImport.setContentText("An error occured. Please check your import file"); - errorImport.initModality(Modality.APPLICATION_MODAL); - errorImport.initOwner(MainApp.primaryStage); - errorImport.showAndWait(); + showErrorImportAlert("An error occured. Please check your import file"); } if(tempF != null) { @@ -1247,41 +1230,51 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { if (isNewStep || result.isPresent() && result.get() == importButtonType) { // l'utilisateur valide la la mise à jour Report report = file.constructDataFromImport(fileImport, isNewStep); - if(report.success()) { - file.getData().setModified(true); - - MainApp.getDataControler().buildProcessTree(file.getGeneralFile()); - MainApp.getDataControler().selectNode(file); - Alert okImport = new Alert(Alert.AlertType.INFORMATION); - okImport.setGraphic(new ImageView(UITools.getImage("resources/images/valid.png"))); - okImport.setHeaderText(null); - okImport.setTitle("Successful import"); - okImport.setContentText("Successful import"); - okImport.initModality(Modality.APPLICATION_MODAL); - okImport.initOwner(MainApp.primaryStage); - okImport.showAndWait(); + handleInterfaceUpdate(file, report.success(), report.toString()); + } else { + } + } else { - file.getData().setModified(true); - Alert errorImport = new Alert(Alert.AlertType.ERROR); - errorImport.setTitle("Import error"); - errorImport.setContentText(report.toString()); - errorImport.initModality(Modality.APPLICATION_MODAL); - errorImport.initOwner(MainApp.primaryStage); - errorImport.showAndWait(); + showErrorImportAlert(importReport.toString()); } } else { + } } + private static void handleInterfaceUpdate(StepFile file, boolean reportBoolean, String reportString) { + if(reportBoolean) { + updateAndNotifyInterfaceOfModification(file); + showOkImportAlert(); } else { + file.getData().setModified(true); + showErrorImportAlert(reportString); + } + } + + private static void updateAndNotifyInterfaceOfModification(StepFile file) { + file.getData().setModified(true); + MainApp.getDataControler().buildProcessTree(file.getGeneralFile()); + MainApp.getDataControler().selectNode(file); + } + + private static void showErrorImportAlert(String report) { Alert errorImport = new Alert(Alert.AlertType.ERROR); errorImport.setTitle("Import error"); - errorImport.setContentText(importReport.toString()); + errorImport.setContentText(report); errorImport.initModality(Modality.APPLICATION_MODAL); errorImport.initOwner(MainApp.primaryStage); errorImport.showAndWait(); } - } else { - } + + private static void showOkImportAlert() { + Alert okImport = new Alert(Alert.AlertType.INFORMATION); + okImport.setGraphic(new ImageView(UITools.getImage("resources/images/valid.png"))); + okImport.setHeaderText(null); + okImport.setTitle("Successful import"); + okImport.setContentText("Successful import"); + okImport.initModality(Modality.APPLICATION_MODAL); + okImport.initOwner(MainApp.primaryStage); + okImport.showAndWait(); } -- GitLab From 6290db720ba1ca34085990063bcff4ad952b722f Mon Sep 17 00:00:00 2001 From: Alrick Oudot <alrick.oudot@supagro.fr> Date: Wed, 13 Mar 2024 13:51:08 +0100 Subject: [PATCH 09/10] =?UTF-8?q?Refactoring=20de=20"Create=20New=20Step?= =?UTF-8?q?=20From=20CSV"=20avec=20les=20m=C3=A9thodes=20engine=20de=20St?= =?UTF-8?q?=C3=A9phane?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../po2vocabmanager/utils/DataTreeCell.java | 44 +++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java index 1fd77487..6553646f 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -1098,7 +1098,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { addProcessStepFromCSV.disableProperty().bind(Bindings.not(mainApp.getEditProperty())); addProcessStepFromCSV.setOnAction(event -> { ItineraryFile iti = (ItineraryFile) item.getFile(); - stepImport(iti.initBlankStepForExcelImport(), true); + newStepImport(iti); }); MenuItem addProcessExistingStep = new MenuItem("Add Existing Step"); @@ -1137,7 +1137,25 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { } } - private static void stepImport(StepFile file, boolean isNewStep) { + private static void newStepImport(ItineraryFile iti) { + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("Import file"); + fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Xlsx files (*.xlsx)","*.xlsx")); + File fileImport = fileChooser.showOpenDialog(MainApp.primaryStage); + if (fileImport == null) { + return; + } + MainApp.logger.info("start importing file " + fileImport.getName()); + ImportReport importReport = iti.checkImportStepFromXLSX(fileImport); + if(importReport.success()) { + StepFile step = iti.importStepFromXLSX(fileImport); + handleInterfaceUpdate(step, importReport.success(), importReport.toString()); + } + + + } + + private static void stepImport(StepFile file, boolean isNewStep) { FileChooser fileChooser = new FileChooser(); fileChooser.setTitle("Import file"); fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Xlsx files (*.xlsx)","*.xlsx")); @@ -1234,18 +1252,18 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { } else { } - } else { + } else { showErrorImportAlert(importReport.toString()); - } - } else { + } + } else { } - } + } private static void handleInterfaceUpdate(StepFile file, boolean reportBoolean, String reportString) { if(reportBoolean) { updateAndNotifyInterfaceOfModification(file); showOkImportAlert(); - } else { + } else { file.getData().setModified(true); showErrorImportAlert(reportString); } @@ -1258,13 +1276,13 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { } private static void showErrorImportAlert(String report) { - Alert errorImport = new Alert(Alert.AlertType.ERROR); - errorImport.setTitle("Import error"); + Alert errorImport = new Alert(Alert.AlertType.ERROR); + errorImport.setTitle("Import error"); errorImport.setContentText(report); - errorImport.initModality(Modality.APPLICATION_MODAL); - errorImport.initOwner(MainApp.primaryStage); - errorImport.showAndWait(); - } + errorImport.initModality(Modality.APPLICATION_MODAL); + errorImport.initOwner(MainApp.primaryStage); + errorImport.showAndWait(); + } private static void showOkImportAlert() { Alert okImport = new Alert(Alert.AlertType.INFORMATION); -- GitLab From 7bf2299ac95979da7a78c9834d76c4871448b741 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Dervaux?= <stephane.dervaux@inrae.fr> Date: Wed, 13 Mar 2024 17:21:31 +0100 Subject: [PATCH 10/10] =?UTF-8?q?remove=20flag=20data=20modified.=20It's?= =?UTF-8?q?=20a=20PO=C2=B2Engine=20job?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java index 6553646f..01c59339 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -1264,13 +1264,11 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { updateAndNotifyInterfaceOfModification(file); showOkImportAlert(); } else { - file.getData().setModified(true); showErrorImportAlert(reportString); } } private static void updateAndNotifyInterfaceOfModification(StepFile file) { - file.getData().setModified(true); MainApp.getDataControler().buildProcessTree(file.getGeneralFile()); MainApp.getDataControler().selectNode(file); } -- GitLab