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