cdc.perfs.ui.fx.EnvironmentPane Maven / Gradle / Ivy
package cdc.perfs.ui.fx;
import java.io.File;
import java.io.IOException;
import cdc.perfs.Environment;
import cdc.perfs.EnvironmentKind;
import cdc.perfs.io.PerfsBin;
import cdc.perfs.io.PerfsXml;
import cdc.perfs.runtime.RuntimeEnvironment;
import cdc.perfs.snapshot.SnapshotEnvironment;
import cdc.ui.fx.FxUtil;
import cdc.util.xml.InvalidStateException;
import javafx.scene.Node;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.SplitPane;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.ToolBar;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Region;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class EnvironmentPane extends BorderPane {
protected final MainPane wMain;
private final ToolBar wToolBar = new ToolBar();
private final Button wSnaphot;
protected final Button wSave;
protected final Button wSaveAs;
private final ContextsTableModel contextsModel;
private final SourcesTableModel sourcesModel;
private final ContextsPane wContextsPane;
private final SourcesPane wSourcesPane;
private final ControlledChartPane wControlledChartPane;
private String filename;
public EnvironmentPane(MainPane main,
Environment environment) {
this.wMain = main;
setTop(wToolBar);
if (environment.getKind() == EnvironmentKind.RUNTIME) {
wSnaphot = new Button("Snapshot");
wSnaphot.setOnAction(e -> {
final SnapshotEnvironment snaphot = new SnapshotEnvironment(RuntimeEnvironment.getInstance());
wMain.addSnaphot(snaphot);
});
wSave = null;
wSaveAs = null;
wToolBar.getItems().add(wSnaphot);
} else {
wSnaphot = null;
wSave = new Button("Save");
wSave.setOnAction(e -> save(wSave));
wToolBar.getItems().add(wSave);
wSaveAs = new Button("Save As");
wSaveAs.setOnAction(e -> saveAs(wSaveAs));
wToolBar.getItems().add(wSaveAs);
}
contextsModel = new ContextsTableModel(environment);
sourcesModel = new SourcesTableModel(environment);
final SplitPane wSplitPane = new SplitPane();
wSplitPane.setDividerPosition(0, 0.25);
setCenter(wSplitPane);
final TabPane wTabPane = new TabPane();
wSplitPane.getItems().add(wTabPane);
{
wContextsPane = new ContextsPane(contextsModel);
final Tab wTab = new Tab("Contexts");
wTab.setClosable(false);
wTab.setContent(wContextsPane);
wTabPane.getTabs().add(wTab);
}
{
wSourcesPane = new SourcesPane(sourcesModel);
final Tab wTab = new Tab("Sources");
wTab.setClosable(false);
wTab.setContent(wSourcesPane);
wTabPane.getTabs().add(wTab);
}
wControlledChartPane = new ControlledChartPane(contextsModel);
wSplitPane.getItems().add(wControlledChartPane);
}
public Environment getEnvironment() {
return wControlledChartPane.getEnvironment();
}
public ContextsTableModel getContextsTableModel() {
return contextsModel;
}
public ContextsPane getContextsPane() {
return wContextsPane;
}
public SourcesTableModel getSourcesTableModel() {
return sourcesModel;
}
public SourcesPane getSourcesPane() {
return wSourcesPane;
}
public ControlledChartPane getControlledChartPane() {
return wControlledChartPane;
}
protected void save(Node parent) {
if (filename == null) {
saveAs(parent);
} else {
saveAs(parent, filename);
}
}
protected void saveAs(Node parent) {
final FileChooser wChooser = new FileChooser();
wChooser.setTitle("Open");
wChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Snapshot binary or xml files",
"*.dat",
"*.xml"));
final File file = wChooser.showSaveDialog(parent.getScene().getWindow());
if (file != null) {
saveAs(null, file.getPath());
}
}
private void saveAs(Node parent,
String filename) {
final String path = (filename.endsWith(".dat") || filename.endsWith(".xml")) ? filename : filename + ".xml";
try {
if (path.endsWith("dat")) {
final PerfsBin.Writer writer = new PerfsBin.Writer();
writer.save(getEnvironment(), path);
} else {
final PerfsXml.Printer printer = new PerfsXml.Printer();
printer.save(getEnvironment(), path);
}
this.filename = path;
} catch (final IOException | InvalidStateException e) {
final Alert alert = new Alert(AlertType.ERROR);
final Stage stage = (Stage) alert.getDialogPane().getScene().getWindow();
stage.getIcons().addAll(FxUtil.getApplicationImages());
alert.setTitle("Error");
alert.setHeaderText("Failed to save '" + path + "'");
alert.setContentText(e.getMessage());
alert.getDialogPane().setMinHeight(Region.USE_PREF_SIZE);
alert.showAndWait();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy