From aeb4e8a6f70fbf6261e9c464ac8f156bf1dafa78 Mon Sep 17 00:00:00 2001 From: Stefan Suhren Date: Sat, 12 Dec 2015 13:27:47 +0100 Subject: Trim values on TextField --- .../view/AnsprechpartnerListeController.java | 26 +++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java index 7012eff..2ae8405 100644 --- a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java @@ -69,16 +69,32 @@ public class AnsprechpartnerListeController .setCellValueFactory((data) -> data.getValue().vornameProperty()); ansprechpartnerVornameTableColumn .setCellFactory(TextFieldTableCell.forTableColumn()); + ansprechpartnerVornameTableColumn.setOnEditCommit((data) -> { + data.getRowValue().setVorname(data.getNewValue().trim()); + + // Hack, aktualisiert TableView, da Observable beim setzen nicht neu + // abgefragt wird + ansprechpartnerVornameTableColumn.setVisible(false); + ansprechpartnerVornameTableColumn.setVisible(true); + }); ansprechpartnerNachnameTableColumn.setCellValueFactory( (data) -> data.getValue().nachnameProperty()); ansprechpartnerNachnameTableColumn .setCellFactory(TextFieldTableCell.forTableColumn()); + ansprechpartnerNachnameTableColumn.setOnEditCommit((data) -> { + data.getRowValue().setNachname(data.getNewValue().trim()); + + // Hack, aktualisiert TableView, da Observable beim setzen nicht neu + // abgefragt wird + ansprechpartnerNachnameTableColumn.setVisible(false); + ansprechpartnerNachnameTableColumn.setVisible(true); + }); organisationsNameTableColumn.setCellValueFactory((data) -> { data.getValue().getOrganisation().nameProperty() .addListener((listener) -> { - // Hack, aktualisiere TableView, da Organisation kein Observable + // Hack, aktualisiert TableView, da Organisation kein Observable // ist organisationsNameTableColumn.setVisible(false); organisationsNameTableColumn.setVisible(true); @@ -130,10 +146,10 @@ public class AnsprechpartnerListeController dialog.initOwner(main.getPrimaryStage()); Optional result = dialog.showAndWait(); - if (result.isPresent() && !result.get().isEmpty()) + if (result.isPresent() && !result.get().trim().isEmpty()) { Organisation organisation = new Organisation(); - organisation.setName(result.get()); + organisation.setName(result.get().trim()); main.getOrganisation().add(organisation); } } @@ -155,9 +171,9 @@ public class AnsprechpartnerListeController dialog.initOwner(main.getPrimaryStage()); Optional result = dialog.showAndWait(); - if (result.isPresent() && !result.get().isEmpty()) + if (result.isPresent() && !result.get().trim().isEmpty()) { - organisation.setName(result.get()); + organisation.setName(result.get().trim()); } } -- cgit v1.2.3-70-g09d2 From db9dbb0dd840a1f2c7500b65e71ee3942265670f Mon Sep 17 00:00:00 2001 From: Stefan Suhren Date: Tue, 15 Dec 2015 20:05:13 +0100 Subject: Don't remove all Ansprechpartner on Organisation delete --- .../fhswf/in/inf/se/projektthemenvergabe/Main.java | 23 ++++---- .../model/Ansprechpartner.java | 62 ++++++++++++++++------ .../projektthemenvergabe/model/Organisation.java | 2 +- .../view/AnsprechpartnerListeController.java | 32 ++++++++--- 4 files changed, 85 insertions(+), 34 deletions(-) diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java index fe144e7..e786f78 100644 --- a/src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java @@ -175,15 +175,13 @@ public class Main extends Application { Organisation organisation = orga .get(rs.getString("organisation")); - if (organisation != null) - { - Ansprechpartner ansprechpartner = new Ansprechpartner( - organisation); - ansprechpartner.setVorname(rs.getString("vorname")); - ansprechpartner.setNachname(rs.getString("nachname")); - this.ansprechpartner.add(ansprechpartner); - } + Ansprechpartner ansprechpartner = new Ansprechpartner( + organisation); + ansprechpartner.setVorname(rs.getString("vorname")); + ansprechpartner.setNachname(rs.getString("nachname")); + + this.ansprechpartner.add(ansprechpartner); } organisation.addAll(orga.values()); @@ -223,7 +221,14 @@ public class Main extends Application { ps.setString(1, ans.getVorname()); ps.setString(2, ans.getNachname()); - ps.setString(3, ans.getOrganisation().getName()); + if (ans.getOrganisation() != null) + { + ps.setString(3, ans.getOrganisation().getName()); + } + else + { + ps.setString(3, null); + } ps.execute(); } diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Ansprechpartner.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Ansprechpartner.java index 11873e0..66b6ab5 100644 --- a/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Ansprechpartner.java +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Ansprechpartner.java @@ -1,6 +1,11 @@ package de.fhswf.in.inf.se.projektthemenvergabe.model; +import java.util.ArrayList; +import java.util.List; + import javafx.beans.Observable; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.StringProperty; import javafx.util.Callback; @@ -11,7 +16,7 @@ public class Ansprechpartner private StringProperty nachname = new SimpleStringProperty(); - private Organisation organisation; + private ObjectProperty organisation = new SimpleObjectProperty<>(); /** * Generates an extractor that fires when a property of a list value @@ -21,10 +26,21 @@ public class Ansprechpartner */ public static Callback extractor() { - return ansprechpartner -> new Observable[] { - ansprechpartner.vornameProperty(), - ansprechpartner.nachnameProperty(), - ansprechpartner.getOrganisation().nameProperty() }; + return ansprechpartner -> { + List extractorList = new ArrayList<>(); + + extractorList.add(ansprechpartner.vornameProperty()); + extractorList.add(ansprechpartner.nachnameProperty()); + extractorList.add(ansprechpartner.organisationProperty()); + + if (ansprechpartner.getOrganisation() != null) + { + extractorList + .add(ansprechpartner.getOrganisation().nameProperty()); + } + + return extractorList.toArray(new Observable[extractorList.size()]); + }; } /** @@ -34,23 +50,32 @@ public class Ansprechpartner */ public Ansprechpartner(Organisation organisation) { - if (organisation == null) + this.organisation.set(organisation); + + if (organisation != null) { - throw new IllegalArgumentException( - "Ansprechpartner sollten nicht arbeitslos sein."); + this.organisation.get().addAnsprechpartner(this); } - this.organisation = organisation; - this.organisation.addAnsprechpartner(this); } /** * Getter for property organisation. + * + * @return Returns the organisation. + */ + public ObjectProperty organisationProperty() + { + return organisation; + } + + /** + * Getter for organisation. * * @return Returns the organisation. */ public Organisation getOrganisation() { - return organisation; + return organisation.get(); } /** @@ -61,14 +86,17 @@ public class Ansprechpartner */ public void setOrganisation(Organisation organisation) { - if (organisation == null) + if (this.organisation.get() != null) + { + this.organisation.get().removeAnsprechpartner(this); + } + + this.organisation.set(organisation); + + if (organisation != null) { - throw new IllegalArgumentException( - "Ansprechpartner sollten nicht arbeitslos sein."); + organisation.addAnsprechpartner(this); } - this.organisation.removeAnsprechpartner(this); - this.organisation = organisation; - this.organisation.addAnsprechpartner(this); } /** diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java index 8f04979..dca4511 100644 --- a/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java @@ -11,7 +11,7 @@ import javafx.util.Callback; public class Organisation { - private StringProperty name = new SimpleStringProperty(); + private StringProperty name = new SimpleStringProperty(""); private List ansprechpartner = new ArrayList<>(); diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java index 2ae8405..27f85c9 100644 --- a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java @@ -92,14 +92,26 @@ public class AnsprechpartnerListeController }); organisationsNameTableColumn.setCellValueFactory((data) -> { - data.getValue().getOrganisation().nameProperty() - .addListener((listener) -> { - // Hack, aktualisiert TableView, da Organisation kein Observable + data.getValue().organisationProperty().addListener((listener) -> { + // Hack, aktualisiert TableView, da Organisation kein + // Observable // ist organisationsNameTableColumn.setVisible(false); organisationsNameTableColumn.setVisible(true); }); - return new SimpleObjectProperty<>(data.getValue().getOrganisation()); + if (data.getValue().getOrganisation() != null) + { + data.getValue().getOrganisation().nameProperty() + .addListener((listener) -> { + // Hack, aktualisiert TableView, da Organisation kein + // Observable + // ist + organisationsNameTableColumn.setVisible(false); + organisationsNameTableColumn.setVisible(true); + }); + return data.getValue().organisationProperty(); + } + return new SimpleObjectProperty(new Organisation()); }); organisationsNameTableColumn.setOnEditCommit((data) -> { data.getRowValue().setOrganisation(data.getNewValue()); @@ -203,8 +215,14 @@ public class AnsprechpartnerListeController if (result == null || result.get() == ButtonType.OK) { - main.getAnsprechpartner() - .removeAll(selectedItem.getAnsprechpartner()); + Ansprechpartner[] ansArray = selectedItem.getAnsprechpartner() + .toArray(new Ansprechpartner[selectedItem + .getAnsprechpartner().size()]); + for (Ansprechpartner ans : ansArray) + { + ans.setOrganisation(null); + } + main.getOrganisation().remove(organisationComboBox.getValue()); } } @@ -222,7 +240,7 @@ public class AnsprechpartnerListeController if (selectedItem != null) { - selectedItem.getOrganisation().removeAnsprechpartner(selectedItem); + selectedItem.setOrganisation(null); main.getAnsprechpartner().remove(selectedItem); } } -- cgit v1.2.3-70-g09d2 From c42890f0dff5ad14efd22e2de87d2afc4e758ac6 Mon Sep 17 00:00:00 2001 From: Stefan Suhren Date: Tue, 15 Dec 2015 21:02:54 +0100 Subject: Ask for Vorname and Nachname on Ansprechpartner --- .../view/AnsprechpartnerHinzufuegen.fxml | 28 +++++++++ .../view/AnsprechpartnerHinzufuegenController.java | 67 ++++++++++++++++++++++ .../view/AnsprechpartnerListeController.java | 22 +++++-- 3 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerHinzufuegen.fxml create mode 100644 src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerHinzufuegenController.java diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerHinzufuegen.fxml b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerHinzufuegen.fxml new file mode 100644 index 0000000..2e11c58 --- /dev/null +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerHinzufuegen.fxml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerHinzufuegenController.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerHinzufuegenController.java new file mode 100644 index 0000000..0fd15de --- /dev/null +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerHinzufuegenController.java @@ -0,0 +1,67 @@ +package de.fhswf.in.inf.se.projektthemenvergabe.view; + +import java.io.IOException; + +import de.fhswf.in.inf.se.projektthemenvergabe.model.Ansprechpartner; +import javafx.application.Platform; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.control.ButtonType; +import javafx.scene.control.Dialog; +import javafx.scene.control.TextField; +import javafx.scene.layout.GridPane; +import javafx.util.Pair; + +public class AnsprechpartnerHinzufuegenController + extends Dialog> +{ + @FXML + private TextField vornameTextField; + + @FXML + private TextField nachnameTextField; + + /** + * Create a {@link Dialog} for entering Vorname und Nachname of an + * {@link Ansprechpartner} + * + * @throws IOException + */ + public AnsprechpartnerHinzufuegenController() + { + setTitle("Neuer Ansprechpartner"); + setHeaderText("Geben Sie den Namen des Ansprechpartners ein."); + + FXMLLoader fxmlLoader = new FXMLLoader( + getClass().getResource("AnsprechpartnerHinzufuegen.fxml")); + fxmlLoader.setController(this); + + try + { + getDialogPane().setContent((GridPane) fxmlLoader.load()); + } + catch (IOException e) + { + // Ignoriert, da die FXML Datei immer da sein sollte :-P + e.printStackTrace(); + } + + // Setze die Button Typen für den Dialog + getDialogPane().getButtonTypes().addAll(ButtonType.OK, + ButtonType.CANCEL); + + // Setze Focus auf Vorname TextField + Platform.runLater(() -> vornameTextField.requestFocus()); + + // Wenn OK gedrückt wurde, gib ein Vorname-Nachname-Paar zurück + setResultConverter(dialogButton -> { + if (dialogButton == ButtonType.OK) + { + return new Pair<>(vornameTextField.getText(), + nachnameTextField.getText()); + } + + return null; + }); + } +} diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java index 27f85c9..ac6bb34 100644 --- a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java @@ -20,6 +20,7 @@ import javafx.scene.control.TableView; import javafx.scene.control.TextInputDialog; import javafx.scene.control.cell.ComboBoxTableCell; import javafx.scene.control.cell.TextFieldTableCell; +import javafx.util.Pair; /** * The controller for the FXML-View AnsprechpartnerListe. @@ -255,11 +256,24 @@ public class AnsprechpartnerListeController Organisation organisation = organisationComboBox.getValue(); if (organisation != null) { - Ansprechpartner ansprechpartner = new Ansprechpartner(organisation); - ansprechpartner.setVorname("Petra"); - ansprechpartner.setNachname("Muster"); + AnsprechpartnerHinzufuegenController dialog; - main.getAnsprechpartner().add(ansprechpartner); + dialog = new AnsprechpartnerHinzufuegenController(); + + dialog.initOwner(main.getPrimaryStage()); + + Optional> result = dialog.showAndWait(); + + if (result.isPresent() && !result.get().getKey().trim().isEmpty() + && !result.get().getValue().trim().isEmpty()) + { + Ansprechpartner ansprechpartner = new Ansprechpartner( + organisation); + ansprechpartner.setVorname(result.get().getKey().trim()); + ansprechpartner.setNachname(result.get().getValue().trim()); + + main.getAnsprechpartner().add(ansprechpartner); + } } } } -- cgit v1.2.3-70-g09d2 From 953b348b7011b5aabe0f896ad0472cbf8455312d Mon Sep 17 00:00:00 2001 From: Stefan Suhren Date: Tue, 15 Dec 2015 22:25:23 +0100 Subject: Only allow singular PKs --- .../model/Ansprechpartner.java | 17 +++++++++ .../projektthemenvergabe/model/Organisation.java | 16 ++++++++ .../view/AnsprechpartnerListeController.java | 43 +++++++++++++++++++--- 3 files changed, 71 insertions(+), 5 deletions(-) diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Ansprechpartner.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Ansprechpartner.java index 66b6ab5..72bf249 100644 --- a/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Ansprechpartner.java +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Ansprechpartner.java @@ -161,4 +161,21 @@ public class Ansprechpartner this.vorname.set(vorname); } + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof Ansprechpartner)) + { + return false; + } + + return ((Ansprechpartner) obj).vorname.get().equals(vorname.get()) + && ((Ansprechpartner) obj).nachname.get().equals(nachname.get()); + } + } \ No newline at end of file diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java index dca4511..4525045 100644 --- a/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java @@ -107,4 +107,20 @@ public class Organisation { return name.get(); } + + /* + * (non-Javadoc) + * + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof Organisation)) + { + return false; + } + + return ((Organisation) obj).name.get().equals(name.get()); + } } \ No newline at end of file diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java index ac6bb34..ee036e2 100644 --- a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java +++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java @@ -71,7 +71,18 @@ public class AnsprechpartnerListeController ansprechpartnerVornameTableColumn .setCellFactory(TextFieldTableCell.forTableColumn()); ansprechpartnerVornameTableColumn.setOnEditCommit((data) -> { - data.getRowValue().setVorname(data.getNewValue().trim()); + if (!data.getNewValue().isEmpty()) + { + Ansprechpartner tmpAns = new Ansprechpartner( + data.getRowValue().getOrganisation()); + tmpAns.setNachname(data.getRowValue().getNachname()); + tmpAns.setVorname(data.getNewValue().trim()); + + if (!main.getAnsprechpartner().contains(tmpAns)) + { + data.getRowValue().setVorname(tmpAns.getVorname()); + } + } // Hack, aktualisiert TableView, da Observable beim setzen nicht neu // abgefragt wird @@ -84,7 +95,18 @@ public class AnsprechpartnerListeController ansprechpartnerNachnameTableColumn .setCellFactory(TextFieldTableCell.forTableColumn()); ansprechpartnerNachnameTableColumn.setOnEditCommit((data) -> { - data.getRowValue().setNachname(data.getNewValue().trim()); + if (!data.getNewValue().isEmpty()) + { + Ansprechpartner tmpAns = new Ansprechpartner( + data.getRowValue().getOrganisation()); + tmpAns.setVorname(data.getRowValue().getVorname()); + tmpAns.setNachname(data.getNewValue().trim()); + + if (!main.getAnsprechpartner().contains(tmpAns)) + { + data.getRowValue().setNachname(tmpAns.getNachname()); + } + } // Hack, aktualisiert TableView, da Observable beim setzen nicht neu // abgefragt wird @@ -163,7 +185,10 @@ public class AnsprechpartnerListeController { Organisation organisation = new Organisation(); organisation.setName(result.get().trim()); - main.getOrganisation().add(organisation); + if (!main.getOrganisation().contains(organisation)) + { + main.getOrganisation().add(organisation); + } } } @@ -186,7 +211,12 @@ public class AnsprechpartnerListeController Optional result = dialog.showAndWait(); if (result.isPresent() && !result.get().trim().isEmpty()) { - organisation.setName(result.get().trim()); + Organisation tmpOrg = new Organisation(); + tmpOrg.setName(result.get().trim()); + if (!main.getOrganisation().contains(tmpOrg)) + { + organisation.setName(tmpOrg.getName()); + } } } @@ -272,7 +302,10 @@ public class AnsprechpartnerListeController ansprechpartner.setVorname(result.get().getKey().trim()); ansprechpartner.setNachname(result.get().getValue().trim()); - main.getAnsprechpartner().add(ansprechpartner); + if (!main.getAnsprechpartner().contains(ansprechpartner)) + { + main.getAnsprechpartner().add(ansprechpartner); + } } } } -- cgit v1.2.3-70-g09d2