summaryrefslogtreecommitdiffstats
path: root/src/de/fhswf/in/inf/se/projektthemenvergabe/view/StudentenverwaltungsController.java
blob: 814e360b90b40e27ba3c0d8bf77ea299d45c5264 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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.Student;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextInputDialog;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.util.converter.IntegerStringConverter;

public class StudentenverwaltungsController
{
   @FXML
   private TableView<Student> studentTableView;

   @FXML
   private TableColumn<Student, Integer> matrikelnummerTableColumn;

   @FXML
   private TableColumn<Student, String> vornameTableColumn;

   @FXML
   private TableColumn<Student, String> nachnameTableColumn;

   @FXML
   private Button deleteStudentButton;

   private Main main;

   @FXML
   private void initialize()
   {
      matrikelnummerTableColumn.setCellValueFactory(
            (data) -> data.getValue().matrikelnummerProperty().asObject());
      matrikelnummerTableColumn.setCellFactory(
            TextFieldTableCell.forTableColumn(new IntegerStringConverter()));

      vornameTableColumn
            .setCellValueFactory((data) -> data.getValue().vornameProperty());
      vornameTableColumn.setCellFactory(TextFieldTableCell.forTableColumn());
      vornameTableColumn.setOnEditCommit((data) -> {
         data.getRowValue().setVorname(data.getNewValue().trim());

         // Hack, aktualisiert TableView, da Observable beim setzen nicht neu
         // abgefragt wird
         vornameTableColumn.setVisible(false);
         vornameTableColumn.setVisible(true);
      });

      nachnameTableColumn.setCellValueFactory(
            (data) -> data.getValue().nachnameProperty());
      nachnameTableColumn.setCellFactory(TextFieldTableCell.forTableColumn());
      nachnameTableColumn.setOnEditCommit((data) -> {
         data.getRowValue().setNachname(data.getNewValue().trim());

         // Hack, aktualisiert TableView, da Observable beim setzen nicht neu
         // abgefragt wird
         nachnameTableColumn.setVisible(false);
         nachnameTableColumn.setVisible(true);
      });

      deleteStudentButton.disableProperty().bind(studentTableView
            .getSelectionModel().selectedItemProperty().isNull());
   }

   public void setMain(Main main)
   {
      this.main = main;
      studentTableView.setItems(main.getStudenten());
   }

   @FXML
   private void handleAddStudent()
   {
      try
      {
         TextInputDialog dialog = new TextInputDialog();
         dialog.setTitle("Füge neuen Studenten hinzu");
         dialog.setHeaderText(
               "Geben Sie die Matrikelnummer des Studenten ein.");
         dialog.setContentText("Matrikelnummer des Stundenten:");

         dialog.initOwner(main.getStudentenverwaltungsStage());

         Optional<String> result = dialog.showAndWait();
         if (result.isPresent() && !result.get().trim().isEmpty())
         {
            Student student = new Student();
            student.setMatrikelnummer(
                  Integer.parseInt(result.get().trim(), 10));
            main.getStudenten().add(student);
         }
      }
      catch (NumberFormatException e)
      {
         Alert alert = new Alert(AlertType.WARNING);
         alert.setTitle("Matrikelnummer ungültig");
         alert.setHeaderText(
               "Die von Ihnen eingegebene Matrikelnummer ist nicht gültig, da sie keine ganze Zahl ist.");
         alert.setContentText("Versuchen Sie es bitte erneut.");

         alert.initOwner(main.getStudentenverwaltungsStage());

         alert.showAndWait();
      }
   }

   @FXML
   private void handleDeleteStudent()
   {
      Student selectedItem = studentTableView.getSelectionModel()
            .getSelectedItem();

      if (selectedItem != null)
      {
         main.getProjekte().remove(selectedItem.getProjekt());
         main.getStudenten().remove(selectedItem);
      }
   }
}