diff --git a/app/build.gradle b/app/build.gradle index e1f7b1b..dfbf65f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,8 +26,6 @@ dependencies { // Use JUnit Jupiter for testing. testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1' - testImplementation 'org.mockito:mockito-core:4.3.+' - // This dependency is used by the application. implementation 'com.google.guava:guava:30.1.1-jre' @@ -39,9 +37,7 @@ application { mainClass = 'ch.zhaw.projekt2.turnierverwaltung.App' } -test { +tasks.named('test') { // Use JUnit Platform for unit tests. useJUnitPlatform() - - } 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 c2c7a87..68a86b6 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FXController.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FXController.java @@ -37,6 +37,11 @@ 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 dec1687..53f9f12 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Factory.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Factory.java @@ -2,6 +2,7 @@ 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; @@ -10,15 +11,16 @@ 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() { @@ -40,43 +42,25 @@ public class Factory { return null; } - 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) { + public void loadTournamentList(BorderPane pane, FactoryDecorator factoryDecorator) { tournamentDecorator.setTournament(null); - setCenterOfBorderPane(pane, View.tournamentList); + TournamentListController controller = (TournamentListController) setCenterOfBorderPane(pane, getClass().getResource("tournamentList/tournamentList.fxml"), factoryDecorator); } //Can be used to Open new Scene in same Stage. //This way possible to later give object to Controller - public void showParticipantFormular(BorderPane pane, FactoryDecorator factoryDecorator) { - setCenterOfBorderPane(pane, View.participantFormular); + public void loadParticipantFormular(BorderPane pane, FactoryDecorator factoryDecorator) { + setCenterOfBorderPane(pane, getClass().getResource("participantAddFormular/participantFormular.fxml"), factoryDecorator); } - public void showPlacesFormular(BorderPane pane, FactoryDecorator factoryDecorator) { - setCenterOfBorderPane(pane, View.placesFormular); + public void loadPlacesFormular(BorderPane pane, FactoryDecorator factoryDecorator) { + setCenterOfBorderPane(pane, getClass().getResource("placesAddFormular/PlacesFormular.fxml"), factoryDecorator); } - public void showGameScheduler(BorderPane pane, FactoryDecorator factoryDecorator) { - setCenterOfBorderPane(pane, View.gameScheduler); + public void loadGameScheduler(BorderPane pane, FactoryDecorator factoryDecorator) { + setCenterOfBorderPane(pane, getClass().getResource("gameScheduleView/GameSchedule.fxml"), factoryDecorator); } - 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")); @@ -91,6 +75,23 @@ 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(); @@ -130,30 +131,4 @@ 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 5ab8da7..0026069 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FactoryDecorator.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FactoryDecorator.java @@ -59,32 +59,28 @@ public class FactoryDecorator implements IsObservable{ } public void openTournamentList() { - factory.showTournamentList((BorderPane) pane, this); + factory.loadTournamentList((BorderPane) pane, this); informListener(); } public void openParticipantFormular() { - factory.showParticipantFormular((BorderPane) pane, this); + factory.loadParticipantFormular((BorderPane) pane, this); informListener(); } public void openPlacesFormular() { - factory.showPlacesFormular((BorderPane) pane, this); + factory.loadPlacesFormular((BorderPane) pane, this); informListener(); } public void openScheduleView() { - factory.showGameScheduler((BorderPane) pane, this); + factory.loadGameScheduler((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/Game.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Game.java index 594d1b2..51bbded 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Game.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Game.java @@ -19,6 +19,14 @@ public class Game implements Serializable { this.previousGame2 = previousGame2; } + public Place getLocation() { + return place; + } + + public void setLocation(Place place) { + this.place = place; + } + public int getPoints1() { return points1; } diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Place.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Place.java index 3834101..f2e35bd 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Place.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Place.java @@ -29,8 +29,4 @@ public class Place implements Serializable { public boolean equals(Place place){ return name.equals(place.getName()); } - - public void change(Place place) { - //TODO: If Place gets more developed in future releases - } } diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Tournament.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Tournament.java index 276f201..e267156 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Tournament.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Tournament.java @@ -2,7 +2,6 @@ package ch.zhaw.projekt2.turnierverwaltung; import javafx.collections.FXCollections; import javafx.collections.ObservableList; - import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; @@ -108,12 +107,12 @@ public class Tournament implements Serializable { * Method to add a new Place, also checks if place does already exist. * * @param newPlace to be added in the list of all places + * @throws PlaceExistsException if the place already exists */ - public void savePlace(Place newPlace) { - for (Place place : places) { - if (place.equals(newPlace)) { - place.change(newPlace); - return; + public void addPlace(Place newPlace) throws PlaceExistsException { + for(Place place : places){ + if(place.getName().equals(newPlace.getName())){ + throw new PlaceExistsException("Place with same name exists already."); } } places.add(newPlace); @@ -233,7 +232,7 @@ public class Tournament implements Serializable { * @param type */ public void setType(Type type) { - logger.fine("Setting the type of the tournament to: " + type); + logger.fine("Setting the type of the tournament to: " + type); this.type = type; } @@ -252,7 +251,7 @@ public class Tournament implements Serializable { * (In the Prototype only the KO-System has full functionality */ public enum Type { - KO("KO-System"); //GROUPS("Gruppenspiele"); //Type GROUPS is not implemented in this prototype. + KO("KO-System"), GROUPS("Gruppenspiele"); private String name; @@ -300,6 +299,20 @@ public class Tournament implements Serializable { } + /** + * Custom Exception thrown when a Place does already exist + */ + public class PlaceExistsException extends Exception { + public PlaceExistsException() { + super(); + } + + public PlaceExistsException(String errorMessage) { + super(errorMessage); + } + + } + /** * Custom Exception thrown when a Place does not exist */ diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/TournamentDecorator.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/TournamentDecorator.java index 2e53ec6..55dc2d7 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/TournamentDecorator.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/TournamentDecorator.java @@ -8,7 +8,6 @@ import java.util.Date; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; public class TournamentDecorator implements IsObservable{ private Tournament tournament; @@ -28,7 +27,7 @@ public class TournamentDecorator implements IsObservable{ } } }); - executorService = Executors.newFixedThreadPool(1); + executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); } public void setFactoryDecorator(FactoryDecorator factoryDecorator) { @@ -85,7 +84,7 @@ public class TournamentDecorator implements IsObservable{ } catch (Tournament.InvalidTypeException e) { e.printStackTrace(); //TODO: Logger - factoryDecorator.printMessageToFooter("Turniermodus nicht moeglich",true); + factoryDecorator.printMessageToFooter("Turniermodus nicht möglich",true); } catch (IOException e) { e.printStackTrace(); @@ -113,7 +112,7 @@ public class TournamentDecorator implements IsObservable{ factoryDecorator.clearMessage(true); } catch (Tournament.NumberOfParticipantInvalidException e) { e.printStackTrace(); - factoryDecorator.printMessageToFooter("Anzahl Teilnehmer muss mindestens 4 betragen und eine Potenz von 2 sein.",true); + factoryDecorator.printMessageToFooter("Anzahl Teilnehmer nicht vielfaches von 2",true); } informListener(); } @@ -131,7 +130,7 @@ public class TournamentDecorator implements IsObservable{ factoryDecorator.printMessageToFooter("Invalide Telefonnummer",true); } catch (Player.InvalidDateException e) { e.printStackTrace(); - factoryDecorator.printMessageToFooter("Ungueltiges Geburtsdatum", true); + factoryDecorator.printMessageToFooter("Ungültiges Geburtsdatum", true); } } @@ -149,9 +148,13 @@ public class TournamentDecorator implements IsObservable{ public void savePlace(String name){ try { - tournament.savePlace(new Place(name)); + tournament.addPlace(new Place(name)); factoryDecorator.clearMessage(true); informListener(); + } catch (Tournament.PlaceExistsException e) { + e.printStackTrace(); //TODO handle and logging + factoryDecorator.printMessageToFooter("Ort existiert bereits",true); + } catch (InvalidNameException e) { e.printStackTrace(); //TODO handle and logging factoryDecorator.printMessageToFooter("Invalider Ortsname",true); @@ -176,11 +179,6 @@ public class TournamentDecorator implements IsObservable{ } } - public void closeApplication() throws InterruptedException { - executorService.shutdown(); - executorService.awaitTermination(2000, TimeUnit.MILLISECONDS); - } - private class saveTask implements Runnable { @Override 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 82d4c0a..f97d970 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 @@ -5,48 +5,34 @@ import ch.zhaw.projekt2.turnierverwaltung.FactoryDecorator; import ch.zhaw.projekt2.turnierverwaltung.FileIO; import ch.zhaw.projekt2.turnierverwaltung.TournamentDecorator; import javafx.application.Application; -import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; -import javafx.stage.WindowEvent; - -import java.util.logging.Logger; public class MainWindow extends Application { private FileIO fileIO = new FileIO(System.getProperty("user.dir") + System.getProperty("file.separator") + "tournierverwaltung_angrynerds"); private FactoryDecorator factoryDecorator; private TournamentDecorator tournamentDecorator = new TournamentDecorator(fileIO); - private Factory factory = new Factory(fileIO, tournamentDecorator); - private static final Logger logger = Logger.getLogger(FileIO.class.getCanonicalName()); + private Factory factory = new Factory(fileIO, tournamentDecorator); //TODO make it private! @Override public void start(Stage primaryStage) throws Exception { + BorderPane pane = factory.loadMainWindow(); factoryDecorator = new FactoryDecorator(fileIO, factory, pane); - factory.loadAllViews(factoryDecorator, pane); tournamentDecorator.setFactoryDecorator(factoryDecorator); factoryDecorator.openTournamentList(); + Scene scene = new Scene(pane); primaryStage.setScene(scene); - primaryStage.setMinHeight(600); - primaryStage.setMinWidth(800); primaryStage.setMaximized(true); primaryStage.setResizable(true); primaryStage.setFullScreen(false); primaryStage.show(); } - @Override - public void stop() { - try { - super.stop(); - tournamentDecorator.closeApplication(); - } catch (Exception e) { - logger.warning("Exception while closing application"); - } - } + } diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/MainWindowController.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/MainWindowController.java index ffb528b..ef5e1d6 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/MainWindowController.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/MainWindowController.java @@ -1,7 +1,6 @@ package ch.zhaw.projekt2.turnierverwaltung.main; import ch.zhaw.projekt2.turnierverwaltung.FXController; -import javafx.application.Platform; import javafx.event.ActionEvent; import javafx.fxml.FXML; @@ -14,7 +13,7 @@ public class MainWindowController extends FXController { @FXML void closeApplication(ActionEvent event) { - Platform.exit(); + } @Override diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/gameScheduleView/AlertNewSchedule.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/gameScheduleView/AlertNewSchedule.java deleted file mode 100644 index 17a823d..0000000 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/gameScheduleView/AlertNewSchedule.java +++ /dev/null @@ -1,26 +0,0 @@ -package ch.zhaw.projekt2.turnierverwaltung.main.gameScheduleView; - -import javafx.scene.control.Alert; -import javafx.scene.control.ButtonBar; -import javafx.scene.control.ButtonType; - -public class AlertNewSchedule extends Alert { - private ButtonType yesButton = new ButtonType("Ja", ButtonBar.ButtonData.YES); - private ButtonType noButton = new ButtonType("Nein", ButtonBar.ButtonData.NO); - private boolean result; - - public AlertNewSchedule() { - super(AlertType.WARNING); - setTitle("Neu erstellen"); - setHeaderText("Spielplan neu erstellen?"); - setContentText("Sind Sie sicher, dass Sie den Spielplan neu erstellen moechten?\nAlle Spielfortschritte gehen daraufhin verloren!"); - getButtonTypes().setAll(yesButton,noButton); - } - - public boolean showAndGetResult() { - showAndWait().ifPresent(input -> { - result = input == yesButton; - }); - return result; - } -} diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/gameScheduleView/GameController.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/gameScheduleView/GameController.java index 07f4de1..c8f5761 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/gameScheduleView/GameController.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/gameScheduleView/GameController.java @@ -74,7 +74,7 @@ public class GameController extends FXController{ public void setup(TournamentDecorator tournamentDecorator, FileIO fileIO, FactoryDecorator factoryDecorator, Pane pane, GameDecorator gameDecorator) { setTournamentDecorator(tournamentDecorator); this.gameDecorator = gameDecorator; - placesChoiceBox.getSelectionModel().selectedItemProperty().addListener((ObservableValue observable, Place oldValue, Place newValue) -> saveGamePlace(newValue == null ? oldValue : newValue)); + placesChoiceBox.getSelectionModel().selectedItemProperty().addListener((ObservableValue observable, Place oldValue, Place newValue) -> saveGamePlace(newValue)); } } \ No newline at end of file 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 f6e15a1..b81848d 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 @@ -1,6 +1,7 @@ package ch.zhaw.projekt2.turnierverwaltung.main.gameScheduleView; import ch.zhaw.projekt2.turnierverwaltung.FXController; +import ch.zhaw.projekt2.turnierverwaltung.Tournament; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.scene.control.Button; @@ -29,28 +30,24 @@ public class GameScheduleController extends FXController { @FXML void createNewSchedule(ActionEvent event) { - if (getTournamentDecorator().getTournament().getGameList().size() > 0) { - AlertNewSchedule alert = new AlertNewSchedule(); - if (alert.showAndGetResult()) { - getTournamentDecorator().createNewGameSchedule(); - } - } else { - getTournamentDecorator().createNewGameSchedule(); - } + getTournamentDecorator().createNewGameSchedule(); } @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 fec9af8..49643e3 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,7 +3,6 @@ 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; @@ -98,16 +97,12 @@ public class ParticipantFormularController extends FXController { @FXML void close(ActionEvent event) { + removeListener(); getFactoryDecorator().openScheduleView(); } @Override public void loadContent() { - Tournament tournament = getTournamentDecorator().getTournament(); - if(tournament != null){ - participantListView.setItems(tournament.getParticipants()); - } else { - participantListView.getItems().clear(); - } + participantListView.setItems(getTournamentDecorator().getTournament().getParticipants()); } } 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 b2a031a..a8548f4 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,7 +3,6 @@ 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; @@ -74,16 +73,12 @@ public class PlacesFormularController extends FXController { @FXML void close(ActionEvent event) { + removeListener(); getFactoryDecorator().openScheduleView(); } @Override public void loadContent() { - Tournament tournament = getTournamentDecorator().getTournament(); - if(tournament != null){ - placeListView.setItems(tournament.getPlaces()); - } else { - placeListView.getItems().clear(); - } + placeListView.setItems(getTournamentDecorator().getTournament().getPlaces()); } } diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/tournamentList/AlertDelete.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/tournamentList/AlertDelete.java index 8aada10..6c400dd 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/tournamentList/AlertDelete.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/main/tournamentList/AlertDelete.java @@ -21,7 +21,9 @@ public class AlertDelete extends Alert { public boolean showAndGetResult() { result = false; showAndWait().ifPresent(type -> { - result = type == yesButton; + if (type == yesButton) { + result = true; + } }); return result; } 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 ab26504..fbef5d2 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,6 +62,7 @@ public class TournamentListController extends FXController { @FXML void openTournament(ActionEvent event) { + removeListener(); FileIO.TournamentFile tournamentFile = tournamentListView.getSelectionModel().getSelectedItems().get(0); getFactoryDecorator().openTournament(tournamentFile); } diff --git a/app/src/main/resources/ch/zhaw/projekt2/turnierverwaltung/gameScheduleView/GameSchedule.fxml b/app/src/main/resources/ch/zhaw/projekt2/turnierverwaltung/gameScheduleView/GameSchedule.fxml index 8fe7bac..f3f9207 100644 --- a/app/src/main/resources/ch/zhaw/projekt2/turnierverwaltung/gameScheduleView/GameSchedule.fxml +++ b/app/src/main/resources/ch/zhaw/projekt2/turnierverwaltung/gameScheduleView/GameSchedule.fxml @@ -1,29 +1,15 @@ - - - - - - + + + - -
- - - - - -
+ - + - - - - - - - + +
+ + + + + +
diff --git a/app/src/test/java/ch/zhaw/projekt2/turnierverwaltung/TournamentTest.java b/app/src/test/java/ch/zhaw/projekt2/turnierverwaltung/TournamentTest.java deleted file mode 100644 index 3acc30c..0000000 --- a/app/src/test/java/ch/zhaw/projekt2/turnierverwaltung/TournamentTest.java +++ /dev/null @@ -1,147 +0,0 @@ -package ch.zhaw.projekt2.turnierverwaltung; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Nested; -import org.junit.jupiter.api.Test; -import org.mockito.Mockito; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -@DisplayName("TournamentTest") -public class TournamentTest { - - @Nested - @DisplayName("KOMode") - public class KOMode { - private Tournament tournament; - - @BeforeEach - void setup() { - try { - tournament = new Tournament("Name", Tournament.Type.KO); - } catch (InvalidNameException e) { - e.printStackTrace(); - fail(); - } catch (Tournament.InvalidTypeException e) { - e.printStackTrace(); - fail(); - } - } - - @Test - @DisplayName("Test invalid instance") - void makeInvalidInstance() { - assertThrows(InvalidNameException.class, () -> new Tournament(".", Tournament.Type.KO)); - } - - @Test - @DisplayName("Save Participant") - void saveParticipantTest() { - //Checks if one Participant gets added - Participant participantOne = Mockito.mock(Player.class); - when(participantOne.equals(any(Participant.class))).thenReturn(false); - - assertEquals(0, tournament.getParticipants().size()); - tournament.saveParticipant(participantOne); - assertEquals(1, tournament.getParticipants().size()); - - //Checks if a second Participant gets added - Participant participantTwo = Mockito.mock(Player.class); - tournament.saveParticipant(participantTwo); - assertEquals(2, tournament.getParticipants().size()); - - //Checks if a allready added Particpant does not get added - when(participantOne.equals(any(Participant.class))).thenReturn(true); - tournament.saveParticipant(participantTwo); - assertEquals(2, tournament.getParticipants().size()); - - } - - @Test - @DisplayName("Remove Participant") - void removeParticipantTest() { - Participant participant = Mockito.mock(Player.class); - - //Checks if Error is thrown if Participant not in list - assertThrows(Tournament.ParticipantNotExistsException.class, () -> tournament.removeParticipant(participant)); - - //Checks if participant gets removed - tournament.saveParticipant(participant); - assertEquals(1, tournament.getParticipants().size()); - try { - tournament.removeParticipant(participant); - assertEquals(0, tournament.getParticipants().size()); - } catch (Tournament.ParticipantNotExistsException e) { - fail(); - } - } - - @Test - @DisplayName("Add Place") - void addPlaceTest() { - Place place = mock(Place.class); - when(place.equals(any(Place.class))).thenReturn(false).thenReturn(true); - - assertEquals(0, tournament.getPlaces().size()); - tournament.savePlace(place); - assertEquals(1, tournament.getPlaces().size()); - tournament.savePlace(place); - assertEquals(2, tournament.getPlaces().size()); - tournament.savePlace(place); - assertEquals(2, tournament.getPlaces().size()); - } - - @Test - @DisplayName("Remove Place") - void removePlaceTest() { - Place place = mock(Place.class); - - assertThrows(Tournament.PlaceNotExistsException.class, () -> tournament.removePlace(place)); - - tournament.savePlace(place); - assertEquals(1, tournament.getPlaces().size()); - try { - tournament.removePlace(place); - assertEquals(0, tournament.getPlaces().size()); - } catch (Tournament.PlaceNotExistsException e) { - fail(); - } - } - - @Test - @DisplayName("Test gameschedule calculation") - void calcGameSchedule() { - Participant participant = mock(Player.class); - when(participant.equals(any(Participant.class))).thenReturn(false); - - //Checks if invalid number of Participants throws error - assertThrows(Tournament.NumberOfParticipantInvalidException.class, () -> tournament.createGameSchedule()); - for (int i = 0; i < 8; i++) { - if (i % 4 == 0 && i > 0) { - try { - tournament.createGameSchedule(); - assertEquals(2, tournament.getGameList().size()); - tournament.saveParticipant(participant); - } catch (Tournament.NumberOfParticipantInvalidException e) { - fail(); - } - - } else { - assertThrows(Tournament.NumberOfParticipantInvalidException.class, () -> tournament.createGameSchedule()); - tournament.saveParticipant(participant); - } - } - try { - tournament.createGameSchedule(); - } catch (Tournament.NumberOfParticipantInvalidException e) { - fail(); - } - assertEquals(3, tournament.getGameList().size()); - } - - } -}