Skip to content
Snippets Groups Projects
Commit 0709bf16 authored by Dean Jonas Finkes's avatar Dean Jonas Finkes
Browse files

refactored expert mode

parent e470cb97
Branches
No related tags found
No related merge requests found
Showing
with 1018 additions and 921 deletions
...@@ -2,64 +2,89 @@ package ui.expert; ...@@ -2,64 +2,89 @@ package ui.expert;
import java.io.File; import java.io.File;
import controller.DatabaseController;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.concurrent.WorkerStateEvent; import javafx.concurrent.WorkerStateEvent;
import javafx.event.ActionEvent;
import javafx.event.EventHandler; import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.TextField;
import preferences.PreferenceConstants;
import preferences.Preferences;
import tasks.CandidatePatternListTask; import tasks.CandidatePatternListTask;
import tasks.WriteCandidatePatternList; import tasks.WriteCandidatePatternList;
import ui.shared.ConnectedControl; import ui.shared.ConnectedControl;
public class ApplyCPTab extends ConnectedControl { public class ApplyCandidatePatternController extends ConnectedControl {
private ExpertScreenController controller;
private static ApplyCPTab instance;
public static synchronized ApplyCPTab getInstance() { private ExpertScreenController expertController;
if (ApplyCPTab.instance == null) {
ApplyCPTab.instance = new ApplyCPTab(); private ObservableList<String> cpMatches;
}
return ApplyCPTab.instance; @FXML
} private TextField openNeo4JDBPatternTextField;
@FXML
private ListView<String> matchedCPListView;
@FXML
private ProgressBar cpProgressBar;
@FXML
private Label cpProgressLabel;
@Override @Override
public void init() { public void init() {
if (Preferences.getInstance().hasValue(PreferenceConstants.DEFAULT_DB)) {
String databasePath = Preferences.getInstance().getValue(PreferenceConstants.DEFAULT_DB);
expertController.setDatabasePath(databasePath);
openNeo4JDBPatternTextField.setText(databasePath);
DatabaseController.getInstance().setPath(databasePath);
}
} }
public void setExpertController(final ExpertScreenController controller) { public void setExpertController(final ExpertScreenController controller) {
this.controller = controller; this.expertController = controller;
setApp(controller.getApp());
} }
public void applySelectedCandidatePattern(final String databasePath) { @FXML
protected void applyCPButtonAction(final ActionEvent event) {
String databasePath = openNeo4JDBPatternTextField.getText();
if (databasePath.isEmpty()) { if (databasePath.isEmpty()) {
getApp().openPopup(ui.shared.MainApp.ERROR, true, ExpertScreenController.MISSING_PATHS); getApp().openPopup(ui.shared.MainApp.ERROR, true, ExpertScreenController.MISSING_PATHS);
} else { } else {
controller.getCPProgressBar().setVisible(true); cpProgressBar.setVisible(true);
controller.getCPProgressLabel().setVisible(true); cpProgressLabel.setVisible(true);
final CandidatePatternListTask cpTask = new CandidatePatternListTask(); final CandidatePatternListTask cpTask = new CandidatePatternListTask();
controller.getCPProgressLabel().textProperty().bind(cpTask.messageProperty()); cpProgressLabel.textProperty().bind(cpTask.messageProperty());
controller.getCPProgressBar().progressProperty().bind(cpTask.progressProperty()); cpProgressBar.progressProperty().bind(cpTask.progressProperty());
cpTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() { cpTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override @Override
public void handle(final WorkerStateEvent workerStateEvent) { public void handle(final WorkerStateEvent workerStateEvent) {
controller.setCPMatches(cpTask.getMatches()); cpMatches = cpTask.getMatches();
controller.getMatchedCPListView().setItems(cpTask.getMatches()); matchedCPListView.setItems(cpMatches);
controller.getCPProgressLabel().textProperty().unbind(); cpProgressLabel.textProperty().unbind();
controller.getCPProgressBar().progressProperty().unbind(); cpProgressBar.progressProperty().unbind();
} }
}); });
cpTask.setOnFailed(new EventHandler<WorkerStateEvent>() { cpTask.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override @Override
public void handle(final WorkerStateEvent workerStateEvent) { public void handle(final WorkerStateEvent workerStateEvent) {
controller.getCPProgressLabel().textProperty().unbind(); cpProgressLabel.textProperty().unbind();
controller.getCPProgressBar().progressProperty().unbind(); cpProgressBar.progressProperty().unbind();
getApp().openPopup(ui.shared.MainApp.ERROR, true, "Internal Matching Error!"); getApp().openPopup(ui.shared.MainApp.ERROR, true, "Internal Matching Error!");
controller.getCPProgressBar().setVisible(false); cpProgressBar.setVisible(false);
controller.getCPProgressLabel().setVisible(false); cpProgressLabel.setVisible(false);
cpTask.exceptionProperty().get().printStackTrace(); cpTask.exceptionProperty().get().printStackTrace();
} }
}); });
...@@ -68,22 +93,41 @@ public class ApplyCPTab extends ConnectedControl { ...@@ -68,22 +93,41 @@ public class ApplyCPTab extends ConnectedControl {
} }
} }
public void saveList(final ObservableList<String> cpMatches) { @FXML
protected void saveCPListButtonAction(final ActionEvent event) {
if (cpMatches == null) { if (cpMatches == null) {
getApp().openPopup(ui.shared.MainApp.ERROR, true, "List is empty!"); getApp().openPopup(ui.shared.MainApp.ERROR, true, "List is empty!");
} else { } else {
File selectedFile = fileDialog("save", "", "Save list", "XML files (*.xml)", "*.xml"); File selectedFile = fileDialog("save", "", "Save list", "XML files (*.xml)", "*.xml");
if (selectedFile != null) { if (selectedFile != null) {
controller.getCPProgressBar().setVisible(true); cpProgressBar.setVisible(true);
controller.getCPProgressLabel().setVisible(true); cpProgressLabel.setVisible(true);
WriteCandidatePatternList writeTask = new WriteCandidatePatternList(cpMatches, selectedFile); WriteCandidatePatternList writeTask = new WriteCandidatePatternList(cpMatches, selectedFile);
controller.getCPProgressLabel().textProperty().bind(writeTask.messageProperty()); cpProgressLabel.textProperty().bind(writeTask.messageProperty());
controller.getCPProgressBar().progressProperty().bind(writeTask.progressProperty()); cpProgressBar.progressProperty().bind(writeTask.progressProperty());
new Thread(writeTask).start(); new Thread(writeTask).start();
} }
} }
} }
@FXML
protected void openPatternSettingsButtonAction(final ActionEvent event) {
getApp().openPatternSettings();
}
@FXML
protected void openNeo4JDBButtonAction(final ActionEvent event) {
File pathToDB = selectPath(openNeo4JDBPatternTextField, "Open Neo4JDatabase", PreferenceConstants.DEFAULT_DB);
if (pathToDB != null) {
String databasePath = pathToDB.getAbsolutePath();
DatabaseController.getInstance().setPath(databasePath);
expertController.setDatabasePath(databasePath);
openNeo4JDBPatternTextField.setText(databasePath);
}
}
} }
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.effect.*?>
<?import javafx.scene.image.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.layout.AnchorPane?>
<GridPane hgap="10.0" styleClass="root" vgap="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ui.expert.ApplyCandidatePatternController">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="483.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="417.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="50.0" minWidth="10.0" prefWidth="50.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="195.0" minHeight="0.0" prefHeight="70.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="397.0" minHeight="0.0" prefHeight="269.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="195.0" minHeight="10.0" prefHeight="115.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="280.0" minHeight="0.0" prefHeight="93.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="212.0" minHeight="4.0" prefHeight="81.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="110.0" minHeight="5.0" prefHeight="72.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<HBox alignment="CENTER" fillHeight="false" GridPane.rowIndex="1">
<GridPane.margin>
<Insets />
</GridPane.margin>
<children>
<StackPane prefHeight="235.0" prefWidth="430.0" styleClass="PicPane">
<children>
<ImageView fitHeight="200.0" fitWidth="360.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@/images/phase2t.png" />
</image>
</ImageView>
</children>
</StackPane>
</children>
</HBox>
<VBox alignment="CENTER" spacing="20.0" GridPane.rowIndex="3">
<children>
<Button graphicTextGap="6.0" mnemonicParsing="false" onAction="#applyCPButtonAction" prefHeight="25.0" prefWidth="144.0" styleClass="findButton" text="Find matches" />
</children>
</VBox>
<ListView fx:id="matchedCPListView" GridPane.columnIndex="1" GridPane.rowIndex="1" GridPane.rowSpan="3" />
<HBox alignment="CENTER" GridPane.columnIndex="1" GridPane.rowIndex="4">
<children>
<Button graphicTextGap="6.0" mnemonicParsing="false" onAction="#saveCPListButtonAction" prefHeight="25.0" prefWidth="144.0" styleClass="saveButton" text="Save Pattern List" />
</children>
</HBox>
<VBox alignment="BOTTOM_LEFT" GridPane.columnIndex="1">
<children>
<Label text="Matched patterns:" underline="true">
<font>
<Font name="System Bold" size="18.0" />
</font>
</Label>
</children>
</VBox>
<VBox alignment="CENTER" prefHeight="58.0" prefWidth="505.0" spacing="10.0" GridPane.rowIndex="4">
<children>
<ProgressBar fx:id="cpProgressBar" prefHeight="20.0" prefWidth="260.0" progress="1.0" visible="false" />
<Label fx:id="cpProgressLabel" text="Candidate patterns are being applied..." visible="false">
<font>
<Font name="System Bold" size="12.0" />
</font>
</Label>
</children>
</VBox>
<VBox alignment="CENTER" spacing="15.0" GridPane.rowIndex="2">
<children>
<HBox alignment="CENTER" spacing="10.0">
<children>
<TextField fx:id="openNeo4JDBPatternTextField" editable="false" prefHeight="25.0" prefWidth="250.0" />
<Button minHeight="25.0" mnemonicParsing="false" onAction="#openNeo4JDBButtonAction" prefHeight="25.0" prefWidth="170.0" text="Open Neo4J DB" />
</children>
</HBox>
<Button graphicTextGap="6.0" mnemonicParsing="false" onAction="#openPatternSettingsButtonAction" prefHeight="25.0" prefWidth="144.0" styleClass="settingsButton" text="Pattern settings" />
</children>
</VBox>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</GridPane>
package ui.expert;
import java.io.File;
import controller.FileSystemController;
import controller.LazyQueryController;
import controller.SourceFinder;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.EventHandler;
import logging.Logger;
import model.ParallelizationPattern;
import model.Pattern;
import model.PatternList;
import tasks.Java2SDGTask;
import tasks.SDG2JavaTask;
import tasks.UpdateTask;
import ui.shared.ConnectedControl;
public class ApplyPPTab extends ConnectedControl {
private ExpertScreenController controller;
private static ApplyPPTab instance;
public static synchronized ApplyPPTab getInstance() {
if (ApplyPPTab.instance == null) {
ApplyPPTab.instance = new ApplyPPTab();
}
return ApplyPPTab.instance;
}
@Override
public void init() {
}
public void setExpertController(final ExpertScreenController controller) {
this.controller = controller;
setApp(controller.getApp());
}
public void loadPatternList(final String srcFolder) {
File matchedPatterns = fileDialog("open", "", "Load list", "XML files (*.xml)", "*.xml");
if (matchedPatterns == null || srcFolder.isEmpty()) {
getApp().openPopup(ui.shared.MainApp.ERROR, true, "Missing Paths!");
} else {
PatternList patternList = PatternList.getInstance();
for (Pattern p : patternList.getActivePatterns()) {
Logger.info(p.getName());
Logger.info(Integer.toString(p.getUpdatePatterns().size()));
}
FileSystemController.deleteDir(new File("tmp", ""));
controller.setTempFolder(FileSystemController.copyDirToLocal(srcFolder).getAbsolutePath());
controller.getCandidatePatternComboBox().setDisable(false);
SourceFinder.getInstance().setSrcDirectory(controller.getTempFolder());
LazyQueryController.clearTransformer();
ObservableList<String> emptyStringList = FXCollections.observableArrayList();
ObservableList<ParallelizationPattern> emptyPatternList = FXCollections.observableArrayList();
controller.getMatchingPositionsList().set(emptyStringList);
controller.getUpdatePatternComboBox().setDisable(true);
controller.getTransformButton().setDisable(true);
controller.getParallelizedTextArea().setText("");
controller.getSequentialTextArea().setText("");
controller.getUpdatePatternComboBox().setItems(emptyPatternList);
controller.getCandidatePatternComboBox().setItems(patternList.getActivePatterns());
if (patternList.getActivePatterns().size() > 0) {
controller.getCandidatePatternComboBox().getSelectionModel().select(0);
}
}
}
public void applyPattern(final int index, final ParallelizationPattern pPattern) {
if (index != -1 && pPattern != null) {
controller.getTransformationProgressLabel().setVisible(true);
final UpdateTask updateTask = new UpdateTask(pPattern, index, true);
updateTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
controller.getTransformationProgressLabel().textProperty().unbind();
finishUpdatePattern();
}
});
updateTask.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
controller.getTransformationProgressLabel().setVisible(false);
controller.getTransformationProgressLabel().textProperty().unbind();
controller.getTransformationProgressBar().setProgress(0);
updateTask.exceptionProperty().get().printStackTrace();
}
});
controller.getTransformationProgressLabel().textProperty().bind(updateTask.messageProperty());
controller.getTransformationProgressBar().setProgress(-1);
new Thread(updateTask).start();
}
}
private void finishUpdatePattern() {
final SDG2JavaTask sdg2JavaTask = new SDG2JavaTask(controller.getTempFolder(), false);
final String classpath = controller.getOpenClasspathTextField().getText();
final String mainClass = controller.getMainClassTextField().getText();
final Java2SDGTask java2SDGTask = new Java2SDGTask(controller.getTempFolder(), classpath,
controller.getDatabasePath(), mainClass);
sdg2JavaTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
controller.getTransformationProgressLabel().textProperty().unbind();
controller.getTransformationProgressLabel().textProperty().bind(java2SDGTask.messageProperty());
controller.getTransformationProgressBar().progressProperty().bind(java2SDGTask.progressProperty());
new Thread(java2SDGTask).start();
}
});
sdg2JavaTask.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
controller.getTransformationProgressLabel().setVisible(false);
controller.getTransformationProgressBar().setProgress(0);
controller.getTransformationProgressLabel().textProperty().unbind();
sdg2JavaTask.exceptionProperty().get().printStackTrace();
}
});
java2SDGTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
LazyQueryController.clearTransformer();
controller.getTransformationProgressBar().progressProperty().unbind();
controller.getTransformationProgressLabel().textProperty().unbind();
controller.getTransformButton().setDisable(true);
ObservableList<String> list = FXCollections.observableArrayList();
controller.getMatchingPositionsList().set(list);
controller.getUpdatePatternComboBox().setDisable(true);
controller.getUpdatePatternComboBox().getSelectionModel().clearSelection();
controller.getCandidatePatternComboBox().getSelectionModel().clearSelection();
controller.getParallelizedTextArea().setText("");
controller.getSequentialTextArea().setText("");
}
});
java2SDGTask.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
controller.getTransformationProgressBar().progressProperty().unbind();
controller.getTransformationProgressLabel().textProperty().unbind();
controller.getTransformationProgressLabel().setVisible(false);
java2SDGTask.exceptionProperty().get().printStackTrace();
}
});
controller.getTransformationProgressLabel().textProperty().bind(sdg2JavaTask.messageProperty());
new Thread(sdg2JavaTask).start();
}
}
package ui.expert;
import java.io.File;
import controller.FileSystemController;
import controller.LazyQueryController;
import controller.SourceFinder;
import javafx.beans.property.ListProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.TextArea;
import logging.Logger;
import model.ParallelizationPattern;
import model.Pattern;
import model.PatternList;
import tasks.Java2SDGTask;
import tasks.QueryTask;
import tasks.SDG2JavaTask;
import tasks.UpdateTask;
import ui.shared.ConnectedControl;
import ui.shared.PopupController;
public class ApplyParallelisationPatternController extends ConnectedControl {
private ExpertScreenController expertController;
private ListProperty<String> matchingPositionsList;
@FXML
private ComboBox<Pattern> candidatePatternComboBox;
@FXML
private ComboBox<ParallelizationPattern> updatePatternComboBox;
@FXML
private TextArea parallelizedTextArea;
@FXML
private TextArea sequentialTextArea;
@FXML
private Label transformationProgressLabel;
@FXML
private ProgressBar transformationProgressBar;
@FXML
private Button transformButton;
@FXML
private ListView<String> matchedPositionsListView;
public void setExpertController(final ExpertScreenController controller) {
this.expertController = controller;
}
@Override
public void init() {
matchingPositionsList = new SimpleListProperty<String>();
matchedPositionsListView.itemsProperty().bind(matchingPositionsList);
matchedPositionsListView.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(final ObservableValue<? extends Number> arg0, final Number oldIndex,
final Number newIndex) {
if (newIndex.intValue() == -1) {
return;
}
String newMatch = matchedPositionsListView.getSelectionModel().getSelectedItem();
Logger.info("Selected item: " + newMatch);
String code = LazyQueryController.getInstance().getNormalCode(newIndex.intValue(), newMatch);
sequentialTextArea.setText(code);
parallelizedTextArea.setText("");
updatePatternComboBox.getSelectionModel().clearSelection();
updatePatternComboBox.setDisable(false);
if (updatePatternComboBox.getItems().size() > 0) {
updatePatternComboBox.getSelectionModel().select(0);
}
}
});
candidatePatternComboBox.valueProperty().addListener(new ChangeListener<Pattern>() {
@Override
public void changed(final ObservableValue<? extends Pattern> observable, final Pattern pOld,
final Pattern pNew) {
if (pNew == null) {
return;
}
final PopupController popup = getApp().openPopup(ui.shared.MainApp.LOADING, false,
"Applying selected Candidate Pattern");
updatePatternComboBox.setItems(pNew.getUpdatePatterns());
sequentialTextArea.setText("");
parallelizedTextArea.setText("");
transformButton.setDisable(true);
final QueryTask queryTask = new QueryTask(pNew);
queryTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
updatePatternComboBox.setDisable(true);
matchingPositionsList.set(queryTask.getMatches());
Logger.info("Number of Matches : " + queryTask.getMatches().size());
popup.close();
if (queryTask.getMatches().size() > 0) {
matchedPositionsListView.getSelectionModel().select(0);
}
}
});
new Thread(queryTask).start();
}
});
updatePatternComboBox.valueProperty().addListener(new ChangeListener<ParallelizationPattern>() {
@Override
public void changed(final ObservableValue<? extends ParallelizationPattern> observable,
final ParallelizationPattern patternOld, final ParallelizationPattern patternNew) {
if (patternNew == null) {
return;
}
Pattern activeCandidatePattern = LazyQueryController.getInstance().getActiveCandidatePattern();
if (!activeCandidatePattern.getDisplay()) {
parallelizedTextArea.setText(activeCandidatePattern.getAlternativeDisplayText());
transformButton.setDisable(false);
return;
}
int index = matchedPositionsListView.getSelectionModel().getSelectedIndex();
if (index != -1) {
final PopupController popup = getApp().openPopup(ui.shared.MainApp.LOADING, false,
"Applying selected Update Pattern");
final UpdateTask updateTask = new UpdateTask(patternNew, index, false);
updateTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
parallelizedTextArea.setText(updateTask.getParallelizedCode());
transformButton.setDisable(false);
popup.close();
}
});
updateTask.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
updateTask.exceptionProperty().get().printStackTrace();
popup.close();
}
});
new Thread(updateTask).start();
}
}
});
}
@FXML
protected void openJavaSrcButtonAction(final ActionEvent event) {
File file = openDirectoryDialog("Choose source folder", expertController.getSrcFolder());
expertController.setSrcFolder(file.getAbsolutePath());
}
@FXML
protected void loadPatternListButtonAction(final ActionEvent event) {
String srcFolder = expertController.getSrcFolder();
File matchedPatterns = fileDialog("open", "", "Load list", "XML files (*.xml)", "*.xml");
if (matchedPatterns == null || srcFolder.isEmpty()) {
getApp().openPopup(ui.shared.MainApp.ERROR, true, "Missing Paths!");
} else {
PatternList patternList = PatternList.getInstance();
for (Pattern p : patternList.getActivePatterns()) {
Logger.info(p.getName());
Logger.info(Integer.toString(p.getUpdatePatterns().size()));
}
FileSystemController.deleteDir(new File("tmp", ""));
expertController.setTempFolder(FileSystemController.copyDirToLocal(srcFolder).getAbsolutePath());
candidatePatternComboBox.setDisable(false);
SourceFinder.getInstance().setSrcDirectory(expertController.getTempFolder());
LazyQueryController.clearTransformer();
ObservableList<String> emptyStringList = FXCollections.observableArrayList();
ObservableList<ParallelizationPattern> emptyPatternList = FXCollections.observableArrayList();
matchingPositionsList.set(emptyStringList);
updatePatternComboBox.setDisable(true);
transformButton.setDisable(true);
parallelizedTextArea.setText("");
sequentialTextArea.setText("");
updatePatternComboBox.setItems(emptyPatternList);
candidatePatternComboBox.setItems(patternList.getActivePatterns());
if (patternList.getActivePatterns().size() > 0) {
candidatePatternComboBox.getSelectionModel().select(0);
}
}
}
@FXML
protected void applyPatternButtonAction() {
int index = matchedPositionsListView.getSelectionModel().getSelectedIndex();
ParallelizationPattern pPattern = updatePatternComboBox.getSelectionModel().getSelectedItem();
if (index != -1 && pPattern != null) {
transformationProgressLabel.setVisible(true);
final UpdateTask updateTask = new UpdateTask(pPattern, index, true);
updateTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
transformationProgressLabel.textProperty().unbind();
finishUpdatePattern();
}
});
updateTask.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
transformationProgressLabel.setVisible(false);
transformationProgressLabel.textProperty().unbind();
transformationProgressBar.setProgress(0);
updateTask.exceptionProperty().get().printStackTrace();
}
});
transformationProgressLabel.textProperty().bind(updateTask.messageProperty());
transformationProgressBar.setProgress(-1);
new Thread(updateTask).start();
}
}
private void finishUpdatePattern() {
final SDG2JavaTask sdg2JavaTask = new SDG2JavaTask(expertController.getTempFolder(), false);
final String classpath = expertController.getClasspath();
final String mainClass = expertController.getMainClass();
final Java2SDGTask java2SDGTask = new Java2SDGTask(expertController.getTempFolder(), classpath,
expertController.getDatabasePath(), mainClass);
sdg2JavaTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
transformationProgressLabel.textProperty().unbind();
transformationProgressLabel.textProperty().bind(java2SDGTask.messageProperty());
transformationProgressBar.progressProperty().bind(java2SDGTask.progressProperty());
new Thread(java2SDGTask).start();
}
});
sdg2JavaTask.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
transformationProgressLabel.setVisible(false);
transformationProgressBar.setProgress(0);
transformationProgressLabel.textProperty().unbind();
sdg2JavaTask.exceptionProperty().get().printStackTrace();
}
});
java2SDGTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
LazyQueryController.clearTransformer();
transformationProgressBar.progressProperty().unbind();
transformationProgressLabel.textProperty().unbind();
transformButton.setDisable(true);
ObservableList<String> list = FXCollections.observableArrayList();
matchingPositionsList.set(list);
updatePatternComboBox.setDisable(true);
updatePatternComboBox.getSelectionModel().clearSelection();
candidatePatternComboBox.getSelectionModel().clearSelection();
parallelizedTextArea.setText("");
sequentialTextArea.setText("");
}
});
java2SDGTask.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
transformationProgressBar.progressProperty().unbind();
transformationProgressLabel.textProperty().unbind();
transformationProgressLabel.setVisible(false);
java2SDGTask.exceptionProperty().get().printStackTrace();
}
});
transformationProgressLabel.textProperty().bind(sdg2JavaTask.messageProperty());
new Thread(sdg2JavaTask).start();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.effect.*?>
<?import javafx.scene.image.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.layout.AnchorPane?>
<GridPane hgap="10.0" styleClass="root" vgap="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ui.expert.ApplyParallelisationPatternController">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="200.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="350.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="350.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="366.0" minHeight="10.0" prefHeight="44.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="566.0" minHeight="10.0" prefHeight="566.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="78.0" minHeight="0.0" prefHeight="24.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="237.0" minHeight="10.0" prefHeight="26.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="237.0" minHeight="10.0" prefHeight="27.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<HBox alignment="BOTTOM_LEFT" GridPane.columnIndex="3">
<children>
<ComboBox fx:id="updatePatternComboBox" disable="true" prefHeight="27.0" prefWidth="200.0" promptText="Parallelization Pattern 1" />
</children>
</HBox>
<ListView fx:id="matchedPositionsListView" GridPane.rowIndex="1" />
<TextArea fx:id="sequentialTextArea" text="Code ...." GridPane.columnIndex="2" GridPane.rowIndex="1" />
<TextArea fx:id="parallelizedTextArea" text="Optimized Code..." GridPane.columnIndex="3" GridPane.rowIndex="1" />
<HBox alignment="BOTTOM_LEFT" GridPane.columnIndex="2">
<children>
<ComboBox fx:id="candidatePatternComboBox" disable="true" prefHeight="27.0" prefWidth="200.0" promptText="Candidate Pattern 1" />
</children>
</HBox>
<VBox alignment="BOTTOM_CENTER" GridPane.columnIndex="1" GridPane.rowSpan="2">
<children>
<Separator orientation="VERTICAL" prefHeight="610.0" prefWidth="0.0" />
</children>
</VBox>
<HBox alignment="CENTER_LEFT" spacing="10.0" GridPane.columnIndex="2" GridPane.columnSpan="3" GridPane.rowIndex="3">
<children>
<ProgressBar fx:id="transformationProgressBar" prefHeight="25.0" prefWidth="575.0" progress="0.0" />
<Button fx:id="transformButton" disable="true" graphicTextGap="6.0" mnemonicParsing="false" onAction="#applyPatternButtonAction" prefHeight="25.0" styleClass="applyButton" text="Apply patterns" />
</children>
</HBox>
<VBox alignment="CENTER" spacing="10.0" GridPane.rowIndex="2" GridPane.rowSpan="2">
<children>
<Button minHeight="25.0" minWidth="150.0" mnemonicParsing="false" onAction="#openJavaSrcButtonAction" prefWidth="150.0" text="Select source folder" GridPane.rowIndex="4" />
<Button minHeight="25.0" minWidth="150.0" mnemonicParsing="false" onAction="#loadPatternListButtonAction" prefWidth="150.0" styleClass="importButton" text="Load pattern list" />
</children>
</VBox>
<VBox alignment="BOTTOM_LEFT">
<children>
<Label text="Matching positions:" underline="true" />
</children>
</VBox>
<HBox alignment="BOTTOM_LEFT" prefHeight="100.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="2">
<children>
<Label fx:id="transformationProgressLabel" visible="false" />
</children>
</HBox>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</GridPane>
\ No newline at end of file
...@@ -13,285 +13,17 @@ ...@@ -13,285 +13,17 @@
<tabs> <tabs>
<Tab text="Import/Export"> <Tab text="Import/Export">
<content> <content>
<GridPane styleClass="root"> <fx:include fx:id="ImportExportTab" source="ImportExportTab.fxml"/>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="450.0" minWidth="10.0" prefWidth="450.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="20.0" minWidth="20.0" prefWidth="20.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="450.0" minWidth="10.0" prefWidth="450.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="372.0" minHeight="10.0" prefHeight="313.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="131.0" minHeight="10.0" prefHeight="121.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="61.0" minHeight="10.0" prefHeight="21.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="211.0" minHeight="10.0" prefHeight="69.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="211.0" minHeight="10.0" prefHeight="33.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="196.0" minHeight="10.0" prefHeight="196.0" vgrow="ALWAYS" />
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<HBox alignment="CENTER" spacing="70.0" GridPane.columnIndex="3" GridPane.rowIndex="4">
<children>
<Button graphicTextGap="6.0" mnemonicParsing="false" onAction="#exportDBButtonAction" prefHeight="25.0" styleClass="exportButton" text="Export Database" />
</children>
</HBox>
<VBox alignment="CENTER" spacing="20.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<children>
<HBox alignment="CENTER" spacing="10.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<children>
<TextField fx:id="openJavaTextField" prefHeight="25.0" prefWidth="250.0" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<Button mnemonicParsing="false" onAction="#openJavaSrcButtonAction" prefHeight="25.0" prefWidth="170.0" text="Open Java Folder" />
</children>
</HBox>
<HBox alignment="CENTER" spacing="10.0">
<children>
<TextField fx:id="openClasspathTextField" prefHeight="25.0" prefWidth="250.0" />
<Button minHeight="25.0" mnemonicParsing="false" onAction="#openClasspathButtonAction" prefHeight="25.0" prefWidth="170.0" text="Open Referenced Libs" />
</children>
</HBox>
<HBox alignment="CENTER" spacing="10.0">
<children>
<Label text="Main Class:" GridPane.columnIndex="1" GridPane.rowIndex="4">
<font>
<Font size="14.0" />
</font>
</Label>
<TextField fx:id="mainClassTextField" text="helloWorld.HelloWorld" GridPane.columnIndex="1" GridPane.rowIndex="4" />
</children>
</HBox>
</children>
</VBox>
<VBox alignment="CENTER" GridPane.columnIndex="2" GridPane.rowSpan="8">
<children>
<Separator orientation="VERTICAL" prefHeight="650.0" prefWidth="20.0" />
</children>
</VBox>
<HBox alignment="CENTER" fillHeight="false" GridPane.columnIndex="1">
<children>
<StackPane prefHeight="235.0" prefWidth="430.0" styleClass="PicPane">
<children>
<ImageView fitHeight="200.0" fitWidth="360.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@/images/phase1t.png" />
</image>
</ImageView>
</children>
</StackPane>
</children>
</HBox>
<HBox alignment="CENTER" fillHeight="false" GridPane.columnIndex="3">
<children>
<StackPane prefHeight="235.0" prefWidth="430.0" styleClass="PicPane">
<children>
<ImageView fitHeight="200.0" fitWidth="360.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@/images/phase4t.png" />
</image>
</ImageView>
</children>
</StackPane>
</children>
</HBox>
<VBox alignment="CENTER" fillWidth="false" spacing="20.0" GridPane.columnIndex="1" GridPane.rowIndex="5">
<children>
<ProgressIndicator fx:id="java2sdgProgressBar" minHeight="10.0" minWidth="10.0" prefHeight="100.0" prefWidth="80.0" visible="false" />
<Label fx:id="java2sdgProgressLabel" text="SDG is being calculated ..." visible="false">
<font>
<Font name="System Bold" size="12.0" />
</font>
</Label>
</children>
</VBox>
<HBox alignment="CENTER" GridPane.columnIndex="1" GridPane.rowIndex="4">
<children>
<Button graphicTextGap="6.0" mnemonicParsing="false" onAction="#startJava2SDGButtonAction" prefHeight="25.0" styleClass="importButton" text="Import Java code" GridPane.columnIndex="1" GridPane.rowIndex="3" />
</children>
</HBox>
<HBox alignment="CENTER" spacing="10.0" GridPane.columnIndex="1" GridPane.rowIndex="3">
<children>
<HBox alignment="TOP_CENTER" spacing="10.0">
<children>
<TextField fx:id="openNeo4JDBImportTextField" editable="false" prefHeight="25.0" prefWidth="250.0" />
<Button minHeight="25.0" mnemonicParsing="false" onAction="#openNeo4JDBButtonAction" prefHeight="25.0" prefWidth="170.0" text="Select Target Path for DB" />
</children>
</HBox>
</children>
</HBox>
<VBox alignment="CENTER" spacing="20.0" GridPane.columnIndex="3" GridPane.rowIndex="1">
<children>
<HBox alignment="CENTER" spacing="10.0">
<children>
<TextField fx:id="openNeo4JDBExportTextField" disable="true" editable="false" prefHeight="25.0" prefWidth="250.0" />
<Button minHeight="25.0" mnemonicParsing="false" onAction="#openNeo4JDBButtonAction" prefHeight="25.0" prefWidth="170.0" text="Open Neo4J DB" />
</children>
</HBox>
<HBox alignment="CENTER" spacing="10.0">
<children>
<TextField fx:id="openJavaTargetTextField" prefHeight="25.0" prefWidth="250.0" />
<Button mnemonicParsing="false" onAction="#openJavaTargetButtonAction" prefHeight="25.0" prefWidth="170.0" text="Select Target Folder for Java" />
</children>
</HBox>
</children>
</VBox>
<VBox alignment="CENTER" fillWidth="false" spacing="20.0" GridPane.columnIndex="3" GridPane.rowIndex="5">
<children>
<ProgressIndicator fx:id="sdg2javaProgressBar" minHeight="10.0" minWidth="10.0" prefHeight="100.0" prefWidth="80.0" visible="false" />
<Label fx:id="sdg2javaProgressLabel" text="Source code is being calculated ..." visible="false">
<font>
<Font name="System Bold" size="12.0" />
</font>
</Label>
</children>
</VBox>
</children>
</GridPane>
</content> </content>
</Tab> </Tab>
<Tab text="Apply CP"> <Tab text="Apply CP">
<content> <content>
<GridPane hgap="10.0" styleClass="root" vgap="10.0"> <fx:include fx:id="ApplyCandidatePatternTab" source="ApplyCandidatePatternTab.fxml"/>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="483.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="417.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="50.0" minWidth="10.0" prefWidth="50.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="195.0" minHeight="0.0" prefHeight="70.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="397.0" minHeight="0.0" prefHeight="269.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="195.0" minHeight="10.0" prefHeight="115.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="280.0" minHeight="0.0" prefHeight="93.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="212.0" minHeight="4.0" prefHeight="81.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="110.0" minHeight="5.0" prefHeight="72.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<HBox alignment="CENTER" fillHeight="false" GridPane.rowIndex="1">
<GridPane.margin>
<Insets />
</GridPane.margin>
<children>
<StackPane prefHeight="235.0" prefWidth="430.0" styleClass="PicPane">
<children>
<ImageView fitHeight="200.0" fitWidth="360.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@/images/phase2t.png" />
</image>
</ImageView>
</children>
</StackPane>
</children>
</HBox>
<VBox alignment="CENTER" spacing="20.0" GridPane.rowIndex="3">
<children>
<Button graphicTextGap="6.0" mnemonicParsing="false" onAction="#applyCPButtonAction" prefHeight="25.0" prefWidth="144.0" styleClass="findButton" text="Find matches" />
</children>
</VBox>
<ListView fx:id="matchedCPListView" GridPane.columnIndex="1" GridPane.rowIndex="1" GridPane.rowSpan="3" />
<HBox alignment="CENTER" GridPane.columnIndex="1" GridPane.rowIndex="4">
<children>
<Button graphicTextGap="6.0" mnemonicParsing="false" onAction="#saveCPListButtonAction" prefHeight="25.0" prefWidth="144.0" styleClass="saveButton" text="Save Pattern List" />
</children>
</HBox>
<VBox alignment="BOTTOM_LEFT" GridPane.columnIndex="1">
<children>
<Label text="Matched patterns:" underline="true">
<font>
<Font name="System Bold" size="18.0" />
</font>
</Label>
</children>
</VBox>
<VBox alignment="CENTER" prefHeight="58.0" prefWidth="505.0" spacing="10.0" GridPane.rowIndex="4">
<children>
<ProgressBar fx:id="cpProgressBar" prefHeight="20.0" prefWidth="260.0" progress="1.0" visible="false" />
<Label fx:id="cpProgressLabel" text="Candidate patterns are being applied..." visible="false">
<font>
<Font name="System Bold" size="12.0" />
</font>
</Label>
</children>
</VBox>
<VBox alignment="CENTER" spacing="15.0" GridPane.rowIndex="2">
<children>
<HBox alignment="CENTER" spacing="10.0">
<children>
<TextField fx:id="openNeo4JDBPatternTextField" disable="true" editable="false" prefHeight="25.0" prefWidth="250.0" />
<Button minHeight="25.0" mnemonicParsing="false" onAction="#openNeo4JDBButtonAction" prefHeight="25.0" prefWidth="170.0" text="Open Neo4J DB" />
</children>
</HBox>
<Button graphicTextGap="6.0" mnemonicParsing="false" onAction="#openPatternSettingsButtonAction" prefHeight="25.0" prefWidth="144.0" styleClass="settingsButton" text="Pattern settings" />
</children>
</VBox>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</GridPane>
</content> </content>
</Tab> </Tab>
<Tab text="Apply PP"> <Tab text="Apply PP">
<content> <content>
<GridPane hgap="10.0" styleClass="root" vgap="10.0"> <fx:include fx:id="ApplyParallelisationPatternTab" source="ApplyParallelisationPatternTab.fxml"/>
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="200.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="350.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="350.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="366.0" minHeight="10.0" prefHeight="44.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="566.0" minHeight="10.0" prefHeight="566.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="78.0" minHeight="0.0" prefHeight="24.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="237.0" minHeight="10.0" prefHeight="26.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="237.0" minHeight="10.0" prefHeight="27.0" vgrow="SOMETIMES" />
</rowConstraints>
<children>
<HBox alignment="BOTTOM_LEFT" GridPane.columnIndex="3">
<children>
<ComboBox fx:id="updatePatternComboBox" disable="true" prefHeight="27.0" prefWidth="200.0" promptText="Parallelization Pattern 1" />
</children>
</HBox>
<ListView fx:id="matchedPositionsListView" GridPane.rowIndex="1" />
<TextArea fx:id="sequentialTextArea" text="Code ...." GridPane.columnIndex="2" GridPane.rowIndex="1" />
<TextArea fx:id="parallelizedTextArea" text="Optimized Code..." GridPane.columnIndex="3" GridPane.rowIndex="1" />
<HBox alignment="BOTTOM_LEFT" GridPane.columnIndex="2">
<children>
<ComboBox fx:id="candidatePatternComboBox" disable="true" prefHeight="27.0" prefWidth="200.0" promptText="Candidate Pattern 1" />
</children>
</HBox>
<VBox alignment="BOTTOM_CENTER" GridPane.columnIndex="1" GridPane.rowSpan="2">
<children>
<Separator orientation="VERTICAL" prefHeight="610.0" prefWidth="0.0" />
</children>
</VBox>
<HBox alignment="CENTER_LEFT" spacing="10.0" GridPane.columnIndex="2" GridPane.columnSpan="3" GridPane.rowIndex="3">
<children>
<ProgressBar fx:id="transformationProgressBar" prefHeight="25.0" prefWidth="575.0" progress="0.0" />
<Button fx:id="transformButton" disable="true" graphicTextGap="6.0" mnemonicParsing="false" onAction="#applyPatternButtonAction" prefHeight="25.0" styleClass="applyButton" text="Apply patterns" />
</children>
</HBox>
<VBox alignment="CENTER" spacing="10.0" GridPane.rowIndex="2" GridPane.rowSpan="2">
<children>
<Button minHeight="25.0" minWidth="150.0" mnemonicParsing="false" onAction="#openJavaSrcButtonAction" prefWidth="150.0" text="Select source folder" GridPane.rowIndex="4" />
<Button minHeight="25.0" minWidth="150.0" mnemonicParsing="false" onAction="#loadPatternListButtonAction" prefWidth="150.0" styleClass="importButton" text="Load pattern list" />
</children>
</VBox>
<VBox alignment="BOTTOM_LEFT">
<children>
<Label text="Matching positions:" underline="true" />
</children>
</VBox>
<HBox alignment="BOTTOM_LEFT" prefHeight="100.0" prefWidth="200.0" GridPane.columnIndex="2" GridPane.columnSpan="2" GridPane.rowIndex="2">
<children>
<Label fx:id="transformationProgressLabel" visible="false" />
</children>
</HBox>
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</GridPane>
</content> </content>
</Tab> </Tab>
</tabs> </tabs>
......
package ui.expert; package ui.expert;
import java.io.File;
import controller.DatabaseController;
import controller.LazyQueryController;
import javafx.beans.property.ListProperty;
import javafx.beans.property.SimpleListProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.ObservableList;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import logging.Logger;
import model.ParallelizationPattern;
import model.Pattern;
import preferences.PreferenceConstants;
import preferences.Preferences;
import tasks.QueryTask;
import tasks.UpdateTask;
import ui.shared.ConnectedControl; import ui.shared.ConnectedControl;
import ui.shared.PopupController; import ui.shared.MainApp;
public class ExpertScreenController extends ConnectedControl { public class ExpertScreenController extends ConnectedControl {
public final static String MISSING_PATHS = "Missing Paths"; public final static String MISSING_PATHS = "Missing Paths";
private ObservableList<String> cpMatches;
private ListProperty<String> matchingPositionsList;
private String databasePath; private String databasePath;
private String tempFolder; private String classpath;
private String mainClass;
@FXML private String srcFolder;
private TextField openJavaTextField;
@FXML
private TextField openJavaTargetTextField;
@FXML
private TextField openClasspathTextField;
@FXML
private TextField mainClassTextField;
@FXML
private TextField openNeo4JDBImportTextField;
@FXML
private TextField openNeo4JDBExportTextField;
@FXML
private TextField openNeo4JDBPatternTextField;
@FXML
private ListView<String> matchedCPListView;
@FXML
private ListView<String> matchedPositionsListView;
@FXML
private ProgressIndicator java2sdgProgressBar;
@FXML private String tempFolder;
private Label java2sdgProgressLabel;
@FXML
private ProgressIndicator sdg2javaProgressBar;
@FXML
private Label sdg2javaProgressLabel;
@FXML
private ProgressBar cpProgressBar;
@FXML
private Label cpProgressLabel;
@FXML
private ComboBox<Pattern> candidatePatternComboBox;
@FXML
private ComboBox<ParallelizationPattern> updatePatternComboBox;
@FXML
private TextArea parallelizedTextArea;
@FXML
private TextArea sequentialTextArea;
@FXML @FXML
private Label transformationProgressLabel; private ImportExportController ImportExportTabController;
@FXML @FXML
private ProgressBar transformationProgressBar; private ApplyCandidatePatternController ApplyCandidatePatternTabController;
@FXML @FXML
private Button transformButton; ApplyParallelisationPatternController ApplyParallelisationPatternTabController;
public ProgressIndicator getJava2SdgProgressBar() {
return java2sdgProgressBar;
}
public Label getJava2SdgProgressLabel() {
return java2sdgProgressLabel;
}
public ProgressIndicator getSdg2JavaProgressBar() { @Override
return sdg2javaProgressBar; public void init() {
} MainApp mainApp = getApp();
ImportExportTabController.setApp(mainApp);
public Label getSdg2JavaProgressLabel() { ImportExportTabController.setExpertController(this);
return sdg2javaProgressLabel; ImportExportTabController.init();
} ApplyCandidatePatternTabController.setApp(mainApp);
ApplyCandidatePatternTabController.setExpertController(this);
public ProgressBar getCPProgressBar() { ApplyCandidatePatternTabController.init();
return cpProgressBar; ApplyParallelisationPatternTabController.setApp(mainApp);
} ApplyParallelisationPatternTabController.setExpertController(this);
ApplyParallelisationPatternTabController.init();
public Label getCPProgressLabel() {
return cpProgressLabel;
} }
public void setCPMatches(ObservableList<String> cpMatches) { public String getDatabasePath() {
this.cpMatches = cpMatches; return databasePath;
} }
public ListView<String> getMatchedCPListView() { public void setDatabasePath(final String databasePath) {
return matchedCPListView; this.databasePath = databasePath;
} }
public String getTempFolder() { public String getTempFolder() {
return tempFolder; return tempFolder;
} }
public void setTempFolder(String tempFolder) { public void setTempFolder(final String tempFolder) {
this.tempFolder = tempFolder; this.tempFolder = tempFolder;
} }
public ListProperty<String> getMatchingPositionsList() { public String getClasspath() {
return matchingPositionsList; return classpath;
}
public ComboBox<Pattern> getCandidatePatternComboBox() {
return candidatePatternComboBox;
}
public ComboBox<ParallelizationPattern> getUpdatePatternComboBox() {
return updatePatternComboBox;
}
public TextArea getParallelizedTextArea() {
return parallelizedTextArea;
}
public TextArea getSequentialTextArea() {
return sequentialTextArea;
}
public Button getTransformButton() {
return transformButton;
}
public Label getTransformationProgressLabel() {
return transformationProgressLabel;
}
public ProgressBar getTransformationProgressBar() {
return transformationProgressBar;
}
public String getDatabasePath() {
return databasePath;
}
public TextField getOpenClasspathTextField() {
return openClasspathTextField;
}
public TextField getMainClassTextField() {
return mainClassTextField;
}
@Override
public void init() {
ImportExportTab.getInstance().setExpertController(this);
ApplyCPTab.getInstance().setExpertController(this);
ApplyPPTab.getInstance().setExpertController(this);
if (Preferences.getInstance().hasValue(PreferenceConstants.DEFAULT_PATH)) {
openJavaTextField.setText(Preferences.getInstance().getValue(PreferenceConstants.DEFAULT_PATH));
}
if (Preferences.getInstance().hasValue(PreferenceConstants.DEFAULT_CLASS_PATH)) {
openClasspathTextField.setText(Preferences.getInstance().getValue(PreferenceConstants.DEFAULT_CLASS_PATH));
}
if (Preferences.getInstance().hasValue(PreferenceConstants.DEFAULT_CLASS)) {
mainClassTextField.setText(Preferences.getInstance().getValue(PreferenceConstants.DEFAULT_CLASS));
}
if (Preferences.getInstance().hasValue(PreferenceConstants.DEFAULT_TARGET_PATH)) {
openJavaTargetTextField
.setText(Preferences.getInstance().getValue(PreferenceConstants.DEFAULT_TARGET_PATH));
}
if (Preferences.getInstance().hasValue(PreferenceConstants.DEFAULT_DB)) {
databasePath = Preferences.getInstance().getValue(PreferenceConstants.DEFAULT_DB);
openNeo4JDBImportTextField.setText(databasePath);
openNeo4JDBExportTextField.setText(databasePath);
openNeo4JDBPatternTextField.setText(databasePath);
DatabaseController.getInstance().setPath(databasePath);
}
mainClassTextField.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(final ObservableValue<? extends String> observable, final String oldValue,
final String newValue) {
Preferences.getInstance().setValue(PreferenceConstants.DEFAULT_CLASS, mainClassTextField.getText());
}
});
matchingPositionsList = new SimpleListProperty<String>();
matchedPositionsListView.itemsProperty().bind(matchingPositionsList);
matchedPositionsListView.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(final ObservableValue<? extends Number> arg0, final Number oldIndex,
final Number newIndex) {
if (newIndex.intValue() == -1) {
return;
}
String newMatch = matchedPositionsListView.getSelectionModel().getSelectedItem();
Logger.info("Selected item: " + newMatch);
String code = LazyQueryController.getInstance().getNormalCode(newIndex.intValue(), newMatch);
sequentialTextArea.setText(code);
parallelizedTextArea.setText("");
updatePatternComboBox.getSelectionModel().clearSelection();
updatePatternComboBox.setDisable(false);
if (updatePatternComboBox.getItems().size() > 0) {
updatePatternComboBox.getSelectionModel().select(0);
}
}
});
candidatePatternComboBox.valueProperty().addListener(new ChangeListener<Pattern>() {
@Override
public void changed(final ObservableValue<? extends Pattern> observable, final Pattern pOld,
final Pattern pNew) {
if (pNew == null) {
return;
}
final PopupController popup = getApp().openPopup(ui.shared.MainApp.LOADING, false,
"Applying selected Candidate Pattern");
updatePatternComboBox.setItems(pNew.getUpdatePatterns());
sequentialTextArea.setText("");
parallelizedTextArea.setText("");
transformButton.setDisable(true);
final QueryTask queryTask = new QueryTask(pNew);
queryTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
updatePatternComboBox.setDisable(true);
matchingPositionsList.set(queryTask.getMatches());
Logger.info("Number of Matches : " + queryTask.getMatches().size());
popup.close();
if (queryTask.getMatches().size() > 0) {
matchedPositionsListView.getSelectionModel().select(0);
}
}
});
new Thread(queryTask).start();
}
});
updatePatternComboBox.valueProperty().addListener(new ChangeListener<ParallelizationPattern>() {
@Override
public void changed(final ObservableValue<? extends ParallelizationPattern> observable,
final ParallelizationPattern patternOld, final ParallelizationPattern patternNew) {
if (patternNew == null) {
return;
} }
Pattern activeCandidatePattern = LazyQueryController.getInstance().getActiveCandidatePattern(); public void setClasspath(final String classpath) {
this.classpath = classpath;
if (!activeCandidatePattern.getDisplay()) {
parallelizedTextArea.setText(activeCandidatePattern.getAlternativeDisplayText());
transformButton.setDisable(false);
return;
} }
int index = matchedPositionsListView.getSelectionModel().getSelectedIndex(); public String getMainClass() {
if (index != -1) { return mainClass;
final PopupController popup = getApp().openPopup(ui.shared.MainApp.LOADING, false,
"Applying selected Update Pattern");
final UpdateTask updateTask = new UpdateTask(patternNew, index, false);
updateTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
parallelizedTextArea.setText(updateTask.getParallelizedCode());
transformButton.setDisable(false);
popup.close();
} }
});
updateTask.setOnFailed(new EventHandler<WorkerStateEvent>() { public void setMainClass(final String mainClass) {
@Override this.mainClass = mainClass;
public void handle(final WorkerStateEvent workerStateEvent) {
updateTask.exceptionProperty().get().printStackTrace();
popup.close();
} }
});
new Thread(updateTask).start();
public String getSrcFolder() {
return srcFolder;
} }
}
});
public void setSrcFolder(final String srcFolder) {
this.srcFolder = srcFolder;
} }
@FXML
protected void applyPatternButtonAction() {
int index = matchedPositionsListView.getSelectionModel().getSelectedIndex();
ParallelizationPattern pPattern = updatePatternComboBox.getSelectionModel().getSelectedItem();
ApplyPPTab.getInstance().applyPattern(index, pPattern);
}
@FXML
protected void openJavaSrcButtonAction(final ActionEvent event) {
selectPath(openJavaTextField, "Choose source folder", PreferenceConstants.DEFAULT_PATH);
}
@FXML
protected void openClasspathButtonAction(final ActionEvent event) {
selectPath(openClasspathTextField, "Choose libs folder", PreferenceConstants.DEFAULT_CLASS_PATH);
}
@FXML
protected void openJavaTargetButtonAction(final ActionEvent event) {
selectPath(openJavaTargetTextField, "Choose new source folder", PreferenceConstants.DEFAULT_TARGET_PATH);
}
@FXML
protected void openNeo4JDBButtonAction(final ActionEvent event) {
File pathToDB = selectPath(openNeo4JDBImportTextField, "Open Neo4J Database", PreferenceConstants.DEFAULT_DB);
if (pathToDB != null) {
databasePath = pathToDB.getAbsolutePath();
DatabaseController.getInstance().setPath(databasePath);
openNeo4JDBImportTextField.setText(databasePath);
openNeo4JDBExportTextField.setText(databasePath);
openNeo4JDBPatternTextField.setText(databasePath);
}
}
@FXML
protected void openPatternSettingsButtonAction(final ActionEvent event) {
getApp().openPatternSettings();
}
@FXML
protected void startJava2SDGButtonAction(final ActionEvent event) {
final String javaSrc = openJavaTextField.getText();
final String classpath = openClasspathTextField.getText();
final String mainClass = mainClassTextField.getText();
ImportExportTab.getInstance().java2SDG(javaSrc, classpath, mainClass, databasePath);
}
@FXML
protected void exportDBButtonAction(final ActionEvent event) {
final String outputDir = openJavaTargetTextField.getText();
ImportExportTab.getInstance().sdg2Java(outputDir);
}
@FXML
protected void applyCPButtonAction(final ActionEvent event) {
ApplyCPTab.getInstance().applySelectedCandidatePattern(databasePath);
}
@FXML
protected void saveCPListButtonAction(final ActionEvent event) {
ApplyCPTab.getInstance().saveList(cpMatches);
}
@FXML
protected void loadPatternListButtonAction(final ActionEvent event) {
String srcFolder = openJavaTextField.getText();
ApplyPPTab.getInstance().loadPatternList(srcFolder);
}
} }
package ui.expert;
import java.io.File;
import controller.DatabaseController;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.control.TextField;
import preferences.PreferenceConstants;
import preferences.Preferences;
import tasks.Java2SDGTask;
import tasks.SDG2JavaTask;
import ui.shared.ConnectedControl;
public class ImportExportController extends ConnectedControl {
public final static String MISSING_PATHS = "Missing Paths";
private ExpertScreenController expertController;
@FXML
private TextField openJavaTextField;
@FXML
private TextField openJavaTargetTextField;
@FXML
private TextField openClasspathTextField;
@FXML
private TextField mainClassTextField;
@FXML
private TextField openNeo4JDBImportTextField;
@FXML
private TextField openNeo4JDBExportTextField;
@FXML
private ProgressIndicator java2sdgProgressBar;
@FXML
private Label java2sdgProgressLabel;
@FXML
private ProgressIndicator sdg2javaProgressBar;
@FXML
private Label sdg2javaProgressLabel;
@Override
public void init() {
if (Preferences.getInstance().hasValue(PreferenceConstants.DEFAULT_PATH)) {
openJavaTextField.setText(Preferences.getInstance().getValue(PreferenceConstants.DEFAULT_PATH));
expertController.setSrcFolder(openJavaTextField.getText());
}
if (Preferences.getInstance().hasValue(PreferenceConstants.DEFAULT_CLASS_PATH)) {
openClasspathTextField.setText(Preferences.getInstance().getValue(PreferenceConstants.DEFAULT_CLASS_PATH));
expertController.setClasspath(openClasspathTextField.getText());
}
if (Preferences.getInstance().hasValue(PreferenceConstants.DEFAULT_CLASS)) {
mainClassTextField.setText(Preferences.getInstance().getValue(PreferenceConstants.DEFAULT_CLASS));
expertController.setMainClass(mainClassTextField.getText());
}
if (Preferences.getInstance().hasValue(PreferenceConstants.DEFAULT_TARGET_PATH)) {
openJavaTargetTextField
.setText(Preferences.getInstance().getValue(PreferenceConstants.DEFAULT_TARGET_PATH));
}
if (Preferences.getInstance().hasValue(PreferenceConstants.DEFAULT_DB)) {
String databasePath = Preferences.getInstance().getValue(PreferenceConstants.DEFAULT_DB);
expertController.setDatabasePath(databasePath);
openNeo4JDBImportTextField.setText(databasePath);
openNeo4JDBExportTextField.setText(databasePath);
DatabaseController.getInstance().setPath(databasePath);
}
mainClassTextField.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(final ObservableValue<? extends String> observable, final String oldValue,
final String newValue) {
Preferences.getInstance().setValue(PreferenceConstants.DEFAULT_CLASS, mainClassTextField.getText());
expertController.setMainClass(newValue);
}
});
}
public void setExpertController(final ExpertScreenController controller) {
this.expertController = controller;
}
@FXML
protected void openJavaSrcButtonAction(final ActionEvent event) {
selectPath(openJavaTextField, "Choose source folder", PreferenceConstants.DEFAULT_PATH);
expertController.setSrcFolder(openJavaTextField.getText());
}
@FXML
protected void openClasspathButtonAction(final ActionEvent event) {
selectPath(openClasspathTextField, "Choose libs folder", PreferenceConstants.DEFAULT_CLASS_PATH);
expertController.setClasspath(openClasspathTextField.getText());
}
@FXML
protected void openJavaTargetButtonAction(final ActionEvent event) {
selectPath(openJavaTargetTextField, "Choose new source folder", PreferenceConstants.DEFAULT_TARGET_PATH);
}
@FXML
protected void openNeo4JDBButtonAction(final ActionEvent event) {
File pathToDB = selectPath(openNeo4JDBImportTextField, "Open Neo4J Database", PreferenceConstants.DEFAULT_DB);
if (pathToDB != null) {
String databasePath = pathToDB.getAbsolutePath();
DatabaseController.getInstance().setPath(databasePath);
expertController.setDatabasePath(databasePath);
openNeo4JDBImportTextField.setText(databasePath);
openNeo4JDBExportTextField.setText(databasePath);
}
}
@FXML
protected void startJava2SDGButtonAction(final ActionEvent event) {
final String javaSrc = openJavaTextField.getText();
final String classpath = openClasspathTextField.getText();
final String mainClass = mainClassTextField.getText();
final String databasePath = expertController.getDatabasePath();
if (javaSrc.isEmpty() || databasePath.isEmpty() || mainClass.isEmpty()) {
getApp().openPopup(ui.shared.MainApp.ERROR, true, ExpertScreenController.MISSING_PATHS);
} else {
java2sdgProgressBar.setVisible(true);
java2sdgProgressLabel.setVisible(true);
final Java2SDGTask java2SDGTask = new Java2SDGTask(javaSrc, classpath, databasePath, mainClass);
java2SDGTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
java2sdgProgressLabel.textProperty().unbind();
java2sdgProgressBar.progressProperty().unbind();
}
});
java2SDGTask.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
java2sdgProgressLabel.textProperty().unbind();
java2sdgProgressBar.progressProperty().unbind();
getApp().openPopup(ui.shared.MainApp.ERROR, true, "Internal Error in Java2Sdg!");
java2sdgProgressBar.setVisible(false);
java2sdgProgressLabel.setVisible(false);
java2SDGTask.exceptionProperty().get().printStackTrace();
}
});
java2sdgProgressLabel.textProperty().bind(java2SDGTask.messageProperty());
java2sdgProgressBar.progressProperty().bind(java2SDGTask.progressProperty());
new Thread(java2SDGTask).start();
}
}
@FXML
protected void exportDBButtonAction(final ActionEvent event) {
final String outputDir = openJavaTargetTextField.getText();
if (outputDir.isEmpty()) {
getApp().openPopup(ui.shared.MainApp.ERROR, true, ExpertScreenController.MISSING_PATHS);
} else {
sdg2javaProgressBar.setVisible(true);
sdg2javaProgressLabel.setVisible(true);
final SDG2JavaTask sdg2JavaTask = new SDG2JavaTask(outputDir, false);
sdg2JavaTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
sdg2javaProgressLabel.textProperty().unbind();
sdg2javaProgressBar.progressProperty().unbind();
}
});
sdg2JavaTask.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
sdg2javaProgressLabel.textProperty().unbind();
sdg2javaProgressBar.progressProperty().unbind();
getApp().openPopup(ui.shared.MainApp.ERROR, true, "Internal Error in Sdg2Java!");
sdg2javaProgressBar.setVisible(false);
sdg2javaProgressLabel.setVisible(false);
sdg2JavaTask.exceptionProperty().get().printStackTrace();
}
});
sdg2javaProgressLabel.textProperty().bind(sdg2JavaTask.messageProperty());
sdg2javaProgressBar.progressProperty().bind(sdg2JavaTask.progressProperty());
new Thread(sdg2JavaTask).start();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.effect.*?>
<?import javafx.scene.image.*?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<?import javafx.scene.layout.AnchorPane?>
<GridPane styleClass="root" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ui.expert.ImportExportController">
<columnConstraints>
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="450.0" minWidth="10.0" prefWidth="450.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="20.0" minWidth="20.0" prefWidth="20.0" />
<ColumnConstraints hgrow="SOMETIMES" maxWidth="450.0" minWidth="10.0" prefWidth="450.0" />
<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" />
</columnConstraints>
<rowConstraints>
<RowConstraints maxHeight="372.0" minHeight="10.0" prefHeight="313.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="131.0" minHeight="10.0" prefHeight="121.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="61.0" minHeight="10.0" prefHeight="21.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="211.0" minHeight="10.0" prefHeight="69.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="211.0" minHeight="10.0" prefHeight="33.0" vgrow="SOMETIMES" />
<RowConstraints maxHeight="196.0" minHeight="10.0" prefHeight="196.0" vgrow="ALWAYS" />
<RowConstraints />
<RowConstraints />
</rowConstraints>
<children>
<HBox alignment="CENTER" spacing="70.0" GridPane.columnIndex="3" GridPane.rowIndex="4">
<children>
<Button graphicTextGap="6.0" mnemonicParsing="false" onAction="#exportDBButtonAction" prefHeight="25.0" styleClass="exportButton" text="Export Database" />
</children>
</HBox>
<VBox alignment="CENTER" spacing="20.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<children>
<HBox alignment="CENTER" spacing="10.0" GridPane.columnIndex="1" GridPane.rowIndex="1">
<children>
<TextField fx:id="openJavaTextField" editable="false" prefHeight="25.0" prefWidth="250.0" GridPane.columnIndex="1" GridPane.rowIndex="2" />
<Button mnemonicParsing="false" onAction="#openJavaSrcButtonAction" prefHeight="25.0" prefWidth="170.0" text="Open Java Folder" />
</children>
</HBox>
<HBox alignment="CENTER" spacing="10.0">
<children>
<TextField fx:id="openClasspathTextField" editable="false" prefHeight="25.0" prefWidth="250.0" />
<Button minHeight="25.0" mnemonicParsing="false" onAction="#openClasspathButtonAction" prefHeight="25.0" prefWidth="170.0" text="Open Referenced Libs" />
</children>
</HBox>
<HBox alignment="CENTER" spacing="10.0">
<children>
<Label text="Main Class:" GridPane.columnIndex="1" GridPane.rowIndex="4">
<font>
<Font size="14.0" />
</font>
</Label>
<TextField fx:id="mainClassTextField" text="helloWorld.HelloWorld" GridPane.columnIndex="1" GridPane.rowIndex="4" />
</children>
</HBox>
</children>
</VBox>
<VBox alignment="CENTER" GridPane.columnIndex="2" GridPane.rowSpan="8">
<children>
<Separator orientation="VERTICAL" prefHeight="650.0" prefWidth="20.0" />
</children>
</VBox>
<HBox alignment="CENTER" fillHeight="false" GridPane.columnIndex="1">
<children>
<StackPane prefHeight="235.0" prefWidth="430.0" styleClass="PicPane">
<children>
<ImageView fitHeight="200.0" fitWidth="360.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@/images/phase1t.png" />
</image>
</ImageView>
</children>
</StackPane>
</children>
</HBox>
<HBox alignment="CENTER" fillHeight="false" GridPane.columnIndex="3">
<children>
<StackPane prefHeight="235.0" prefWidth="430.0" styleClass="PicPane">
<children>
<ImageView fitHeight="200.0" fitWidth="360.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@/images/phase4t.png" />
</image>
</ImageView>
</children>
</StackPane>
</children>
</HBox>
<VBox alignment="CENTER" fillWidth="false" spacing="20.0" GridPane.columnIndex="1" GridPane.rowIndex="5">
<children>
<ProgressIndicator fx:id="java2sdgProgressBar" minHeight="10.0" minWidth="10.0" prefHeight="100.0" prefWidth="80.0" visible="false" />
<Label fx:id="java2sdgProgressLabel" text="SDG is being calculated ..." visible="false">
<font>
<Font name="System Bold" size="12.0" />
</font>
</Label>
</children>
</VBox>
<HBox alignment="CENTER" GridPane.columnIndex="1" GridPane.rowIndex="4">
<children>
<Button graphicTextGap="6.0" mnemonicParsing="false" onAction="#startJava2SDGButtonAction" prefHeight="25.0" styleClass="importButton" text="Import Java code" GridPane.columnIndex="1" GridPane.rowIndex="3" />
</children>
</HBox>
<HBox alignment="CENTER" spacing="10.0" GridPane.columnIndex="1" GridPane.rowIndex="3">
<children>
<HBox alignment="TOP_CENTER" spacing="10.0">
<children>
<TextField fx:id="openNeo4JDBImportTextField" editable="false" prefHeight="25.0" prefWidth="250.0" />
<Button minHeight="25.0" mnemonicParsing="false" onAction="#openNeo4JDBButtonAction" prefHeight="25.0" prefWidth="170.0" text="Select Target Path for DB" />
</children>
</HBox>
</children>
</HBox>
<VBox alignment="CENTER" spacing="20.0" GridPane.columnIndex="3" GridPane.rowIndex="1">
<children>
<HBox alignment="CENTER" spacing="10.0">
<children>
<TextField fx:id="openNeo4JDBExportTextField" editable="false" prefHeight="25.0" prefWidth="250.0" />
<Button minHeight="25.0" mnemonicParsing="false" onAction="#openNeo4JDBButtonAction" prefHeight="25.0" prefWidth="170.0" text="Open Neo4J DB" />
</children>
</HBox>
<HBox alignment="CENTER" spacing="10.0">
<children>
<TextField fx:id="openJavaTargetTextField" editable="false" prefHeight="25.0" prefWidth="250.0" />
<Button mnemonicParsing="false" onAction="#openJavaTargetButtonAction" prefHeight="25.0" prefWidth="170.0" text="Select Target Folder for Java" />
</children>
</HBox>
</children>
</VBox>
<VBox alignment="CENTER" fillWidth="false" spacing="20.0" GridPane.columnIndex="3" GridPane.rowIndex="5">
<children>
<ProgressIndicator fx:id="sdg2javaProgressBar" minHeight="10.0" minWidth="10.0" prefHeight="100.0" prefWidth="80.0" visible="false" />
<Label fx:id="sdg2javaProgressLabel" text="Source code is being calculated ..." visible="false">
<font>
<Font name="System Bold" size="12.0" />
</font>
</Label>
</children>
</VBox>
</children>
</GridPane>
package ui.expert;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.EventHandler;
import tasks.Java2SDGTask;
import tasks.SDG2JavaTask;
public class ImportExportTab {
private ExpertScreenController controller;
private static ImportExportTab instance;
public static synchronized ImportExportTab getInstance() {
if (ImportExportTab.instance == null) {
ImportExportTab.instance = new ImportExportTab();
}
return ImportExportTab.instance;
}
public void setExpertController(final ExpertScreenController controller) {
this.controller = controller;
}
public void java2SDG(final String javaSrc, final String classpath, final String mainClass,
final String databasePath) {
if (javaSrc.isEmpty() || databasePath.isEmpty() || mainClass.isEmpty()) {
controller.getApp().openPopup(ui.shared.MainApp.ERROR, true, ExpertScreenController.MISSING_PATHS);
} else {
controller.getJava2SdgProgressBar().setVisible(true);
controller.getJava2SdgProgressLabel().setVisible(true);
final Java2SDGTask java2SDGTask = new Java2SDGTask(javaSrc, classpath, databasePath, mainClass);
java2SDGTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
controller.getJava2SdgProgressLabel().textProperty().unbind();
controller.getJava2SdgProgressBar().progressProperty().unbind();
}
});
java2SDGTask.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
controller.getJava2SdgProgressLabel().textProperty().unbind();
controller.getJava2SdgProgressBar().progressProperty().unbind();
controller.getApp().openPopup(ui.shared.MainApp.ERROR, true, "Internal Error in Java2Sdg!");
controller.getJava2SdgProgressBar().setVisible(false);
controller.getJava2SdgProgressLabel().setVisible(false);
java2SDGTask.exceptionProperty().get().printStackTrace();
}
});
controller.getJava2SdgProgressLabel().textProperty().bind(java2SDGTask.messageProperty());
controller.getJava2SdgProgressBar().progressProperty().bind(java2SDGTask.progressProperty());
new Thread(java2SDGTask).start();
}
}
public void sdg2Java(final String outputDir) {
if (outputDir.isEmpty()) {
controller.getApp().openPopup(ui.shared.MainApp.ERROR, true, ExpertScreenController.MISSING_PATHS);
} else {
controller.getSdg2JavaProgressBar().setVisible(true);
controller.getSdg2JavaProgressLabel().setVisible(true);
final SDG2JavaTask sdg2JavaTask = new SDG2JavaTask(outputDir, false);
sdg2JavaTask.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
controller.getSdg2JavaProgressLabel().textProperty().unbind();
controller.getSdg2JavaProgressBar().progressProperty().unbind();
}
});
sdg2JavaTask.setOnFailed(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(final WorkerStateEvent workerStateEvent) {
controller.getSdg2JavaProgressLabel().textProperty().unbind();
controller.getSdg2JavaProgressBar().progressProperty().unbind();
controller.getApp().openPopup(ui.shared.MainApp.ERROR, true, "Internal Error in Sdg2Java!");
controller.getSdg2JavaProgressBar().setVisible(false);
controller.getSdg2JavaProgressLabel().setVisible(false);
sdg2JavaTask.exceptionProperty().get().printStackTrace();
}
});
controller.getSdg2JavaProgressLabel().textProperty().bind(sdg2JavaTask.messageProperty());
controller.getSdg2JavaProgressBar().progressProperty().bind(sdg2JavaTask.progressProperty());
new Thread(sdg2JavaTask).start();
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment