summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java23
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/model/Ansprechpartner.java79
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/model/Organisation.java18
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerHinzufuegen.fxml28
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerHinzufuegenController.java67
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java113
6 files changed, 285 insertions, 43 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..72bf249 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> 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<Ansprechpartner, Observable[]> extractor()
{
- return ansprechpartner -> new Observable[] {
- ansprechpartner.vornameProperty(),
- ansprechpartner.nachnameProperty(),
- ansprechpartner.getOrganisation().nameProperty() };
+ return ansprechpartner -> {
+ List<Observable> 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<Organisation> 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)
{
- throw new IllegalArgumentException(
- "Ansprechpartner sollten nicht arbeitslos sein.");
+ this.organisation.get().removeAnsprechpartner(this);
+ }
+
+ this.organisation.set(organisation);
+
+ if (organisation != null)
+ {
+ organisation.addAnsprechpartner(this);
}
- this.organisation.removeAnsprechpartner(this);
- this.organisation = organisation;
- this.organisation.addAnsprechpartner(this);
}
/**
@@ -133,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 8f04979..4525045 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> ansprechpartner = new ArrayList<>();
@@ -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/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 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.scene.control.*?>
+<?import java.lang.*?>
+<?import javafx.scene.layout.*?>
+<?import javafx.scene.layout.AnchorPane?>
+
+<GridPane xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1">
+ <columnConstraints>
+ <ColumnConstraints hgrow="SOMETIMES" maxWidth="94.0"
+ minWidth="10.0" prefWidth="78.0" />
+ <ColumnConstraints hgrow="SOMETIMES" maxWidth="122.0"
+ minWidth="10.0" prefWidth="122.0" />
+ </columnConstraints>
+ <rowConstraints>
+ <RowConstraints minHeight="10.0" prefHeight="30.0"
+ vgrow="SOMETIMES" />
+ <RowConstraints minHeight="10.0" prefHeight="30.0"
+ vgrow="SOMETIMES" />
+ </rowConstraints>
+ <children>
+ <Label text="Nachname" GridPane.rowIndex="1" />
+ <TextField fx:id="vornameTextField" GridPane.columnIndex="1" />
+ <TextField fx:id="nachnameTextField" GridPane.columnIndex="1"
+ GridPane.rowIndex="1" />
+ <Label text="Vorname" />
+ </children>
+</GridPane>
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<Pair<String, String>>
+{
+ @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 7012eff..ee036e2 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.
@@ -69,21 +70,71 @@ public class AnsprechpartnerListeController
.setCellValueFactory((data) -> data.getValue().vornameProperty());
ansprechpartnerVornameTableColumn
.setCellFactory(TextFieldTableCell.forTableColumn());
+ ansprechpartnerVornameTableColumn.setOnEditCommit((data) -> {
+ 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
+ ansprechpartnerVornameTableColumn.setVisible(false);
+ ansprechpartnerVornameTableColumn.setVisible(true);
+ });
ansprechpartnerNachnameTableColumn.setCellValueFactory(
(data) -> data.getValue().nachnameProperty());
ansprechpartnerNachnameTableColumn
.setCellFactory(TextFieldTableCell.forTableColumn());
+ ansprechpartnerNachnameTableColumn.setOnEditCommit((data) -> {
+ 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
+ ansprechpartnerNachnameTableColumn.setVisible(false);
+ ansprechpartnerNachnameTableColumn.setVisible(true);
+ });
organisationsNameTableColumn.setCellValueFactory((data) -> {
- data.getValue().getOrganisation().nameProperty()
- .addListener((listener) -> {
- // Hack, aktualisiere 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<Organisation>(new Organisation());
});
organisationsNameTableColumn.setOnEditCommit((data) -> {
data.getRowValue().setOrganisation(data.getNewValue());
@@ -130,11 +181,14 @@ public class AnsprechpartnerListeController
dialog.initOwner(main.getPrimaryStage());
Optional<String> result = dialog.showAndWait();
- if (result.isPresent() && !result.get().isEmpty())
+ if (result.isPresent() && !result.get().trim().isEmpty())
{
Organisation organisation = new Organisation();
- organisation.setName(result.get());
- main.getOrganisation().add(organisation);
+ organisation.setName(result.get().trim());
+ if (!main.getOrganisation().contains(organisation))
+ {
+ main.getOrganisation().add(organisation);
+ }
}
}
@@ -155,9 +209,14 @@ public class AnsprechpartnerListeController
dialog.initOwner(main.getPrimaryStage());
Optional<String> result = dialog.showAndWait();
- if (result.isPresent() && !result.get().isEmpty())
+ if (result.isPresent() && !result.get().trim().isEmpty())
{
- organisation.setName(result.get());
+ Organisation tmpOrg = new Organisation();
+ tmpOrg.setName(result.get().trim());
+ if (!main.getOrganisation().contains(tmpOrg))
+ {
+ organisation.setName(tmpOrg.getName());
+ }
}
}
@@ -187,8 +246,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());
}
}
@@ -206,7 +271,7 @@ public class AnsprechpartnerListeController
if (selectedItem != null)
{
- selectedItem.getOrganisation().removeAnsprechpartner(selectedItem);
+ selectedItem.setOrganisation(null);
main.getAnsprechpartner().remove(selectedItem);
}
}
@@ -221,11 +286,27 @@ public class AnsprechpartnerListeController
Organisation organisation = organisationComboBox.getValue();
if (organisation != null)
{
- Ansprechpartner ansprechpartner = new Ansprechpartner(organisation);
- ansprechpartner.setVorname("Petra");
- ansprechpartner.setNachname("Muster");
+ AnsprechpartnerHinzufuegenController dialog;
+
+ dialog = new AnsprechpartnerHinzufuegenController();
- main.getAnsprechpartner().add(ansprechpartner);
+ dialog.initOwner(main.getPrimaryStage());
+
+ Optional<Pair<String, String>> 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());
+
+ if (!main.getAnsprechpartner().contains(ansprechpartner))
+ {
+ main.getAnsprechpartner().add(ansprechpartner);
+ }
+ }
}
}
}