summaryrefslogtreecommitdiffstats
path: root/src/de
diff options
context:
space:
mode:
Diffstat (limited to 'src/de')
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java105
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListe.fxml46
-rw-r--r--src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java230
3 files changed, 381 insertions, 0 deletions
diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java
new file mode 100644
index 0000000..9e9d8d3
--- /dev/null
+++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/Main.java
@@ -0,0 +1,105 @@
+/**
+ *
+ */
+package de.fhswf.in.inf.se.projektthemenvergabe;
+
+import de.fhswf.in.inf.se.projektthemenvergabe.model.Ansprechpartner;
+import de.fhswf.in.inf.se.projektthemenvergabe.model.Organisation;
+import de.fhswf.in.inf.se.projektthemenvergabe.view.AnsprechpartnerListeController;
+import javafx.application.Application;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.fxml.FXMLLoader;
+import javafx.scene.Scene;
+import javafx.scene.layout.BorderPane;
+import javafx.stage.Stage;
+
+/**
+ * Handles the stages and the data.
+ *
+ * @author Dina-Marie Hanxleden & Stefan Suhren
+ * @version 1.0
+ */
+public class Main extends Application
+{
+ private ObservableList<Ansprechpartner> ansprechpartner = FXCollections
+ .observableArrayList(Ansprechpartner.extractor());
+
+ private ObservableList<Organisation> organisation = FXCollections
+ .observableArrayList(Organisation.extractor());
+
+ private Stage primaryStage;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javafx.application.Application#start(javafx.stage.Stage)
+ */
+ @Override
+ public void start(Stage primaryStage) throws Exception
+ {
+ this.primaryStage = primaryStage;
+
+ try
+ {
+ FXMLLoader loader = new FXMLLoader(
+ getClass().getResource("view/AnsprechpartnerListe.fxml"));
+ BorderPane root = (BorderPane) loader.load();
+
+ Scene scene = new Scene(root);
+ primaryStage.setScene(scene);
+
+ AnsprechpartnerListeController controller = loader.getController();
+ controller.setMain(this);
+
+ primaryStage.show();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Getter for property ansprechpartner.
+ *
+ * @return Returns the ansprechpartner.
+ */
+ public ObservableList<Ansprechpartner> getAnsprechpartner()
+ {
+ return ansprechpartner;
+ }
+
+ /**
+ * Get the primary {@link Stage} for this application. Can for example be
+ * used to set modal.
+ *
+ * @return The primary stage of the application.
+ */
+ public Stage getPrimaryStage()
+ {
+ return primaryStage;
+ }
+
+ /**
+ * Getter for property organisation.
+ *
+ * @return Returns the organisation.
+ */
+ public ObservableList<Organisation> getOrganisation()
+ {
+ return organisation;
+ }
+
+ /**
+ * Launches the JavaFX application.
+ *
+ * @param args
+ * Command line arguments.
+ */
+ public static void main(String[] args)
+ {
+ launch(args);
+ }
+
+}
diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListe.fxml b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListe.fxml
new file mode 100644
index 0000000..47d5ecb
--- /dev/null
+++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListe.fxml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?import javafx.geometry.*?>
+<?import java.lang.*?>
+<?import javafx.scene.control.*?>
+<?import javafx.scene.layout.*?>
+<?import javafx.scene.layout.BorderPane?>
+<?import javafx.scene.control.Label?>
+
+<BorderPane xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="de.fhswf.in.inf.se.projektthemenvergabe.view.AnsprechpartnerListeController">
+ <center>
+ <TableView fx:id="ansprechpartnerTableView" editable="true" prefHeight="300.0" prefWidth="400.0" BorderPane.alignment="CENTER">
+ <columns>
+ <TableColumn prefWidth="75.0" text="Ansprechpartner">
+ <columns>
+ <TableColumn fx:id="ansprechpartnerVornameTableColumn" prefWidth="75.0" text="Vorname" />
+ <TableColumn fx:id="ansprechpartnerNachnameTableColumn" prefWidth="75.0" text="Nachname" />
+ </columns>
+ </TableColumn>
+ <TableColumn fx:id="organisationsNameTableColumn" prefWidth="300.0" text="Organisation" />
+ </columns>
+ <columnResizePolicy>
+ <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
+ </columnResizePolicy>
+ <placeholder>
+ <Label text="Keine Ansprechpartner vorhanden." />
+ </placeholder>
+ </TableView>
+ </center>
+ <bottom>
+ <HBox alignment="CENTER_RIGHT" spacing="10.0" BorderPane.alignment="CENTER">
+ <children>
+ <ComboBox fx:id="organisationComboBox" prefWidth="150.0" />
+ <Button mnemonicParsing="false" onAction="#handleAddOrganisation" text="Hinzufügen" />
+ <Button fx:id="editOrganisation" disable="true" mnemonicParsing="false" onAction="#handleEditOrganisation" text="Bearbeiten" />
+ <Button fx:id="deleteOrganisation" disable="true" mnemonicParsing="false" onAction="#handleDeleteOrganisation" text="Löschen" />
+ <Separator prefWidth="200.0" visible="false" HBox.hgrow="ALWAYS" />
+ <Button fx:id="addAnsprechpartner" disable="true" mnemonicParsing="false" onAction="#handleAdd" text="Hinzufügen" />
+ <Button fx:id="deleteAnsprechpartner" disable="true" mnemonicParsing="false" onAction="#handleDelete" text="Löschen" />
+ </children>
+ <BorderPane.margin>
+ <Insets top="5.0" />
+ </BorderPane.margin>
+ </HBox>
+ </bottom>
+</BorderPane>
diff --git a/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java
new file mode 100644
index 0000000..145cc5d
--- /dev/null
+++ b/src/de/fhswf/in/inf/se/projektthemenvergabe/view/AnsprechpartnerListeController.java
@@ -0,0 +1,230 @@
+/**
+ *
+ */
+package de.fhswf.in.inf.se.projektthemenvergabe.view;
+
+import java.util.Optional;
+
+import de.fhswf.in.inf.se.projektthemenvergabe.Main;
+import de.fhswf.in.inf.se.projektthemenvergabe.model.Ansprechpartner;
+import de.fhswf.in.inf.se.projektthemenvergabe.model.Organisation;
+import javafx.beans.property.SimpleObjectProperty;
+import javafx.fxml.FXML;
+import javafx.scene.control.Alert;
+import javafx.scene.control.Alert.AlertType;
+import javafx.scene.control.Button;
+import javafx.scene.control.ButtonType;
+import javafx.scene.control.ComboBox;
+import javafx.scene.control.TableColumn;
+import javafx.scene.control.TableView;
+import javafx.scene.control.TextInputDialog;
+import javafx.scene.control.cell.ComboBoxTableCell;
+import javafx.scene.control.cell.TextFieldTableCell;
+
+/**
+ * The controller for the FXML-View AnsprechpartnerListe.
+ *
+ * @author Dina-Marie Hanxleden & Stefan Suhren
+ * @version 1.0
+ */
+public class AnsprechpartnerListeController
+{
+ @FXML
+ private TableView<Ansprechpartner> ansprechpartnerTableView;
+
+ @FXML
+ private TableColumn<Ansprechpartner, String> ansprechpartnerVornameTableColumn;
+
+ @FXML
+ private TableColumn<Ansprechpartner, String> ansprechpartnerNachnameTableColumn;
+
+ @FXML
+ private TableColumn<Ansprechpartner, Organisation> organisationsNameTableColumn;
+
+ @FXML
+ private Button addAnsprechpartner;
+
+ @FXML
+ private Button deleteAnsprechpartner;
+
+ @FXML
+ private ComboBox<Organisation> organisationComboBox;
+
+ @FXML
+ private Button editOrganisation;
+
+ @FXML
+ private Button deleteOrganisation;
+
+ private Main main;
+
+ /**
+ * TODO Add method comment here
+ *
+ */
+ @FXML
+ private void initialize()
+ {
+ ansprechpartnerVornameTableColumn
+ .setCellValueFactory((data) -> data.getValue().vornameProperty());
+ ansprechpartnerVornameTableColumn
+ .setCellFactory(TextFieldTableCell.forTableColumn());
+
+ ansprechpartnerNachnameTableColumn.setCellValueFactory(
+ (data) -> data.getValue().nachnameProperty());
+ ansprechpartnerNachnameTableColumn
+ .setCellFactory(TextFieldTableCell.forTableColumn());
+
+ organisationsNameTableColumn.setCellValueFactory((data) -> {
+ data.getValue().getOrganisation().nameProperty()
+ .addListener((listener) -> {
+ // Hack, aktualisiere TableView, da Organisation kein Observable
+ // ist
+ organisationsNameTableColumn.setVisible(false);
+ organisationsNameTableColumn.setVisible(true);
+ });
+ return new SimpleObjectProperty<>(data.getValue().getOrganisation());
+ });
+ organisationsNameTableColumn.setOnEditCommit((data) -> {
+ data.getRowValue().setOrganisation(data.getNewValue());
+ });
+
+ editOrganisation.disableProperty()
+ .bind(organisationComboBox.valueProperty().isNull());
+ deleteOrganisation.disableProperty()
+ .bind(organisationComboBox.valueProperty().isNull());
+ addAnsprechpartner.disableProperty()
+ .bind(organisationComboBox.valueProperty().isNull());
+ deleteAnsprechpartner.disableProperty().bind(ansprechpartnerTableView
+ .getSelectionModel().selectedItemProperty().isNull());
+ }
+
+ /**
+ * TODO Add method comment here
+ *
+ * @param main
+ */
+ public void setMain(Main main)
+ {
+ this.main = main;
+
+ ansprechpartnerTableView.setItems(main.getAnsprechpartner());
+ organisationsNameTableColumn.setCellFactory(
+ ComboBoxTableCell.forTableColumn(main.getOrganisation()));
+
+ organisationComboBox.setItems(main.getOrganisation());
+ }
+
+ /**
+ * TODO Add method comment here
+ *
+ */
+ @FXML
+ private void handleAddOrganisation()
+ {
+ TextInputDialog dialog = new TextInputDialog();
+ dialog.setTitle("Füge neue Organisation ein");
+ dialog.setHeaderText("Geben Sie der Organisation einen Namen.");
+ dialog.setContentText("Name der Organisation:");
+
+ dialog.initOwner(main.getPrimaryStage());
+
+ Optional<String> result = dialog.showAndWait();
+ if (result.isPresent() && !result.get().isEmpty())
+ {
+ Organisation organisation = new Organisation();
+ organisation.setName(result.get());
+ main.getOrganisation().add(organisation);
+ }
+ }
+
+ /**
+ * TODO Add method comment here
+ *
+ */
+ @FXML
+ private void handleEditOrganisation()
+ {
+ Organisation organisation = organisationComboBox.getValue();
+
+ TextInputDialog dialog = new TextInputDialog(organisation.getName());
+ dialog.setTitle("Bearbeite Organisation");
+ dialog.setHeaderText("Ändern Sie den Namen der Organisation.");
+ dialog.setContentText("Name der Organisation:");
+
+ dialog.initOwner(main.getPrimaryStage());
+
+ Optional<String> result = dialog.showAndWait();
+ if (result.isPresent() && !result.get().isEmpty())
+ {
+ organisation.setName(result.get());
+ }
+ }
+
+ /**
+ * TODO Add method comment here
+ *
+ */
+ @FXML
+ private void handleDeleteOrganisation()
+ {
+ Organisation selectedItem = organisationComboBox.getValue();
+
+ if (selectedItem != null)
+ {
+ Optional<ButtonType> result = null;
+ if (!selectedItem.getAnsprechpartner().isEmpty())
+ {
+ Alert alert = new Alert(AlertType.CONFIRMATION);
+ alert.setTitle("Löschen bestätigen");
+ alert.setHeaderText(
+ "Warnung! Sie sind im begriff eine Organisation mit Ansprechpartnern zu löschen.\n"
+ + "Dies wird auch die Ansprechpartner löschen.");
+ alert.setContentText("Wollen Sie dies?");
+
+ result = alert.showAndWait();
+ }
+
+ if (result == null || result.get() == ButtonType.OK)
+ {
+ main.getAnsprechpartner()
+ .removeAll(selectedItem.getAnsprechpartner());
+ main.getOrganisation().remove(organisationComboBox.getValue());
+ }
+ }
+ }
+
+ /**
+ * TODO Add method comment here
+ *
+ */
+ @FXML
+ private void handleDelete()
+ {
+ Ansprechpartner selectedItem = ansprechpartnerTableView
+ .getSelectionModel().getSelectedItem();
+
+ if (selectedItem != null)
+ {
+ main.getAnsprechpartner().remove(selectedItem);
+ }
+ }
+
+ /**
+ * TODO Add method comment here
+ *
+ */
+ @FXML
+ private void handleAdd()
+ {
+ Organisation organisation = organisationComboBox.getValue();
+ if (organisation != null)
+ {
+ Ansprechpartner ansprechpartner = new Ansprechpartner(organisation);
+ ansprechpartner.setVorname("Petra");
+ ansprechpartner.setNachname("Muster");
+
+ main.getAnsprechpartner().add(ansprechpartner);
+ }
+ }
+}