diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FXController.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FXController.java index 68a86b6..c2c7a87 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FXController.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FXController.java @@ -37,11 +37,6 @@ public abstract class FXController { factoryDecorator.addListener(listener); } - protected void removeListener(){ - tournamentDecorator.removeListener(listener); - factoryDecorator.removeListener(listener); - } - protected TournamentDecorator getTournamentDecorator() { return tournamentDecorator; } diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Factory.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Factory.java index 53f9f12..dec1687 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Factory.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Factory.java @@ -2,7 +2,6 @@ package ch.zhaw.projekt2.turnierverwaltung; import ch.zhaw.projekt2.turnierverwaltung.main.gameScheduleView.GameController; import ch.zhaw.projekt2.turnierverwaltung.main.gameScheduleView.GameDecorator; -import ch.zhaw.projekt2.turnierverwaltung.main.tournamentList.TournamentListController; import javafx.fxml.FXMLLoader; import javafx.geometry.Insets; import javafx.scene.control.Label; @@ -11,16 +10,15 @@ import javafx.scene.paint.Color; import javafx.scene.text.Font; import java.io.IOException; -import java.net.URL; public class Factory { private TournamentDecorator tournamentDecorator; private FileIO fileIO; - //TODO save views instead of recreate them. public Factory(FileIO fileIO, TournamentDecorator tournamentDecorator) { this.fileIO = fileIO; this.tournamentDecorator = tournamentDecorator; + } public TournamentDecorator getTournamentDecorator() { @@ -42,25 +40,43 @@ public class Factory { return null; } - public void loadTournamentList(BorderPane pane, FactoryDecorator factoryDecorator) { + public void loadAllViews(FactoryDecorator factoryDecorator, BorderPane pane){ + for(View view : View.values()){ + try { + view.loadView(tournamentDecorator, fileIO, factoryDecorator, pane); + } catch (IOException e) { + e.printStackTrace(); + //TODO Handle and logging. + } + } + } + + public void showTournamentList(BorderPane pane, FactoryDecorator factoryDecorator) { tournamentDecorator.setTournament(null); - TournamentListController controller = (TournamentListController) setCenterOfBorderPane(pane, getClass().getResource("tournamentList/tournamentList.fxml"), factoryDecorator); + setCenterOfBorderPane(pane, View.tournamentList); } //Can be used to Open new Scene in same Stage. //This way possible to later give object to Controller - public void loadParticipantFormular(BorderPane pane, FactoryDecorator factoryDecorator) { - setCenterOfBorderPane(pane, getClass().getResource("participantAddFormular/participantFormular.fxml"), factoryDecorator); + public void showParticipantFormular(BorderPane pane, FactoryDecorator factoryDecorator) { + setCenterOfBorderPane(pane, View.participantFormular); } - public void loadPlacesFormular(BorderPane pane, FactoryDecorator factoryDecorator) { - setCenterOfBorderPane(pane, getClass().getResource("placesAddFormular/PlacesFormular.fxml"), factoryDecorator); + public void showPlacesFormular(BorderPane pane, FactoryDecorator factoryDecorator) { + setCenterOfBorderPane(pane, View.placesFormular); } - public void loadGameScheduler(BorderPane pane, FactoryDecorator factoryDecorator) { - setCenterOfBorderPane(pane, getClass().getResource("gameScheduleView/GameSchedule.fxml"), factoryDecorator); + public void showGameScheduler(BorderPane pane, FactoryDecorator factoryDecorator) { + setCenterOfBorderPane(pane, View.gameScheduler); } + private void setCenterOfBorderPane(BorderPane pane, View view) { + FXController controller = null; + pane.setCenter(view.getPane()); + resetFooter(pane, true); + } + + public GameController loadGameView(VBox box, GameDecorator gameDecorator, FactoryDecorator factoryDecorator) { try { FXMLLoader loader = new FXMLLoader(getClass().getResource("gameScheduleView/Game.fxml")); @@ -75,23 +91,6 @@ public class Factory { return null; } - private FXController setCenterOfBorderPane(BorderPane pane, URL location, FactoryDecorator factoryDecorator) { - FXController controller = null; - try { - FXMLLoader loader = new FXMLLoader(location); - pane.setCenter(loader.load()); - controller = loader.getController(); - controller.setup(tournamentDecorator, fileIO, factoryDecorator, pane); - VBox bottom = (VBox) pane.getBottom(); - resetFooter(pane, true); - } catch (IOException e) { - e.printStackTrace(); - //TODO handle and logging? - } - return controller; - } - - public void printMessageToFooter(BorderPane pane, String msg, boolean error) { VBox bottom = (VBox) pane.getBottom(); Label label = new Label(); @@ -131,4 +130,30 @@ public class Factory { vBox.setBorder(null); } + public enum View { + tournamentList("tournamentList/tournamentList.fxml"), + participantFormular("participantAddFormular/participantFormular.fxml"), + placesFormular("placesAddFormular/PlacesFormular.fxml"), + gameScheduler("gameScheduleView/GameSchedule.fxml"); + + private String fxmlFileName; + private Pane pane; + + private View(String fxmlFileName) { + this.fxmlFileName = fxmlFileName; + } + + public Pane getPane() { + return pane; + } + + public void loadView(TournamentDecorator tournamentDecorator, FileIO fileIO, FactoryDecorator factoryDecorator, BorderPane borderPane) throws IOException { + FXMLLoader loader = new FXMLLoader(getClass().getResource(fxmlFileName)); + this.pane = loader.load(); + FXController controller = loader.getController(); + controller.setup(tournamentDecorator, fileIO, factoryDecorator, borderPane); + } + + } + } diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FactoryDecorator.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FactoryDecorator.java index 0026069..5ab8da7 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FactoryDecorator.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FactoryDecorator.java @@ -59,28 +59,32 @@ public class FactoryDecorator implements IsObservable{ } public void openTournamentList() { - factory.loadTournamentList((BorderPane) pane, this); + factory.showTournamentList((BorderPane) pane, this); informListener(); } public void openParticipantFormular() { - factory.loadParticipantFormular((BorderPane) pane, this); + factory.showParticipantFormular((BorderPane) pane, this); informListener(); } public void openPlacesFormular() { - factory.loadPlacesFormular((BorderPane) pane, this); + factory.showPlacesFormular((BorderPane) pane, this); informListener(); } public void openScheduleView() { - factory.loadGameScheduler((BorderPane) pane, this); + factory.showGameScheduler((BorderPane) pane, this); informListener(); } public void loadGameList(HBox hBoxCenter, TournamentDecorator tournamentDecorator, boolean treeView) { hBoxCenter.getChildren().clear(); + if(tournamentDecorator.getTournament() == null){ + return; + } + List> gameList = tournamentDecorator.getTournament().getGameList(); List gameDecoratorsList = new ArrayList<>(); diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/MainWindow.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/MainWindow.java index f97d970..a4cd74b 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/MainWindow.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/MainWindow.java @@ -22,6 +22,7 @@ public class MainWindow extends Application { BorderPane pane = factory.loadMainWindow(); factoryDecorator = new FactoryDecorator(fileIO, factory, pane); + factory.loadAllViews(factoryDecorator, pane); tournamentDecorator.setFactoryDecorator(factoryDecorator); factoryDecorator.openTournamentList(); diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/gameScheduleView/GameScheduleController.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/gameScheduleView/GameScheduleController.java index b81848d..3c8352e 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/gameScheduleView/GameScheduleController.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/gameScheduleView/GameScheduleController.java @@ -35,19 +35,16 @@ public class GameScheduleController extends FXController { @FXML void openPlacesFormular(ActionEvent event) { - removeListener(); getFactoryDecorator().openPlacesFormular(); } @FXML void openParticipantFormular(ActionEvent event) { - removeListener(); getFactoryDecorator().openParticipantFormular(); } @FXML void closeTournament(ActionEvent event) { - removeListener(); getFactoryDecorator().openTournamentList(); } diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/participantAddFormular/ParticipantFormularController.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/participantAddFormular/ParticipantFormularController.java index 49643e3..fec9af8 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/participantAddFormular/ParticipantFormularController.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/participantAddFormular/ParticipantFormularController.java @@ -3,6 +3,7 @@ package ch.zhaw.projekt2.turnierverwaltung.main.participantAddFormular; import ch.zhaw.projekt2.turnierverwaltung.FXController; import ch.zhaw.projekt2.turnierverwaltung.Participant; import ch.zhaw.projekt2.turnierverwaltung.Player; +import ch.zhaw.projekt2.turnierverwaltung.Tournament; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; @@ -97,12 +98,16 @@ public class ParticipantFormularController extends FXController { @FXML void close(ActionEvent event) { - removeListener(); getFactoryDecorator().openScheduleView(); } @Override public void loadContent() { - participantListView.setItems(getTournamentDecorator().getTournament().getParticipants()); + Tournament tournament = getTournamentDecorator().getTournament(); + if(tournament != null){ + participantListView.setItems(tournament.getParticipants()); + } else { + participantListView.getItems().clear(); + } } } diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/placesAddFormular/PlacesFormularController.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/placesAddFormular/PlacesFormularController.java index a8548f4..b2a031a 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/placesAddFormular/PlacesFormularController.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/placesAddFormular/PlacesFormularController.java @@ -3,6 +3,7 @@ package ch.zhaw.projekt2.turnierverwaltung.main.placesAddFormular; import ch.zhaw.projekt2.turnierverwaltung.FXController; import ch.zhaw.projekt2.turnierverwaltung.Place; import ch.zhaw.projekt2.turnierverwaltung.Player; +import ch.zhaw.projekt2.turnierverwaltung.Tournament; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; @@ -73,12 +74,16 @@ public class PlacesFormularController extends FXController { @FXML void close(ActionEvent event) { - removeListener(); getFactoryDecorator().openScheduleView(); } @Override public void loadContent() { - placeListView.setItems(getTournamentDecorator().getTournament().getPlaces()); + Tournament tournament = getTournamentDecorator().getTournament(); + if(tournament != null){ + placeListView.setItems(tournament.getPlaces()); + } else { + placeListView.getItems().clear(); + } } } diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/tournamentList/TournamentListController.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/tournamentList/TournamentListController.java index fbef5d2..ab26504 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/tournamentList/TournamentListController.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/tournamentList/TournamentListController.java @@ -62,7 +62,6 @@ public class TournamentListController extends FXController { @FXML void openTournament(ActionEvent event) { - removeListener(); FileIO.TournamentFile tournamentFile = tournamentListView.getSelectionModel().getSelectedItems().get(0); getFactoryDecorator().openTournament(tournamentFile); }