diff options
| author | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-12-08 21:44:39 +0100 |
|---|---|---|
| committer | Stefan Suhren <suhren.stefan@fh-swf.de> | 2015-12-08 21:44:59 +0100 |
| commit | 3735cf0a71a5e25b10f5cf73aa37f9dc1f731604 (patch) | |
| tree | 3008bcc07aa2f2c5dae326049818731032dc7b63 /src/de/fhswf/in/inf/se | |
| parent | 88abbc5d8b2e8b19eaeaf6c7d34953dddb449509 (diff) | |
| download | Projektthemenvergabe-3735cf0a71a5e25b10f5cf73aa37f9dc1f731604.tar.gz Projektthemenvergabe-3735cf0a71a5e25b10f5cf73aa37f9dc1f731604.zip | |
Add main, view and controller
Diffstat (limited to 'src/de/fhswf/in/inf/se')
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); + } + } +} |
