...
Voor het uitprinten van de rondes hebben wij besloten het op een eigen pagina te zetten. Op deze pagina kan er voor twee werkwijzen gekozen worden. Er kan namelijk per competitie en per ronde een PDF gegenereerd worden of per datum.
...
Per datum
Als er voor de datum optie wordt gekozen om de PDF te genereren per competitie en ronde wordt er voor iedere keer dat de combobox die alle competities bevat (competitionSelector) geopend en gesloten word een if statement uitgevoerd om te kijken of er een competitie is geselecteerd is of niet. Als er geen een geselecteerd is wordt automatisch de eerste optie uit de lijst gekozen. Dit is gedaan om errors te voorkomen die te maken hebben met het ophalen van de rondes. Als er namelijk geen competitie is opgehaald in de combobox is deze null. Er bestaan natuurlijk geen rondes voor een competitie die null is dus wordt er een error gegooid. Ook wordt voor dezelfde reden eerst de ronde selectie combobox (roundSelector) button uitgezet. Deze wordt aangezet als er een competitie geselecteerd is. Als de competitie geselecteerd is worden alle rondes die binnen de competitie vallen opgehaald en in de combobox neergezet. Ook worden dubbele waardes eruit gefilterd, want dit was een bug die omhoog kwam tijdens het maken van de code. Iedere keer dat dit alles gebeurd wordt eerst de ronde combobox leeggegooid zodat er geen rondes van een andere competitie in het veld blijven staan. Als alle velden ingevuld zijn en er een pad gekozen is waar het bestand opgeslagen gaat worden veranderd de button voor het genereren van de PDF van onklikbaar naar klikbaar. Vervolgens wordt er een PDF gegenereerd met deze informatie.
Per datum
Als er voor de datum optie gekozen wordt, wordt de datum meegegeven aan de generateMatchesPerDatePDF methode. Deze methode is beschikbaar door de instantie van de PDFService die de methodes bevat voor alles wat met het genereren van de PDF te maken heeft. Aan de methode moeten ook nog het pad waar het bestand opgeslagen gaat worden (pdfPath) en de datum die geselecteerd is door de gebruiker (datePicker) meegegeven worden. In de PDFService worden vervolgens binnen de generateMatchesPerDatePDF methode alle competities (competitions) en competitiegroepen opgehaald (competitionGroups). Om namelijk alle data van een dag op te halen moet dit wel gedaan worden per competitie. De wedstrijden worden zo dus per ronde, per groep en per competitie opgehaald. Dit is een stuk duidelijker dan alle data door elkaar te hebben binnen de PDF. Vervolgens worden de rondes gecontroleerd om te kijken of deze ook wel echt op de ingevoerde datum gehouden worden. Zodra de wedstrijden per group en per competitie opgehaald zijn wordt de naam van het document gegenereerd aangezien deze naam de eerder genoemde informatie nodig heeft. Voor het maken van de naam in de methode generatePDFName wordt de huidige tijd opgehaald om altijd een unieke bestandsnaam te hebben. Als deze namelijk niet uniek is wordt het vorige bestand met die naam overschreven. Vervolgens wordt er gecontroleerd of er daadwerkelijk wedstrijden zijn op de datum die ingevuld is en als dit zo is wordt er een PDF opgesteld met de drawPDF methode. Stel dat er geen rondes op de ingevoerde dag of competitiegroepen of wedstrijden zijn wordt er een melding in het scherm gebracht met een foutmelding. De drawPDF methode wordt dan ook niet aangeroepen. Iedere keer dat de drawPDF methode aangeroepen wordt telt de pdfCounter 1 bij zichzelf op. Dit is later belangrijk voor het weergeven van het aantal gegenereerde PDF's. Anders is het namelijk nogal onduidelijk of er überhaupt wel PDF's gegenereerd zijn. In de drawPDF methode wordt er met iText een PDF gegenereerd met de wedstrijddata van de eerder ingevoerde dag. Als het bestand niet aangemaakt kan worden wordt er een exceptie gegooid die aangeeft dat er geen bestand aangemaakt kan worden.
Vanuit deze pagina moet er worden geselecteerd voor welke CompetitieDTO de rondes uit moeten worden geprint via een dropdown. Met de getCompetitions functie binnen MatchRepository worden de CompetitionDTO's opgehaald. Met de gekozen Competitie kunnen de rondes opgehaald worden die dan in de volgende dropdown kunnen worden gezet met hun rondenummers. Via de getMatchesByRoundId functie worden alle individuele matches opgehaald waardoor alle informatie voor het uitprinten van de indeling er is.
gekozen wordt, wordt de datum meegegeven aan de generateMatchesPerDatePDF methode. Deze methode is beschikbaar door de instantie van de PDFService die de methodes bevat voor alles wat met het genereren van de PDF te maken heeft. Aan de methode moeten ook nog het pad waar het bestand opgeslagen gaat worden (pdfPath) en de datum die geselecteerd is door de gebruiker (datePicker) meegegeven worden. In de PDFService worden vervolgens binnen de generateMatchesPerDatePDF methode alle competities (competitions) en competitiegroepen opgehaald (competitionGroups). Om namelijk alle data van een dag op te halen moet dit wel gedaan worden per competitie. De wedstrijden worden zo dus per ronde, per groep en per competitie opgehaald. Dit is een stuk duidelijker dan alle data door elkaar te hebben binnen de PDF. Vervolgens worden de rondes gecontroleerd om te kijken of deze ook wel echt op de ingevoerde datum gehouden worden. Zodra de wedstrijden per group en per competitie opgehaald zijn wordt de naam van het document gegenereerd aangezien deze naam de eerder genoemde informatie nodig heeft. Voor het maken van de naam in de methode generatePDFName wordt de huidige tijd opgehaald om altijd een unieke bestandsnaam te hebben. Als deze namelijk niet uniek is wordt het vorige bestand met die naam overschreven. Vervolgens wordt er gecontroleerd of er daadwerkelijk wedstrijden zijn op de datum die ingevuld is en als dit zo is wordt er een PDF opgesteld met de drawPDF methode. Stel dat er geen rondes op de ingevoerde dag of competitiegroepen of wedstrijden zijn wordt er een melding in het scherm gebracht met een foutmelding. De drawPDF methode wordt dan ook niet aangeroepen. Iedere keer dat de drawPDF methode aangeroepen wordt telt de pdfCounter 1 bij zichzelf op. Dit is later belangrijk voor het weergeven van het aantal gegenereerde PDF's. Anders is het namelijk nogal onduidelijk of er überhaupt wel PDF's gegenereerd zijn. In de drawPDF methode wordt er met iText een PDF gegenereerd met de wedstrijddata van de eerder ingevoerde dag. Als het bestand niet aangemaakt kan worden wordt er een exceptie gegooid die aangeeft dat er geen bestand aangemaakt kan worden.
Per competitie en ronde
Als er voor de optie wordt gekozen om de PDF te genereren per competitie en ronde wordt er voor iedere keer dat de combobox die alle competities bevat (competitionSelector) geopend en gesloten word een if statement uitgevoerd om te kijken of er een competitie is geselecteerd is of niet. Als er geen een geselecteerd is wordt automatisch de eerste optie uit de lijst gekozen. Dit is gedaan om errors te voorkomen die te maken hebben met het ophalen van de rondes. Als er namelijk geen competitie is opgehaald in de combobox is deze null. Er bestaan natuurlijk geen rondes voor een competitie die null is dus wordt er een error gegooid. Ook wordt voor dezelfde reden eerst de ronde selectie combobox (roundSelector) button uitgezet. Deze wordt aangezet als er een competitie geselecteerd is. Als de competitie geselecteerd is worden alle rondes die binnen de competitie vallen opgehaald en in de combobox neergezet. Ook worden dubbele waardes eruit gefilterd, want dit was een bug die omhoog kwam tijdens het maken van de code. Iedere keer dat dit alles gebeurd wordt eerst de ronde combobox leeggegooid zodat er geen rondes van een andere competitie in het veld blijven staan. Als alle velden ingevuld zijn en er een pad gekozen is waar het bestand opgeslagen gaat worden veranderd de button voor het genereren van de PDF van onklikbaar naar klikbaar. Vervolgens wordt er een PDF gegenereerd met deze informatie. Vanuit de CompetitionDTO kan de CompetitionNaam worden gehaald, de datum van de ronde uit RondeDTO en de wit en zwartspeler namen uit MatchDTO.
Overig
JaVaFo
Voor het genereren van een competitionlayout van een toernooi is een extern programma gebruikt, omdat het genereren van een zwitserse indeling wellicht te foutgevoelig zou zijn als het geprogrammeerd werd door iemand die niet volledig thuis is in het domein. JaVaFo, gemaakt door Roberto Ricca, is een in Java geprogrammeerde matchmaking software. Het heeft als input een document nodig dat specifiek is aan de schaakorganisatie Fide (.trf). Om dit te genereren zijn er een aantal classes aangemaakt om dit te regelen. "DocumentMaker" kan met wat speciale DTOs waar de data in is opgeslagen een string genereren waarmee JaVaFo een indeling kan maken. "JaVaFoDocuPlayer" en "JaVaFoDocuResult" zijn DTO's om de data van spelers en ronderesultaten op te slaan. JaVaFo maakt van de input van DocumentMaker een output string die vervolgens vertaald kan worden naar match DTO's.
...