diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Factory.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Factory.java index 6f5d23a..a6678df 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Factory.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/Factory.java @@ -69,7 +69,7 @@ public class Factory { view.loadView(tournamentDecorator, fileIO, factoryDecorator, pane); } catch (IOException e) { e.printStackTrace(); - //TODO Handle and logging. + logger.warning("failed to load views."); } } } @@ -81,6 +81,7 @@ public class Factory { public void showTournamentList(BorderPane pane) { tournamentDecorator.setTournament(null); setCenterOfBorderPane(pane, View.tournamentList); + logger.fine("showing Tournament List"); } /** @@ -89,6 +90,7 @@ public class Factory { */ public void showParticipantFormular(BorderPane pane) { setCenterOfBorderPane(pane, View.participantFormular); + logger.fine("showing Participant Formular"); } /** @@ -97,6 +99,7 @@ public class Factory { */ public void showPlacesFormular(BorderPane pane) { setCenterOfBorderPane(pane, View.placesFormular); + logger.fine("showing Places Formular"); } /** @@ -105,6 +108,7 @@ public class Factory { */ public void showGameScheduler(BorderPane pane) { setCenterOfBorderPane(pane, View.gameScheduler); + logger.fine("showing Game Scheduler"); } /** @@ -131,6 +135,7 @@ public class Factory { box.getChildren().add(loader.load()); GameController controller = loader.getController(); controller.setup(tournamentDecorator, fileIO, factoryDecorator, box, gameDecorator, languageConfigurator); + logger.fine("loaded game view"); return controller; } catch (IOException e) { logger.warning("Fatal error program can not continue after this: " + e ); @@ -146,6 +151,7 @@ public class Factory { * @param error true if it's a error message. */ public void printMessageToFooter(BorderPane pane, String msg, boolean error) { + logger.fine("message is printed to footer of window."); VBox bottom = (VBox) pane.getBottom(); Label label = new Label(); VBox innerVbox; @@ -176,6 +182,7 @@ public class Factory { * @param error true if the error message should be cleared. */ public void resetFooter(BorderPane pane,boolean error) { + logger.fine("messages are removed from footer of window."); VBox bottom = (VBox) pane.getBottom(); VBox vBox; if (error) { diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FactoryDecorator.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FactoryDecorator.java index 0c4baac..4e40608 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FactoryDecorator.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/FactoryDecorator.java @@ -141,11 +141,20 @@ public class FactoryDecorator implements IsObservable { informListener(); } + /** + * Initializes the view of gameSchedule + */ public void openScheduleView() { factory.showGameScheduler((BorderPane) pane); informListener(); } + /** + * Method to load all game views to show. + * @param hBoxCenter the box where the games should be shown. + * @param tournamentDecorator the tournamentDecorator to communicate to tournament + * @param treeView true if the games should be arranged like a tree. + */ public void loadGameList(HBox hBoxCenter, TournamentDecorator tournamentDecorator, boolean treeView) { hBoxCenter.getChildren().clear(); @@ -195,6 +204,13 @@ public class FactoryDecorator implements IsObservable { } } + /** + * Method to draw the lines between the game views in the tree view. + * @param gameVBox the box with the games where lines should be drawn. + * @param gameBoxHeight the heigth of a single game box. + * @param lineLength the length of the horizontal lines. + * @return a box which contains the drawn lines. + */ public VBox drawLines(VBox gameVBox, double gameBoxHeight, double lineLength) { VBox completeLineVBox = new VBox(); completeLineVBox.setAlignment(Pos.CENTER_LEFT); @@ -228,8 +244,8 @@ public class FactoryDecorator implements IsObservable { /** * 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 + * @param gameDecorator the gameDecorator Object to communicate with game + * @return the controller of the loaded game view. */ public GameController openGameView(VBox vBox, GameDecorator gameDecorator) { @@ -256,9 +272,10 @@ public class FactoryDecorator implements IsObservable { factory.resetFooter((BorderPane) pane, error); } - - - + /** + * getter Method of languageConfigurator + * @return the languageConfigurator object. + */ public LanguageConfigurator getLanguageConfigurator() { return factory.getLanguageConfigurator(); } diff --git a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/TournamentDecorator.java b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/TournamentDecorator.java index 45c3f38..610d1d6 100644 --- a/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/TournamentDecorator.java +++ b/app/src/main/java/ch/zhaw/projekt2/turnierverwaltung/TournamentDecorator.java @@ -8,6 +8,8 @@ import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import java.util.logging.Logger; + public class TournamentDecorator implements IsObservable{ private Tournament tournament; @@ -16,48 +18,84 @@ public class TournamentDecorator implements IsObservable{ private ExecutorService executorService; private FactoryDecorator factoryDecorator; + private static final Logger logger = Logger.getLogger(TournamentDecorator.class.getCanonicalName()); + + /** + * Constructor to initialize TournamentDecorator + * adds a listener to save the tournament every time if something is changed. + * creates a executer service to do the saving process in separate thread for better performance. + * @param fileIO + */ public TournamentDecorator(FileIO fileIO){ + logger.fine("initializing TournamentDecorator"); setFileIO(fileIO); addListener(new IsObserver() { @Override public void update() { if(tournament != null){ - saveTournament(); + logger.fine("listener to save tournament was added"); } } }); executorService = Executors.newFixedThreadPool(1); } + /** + * Setter method of FactoryDecorator + * @param factoryDecorator the factory decorator to load different views. + */ public void setFactoryDecorator(FactoryDecorator factoryDecorator) { this.factoryDecorator = factoryDecorator; } + /** + * Setter Method of FileIO + * @param fileIO the fileIO object to read and save to files. + */ public void setFileIO(FileIO fileIO) { this.fileIO = fileIO; } + /** + * setter Method of Tournament + * @param tournament the new Tournament Object which was selected by user. + */ public void setTournament(Tournament tournament) { this.tournament = tournament; } + /** + * getter Method of Tournament + * @return the actual tournament which is open. + */ public Tournament getTournament() { return tournament; } + /** + * Method to add a listener in list. + * @param observer the observer object which should be informed. + */ @Override public void addListener(IsObserver observer) { listener.add(observer); } + /** + * Method to remove a listener from list. + * @param observer the object to remove. + */ @Override public void removeListener(IsObserver observer) { listener.remove(observer); } - + /** + * Method to save the actual tournament to files. + */ public void saveTournament(){ + logger.fine("Saving Tournament to File."); executorService.execute(new saveTask()); factoryDecorator.clearMessage(false); String msg = factoryDecorator.getLanguageConfigurator().getSelectedLanguage("save"); @@ -65,40 +103,49 @@ public class TournamentDecorator implements IsObservable{ } - + /** + * Method to create a new Tournament. It checks if the name is valid, creates a new instance of Tournament and calls + * FileIO to save the new Tournament. + * @param name The name which was entered by the user. + * @param type The type of Tournament + */ public void createTournament(String name, Tournament.Type type){ - try { if(fileIO.tournamentExists(name)){ - //TODO:Logger + logger.warning("a tournament with name " + name + "exists already."); String msg = factoryDecorator.getLanguageConfigurator().getSelectedLanguage("tournamentExists"); factoryDecorator.printMessageToFooter(msg, true); return; } Tournament tournament = new Tournament(name, type); + logger.fine("new tournament instance was created."); fileIO.saveTournament(tournament); + logger.fine("new Tournament File is saved."); factoryDecorator.clearMessage(true); informListener(); } catch (InvalidNameException e) { e.printStackTrace(); - //TODO: Logger + logger.warning("The name which was entered is invalid."); String msg = factoryDecorator.getLanguageConfigurator().getSelectedLanguage("invalidName"); factoryDecorator.printMessageToFooter(msg, true); } catch (Tournament.InvalidTypeException e) { e.printStackTrace(); - //TODO: Logger + logger.warning("The selected type of tournament is not valid."); String msg = factoryDecorator.getLanguageConfigurator().getSelectedLanguage("invalidMode"); factoryDecorator.printMessageToFooter(msg, true); - } catch (IOException e) { e.printStackTrace(); - //TODO: Logger + logger.warning("Creating a new Tournament File was failed."); String msg = factoryDecorator.getLanguageConfigurator().getSelectedLanguage("IOException"); factoryDecorator.printMessageToFooter(msg, true); } } + /** + * Method to delete a Tournament File + * @param tournamentFile The File which should be deleted. + */ public void deleteTournament(FileIO.TournamentFile tournamentFile){ try { fileIO.deleteTournament(tournamentFile); @@ -111,8 +158,11 @@ public class TournamentDecorator implements IsObservable{ } } + /** + * Method to create the list of games. The participants are entered in random order. + */ public void createNewGameSchedule() { - //TODO: logging + logger.fine("Creating new Game Schedule"); try { tournament.createGameSchedule(); factoryDecorator.clearMessage(true); @@ -120,6 +170,7 @@ public class TournamentDecorator implements IsObservable{ e.printStackTrace(); String msg = factoryDecorator.getLanguageConfigurator().getSelectedLanguage("numberParticipant"); factoryDecorator.printMessageToFooter(msg, true); + logger.warning("Failed to create Game Schedule. The number of Participants is invalid."); } informListener(); }