From 950a4a9078c7eedc3c998c0bdb2ac9c00cce15fe Mon Sep 17 00:00:00 2001 From: Maximilian Date: Thu, 13 Jun 2024 20:30:07 +0200 Subject: [PATCH] =?UTF-8?q?Fix=20f=C3=BCr=20das=20Datum=20in=20XML?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/models/Flight.class | Bin 6575 -> 7668 bytes bin/views/AddFlightScreen.class | Bin 11917 -> 15226 bytes flights.xml | 260 ++------------------------------ pilots.xml | 26 ++++ src/models/Flight.java | 56 +++++-- src/views/AddFlightScreen.java | 157 +++++++++++++------ 6 files changed, 185 insertions(+), 314 deletions(-) diff --git a/bin/models/Flight.class b/bin/models/Flight.class index 807295d5c38ed64e437b6056815dccc326fcf087..d365ae05afd13df8be5789bea762267ce68290c9 100644 GIT binary patch literal 7668 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 literal 6575 zcmbW5i+>bX6~})=9-C|?qzMTSsFXs0JP6C9&`1c7W*Z44KuriOMPZUmk|DdZ>+S>r zt5Vx))!MX*irU($Ra-#|ND`&BqSb2a`~80Z8-D!wyLTo#cPF#L$9z7?+_^L7-19x> z+;h+5jsIMG1wbeM6~O`xmC4kInaIYv6V}+c6G5?tTTU1!jab64$6^PDPME`-E!9vf zXRTDM-^^G>!a8FNB}~4YmA8XtCTpeaLp^Z~+Fq*dO4(V*u$@68F=>`?LGhz$C>b%F z$)tw0y+YsUso0Qd*x6V*lS-Qz=d`!tLGQL*LwUb7W>Y4^#X4?EXoq|&=2%HH)|(nO z5^=*Z+jmk|nOwZz$!Mr?Uy_uZuxFS@*Ws8Ax>()*DYv(wmCjD#Jcwj3;^xdt}lcGi?p)3b6OsjyYy#6xour zl}OQqZ3QIUpw0>G==Cz-ppcSoDz}Z{aYt|!UiPk3D#6IjX%T^%NF|e|?HKf5=?=@b zoShnq8k+_+6n8Pnq9{Uxj+MAQg0&i&!{gs?CDREr-^3`^prITZnsn%>jG*NP;`w2U zqS+PSprZzhgrbc)YTeOh9d+*L4jqfJD1vP_P@W&FD7L!F->hQ^mPSBNwEQo$K)j;Z z?#l1fQIBQ9xZOII3(C80peYc7DEGAV(%m}VgcU;5TXfupMH;GlE!*5bnH(}R1Mar1 zksD*s;8tehd6UJ?xRn)e=hXxPJ=7SwrRHy;|8FMVGq<9fgGc78X&MwsuwSIl0S$GY zJxYygZyGGeJ?M|%tr}LzS|tm>XeyI5oR}y911t#L@|JsC#{dp#SlH8l;8^d0uFl?L z@y>y}H8d!sg=E{KIE?!uxL3m>f2CZh(QyR#a}T)U8roFv71Y@@A6kU)Z8~m2wMgM( z0{(aa-YZ?gJzFs(-WcX~YmAGD?J&i}sF>&x6P*|r6PB1bBKBpS0-H0R@zz8Y@1b|{ zXg_o%AIzr(YhRr?3ZU#Gl1%_Uy(VhO8rc<|aTb(=ZeC3rn3HPY0 z%!#=7HU6>a3sniByc4oYh~>@Hsz<0V8lmWbJWYAH#H08G&PVXcfMDaO%A%f3qSQEYv0*8UH?iuQnuE^6T zG<``J%H6yq&>Q$RHx=*J^bT*XWT(*^w)I0}UyuaJO#%xMxjz9~G&@>iW}aD0Oc z`!1l|+a&w^Zbz)6+*aorAzyploVR;y_XJ?GY}!#4`0wa=0bhyY0$$beJ)C87^40lkNDh z;T*P{@wvvF#d)uKjCwU`{wXwnCgi9p!_PIW-exGDf=3bjDL7*(iRC-$(E}Z@0T2 zDVBXQHDShF02j2|7zjAg=|^m>6(Y+`GSp$>kZt_>@4DM37hU^h@gz)awgUSh;xRG zIPVwA`zp?{OOa!C*z(H$T3*>*%PV_pd1aFY24aphImz%K^= zUB$cCr9D8lc^0diU&5OEX0dJ>jT|;}xPBU~{xIebH~GUY9B$>icTS^?!|fdIm_`SO zp0ZsWc5=3B8gULiz1^3kQG57zGtt2gy%@Kmismk(!E4xOZ=|8^G_{+i-htbnr(#6134y$DreS)jy3J%U-a2iLYDeGtP_BqB@Id&oI zi{*`rSzjV=T+pSZvoPjR>&j*^G6!2!Pz5n**+|kO~y!ZHy7nNaQBQxtZ`S zScmo4f>!Lt2J|7uo_8a0H^HHU9^{k9afifCqk^(i9<~_iI3Zmz#jmkyMqJF*a#SQo zbsQDT(PECoe-5VjVKsqLIjTp3c_`+VBPp|SiXpI>kz(#PN>osH3TfB1Y>L^m@>xam zRW#1v9oKRA5^onkM6y&qx>JcxMJ_t;#3@h3K^i8EtQ9I+W^h`Gik}q=rTOhNZU+;$ zL+V`Y%H_~&J#-BZ;N5)YZl3qZ)Q)+EmWWk?Chk^DEXkSpUYzwzR4H3$@Zfbk98?ik zRQQzd$8k?ZC+!iGVor=>Mw531*0sZ&D~53)R~*y6Li99jvw!z;maiV8nO z-wLe+-C>pBdE&fK07o460_T;`O3)p|xv1FU<9s`Zlkg7u70ola-rMpT>S)k+`TKqT z{_q-p1YD~5nb2A!+lLz2r(9x>a+#gT6?P<76+>5ewW5Uo)^&5~7nEcV{ckLf@XM|U ezm&W4SNOF%k3SOSPxuS(#CPFe@pt?a_5THOKF!tu diff --git a/bin/views/AddFlightScreen.class b/bin/views/AddFlightScreen.class index bd421812f176bac0a2f6cff986323cc2b37d4e74..009fef83a1968e568e621f7421c991bb4fecad95 100644 GIT binary patch literal 15226 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 Geg6qv;F-Vx literal 11917 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 NkcJB64oBV+?H>kdEb9OO diff --git a/flights.xml b/flights.xml index 0090274..48806f2 100644 --- a/flights.xml +++ b/flights.xml @@ -8,274 +8,36 @@ 2.0 - ea + 123 - 2 - - - 2 - - - 1 - - - 2 - - - aed - - - - - asd - - - asd - - - - asd - - - ss - - - ddas - - - - sad - - - - asd - - - asd - - - eee - - - - - - - - - - 2.0 - - - asd - - - 11:00 - - 12:00 - - 2 - - - asd - - - asd - - - - - asd - - - asd - - - - asd - - - ss - - - ddas - - - - sad - - - - asd - - - asd - - - eee - - - - - - - - - - 123.0 - - - sad - - - 123 - - 123 - - - 123 - - - 123 - - - asd - - - true - - - - - asd - - - asd - - - - asd - - - ss - - - ddas - - - - sad - - - - asd - - - asd - - - eee - - - - - - - - - - 123.0 - - - asd - - - dsa - - - asda - - - 12 - - - 123 - - - asda - - - - - asdasdasd - - - asdasd - - - - 124312 - - - - asdasd - - - - asd - - - - - - - - - - 1.0 - - - ea - - - 11:00 - - - 12:30 + 14:00 2 + + 2024-06-10 + - lol + asd - test + asdasd - + - asdasdasd + sad - asdasd - - - - 124312 - + ads - asdasd - - - - asd - + sad diff --git a/pilots.xml b/pilots.xml index fca6cd6..efef9b4 100644 --- a/pilots.xml +++ b/pilots.xml @@ -15,6 +15,32 @@ + + + + asdasd + + + asdasd + + + sad + + + + + + + asdasd + + + 23 + + + adsasd + + + diff --git a/src/models/Flight.java b/src/models/Flight.java index c9c96d6..1fd8a10 100644 --- a/src/models/Flight.java +++ b/src/models/Flight.java @@ -11,8 +11,8 @@ import javafx.beans.property.*; public class Flight implements Serializable { private static final long serialVersionUID = 1L; - private transient ObjectProperty datum; - private String datumStr; + private String datumStr; // String zur Speicherung des Datums in XML + private transient ObjectProperty datum; // transient, um die direkte Serialization zu vermeiden private StringProperty muster; private StringProperty abflugort; private StringProperty abflugzeit; @@ -23,6 +23,8 @@ public class Flight implements Serializable { private BooleanProperty nachtflug; private StringProperty kommentar; + private static final DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE; + // Standardkonstruktor public Flight() { this.datum = new SimpleObjectProperty<>(); @@ -38,17 +40,17 @@ public class Flight implements Serializable { } public Flight(LocalDate datum, String muster, String abflugort, String abflugzeit, String ankunftszeit, double tToF, int anzahlLandungen, Pilot pilot, boolean nachtflug, String kommentar) { - this.datum = new SimpleObjectProperty<>(datum); - this.datumStr = datum.format(DateTimeFormatter.ISO_LOCAL_DATE); - this.muster = new SimpleStringProperty(muster); - this.abflugort = new SimpleStringProperty(abflugort); - this.abflugzeit = new SimpleStringProperty(abflugzeit); - this.ankunftszeit = new SimpleStringProperty(ankunftszeit); - this.tToF = new SimpleDoubleProperty(tToF); - this.anzahlLandungen = new SimpleIntegerProperty(anzahlLandungen); - this.pilot = new SimpleObjectProperty<>(pilot); - this.nachtflug = new SimpleBooleanProperty(nachtflug); - this.kommentar = new SimpleStringProperty(kommentar); + this(); + this.setDatum(datum); + this.muster.set(muster); + this.abflugort.set(abflugort); + this.abflugzeit.set(abflugzeit); + this.ankunftszeit.set(ankunftszeit); + this.tToF.set(tToF); + this.anzahlLandungen.set(anzahlLandungen); + this.pilot.set(pilot); + this.nachtflug.set(nachtflug); + this.kommentar.set(kommentar); } public LocalDate getDatum() { @@ -57,13 +59,22 @@ public class Flight implements Serializable { public void setDatum(LocalDate datum) { this.datum.set(datum); - this.datumStr = datum.format(DateTimeFormatter.ISO_LOCAL_DATE); + this.datumStr = datum != null ? datum.format(formatter) : null; } public ObjectProperty datumProperty() { return datum; } + public String getDatumStr() { + return datumStr; + } + + public void setDatumStr(String datumStr) { + this.datumStr = datumStr; + this.datum.set(datumStr != null ? LocalDate.parse(datumStr, formatter) : null); + } + public String getMuster() { return muster.get(); } @@ -180,5 +191,20 @@ public class Flight implements Serializable { return "Keine Pilotinformationen verfügbar"; } - + // Custom Serialization + private void writeObject(ObjectOutputStream oos) throws IOException { + oos.defaultWriteObject(); + oos.writeObject(datum.get() != null ? datum.get().format(formatter) : null); + } + + // Custom Deserialization + private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { + ois.defaultReadObject(); + String datumStr = (String) ois.readObject(); + if (datumStr != null) { + this.datum = new SimpleObjectProperty<>(LocalDate.parse(datumStr, formatter)); + } else { + this.datum = new SimpleObjectProperty<>(); + } + } } diff --git a/src/views/AddFlightScreen.java b/src/views/AddFlightScreen.java index c8fa81a..b01e383 100644 --- a/src/views/AddFlightScreen.java +++ b/src/views/AddFlightScreen.java @@ -16,11 +16,15 @@ import models.Pilots; import utils.XMLHelper; import java.time.LocalDate; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.ArrayList; import java.util.List; public class AddFlightScreen { private Stage stage; + private DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm"); public AddFlightScreen(Stage stage) { this.stage = stage; @@ -42,25 +46,43 @@ public class AddFlightScreen { datumField.setPromptText("YYYY-MM-DD"); musterField.setPromptText("Muster"); abflugortField.setPromptText("Abflugort"); - abflugzeitField.setPromptText("HH:MM"); - ankunftszeitField.setPromptText("HH:MM"); + abflugzeitField.setPromptText("HH:mm"); + ankunftszeitField.setPromptText("HH:mm"); tToFField.setPromptText("Flugdauer (Stunden)"); anzahlLandungenField.setPromptText("Anzahl der Landungen"); kommentarField.setPromptText("Kommentar"); // Nur numerische Eingaben für Flugdauer und Anzahl der Landungen zulassen - tToFField.textProperty().addListener((observable, oldValue, newValue) -> { - if (!newValue.matches("\\d*\\.?\\d*")) { - tToFField.setText(oldValue); - } - }); - + tToFField.setEditable(false); anzahlLandungenField.textProperty().addListener((observable, oldValue, newValue) -> { if (!newValue.matches("\\d*")) { anzahlLandungenField.setText(oldValue); } }); + // Validierung und Berechnung der Flugdauer + abflugzeitField.focusedProperty().addListener((observable, oldValue, newValue) -> { + if (!newValue) { + if (!isValidTime(abflugzeitField.getText())) { + abflugzeitField.setStyle("-fx-border-color: red;"); + } else { + abflugzeitField.setStyle(null); + calculateFlightDuration(abflugzeitField, ankunftszeitField, tToFField); + } + } + }); + + ankunftszeitField.focusedProperty().addListener((observable, oldValue, newValue) -> { + if (!newValue) { + if (!isValidTime(ankunftszeitField.getText())) { + ankunftszeitField.setStyle("-fx-border-color: red;"); + } else { + ankunftszeitField.setStyle(null); + calculateFlightDuration(abflugzeitField, ankunftszeitField, tToFField); + } + } + }); + // Laden der Piloten für die Auswahlbox Pilots pilotsData = (Pilots) XMLHelper.loadFromXML("pilots.xml"); List pilotList = pilotsData != null ? pilotsData.getPilots() : new ArrayList<>(); @@ -71,8 +93,9 @@ public class AddFlightScreen { Button submitBtn = new Button("Hinzufügen"); submitBtn.setStyle("-fx-background-color: #000000; -fx-text-fill: #FFFFFF; -fx-font-weight: bold;"); - submitBtn.setOnAction(e -> handleAddFlight(datumField, musterField, abflugortField, abflugzeitField, ankunftszeitField, - tToFField, anzahlLandungenField, nachtflugBox.isSelected(), kommentarField, pilotComboBox)); + submitBtn.setOnAction( + e -> handleAddFlight(datumField, musterField, abflugortField, abflugzeitField, ankunftszeitField, + tToFField, anzahlLandungenField, nachtflugBox.isSelected(), kommentarField, pilotComboBox)); Button backButton = new Button("Zurück"); backButton.setStyle("-fx-background-color: #000000; -fx-text-fill: #FFFFFF; -fx-font-weight: bold;"); @@ -104,51 +127,84 @@ public class AddFlightScreen { stage.show(); } - private void handleAddFlight(DatePicker datumField, TextField musterField, TextField abflugortField, TextField abflugzeitField, - TextField ankunftszeitField, TextField tToFField, TextField anzahlLandungenField, boolean isNachtflug, - TextField kommentarField, ComboBox pilotComboBox) { - clearFieldStyles(datumField, musterField, abflugortField, abflugzeitField, ankunftszeitField, tToFField, anzahlLandungenField, pilotComboBox); - + private void calculateFlightDuration(TextField abflugzeitField, TextField ankunftszeitField, TextField tToFField) { try { - if (datumField.getValue() == null) { - setErrorStyle(datumField); - throw new IllegalArgumentException("Datum ist erforderlich."); + LocalTime abflugzeit = LocalTime.parse(abflugzeitField.getText(), timeFormatter); + LocalTime ankunftszeit = LocalTime.parse(ankunftszeitField.getText(), timeFormatter); + long durationInMinutes = java.time.Duration.between(abflugzeit, ankunftszeit).toMinutes(); + if (durationInMinutes < 0) { + durationInMinutes += 24 * 60; // Falls über Mitternacht } - if (musterField.getText().isEmpty()) { - setErrorStyle(musterField); - throw new IllegalArgumentException("Muster ist erforderlich."); - } - if (abflugortField.getText().isEmpty()) { - setErrorStyle(abflugortField); - throw new IllegalArgumentException("Abflugort ist erforderlich."); - } - if (abflugzeitField.getText().isEmpty()) { - setErrorStyle(abflugzeitField); - throw new IllegalArgumentException("Abflugzeit ist erforderlich."); - } - if (ankunftszeitField.getText().isEmpty()) { - setErrorStyle(ankunftszeitField); - throw new IllegalArgumentException("Ankunftszeit ist erforderlich."); - } - if (tToFField.getText().isEmpty()) { - setErrorStyle(tToFField); - throw new IllegalArgumentException("Flugdauer ist erforderlich."); - } - if (anzahlLandungenField.getText().isEmpty()) { - setErrorStyle(anzahlLandungenField); - throw new IllegalArgumentException("Anzahl der Landungen ist erforderlich."); - } - if (pilotComboBox.getValue() == null) { - setErrorStyle(pilotComboBox); - throw new IllegalArgumentException("Pilot ist erforderlich."); + double durationInHours = durationInMinutes / 60.0; + String formattedDuration = String.format("%.2f", durationInHours); + + tToFField.setText(formattedDuration); + } catch (DateTimeParseException e) { + tToFField.setText(""); + } + } + + private boolean isValidTime(String time) { + try { + LocalTime.parse(time, timeFormatter); + return true; + } catch (DateTimeParseException e) { + return false; + } + } + + private void handleAddFlight(DatePicker datumField, TextField musterField, TextField abflugortField, + TextField abflugzeitField, TextField ankunftszeitField, TextField tToFField, + TextField anzahlLandungenField, boolean isNachtflug, TextField kommentarField, + ComboBox pilotComboBox) { + try { + clearFieldStyles(datumField, musterField, abflugortField, abflugzeitField, ankunftszeitField, + tToFField, anzahlLandungenField, kommentarField, pilotComboBox); + + if (datumField.getValue() == null || musterField.getText().isEmpty() || abflugortField.getText().isEmpty() + || + abflugzeitField.getText().isEmpty() || ankunftszeitField.getText().isEmpty() + || tToFField.getText().isEmpty() || + anzahlLandungenField.getText().isEmpty() || pilotComboBox.getValue() == null) { + throw new IllegalArgumentException("Bitte füllen Sie alle Felder aus."); + } + + if (!isValidTime(abflugzeitField.getText())) { + setErrorStyle(abflugzeitField); + throw new IllegalArgumentException("Ungültige Abflugzeit."); + } + + if (!isValidTime(ankunftszeitField.getText())) { + setErrorStyle(ankunftszeitField); + throw new IllegalArgumentException("Ungültige Ankunftszeit."); + } + + System.out.println("Flugdauer vor dem Parsen: " + tToFField.getText()); // Debug-Ausgabe + double flightDuration; + try { + // Ersetzen des Kommas durch einen Punkt + String flightDurationText = tToFField.getText().replace(",", "."); + flightDuration = Double.parseDouble(flightDurationText); + } catch (NumberFormatException e) { + setErrorStyle(tToFField); + throw new IllegalArgumentException("Flugdauer muss eine gültige Zahl sein."); } - double flightDuration = Double.parseDouble(tToFField.getText()); int landings = Integer.parseInt(anzahlLandungenField.getText()); - Flight newFlight = new Flight(datumField.getValue(), musterField.getText(), abflugortField.getText(), - abflugzeitField.getText(), ankunftszeitField.getText(), flightDuration, landings, - pilotComboBox.getValue(), isNachtflug, kommentarField.getText()); + Flight newFlight = new Flight(); + newFlight.setDatum(datumField.getValue()); // Setzen des Datums als LocalDate + newFlight.setMuster(musterField.getText()); + newFlight.setAbflugort(abflugortField.getText()); + newFlight.setAbflugzeit(abflugzeitField.getText()); + newFlight.setAnkunftszeit(ankunftszeitField.getText()); + newFlight.setTToF(flightDuration); + newFlight.setAnzahlLandungen(landings); + newFlight.setPilot(pilotComboBox.getValue()); + newFlight.setNachtflug(isNachtflug); + newFlight.setKommentar(kommentarField.getText()); + newFlight.setDatumStr(datumField.getValue().format(DateTimeFormatter.ISO_LOCAL_DATE)); // Setzen des DatumStr + Flights flights = (Flights) XMLHelper.loadFromXML("flights.xml"); if (flights == null) { @@ -159,7 +215,8 @@ public class AddFlightScreen { new HomeScreen(stage).display(); } catch (NumberFormatException e) { - showAlert("Ungültige Eingabe", "Bitte stellen Sie sicher, dass die Flugdauer und die Anzahl der Landungen numerisch sind."); + showAlert("Ungültige Eingabe", + "Bitte stellen Sie sicher, dass die Flugdauer und die Anzahl der Landungen numerisch sind."); } catch (IllegalArgumentException e) { showAlert("Fehlende Eingabe", e.getMessage()); } catch (Exception e) {