From 3ff84db8007840999a2b205a28cb4342cf8c07e1 Mon Sep 17 00:00:00 2001 From: Herve <herve.guillemin@inrae.fr> Date: Wed, 13 Mar 2024 17:24:13 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Ajout=20du=20code=20(provisoire=20en=20atte?= =?UTF-8?q?ndant=20la=20nouvelle=20version=20de=20po2-engine)=20pour=20la?= =?UTF-8?q?=20validation=20SHACL,=20le=20d=C3=A9p=C3=B4t=20et=20en=20parti?= =?UTF-8?q?e=20le=20t=C3=A9l=C3=A9chargement=20du=20fichier=20de=20contrai?= =?UTF-8?q?ntes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/fr/inra/po2vocabmanager/MainApp.java | 107 ++++++++++++++++++ .../po2vocabmanager/utils/DataTreeCell.java | 97 ++++++++++++++++ .../view/RootLayoutController.java | 10 ++ src/main/resources/PO2Engine.properties | 2 + .../inra/po2vocabmanager/view/RootLayout.fxml | 8 +- 5 files changed, 222 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/inra/po2vocabmanager/MainApp.java b/src/main/java/fr/inra/po2vocabmanager/MainApp.java index d3bcff21..694394fc 100644 --- a/src/main/java/fr/inra/po2vocabmanager/MainApp.java +++ b/src/main/java/fr/inra/po2vocabmanager/MainApp.java @@ -35,6 +35,7 @@ import fr.inrae.po2engine.model.*; import fr.inrae.po2engine.model.dataModel.GeneralFile; import fr.inrae.po2engine.model.dataModel.ItineraryFile; import fr.inrae.po2engine.utils.ProgressPO2; +import fr.inrae.po2engine.utils.Report; import fr.inrae.po2engine.utils.Tools; import javafx.application.Application; import javafx.application.Platform; @@ -82,6 +83,8 @@ import org.update4j.LaunchContext; import org.update4j.inject.InjectTarget; import org.update4j.service.Launcher; +import static org.junit.jupiter.api.DynamicTest.stream; + import java.io.*; import java.nio.charset.StandardCharsets; import java.util.*; @@ -1263,6 +1266,110 @@ public class MainApp extends Application implements Launcher { } } + public void startSHACLValidation() { + + // Au prealable : + // - le jeu de donnees doit avoir ete publie + // - le fichier de contrainte a du etre transmis (download) + + ArrayList<String> errorCantStartSValidation = new ArrayList<>(); + String dataName = Tools.normalize(getDataControler().getCurrentData().getProjectFile().getNameProperty().getValue()); + + // Verification que le jeu de donnees a bien ete publie ? + String repoName = RDF4JTools.getRepository(dataName); + if (repoName.equals("error")) + errorCantStartSValidation.add("First, publish the dataset to validate"); + + // Verification que le fichier de contraintes a bien ete transmis ? + + if (errorCantStartSValidation.size() > 0) { + Alert alert = new Alert(AlertType.ERROR); + alert.setTitle("Unable to start SHACL validation"); + alert.setHeaderText("Please correct the errors before starting SHACL validation"); + alert.setContentText(errorCantStartSValidation.stream().map(x -> " - " + x).collect(Collectors.joining("\n"))); + alert.initOwner(MainApp.primaryStage); + alert.initModality(Modality.WINDOW_MODAL); + alert.showAndWait(); + return; + } + + // Oblige de faire comme ca en attendant d'utiliser la methode + // ajoutee dans po2-engine () + unbindVersion(); + Thread t = new Thread(new Runnable() { + @Override + public void run() { + try { + Tools.addProgress(ProgressPO2.ANALYSE, "Validating ?"); + Tools.updateProgress(ProgressPO2.ANALYSE, "Validating..."); + + long start = System.nanoTime(); + Report r = RDF4JTools.startShaclValidation(Tools.normalize(dataName)); + //try{ + // Thread.sleep(3000); + //} catch (InterruptedException e){ + // e.printStackTrace(); + //} + long finish = System.nanoTime(); + long timeElapsed = (long)((finish - start)*0.000001); + + Platform.runLater(() -> { + Alert SHACLValidationEndMessage = new Alert(AlertType.INFORMATION); + SHACLValidationEndMessage.setResizable(true); + SHACLValidationEndMessage.setTitle("SHACL validation ended"); + SHACLValidationEndMessage.setHeaderText("REPORT"); + SHACLValidationEndMessage.setContentText("Elapsed time : " + + ((Long)timeElapsed).toString() + " ms\r\n" + + (r.success() + ? "No validation error ?" + : "Validations errors..."));//r.prettyPrintError()); + ButtonType saveLog = new ButtonType("Download log file", ButtonData.LEFT); + SHACLValidationEndMessage.getButtonTypes().add(saveLog); + + + SHACLValidationEndMessage.getDialogPane().lookupButton(saveLog).addEventFilter( + ActionEvent.ACTION, + event -> { + event.consume(); + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("save log file"); + fileChooser.setInitialFileName("results_SHACL_validation.txt"); + File fileExport = fileChooser.showSaveDialog(MainApp.primaryStage); + if (fileExport != null) { + try { + FileOutputStream fout = new FileOutputStream(fileExport, false); + org.apache.commons.io.IOUtils.write(r.prettyPrintError(), fout, StandardCharsets.UTF_8); + fout.close(); + } catch (IOException ex) { + MainApp.logger.error(ex.getMessage()); + } + } + } + ); + SHACLValidationEndMessage.initOwner(MainApp.primaryStage); + SHACLValidationEndMessage.initModality(Modality.WINDOW_MODAL); + SHACLValidationEndMessage.showAndWait(); + }); + + Tools.delProgress(ProgressPO2.ANALYSE); + } catch (/*IOException |*/ RDFParseException e) { + Tools.delProgress(ProgressPO2.ANALYSE); + e.printStackTrace(); + Platform.runLater(() -> { + Alert errorSem = new Alert(AlertType.ERROR); + errorSem.setTitle("ERROR"); + errorSem.setHeaderText("An error occurred"); + errorSem.setContentText("An error occurred. If the problem persist, contact the administrator"); + errorSem.initOwner(MainApp.primaryStage); + errorSem.initModality(Modality.WINDOW_MODAL); + errorSem.show(); + }); + } + } + }); + t.start(); + } + public String buildTextLogPublish(Integer niv, JSONArray jsonArray) { StringBuilder builder = new StringBuilder(); diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java index a81920b0..927d62ca 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -20,6 +20,7 @@ package fr.inra.po2vocabmanager.utils; import fr.inra.po2vocabmanager.MainApp; import fr.inra.po2vocabmanager.model.DataNode; +import fr.inrae.po2engine.externalTools.RDF4JTools; import fr.inrae.po2engine.model.dataModel.*; import fr.inrae.po2engine.utils.ImportReport; import fr.inrae.po2engine.utils.Report; @@ -45,12 +46,21 @@ import org.apache.commons.io.FileUtils; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.eclipse.rdf4j.model.vocabulary.RDF4J; +import org.eclipse.rdf4j.repository.RepositoryConnection; +import org.eclipse.rdf4j.repository.manager.RemoteRepositoryManager; +import org.eclipse.rdf4j.rio.Rio; import org.json.JSONArray; import org.json.JSONObject; +import static org.junit.jupiter.api.DynamicTest.stream; + import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.*; import java.util.stream.Collectors; @@ -409,9 +419,96 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { }); }); + MenuItem uploadSCHACLConstraints = new MenuItem("Upload SCHACL"); + uploadSCHACLConstraints.setGraphic(new ImageView(UITools.getImage("resources/images/file-export-16.png"))); + uploadSCHACLConstraints.setOnAction(event -> { + ProjectFile projectFile = (ProjectFile) item.getFile(); + Platform.runLater(() -> { + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("Choose SCHACL Constraints File"); + fileChooser.setInitialFileName(projectFile.getNameProperty().get()+"_SCHACL_Constraints.xlsx"); + //fileChooser.setInitialFileName("shaclConstraints.xlsx"); + fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Turtle file (*.ttl)", "*.ttl")); + File schaclConstraintsFile = fileChooser.showOpenDialog(MainApp.primaryStage); + if (schaclConstraintsFile != null) { + new Thread(() -> { + Platform.runLater(() -> { + try { + String ID = projectFile.getNameProperty().get(); + InputStream stream = new FileInputStream(schaclConstraintsFile); + + long start = System.nanoTime(); + RDF4JTools.updateShaclGraph(ID, stream); + long finish = System.nanoTime(); + long timeElapsed = (long)((finish - start)*0.000001); + + // Autre option pour mesurer le temps + //Instant start = Instant.now(); + //... + //Instant finish = Instant.now(); + //long timeElapsed = Duration.between(start, finish).toMillis(); + + Alert okImport = new Alert(Alert.AlertType.INFORMATION); + okImport.setGraphic(new ImageView(UITools.getImage("resources/images/valid.png"))); + okImport.setHeaderText(null); + okImport.setTitle("Uploading duration"); + okImport.setContentText(((Long)timeElapsed).toString() + " ms"); + okImport.initModality(Modality.APPLICATION_MODAL); + okImport.initOwner(MainApp.primaryStage); + okImport.showAndWait(); + + } catch (IOException ex) { + MainApp.logger.error(ex.getMessage()); + } + }); + }).start(); + }; + }); + }); + + MenuItem downloadSCHACLConstraints = new MenuItem("Download SCHACL"); + downloadSCHACLConstraints.setGraphic(new ImageView(UITools.getImage("resources/images/file-export-16.png"))); + downloadSCHACLConstraints.setOnAction(event -> { + ProjectFile projectFile = (ProjectFile) item.getFile(); + Platform.runLater(() -> { + String repositoryID = projectFile.getNameProperty().get(); + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("Choose name for SCHACL Constraints File"); + fileChooser.setInitialFileName(repositoryID + "_SCHACL_Constraints.xlsx"); + //fileChooser.setInitialFileName("shaclConstraints.xlsx"); + fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Turtle file (*.ttl)", "*.ttl")); + File schaclConstraintsFile = fileChooser.showSaveDialog(MainApp.primaryStage); + if (schaclConstraintsFile != null) { + new Thread(() -> { + Platform.runLater(() -> { + try { + OutputStream stream = new FileOutputStream(schaclConstraintsFile); + + //RDF4JTools.downloadShaclGraph(repositoryID, stream); + + Alert okImport = new Alert(Alert.AlertType.INFORMATION); + okImport.setGraphic(new ImageView(UITools.getImage("resources/images/valid.png"))); + okImport.setHeaderText(null); + okImport.setTitle("Downloading SHACL file"); + okImport.setContentText("Pas de téléchargement. En attente de mise à jour de PO2-engine..."); + okImport.initModality(Modality.APPLICATION_MODAL); + okImport.initOwner(MainApp.primaryStage); + okImport.showAndWait(); + + } catch (IOException ex) { + MainApp.logger.error(ex.getMessage()); + } + }); + }).start(); + }; + }); + }); + menu.getItems().add(addProcess); menu.getItems().add(exportProject); menu.getItems().add(importProject); + menu.getItems().add(uploadSCHACLConstraints); + menu.getItems().add(downloadSCHACLConstraints); break; case PROCESS: MenuItem addItinerary = new MenuItem("New Itinerary"); diff --git a/src/main/java/fr/inra/po2vocabmanager/view/RootLayoutController.java b/src/main/java/fr/inra/po2vocabmanager/view/RootLayoutController.java index 4f88c908..6732c937 100644 --- a/src/main/java/fr/inra/po2vocabmanager/view/RootLayoutController.java +++ b/src/main/java/fr/inra/po2vocabmanager/view/RootLayoutController.java @@ -62,6 +62,8 @@ public class RootLayoutController { @FXML MenuItem itemPublish; @FXML + MenuItem itemSCHACLValidation; + @FXML MenuItem itemSem; @FXML MenuItem itemReadMode; @@ -90,6 +92,8 @@ public class RootLayoutController { itemOpen.setDisable(true); itemPublish.setDisable(true); itemPublish.setVisible(true); + //itemSCHACLValidation.setDisable(true); + itemSCHACLValidation.setVisible(true); itemImportExport.setVisible(false); itemExportOnto.setDisable(true); itemImportOnto.setDisable(true); @@ -119,6 +123,8 @@ public class RootLayoutController { itemPublish.textProperty().bind(Bindings.when(mainApp.onOntologyViewProperty()).then("Semantize & Publish ontology").otherwise("Semantize & Publish data")); itemPublish.disableProperty().bind(mainApp.getEditProperty().not()); + //itemSCHACLValidation.disableProperty().bind(mainApp.getEditProperty().not()); + itemImportExport.visibleProperty().bind(mainApp.onOntologyViewProperty()); itemExportOnto.disableProperty().bind(mainApp.onOntologyViewProperty().not()); itemImportOnto.disableProperty().bind(mainApp.onOntologyViewProperty().not().or(mainApp.getEditProperty().not())); @@ -349,6 +355,10 @@ public class RootLayoutController { mainApp.semantize(); } + public void startSHACLValidation() { + mainApp.startSHACLValidation(); + } + /** * Function Call on search click or CTRL+F */ diff --git a/src/main/resources/PO2Engine.properties b/src/main/resources/PO2Engine.properties index f850efa8..79ed2093 100644 --- a/src/main/resources/PO2Engine.properties +++ b/src/main/resources/PO2Engine.properties @@ -16,6 +16,8 @@ # SPDX-License-Identifier: MIT # +# Serveur de test : icotest.iate.inra.fr +# Serveur de production : quantum.mia-ps.inrae.fr server.host=quantum.mia-ps.inrae.fr nextCloud.listFile.login=listFiles diff --git a/src/main/resources/fr/inra/po2vocabmanager/view/RootLayout.fxml b/src/main/resources/fr/inra/po2vocabmanager/view/RootLayout.fxml index 213578d0..7bb1b2b9 100644 --- a/src/main/resources/fr/inra/po2vocabmanager/view/RootLayout.fxml +++ b/src/main/resources/fr/inra/po2vocabmanager/view/RootLayout.fxml @@ -18,10 +18,13 @@ ~ SPDX-License-Identifier: MIT --> -<?import javafx.scene.control.*?> +<?import javafx.scene.control.Menu?> +<?import javafx.scene.control.MenuBar?> +<?import javafx.scene.control.MenuItem?> <?import javafx.scene.input.KeyCodeCombination?> <?import javafx.scene.layout.BorderPane?> -<BorderPane xmlns:fx="http://javafx.com/fxml/1" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="700.0" prefWidth="1300.0" xmlns="http://javafx.com/javafx/10.0.1" fx:controller="fr.inra.po2vocabmanager.view.RootLayoutController"> + +<BorderPane maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" prefHeight="700.0" prefWidth="1300.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller="fr.inra.po2vocabmanager.view.RootLayoutController"> <top> <MenuBar BorderPane.alignment="CENTER"> <menus> @@ -53,6 +56,7 @@ <MenuItem fx:id="itemReadMode" mnemonicParsing="false" onAction="#enterWriteMode" text="Read Mode" /> <MenuItem fx:id="addConceptScheme" mnemonicParsing="false" onAction="#newConceptScheme" text="New Concept Scheme" /> <MenuItem fx:id="itemPublish" mnemonicParsing="false" onAction="#publish" text="Semantize & Publish" visible="false" /> + <MenuItem fx:id="itemSCHACLValidation" mnemonicParsing="false" onAction="#startSHACLValidation" text="Start SHACL Validation" /> <Menu fx:id="itemImportExport" mnemonicParsing="false" text="Import/Export" visible="false"> <items> <MenuItem fx:id="itemImportOnto" mnemonicParsing="false" onAction="#importOnto" text="Import" /> -- GitLab From 96d056a037fa5e3f71c67c1ed6b0ab16521f2cf8 Mon Sep 17 00:00:00 2001 From: Herve <herve.guillemin@inrae.fr> Date: Fri, 15 Mar 2024 17:06:36 +0100 Subject: [PATCH 2/3] Fin du menu download SHACL et modification du menu startShaclValidation --- .../java/fr/inra/po2vocabmanager/MainApp.java | 105 +++++++++++++----- .../po2vocabmanager/utils/DataTreeCell.java | 11 +- .../view/RootLayoutController.java | 4 +- 3 files changed, 84 insertions(+), 36 deletions(-) diff --git a/src/main/java/fr/inra/po2vocabmanager/MainApp.java b/src/main/java/fr/inra/po2vocabmanager/MainApp.java index 694394fc..17fb91f8 100644 --- a/src/main/java/fr/inra/po2vocabmanager/MainApp.java +++ b/src/main/java/fr/inra/po2vocabmanager/MainApp.java @@ -1293,8 +1293,53 @@ public class MainApp extends Application implements Launcher { return; } - // Oblige de faire comme ca en attendant d'utiliser la methode - // ajoutee dans po2-engine () + // Option 1 + /* + unbindVersion(); + Thread t = new Thread(new Runnable() { + @Override + public void run() { + try { + JSONObject listMessages ; + listMessages = getDataControler().getCurrentData().startShaclValidation(); + + if (listMessages.getJSONArray("error").length() > 0) { + // Validation KO. + Alert KOVal = new Alert(AlertType.ERROR); + KOVal.setResizable(true); + KOVal.setTitle("Validation Errors"); + KOVal.setHeaderText("An error occured"); + KOVal.setContentText(listMessages.getJSONArray("error").toString()); + KOVal.initOwner(MainApp.primaryStage); + KOVal.initModality(Modality.WINDOW_MODAL); + KOVal.show(); + } else { + Alert OKVal = new Alert(AlertType.INFORMATION); + OKVal.setResizable(true); + OKVal.setTitle("Success"); + OKVal.setHeaderText("Validation successfull"); + OKVal.initOwner(MainApp.primaryStage); + OKVal.initModality(Modality.WINDOW_MODAL); + OKVal.show(); + } + + } catch (IOException | RDFParseException e) { + e.printStackTrace(); + Platform.runLater(() -> { + Alert errorSem = new Alert(AlertType.ERROR); + errorSem.setTitle("ERROR"); + errorSem.setHeaderText("An error occurred"); + errorSem.setContentText("An error occurred. If the problem persist, contact the administrator"); + errorSem.initOwner(MainApp.primaryStage); + errorSem.initModality(Modality.WINDOW_MODAL); + errorSem.show(); + }); + } + } + }); + t.start();*/ + + // Option 2 unbindVersion(); Thread t = new Thread(new Runnable() { @Override @@ -1318,41 +1363,45 @@ public class MainApp extends Application implements Launcher { SHACLValidationEndMessage.setResizable(true); SHACLValidationEndMessage.setTitle("SHACL validation ended"); SHACLValidationEndMessage.setHeaderText("REPORT"); - SHACLValidationEndMessage.setContentText("Elapsed time : " + if (r.success()) { + SHACLValidationEndMessage.setContentText("Elapsed time : " + ((Long)timeElapsed).toString() + " ms\r\n" - + (r.success() - ? "No validation error ?" - : "Validations errors..."));//r.prettyPrintError()); - ButtonType saveLog = new ButtonType("Download log file", ButtonData.LEFT); - SHACLValidationEndMessage.getButtonTypes().add(saveLog); - - - SHACLValidationEndMessage.getDialogPane().lookupButton(saveLog).addEventFilter( - ActionEvent.ACTION, - event -> { - event.consume(); - FileChooser fileChooser = new FileChooser(); - fileChooser.setTitle("save log file"); - fileChooser.setInitialFileName("results_SHACL_validation.txt"); - File fileExport = fileChooser.showSaveDialog(MainApp.primaryStage); - if (fileExport != null) { - try { - FileOutputStream fout = new FileOutputStream(fileExport, false); - org.apache.commons.io.IOUtils.write(r.prettyPrintError(), fout, StandardCharsets.UTF_8); - fout.close(); - } catch (IOException ex) { - MainApp.logger.error(ex.getMessage()); + + "No validation error ?"); + } + else { + SHACLValidationEndMessage.setContentText("Elapsed time : " + + ((Long)timeElapsed).toString() + " ms\r\n" + + "Validations errors...");//r.prettyPrintError()); + ButtonType saveLog = new ButtonType("Download log file", ButtonData.LEFT); + SHACLValidationEndMessage.getButtonTypes().add(saveLog); + SHACLValidationEndMessage.getDialogPane().lookupButton(saveLog).addEventFilter( + ActionEvent.ACTION, + event -> { + event.consume(); + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("save log file"); + fileChooser.setInitialFileName("results_SHACL_validation.txt"); + File fileExport = fileChooser.showSaveDialog(MainApp.primaryStage); + if (fileExport != null) { + try { + FileOutputStream fout = new FileOutputStream(fileExport, false); + org.apache.commons.io.IOUtils.write(r.prettyPrintError(), fout, StandardCharsets.UTF_8); + fout.close(); + } catch (IOException ex) { + MainApp.logger.error(ex.getMessage()); + } } } - } - ); + ); + } + SHACLValidationEndMessage.initOwner(MainApp.primaryStage); SHACLValidationEndMessage.initModality(Modality.WINDOW_MODAL); SHACLValidationEndMessage.showAndWait(); }); Tools.delProgress(ProgressPO2.ANALYSE); - } catch (/*IOException |*/ RDFParseException e) { + } catch (RDFParseException e) { Tools.delProgress(ProgressPO2.ANALYSE); e.printStackTrace(); Platform.runLater(() -> { diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java index 20837e53..7163fd2c 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -492,16 +492,15 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { }); }); - MenuItem downloadSCHACLConstraints = new MenuItem("Download SCHACL"); + MenuItem downloadSCHACLConstraints = new MenuItem("Download SHACL"); downloadSCHACLConstraints.setGraphic(new ImageView(UITools.getImage("resources/images/file-export-16.png"))); downloadSCHACLConstraints.setOnAction(event -> { ProjectFile projectFile = (ProjectFile) item.getFile(); Platform.runLater(() -> { String repositoryID = projectFile.getNameProperty().get(); FileChooser fileChooser = new FileChooser(); - fileChooser.setTitle("Choose name for SCHACL Constraints File"); - fileChooser.setInitialFileName(repositoryID + "_SCHACL_Constraints.xlsx"); - //fileChooser.setInitialFileName("shaclConstraints.xlsx"); + fileChooser.setTitle("Choose name for SHACL Constraints File"); + fileChooser.setInitialFileName(repositoryID + "_SHACL_Constraints.ttl"); fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Turtle file (*.ttl)", "*.ttl")); File schaclConstraintsFile = fileChooser.showSaveDialog(MainApp.primaryStage); if (schaclConstraintsFile != null) { @@ -510,13 +509,13 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { try { OutputStream stream = new FileOutputStream(schaclConstraintsFile); - //RDF4JTools.downloadShaclGraph(repositoryID, stream); + RDF4JTools.downloadShaclGraph(repositoryID, stream); Alert okImport = new Alert(Alert.AlertType.INFORMATION); okImport.setGraphic(new ImageView(UITools.getImage("resources/images/valid.png"))); okImport.setHeaderText(null); okImport.setTitle("Downloading SHACL file"); - okImport.setContentText("Pas de téléchargement. En attente de mise à jour de PO2-engine..."); + okImport.setContentText("Fichier téléchargé..."); okImport.initModality(Modality.APPLICATION_MODAL); okImport.initOwner(MainApp.primaryStage); okImport.showAndWait(); diff --git a/src/main/java/fr/inra/po2vocabmanager/view/RootLayoutController.java b/src/main/java/fr/inra/po2vocabmanager/view/RootLayoutController.java index 925f4331..b2bc6372 100644 --- a/src/main/java/fr/inra/po2vocabmanager/view/RootLayoutController.java +++ b/src/main/java/fr/inra/po2vocabmanager/view/RootLayoutController.java @@ -92,7 +92,7 @@ public class RootLayoutController { itemOpen.setDisable(true); itemPublish.setDisable(true); itemPublish.setVisible(true); - //itemSCHACLValidation.setDisable(true); + itemSCHACLValidation.setDisable(true); itemSCHACLValidation.setVisible(true); itemImportExport.setVisible(false); itemExportOnto.setDisable(true); @@ -123,7 +123,7 @@ public class RootLayoutController { itemPublish.textProperty().bind(Bindings.when(mainApp.onOntologyViewProperty()).then("Semantize & Publish ontology").otherwise("Semantize & Publish data")); itemPublish.disableProperty().bind(mainApp.getEditProperty().not()); - //itemSCHACLValidation.disableProperty().bind(mainApp.getEditProperty().not()); + itemSCHACLValidation.disableProperty().bind(Bindings.when(mainApp.fileNameProperty().isEqualTo("")).then(true).otherwise(false)); itemImportExport.visibleProperty().bind(mainApp.onOntologyViewProperty()); itemExportOnto.disableProperty().bind(mainApp.onOntologyViewProperty().not()); -- GitLab From 5988f13c30a2918efc13aae42b05e2c0a7d97cbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Dervaux?= <stephane.dervaux@inrae.fr> Date: Mon, 18 Mar 2024 15:56:05 +0100 Subject: [PATCH 3/3] add constraint on upload shacl (only in edition mode) --- .../inra/po2vocabmanager/utils/DataTreeCell.java | 14 ++------------ 1 file changed, 2 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 7163fd2c..75db53d5 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/DataTreeCell.java @@ -46,22 +46,11 @@ import org.apache.commons.io.FileUtils; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.eclipse.rdf4j.model.vocabulary.RDF4J; -import org.eclipse.rdf4j.repository.RepositoryConnection; -import org.eclipse.rdf4j.repository.manager.RemoteRepositoryManager; -import org.eclipse.rdf4j.rio.Rio; import org.controlsfx.control.CheckTreeView; import org.json.JSONArray; import org.json.JSONObject; -import static org.junit.jupiter.api.DynamicTest.stream; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.util.*; import java.util.stream.Collectors; @@ -446,6 +435,7 @@ public class DataTreeCell extends TextFieldTreeCell<DataNode> { }); MenuItem uploadSCHACLConstraints = new MenuItem("Upload SCHACL"); + uploadSCHACLConstraints.disableProperty().bind(Bindings.not(mainApp.getEditProperty())); uploadSCHACLConstraints.setGraphic(new ImageView(UITools.getImage("resources/images/file-export-16.png"))); uploadSCHACLConstraints.setOnAction(event -> { ProjectFile projectFile = (ProjectFile) item.getFile(); -- GitLab