• Nebyly nalezeny žádné výsledky

Hierarchie tˇ r´ıd pˇ redstavuj´ıc´ıch turnaj a jejich vztah s manaˇ zerem

3. N´avrh

«interface»

PairingEngine

+ getEngine(PairingEngineId): PairingEngine

+ getSupportedTournamentSystems(): List<TournamentSystemId>

+ doPlayerPairing(PlayerTournament, List<PlayerEntity> players): Pairing + doTeamPairing(TeamTournament, List<TeamEntity>): void

Obr´azek 3.3: Hierarchie tˇr´ıd pˇredstavuj´ıc´ıch kolo a jejich vztah s p´arovac´ımi 30

3.2. Architektura aplikace velmi liˇs´ı. A vzhledem k tomu, ˇze tˇr´ıda Pairable nebude potˇreba ukl´adat do datab´aze jako samostatn´a jednotka, rozhodl jsem se pro vytvoˇren´ı tabulek pouze jej´ıch potomk˚u, tedy entit Player a Team. Nen´ı pak nutn´e, aby byla entitou, a proto budou entity pouze jej´ı potomci.

3. N´avrh

Obr´azek 3.4: Relaˇcn´ı datab´azov´y model

Kapitola 4

Implementace

V t´eto kapitole se zamˇeˇr´ım na vlastn´ı implementaci aplikace. Budu popisovat postupy, kter´e jsem pˇri n´ı pouˇzil. Bˇehem implementace tak´e uk´aˇzi uk´azky k´odu a obr´azky GUI aplikace. Nakonec pop´ıˇsi strukturu v´ysledn´eho programu a jak zprovoznit aplikaci na desktopu. Hlavn´ım vstupem bude kapitola 3, kde byla pˇredevˇs´ım navrhnuta architektura aplikace a kapitola 2, kde byly stanoveny poˇzadavky na aplikaci. ˇC´asteˇcnˇe bude tak´e ˇcerp´ano z kapitoly 1, kde jsou pops´any jednotliv´e turnajov´e syst´emy, pomocn´a hodnocen´ı apod.

4.1 Postupy pˇ ri implementaci

Pˇri implementaci jsem dodrˇzoval architekturu aplikace, kter´a byla navrhnuta v kapitole 3. Jedn´a se hlavnˇe o jej´ı hlavn´ı principy. Pˇr´ıkladem m˚uˇze b´yt z´akaz v datov´e vrstvˇe pouˇz´ıv´an´ı objekt˚u z jin´e vrstvy, nebot’ datov´a vrstva nen´ı z´avisl´a na ˇz´adn´e vrstvˇe. Kromˇe toho budu tak´e co nejv´ıce dodrˇzovat principy OOP. D´ıky zvolen´e architektuˇre je pˇrid´av´an´ı nov´ych p´arovac´ıch en-gin˚u a pomocn´ych hodnocen´ı velmi jednoduch´e. Staˇc´ı pouze implementovat dan´e rozhran´ı, respektive dˇedit z dan´e abstraktn´ı tˇr´ıdy a pˇridat svoje id do dan´eho v´yˇctov´eho typu a n´aslednˇe jen implementovat poˇzadovan´e metody.

D´ıky navrˇzen´e architektuˇre jsem mohl implementovat jednotliv´e vrstvy t´emˇeˇr paralelnˇe. Budu samozˇrejmˇe dodrˇzovat tak´e konvence Javy. Co se t´yˇce kon-venc´ı, tak napˇr´ıklad tˇr´ıda bude zaˇc´ınat velk´ym p´ısmenem, metoda mal´ym apod.

4.2 Grafick´ e uˇ zivatelsk´ e rozhran´ı

V t´eto ˇc´asti pop´ıˇsi, jak jsem naimplementoval GUI. Pro jeho statickou definici jsem pouˇzil FXML, coˇz bylo navrhnuto v pˇredchoz´ı kapitole. Jednotliv´a okna m˚uˇzeme rozdˇelit do tˇr´ı sekc´ı. A to na sekci pro turnaj jednotlivc˚u, sekci pro turnaj druˇzstev a na sekci kter´a patˇr´ı k obˇema turnaj˚um. Teoreticky to ˇslo

4. Implementace

udˇelat tak, ˇze oba typy turnaj˚u, by byly kompletnˇe rozdˇeleny a nesd´ılely by tak ˇz´adn´e okno. Nicm´enˇe to by zp˚usobilo zbyteˇcnou duplikaci k´odu. Pˇr´ıkladem okna, kter´e patˇr´ı obˇema typ˚um, m˚uˇze napˇr´ıklad b´yt formul´aˇr pro vytv´aˇren´ı turnaje ˇci okno pro zvolen´ı kola. Nyn´ı pop´ıˇsi nejd˚uleˇzitˇejˇs´ı okna aplikace. Je-jich velikost nebude ´uplnˇe souhlasit se skuteˇcnost´ı, aby se vˇetˇs´ı veˇsly do ˇs´ıˇrky dokumentu. Nebudou z d˚uvodu pˇrehlednosti pops´ana vˇsechna okna. Budou pˇredevˇs´ım vynech´any upozornˇen´ı a potvrzovac´ı dialogy. Pˇr´ıkladem potvrzo-vac´ıch dialog˚u m˚uˇzou b´yt napˇr´ıklad dialogy, kter´e n´as upozorˇnuj´ı, ˇze dan´e smaz´an´ı je trval´e. Uk´azky oken budou v ˇceˇstinˇe.

Pokud nebyl dosud ˇz´adn´y turnaj naˇcten, zobraz´ı se okno pro v´ybˇer tur-naj˚u. Toto okno m˚uˇzeme vidˇet na obr´azku 4.1. M˚uˇzeme zde naˇc´ıst, mazat a mˇenit atributy vytvoˇren´ych turnaj˚u. Pro maz´an´ı je potˇreba odsouhlasit tˇri potvrzovac´ı dialogy. Implementoval jsem to z d˚uvodu bezpeˇcnosti. Smaz´an´ı turnaje je totiˇz nevratn´e a nechtˇen´a ztr´ata cel´eho turnaje je nejhorˇs´ı co se m˚uˇze st´at. Lze turnaje filtrovat podle jejich n´azvu. M´ame zde tak´e volbu pro vytvoˇren´ı nov´eho turnaje. Kdyˇz tuto volbu zvol´ıme otevˇre se n´am okno, kter´e je zachyceno na obr´azku 4.2. Jedn´a se o formul´aˇr, kter´ym definujeme atributy turnaje. Povinn´e ´udaje jsou oznaˇceny symbolem* na konci popisku. Pokud se pokus´ıme uloˇzit turnaj bez jejich vyplnˇen´ı, zobraz´ı se upozornˇen´ı, ˇze jsme ne-vyplnili povinn´e ´udaje a ˇze tyto ´udaje jsou oznaˇceny jiˇz zm´ınˇen´ym symbolem.

Ve formul´aˇri m˚uˇzeme vyb´ırat mezi dostupn´ymi p´arovac´ımi enginy. V souˇcasn´e dobˇe jsou dostupn´y dva. Jedn´a se o JaVaFo a vlastn´ı engine aplikace. Prvn´ı zm´ınˇen´y je extern´ı a aplikace ho pouˇz´ıv´a jako Java knihovnu. Pro vol´an´ı jeho funkc´ı jsem vˇsak musel naimplementovat generov´an´ı TRF souboru, jelikoˇz ho JaVaFo pouˇz´ıv´a jako jeden ze zp˚usob˚u vstupu. Intern´ı engine aplikace jsem naimplementoval zcela s´am. Pokud zvol´ıme ve formul´aˇri JaVaFo, ve formul´aˇri budeme moci jako turnajov´y syst´em volit dvˇe verze ˇSv´ycarsk´eho syst´emu.

Prvn´ı je jeho standardn´ı verze naz´yv´ana Holandsk´a varianta. Druh´a je pak Baku akceleraˇcn´ı verze t´eto Holandsk´e varianty. Pokud zvol´ıme jakoukoli va-riantu ˇSv´ycarsk´eho syst´emu, budeme muset jeˇstˇe zvolit poˇcet kol, kter´y je libovoln´y. Co se t´yˇce typu turnaje, tak m˚uˇzeme volit mezi turnajem jednot-livc˚u a turnajem druˇzstev. V pˇr´ıpadˇe zvolen´ı turnaje druˇzstev, zobraz´ı se n´am jeˇstˇe dvˇe povinn´e kolonky. Jedn´a se o zvolen´ı hlavn´ıho bodov´eho hodnocen´ı a poˇctu hr´aˇc˚u kaˇzd´eho druˇzstva, kteˇr´ı budou p´arov´ani. Druˇzstvo pak m˚uˇze m´ıt i v´ıce hr´aˇc˚u, bude vˇsak p´arov´an pouze tento poˇcet. Pokud jich bude m´enˇe, budou m´ısto jejich chybˇej´ıc´ıch hr´aˇc˚u figurovat tzv. bye, coˇz je z´astupce pro neexistuj´ıc´ıho hr´aˇce ˇci druˇzstvo. Ve formul´aˇri pak jeˇstˇe m´ame tlaˇc´ıtko Zvolit Pomocn´a hodnocen´ı. Pokud tuto volbu zvol´ıme, zobraz´ı se n´am okno, kter´e je zachyceno na obr´azku 4.3. Zde pak m˚uˇzeme vybrat z dostupn´ych pomocn´ych hodnocen´ı pro dan´y turnajov´y syst´em. Pro zjednoduˇsen´ı pr´ace jsem umoˇznil pro seznam dostupn´ych pomocn´ych hodnocen´ı zvolen´ı v´ıce poloˇzek najednou.

Po stisknut´ı tlaˇc´ıtkaPˇridatse pak pˇresunou do seznamu zvolen´ych pomocn´ych hodnocen´ı. Jak m˚uˇzeme vidˇet z popisku, je priorita od shora dol˚u. Aby se ulehˇcila pr´ace, naimplementoval jsem posun jeho poloˇzek nahoru a dol˚u.

4.2. Grafick´e uˇzivatelsk´e rozhran´ı

Obr´azek 4.1: Okno se seznamem turnaj˚u

Obr´azek 4.2: Okno s turnajov´ym formul´aˇrem

4. Implementace

Obr´azek 4.3: Okno pro v´ybˇer pomocn´ych hodnocen´ı

Nyn´ı se vr´at´ım k oknu se seznamem turnaj˚u. Dosud byla okna shodn´a pro oba typy turnaj˚u. Aplikace totiˇz po zvolen´ı dan´eho syst´emu dynamicky mˇenila poloˇzky, kter´e je nutn´e vyplnit. Pokud nyn´ı vˇsak naˇcteme libovoln´y turnaj, zobraz´ı se okno pro dan´y typ. Nejprve pop´ıˇsi, jak jsem naimplemento-val turnaj jednotlivc˚u a potom druˇzstev. Z´akladn´ı okno pro turnaj jednotlivc˚u je zobrazen na obr´azku 4.4. Na tomto obr´azku vid´ıme jiˇz rozehran´y turnaj.

Toto okno slouˇz´ı pˇredevˇs´ım pro ˇr´ızen´ı hr´aˇc˚u. M˚uˇzeme je pˇrid´avat, upravovat, mazat, suspendovat a zruˇsit jejich suspendaci. Pro maz´an´ı hr´aˇc˚u mus´ıme po-tvrdit jeden potvrzovac´ı dialog. Tabulka hr´aˇc˚u umoˇzˇnuje v´ıcen´asobn´y v´yber.

Opˇet aby se zjednoduˇsila pr´ace. Pˇri zvolen´ı v´ıce hr´aˇc˚u a zvolen´ı volbyUpravit Hr´aˇce, se zobraz´ı formul´aˇr shodn´y s formul´aˇrem pro vytvoˇren´ı nov´eho hr´aˇce, avˇsak jiˇz s vyplnˇen´ymi hodnotami. Jsou vyplnˇeny pouze poloˇzky, kter´e jsou shodn´e. Pˇri ´upravˇe jak´ekoli poloˇzky, jsou zmˇeny aplikov´any na vˇsechny vy-bran´e hr´aˇce. Naimplementoval jsem tuto funkcionalitu opˇet z d˚uvodu uˇsetˇren´ı pr´ace. Uˇzivatel aplikace m˚uˇze napˇr´ıklad cht´ıt k nˇekolika hr´aˇc˚um pˇridat stej-nou pozn´amku. Bez t´eto funkcionality by musel upravovat jednotliv´e hr´aˇce po jednom, coˇz by bylo velmi pracn´e. D´ıky t´eto funkcionalitˇe vybere dan´e hr´aˇce a uprav´ı je vˇsechny na jednou. Hr´aˇce lze filtrovat podle jejich jm´ena a pˇr´ıjmen´ı. Pokud zvol´ıme pouze suspendovan´e hr´aˇce nebo mix p´arovateln´ych a supendovan´ych, zmˇen´ı se dynamicky tlaˇc´ıtkoSuspendovat naZruˇsit suspen-daci. Tabulka hr´aˇc˚u obsahuje pro pˇrehled jen nejd˚uleˇzitˇejˇs´ı ´udaje hr´aˇc˚u. Jedn´a se o souˇcasn´e poˇrad´ı, pˇr´ıjmen´ı, jm´eno, poˇcet bod˚u, stav a pozn´amku. Stavy jsouP´arovateln´y, Suspendov´an a Eliminov´an. Posledn´ı zm´ınˇen´y je pouze pro

4.2. Grafick´e uˇzivatelsk´e rozhran´ı

Obr´azek 4.4: Hlavn´ı okno turnaje jednotlivc˚u

vyˇrazovac´ı syst´em. Pokud je hr´aˇc ˇci druˇzstvo vyˇrazeno, jiˇz nelze zmˇenit jeho stav. Stav hr´aˇce pˇr´ıpadnˇe druˇzstva je d˚uleˇzit´y pro volbuZah´ajit Dalˇs´ı Kolo.

Tato volba totiˇz vytvoˇr´ı a zah´aj´ı dalˇs´ı kolo a umoˇzn´ı p´arovat hr´aˇce pouze se stavem P´arovateln´y. Pokud se v turnaji jeˇstˇe nezah´ajilo kolo, bere se jako nezah´ajen´y. V opaˇcn´em pˇr´ıpadˇe jako zah´ajen´y. To je d˚uleˇzit´e, jelikoˇz pro zah´ajen´y turnaj jiˇz nem˚uˇzeme mazat hr´aˇce apod. Volbu Zah´ajit Dalˇs´ı Kolo umoˇzn´ı aplikace pouze v pˇr´ıpadˇe, ˇze ˇz´adn´e kolo nen´ı aktivn´ı. V opaˇcn´em pˇr´ıpadˇe zobraz´ı upozornˇen´ı, ˇze je nutn´e pro zah´ajen´ı dalˇs´ıho kola, ukonˇcit nebo zruˇsit souˇcasn´e kolo.

Pokud ´uspˇeˇsnˇe zah´aj´ıme dalˇs´ı kolo, pˇrid´a se z´aloˇzka v hlavn´ım oknˇe a zob-raz´ı se. Tuto z´aloˇzku m˚uˇzeme vidˇet na obr´azku 4.5. Vid´ıme zde vˇsak jiˇz kolo, kde bylo provedeno p´arov´an´ı hr´aˇc˚u. Neˇz bylo provedeno p´arov´an´ı, bylo zde m´ısto tlaˇc´ıtka Restart Kola tlaˇc´ıtko Prov´est P´arov´an´ı. Po jeho stisknut´ı se provedlo p´arov´an´ı, kter´e vid´ıme na obr´azku a tlaˇc´ıtko se dynamicky zmˇenilo na tlaˇc´ıtko pro restartov´an´ı kola. Pokud ho zvol´ıme, zruˇs´ıme dan´e p´arov´an´ı a to vˇcetnˇe jiˇz vloˇzen´ych v´ysledk˚u. Aplikace se n´as proto zept´a, zda jsme si toho vˇedomi. To sam´e plat´ı pro zruˇsen´ı kola. V tomto pˇr´ıpadˇe je vˇsak kolo kompletnˇe zruˇseno. Co se t´yˇce zad´av´an´ı v´ysledk˚u, tak kromˇe standardn´ıch, m˚uˇzeme zvolit i nestandardn´ı. Pro ovˇeˇren´ı, zda jsme vyplnili vˇsechny v´ysledky, m˚uˇzeme zvolit volbu Ovˇeˇrit V´ysledky. Pokud jsme jiˇz se zadan´ymi v´ysledky hotovi a chceme ukonˇcit dan´e kolo, zvol´ıme volbu Ukonˇcit Kolo. Pˇri zvolen´ı

4. Implementace

Obr´azek 4.5: Z´aloˇzka aktivn´ıho kola turnaje jednotlivc˚u

t´eto volby aplikace automaticky zkontroluje, zda jsme vloˇzili vˇsechny v´ysledky parti´ı. Pokud ne, tak n´as upozorn´ı a kolo neukonˇc´ı.

Ostatn´ı moˇznosti pro turnaj jednotlivc˚u m˚uˇzeme nal´ezt v liˇstˇe s menu.

V menuSoubor m´ame volbu pro ukonˇcen´ı aplikace a pro zobrazen´ı seznamu turnaj˚u. Druh´a volba otevˇre mod´aln´ı okno a je stejn´e jako na obr´azku 4.1. Po-kud j´ı zvol´ıme a vymaˇzeme souˇcasn´y turnaj nebo naˇcteme jin´y turnaj, okno souˇcasn´eho turnaje se zavˇre. V menu urnaj m˚uˇzeme zobrazit seznam vˇsech kol. Jak´ekoli ukonˇcen´e kolo m˚uˇzeme naˇc´ıst a upravit jeho v´ysledky. Naˇc´ıst m˚uˇzeme pouze, pokud turnaj nem´a ˇz´adn´e kolo aktivn´ı. Dalˇs´ı volbou je zde zobrazen´ı v´ysledk˚u. Tuto volbu pop´ıˇsi pozdˇeji. Posledn´ımi dvˇema volbami jsou import a export hr´aˇc˚u. Tato funkcionalita znaˇcnˇe usnadn´ı pr´aci, pokud chceme pˇren´est hr´aˇce z jednoho turnaje do druh´eho. MenuKolose t´yk´a pouze aktivn´ıho nebo ukonˇcen´eho kola, kter´e bylo naˇcteno. Umoˇzˇnuje pˇripojit ke kolu jak´ykoli soubor a st´ahnout tento soubor. Staˇzen´ı bylo naimplementov´ano tak, ˇze po zvolen´ı adres´aˇre, se soubor uloˇz´ı do tohoto adres´aˇre s p˚uvodn´ım n´azvem. Soubory se ukl´adaj´ı do speci´aln´ıho adres´aˇre. Toto bude pops´ano po-drobnˇeji aˇz budu popisovat adres´aˇrovou strukturu aplikace. Menu Nastaven´ı umoˇzˇnuje mˇenit nastaven´ı uˇzivatelsk´eho rozhran´ı. Lze volit jazyk, v´yˇsku bunˇek tabulek a velikost fontu v tabulk´ach. Lze tak´e nastavit v´ychoz´ı nastaven´ı. Po uloˇzen´ı zvolen´eho nastaven´ı, aplikace upozorn´ı, ˇze zmˇeny budou pouˇzity pˇri pˇr´ıˇst´ım startu aplikace. Posledn´ı menuN´apovˇeda obsahuje z´akladn´ı informace

4.2. Grafick´e uˇzivatelsk´e rozhran´ı

Obr´azek 4.6: Okno s v´ysledkovou tabulkou

pro ovl´ad´an´ı aplikace, jak zaktualizovat aplikaci a ´udaje o aplikaci.

Nyn´ı pop´ıˇsi, jak jsem naimplementoval okno pro zobrazen´ı v´ysledkov´e tabulky a v´ysledk˚u parti´ı v jednotliv´ych kolech. Okno pro v´ysledkovou ta-bulku m˚uˇzeme vidˇet na obr´azku 4.6. Tabulka je podobn´a tabulce hr´aˇc˚u v hlavn´ım oknˇe turnaje. Obsahuje vˇsak vˇsechny d˚uleˇzit´e ´udaje. Tak´e neob-sahuje zbyteˇcn´e ´udaje, jako je napˇr´ıklad stav hr´aˇce ˇci pozn´amku. Jsou zde uvedeny vˇsechna zvolen´a pomocn´a hodnocen´ı a jejich vypoˇcten´e hodnoty.

M˚uˇzeme volit v´ysledkovou tabulku po jak´emkoli kole. Pokud zvol´ıme Kolo 0, tak se zobraz´ı startovn´ı listina. Jakoukoli tabulku m˚uˇzeme vytisknout. Pro zobrazen´ı v´ysledk˚u jednotliv´ych kol, mus´ıme pˇrepnout na z´aloˇzku Kolo, kter´a je zobrazena na obr´azku 4.7. Volit m˚uˇzeme v´ysledky jak´ehokoli kola. Opˇet m˚uˇzeme jakoukoli tabulku vytisknout. Dokonce m˚uˇzeme zobrazit pr´avˇe roze-hran´e kolo a vytisknout tak p´arov´an´ı dan´eho kola.

Nyn´ı pˇrejdu k okn˚um pro turnaje druˇzstev. Vˇetˇsina vˇec´ı je spoleˇcn´a. Proto tak´e maj´ı prezentery obou turnaj˚u spoleˇcn´eho abstraktn´ıho pˇredka, kter´y obsahuje spoleˇcn´e metody. Budu popisovat pˇredevˇs´ım rozd´ıly mezi obˇema turnaji. Na obr´azku 4.8 je zobrazeno hlavn´ı okno turnaje druˇzstev. Tabulka druˇzstev je velmi podobn´a tabulce hr´aˇc˚u. Lze filtrovat druˇzstva pomoc´ı jejich jmen. Volby jsou v podstatˇe shodn´e. Je zde vˇsak jedna specifick´a volba a to Hr´aˇci. Po jej´ım zvolen´ı se n´am zobraz´ı okno, kter´e je zachyceno na obr´azku 4.9. V tomto oknˇe pˇrid´av´ame, maˇzeme, upravujeme, suspendujeme a ruˇs´ıme

4. Implementace

Obr´azek 4.7: Okno s v´ysledky kol

suspendaci hr´aˇc˚u dan´eho druˇzstva. Jelikoˇz zde z´aleˇz´ı na poˇrad´ı, implemen-toval jsem zde posun hr´aˇce nahoru a dol˚u. Tabulka je opˇet v´ıce v´ybˇerov´a.

Pouze posun funguje po vybr´an´ı pouze jedin´eho hr´aˇce. Pokud jich zvol´ıme v´ıce a zvol´ıme posun, upozorn´ı n´as aplikace, ˇze je nutn´e zvolit pouze jednoho hr´aˇce.

Na obr´azku 4.10 vid´ıme aktivn´ı kolo, ve kter´em probˇehlo p´arov´an´ı druˇzstev.

Volby jsou opˇet t´emˇeˇr stejn´e jako u turnaje jednotlivc˚u. Je tu vˇsak naimple-mentov´ana jedna volba nav´ıc. Jedn´a se o zobrazen´ı vlastn´ıch parti´ı hr´aˇc˚u zvolen´eho z´apasu druˇzstev. Tyto partie se zobraz´ı v nov´em oknˇe. Toto okno m˚uˇzeme vidˇet na obr´azku 4.11. V tomto onˇe zad´av´ame pouze v´ysledky jed-notliv´ych parti´ı. Na obr´azku lze vidˇet dvˇe bye. To je zp˚usobeno t´ım, ˇze druh´e druˇzstvo mˇelo zad´ano pouze dva hr´aˇce. Proto m´ısto chybˇej´ıc´ıch dvou hr´aˇc˚u je uvedeno bye. Co se t´yˇce liˇsty s menu, tak je shodn´e s turnajem jednotlivc˚u.

Na z´avˇer pop´ıˇsi jak´y je algoritmus pro zobrazen´ı oken pˇri startu aplikace.

Pokud spust´ıme aplikaci a nˇejak´y turnaj jiˇz byl naˇcten zobraz´ı se jeho hlavn´ı okno. Pokud vˇsak tento turnaj m´a aktivn´ı kolo, bude zobrazeno okno tohoto kola. Jak jiˇz bylo zm´ınˇeno, pokud nen´ı ˇz´adn´y turnaj naˇcten´y, zobraz´ı se okno se seznamem turnaj˚u.

4.2. Grafick´e uˇzivatelsk´e rozhran´ı

Obr´azek 4.8: Hlavn´ı okno turnaje druˇzstev

Obr´azek 4.9: Okno pro ˇr´ızen´ı hr´aˇc˚u dan´eho druˇzstva

4. Implementace

Obr´azek 4.10: Z´aloˇzka aktivn´ıho kola turnaje druˇzstev

Obr´azek 4.11: Okno vlastn´ıch parti´ı dan´eho z´apasu druˇzstev

4.3. Implementace p´arov´an´ı kol

4.3 Implementace p´ arov´ an´ı kol

V t´eto ˇc´asti pop´ıˇsi implementaci p´arov´an´ı kol. Pop´ıˇsi pouze turnaj jednotlivc˚u, protoˇze pro turnaj druˇzstev, je implementace obdobn´a. Implementaci jsem provedl pˇresnˇe podle navrˇzen´e architektury aplikace. Poˇzadavek na p´arov´an´ı je zachycen instanc´ı tˇr´ıdy PlayerRoundView. Ta bez jak´ehokoli zpracov´an´ı pˇred´a tento poˇzadavek sv´emu prezenterovi. Jedn´a se o instanci tˇr´ıdy PlayerRoun-dPresenter. Ta poˇz´ad´a o p´arov´an´ı rozhran´ı PlayerRound, kter´e jiˇz patˇr´ı do business vrstvy. T´ım se poˇzadavek pˇresunul z prezentaˇcn´ı vrstvy do business vrstvy. Prezenter pak oˇcek´av´a vr´acen´ı seznamu s p´arov´an´ım. Je ovˇsem tak´e pˇripraven na vyhozen´ı v´yjimky ApplicationLogicException, kter´e by v tomto pˇr´ıpadˇe znamenalo neoˇcek´avanou intern´ı chybu aplikace. Pokud vˇsak prezen-ter ´uspˇeˇsnˇe obdrˇz´ı p´arov´an´ı, pˇriprav´ı z´ıskan´a data pro sv˚uj pohled a pˇrik´aˇze mu ho zobrazit. T´ım je role prezenteru ukonˇcena a pohled je nyn´ı zodpovˇedn´y za dan´e zobrazen´ı. Pot´e jiˇz uˇzivatel aplikace vid´ı proveden´e p´arov´an´ı v GUI.

Nyn´ı pop´ıˇsi co se odehr´av´a v business vrstvˇe. Jak jiˇz bylo zm´ınˇeno, prezentaˇcn´ı vrstva vol´a metodu deklarovanou v rozhran´ı PlayerRound. Pod t´ımto rozhran´ı se mohou nach´azet r˚uzn´e implementace. V souˇcasn´e dobˇe je pouze jedin´a implementace tohoto rozhran´ı, jelikoˇz plnˇe dostaˇcuje. V bu-doucnu se vˇsak m˚uˇze uvaˇzovat o zmˇenˇe t´eto implementace. Dan´e rozhran´ı je implementov´ano tˇr´ıdou StdPlayerRound. Jej´ı instance obdrˇz´ı poˇzadavek na p´arov´an´ı pomoc´ı vol´an´ı metody doPairing. Provede nezbytn´e kontroly tohoto poˇzadavku a poˇz´ad´a p´arovac´ı engine o proveden´ı p´arov´an´ı. Pokud p´arov´an´ı probˇehne bez probl´emu, zaktualizuje sv˚uj stav a poˇz´ad´a instanci tˇr´ıdy StdPla-yerTournament o uloˇzen´ı sv´eho stavu do perzistentn´ıho prostˇred´ı. Jelikoˇz je jej´ı souˇc´ast´ı, mus´ı instance tˇr´ıdy StdPlayerTournament tak´e aktualizovat sv˚uj stav. N´aslednˇe poˇz´ad´a rozhran´ı TournamentManager o perzistentn´ı uloˇzen´ı.

Rozhran´ı TournamentManager je implementov´ano tˇr´ıdou StdTournamentMa-nager a pˇredstavuje jedin´aˇcka. Je to z toho d˚uvodu, ˇze je potˇreba pouze jedin´a instance t´eto tˇr´ıdy. Tato tˇr´ıda poˇz´ad´a rozhran´ı EntityDao o perzistetn´ı uloˇzen´ı.

Toto rozhran´ı patˇr´ı do datov´e vrstvy. Implementace tohoto rozhran´ı StdEnti-tyDao pak pomoc´ı tˇr´ıdy EntityManager uloˇz´ı entitu PlayerTournamentEntity do datab´aze.

Nyn´ı se vr´at´ım k p´arovac´ım enginu. Ten obdrˇz´ı poˇzadavek na p´arov´an´ı a provede ho podle zvolen´eho turnajov´eho syst´emu. Algoritmus se liˇs´ı podle zvolen´eho turnajov´eho typu, syst´emu a enginu. Pop´ıˇsi nyn´ı algoritmus pro jednotliv´e syst´emy, kter´e aplikace podporuje. Opˇet zanedb´am turnajov´y typ a pop´ıˇsi jen turnaj jednotlivc˚u, jelikoˇz pro turnaj druˇzstev je to obdobn´e.

4.3.1 Holandsk´a varianta ˇsv´ycarsk´eho syst´emu

Tento syst´em je implementov´an extern´ım enginem JaVaFo. Vlastn´ı algorit-mus je tedy skryt. M´ym ´ukolem bylo pouze pˇripravit vstupy a zpracovat jeho v´ystupy. Tento engine podporuje v´ıce vstup˚u. Byl vybr´an TRF form´at.

4. Implementace

4.3.2 Baku akcelerace holandsk´e varianty ˇsv´ycarsk´eho syst´em Tento syst´em je opˇet implementov´an pomoc´ı enginu JaVaFo. Plat´ı vˇse, co bylo zm´ınˇeno v pˇredchoz´ı ˇc´asti. Rozd´ıl byl pouze v zavol´an´ı jin´eho k´odu v dan´e metodˇe. Pomoc´ı tohoto k´odu totiˇz rozliˇs´ı o jakou variantu syst´emu se jedn´a.

Pro klasickou holandskou variantu je definovan´ym k´odem 1000, zat´ımco pro jej´ı Baku akceleraci je definovan´ym k´odem 1001.

4.3.3 Jednokolov´y syst´em kaˇzd´y s kaˇzd´ym

Tento syst´em je implementov´an vlastn´ım enginem aplikace. Jako algoritmus byly zvoleny Bergerovy tabulky, kter´e byly pops´any v kapitole 1. Pokud je lich´y poˇcet hr´aˇc˚u, je pˇrid´an pro p´arovac´ı ´uˇcely hr´aˇc, kter´y pˇredstavuje bye. Na n´asleduj´ıc´ı uk´azce k´odu m˚uˇzeme vidˇet metodu gerRoundRobinMatches, zod-povˇednou za p´arov´an´ı. Tato metoda oˇcek´av´a seznam hr´aˇc˚u se sud´ym poˇctem, ˇcehoˇz se doc´ıl´ı jiˇz zm´ınˇen´ym postupem. D´ale pak oˇcek´av´a skuteˇcn´y poˇcet hr´aˇc˚u, ˇc´ıslo kola a parametr, kter´y je pro jednokolovou verzi kaˇzd´y s kaˇzd´ym

Tento syst´em je implementov´an vlastn´ım enginem aplikace. Jako algoritmus byly zvoleny Bergerovy tabulky, kter´e byly pops´any v kapitole 1. Pokud je lich´y poˇcet hr´aˇc˚u, je pˇrid´an pro p´arovac´ı ´uˇcely hr´aˇc, kter´y pˇredstavuje bye. Na n´asleduj´ıc´ı uk´azce k´odu m˚uˇzeme vidˇet metodu gerRoundRobinMatches, zod-povˇednou za p´arov´an´ı. Tato metoda oˇcek´av´a seznam hr´aˇc˚u se sud´ym poˇctem, ˇcehoˇz se doc´ıl´ı jiˇz zm´ınˇen´ym postupem. D´ale pak oˇcek´av´a skuteˇcn´y poˇcet hr´aˇc˚u, ˇc´ıslo kola a parametr, kter´y je pro jednokolovou verzi kaˇzd´y s kaˇzd´ym