/** * */ package de.fhswf.in.inf.se.projektthemenvergabe; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; 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.model.Projekt; import de.fhswf.in.inf.se.projektthemenvergabe.model.Student; import de.fhswf.in.inf.se.projektthemenvergabe.view.AnsprechpartnerListeController; import de.fhswf.in.inf.se.projektthemenvergabe.view.ProjektHinzufuegenController; import de.fhswf.in.inf.se.projektthemenvergabe.view.ProjektthemenverwaltungsController; import de.fhswf.in.inf.se.projektthemenvergabe.view.StudentenverwaltungsController; import javafx.application.Application; import javafx.application.Platform; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.BorderPane; import javafx.stage.Modality; 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 = FXCollections .observableArrayList(Ansprechpartner.extractor()); private ObservableList organisation = FXCollections .observableArrayList(Organisation.extractor()); private ObservableList projekte = FXCollections .observableArrayList(Projekt.extractor()); private ObservableList studenten = FXCollections .observableArrayList(Student.extractor()); private Stage primaryStage; private Stage studentenverwaltungsStage; private Stage ansprechpartnerverwaltungsStage; private Stage projekthinzufuegenStage; private Connection dbConnection; /* * (non-Javadoc) * * @see javafx.application.Application#start(javafx.stage.Stage) */ @Override public void start(Stage primaryStage) throws Exception { loadData(); this.primaryStage = primaryStage; try { FXMLLoader loader = new FXMLLoader( getClass().getResource("view/Projektthemenverwaltung.fxml")); BorderPane root = (BorderPane) loader.load(); Scene scene = new Scene(root); primaryStage.setScene(scene); primaryStage.setTitle("Projektthemenverwaltung"); ProjektthemenverwaltungsController controller = loader .getController(); controller.setMain(this); primaryStage.show(); } catch (Exception e) { e.printStackTrace(); } } /** * Show the Studentenverwaltung stage with the corresponding FXML. * */ public void showStudentenverwaltung() { try { FXMLLoader loader = new FXMLLoader( getClass().getResource("view/Studentenverwaltung.fxml")); BorderPane root = (BorderPane) loader.load(); Scene scene = new Scene(root); Stage stage = new Stage(); studentenverwaltungsStage = stage; stage.setScene(scene); stage.setTitle("Studentenverwaltung"); stage.initOwner(primaryStage); stage.initModality(Modality.WINDOW_MODAL); StudentenverwaltungsController controller = loader.getController(); controller.setMain(this); stage.showAndWait(); } catch (Exception e) { e.printStackTrace(); } } /** * Show the Ansprechpartnerverwaltung stage with the corresponding FXML. * */ public void showAnsprechpartnerverwaltungsStage() { try { FXMLLoader loader = new FXMLLoader( getClass().getResource("view/AnsprechpartnerListe.fxml")); BorderPane root = (BorderPane) loader.load(); Scene scene = new Scene(root); Stage stage = new Stage(); ansprechpartnerverwaltungsStage = stage; stage.setScene(scene); stage.setTitle("Ansprechpartnerverwaltung"); stage.initOwner(primaryStage); stage.initModality(Modality.WINDOW_MODAL); AnsprechpartnerListeController controller = loader.getController(); controller.setMain(this); stage.showAndWait(); } catch (Exception e) { e.printStackTrace(); } } /** * Show the Projekthinzufuegen stage with the corresponding FXML. * */ public Projekt showProjekthinzufuegenStage(Projekt projekt) { try { FXMLLoader loader = new FXMLLoader( getClass().getResource("view/ProjektHinzufuegen.fxml")); BorderPane root = (BorderPane) loader.load(); Scene scene = new Scene(root); Stage stage = new Stage(); projekthinzufuegenStage = stage; stage.setScene(scene); stage.setTitle("Projekt"); stage.initOwner(primaryStage); stage.initModality(Modality.WINDOW_MODAL); ProjektHinzufuegenController controller = loader.getController(); controller.setMain(this, projekt); stage.showAndWait(); return controller.getProjekt(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 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 the StudentenverwaltungsStage. * * @return studentenverwaltungsStage */ public Stage getStudentenverwaltungsStage() { return studentenverwaltungsStage; } /** * Getter for the AnsprechpartnerverwaltungsStage. * * @return ansprechpartnerverwaltungsStage */ public Stage getAnsprechpartnerverwaltungsStage() { return ansprechpartnerverwaltungsStage; } /** * Getter for the ProjekthinzufuegenStage. * * @return projekthinzufuegenStage */ public Stage getProjekthinzufuegenStage() { return projekthinzufuegenStage; } /** * Getter for property ansprechpartner. * * @return Returns the ansprechpartner. */ public ObservableList getAnsprechpartner() { return ansprechpartner; } /** * Getter for property organisation. * * @return Returns the organisation. */ public ObservableList getOrganisation() { return organisation; } /** * Getter for property projekte. * * @return Returns the projekte. */ public ObservableList getProjekte() { return projekte; } /** * Getter for property studenten. * * @return Returns the studenten. */ public ObservableList getStudenten() { return studenten; } /** * Launches the JavaFX application. * * @param args * Command line arguments. */ public static void main(String[] args) { launch(args); } /** * Load Data on launch from database. * */ private void loadData() { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); dbConnection = DriverManager .getConnection("jdbc:mysql://localhost/projekte", "root", ""); ansprechpartner.clear(); organisation.clear(); HashMap orgaHash = new HashMap<>(); HashMap> anspHash = new HashMap<>(); HashMap studHash = new HashMap<>(); ResultSet rs = dbConnection.createStatement() .executeQuery("SELECT * from organisation"); while (rs.next()) { Organisation organisation = new Organisation( rs.getString("name")); orgaHash.put(organisation.getName(), organisation); } rs = dbConnection.createStatement() .executeQuery("SELECT * from ansprechpartner"); while (rs.next()) { Organisation organisation = orgaHash .get(rs.getString("organisation")); Ansprechpartner ansprechpartner = new Ansprechpartner( organisation, rs.getString("vorname"), rs.getString("nachname")); HashMap tmpHashMap = new HashMap<>(); tmpHashMap.put(ansprechpartner.getNachname(), ansprechpartner); tmpHashMap = anspHash.putIfAbsent(ansprechpartner.getVorname(), tmpHashMap); if (tmpHashMap != null) { tmpHashMap.put(ansprechpartner.getNachname(), ansprechpartner); } } rs = dbConnection.createStatement() .executeQuery("SELECT * from student"); while (rs.next()) { Student student = new Student(rs.getInt("matrikelnummer")); student.setVorname(rs.getString("vorname")); student.setNachname(rs.getString("nachname")); studHash.put(student.getMatrikelnummer(), student); } rs = dbConnection.createStatement() .executeQuery("SELECT * from projekt"); while (rs.next()) { Ansprechpartner ansprechpartner = null; if (rs.getString("ansprechpartnerVorname") != null && rs.getString("ansprechpartnerNachname") != null) { ansprechpartner = anspHash .get(rs.getString("ansprechpartnerVorname")) .get(rs.getString("ansprechpartnerNachname")); } Student student1 = studHash.get(rs.getInt("student1")); Student student2 = studHash.get(rs.getInt("student2")); Student student3 = studHash.get(rs.getInt("student3")); Projekt projekt = new Projekt(rs.getString("projektthema"), student1, student2, student3, ansprechpartner); projekt.setSkizze(rs.getString("skizze")); projekt.setProjektbeschreibung( rs.getString("projektbeschreibung")); projekt.setProjekteinhalte(rs.getString("projektinhalte")); projekt.setStatus( Projekt.StatusTypes.valueOf(rs.getString("status"))); projekt.setDozentenkommentar(rs.getString("dozentenkommentar")); this.projekte.add(projekt); } organisation.addAll(orgaHash.values()); for (HashMap hashs : anspHash.values()) { ansprechpartner.addAll(hashs.values()); } studenten.addAll(studHash.values()); } catch (SQLException | InstantiationException | IllegalAccessException | ClassNotFoundException e) { e.printStackTrace(); Platform.exit(); } } }