Architektúra aplikácie¶
Aplikácia Pozor Dozor je desktopová Java aplikácia určená na lokálnu prácu s údajmi o učiteľoch, kalendári a mesačných rozpisoch dozorov. Je navrhnutá ako jednoduchý samostatný program bez potreby databázového servera.
Základ aplikácie tvorí hlavné okno s náhľadom rozpisu, formuláre na správu údajov, triedy na prácu so súbormi, generátor dozorov, PDF generátor a voliteľná cloudová záloha.
Základný princíp aplikácie¶
Aplikácia pracuje s lokálnymi dátovými súbormi. Používateľ cez grafické rozhranie pridáva učiteľov, nastavuje kalendár, generuje rozpis a podľa potreby ho potvrdzuje alebo ukladá ako PDF.
Základný tok práce
Používateľ pracuje s grafickým rozhraním aplikácie. Aplikácia podľa jeho akcií načíta alebo upraví lokálne súbory, pripraví rozpis dozorov, vytvorí PDF dokument a zobrazí jeho náhľad v hlavnom okne.
Jednoduchá lokálna architektúra
Aplikácia nepoužíva databázový server. Údaje sú uložené v súboroch v dátovom priečinku používateľa. Vďaka tomu je aplikácia jednoduchšia na prenos, zálohovanie a používanie na bežnom počítači.
Hlavné časti aplikácie¶
Aplikáciu je možné rozdeliť na niekoľko základných častí podľa ich zodpovednosti.
| Časť aplikácie | Úloha |
|---|---|
| Hlavné okno | zobrazenie náhľadu a hlavné ovládanie |
| Swing formuláre | zadávanie a úprava údajov |
| Repozitáre | čítanie a zápis dátových súborov |
| Generátor dozorov | vytvorenie mesačného rozpisu |
| PDF generátor | vytvorenie PDF dokumentu a náhľadu |
| Konfigurácia | uchovanie nastavení aplikácie |
| Cloudová služba | manuálna záloha a obnova dát |
Rozdelenie zodpovedností
Každá časť aplikácie má svoju jasnú úlohu. Formuláre riešia používateľský vstup, repozitáre prácu so súbormi, generátor prípravu rozpisu a PDF generátor výsledný dokument. Takéto rozdelenie uľahčuje údržbu aplikácie.
Hlavné okno a riadenie aplikácie¶
Hlavné okno aplikácie sa vytvára v triede Main. Táto trieda nastavuje základné rozmery okna, názov aplikácie, hlavné tlačidlá, menu, načítanie konfigurácie a zobrazenie PDF náhľadu.
Udalosti z hlavného okna spracúva trieda AppRobot. Tá reaguje na kliknutia na tlačidlá a položky menu.
Úloha triedy Main
Trieda Main vytvára hlavné okno aplikácie, nastavuje tlačidlá, menu, načítava základnú konfiguráciu a spravuje rozpracovaný náhľad rozpisu.
Úloha triedy AppRobot
Trieda AppRobot obsluhuje používateľské akcie. Reaguje na tlačidlá Generuj, Potvrdiť, Uložiť PDF a Koniec. Zároveň otvára formuláre z menu aplikácie a spúšťa cloudové operácie.
Grafické rozhranie¶
Grafické rozhranie aplikácie kombinuje dve časti. Hlavné okno používa plátno knižnice GRobot, zatiaľ čo dialógové okná a formuláre sú vytvorené pomocou Swing.
Vzhľad Swing formulárov je upravený pomocou FlatLaf, aby aplikácia pôsobila modernejšie než klasické predvolené Java okná.
Použité typy rozhrania
Hlavné okno slúži najmä na zobrazenie náhľadu a základné ovládanie. Swing formuláre slúžia na zadávanie údajov, napríklad pri pridávaní učiteľov, nastavovaní kalendára alebo úprave nastavení aplikácie.
Formuláre aplikácie¶
Formuláre sú samostatné okná, ktoré používateľovi umožňujú upravovať konkrétne údaje.
| Formulár | Úloha |
|---|---|
AddTeacherFrame |
pridanie nového učiteľa |
EditTeacherFrame |
úprava alebo vymazanie učiteľa |
ListTeachersFrame |
zobrazenie zoznamu učiteľov |
MonthSettingsFrame |
nastavenie dní v kalendári |
SettingsFrame |
úprava nastavení aplikácie |
FirstRunWizard |
sprievodca pri prvom spustení |
Jedna otvorená inštancia okna
Aplikácia sa snaží neotvárať rovnaké okno viackrát naraz. Ak už je napríklad otvorené okno nastavení alebo zoznam učiteľov, aplikácia ho prenesie dopredu namiesto vytvorenia ďalšej kópie.
Dátová vrstva¶
Dátová vrstva aplikácie je postavená na jednoduchých súboroch. Na prácu s nimi slúžia samostatné triedy, ktoré zabezpečujú načítanie, uloženie a základnú kontrolu údajov.
| Trieda | Úloha |
|---|---|
TeacherRepository |
práca so súborom teachers.csv |
MonthSettingsRepository |
práca so súborom calendar.csv |
AppConfig |
práca s konfiguráciou aplikácie |
ManageConfig |
načítanie a uloženie konfiguračných vlastností |
AppFile |
kontrola a vytváranie súborov |
AppPath |
centrálne určenie ciest k súborom |
Výhoda repozitárov
Repozitáre oddeľujú prácu so súbormi od grafického rozhrania. Formulár nemusí vedieť, ako presne je učiteľ uložený v CSV súbore. Stačí, že použije príslušnú metódu repozitára.
CSV nie je databáza
Aplikácia používa CSV súbory preto, že ide o jednoduchý lokálny program. Pri výrazne väčšom rozsahu, viacerých používateľoch alebo súbežnej práci z viacerých počítačov by už bolo vhodné uvažovať nad databázou alebo iným robustnejším úložiskom.
Dátové modely¶
Aplikácia používa jednoduché dátové triedy, ktoré reprezentujú hlavné objekty v programe.
| Trieda | Význam |
|---|---|
Teacher |
jeden učiteľ a jeho údaje |
MonthDaySetting |
nastavenie jedného dňa v kalendári |
DutyEntry |
jeden záznam dozoru pre konkrétny dátum |
CloudBackupResult |
výsledok cloudovej operácie |
Teacher
Trieda Teacher obsahuje identifikátor učiteľa, meno, voliteľné tituly, počet započítaných dozorov, týždeň posledného dozoru a dostupnosť podľa pracovných dní.
DutyEntry
Trieda DutyEntry predstavuje jeden riadok rozpisu. Obsahuje dátum a dvojicu učiteľov priradených na dozor.
Generovanie dozorov¶
Generovanie rozpisu zabezpečuje trieda DutyGenerator. Tá načíta učiteľov, pripraví kalendár mesiaca a pre každý zahrnutý deň vyberie dvojicu dostupných učiteľov.
Výber učiteľov nie je náhodný. Aplikácia sa snaží prideľovať dozory rovnomerne podľa počtu už započítaných dozorov, podľa rozloženia v aktuálnom generovaní a podľa posledného týždňa dozoru.
Generovanie vytvára iba návrh
Samotné generovanie vytvorí zoznam dozorov ako návrh. Tento návrh sa uloží do pamäte aplikácie ako rozpracovaný rozpis. Do súboru teachers.csv sa štatistiky učiteľov zapíšu až po potvrdení rozpisu.
Na každý deň sú potrební dvaja učitelia
Generátor potrebuje pre každý zahrnutý deň nájsť aspoň dvoch dostupných učiteľov. Ak ich nenájde, generovanie zlyhá a používateľ musí upraviť dostupnosť učiteľov alebo kalendár.
Náhľad a potvrdenie rozpisu¶
Jednou z najdôležitejších častí architektúry je oddelenie náhľadu od potvrdenia. Po kliknutí na Generuj sa rozpis iba pripraví a zobrazí. Po kliknutí na Potvrdiť sa zapíše do evidencie učiteľov.
Aplikácia si pri vygenerovaní náhľadu uloží aj informáciu o stave kalendára a zoznamu učiteľov. Pred potvrdením potom overuje, či sa údaje medzičasom nezmenili.
Ochrana pred neaktuálnym rozpisom
Ak používateľ po vygenerovaní náhľadu zmení kalendár alebo zoznam učiteľov, pôvodný rozpis už nemusí byť platný. Aplikácia preto takýto rozpis zneplatní a vyžaduje nové generovanie.
Potvrdenie mení evidenciu
Potvrdenie rozpisu nie je iba vizuálne potvrdenie. Pri potvrdení sa učiteľom započítajú dozory a aktualizujú sa ich štatistiky v súbore teachers.csv.
PDF výstup¶
PDF dokument vytvára trieda TeacherPdfGenerator. Používa knižnicu PDFBox, slovenské názvy mesiacov a fonty podporujúce diakritiku.
PDF obsahuje nadpis, zoznam dní s dvojicami učiteľov a poznámku pod čiarou. Po vytvorení PDF sa pripraví aj obrázkový náhľad, ktorý sa zobrazí v hlavnom okne aplikácie.
PDF ako výstup generovania
PDF je výsledný dokument určený na tlač, uloženie alebo zdieľanie. V aplikácii sa používa aj ako zdroj pre náhľad zobrazený v hlavnom okne.
Konfigurácia aplikácie¶
Konfiguráciu spravuje trieda AppConfig. Nastavenia sa ukladajú do súboru config.cfg.
Konfigurácia obsahuje napríklad informáciu o prvom spustení, zapnutí cloudového režimu, kód školy, posledný potvrdený mesiac, poznámku pod čiarou a veľkosti písma v PDF.
Predvolené hodnoty
Ak niektoré konfiguračné hodnoty chýbajú, aplikácia ich doplní predvolenými hodnotami. Vďaka tomu môže aplikácia fungovať aj po doplnení nových nastavení v ďalšej verzii.
Cloudová záloha¶
Cloudovú zálohu zabezpečuje trieda CloudBackupService. Tá pracuje s dátovým priečinkom aplikácie a cez WebDAV nahráva alebo sťahuje súbory z cloudového úložiska.
Cloudové akcie sa spúšťajú z menu aplikácie. Bežia vo vlastnom vlákne, aby počas nahrávania alebo sťahovania nezamrzlo používateľské rozhranie.
Cloud je manuálny
Cloudová záloha nie je automatická synchronizácia. Používateľ sám rozhoduje, kedy dáta odošle na cloud a kedy ich načíta späť.
Načítanie z cloudu môže prepísať lokálne dáta
Pri načítaní z cloudu sa lokálne súbory v dátovom priečinku môžu nahradiť cloudovou verziou. Preto je potrebné túto funkciu používať opatrne.
Zjednodušený tok údajov¶
Zjednodušene možno tok údajov v aplikácii opísať nasledovne:
Používateľ
↓
Hlavné okno a formuláre
↓
Repozitáre a konfiguračné triedy
↓
CSV súbory a config.cfg
↓
Generátor dozorov
↓
PDF generátor
↓
Náhľad a uloženie PDF
Hlavná výhoda návrhu
Aplikácia má jednoduchú a čitateľnú architektúru. Používateľské rozhranie, dátové súbory, generovanie dozorov, PDF výstup a cloudová záloha sú rozdelené do samostatných častí. Vďaka tomu sa aplikácia ľahšie udržiava a rozširuje.