Merge pull request #53 from PM2-IT21bWIN-ruiz-mach-krea/logging_and_docs
Logging and docs added in several classes #27 #28
This commit is contained in:
		
						commit
						caa21c8aa0
					
				| 
						 | 
					@ -11,9 +11,11 @@ import java.io.IOException;
 | 
				
			||||||
public class App {
 | 
					public class App {
 | 
				
			||||||
    public static void main(String[] args) {
 | 
					    public static void main(String[] args) {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            new LogConfiguration(System.getProperty("user.dir") + System.getProperty("file.separator") + "tournierverwaltung_angrynerds",
 | 
					            new LogConfiguration(System.getProperty("user.dir") + System.getProperty("file.separator") +
 | 
				
			||||||
                    "ch" + System.getProperty("file.separator") + "zhaw" + System.getProperty("file.separator") + "projekt2" + System.getProperty("file.separator") +
 | 
					                    "tournierverwaltung_angrynerds", "ch" + System.getProperty("file.separator") + "zhaw" +
 | 
				
			||||||
                    "turnierverwaltung" + System.getProperty("file.separator") + "logging" + System.getProperty("file.separator") + "log.properties");
 | 
					                    System.getProperty("file.separator") + "projekt2" + System.getProperty("file.separator") +
 | 
				
			||||||
 | 
					                    "turnierverwaltung" + System.getProperty("file.separator") + "logging" +
 | 
				
			||||||
 | 
					                    System.getProperty("file.separator") + "log.properties");
 | 
				
			||||||
        } catch (IOException e) {
 | 
					        } catch (IOException e) {
 | 
				
			||||||
            throw new RuntimeException(e);
 | 
					            throw new RuntimeException(e);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,26 +10,41 @@ import javafx.scene.paint.Color;
 | 
				
			||||||
import javafx.scene.text.Font;
 | 
					import javafx.scene.text.Font;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Class to load the views from FXML Files and switch between the views.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
public class Factory {
 | 
					public class Factory {
 | 
				
			||||||
    private TournamentDecorator tournamentDecorator;
 | 
					    private TournamentDecorator tournamentDecorator;
 | 
				
			||||||
    private FileIO fileIO;
 | 
					    private FileIO fileIO;
 | 
				
			||||||
    private static LanguageConfigurator languageConfigurator;
 | 
					    private static LanguageConfigurator languageConfigurator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static final Logger logger = Logger.getLogger(Factory.class.getCanonicalName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Contructor to create Factory instance.
 | 
				
			||||||
 | 
					     * @param fileIO the fileIO instance which saves and reads the tournament from files.
 | 
				
			||||||
 | 
					     * @param tournamentDecorator the touramanetDecorator class to access the tournament.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public Factory(FileIO fileIO, TournamentDecorator tournamentDecorator, LanguageConfigurator languageConfigurator) {
 | 
					    public Factory(FileIO fileIO, TournamentDecorator tournamentDecorator, LanguageConfigurator languageConfigurator) {
 | 
				
			||||||
        this.fileIO = fileIO;
 | 
					        this.fileIO = fileIO;
 | 
				
			||||||
        this.tournamentDecorator = tournamentDecorator;
 | 
					        this.tournamentDecorator = tournamentDecorator;
 | 
				
			||||||
        this.languageConfigurator = languageConfigurator;
 | 
					        this.languageConfigurator = languageConfigurator;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public TournamentDecorator getTournamentDecorator() {
 | 
					    /**
 | 
				
			||||||
        return tournamentDecorator;
 | 
					     * Setter Method of tournament
 | 
				
			||||||
    }
 | 
					     * @param tournament the new tournament Object.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void setTournament(Tournament tournament) {
 | 
					    public void setTournament(Tournament tournament) {
 | 
				
			||||||
        this.tournamentDecorator.setTournament(tournament);
 | 
					        this.tournamentDecorator.setTournament(tournament);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to load the main Window (without the content in the center)
 | 
				
			||||||
 | 
					     * @return the boarder Pane which is loaded.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public BorderPane loadMainWindow() {
 | 
					    public BorderPane loadMainWindow() {
 | 
				
			||||||
        FXMLLoader loader = new FXMLLoader(getClass().getResource("MainWindow.fxml"));
 | 
					        FXMLLoader loader = new FXMLLoader(getClass().getResource("MainWindow.fxml"));
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
| 
						 | 
					@ -38,12 +53,17 @@ public class Factory {
 | 
				
			||||||
            controller.setup(languageConfigurator);
 | 
					            controller.setup(languageConfigurator);
 | 
				
			||||||
            return pane;
 | 
					            return pane;
 | 
				
			||||||
        } catch (IOException e) {
 | 
					        } catch (IOException e) {
 | 
				
			||||||
 | 
					            logger.warning("Fatal error program can not continue after this: " + e );
 | 
				
			||||||
            e.printStackTrace();
 | 
					            e.printStackTrace();
 | 
				
			||||||
            //TODO handle and logging
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return null;
 | 
					        return null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Class which loads all views of Enum View
 | 
				
			||||||
 | 
					     * @param factoryDecorator the FactoryDecorator which is used to setup the controller.
 | 
				
			||||||
 | 
					     * @param pane the pane where the loaded view will be visible
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void loadAllViews(FactoryDecorator factoryDecorator, BorderPane pane){
 | 
					    public void loadAllViews(FactoryDecorator factoryDecorator, BorderPane pane){
 | 
				
			||||||
        for(View view : View.values()){
 | 
					        for(View view : View.values()){
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
| 
						 | 
					@ -55,32 +75,57 @@ public class Factory {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void showTournamentList(BorderPane pane, FactoryDecorator factoryDecorator) {
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to show the view TournamentList
 | 
				
			||||||
 | 
					     * @param pane the Pane where the View will be visible
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void showTournamentList(BorderPane pane) {
 | 
				
			||||||
        tournamentDecorator.setTournament(null);
 | 
					        tournamentDecorator.setTournament(null);
 | 
				
			||||||
        setCenterOfBorderPane(pane, View.tournamentList);
 | 
					        setCenterOfBorderPane(pane, View.tournamentList);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    //Can be used to Open new Scene in same Stage.
 | 
					    /**
 | 
				
			||||||
    //This way possible to later give object to Controller
 | 
					     * Method to show the view ParticipantFormular
 | 
				
			||||||
    public void showParticipantFormular(BorderPane pane, FactoryDecorator factoryDecorator) {
 | 
					     * @param pane the Pane where the View will be visible
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void showParticipantFormular(BorderPane pane) {
 | 
				
			||||||
        setCenterOfBorderPane(pane, View.participantFormular);
 | 
					        setCenterOfBorderPane(pane, View.participantFormular);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void showPlacesFormular(BorderPane pane, FactoryDecorator factoryDecorator) {
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to show the view PlacesFormular
 | 
				
			||||||
 | 
					     * @param pane the Pane where the View will be visible
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void showPlacesFormular(BorderPane pane) {
 | 
				
			||||||
        setCenterOfBorderPane(pane, View.placesFormular);
 | 
					        setCenterOfBorderPane(pane, View.placesFormular);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void showGameScheduler(BorderPane pane, FactoryDecorator factoryDecorator) {
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to show the view GameScheduler
 | 
				
			||||||
 | 
					     * @param pane the Pane where the View will be visible
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void showGameScheduler(BorderPane pane) {
 | 
				
			||||||
        setCenterOfBorderPane(pane, View.gameScheduler);
 | 
					        setCenterOfBorderPane(pane, View.gameScheduler);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to change the view in the center of the boarder pane in the mainWindow
 | 
				
			||||||
 | 
					     * @param pane the Pane where the View will be visible
 | 
				
			||||||
 | 
					     * @param view the view which should be visible
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    private void setCenterOfBorderPane(BorderPane pane, View view) {
 | 
					    private void setCenterOfBorderPane(BorderPane pane, View view) {
 | 
				
			||||||
        FXController controller = null;
 | 
					        FXController controller = null;
 | 
				
			||||||
        pane.setCenter(view.getPane());
 | 
					        pane.setCenter(view.getPane());
 | 
				
			||||||
        resetFooter(pane, true);
 | 
					        resetFooter(pane, true);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to load a Game View
 | 
				
			||||||
 | 
					     * @param box the box where the game view should be added.
 | 
				
			||||||
 | 
					     * @param gameDecorator the gameDecorator instance of the game.
 | 
				
			||||||
 | 
					     * @param factoryDecorator the factoryDecorator instance.
 | 
				
			||||||
 | 
					     * @return the controller of the GameView
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public GameController loadGameView(VBox box, GameDecorator gameDecorator, FactoryDecorator factoryDecorator) {
 | 
					    public GameController loadGameView(VBox box, GameDecorator gameDecorator, FactoryDecorator factoryDecorator) {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            FXMLLoader loader = new FXMLLoader(getClass().getResource("gameScheduleView/Game.fxml"));
 | 
					            FXMLLoader loader = new FXMLLoader(getClass().getResource("gameScheduleView/Game.fxml"));
 | 
				
			||||||
| 
						 | 
					@ -89,12 +134,18 @@ public class Factory {
 | 
				
			||||||
            controller.setup(tournamentDecorator, fileIO, factoryDecorator, box, gameDecorator, languageConfigurator);
 | 
					            controller.setup(tournamentDecorator, fileIO, factoryDecorator, box, gameDecorator, languageConfigurator);
 | 
				
			||||||
            return controller;
 | 
					            return controller;
 | 
				
			||||||
        } catch (IOException e) {
 | 
					        } catch (IOException e) {
 | 
				
			||||||
 | 
					            logger.warning("Fatal error program can not continue after this: " + e );
 | 
				
			||||||
            e.printStackTrace();
 | 
					            e.printStackTrace();
 | 
				
			||||||
            //TODO LOGGER
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return null;
 | 
					        return null;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to print information for the user to the footer of mainwindow.
 | 
				
			||||||
 | 
					     * @param pane the pane where the footer should be shown.
 | 
				
			||||||
 | 
					     * @param msg the text to show.
 | 
				
			||||||
 | 
					     * @param error true if it's a error message.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void printMessageToFooter(BorderPane pane, String msg, boolean error) {
 | 
					    public void printMessageToFooter(BorderPane pane, String msg, boolean error) {
 | 
				
			||||||
        VBox bottom = (VBox) pane.getBottom();
 | 
					        VBox bottom = (VBox) pane.getBottom();
 | 
				
			||||||
        Label label = new Label();
 | 
					        Label label = new Label();
 | 
				
			||||||
| 
						 | 
					@ -122,6 +173,11 @@ public class Factory {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to remove the messages in the footer.
 | 
				
			||||||
 | 
					     * @param pane the pane were the footer should be reseted
 | 
				
			||||||
 | 
					     * @param error true if the error message should be cleared.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void resetFooter(BorderPane pane,boolean error) {
 | 
					    public void resetFooter(BorderPane pane,boolean error) {
 | 
				
			||||||
        VBox bottom = (VBox) pane.getBottom();
 | 
					        VBox bottom = (VBox) pane.getBottom();
 | 
				
			||||||
        VBox vBox;
 | 
					        VBox vBox;
 | 
				
			||||||
| 
						 | 
					@ -134,10 +190,14 @@ public class Factory {
 | 
				
			||||||
        vBox.setBorder(null);
 | 
					        vBox.setBorder(null);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public LanguageConfigurator getLanguageConfigurator() {
 | 
					    public LanguageConfigurator getLanguageConfigurator() {
 | 
				
			||||||
        return languageConfigurator;
 | 
					        return languageConfigurator;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      /**
 | 
				
			||||||
 | 
					     * Enum of all views which can be set to the center of the mainwindow.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public enum View {
 | 
					    public enum View {
 | 
				
			||||||
        tournamentList("tournamentList/tournamentList.fxml"),
 | 
					        tournamentList("tournamentList/tournamentList.fxml"),
 | 
				
			||||||
        participantFormular("participantAddFormular/participantFormular.fxml"),
 | 
					        participantFormular("participantAddFormular/participantFormular.fxml"),
 | 
				
			||||||
| 
						 | 
					@ -147,6 +207,10 @@ public class Factory {
 | 
				
			||||||
        private String fxmlFileName;
 | 
					        private String fxmlFileName;
 | 
				
			||||||
        private Pane pane;
 | 
					        private Pane pane;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Constructor of View
 | 
				
			||||||
 | 
					         * @param fxmlFileName The name of the FXML File to load.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        private View(String fxmlFileName) {
 | 
					        private View(String fxmlFileName) {
 | 
				
			||||||
            this.fxmlFileName = fxmlFileName;
 | 
					            this.fxmlFileName = fxmlFileName;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -155,6 +219,14 @@ public class Factory {
 | 
				
			||||||
            return pane;
 | 
					            return pane;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Method to laod the view
 | 
				
			||||||
 | 
					         * @param tournamentDecorator the tournamentDecorator object which will be passed to the controller.
 | 
				
			||||||
 | 
					         * @param fileIO the fileIO object which will be passed to the controller.
 | 
				
			||||||
 | 
					         * @param factoryDecorator the factoryDecorator object which will be passed to the controller.
 | 
				
			||||||
 | 
					         * @param borderPane the borderPane object which will be passed to the controller.
 | 
				
			||||||
 | 
					         * @throws IOException if the fxml file is not found or can not be loaded correctly.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        public void loadView(TournamentDecorator tournamentDecorator, FileIO fileIO, FactoryDecorator factoryDecorator, BorderPane borderPane) throws IOException {
 | 
					        public void loadView(TournamentDecorator tournamentDecorator, FileIO fileIO, FactoryDecorator factoryDecorator, BorderPane borderPane) throws IOException {
 | 
				
			||||||
            FXMLLoader loader = new FXMLLoader(getClass().getResource(fxmlFileName));
 | 
					            FXMLLoader loader = new FXMLLoader(getClass().getResource(fxmlFileName));
 | 
				
			||||||
            this.pane = loader.load();
 | 
					            this.pane = loader.load();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,77 +12,143 @@ import javafx.scene.shape.Line;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class FactoryDecorator implements IsObservable{
 | 
					/**
 | 
				
			||||||
 | 
					 * Factory Decorator Class giving additional functionality to the factory and holding the listeners in itself.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public class FactoryDecorator implements IsObservable {
 | 
				
			||||||
    private Factory factory;
 | 
					    private Factory factory;
 | 
				
			||||||
    private FileIO fileIO;
 | 
					    private FileIO fileIO;
 | 
				
			||||||
    private Pane pane;
 | 
					    private Pane pane;
 | 
				
			||||||
    private List<IsObserver> listener = new ArrayList<>();
 | 
					    private final List<IsObserver> listener = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public FactoryDecorator(FileIO fileIO, Factory factory, Pane pane){
 | 
					    private static final Logger logger = Logger.getLogger(FactoryDecorator.class.getCanonicalName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Setup of Factory Decorator with needed classes
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param fileIO  for Reading and Saving Files
 | 
				
			||||||
 | 
					     * @param factory factory which this class adds additional functionality to
 | 
				
			||||||
 | 
					     * @param pane    standard pane
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public FactoryDecorator(FileIO fileIO, Factory factory, Pane pane) {
 | 
				
			||||||
 | 
					        logger.fine("Setting up the Factory decorator");
 | 
				
			||||||
        setFactory(factory);
 | 
					        setFactory(factory);
 | 
				
			||||||
        setFileIO(fileIO);
 | 
					        setFileIO(fileIO);
 | 
				
			||||||
        setPane(pane);
 | 
					        setPane(pane);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Setting the File IO Class for its functionality
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param fileIO for reading and saving to and from a file
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void setFileIO(FileIO fileIO) {
 | 
					    public void setFileIO(FileIO fileIO) {
 | 
				
			||||||
 | 
					        logger.finer("Setting the FileIO to the FactoryDecorator");
 | 
				
			||||||
        this.fileIO = fileIO;
 | 
					        this.fileIO = fileIO;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Setting the main class
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param factory needed for the main functionality
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void setFactory(Factory factory) {
 | 
					    public void setFactory(Factory factory) {
 | 
				
			||||||
 | 
					        logger.finer("Setting the factory to the FactoryDecorator");
 | 
				
			||||||
        this.factory = factory;
 | 
					        this.factory = factory;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Setting of the given pane to the factory decorator
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param pane that will be set
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void setPane(Pane pane) {
 | 
					    public void setPane(Pane pane) {
 | 
				
			||||||
 | 
					        logger.finer("Setting the pane to the FactoryDecorator");
 | 
				
			||||||
        this.pane = pane;
 | 
					        this.pane = pane;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method adds a new Listener to the listener list
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param observer that is being added to the Listener List
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void addListener(IsObserver observer) {
 | 
					    public void addListener(IsObserver observer) {
 | 
				
			||||||
 | 
					        logger.fine("Adding Listener: " + observer);
 | 
				
			||||||
        listener.add(observer);
 | 
					        listener.add(observer);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Removes a Listener from the Listener List
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param observer the Listener to be removed
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void removeListener(IsObserver observer) {
 | 
					    public void removeListener(IsObserver observer) {
 | 
				
			||||||
 | 
					        logger.fine("Removing Listener: " + observer);
 | 
				
			||||||
        listener.remove(observer);
 | 
					        listener.remove(observer);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void openTournament(FileIO.TournamentFile tournamentFile){
 | 
					    /**
 | 
				
			||||||
 | 
					     * Opens a tournament File in connection with the File IO Class, shows error Message if error occurs while opening
 | 
				
			||||||
 | 
					     * it.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param tournamentFile the File to be opened
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void openTournament(FileIO.TournamentFile tournamentFile) {
 | 
				
			||||||
 | 
					        logger.finer("Trying to open tournament file:" + tournamentFile);
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
            factory.setTournament(fileIO.loadTournament(tournamentFile));
 | 
					            factory.setTournament(fileIO.loadTournament(tournamentFile));
 | 
				
			||||||
            openScheduleView();
 | 
					            openScheduleView();
 | 
				
			||||||
            clearMessage(false);
 | 
					            clearMessage(false);
 | 
				
			||||||
 | 
					            logger.fine("Opened tournament file successfully");
 | 
				
			||||||
        } catch (IOException | ClassNotFoundException e) {
 | 
					        } catch (IOException | ClassNotFoundException e) {
 | 
				
			||||||
            e.printStackTrace();
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					            logger.warning("Failed to open tournament file Error: " + e);
 | 
				
			||||||
 | 
					            printMessageToFooter("Fehler beim lesen der Datei.", true);
 | 
				
			||||||
            String msg = factory.getLanguageConfigurator().getSelectedLanguage("IOException");
 | 
					            String msg = factory.getLanguageConfigurator().getSelectedLanguage("IOException");
 | 
				
			||||||
            printMessageToFooter(msg, true);
 | 
					            printMessageToFooter(msg, true);
 | 
				
			||||||
        }  //TODO handle and logging
 | 
					        }  //TODO handle and logging
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Initializes the display of the Tournament list view
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void openTournamentList() {
 | 
					    public void openTournamentList() {
 | 
				
			||||||
        factory.showTournamentList((BorderPane) pane, this);
 | 
					        logger.fine("Showing TournamentList view");
 | 
				
			||||||
 | 
					        factory.showTournamentList((BorderPane) pane);
 | 
				
			||||||
        informListener();
 | 
					        informListener();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void openParticipantFormular() {
 | 
					    /**
 | 
				
			||||||
        factory.showParticipantFormular((BorderPane) pane, this);
 | 
					     * Initializes the view of the participant form
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void openParticipantForm() {
 | 
				
			||||||
 | 
					        logger.fine("Showing participant form view");
 | 
				
			||||||
 | 
					        factory.showParticipantFormular((BorderPane) pane);
 | 
				
			||||||
        informListener();
 | 
					        informListener();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void openPlacesFormular() {
 | 
					    /**
 | 
				
			||||||
        factory.showPlacesFormular((BorderPane) pane, this);
 | 
					     * Initializes the view of the places form
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void openPlacesForm() {
 | 
				
			||||||
 | 
					        logger.fine("Showing places form view");
 | 
				
			||||||
 | 
					        factory.showPlacesFormular((BorderPane) pane);
 | 
				
			||||||
        informListener();
 | 
					        informListener();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void openScheduleView() {
 | 
					    public void openScheduleView() {
 | 
				
			||||||
        factory.showGameScheduler((BorderPane) pane, this);
 | 
					        factory.showGameScheduler((BorderPane) pane);
 | 
				
			||||||
        informListener();
 | 
					        informListener();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void loadGameList(HBox hBoxCenter, TournamentDecorator tournamentDecorator, boolean treeView) {
 | 
					    public void loadGameList(HBox hBoxCenter, TournamentDecorator tournamentDecorator, boolean treeView) {
 | 
				
			||||||
        hBoxCenter.getChildren().clear();
 | 
					        hBoxCenter.getChildren().clear();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if(tournamentDecorator.getTournament() == null){
 | 
					        if (tournamentDecorator.getTournament() == null) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -94,7 +160,7 @@ public class FactoryDecorator implements IsObservable{
 | 
				
			||||||
        for (int i = 0; i < gameList.size(); i++) {
 | 
					        for (int i = 0; i < gameList.size(); i++) {
 | 
				
			||||||
            List<GameDecorator> newGameDecoratorsList = new ArrayList<>();
 | 
					            List<GameDecorator> newGameDecoratorsList = new ArrayList<>();
 | 
				
			||||||
            VBox vBox = new VBox();
 | 
					            VBox vBox = new VBox();
 | 
				
			||||||
            if(treeView){
 | 
					            if (treeView) {
 | 
				
			||||||
                vBox.setAlignment(Pos.CENTER);
 | 
					                vBox.setAlignment(Pos.CENTER);
 | 
				
			||||||
                vBox.setSpacing(gameBoxHeight * spacingFactor);
 | 
					                vBox.setSpacing(gameBoxHeight * spacingFactor);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
| 
						 | 
					@ -104,12 +170,12 @@ public class FactoryDecorator implements IsObservable{
 | 
				
			||||||
            for (int j = 0; j < gameList.get(i).size(); j++) {
 | 
					            for (int j = 0; j < gameList.get(i).size(); j++) {
 | 
				
			||||||
                GameDecorator gameDecorator = new GameDecorator(gameList.get(i).get(j));
 | 
					                GameDecorator gameDecorator = new GameDecorator(gameList.get(i).get(j));
 | 
				
			||||||
                newGameDecoratorsList.add(gameDecorator);
 | 
					                newGameDecoratorsList.add(gameDecorator);
 | 
				
			||||||
                GameController gameController = openGameView(vBox,gameDecorator);
 | 
					                GameController gameController = openGameView(vBox, gameDecorator);
 | 
				
			||||||
                if(i>0){
 | 
					                if (i > 0) {
 | 
				
			||||||
                    gameController.addListener(gameDecoratorsList.get(j*2));
 | 
					                    gameController.addListener(gameDecoratorsList.get(j * 2));
 | 
				
			||||||
                    gameController.addListener(gameDecoratorsList.get(j*2+1));
 | 
					                    gameController.addListener(gameDecoratorsList.get(j * 2 + 1));
 | 
				
			||||||
                } else if(gameBoxHeight == 0) {
 | 
					                } else if (gameBoxHeight == 0) {
 | 
				
			||||||
                    gameBoxHeight = gameController.getGameBoxHeigth();
 | 
					                    gameBoxHeight = gameController.getGameBoxHeight();
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                gameDecorator.addListener(new IsObserver() {
 | 
					                gameDecorator.addListener(new IsObserver() {
 | 
				
			||||||
                    @Override
 | 
					                    @Override
 | 
				
			||||||
| 
						 | 
					@ -120,28 +186,28 @@ public class FactoryDecorator implements IsObservable{
 | 
				
			||||||
                gameController.loadContent();
 | 
					                gameController.loadContent();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            hBoxCenter.getChildren().add(vBox);
 | 
					            hBoxCenter.getChildren().add(vBox);
 | 
				
			||||||
            if(treeView){
 | 
					            if (treeView) {
 | 
				
			||||||
                if(i+1 < gameList.size())
 | 
					                if (i + 1 < gameList.size())
 | 
				
			||||||
                    hBoxCenter.getChildren().add(drawLines(vBox, gameBoxHeight, 30));
 | 
					                    hBoxCenter.getChildren().add(drawLines(vBox, gameBoxHeight, 30));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            gameDecoratorsList = newGameDecoratorsList;
 | 
					            gameDecoratorsList = newGameDecoratorsList;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public VBox drawLines(VBox gameVBox, double gameBoxHeight, double lineLength){
 | 
					    public VBox drawLines(VBox gameVBox, double gameBoxHeight, double lineLength) {
 | 
				
			||||||
        VBox completeLineVBox = new VBox();
 | 
					        VBox completeLineVBox = new VBox();
 | 
				
			||||||
        completeLineVBox.setAlignment(Pos.CENTER_LEFT);
 | 
					        completeLineVBox.setAlignment(Pos.CENTER_LEFT);
 | 
				
			||||||
        double lineSpacing = gameVBox.getSpacing() + gameBoxHeight - 1;
 | 
					        double lineSpacing = gameVBox.getSpacing() + gameBoxHeight - 1;
 | 
				
			||||||
        completeLineVBox.setSpacing(lineSpacing);
 | 
					        completeLineVBox.setSpacing(lineSpacing);
 | 
				
			||||||
        for(int i = 0; i < gameVBox.getChildren().size(); i+=2){
 | 
					        for (int i = 0; i < gameVBox.getChildren().size(); i += 2) {
 | 
				
			||||||
            HBox lineBox = new HBox();
 | 
					            HBox lineBox = new HBox();
 | 
				
			||||||
            lineBox.setAlignment(Pos.CENTER);
 | 
					            lineBox.setAlignment(Pos.CENTER);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            //add Lines from left Game to center
 | 
					            //add Lines from left Game to center
 | 
				
			||||||
            VBox vBox = new VBox();
 | 
					            VBox vBox = new VBox();
 | 
				
			||||||
            vBox.setSpacing(lineSpacing);
 | 
					            vBox.setSpacing(lineSpacing);
 | 
				
			||||||
            vBox.getChildren().add(new Line(0,0,lineLength,0));
 | 
					            vBox.getChildren().add(new Line(0, 0, lineLength, 0));
 | 
				
			||||||
            vBox.getChildren().add(new Line(0,0,lineLength,0));
 | 
					            vBox.getChildren().add(new Line(0, 0, lineLength, 0));
 | 
				
			||||||
            lineBox.getChildren().add(vBox);
 | 
					            lineBox.getChildren().add(vBox);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -158,24 +224,50 @@ public class FactoryDecorator implements IsObservable{
 | 
				
			||||||
        return completeLineVBox;
 | 
					        return completeLineVBox;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method Initializes the Game View, in order to do that a vbox is needed and the gameDecorator
 | 
				
			||||||
 | 
					     * @param vBox used for display
 | 
				
			||||||
 | 
					     * @param gameDecorator
 | 
				
			||||||
 | 
					     * @return
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public GameController openGameView(VBox vBox, GameDecorator gameDecorator) {
 | 
					    public GameController openGameView(VBox vBox, GameDecorator gameDecorator) {
 | 
				
			||||||
        return factory.loadGameView(vBox ,gameDecorator, this);
 | 
					
 | 
				
			||||||
 | 
					        return factory.loadGameView(vBox, gameDecorator, this);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method that initializes a new Message to be written on the footer, if it's an error boolean can be set.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param msg The message to be written
 | 
				
			||||||
 | 
					     * @param error true if an error false if not
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void printMessageToFooter(String msg, boolean error) {
 | 
					    public void printMessageToFooter(String msg, boolean error) {
 | 
				
			||||||
        factory.printMessageToFooter((BorderPane) pane,msg,error);
 | 
					        logger.fine("Initializes to write message: " + msg + " on the footer");
 | 
				
			||||||
 | 
					        factory.printMessageToFooter((BorderPane) pane, msg, error);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void clearMessage(boolean error){
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method used to clear Messages shown on the footer
 | 
				
			||||||
 | 
					     * @param error true if an error false if not
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void clearMessage(boolean error) {
 | 
				
			||||||
 | 
					        logger.fine("Initializing to clear messages from the footer");
 | 
				
			||||||
        factory.resetFooter((BorderPane) pane, error);
 | 
					        factory.resetFooter((BorderPane) pane, error);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public LanguageConfigurator getLanguageConfigurator() {
 | 
					    public LanguageConfigurator getLanguageConfigurator() {
 | 
				
			||||||
        return factory.getLanguageConfigurator();
 | 
					        return factory.getLanguageConfigurator();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method that informs all listeners of an update.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void informListener() {
 | 
					    public void informListener() {
 | 
				
			||||||
        for(IsObserver observer : listener) {
 | 
					
 | 
				
			||||||
 | 
					        for (IsObserver observer : listener) {
 | 
				
			||||||
            observer.update();
 | 
					            observer.update();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,7 +4,14 @@ package ch.zhaw.projekt2.turnierverwaltung;
 | 
				
			||||||
import javafx.collections.FXCollections;
 | 
					import javafx.collections.FXCollections;
 | 
				
			||||||
import javafx.collections.ObservableList;
 | 
					import javafx.collections.ObservableList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.*;
 | 
					
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
 | 
					import java.io.FileInputStream;
 | 
				
			||||||
 | 
					import java.io.FileNotFoundException;
 | 
				
			||||||
 | 
					import java.io.FileOutputStream;
 | 
				
			||||||
 | 
					import java.io.IOException;
 | 
				
			||||||
 | 
					import java.io.ObjectInputStream;
 | 
				
			||||||
 | 
					import java.io.ObjectOutputStream;
 | 
				
			||||||
import java.net.URI;
 | 
					import java.net.URI;
 | 
				
			||||||
import java.util.logging.Logger;
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,8 +19,8 @@ import java.util.logging.Logger;
 | 
				
			||||||
 * Class in Charge of Reading and Writing files
 | 
					 * Class in Charge of Reading and Writing files
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public class FileIO {
 | 
					public class FileIO {
 | 
				
			||||||
    private File mainDir;
 | 
					    private final File mainDir;
 | 
				
			||||||
    private File saves;
 | 
					    private final File saves;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Logger logger = Logger.getLogger(FileIO.class.getCanonicalName());
 | 
					    private static final Logger logger = Logger.getLogger(FileIO.class.getCanonicalName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,13 +64,14 @@ public class FileIO {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Method to check if a tournament with the existing name already exists.
 | 
					     * Method to check if a tournament with the existing name already exists.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
     * @param name that is being checked
 | 
					     * @param name that is being checked
 | 
				
			||||||
     * @return true if the name exists already false if the name is unique
 | 
					     * @return true if the name exists already false if the name is unique
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public boolean tournamentExists(String name) {
 | 
					    public boolean tournamentExists(String name) {
 | 
				
			||||||
        logger.finer("checking for duplicate name in tournament List");
 | 
					        logger.finer("checking for duplicate name in tournament List");
 | 
				
			||||||
        for (TournamentFile file : getList()) {
 | 
					        for (TournamentFile file : getList()) {
 | 
				
			||||||
            if (file.toString().toLowerCase().equals(name.toLowerCase())) {
 | 
					            if (file.toString().equalsIgnoreCase(name)) {
 | 
				
			||||||
                logger.fine(name + " is an already existing name in the list");
 | 
					                logger.fine(name + " is an already existing name in the list");
 | 
				
			||||||
                return true;
 | 
					                return true;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -73,10 +81,10 @@ public class FileIO {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Loads and returns a tournament from a given File which contains the serialiazed tournament.
 | 
					     * Loads and returns a tournament from a given File which contains the serialized tournament.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param tournamentFile The tournament file where the data should be read from.
 | 
					     * @param tournamentFile The tournament file where the data should be read from.
 | 
				
			||||||
     * @return Tournament that is returned when succefully being read from the file
 | 
					     * @return Tournament that is returned when successfully being read from the file
 | 
				
			||||||
     * @throws ClassNotFoundException No definition for the class with the specified name could be found
 | 
					     * @throws ClassNotFoundException No definition for the class with the specified name could be found
 | 
				
			||||||
     * @throws IOException            File not readable
 | 
					     * @throws IOException            File not readable
 | 
				
			||||||
     * @throws FileNotFoundException  File not found
 | 
					     * @throws FileNotFoundException  File not found
 | 
				
			||||||
| 
						 | 
					@ -119,7 +127,7 @@ public class FileIO {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Serializables and saves the receiving tournament file to a txt file.
 | 
					     * Serializable and saves the receiving tournament file to a txt file.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @param tournament the receiving tournament.
 | 
					     * @param tournament the receiving tournament.
 | 
				
			||||||
     * @throws IOException           File not readable
 | 
					     * @throws IOException           File not readable
 | 
				
			||||||
| 
						 | 
					@ -181,14 +189,14 @@ public class FileIO {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * TournamentFile Class is in use to add missing functionality that is
 | 
					     * TournamentFile Class is in used to add missing functionality that is
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public class TournamentFile extends File {
 | 
					    public static class TournamentFile extends File {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /**
 | 
					        /**
 | 
				
			||||||
         * Only job the constructor got is to initialize it via its superclass. See java.io.File Documentation for more info.
 | 
					         * Only job the constructor got is to initialize it via its superclass. See java.io.File Documentation for more info.
 | 
				
			||||||
         *
 | 
					         *
 | 
				
			||||||
         * @param uri abstract pathname needed for its superclass to intialize the file accordingly.
 | 
					         * @param uri abstract pathname needed for its superclass to initialize the file accordingly.
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
        public TournamentFile(URI uri) {
 | 
					        public TournamentFile(URI uri) {
 | 
				
			||||||
            super(uri);
 | 
					            super(uri);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,77 +1,171 @@
 | 
				
			||||||
package ch.zhaw.projekt2.turnierverwaltung;
 | 
					package ch.zhaw.projekt2.turnierverwaltung;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.io.Serializable;
 | 
					import java.io.Serializable;
 | 
				
			||||||
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Class Representing a game, implements Serializable to be saved inside a tournament
 | 
				
			||||||
 | 
					 * Holding the data and points for a single match
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
public class Game implements Serializable {
 | 
					public class Game implements Serializable {
 | 
				
			||||||
    private Participant participant1, participant2;
 | 
					    private Participant participant1, participant2;
 | 
				
			||||||
    private int points1, points2;
 | 
					    private int points1, points2;
 | 
				
			||||||
    private Place place;
 | 
					    private Place place;
 | 
				
			||||||
    private Game previousGame1, previousGame2;
 | 
					    private Game previousGame1, previousGame2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static final Logger logger = Logger.getLogger(Game.class.getCanonicalName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Constructor to initialize a new game.
 | 
				
			||||||
 | 
					     * Two participants are needed.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param participant1 that is added to the game
 | 
				
			||||||
 | 
					     * @param participant2 that is added to the game
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public Game(Participant participant1, Participant participant2) {
 | 
					    public Game(Participant participant1, Participant participant2) {
 | 
				
			||||||
 | 
					        logger.fine("initializing a new game with the participants: " + participant1 + ", " + participant2);
 | 
				
			||||||
        this.participant1 = participant1;
 | 
					        this.participant1 = participant1;
 | 
				
			||||||
        this.participant2 = participant2;
 | 
					        this.participant2 = participant2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Game(Game previousGame1, Game previousGame2){
 | 
					    /**
 | 
				
			||||||
 | 
					     * Constructor to initialize a game with two previous games.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param previousGame1 previous game (connecting to this game in the hierarchy)
 | 
				
			||||||
 | 
					     * @param previousGame2 other previous game (connecting to this game in the hierarchy)
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Game(Game previousGame1, Game previousGame2) {
 | 
				
			||||||
 | 
					        logger.fine("initializing a new game with the previous games: " + previousGame1 + ", " + previousGame2);
 | 
				
			||||||
        this.previousGame1 = previousGame1;
 | 
					        this.previousGame1 = previousGame1;
 | 
				
			||||||
        this.previousGame2 = previousGame2;
 | 
					        this.previousGame2 = previousGame2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to get the points of the first participant
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return points of participant 1
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public int getPoints1() {
 | 
					    public int getPoints1() {
 | 
				
			||||||
 | 
					        logger.fine("Returning points of: " + participant1 + ", holding: " + points1 + " points");
 | 
				
			||||||
        return points1;
 | 
					        return points1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to set the points of the first participant
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param points1 to be set for the first participant
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void setPoints1(int points1) {
 | 
					    public void setPoints1(int points1) {
 | 
				
			||||||
 | 
					        logger.fine("Setting points of: " + participant1 + ", to " + points1 + " points");
 | 
				
			||||||
        this.points1 = points1;
 | 
					        this.points1 = points1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to get the points of the second participant
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return points of participant 2
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public int getPoints2() {
 | 
					    public int getPoints2() {
 | 
				
			||||||
 | 
					        logger.fine("Returning points of: " + participant2 + ", holding: " + points2 + " points");
 | 
				
			||||||
        return points2;
 | 
					        return points2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to set the points of the second participant
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param points2 to be set for the second participant
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void setPoints2(int points2) {
 | 
					    public void setPoints2(int points2) {
 | 
				
			||||||
 | 
					        logger.fine("Setting points of: " + participant2 + ", to " + points2 + " points");
 | 
				
			||||||
        this.points2 = points2;
 | 
					        this.points2 = points2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to get the first Participant
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return the first Participant
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public Participant getParticipant1() {
 | 
					    public Participant getParticipant1() {
 | 
				
			||||||
 | 
					        logger.fine("Returning the first participant: " + participant1);
 | 
				
			||||||
        return participant1;
 | 
					        return participant1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to set the first participant
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param participant1 to be set as the first participant
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void setParticipant1(Participant participant1) {
 | 
					    public void setParticipant1(Participant participant1) {
 | 
				
			||||||
 | 
					        logger.fine("Setting the first Participant as: " + participant1);
 | 
				
			||||||
        this.participant1 = participant1;
 | 
					        this.participant1 = participant1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to set the second participant
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param participant2 to be set as the second participant
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void setParticipant2(Participant participant2) {
 | 
					    public void setParticipant2(Participant participant2) {
 | 
				
			||||||
 | 
					        logger.fine("Setting the second Participant as: " + participant2);
 | 
				
			||||||
        this.participant2 = participant2;
 | 
					        this.participant2 = participant2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to get the second Participant
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return the second participant
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public Participant getParticipant2() {
 | 
					    public Participant getParticipant2() {
 | 
				
			||||||
 | 
					        logger.fine("Returning the second participant: " + participant2);
 | 
				
			||||||
        return participant2;
 | 
					        return participant2;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to set the place of a game
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param place to be set for the game
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public void setPlace(Place place) {
 | 
					    public void setPlace(Place place) {
 | 
				
			||||||
 | 
					        logger.fine("Setting the location of the game " + this + " to: " + place);
 | 
				
			||||||
        this.place = place;
 | 
					        this.place = place;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method to get the place of a game
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return the place of the game
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public Place getPlace() {
 | 
					    public Place getPlace() {
 | 
				
			||||||
 | 
					        logger.fine("Returning the place of the game, current Location: " + place);
 | 
				
			||||||
        return place;
 | 
					        return place;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public Participant getWinner(){
 | 
					    /**
 | 
				
			||||||
        if(points1 > points2){
 | 
					     * Method to determine the winner of a game, if there is a draw null will be returned.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return the winner of the game or null if draw
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public Participant getWinner() {
 | 
				
			||||||
 | 
					        logger.finer("Determining winner of game");
 | 
				
			||||||
 | 
					        if (points1 > points2) {
 | 
				
			||||||
 | 
					            logger.fine(participant1 + "has won the game");
 | 
				
			||||||
            return participant1;
 | 
					            return participant1;
 | 
				
			||||||
        } else if(points2 > points1){
 | 
					        } else if (points2 > points1) {
 | 
				
			||||||
 | 
					            logger.fine(participant2 + "has won the game");
 | 
				
			||||||
            return participant2;
 | 
					            return participant2;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
 | 
					            logger.fine("There is no winner");
 | 
				
			||||||
            return null;
 | 
					            return null;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void refreshParticipants(){
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method that gets the winner of previous games and sets them as the participants of this game.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public void refreshParticipants() {
 | 
				
			||||||
        participant1 = previousGame1.getWinner();
 | 
					        participant1 = previousGame1.getWinner();
 | 
				
			||||||
        participant2 = previousGame2.getWinner();
 | 
					        participant2 = previousGame2.getWinner();
 | 
				
			||||||
 | 
					        logger.fine("Refreshed Participants, new Participants: " + participant1 + ", " + participant2);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,15 @@
 | 
				
			||||||
package ch.zhaw.projekt2.turnierverwaltung;
 | 
					package ch.zhaw.projekt2.turnierverwaltung;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Invalid NameException is used to indicate when a given name does not follow the correct formatting.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
public class InvalidNameException extends Exception {
 | 
					public class InvalidNameException extends Exception {
 | 
				
			||||||
    public InvalidNameException() {
 | 
					    /**
 | 
				
			||||||
        super();
 | 
					     * Constructor to throw the InvalidNameException, receives a String as input to define reason for throwing
 | 
				
			||||||
    }
 | 
					     * the error.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param errorMessage to be displayed with the exception
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public InvalidNameException(String errorMessage) {
 | 
					    public InvalidNameException(String errorMessage) {
 | 
				
			||||||
        super(errorMessage);
 | 
					        super(errorMessage);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,18 +2,17 @@ package ch.zhaw.projekt2.turnierverwaltung;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Most basic interface for observing an object
 | 
					 * Most basic interface for observing an object
 | 
				
			||||||
 * @author bles
 | 
					 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 | 
					 * @author bles
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public interface IsObservable {
 | 
					public interface IsObservable {
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Add an observer that listens for updates
 | 
					     * Add an observer that listens for updates
 | 
				
			||||||
     * @param observer
 | 
					 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    void addListener(IsObserver observer);
 | 
					    void addListener(IsObserver observer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Remove an observer from the list
 | 
					     * Remove an observer from the list
 | 
				
			||||||
     * @param observer
 | 
					 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    void removeListener(IsObserver observer);
 | 
					    void removeListener(IsObserver observer);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,11 +1,12 @@
 | 
				
			||||||
package ch.zhaw.projekt2.turnierverwaltung;
 | 
					package ch.zhaw.projekt2.turnierverwaltung;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Most basic interface for beeing an observer
 | 
					 * Most basic interface for being an observer
 | 
				
			||||||
 * @author bles
 | 
					 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 | 
					 * @author bles
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
public interface IsObserver {
 | 
					public interface IsObserver {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * This method is always called when an observed object
 | 
					     * This method is always called when an observed object
 | 
				
			||||||
     * changes
 | 
					     * changes
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,18 +3,30 @@ package ch.zhaw.projekt2.turnierverwaltung;
 | 
				
			||||||
import java.io.File;
 | 
					import java.io.File;
 | 
				
			||||||
import java.io.IOException;
 | 
					import java.io.IOException;
 | 
				
			||||||
import java.io.InputStream;
 | 
					import java.io.InputStream;
 | 
				
			||||||
import java.util.logging.*;
 | 
					import java.util.logging.LogManager;
 | 
				
			||||||
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Class in charge of setting up the Logging functionality properly
 | 
				
			||||||
 | 
					 * For further Log settings look into the properties.log file
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
public class LogConfiguration {
 | 
					public class LogConfiguration {
 | 
				
			||||||
    private static final Logger logger = Logger.getLogger(LogConfiguration.class.getCanonicalName());
 | 
					    private static final Logger logger = Logger.getLogger(LogConfiguration.class.getCanonicalName());
 | 
				
			||||||
    private final File mainDir;
 | 
					    private final File mainDir;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public LogConfiguration(String saveLocation, String logFileLocation) throws IOException {
 | 
					    /**
 | 
				
			||||||
 | 
					     * Constructor of LogConfiguration, does the whole setup including reading the properties and setting up a
 | 
				
			||||||
 | 
					     * directory for the log files also starts the root logger.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param saveLocation   where the log files should be placed in
 | 
				
			||||||
 | 
					     * @param propertiesPath location of the properties.log file
 | 
				
			||||||
 | 
					     * @throws IOException if error occurs while reading the log file
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public LogConfiguration(String saveLocation, String propertiesPath) throws IOException {
 | 
				
			||||||
        logger.fine("Starts setting up a main directory in which a folder with the log files will be placed, if not already exists");
 | 
					        logger.fine("Starts setting up a main directory in which a folder with the log files will be placed, if not already exists");
 | 
				
			||||||
        this.mainDir = new File(saveLocation);
 | 
					        this.mainDir = new File(saveLocation);
 | 
				
			||||||
        if (!mainDir.exists()) {
 | 
					        if (!mainDir.exists()) {
 | 
				
			||||||
            logger.fine("Creating main directory for log ordner in given path" + saveLocation);
 | 
					            logger.fine("Creating main directory for log folder in given path" + saveLocation);
 | 
				
			||||||
            mainDir.mkdir();
 | 
					            mainDir.mkdir();
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            logger.finer("main directory for log folder already exists");
 | 
					            logger.finer("main directory for log folder already exists");
 | 
				
			||||||
| 
						 | 
					@ -25,17 +37,14 @@ public class LogConfiguration {
 | 
				
			||||||
            saves.mkdir();
 | 
					            saves.mkdir();
 | 
				
			||||||
            logger.fine("Creating log save directory");
 | 
					            logger.fine("Creating log save directory");
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            logger.finer("log save directory already exists");
 | 
					            logger.finer("Log save directory already exists");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        String propertiesPath = "ch" + System.getProperty("file.separator") + "zhaw" + System.getProperty("file.separator") + "projekt2" + System.getProperty("file.separator") +
 | 
					        logger.fine("Getting and reading log config file from: " + propertiesPath);
 | 
				
			||||||
                "turnierverwaltung" + System.getProperty("file.separator") + "logging" + System.getProperty("file.separator") + "log.properties";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        logger.fine("Getting and reading logconfig file from " + propertiesPath);
 | 
					 | 
				
			||||||
        InputStream logConfig = this.getClass().getClassLoader().getResourceAsStream(propertiesPath);
 | 
					        InputStream logConfig = this.getClass().getClassLoader().getResourceAsStream(propertiesPath);
 | 
				
			||||||
        LogManager.getLogManager().readConfiguration(logConfig);
 | 
					        LogManager.getLogManager().readConfiguration(logConfig);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
        Logger.getLogger(LogConfiguration.class.getPackageName());
 | 
					        Logger.getLogger(LogConfiguration.class.getPackageName());
 | 
				
			||||||
 | 
					        logger.fine("Finished setting up Logging functionality");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@ public class Person implements Serializable {
 | 
				
			||||||
    private String firstName;
 | 
					    private String firstName;
 | 
				
			||||||
    private String phoneNumber;
 | 
					    private String phoneNumber;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Logger logger = Logger.getLogger(FileIO.class.getCanonicalName());
 | 
					    private static final Logger logger = Logger.getLogger(Person.class.getCanonicalName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,7 +10,7 @@ public class Place implements Serializable {
 | 
				
			||||||
    private final String NAME_MATCHING_REGEX = "[a-zA-Z0-9]{1,20}";
 | 
					    private final String NAME_MATCHING_REGEX = "[a-zA-Z0-9]{1,20}";
 | 
				
			||||||
    private String name;
 | 
					    private String name;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Logger logger = Logger.getLogger(FileIO.class.getCanonicalName());
 | 
					    private static final Logger logger = Logger.getLogger(Place.class.getCanonicalName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Constructor of a place initializes it and checks if name is in valid format
 | 
					     * Constructor of a place initializes it and checks if name is in valid format
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,7 +12,7 @@ public class Player extends Person implements Participant {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private LocalDate dateOfBirth;
 | 
					    private LocalDate dateOfBirth;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Logger logger = Logger.getLogger(FileIO.class.getCanonicalName());
 | 
					    private static final Logger logger = Logger.getLogger(Player.class.getCanonicalName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Constructor of player initializes a new player setting sever attributes like firstname, name birthdate usw.
 | 
					     * Constructor of player initializes a new player setting sever attributes like firstname, name birthdate usw.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@ public class Team implements Participant {
 | 
				
			||||||
    private List<Player> players;
 | 
					    private List<Player> players;
 | 
				
			||||||
    private Person contactPerson;
 | 
					    private Person contactPerson;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Logger logger = Logger.getLogger(FileIO.class.getCanonicalName());
 | 
					    private static final Logger logger = Logger.getLogger(Team.class.getCanonicalName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Constructor to initiate a team, sets its name
 | 
					     * Constructor to initiate a team, sets its name
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,7 +22,7 @@ public class Tournament implements Serializable {
 | 
				
			||||||
    private final List<Place> places;
 | 
					    private final List<Place> places;
 | 
				
			||||||
    private List<List<Game>> gameList;
 | 
					    private List<List<Game>> gameList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Logger logger = Logger.getLogger(FileIO.class.getCanonicalName());
 | 
					    private static final Logger logger = Logger.getLogger(Tournament.class.getCanonicalName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -193,6 +193,7 @@ public class TournamentDecorator implements IsObservable{
 | 
				
			||||||
        executorService.awaitTermination(2000, TimeUnit.MILLISECONDS);
 | 
					        executorService.awaitTermination(2000, TimeUnit.MILLISECONDS);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private class saveTask implements Runnable {
 | 
					    private class saveTask implements Runnable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @Override
 | 
					        @Override
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,26 +2,35 @@ package ch.zhaw.projekt2.turnierverwaltung.main;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import ch.zhaw.projekt2.turnierverwaltung.*;
 | 
					import ch.zhaw.projekt2.turnierverwaltung.*;
 | 
				
			||||||
import javafx.application.Application;
 | 
					import javafx.application.Application;
 | 
				
			||||||
import javafx.event.EventHandler;
 | 
					 | 
				
			||||||
import javafx.fxml.FXMLLoader;
 | 
					 | 
				
			||||||
import javafx.scene.Scene;
 | 
					import javafx.scene.Scene;
 | 
				
			||||||
import javafx.scene.layout.BorderPane;
 | 
					import javafx.scene.layout.BorderPane;
 | 
				
			||||||
import javafx.stage.Stage;
 | 
					import javafx.stage.Stage;
 | 
				
			||||||
import javafx.stage.WindowEvent;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.logging.Logger;
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Class Main window is used to initialize the GUI Elements, Creating several Decorators and also getting the Factories
 | 
				
			||||||
 | 
					 * ready
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
public class MainWindow extends Application {
 | 
					public class MainWindow extends Application {
 | 
				
			||||||
    private FileIO fileIO = new FileIO(System.getProperty("user.dir") + System.getProperty("file.separator") + "tournierverwaltung_angrynerds");
 | 
					    private final FileIO fileIO = new FileIO(System.getProperty("user.dir") +
 | 
				
			||||||
 | 
					            System.getProperty("file.separator") + "tournierverwaltung_angrynerds");
 | 
				
			||||||
    private FactoryDecorator factoryDecorator;
 | 
					    private FactoryDecorator factoryDecorator;
 | 
				
			||||||
    private TournamentDecorator tournamentDecorator = new TournamentDecorator(fileIO);
 | 
					    private TournamentDecorator tournamentDecorator = new TournamentDecorator(fileIO);
 | 
				
			||||||
    private LanguageConfigurator languageConfigurator = new LanguageConfigurator();
 | 
					    private LanguageConfigurator languageConfigurator = new LanguageConfigurator();
 | 
				
			||||||
    private Factory factory = new Factory(fileIO, tournamentDecorator, languageConfigurator);
 | 
					    private Factory factory = new Factory(fileIO, tournamentDecorator, languageConfigurator);
 | 
				
			||||||
    private static final Logger logger = Logger.getLogger(FileIO.class.getCanonicalName());
 | 
					    private static final Logger logger = Logger.getLogger(FileIO.class.getCanonicalName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Start method used to initialize the main window and load it's needed component
 | 
				
			||||||
 | 
					     * Also sets the scene and set some values like min width and height
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param primaryStage to be displayed
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void start(Stage primaryStage) throws Exception {
 | 
					    public void start(Stage primaryStage) {
 | 
				
			||||||
 | 
					        logger.fine("Starting up the main window with the primary Stage");
 | 
				
			||||||
        BorderPane pane = factory.loadMainWindow();
 | 
					        BorderPane pane = factory.loadMainWindow();
 | 
				
			||||||
        factoryDecorator = new FactoryDecorator(fileIO, factory, pane);
 | 
					        factoryDecorator = new FactoryDecorator(fileIO, factory, pane);
 | 
				
			||||||
        factory.loadAllViews(factoryDecorator, pane);
 | 
					        factory.loadAllViews(factoryDecorator, pane);
 | 
				
			||||||
| 
						 | 
					@ -39,6 +48,9 @@ public class MainWindow extends Application {
 | 
				
			||||||
        primaryStage.show();
 | 
					        primaryStage.show();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method used to safely shut down the application
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void stop() {
 | 
					    public void stop() {
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,14 +3,24 @@ package ch.zhaw.projekt2.turnierverwaltung.main;
 | 
				
			||||||
import ch.zhaw.projekt2.turnierverwaltung.FXController;
 | 
					import ch.zhaw.projekt2.turnierverwaltung.FXController;
 | 
				
			||||||
import ch.zhaw.projekt2.turnierverwaltung.LanguageConfigurator;
 | 
					import ch.zhaw.projekt2.turnierverwaltung.LanguageConfigurator;
 | 
				
			||||||
import javafx.application.Platform;
 | 
					import javafx.application.Platform;
 | 
				
			||||||
import javafx.event.ActionEvent;
 | 
					 | 
				
			||||||
import javafx.fxml.FXML;
 | 
					import javafx.fxml.FXML;
 | 
				
			||||||
import javafx.scene.control.Label;
 | 
					import javafx.scene.control.Label;
 | 
				
			||||||
import javafx.scene.control.Menu;
 | 
					import javafx.scene.control.Menu;
 | 
				
			||||||
import javafx.scene.control.MenuItem;
 | 
					import javafx.scene.control.MenuItem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Main WindowController Class in charge of the Controller Functions of it
 | 
				
			||||||
 | 
					 * Since not much is directly in the main window only the top bar functionality is represented (language setting and
 | 
				
			||||||
 | 
					 * close option).
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
public class MainWindowController extends FXController {
 | 
					public class MainWindowController extends FXController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static final Logger logger = Logger.getLogger(MainWindowController.class.getCanonicalName());
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    private MenuItem closeBtn;
 | 
					    private MenuItem closeBtn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,21 +30,31 @@ public class MainWindowController extends FXController {
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    private Menu menuItemLanguage;
 | 
					    private Menu menuItemLanguage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					     /**
 | 
				
			||||||
 | 
					     * Method changes the language Setting to german
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    void changeLangToGerman(ActionEvent event) {
 | 
					    void changeLangToGerman() {
 | 
				
			||||||
        getLanguageConfigurator().changeLanguage(LanguageConfigurator.Language.GERMAN);
 | 
					        getLanguageConfigurator().changeLanguage(LanguageConfigurator.Language.GERMAN);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    void changeLangToEnglish(ActionEvent event) {
 | 
					    void changeLangToEnglish() {
 | 
				
			||||||
        getLanguageConfigurator().changeLanguage(LanguageConfigurator.Language.ENGLISH);
 | 
					        getLanguageConfigurator().changeLanguage(LanguageConfigurator.Language.ENGLISH);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * This Method initializes the
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    void closeApplication(ActionEvent event) {
 | 
					    void closeApplication() {
 | 
				
			||||||
 | 
					        logger.fine("");
 | 
				
			||||||
        Platform.exit();
 | 
					        Platform.exit();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * There is no content to load
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void shareGUIElementWithLanguageConfigurator() {
 | 
					    public void shareGUIElementWithLanguageConfigurator() {
 | 
				
			||||||
        getLanguageConfigurator().recieveLabel(mainTitle);
 | 
					        getLanguageConfigurator().recieveLabel(mainTitle);
 | 
				
			||||||
| 
						 | 
					@ -46,6 +66,5 @@ public class MainWindowController extends FXController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void loadContent() {
 | 
					    public void loadContent() {
 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,18 @@
 | 
				
			||||||
package ch.zhaw.projekt2.turnierverwaltung.main.gameScheduleView;
 | 
					package ch.zhaw.projekt2.turnierverwaltung.main.gameScheduleView;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import ch.zhaw.projekt2.turnierverwaltung.FileIO;
 | 
				
			||||||
import ch.zhaw.projekt2.turnierverwaltung.LanguageConfigurator;
 | 
					import ch.zhaw.projekt2.turnierverwaltung.LanguageConfigurator;
 | 
				
			||||||
import javafx.scene.control.Alert;
 | 
					import javafx.scene.control.Alert;
 | 
				
			||||||
import javafx.scene.control.ButtonBar;
 | 
					import javafx.scene.control.ButtonBar;
 | 
				
			||||||
import javafx.scene.control.ButtonType;
 | 
					import javafx.scene.control.ButtonType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Class that is used to display the popup window to confirm a sensitive action of the user.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
public class AlertNewSchedule extends Alert {
 | 
					public class AlertNewSchedule extends Alert {
 | 
				
			||||||
    private ButtonType yesButton;
 | 
					    private ButtonType yesButton;
 | 
				
			||||||
    private ButtonType noButton;
 | 
					    private ButtonType noButton;
 | 
				
			||||||
| 
						 | 
					@ -30,6 +38,11 @@ public class AlertNewSchedule extends Alert {
 | 
				
			||||||
        getButtonTypes().setAll(yesButton, noButton);
 | 
					        getButtonTypes().setAll(yesButton, noButton);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Result gathered from previous question popup window
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return boolean true if yes button is pressed and false if no is pressed
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public boolean showAndGetResult() {
 | 
					    public boolean showAndGetResult() {
 | 
				
			||||||
        showAndWait().ifPresent(input -> {
 | 
					        showAndWait().ifPresent(input -> {
 | 
				
			||||||
            result = input == yesButton;
 | 
					            result = input == yesButton;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,9 @@ import javafx.scene.control.TextField;
 | 
				
			||||||
import javafx.scene.layout.Pane;
 | 
					import javafx.scene.layout.Pane;
 | 
				
			||||||
import javafx.scene.layout.VBox;
 | 
					import javafx.scene.layout.VBox;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Class GameController in Charge of the Controller Element of the Schedule view.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
public class GameController extends FXController{
 | 
					public class GameController extends FXController{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private GameDecorator gameDecorator;
 | 
					    private GameDecorator gameDecorator;
 | 
				
			||||||
| 
						 | 
					@ -33,6 +36,7 @@ public class GameController extends FXController{
 | 
				
			||||||
    private TextField pointsTeamTwo;
 | 
					    private TextField pointsTeamTwo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private Label locationLabel;
 | 
					    private Label locationLabel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
| 
						 | 
					@ -50,7 +54,7 @@ public class GameController extends FXController{
 | 
				
			||||||
        gameDecorator.saveGamePlace(newPlace);
 | 
					        gameDecorator.saveGamePlace(newPlace);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public double getGameBoxHeigth(){
 | 
					    public double getGameBoxHeight(){
 | 
				
			||||||
        return mainVBox.getPrefHeight();
 | 
					        return mainVBox.getPrefHeight();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -51,12 +51,12 @@ public class GameScheduleController extends FXController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    void openPlacesFormular(ActionEvent event) {
 | 
					    void openPlacesFormular(ActionEvent event) {
 | 
				
			||||||
        getFactoryDecorator().openPlacesFormular();
 | 
					        getFactoryDecorator().openPlacesForm();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    void openParticipantFormular(ActionEvent event) {
 | 
					    void openParticipantFormular(ActionEvent event) {
 | 
				
			||||||
        getFactoryDecorator().openParticipantFormular();
 | 
					        getFactoryDecorator().openParticipantForm();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,16 +2,22 @@ package ch.zhaw.projekt2.turnierverwaltung.main.placesAddFormular;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import ch.zhaw.projekt2.turnierverwaltung.FXController;
 | 
					import ch.zhaw.projekt2.turnierverwaltung.FXController;
 | 
				
			||||||
import ch.zhaw.projekt2.turnierverwaltung.Place;
 | 
					import ch.zhaw.projekt2.turnierverwaltung.Place;
 | 
				
			||||||
import ch.zhaw.projekt2.turnierverwaltung.Player;
 | 
					 | 
				
			||||||
import ch.zhaw.projekt2.turnierverwaltung.Tournament;
 | 
					import ch.zhaw.projekt2.turnierverwaltung.Tournament;
 | 
				
			||||||
import javafx.event.ActionEvent;
 | 
					 | 
				
			||||||
import javafx.fxml.FXML;
 | 
					import javafx.fxml.FXML;
 | 
				
			||||||
import javafx.scene.control.Button;
 | 
					import javafx.scene.control.Button;
 | 
				
			||||||
import javafx.scene.control.Label;
 | 
					import javafx.scene.control.Label;
 | 
				
			||||||
import javafx.scene.control.ListView;
 | 
					import javafx.scene.control.ListView;
 | 
				
			||||||
import javafx.scene.control.TextField;
 | 
					import javafx.scene.control.TextField;
 | 
				
			||||||
 | 
					import javafx.scene.layout.GridPane;
 | 
				
			||||||
 | 
					import javafx.scene.layout.VBox;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javafx.scene.input.MouseEvent;
 | 
					import javafx.scene.input.MouseEvent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.logging.Logger;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Controller of the places form, in charge of its functionality.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
public class PlacesFormularController extends FXController {
 | 
					public class PlacesFormularController extends FXController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,6 +45,10 @@ public class PlacesFormularController extends FXController {
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    private Button saveBtn;
 | 
					    private Button saveBtn;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static final Logger logger = Logger.getLogger(PlacesFormularController.class.getCanonicalName());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void shareGUIElementWithLanguageConfigurator() {
 | 
					    public void shareGUIElementWithLanguageConfigurator() {
 | 
				
			||||||
        getLanguageConfigurator().recieveLabel(placeListTitle);
 | 
					        getLanguageConfigurator().recieveLabel(placeListTitle);
 | 
				
			||||||
| 
						 | 
					@ -50,37 +60,61 @@ public class PlacesFormularController extends FXController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      /**
 | 
				
			||||||
 | 
					     * Selects an item (place) from the List view
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    void changedSelection(MouseEvent event){
 | 
					    void changedSelection() {
 | 
				
			||||||
        Place place = placeListView.getSelectionModel().getSelectedItems().get(0);
 | 
					        Place place = placeListView.getSelectionModel().getSelectedItems().get(0);
 | 
				
			||||||
 | 
					        logger.finer("Selected new Place from list: " + place);
 | 
				
			||||||
        placeNameTextField.setText(place.getName());
 | 
					        placeNameTextField.setText(place.getName());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Saves the name of a new place into the list and clears the form
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    void savePlace(ActionEvent event) {
 | 
					    void savePlace() {
 | 
				
			||||||
        getTournamentDecorator().savePlace(placeNameTextField.getText());
 | 
					        getTournamentDecorator().savePlace(placeNameTextField.getText());
 | 
				
			||||||
        clearFormular();
 | 
					        logger.fine("Saved " + placeNameTextField + " to the list of places");
 | 
				
			||||||
 | 
					        clearForm();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void clearFormular() {
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method clears the input field
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private void clearForm() {
 | 
				
			||||||
 | 
					        logger.finer("Clearing input text field");
 | 
				
			||||||
        placeNameTextField.clear();
 | 
					        placeNameTextField.clear();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method deletes the currently selected place from the list.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    void delete(ActionEvent event) {
 | 
					    void delete() {
 | 
				
			||||||
        Place place = placeListView.getSelectionModel().getSelectedItems().get(0);
 | 
					        Place place = placeListView.getSelectionModel().getSelectedItems().get(0);
 | 
				
			||||||
 | 
					        logger.fine("Deleting " + place + "from place list");
 | 
				
			||||||
        getTournamentDecorator().deletePlace(place);
 | 
					        getTournamentDecorator().deletePlace(place);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Closes the current Place view, going back to previous view
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @FXML
 | 
					    @FXML
 | 
				
			||||||
    void close(ActionEvent event) {
 | 
					    void close() {
 | 
				
			||||||
 | 
					        logger.fine("Closing place form");
 | 
				
			||||||
        getFactoryDecorator().openScheduleView();
 | 
					        getFactoryDecorator().openScheduleView();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Loads the already saved places and displays them on the places list.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void loadContent() {
 | 
					    public void loadContent() {
 | 
				
			||||||
 | 
					        logger.fine("Getting the Saved tournaments into the Places list");
 | 
				
			||||||
        Tournament tournament = getTournamentDecorator().getTournament();
 | 
					        Tournament tournament = getTournamentDecorator().getTournament();
 | 
				
			||||||
        if(tournament != null){
 | 
					        if (tournament != null) {
 | 
				
			||||||
            placeListView.setItems(tournament.getPlaces());
 | 
					            placeListView.setItems(tournament.getPlaces());
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            placeListView.getItems().clear();
 | 
					            placeListView.getItems().clear();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
package ch.zhaw.projekt2.turnierverwaltung;
 | 
					package ch.zhaw.projekt2.turnierverwaltung;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.junit.jupiter.api.Assertions;
 | 
					
 | 
				
			||||||
import org.junit.jupiter.api.BeforeEach;
 | 
					import org.junit.jupiter.api.BeforeEach;
 | 
				
			||||||
import org.junit.jupiter.api.Nested;
 | 
					import org.junit.jupiter.api.Nested;
 | 
				
			||||||
import org.junit.jupiter.api.Test;
 | 
					import org.junit.jupiter.api.Test;
 | 
				
			||||||
| 
						 | 
					@ -12,10 +12,13 @@ import java.nio.file.Files;
 | 
				
			||||||
import java.nio.file.Path;
 | 
					import java.nio.file.Path;
 | 
				
			||||||
import java.util.Comparator;
 | 
					import java.util.Comparator;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.logging.Logger;
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.junit.jupiter.api.Assertions.*;
 | 
					import static org.junit.jupiter.api.Assertions.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * FileIO Test Class
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
class FileIOTest {
 | 
					class FileIOTest {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    String RESOURCES_DIR = "./src/test/resources/ch/zhaw/projekt2/turnierverwaltung/";
 | 
					    String RESOURCES_DIR = "./src/test/resources/ch/zhaw/projekt2/turnierverwaltung/";
 | 
				
			||||||
| 
						 | 
					@ -23,6 +26,11 @@ class FileIOTest {
 | 
				
			||||||
    String saveDir;
 | 
					    String saveDir;
 | 
				
			||||||
    FileIO io;
 | 
					    FileIO io;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method checks if a new directory is set up correctly and can be accessed.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @throws IOException Exceptions should not be thrown
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @Test
 | 
					    @Test
 | 
				
			||||||
    void FileIONewDir() throws IOException {
 | 
					    void FileIONewDir() throws IOException {
 | 
				
			||||||
        mainDir = RESOURCES_DIR + "FileIONew";
 | 
					        mainDir = RESOURCES_DIR + "FileIONew";
 | 
				
			||||||
| 
						 | 
					@ -50,14 +58,23 @@ class FileIOTest {
 | 
				
			||||||
        assertFalse(saveDirFile.exists());
 | 
					        assertFalse(saveDirFile.exists());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Method tests the read behavior and if a file is read correctly
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    @Nested
 | 
					    @Nested
 | 
				
			||||||
    class Read{
 | 
					    class Read{
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         *  Sets up a directory
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        @BeforeEach
 | 
					        @BeforeEach
 | 
				
			||||||
        void init() {
 | 
					        void init() {
 | 
				
			||||||
            mainDir = RESOURCES_DIR + "FileIORead";
 | 
					            mainDir = RESOURCES_DIR + "FileIORead";
 | 
				
			||||||
            io = new FileIO(mainDir);
 | 
					            io = new FileIO(mainDir);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Test if the list is displayed correctly when getting it via getList
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        @Test
 | 
					        @Test
 | 
				
			||||||
        void getList() {
 | 
					        void getList() {
 | 
				
			||||||
            List<FileIO.TournamentFile> tournaments = io.getList();
 | 
					            List<FileIO.TournamentFile> tournaments = io.getList();
 | 
				
			||||||
| 
						 | 
					@ -65,6 +82,9 @@ class FileIOTest {
 | 
				
			||||||
            assertEquals("test1.txt", tournaments.get(1).getName());
 | 
					            assertEquals("test1.txt", tournaments.get(1).getName());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Test behaviour when the list is empty
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        @Test
 | 
					        @Test
 | 
				
			||||||
        void getListEmpty() {
 | 
					        void getListEmpty() {
 | 
				
			||||||
            mainDir = RESOURCES_DIR + "FileIOEmpty";
 | 
					            mainDir = RESOURCES_DIR + "FileIOEmpty";
 | 
				
			||||||
| 
						 | 
					@ -72,6 +92,12 @@ class FileIOTest {
 | 
				
			||||||
            assertEquals(0, io.getList().size());
 | 
					            assertEquals(0, io.getList().size());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Tests behavior when loading a tournament that exists.
 | 
				
			||||||
 | 
					         *
 | 
				
			||||||
 | 
					         * @throws IOException Exceptions should not be thrown
 | 
				
			||||||
 | 
					         * @throws ClassNotFoundException Exceptions should not be thrown
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        @Test
 | 
					        @Test
 | 
				
			||||||
        void loadTournament() throws IOException, ClassNotFoundException {
 | 
					        void loadTournament() throws IOException, ClassNotFoundException {
 | 
				
			||||||
            mainDir = RESOURCES_DIR + "FileIORead";
 | 
					            mainDir = RESOURCES_DIR + "FileIORead";
 | 
				
			||||||
| 
						 | 
					@ -80,6 +106,9 @@ class FileIOTest {
 | 
				
			||||||
            assertEquals("test1", tournament.getName());
 | 
					            assertEquals("test1", tournament.getName());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Test behavior when trying to load non-existent tournament
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        @Test
 | 
					        @Test
 | 
				
			||||||
        void loadTournamentNotExisting(){
 | 
					        void loadTournamentNotExisting(){
 | 
				
			||||||
            File file = new File("Not-existing-File");
 | 
					            File file = new File("Not-existing-File");
 | 
				
			||||||
| 
						 | 
					@ -88,11 +117,17 @@ class FileIOTest {
 | 
				
			||||||
            assertFalse(file.exists());
 | 
					            assertFalse(file.exists());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Tests behavior when trying to load an empty tournament.
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        @Test
 | 
					        @Test
 | 
				
			||||||
        void loadTournamentEmpty(){
 | 
					        void loadTournamentEmpty(){
 | 
				
			||||||
            assertThrows(IOException.class, () -> io.loadTournament(new File(mainDir + "/saves/empty.txt")));
 | 
					            assertThrows(IOException.class, () -> io.loadTournament(new File(mainDir + "/saves/empty.txt")));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Tests behavior when the tournamentfile input is null
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        @Test
 | 
					        @Test
 | 
				
			||||||
        void loadTournamentFileNull(){
 | 
					        void loadTournamentFileNull(){
 | 
				
			||||||
            assertThrows(IllegalArgumentException.class, () -> io.loadTournament(null));
 | 
					            assertThrows(IllegalArgumentException.class, () -> io.loadTournament(null));
 | 
				
			||||||
| 
						 | 
					@ -107,6 +142,13 @@ class FileIOTest {
 | 
				
			||||||
            io = new FileIO(mainDir);
 | 
					            io = new FileIO(mainDir);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Saves the Saving mechanism and deletion
 | 
				
			||||||
 | 
					         *
 | 
				
			||||||
 | 
					         * @throws IOException Exceptions should not be thrown
 | 
				
			||||||
 | 
					         * @throws InvalidNameException Exceptions should not be thrown
 | 
				
			||||||
 | 
					         * @throws Tournament.InvalidTypeException Exceptions should not be thrown
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        @Test
 | 
					        @Test
 | 
				
			||||||
        void saveTournament() throws IOException, InvalidNameException, Tournament.InvalidTypeException {
 | 
					        void saveTournament() throws IOException, InvalidNameException, Tournament.InvalidTypeException {
 | 
				
			||||||
            Tournament tournament = null;
 | 
					            Tournament tournament = null;
 | 
				
			||||||
| 
						 | 
					@ -118,6 +160,9 @@ class FileIOTest {
 | 
				
			||||||
            assertFalse(file.exists());
 | 
					            assertFalse(file.exists());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Tests behavior when a tournament is being saved that is only null
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        @Test
 | 
					        @Test
 | 
				
			||||||
        void saveTournamentNull(){
 | 
					        void saveTournamentNull(){
 | 
				
			||||||
            assertThrows(IllegalArgumentException.class, () -> io.saveTournament(null));
 | 
					            assertThrows(IllegalArgumentException.class, () -> io.saveTournament(null));
 | 
				
			||||||
| 
						 | 
					@ -132,6 +177,10 @@ class FileIOTest {
 | 
				
			||||||
            io = new FileIO(mainDir);
 | 
					            io = new FileIO(mainDir);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         *  Test if tournament that does exist can be deleted
 | 
				
			||||||
 | 
					         * @throws IOException Exceptions should not be thrown
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        @Test
 | 
					        @Test
 | 
				
			||||||
        void deleteTournament() throws IOException {
 | 
					        void deleteTournament() throws IOException {
 | 
				
			||||||
            File file = new File(mainDir + "/saves/test1.txt");
 | 
					            File file = new File(mainDir + "/saves/test1.txt");
 | 
				
			||||||
| 
						 | 
					@ -141,6 +190,11 @@ class FileIOTest {
 | 
				
			||||||
            assertFalse(file.exists());
 | 
					            assertFalse(file.exists());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Testing if tournament that does not exist can be deleted
 | 
				
			||||||
 | 
					         *
 | 
				
			||||||
 | 
					         * @throws IOException Exception should not be thrown only checking for FileNotFoundException
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        @Test
 | 
					        @Test
 | 
				
			||||||
        void deleteTournamentNotExisting() throws IOException {
 | 
					        void deleteTournamentNotExisting() throws IOException {
 | 
				
			||||||
            File file = new File("Not-existing-File");
 | 
					            File file = new File("Not-existing-File");
 | 
				
			||||||
| 
						 | 
					@ -149,6 +203,9 @@ class FileIOTest {
 | 
				
			||||||
            assertFalse(file.exists());
 | 
					            assertFalse(file.exists());
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /**
 | 
				
			||||||
 | 
					         * Tests if a tournament that is null can be deleted
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
        @Test
 | 
					        @Test
 | 
				
			||||||
        void deleteTournamentNull(){
 | 
					        void deleteTournamentNull(){
 | 
				
			||||||
            assertThrows(IllegalArgumentException.class, () -> io.deleteTournament(null));
 | 
					            assertThrows(IllegalArgumentException.class, () -> io.deleteTournament(null));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue