com.intuit.karate.ui.DirectoryPanel Maven / Gradle / Ivy
package com.intuit.karate.ui;
import javafx.event.EventHandler;
import javafx.scene.Node;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import org.slf4j.LoggerFactory;
import java.io.File;
import static com.intuit.karate.ui.App.PADDING_INSET;
import org.slf4j.Logger;
public class DirectoryPanel extends BorderPane {
private static final Logger logger = LoggerFactory.getLogger(DirectoryPanel.class);
private final TreeView treeView = new TreeView();
private final ScrollPane scrollPane = new ScrollPane();
private final App app ;
private final String envString ;
private final Stage stage;
EventHandler mouseEventHandle = (MouseEvent event) -> {
handleMouseClicked(event);
};
public DirectoryPanel(App app, String envString, Stage primaryStage) {
this.app = app;
this.envString = envString;
this.stage = primaryStage;
}
private void handleMouseClicked(MouseEvent event) {
Node node = event.getPickResult().getIntersectedNode();
if (node instanceof Text || (node instanceof TreeCell && ((TreeCell) node).getText() != null)) {
final TreeItem selectedItem = treeView.getSelectionModel().getSelectedItem();
if(selectedItem instanceof DirectoryFileItem) {
File file = openFeatureFile(selectedItem);
logger.info("Node click: " + file.getName());
}
}
}
private File openFeatureFile(TreeItem selectedItem) {
File file = ((DirectoryFileItem) selectedItem).getFile();
if(file.getName().endsWith(".feature")) {
this.app.initUi(file, this.envString, this.stage);
}
return file;
}
public void init(File choice) {
this.setPadding(PADDING_INSET);
treeView.setRoot(getNodesForDirectory(choice));
treeView.addEventHandler(MouseEvent.MOUSE_CLICKED, mouseEventHandle);
treeView.addEventHandler(KeyEvent.KEY_PRESSED, e -> {
if (e.getCode().equals(KeyCode.ENTER)) {
final TreeItem selectedItem = treeView.getSelectionModel().getSelectedItem();
if (selectedItem instanceof DirectoryFileItem) {
openFeatureFile(selectedItem);
} else {
selectedItem.setExpanded(true);
}
}
}
);
scrollPane.setContent(treeView);
this.setCenter(scrollPane);
scrollPane.setFitToWidth(true);
}
public TreeItem getNodesForDirectory(File directory) {
TreeItem root = new TreeItem(directory.getName());
for(File file : directory.listFiles()) {
System.out.println("Loading " + file.getName());
if(file.isDirectory()) {
root.getChildren().add(getNodesForDirectory(file));
} else {
final DirectoryFileItem treeItem = new DirectoryFileItem(file);
root.getChildren().add(treeItem);
}
}
return root;
}
public class DirectoryFileItem extends TreeItem {
private final File file;
public DirectoryFileItem(File file) {
super(file.getName());
this.file = file;
}
public File getFile() {
return file;
}
}
}