From f1e838c8de904959d71c50493533d895faed871a Mon Sep 17 00:00:00 2001 From: Georg-Notebook Date: Wed, 17 Mar 2021 20:34:07 +0100 Subject: [PATCH] Log object + Log in gui + AlterHelper -> inputnumber & datePicker added + config.ini.sample -> added Text --- conf.ini.sample | 12 ++- src/tourplaner/business/AlertHelper.java | 106 +++++++++++++++++- src/tourplaner/object/Log.java | 51 +++++++++ src/tourplaner/object/Tour.java | 50 ++++++++- src/tourplaner/tourplaner.fxml | 24 +++-- src/tourplaner/ui/TourplanerController.java | 113 ++++++++++++++++++-- src/tourplaner/viewmodels/ViewModel.java | 95 ++++++++++++++-- 7 files changed, 419 insertions(+), 32 deletions(-) create mode 100644 src/tourplaner/object/Log.java diff --git a/conf.ini.sample b/conf.ini.sample index 1c2c457..c0ba04a 100644 --- a/conf.ini.sample +++ b/conf.ini.sample @@ -36,4 +36,14 @@ zielpunktheader = Bitte geben Sie den Zielpunkt der Tour an! zielpunktmsg = Zielpunkt: deltournoselect = ViewModel -> DelTour deltournoselectmsg = Bitte wählen Sie zuerst eine Tour aus, bevor Sie auf löschen klicken! -exceptionstackheader = Exception stacktrace: \ No newline at end of file +exceptionstackheader = Exception stacktrace: +keinelogsvorhanden = Fügen Sie erst ein Log hinzu um es anzuzeigen! +datum = Datum +dauer = Dauer +strecke = Strecke +streckemsg = Strecke des Logeintrages +dauermsg = Dauer des Logeintrages +doppelpunkt = : +fktnichtimplementiert = Diese Funktion ist noch nicht Implementiert +vergessenodernochnichtsoweit = Entweder hat DerGeorg darauf vergessen oder ist noch nicht so weit gekommen um das zu machen! +logtournotselectedmsg = Bitte wählen Sie zuerst eine Tour aus, bevor sie einen log Eintrag erstellen! \ No newline at end of file diff --git a/src/tourplaner/business/AlertHelper.java b/src/tourplaner/business/AlertHelper.java index 06fec78..9f46327 100644 --- a/src/tourplaner/business/AlertHelper.java +++ b/src/tourplaner/business/AlertHelper.java @@ -1,33 +1,68 @@ package tourplaner.business; -import javafx.scene.control.Alert; +import javafx.scene.Scene; +import javafx.scene.control.*; import javafx.scene.control.Label; import javafx.scene.control.TextArea; -import javafx.scene.control.TextInputDialog; -import javafx.scene.layout.GridPane; -import javafx.scene.layout.Priority; +import javafx.scene.layout.*; +import javafx.scene.text.Text; +import javafx.stage.Stage; import java.io.PrintWriter; import java.io.StringWriter; +import java.time.LocalDate; +import java.util.Date; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; public class AlertHelper { + + /** + * Warning Dialog + * @param title Title des Dialogs + * @param header Header des Dialogs + * @param msg Nachricht des Dialogs + */ public static void warn(String title, String header, String msg){ alertType(Alert.AlertType.WARNING, title, header, msg); } + + /** + * Info Dialog + * @param title Title des Dialogs + * @param header Header des Dialogs + * @param msg Nachricht des Dialogs + */ public static void inform(String title, String header, String msg){ alertType(Alert.AlertType.INFORMATION, title, header, msg); } + /** + * Info Dialog ohne Header + * @param title Title des Dialogs + * @param msg Nachricht des Dialogs + */ public static void informNoHeader(String title, String msg){ inform(title, null, msg); } + /** + * Error Dialog + * @param title Title des Dialogs + * @param header Header des Dialogs + * @param msg Nachricht des Dialogs + */ public static void error(String title, String header, String msg){ alertType(Alert.AlertType.ERROR, title, header, msg); } + /** + * Ausgabe einer Exception in einem Dialog + * @param title Title des Dialogs + * @param header Header des Dialogs + * @param msg Nachricht des Dialogs + * @param ex Die exception die ausgegeben werden soll + */ public static void exerror(String title, String header, String msg, Exception ex){ Alert alert = new Alert(Alert.AlertType.ERROR); alert.setTitle(title); @@ -53,6 +88,13 @@ public class AlertHelper { alert.showAndWait(); } + /** + * + * @param alertly Typ des Dialogs + * @param title Title des Dialogs + * @param header Header des Dialogs + * @param msg Nachricht des Dialogs + */ private static void alertType(Alert.AlertType alertly, String title, String header, String msg){ Alert alert = new Alert(alertly); alert.setTitle(title); @@ -62,6 +104,13 @@ public class AlertHelper { alert.showAndWait(); } + /** + * Texteingabe + * @param title Title des Dialogs + * @param header Header des Dialogs + * @param msg Nachricht des Dialogs + * @return Null bei keiner eingabe + */ public static String inputText(String title, String header, String msg) { TextInputDialog dialog = new TextInputDialog(); dialog.setTitle(title); @@ -76,4 +125,53 @@ public class AlertHelper { return null; } } + + /** + * Positive Nummer eingabe. Wenn Convertierung zu int nicht klappt -> -1 + * @param title Title des Dialogs + * @param header Header des Dialogs + * @param msg Nachricht des Dialogs + * @return -1 bei error sonst ein Int + */ + public static int inputNumber(String title, String header, String msg) { + TextInputDialog dialog = new TextInputDialog(); + dialog.setTitle(title); + dialog.setHeaderText(header); + dialog.setContentText(msg); + Optional result = dialog.showAndWait(); + AtomicReference returnText = new AtomicReference(-1); + result.ifPresent(s -> { + try { + int resultInt = Integer.parseInt(result.get()); + returnText.set(resultInt); + }catch (NumberFormatException e){ + AlertHelper.warn(ConfigHelper.getIniString(ConfigHelper.getStandartConfig(), "langde", "achtung"), "Bitte nur Zahlen eingeben!", "Bitte geben sie nur Zahlen von 0 - 10 an!"); + returnText.set(-1); + } + }); + return returnText.get(); + } + + /** + * Date Picker Dialog, sobald ein Datum ausgewählt wurde, wird es automatisch bestätigt und der dialog geschlossen + * @param title Name des Dialogs + * @return Gewähltes datum + */ + public static LocalDate datePicker(String title){ + final DatePicker datePicker = new DatePicker(LocalDate.now()); + final Stage stage = new Stage(); + AtomicReference selectedDate = new AtomicReference<>(); + datePicker.setOnAction(event -> { + LocalDate date = datePicker.getValue(); + System.out.println("Selected date: " + date); + selectedDate.set(date); + stage.close(); + }); + + stage.setScene( + new Scene(datePicker) + ); + stage.showAndWait(); + return selectedDate.get(); + } } diff --git a/src/tourplaner/object/Log.java b/src/tourplaner/object/Log.java new file mode 100644 index 0000000..d7d0fac --- /dev/null +++ b/src/tourplaner/object/Log.java @@ -0,0 +1,51 @@ +package tourplaner.object; + +import jdk.jshell.spi.ExecutionControl; + +import java.time.LocalDate; +import java.util.Date; + +public class Log { + private String id, dauer; + private LocalDate datum; + private double strecke; + + public Log(String id, String dauer, LocalDate datum, double strecke) { + this.id = id; + this.dauer = dauer; + this.datum = datum; + this.strecke = strecke; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDauer() { + return dauer; + } + + public void setDauer(String dauer) { + this.dauer = dauer; + } + + public LocalDate getDatum() { + return datum; + } + + public void setDatum(LocalDate datum) { + this.datum = datum; + } + + public double getStrecke() { + return strecke; + } + + public void setStrecke(double strecke) { + this.strecke = strecke; + } +} diff --git a/src/tourplaner/object/Tour.java b/src/tourplaner/object/Tour.java index 8fa2c00..01524c9 100644 --- a/src/tourplaner/object/Tour.java +++ b/src/tourplaner/object/Tour.java @@ -1,15 +1,15 @@ package tourplaner.object; +import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicReference; + /** * Model einer Tour */ public class Tour { - private String dauer; - private String mapJson; + private String dauer, mapJson, name, start, ziel; private double strecke; - private String name; - private String start; - private String ziel; + private ArrayList log; public Tour(String name, String dauer, String mapJson, double strecke, String start, String ziel) { this.dauer = dauer; @@ -18,6 +18,46 @@ public class Tour { this.name = name; this.start = start; this.ziel = ziel; + this.log = new ArrayList<>(); + } + + /** + * Holt einen einzigen Log Eintrag anhand der Id + * @param id Id des Eintrags der zu besorgen ist + * @return Der gefundene Log Eintrag + */ + public Log getLog(String id){ + AtomicReference returnLog = new AtomicReference<>(); + this.log.forEach(s -> { + if(s.getId().equals(id)){ + returnLog.set(s); + } + }); + return returnLog.get(); + } + + /** + * Fügt ein Log Eintrag hinzu + * @param newLog Der neue Log Eintrag + */ + public void addLog(Log newLog){ + this.log.add(newLog); + } + + /** + * Gibt alle log Einträge zurück + * @return Alle log Einträge in einer Arraylist + */ + public ArrayList getLogs(){ + return this.log; + } + + /** + * Löscht einen Log eintrag anhand der ID + * @param id Id die zum löschen ist + */ + public void delLog(String id){ + this.log.removeIf(s -> s.getId().equals(id)); } public String getDauer() { diff --git a/src/tourplaner/tourplaner.fxml b/src/tourplaner/tourplaner.fxml index 56311b8..a1aab58 100644 --- a/src/tourplaner/tourplaner.fxml +++ b/src/tourplaner/tourplaner.fxml @@ -60,8 +60,16 @@ - - + + + + + + + + + + @@ -155,12 +163,12 @@ - -