From fbd2fd02754ed0961d4ef44854b06af3868e521d Mon Sep 17 00:00:00 2001 From: joshuajeschek Date: Sat, 22 Jan 2022 15:11:38 +0100 Subject: [PATCH] [feat] TrialCreator --- .../analyse/gui/admin/TrialCreator.java | 67 ++++++++++++++++++- .../gui/admin/TrialCreatorController.java | 53 ++++++++++++++- .../analyse/gui/admin/TrialCreator.fxml | 10 +-- 3 files changed, 121 insertions(+), 9 deletions(-) diff --git a/src/main/java/github/weichware10/analyse/gui/admin/TrialCreator.java b/src/main/java/github/weichware10/analyse/gui/admin/TrialCreator.java index 0646436..25e8762 100644 --- a/src/main/java/github/weichware10/analyse/gui/admin/TrialCreator.java +++ b/src/main/java/github/weichware10/analyse/gui/admin/TrialCreator.java @@ -1,27 +1,88 @@ package github.weichware10.analyse.gui.admin; import github.weichware10.analyse.Main; +import github.weichware10.util.Logger; import github.weichware10.util.gui.AbsScene; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.List; +import javafx.application.Platform; import javafx.scene.Parent; +import javafx.stage.FileChooser; +import javafx.stage.FileChooser.ExtensionFilter; /** * Interface zum Erstellen von Trials (auf Basis von configIds). */ public class TrialCreator extends AbsScene { private static Parent root; + private static TrialCreatorController controller; /** * Startet den TrialCreator. */ public static void start() { - root = start(Main.primaryStage, + InitResult ir = start(Main.primaryStage, TrialCreator.class.getResource("TrialCreator.fxml"), root, - null, + controller, "Analyse - Trialerstellung", null, null, null, - null).root; + null); + root = ir.root; + controller = (TrialCreatorController) ir.controller; + } + + protected static void createTrials() { + final String configId = controller.configIdField.getText(); + new Thread(new Runnable() { + @Override + public void run() { + Platform.runLater(() -> controller.trialsCreateButton.setDisable(true)); + List trialIds = Main.dataBaseClient.trials.add( + configId, controller.countBox.getValue()); + Platform.runLater( + () -> controller.trialIdArea.setText(String.join("\n", trialIds))); + Platform.runLater( + () -> controller.trialsCreateButton.setDisable(false)); + } + }).start(); + } + + protected static void saveToTxt() { + String content = controller.trialIdArea.getText(); + + FileChooser fileChooser = new FileChooser(); + fileChooser.setTitle("JSON Config Speicherort auswählen"); + fileChooser.getExtensionFilters().add( + new ExtensionFilter("Text Dateien", + "*.txt")); + File txtFile = fileChooser.showSaveDialog(Main.primaryStage); + + if (txtFile != null) { + FileWriter fw; + try { + fw = new FileWriter(txtFile.getAbsolutePath(), true); + BufferedWriter bw = new BufferedWriter(fw); + bw.write(content); + bw.newLine(); + bw.close(); + } catch (IOException e) { + Logger.error("An error occured while saving trialId List", e); + } + } } + + protected static Runnable configAvailabiltyChecker = new Runnable() { + @Override + public void run() { + String configId = controller.configIdField.getText(); + boolean availability = Main.dataBaseClient.configurations.getAvailability(configId); + Platform.runLater(() -> controller.trialsCreateButton.setDisable(!availability)); + } + }; } diff --git a/src/main/java/github/weichware10/analyse/gui/admin/TrialCreatorController.java b/src/main/java/github/weichware10/analyse/gui/admin/TrialCreatorController.java index eb16d36..ea516c4 100644 --- a/src/main/java/github/weichware10/analyse/gui/admin/TrialCreatorController.java +++ b/src/main/java/github/weichware10/analyse/gui/admin/TrialCreatorController.java @@ -3,12 +3,32 @@ import github.weichware10.analyse.gui.general.FunctionChooser; import github.weichware10.util.Logger; import github.weichware10.util.gui.AbsSceneController; +import java.net.URL; +import java.util.ResourceBundle; import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; /** * Controller für {@link TrialCreator}. */ public class TrialCreatorController extends AbsSceneController { + @FXML + private ResourceBundle resources; + @FXML + private URL location; + @FXML + protected TextField configIdField; + @FXML + protected ComboBox countBox; + @FXML + private Button saveButton; + @FXML + protected TextArea trialIdArea; + @FXML + protected Button trialsCreateButton; @FXML private void startFunctionChooser() { @@ -16,9 +36,40 @@ private void startFunctionChooser() { FunctionChooser.start(); } + @FXML + private void createTrials() { + Logger.info("trialcreator:content Creating trials"); + TrialCreator.createTrials(); + } + + @FXML + private void saveToTxt() { + Logger.info("trialcreator:content Saving to text file"); + TrialCreator.saveToTxt(); + } + @Override protected void initialize() { - // TODO Auto-generated method stub + assert configIdField != null + : "fx:id=\"configIdField\" not injected: check 'TrialCreator.fxml'."; + assert countBox != null + : "fx:id=\"countBox\" not injected: check 'TrialCreator.fxml'."; + assert saveButton != null + : "fx:id=\"saveButton\" not injected: check 'TrialCreator.fxml'."; + assert trialIdArea != null + : "fx:id=\"trialIdArea\" not injected: check 'TrialCreator.fxml'."; + assert trialsCreateButton != null + : "fx:id=\"trialsCreateButton\" not injected: check 'TrialCreator.fxml'."; + + for (int i = 0; i < 10; i++) { + countBox.getItems().add((int) Math.pow(2, i)); + } + countBox.setValue(1); + + trialIdArea.textProperty().addListener( + (o, s, newValue) -> saveButton.setDisable(newValue.length() == 0)); + configIdField.textProperty().addListener( + (o) -> new Thread(TrialCreator.configAvailabiltyChecker).start()); } } diff --git a/src/main/resources/github/weichware10/analyse/gui/admin/TrialCreator.fxml b/src/main/resources/github/weichware10/analyse/gui/admin/TrialCreator.fxml index 7754011..89f2beb 100644 --- a/src/main/resources/github/weichware10/analyse/gui/admin/TrialCreator.fxml +++ b/src/main/resources/github/weichware10/analyse/gui/admin/TrialCreator.fxml @@ -21,9 +21,9 @@