diff --git a/src/main/java/fr/inra/po2vocabmanager/utils/JavaConnector.java b/src/main/java/fr/inra/po2vocabmanager/utils/JavaConnector.java index c63350e333d4ba6ebde8075dd16de97eaa4a950f..b70723568c6e8b1b906ddf072357db2e2d4bc686 100644 --- a/src/main/java/fr/inra/po2vocabmanager/utils/JavaConnector.java +++ b/src/main/java/fr/inra/po2vocabmanager/utils/JavaConnector.java @@ -113,4 +113,12 @@ public class JavaConnector { MainApp.getDataControler().selectNode(itiFile); } } + + public void highlightStep(String node) { + JSONObject oStep = new JSONObject(node); + StepFile s = listStep.get(oStep.getInt("id")); + if(s != null) { + MainApp.getDataControler().highlightStep(s, itiFile); + } + } } \ No newline at end of file diff --git a/src/main/java/fr/inra/po2vocabmanager/view/dataView/DataOverviewController.java b/src/main/java/fr/inra/po2vocabmanager/view/dataView/DataOverviewController.java index 1b8e4b67d4ecd19fc2ae810a5bb68c35731f82d5..bb4aa213be9dd6213af471891b32957645e1fa64 100644 --- a/src/main/java/fr/inra/po2vocabmanager/view/dataView/DataOverviewController.java +++ b/src/main/java/fr/inra/po2vocabmanager/view/dataView/DataOverviewController.java @@ -33,6 +33,8 @@ import fr.inrae.po2engine.model.dataModel.*; import fr.inrae.po2engine.utils.DataTools; import fr.inrae.po2engine.utils.Report; import fr.inrae.po2engine.utils.Tools; +import javafx.animation.KeyFrame; +import javafx.animation.Timeline; import javafx.application.Platform; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; @@ -48,6 +50,7 @@ import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.HBox; import javafx.stage.Modality; +import javafx.util.Duration; import org.apache.commons.lang3.tuple.MutablePair; import java.io.IOException; @@ -780,4 +783,38 @@ public class DataOverviewController { // listDataNode.remove(gf); } + public void highlightStep(StepFile step, ItineraryFile itineraryFile) { + DataNode node = getDataNode(step, itineraryFile); + if(node != null) { + highlightNode(node); + } + } + + public void highlightNode(DataNode node) { + if(node != null) { + TreeItem<DataNode> treeItem = searchNode(rootItem, node); + if(treeItem != null) { + openTreeItem(treeItem); + Platform.runLater(() -> { + Timeline timeline = new Timeline( + new KeyFrame(Duration.seconds(0.2), evt -> { + treeItem.getGraphic().getParent().setVisible(false); + }), + new KeyFrame(Duration.seconds( 0.4), evt -> { + treeItem.getGraphic().getParent().setVisible(true); + })); + timeline.setCycleCount(10); + timeline.play(); + }); + + } + } + } + + public void openTreeItem(TreeItem item) { + if(item != null) { + openTreeItem(item.getParent()); + item.setExpanded(true); + } + } } diff --git a/src/main/resources/fr/inra/po2vocabmanager/graph/graph-creator.js b/src/main/resources/fr/inra/po2vocabmanager/graph/graph-creator.js index 345038fe2f6aadd14b9fb9e012b08fa5c75a0cc1..af469b86662e1d01ee279702136d7c08d66186df 100644 --- a/src/main/resources/fr/inra/po2vocabmanager/graph/graph-creator.js +++ b/src/main/resources/fr/inra/po2vocabmanager/graph/graph-creator.js @@ -340,6 +340,7 @@ thisGraph.removeSelectFromNode(); } thisGraph.state.selectedNode = nodeData; + thisGraph.javaFXHighLightNode(nodeData); }; GraphCreator.prototype.removeSelectFromNode = function() { @@ -848,6 +849,10 @@ GraphCreator.prototype.addEdgeNoUpdate = function(nodeSrc, nodeTgt) { javaConnector.delNode(JSON.stringify(node)); } + GraphCreator.prototype.javaFXHighLightNode = function(node) { + javaConnector.highlightStep(JSON.stringify(node)); + } + /** MAIN SVG **/ var svg = d3.select("body").append("svg") .attr("width", width)