Skip to content
Snippets Groups Projects
Commit 0bde92a1 authored by Dennis Eisold's avatar Dennis Eisold
Browse files

Fehler alle behoben, Dialoge zur Fehlerausgabe sowie Quelltext fertig dokumentiert.

parent 6cfc6f67
No related branches found
No related tags found
No related merge requests found
......@@ -19,18 +19,7 @@ public class App extends Application {
@Override
public void start(Stage stage) throws IOException {
Kontakt kontakt = new Kontakt();
kontakt.setTelefon("111");
eintraege.put("111", kontakt);
kontakt = new Kontakt();
kontakt.setTelefon("222");
eintraege.put("222", kontakt);
kontakt = new Kontakt();
kontakt.setTelefon("333");
eintraege.put("333", kontakt);
scene = new Scene(loadFXML("Telefonbuch"));
scene = new Scene(loadFXML("Telefonbuch"));
stage.setScene(scene);
stage.show();
}
......
package de.itstall;
import de.itstall.model.Fehler;
import de.itstall.model.Kontakt;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import java.util.ArrayList;
/**
* Der Kontroller für unser Telefonbuch
*/
public class TelefonbuchController {
/** Initialisiert die TreeMap für die Kontakte */
private Kontakt kontakt = new Kontakt();
/** Initialisiert das Fehler Objekt */
private Fehler fehler = new Fehler();
@FXML
private TextField txtVorname;
......@@ -45,28 +52,56 @@ public class TelefonbuchController {
@FXML
private Button btnLoeschen;
/**
* Action Listener für btnLoeschen
* @param event : ActionEvent
*/
@FXML
void loeschen(ActionEvent event) {
deleteKontakt();
deleteKontakt(true);
if(App.eintraege.size() != 0) {
kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[0]);
setKontaktToForm(kontakt);
}
}
/**
* Action Listener für btnWeiter
* @param event : ActionEvent
*/
@FXML
void navWeiter(ActionEvent event) {
kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[1]);
setForm(kontakt);
if(App.eintraege.size() != 0) {
kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[1]);
setKontaktToForm(kontakt);
}
}
/**
* Action Listener für btnZurueck
* @param event : ActionEvent
*/
@FXML
void navZurueck(ActionEvent event) {
kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[0]);
setForm(kontakt);
if(App.eintraege.size() != 0) {
kontakt = App.eintraege.get(sucheEintrag(kontakt.getTelefon())[0]);
setKontaktToForm(kontakt);
}
}
/**
* Action Listener für btnNeuerEintrag
* @param event : ActionEvent
*/
@FXML
void neuerEintrag(ActionEvent event) {
neuenKontaktAnlegen();
deaktiviereButtons(true);
}
/**
* Initialisiert die Komponenten
*/
@FXML
void initialize() {
assert txtVorname != null : "fx:id=\"txtVorname\" was not injected: check your FXML file 'telefonbuch.fxml'.";
......@@ -81,81 +116,129 @@ public class TelefonbuchController {
assert btnNeuerEintrag != null : "fx:id=\"btnNeuerEintrag\" was not injected: check your FXML file 'telefonbuch.fxml'.";
assert btnLoeschen != null : "fx:id=\"btnLoeschen\" was not injected: check your FXML file 'telefonbuch.fxml'.";
/** Wenn noch keine Einträge vorhanden sind, die Buttons deaktivieren */
if(App.eintraege.size() == 0) {
deaktiviereButtons(true);
}
/** Listener für das Vorname Feld */
txtVorname.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
if (!t1) {
/** Prüfen ob das Feld verändert oder ausgefüllt wurde */
if (txtVorname.getText() != null && !txtVorname.getText().equals("") && !t1) {
/** Prüfen ob das Feld den Regeln entspricht */
if (!kontakt.setVorname(txtVorname.getText())) {
setFieldError(txtVorname, true);
} else {
fehler.showErrorDialog("error", "", "Der Vorname ist auf 50 Zeichen beschränkt");
}
/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
else {
saveKontakt();
setFieldError(txtVorname, false);
}
}
});
/** Listener für das Nachname Feld */
txtNachname.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
if (!t1) {
/** Prüfen ob das Feld verändert oder ausgefüllt wurde */
if (txtNachname.getText() != null && !txtNachname.getText().equals("") && !t1) {
/** Prüfen ob das Feld den Regeln entspricht */
if (!kontakt.setNachname(txtNachname.getText())) {
setFieldError(txtNachname, true);
} else {
fehler.showErrorDialog("error", "", "Der Nachname ist auf 50 Zeichen beschränkt");
}
/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
else {
saveKontakt();
setFieldError(txtNachname, false);
}
}
});
/** Listener für das Straßen Feld */
txtStrasse.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
if (!t1) {
/** Prüfen ob das Feld verändert oder ausgefüllt wurde */
if (txtStrasse.getText() != null && !txtStrasse.getText().equals("") && !t1) {
/** Prüfen ob das Feld den Regeln entspricht */
if (!kontakt.setStrasse(txtStrasse.getText())) {
setFieldError(txtStrasse, true);
} else {
fehler.showErrorDialog("error", "", "Die Straße ist auf 50 Zeichen beschränkt");
}
/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
else {
saveKontakt();
setFieldError(txtStrasse, false);
}
}
});
/** Listener für das Hausnummern Feld */
txtHNr.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
if (!t1) {
/** Prüfen ob das Feld verändert oder ausgefüllt wurde */
if (txtHNr.getText() != null && !txtHNr.getText().equals("") && !t1) {
/** Prüfen ob das Feld den Regeln entspricht */
if (!kontakt.setHausnummer(txtHNr.getText())) {
setFieldError(txtHNr, true);
} else {
fehler.showErrorDialog("error", "", "Die Hausnummer ist auf 10 Zeichen beschränkt");
}
/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
else {
saveKontakt();
setFieldError(txtHNr, false);
}
}
});
/** Listener für das Plz Feld */
txtPlz.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
/** Prüfen ob das Feld verändert wurde */
if (!t1) {
/** Prüfen ob das Feld den Regeln entspricht */
if (!kontakt.setPlz(txtPlz.getText())) {
setFieldError(txtPlz, true);
} else {
fehler.showErrorDialog("error", "", "Die Postleitzahl muss 5 Zeichen entsprechen");
}
/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
else {
saveKontakt();
setFieldError(txtPlz, false);
}
}
});
/** Listener für das Ort Feld */
txtOrt.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
if (!t1) {
/** Prüfen ob das Feld verändert oder ausgefüllt wurde */
if (txtOrt.getText() != null && !txtOrt.getText().equals("") && !t1) {
/** Prüfen ob das Feld den Regeln entspricht */
if (!kontakt.setOrt(txtOrt.getText())) {
setFieldError(txtOrt, true);
} else {
fehler.showErrorDialog("error", "", "Der Ort ist auf 50 Zeichen beschränkt");
}
/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
else {
saveKontakt();
setFieldError(txtOrt, false);
}
}
});
/** Listener für das Telefon Feld */
txtTelefon.focusedProperty().addListener((observableValue, aBoolean, t1) -> {
/** Prüfen ob das Feld verändert wurde */
if (!t1) {
if (txtTelefon.getText() != kontakt.getTelefon()) {
deleteKontakt();
/** Wenn die Nummer korrekt ausgefüllt wurde und der Kontakt bereits in der DB enthalten war, den Kontakt löschen und neu anlegen */
if (!txtTelefon.getText().equals("") && txtTelefon.getText() != null && txtTelefon.getText() != kontakt.getTelefon()) {
deleteKontakt(false);
saveKontakt();
}
if (!kontakt.setTelefon(txtTelefon.getText())) {
/** Wenn das Feld noch leer ist oder nicht den Regeln entspricht, Fehler ausgeben */
if (txtTelefon.getText() == null || !kontakt.setTelefon(txtTelefon.getText())) {
setFieldError(txtTelefon, true);
} else {
fehler.showErrorDialog("error", "", "Die Telefonnummer muss mindestens 3 und maximal 30 Ziffern lang sein.");
}
/** Wenn alles korrekt gelaufen ist, Kontakt speichern und Fehler zurück setzen */
else {
saveKontakt();
setFieldError(txtTelefon, false);
}
......@@ -172,23 +255,42 @@ public class TelefonbuchController {
/**
* Kontakt aus Treemap loeschen
* @param resetForm : boolean : Soll das Formular auch geleert werden?
*/
public void deleteKontakt() {
public void deleteKontakt(boolean resetForm) {
App.eintraege.remove(txtTelefon.getText());
resetForm();
if(resetForm) {
resetForm();
}
}
/**
* Kontakt in die Treemap speichern
*/
public void saveKontakt() {
if (kontakt.getTelefon() != "") {
if (!kontakt.getTelefon().equals("")) {
App.eintraege.put(kontakt.getTelefon(), kontakt);
}
}
/**
* Background der Felder setzen im Fehler Fall
* Kontrollieren ob alle Felder fehlerfrei sind. Wenn ja, die Buttons wieder aktivieren.
*/
public void checkFieldErrors() {
if(!txtVorname.getStyle().equals("-fx-control-inner-background: #ff000040;") &&
!txtNachname.getStyle().equals("-fx-control-inner-background: #ff000040;") &&
!txtStrasse.getStyle().equals("-fx-control-inner-background: #ff000040;") &&
!txtHNr.getStyle().equals("-fx-control-inner-background: #ff000040;") &&
!txtPlz.getStyle().equals("-fx-control-inner-background: #ff000040;") &&
!txtOrt.getStyle().equals("-fx-control-inner-background: #ff000040;") &&
!txtTelefon.getStyle().equals("-fx-control-inner-background: #ff000040;")
) {
deaktiviereButtons(false);
}
}
/**
* Background der Felder setzen im Fehler Fall sowie deaktivieren der Buttons
*
* @param field : Textfeld Object
* @param set : true:Fehler false:Kein Fehler
......@@ -196,8 +298,10 @@ public class TelefonbuchController {
public void setFieldError(TextField field, boolean set) {
if (set) {
field.setStyle("-fx-control-inner-background: #ff000040;");
deaktiviereButtons(true);
} else {
field.setStyle("-fx-control-inner-background: WHITE;");
checkFieldErrors();
}
}
......@@ -263,6 +367,10 @@ public class TelefonbuchController {
* Loescht das Formular und erstellt ein neues Kontakt Objekt
*/
public void resetForm() {
/** Wenn keine Einträge mehr vorhanden sind, auch die Buttons deaktivieren */
if(App.eintraege.size() == 0) {
deaktiviereButtons(true);
}
kontakt = new Kontakt();
txtVorname.setText("");
txtNachname.setText("");
......@@ -276,9 +384,9 @@ public class TelefonbuchController {
/**
* Setzt alle Formular Felder auf die Daten des Objektes
*
* @param kontakt
* @param kontakt : Kontakt : Kontakt Objekt
*/
public void setForm(Kontakt kontakt) {
public void setKontaktToForm(Kontakt kontakt) {
txtVorname.setText(kontakt.getVorname());
txtNachname.setText(kontakt.getNachname());
txtStrasse.setText(kontakt.getStrasse());
......@@ -287,4 +395,22 @@ public class TelefonbuchController {
txtOrt.setText(kontakt.getOrt());
txtTelefon.setText(kontakt.getTelefon());
}
/**
* Deaktiviert die Buttons
* @param deaktivieren : boolean
*/
public void deaktiviereButtons(boolean deaktivieren) {
if(deaktivieren) {
btnLoeschen.setDisable(true);
btnNaviLinks.setDisable(true);
btnNaviRechts.setDisable(true);
btnNeuerEintrag.setDisable(true);
} else if (deaktivieren == false && !txtTelefon.getText().equals("") && txtTelefon.getText() != null) {
btnLoeschen.setDisable(false);
btnNaviLinks.setDisable(false);
btnNaviRechts.setDisable(false);
btnNeuerEintrag.setDisable(false);
}
}
}
package de.itstall.model;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
/**
* In dieser Klasse werden Fehler behandelt und an den User/Admin/Entwickler ausgegeben
*/
public class Fehler {
/**
* Zeige Fehler Dialog
*
* @param type : String : Art der Meldung (warning/information/error)
* @param subject : Titel des Dialoges
* @param message : Nachricht der Meldung
*/
public void showErrorDialog(String type, String subject, String message) {
Alert alert;
/** Der Titel darf auch als leerer String übergeben werden, dann wird ein Default gesetzt */
if(subject.equals("")) {
subject = "Es ist ein Fehler aufgetreten";
}
/** Welcher Fehler Typ wurde übergeben? */
switch (type) {
case "warning":
alert = new Alert(AlertType.WARNING);
break;
case "information":
alert = new Alert(AlertType.INFORMATION);
break;
case "error":
alert = new Alert(AlertType.ERROR);
break;
default:
alert = new Alert(Alert.AlertType.NONE);
}
/** Setzt den Titel des Dialoges */
alert.setTitle(subject);
/** Setzt den Headertext des Dialoges */
alert.setHeaderText(null);
/** Setzt die Nachricht des Dialoges */
alert.setContentText(message);
/** Zeige den Dialog an */
alert.showAndWait();
}
}
package de.itstall.model;
/**
* Das Model für die Kontakte
*/
public class Kontakt {
// region 0 Variables
private String vorname, nachname, strasse, hausnummer, plz, ort, telefon = "";
//endregion
// region 1 Setter
/**
* Setzt den Vornamen. Dieser darf maximal 50 Zeichen lang sein
* Gibt im erfolgs Fall true und bei einem Fehler false zurück
* @param vorname : String
* @return boolean
*/
public boolean setVorname(String vorname) {
if (vorname.length() <= 50) {
if (vorname != null && vorname.length() <= 50) {
this.vorname = vorname;
return true;
} else {
......@@ -15,8 +25,14 @@ public class Kontakt {
}
}
/**
* Setzt den Nachnamen. Dieser darf maximal 50 Zeichen lang sein
* Gibt im erfolgs Fall true und bei einem Fehler false zurück
* @param nachname : String
* @return boolean
*/
public boolean setNachname(String nachname) {
if (nachname.length() <= 50) {
if (nachname != null && nachname.length() <= 50) {
this.nachname = nachname;
return true;
} else {
......@@ -24,8 +40,14 @@ public class Kontakt {
}
}
/**
* Setzt die Straße. Diese darf maximal 50 Zeichen lang sein
* Gibt im erfolgs Fall true und bei einem Fehler false zurück
* @param strasse : String
* @return boolean
*/
public boolean setStrasse(String strasse) {
if (strasse.length() <= 50) {
if (strasse != null && strasse.length() <= 50) {
this.strasse = strasse;
return true;
} else {
......@@ -33,8 +55,14 @@ public class Kontakt {
}
}
/**
* Setzt die Hausnummer. Diese darf maximal 10 Zeichen lang sein
* Gibt im erfolgs Fall true und bei einem Fehler false zurück
* @param hausnummer : String
* @return boolean
*/
public boolean setHausnummer(String hausnummer) {
if (hausnummer.length() <= 10) {
if (hausnummer != null && hausnummer.length() <= 10) {
this.hausnummer = hausnummer;
return true;
} else {
......@@ -42,8 +70,14 @@ public class Kontakt {
}
}
/**
* Setzt die Postleitzahl. Diese muss genau 5 Zeichen lang sein
* Gibt im erfolgs Fall true und bei einem Fehler false zurück
* @param plz : String
* @return boolean
*/
public boolean setPlz(String plz) {
if (plz.length() == 5) {
if (plz != null && plz.length() == 5) {
this.plz = plz;
return true;
} else {
......@@ -51,8 +85,14 @@ public class Kontakt {
}
}
/**
* Setzt den Ort. Dieser darf maximal 50 Zeichen lang sein
* Gibt im erfolgs Fall true und bei einem Fehler false zurück
* @param ort : String
* @return boolean
*/
public boolean setOrt(String ort) {
if (ort.length() <= 50) {
if (ort != null && ort.length() <= 50) {
this.ort = ort;
return true;
} else {
......@@ -60,8 +100,14 @@ public class Kontakt {
}
}
/**
* Setzt die Telefonnummer. Diese muss zwischen 3 und 50 Zeichen lang sein
* Gibt im erfolgs Fall true und bei einem Fehler false zurück
* @param telefon : String
* @return boolean
*/
public boolean setTelefon(String telefon) {
if (telefon.length() <= 30 && telefon.length() > 2 && isNumeric(telefon)) {
if (telefon != null && telefon.length() <= 30 && telefon.length() > 2 && isNumeric(telefon)) {
this.telefon = telefon;
return true;
} else {
......@@ -71,30 +117,58 @@ public class Kontakt {
//endregion
// region 2. Getter
/**
* Gibt den Vornamen zurück
* @return : String
*/
public String getVorname() {
return vorname;
}
/**
* Gibt den Nachnamen zurück
* @return : String
*/
public String getNachname() {
return nachname;
}
/**
* Gibt die Straße zurück
* @return : String
*/
public String getStrasse() {
return strasse;
}
/**
* Gibt die Hausnummer zurück
* @return : String
*/
public String getHausnummer() {
return hausnummer;
}
/**
* Gibt die Postleitzahl zurück
* @return : String
*/
public String getPlz() {
return plz;
}
/**
* Gibt den Ort zurück
* @return : String
*/
public String getOrt() {
return ort;
}
/**
* Gibt die Telefonnummer zurück
* @return : String
*/
public String getTelefon() {
return telefon;
}
......@@ -102,7 +176,7 @@ public class Kontakt {
//region 3 Functions
/**
* Prueft ob String aus Zahlen besteht
* Prueft ob der String ausschließlich aus Zahlen besteht
*/
public boolean isNumeric(String s) {
return s != null && s.matches("[-+]?\\d*\\.?\\d+");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment