}w !"#$%&'()+,-./012345
MASARYKOVA UNIVERZITA V BRNEˇ FAKULTA INFORMATIKY
Informacˇnı´ syste´m farnı´ho u´rˇadu BAKALA´RˇSKA´ PRA´CE
Ladislav Chodil
Brno, jaro 2004
Prohla´sˇenı´ Prohlasˇuji, zˇe tato bakala´rˇska´ pra´ce je my´m pu˚vodnı´m autorsky´m dı´lem, ktere´ jsem vypracoval samostatneˇ. Vsˇechny zdroje, prameny a literaturu, ktere´ jsem prˇi vypracova´nı´ pouzˇ´ıval nebo z nich cˇerpal, v pra´ci rˇa´dneˇ cituji s uvedenı´m u´plne´ho odkazu na prˇ´ıslusˇny´ zdroj.
Vedoucı´ pra´ce: RNDr. Toma´sˇ Pitner, Ph.D. ii
Shrnutı´ Prˇi sta´le veˇtsˇ´ım rozmachu informacˇnı´ch technologiı´ se pocˇ´ıtacˇe dosta´vajı´ do vsˇech organizacı´ a doma´cnostı´, a jsou tedy prˇirozeneˇ i na farnı´ch u´rˇadech. Objevuje se sta´le vı´ce veˇcı´, prˇi ktery´ch se da´ na fara´ch vyuzˇ´ıt pocˇ´ıtacˇ. Naprˇ´ıklad prˇi vytva´rˇenı´ ru˚zny´ch plaka´tu˚, popisku˚, ale take´ prˇi tisku vy´pisu˚ z matrik a porˇadu bohosluzˇeb s ohla´sˇkami. Proto je potrˇeba mı´t informacˇnı´ syste´m, ktery´ doka´zˇe vsˇechna potrˇebna´ data spravovat a v neˇjake´ pouzˇitelne´ formeˇ je prˇeda´vat uzˇivateli. Informacˇnı´ syste´m farnı´ho u´rˇadu by meˇl ulehcˇit zˇivot prˇedevsˇ´ım duchovnı´m, protozˇe by se meˇli spı´sˇe starat o duchovnı´ stra´nku farnosti. Jelikozˇ majı´ na starost i administrativnı´ za´lezˇitosti farnosti, meˇl by jim syste´m tyto pra´ce co nejvı´ce usnadnit a urychlit.
iii
Klı´cˇova´ slova Farnı´ informacˇnı´ syste´m, farnost, duchovnı´, farnı´k, sva´tost, bohosluzˇba
iv
Obsah ´ vod - popis syste´mu . . . . . . . . . . . . . . U Struktura syste´mu . . . . . . . . . . . . . . . . 2.1 Pouzˇite´ techniky a technologie . . . . . . . . 2.1.1 RMI (Remote Method Invocation) 2.1.2 MySQL . . . . . . . . . . . . . . . . 2.1.3 JDBC . . . . . . . . . . . . . . . . . 2.1.4 XML . . . . . . . . . . . . . . . . . 2.1.5 dom4j . . . . . . . . . . . . . . . . 2.1.6 Tisk v Javeˇ . . . . . . . . . . . . . . 2.2 Logicka´ struktura syste´mu . . . . . . . . . . 3 Datovy´ model . . . . . . . . . . . . . . . . . . . 4 Spusteˇnı´ a ukoncˇenı´ serveru a klienta . . . . . 5 Moduly . . . . . . . . . . . . . . . . . . . . . . . 5.1 Podpu˚rne´ trˇ´ıdy . . . . . . . . . . . . . . . . 5.2 Prˇeda´va´nı´ dat . . . . . . . . . . . . . . . . . 5.3 Seznamy (ja´dro) . . . . . . . . . . . . . . . . 5.3.1 Farnı´ci . . . . . . . . . . . . . . . . 5.3.2 Seznam duchovnı´ch . . . . . . . . 5.3.3 Seznam farnostı´ . . . . . . . . . . . 5.3.4 Seznam umı´steˇnı´ . . . . . . . . . . 5.3.5 Mimorˇa´dne´ akce . . . . . . . . . . 5.4 Na´bozˇenstvı´ . . . . . . . . . . . . . . . . . . 5.5 Bohosluzˇby . . . . . . . . . . . . . . . . . . 5.6 Matriky . . . . . . . . . . . . . . . . . . . . 5.6.1 Krˇestnı´ matrika . . . . . . . . . . . 5.6.2 Matrika snˇatku˚ . . . . . . . . . . . 5.6.3 Matrika pohrˇbu˚ . . . . . . . . . . . 5.7 Ostatnı´ sva´tosti . . . . . . . . . . . . . . . . 5.7.1 Prvnı´ svate´ prˇijı´ma´nı´ . . . . . . . . 5.7.2 Sva´tost birˇmova´nı´ . . . . . . . . . 5.7.3 Pomaza´nı´ nemocny´ch . . . . . . . 5.8 Kniha posˇty . . . . . . . . . . . . . . . . . . 5.9 Prˇ´ıjmy a vy´daje . . . . . . . . . . . . . . . . 6 Instalace syste´mu . . . . . . . . . . . . . . . . . 7 Nastavenı´ a spra´va syste´mu . . . . . . . . . . . 8 Za´veˇr . . . . . . . . . . . . . . . . . . . . . . . . Bibliografie . . . . . . . . . . . . . . . . . . . . . . . A Vytvorˇenı´ tabulek a indexu˚ v databa´zi . . . . B Uka´zky dialogu˚ . . . . . . . . . . . . . . . . . . C Tiskove´ vy´stupy . . . . . . . . . . . . . . . . . 1 2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 3 3 3 4 4 5 5 5 6 7 11 13 13 18 19 19 22 23 23 24 25 26 29 30 30 30 31 31 31 32 32 33 36 37 39 40 41 48 53
1
Kapitola 1
´ vod - popis syste´mu U Kazˇdy´ si asi dovede prˇedstavit, co je to farnost nebo kde sı´dlı´ v nasˇem meˇsteˇ cˇi obci. Ale uzˇ me´neˇ lidı´ vı´, co takova´ farnost potrˇebuje ke sve´ existenci a k cˇemu slouzˇ´ı. Za´kladem farnosti jsou farnı´ci, bez nichzˇ by farnost ani nemusela by´t, ktere´ vede duchovnı´ na cesteˇ k Bohu. Mimo to ma´ duchovnı´ i spoustu administrativnı´ch u´kolu˚. Krˇest’ane´ (farnı´ci) se setka´vajı´ s Bohem prˇi bohosluzˇba´ch konany´ch duchovnı´m (poprˇ. i farnı´ky), ktere´ je nutno evidovat a musı´me zna´t, kdo danou bohosluzˇbu slouzˇil nebo zda prˇi nı´ nebyla udeˇlena neˇktera´ sva´tost. Sva´tost krˇtu a sva´tost manzˇelstvı´ je nutno zaznamenat take´ do matrik (krˇestnı´ a snˇatku˚). Dalsˇ´ım u´konem zaznamena´vany´m do matriky je pohrˇeb (matrika pohrˇbu˚). U farnı´ka je nutno take´ evidovat, kdy prˇijal prvnı´ svate´ prˇijı´ma´nı´, birˇmova´nı´ a poprˇ. i sva´tost nemocny´ch. Farnı´ u´rˇady zprostrˇedkova´vajı´ take´ vy´uku na´bozˇenstvı´ (nejen pro sˇkolou povinne´). Ta musı´ by´t take´ zaznamena´na, vcˇetneˇ farnı´ku˚, kterˇ´ı hodiny navsˇteˇvujı´. Kazˇda´ farnost musı´ da´le evidovat prˇ´ıchozı´ a odchozı´ posˇtu, vcˇetneˇ dokumentu˚, ktere´ vydala nebo prˇijala. Dalsˇ´ı nutnostı´ je evidence prˇ´ıjmu˚ a vy´daju˚ farnosti. Duchovnı´ spra´vce veˇtsˇinou spravuje vı´ce farnostı´ najednou, ale sı´dlı´ pouze na jedne´ farˇe. Proto by syste´m meˇl umozˇnˇovat spra´vu vı´ce farnostı´ jednı´m informacˇnı´m syste´mem. Porˇad bohosluzˇeb a vy´uka na´bozˇenstvı´ jsou spolecˇne´ pro vsˇechny spravovane´ farnosti, ale spra´va matrik, prˇ´ıjmy a vy´daje nebo kniha posˇty musı´ by´t pro kazˇdou farnost zvla´sˇt’. V Olomoucke´ arcidiece´zi dosud tento syste´m neexistuje, i kdyzˇ neˇktere´ farnosti pouzˇ´ıvajı´ primitivnı´ verzi podobne´ho informacˇnı´ho syste´mu. Tato bakala´rˇska´ pra´ce ma´ syste´m navrhnout a implementovat. V na´sledujı´ch kapitola´ch je popsa´n na´vrh syste´mu a nastı´neˇna implementace. Ve druhe´ kapitole se zaby´va´m strukturou syste´mu, technikami a technologiemi pouzˇity´mi prˇi implementaci. Trˇetı´ kapitola popisuje datovy´ model a cˇtvrta´ pojedna´va´ o startu a ukoncˇenı´ serveru a klienta. Pa´ta´ kapitola se zaby´va´ implementacı´ jednotlivy´ch modulu˚. O tom, jak nainstalovat syste´m, pojedna´va´ kapitola sˇesta´. Prˇedposlednı´ kapitola ukazuje mozˇnosti nastavenı´ serveru a poslednı´ obsahuje souhrn dosazˇeny´ch vy´sledku˚.
2
Kapitola 2
Struktura syste´mu Syste´m je implementova´n v jazyce Java a je vybudova´n jako vı´ceuzˇivatelsky´. Proto je syste´m rozdeˇlen na dveˇ cˇa´sti, server a klienta. Serverova´ cˇa´st obsahuje metody, ktere´ komunikujı´ s databa´zı´ a klientem, a prˇeda´va´ mezi nimi data. Komunikace mezi klientem a serverem je zprostrˇedkova´na pomocı´ vzda´lene´ho vola´nı´ metod RMI (Remote Method Invocation). Mezi serverem a databa´zı´ zajisˇt’uje komunikaci rozhranı´ JDBC. Server i klient vyuzˇ´ıvajı´ pro ukla´da´nı´ nastavenı´ XML a k procha´zenı´ XML dokumentu˚ pouzˇ´ıvajı´ knihovnu dom4j. Vsˇechny tyto technologie jsou popsa´ny nı´zˇe.
2.1
Pouzˇite´ techniky a technologie
Jednotlive´ techniky a technologie jsou popsa´ny jen z cˇa´sti pouzˇite´ v syste´mu. Kompletnı´ popis technologiı´ je dostupny´ na Internetu. 2.1.1 RMI (Remote Method Invocation) RMI, neboli vzda´lene´ vola´nı´ metod, umozˇnˇuje komunikaci dvou procesu˚ loka´lneˇ i vzda´leneˇ. Vsˇechny da´le zminˇovane´ trˇ´ıdy a rozhranı´ se nacha´zejı´ v balı´cˇcı´ch java.rmi nebo java.rmi. server. Dokumentace viz [RMI]. Pro vzda´lenou komunikaci je potrˇeba vytvorˇit rozhranı´ (rozsˇirˇujı´cı´ rozhranı´ Remote) s metodami, ktere´ budou dostupne´ vzda´leneˇ. Toto rozhranı´ bude implementovat trˇ´ıda, ktera´ musı´ za´rovenˇ rozsˇirˇovat trˇ´ıdu UnicastRemoteObject nebo v konstruktoru volat jejı´ statickou metodu UnicastRemoteObject.exportObject(object) a jako parametr object prˇedat instanci trˇ´ıdy, implementujı´cı´ rozhranı´ Remote. Veˇtsˇinou to bude aktua´lnı´ instance trˇ´ıdy, ve ktere´ vola´me tuto metodu, proto bude argumentem this. Po prˇekladu trˇ´ıdy, implementujı´cı´ interface Remote, musı´me jesˇteˇ zadat prˇ´ıkaz rmic jme´no trˇı´dy, ktery´ vytvorˇ´ı objekty typu stub a skeleton pro danou trˇ´ıdu. Objekt typu stub se pouzˇ´ıva´ na straneˇ klienta pro prˇevod vola´nı´ metod na bajtovy´ proud, k odesı´la´nı´ vytvorˇene´ho proudu a ke zpracova´va´nı´ vra´ceny´ch informacı´ ze serveru. Na straneˇ serveru se naopak pouzˇ´ıva´ objekt typu skeleton, ktery´ slouzˇ´ı pro cˇtenı´ dat prˇijaty´ch od klienta, k jejich prˇevodu na vola´nı´ metody a k vra´cenı´ vy´sledku konane´ metody. Aby takto vytvorˇena´ trˇ´ıda byla dostupna´ na sı´ti, musı´me ji zaregistrovat pomocı´ metody Naming.bind(), ktera´ vyzˇaduje dva argumenty: r ˇete ˇzec, ktery´ bude tento objekt v sı´ti identifikovat a odkaz na samotny´ objekt. Tuto metodu mu˚zˇeme volat i ve trˇ´ıdeˇ, jejı´zˇ instance bude po sı´ti dostupna´, a to vola´nı´m metody Naming.bind(”RMIObject”, this). Vola´nı´ te´to metody mu˚zˇe vyvolat vyjı´mku AlreadyBoundException, pokud je pod zadany´m jme´nem zaregistrova´na jina´ trˇ´ıda nebo RemoteException, pokud nejsou kontaktova´ny registry, ktere´ musı´ by´t spusˇteˇny prˇed vola´nı´m te´to metody. Registry se spousˇteˇjı´ prˇ´ıkazem rmiregistry z prˇ´ıkazove´ho rˇa´dku nebo v programu vytvorˇenı´m registru r prˇipojene´ho ke standartnı´mu portu Registry r = LocateRegistry.createRegistry( Registry.REGISTRY_PORT); 3
ˇ ITE´ TECHNIKY A TECHNOLOGIE 2.1. POUZ nebo k portu vlastnı´mu. Pro takto vznike´ registry nepouzˇijeme metodu Naming.bind(), ale r.bind(). Pokud chceme prˇeda´vat vzda´lene´ metodeˇ neˇjaky´ objekt, musı´ tento objekt implementovat rozhranı´ java.io.Serializable, ktery´ je prˇeda´va´n vzda´lene´ metodeˇ hodnotou. Jinou mozˇnostı´ je prˇeda´vat odkaz na instanci trˇ´ıdy implementujı´cı´ rozhranı´ Remote (popsane´ vy´sˇe). To se take´ ty´ka´ objektu˚ vraceny´ch ze vzda´lene´ metody pomocı´ return. U primitivnı´ch typu˚ probı´ha´ prˇeda´va´nı´ parametru˚ obvykly´m zpu˚sobem (hodnotou). 2.1.2 MySQL Databa´zovy´ server, ktery´ je pouzˇit pro ukla´da´nı´ dat v informacˇnı´m syste´mu. Dalsˇ´ı informace mu˚zˇeme nale´zt naprˇ´ıklad v knize Naucˇte se MySQL za 21 dnı´ [Mza21] neba na internetovy´ch stra´nka´ch www.mysql.com [MySQL]. 2.1.3 JDBC Technologie umozˇnˇujı´cı´ komunikaci mezi programem v Javeˇ a databa´zı´. Pro Javu a MySQL je pouzˇit produkt Connector/J[MySQL]. Na´sledujı´cı´ vy´klad platı´ obecneˇ i pro ostatnı´ databa´ze. Metody, u nichzˇ nebude zada´n balı´cˇek, budou patrˇit do java.sql. Dokumentace k JDBC viz [JDBC]. Nejdrˇ´ıve je nutne´ zaregistrovat ovladacˇ JDBC v programu, ktery´ bude komunikovat s dataˇe”).newInstance(), ba´zı´. K tomu pouzˇijeme metodu Class.forName(”tr ˇı ´da ovladac kde jako parametr zada´me na´zev trˇ´ıdy, ktera´ obsahuje ovladacˇ pro danou databa´zi (v prˇ´ıpadeˇ MySQL je to com.mysql.jdbc.Driver). Pak uzˇ stacˇ´ı pouze vytvorˇit prˇipojenı´ k databa´zi, kdy je nutne´ zadat uzˇivatelske´ jme´no, heslo, na´zev databa´ze a jme´no serveru, kde MySQL beˇzˇ´ı (poprˇ. i jina´ nastavenı´ - viz dokumentace MySQL). Prˇipojenı´ vytvorˇ´ıme pomocı´ na´sledujı´cı´ho ko´du. Connection con = DriverManager.getConnection( ”jdbc:mysql://host/jmeno_databaze/?user=uz ˇivatel&” + ”password=heslo&useUnicode=true&” + ”characterEncoding=latin2”); Pro pra´ci s cˇesˇtinou jsou do textu v argumentu prˇida´ny hodnoty atributu˚ useUnicode a characterEncoding s volbou ko´dova´nı´. Ted’ uzˇ stacˇ´ı pouze vytvorˇit instanci trˇ´ıdy Statement stm, kterou zı´ska´me vola´nı´m metody con.getStatement(). Pomocı´ te´to instance mu˚zˇeme posı´lat prˇ´ıkazy a dotazy databa´zi. Pro vykona´nı´ prˇ´ıkazu pouzˇijeme metodu stm.execute(command), kde prˇ´ıkaz zada´me jako parametr. Pokud byl prˇ´ıkaz chybneˇ zada´n nebo nastala jina´ komplikace prˇi vykona´nı´ prˇ´ıkazu, je vyvola´na vyjı´mka SQLException. Pokud chceme zı´skat z databa´zove´ tabulky data, musı´me pouzˇ´ıt metodu stm.executeQuery(query), kde query obsahuje SQL prˇ´ıkaz SELECT. Metoda vracı´ odkaz na instanci trˇ´ıdy ResultSet, ze ktere´ mu˚zˇeme zı´skat jednotliva´ data vra´cena´ SQL prˇ´ıkazem. ResultSet tvorˇ´ı tabulku, ve ktere´ se mu˚zˇeme pohybovat po rˇa´dcı´ch a zjisˇt’ovat data z jednotlivy´ch sloupcu˚. Procha´zet rˇa´dky mu˚zˇeme neˇkolika zpu˚soby. Absolutneˇ metodou absolute( int row) s parametrem cˇ´ısla rˇa´dku nebo relativneˇ po vola´nı´ metody first(), ktera´ prˇesune vnitrˇnı´ ukazatel na prvnı´ pozici a vra´tı´ true. Pokud vy´sledek nema´ zˇa´dny´ rˇa´dek, vra´tı´ false. Pak mu˚zˇeme pouzˇ´ıt metody next(), previous() nebo relative() s prˇedany´m pocˇtem rˇa´dku˚, o ktere´ se ma´ ukazatel posunout. Aktua´lnı´ cˇ´ıslo rˇa´dku zı´ska´me pomocı´ metody getRow(). Kdyzˇ se nacha´zı´me na hledane´m rˇa´dku, zı´ska´me data rˇadou metod zacˇ´ınajı´cı´ch get...(). Nejpouzˇ´ıvaneˇjsˇ´ımi se mi jevı´ metody getInt() a getString(). Vsˇem teˇmto metoda´m se zada´va´ jako parametr c ˇı ´slo sloupce (pocˇ´ınaje jednicˇkou) nebo jme ´no sloupce, jak bylo definova´no v prˇ´ıkazu SELECT. 4
ˇ ITE´ TECHNIKY A TECHNOLOGIE 2.1. POUZ 2.1.4 XML XML vycha´zı´ z jazyka SGML a umozˇnˇuje vytva´rˇet strukturovane´ dokumenty vhodne´ pro uchova´va´nı´ dat. Struktura je tvorˇena pomocı´ znacˇek (tagu˚), jejichzˇ na´zvy jsou vlozˇeny do sˇpicˇaty´ch za´vorek (<example>). Kazˇdy´ XML dokument musı´ zacˇ´ınat specia´lnı´ znacˇkou , kde atribut version urcˇuje pouzˇitou verzi XML1 a atribut encoding urcˇuje ko´dova´nı´ dokumentu. Pokud je tento atribut vynecha´n, pouzˇije se implicitnı´ ko´dova´nı´ UTF-8. Kazˇdy´ XML dokument musı´ obsahovat pouze jednu korˇenovou znacˇku
, ktera´ se da´le pomocı´ dalsˇ´ıch znacˇek strukturovaneˇ veˇtvı´. Kazˇda´ pocˇa´tecˇnı´ znacˇka musı´ mı´t k sobeˇ znacˇku koncovou . Pokud znacˇka nenı´ pa´rova´, musı´ se lomı´tko napsat na konec znacˇky . Kazˇda´ znacˇka mu˚zˇe mı´t atributy s hodnotou. Zapisujı´ se za jme´no znacˇky: . Data se vkla´dajı´ mezi pa´rove´ znacˇky. Nepa´rove´ znacˇky slouzˇ´ı naprˇ. pro vkla´da´nı´ obra´zku˚, jiny´ch dokumentu˚ atd. Prˇ´ıklad vy´sledne´ho XML dokumentu mu˚zˇeme videˇt na prˇ´ıkladu 2.1.1. Specifikaci XML nalezneme v [XML]. Prˇ´ıklad 2.1.1: XML dokument data ve vnor ˇene ´m tagu
2.1.5 dom4j Knihovna dom4j je zalozˇen na technologii DOM a umozˇnˇuje pra´ci nad dokumenty XML. Nacˇ´ıta´ dokument jako stromovou strukturu, ve ktere´ se mu˚zˇeme pohybovat, cˇ´ıst, mazat, prˇida´vat nebo modifikovat data mazi jednotlivy´mi znacˇkami, znacˇky a atributy i s jejich hodnotami. Dalsˇ´ı informace viz [dom4j]. 2.1.6 Tisk v Javeˇ Trˇ´ıdy obsluhujı´cı´ tisk se nacha´zejı´ v balı´cˇku java.awt.print. Nejdu˚lezˇiteˇjsˇ´ı je trˇ´ıda PrinterJob, ktera´ obsluhuje tisk. Jejı´ instanci zı´ska´me statickou metodou PrinterJob.getPrinterJob(). Vykreslenı´ tisknute´ stra´nky obsluhuje trˇ´ıda implementujı´cı´ rozhranı´ Printable, ktere´ obsahuje pouze metodu print(Graphics graphics, PageFormat pageFormat, int pageIndex). Parametr pageFormat rˇ´ıka´, jaky´ je logicky´ forma´t stra´nky, pageIndex uda´va´ 1.
zatı´m je pouze jedina´ verze 1.0, ale pouzˇitı´ tohoto atributu slouzˇ´ı pro zpeˇtnou kompatibilitu s dalsˇ´ımi verzemi
5
´ STRUKTURA SYSTE´MU 2.2. LOGICKA cˇ´ıslo tisknute´ stra´nky a graphics je graficka´ komponenta, na kterou vykreslı´me tisknutou stra´nku. Na´vratova´ hodnota je typu int a mu˚zˇe mı´t dveˇ hodnoty: Printable.PAGE EXISTS, pokud je stra´nka prˇipravena na tisk, nebo hodnota Printable.NO SUCH PAGE, kdyzˇ stra´nka pro tisk urcˇena nenı´. Prˇi tisku vola´ trˇ´ıda PrinterJob metodu print() s indexy cˇ´ıslovany´mi od jednicˇky tak dlouho, dokud nevra´tı´ Printable.NO SUCH PAGE. Trˇ´ıda PrinterJob obsahuje dialogy umozˇnˇujı´cı´ nastavenı´ vzhledu stra´nky a nastavenı´ tisku. Dialog pro nastavenı´ forma´tu stra´nky zobrazı´me z instance trˇ´ıdy PrinterJob metodou printerJob.pageDialog(pageFormat), kde parametr pageFormat obsahuje odkaz na stary´ forma´t stra´nky (novy´ forma´t je vra´cen jako na´vratova´ hodnota). Pro nastavenı´ tisku zavola´me metodu printerJob.printDialog() nastavujı´cı´ hodnoty pro tisk. Trˇ´ıdu obsluhujı´cı´ tisk nastavı´me do instance trˇ´ıdy PrinterJob metodou setPrintable(), kde je parametrem odkaz na tuto trˇ´ıdu. Pro tisk zavola´me metodu printerJob.print().
2.2
Logicka´ struktura syste´mu
Jak jizˇ bylo rˇecˇeno, syste´m se skla´da´ ze dvou cˇa´stı´ - klienta a serveru komunikujı´cı´ho s databa´zı´. Klient tedy nemusı´ veˇdeˇt, zˇe neˇjaka´ databa´ze existuje nebo kde se nacha´zı´. Stacˇ´ı mu pouze informace o tom, kde se nacha´zı´ server. Dalsˇ´ı informacı´, kterou musı´ klient veˇdeˇt prˇed prˇihla´sˇenı´m do syste´mu, je prˇihlasˇovacı´ jme´no a heslo uzˇivatele. Tyto informace se zada´vajı´ prˇi spusˇteˇnı´ klientske´ cˇa´sti spolu se jme´nem pocˇ´ıtacˇe, kde server beˇzˇ´ı. Server pak na za´kladeˇ teˇchto informacı´ prˇ´ıstup povolı´ nebo ho zamı´tne. Vsˇechny potrˇebne´ informace nalezne v databa´zi, kde jsou v tabulce ulozˇeni vsˇichni uzˇivatele´ a jejich hesla. Jelikozˇ vsˇichni uzˇivatele´ syste´mu potrˇebujı´ mı´t prˇ´ıstup ke vsˇem datu˚m a musı´ mı´t mozˇnost jejich aktualizace, neexistujı´ zˇa´dna´ jina´ prˇ´ıstupova´ pra´va. Proto vsˇichni, kdo se do syste´mu prˇihla´sı´, mohou deˇlat vsˇechny operace, ktere´ jsou v syste´mu dostupne´. Server nepovoluje vı´cena´sobne´ prˇihla´sˇenı´ te´hozˇ uzˇivatele. Server umozˇnˇuje posı´lat signa´l klientu˚m o tom, zˇe byl v neˇjake´ tabulce zmeˇneˇn za´znam. Klient tak mu˚zˇe automaticky seznam za´znamu˚ aktualizovat, pokud ho ma´ pra´veˇ otevrˇen. Vsˇechna data jsou v prvnı´ fa´zi zprˇ´ıstupnˇova´nı´ zobrazena jako seznam, kde si uzˇivatel zvolı´ ´ daje k jednomu za´znamu jsou z databa´ze za´znam, ke ktere´mu chce podrobneˇjsˇ´ı informace. U nacˇteny a vra´ceny v objektu obsahujı´cı´m metody pro zı´ska´nı´ nebo ulozˇenı´ dat. Po zmeˇneˇ u´daju˚ jsou data zmeˇneˇna v databa´zi opeˇt podle dat v tomto objektu, ktery´ je prˇeda´n metodeˇ komunikujı´cı´ s databa´zı´. Jednotlive´ volby, ktere´ syste´m nabı´zı´, jsou rozdeˇleny do jednotlivy´ch kategoriı´ (veˇtsˇinou podle toho, do ktere´ho modulu spadajı´). Kazˇda´ kategorie ma´ v hlavnı´m okneˇ klienta jednu polozˇku v hornı´m menu, ktera´ se da´le deˇlı´ na jednotlive´ volby.
6
Kapitola 3
Datovy´ model Datovy´ model slouzˇ´ı k popisu struktury dat, ktere´ chceme v informacˇnı´m syste´mu uchova´vat. Cely´ datovy´ model je pro veˇtsˇ´ı prˇehlednost rozdeˇlen na neˇkolik cˇa´stı´ podle jednotlivy´ch modulu˚. Ko´d pro vytvorˇenı´ vsˇech tabulek a indexu˚ v databa´zi je v prˇ´ıloze A. Ja´dro Za´kladnı´ cˇa´st datove´ho modelu tvorˇ´ı entity Farnı´k, Duchovnı´, Farnost, Umı´steˇnı´ a Dekret. Do tohoto modulu take´ patrˇ´ı entita Mimorˇa´dna´ akce. Na´sleduje obra´zek a popis entit.
Obra´zek 3.1: Entity Farnı´k, Duchovnı´, Farnost, Umı´steˇnı´, Dekret a Mimorˇa´dna´ akce •
Farnı´k je kazˇda´ osoba hla´sı´cı´ se k rˇ´ımskokatolicke´ cı´rkvi a patrˇ´ıcı´ do urcˇite´ farnosti.
•
Duchovnı´ je kazˇda´ osoba, ktera´ prˇijala sveˇcenı´ v urcˇite´m stupni od biskupa dane´ diece´ze.
•
Farnost je urcˇite´, natrvalo zrˇ´ızene´ spolecˇenstvı´ krˇest’anu˚ v mı´stnı´ cı´rkvi, sveˇrˇene´ pod vedenı´m diece´znı´ho biskupa do pastoracˇnı´ pe´cˇe fara´rˇi jako jejı´mu vlastnı´mu pasty´rˇi. Kazˇda´ farnost ma´ sve´ sı´dlo a je identifikova´no svy´m ICˇem.
•
Dekret je poveˇrˇovacı´ listina urcˇujı´cı´ funkci, kterou ma´ duchovnı´ zasta´vat ve farnosti.
•
Umı´steˇnı´m se cha´pe objekt slouzˇ´ıcı´ k cˇinnosti farnosti.
•
Mimorˇa´dna´ akce je kazˇda´ akce, ktera´ nema´ charakter bohosluzˇby nebo vy´uky na´bozˇenstvı´ (pravidelna´ akce).
7
3. DATOVY´ MODEL Na´bozˇenstvı´ a bohosluzˇby Da´le na´sleduje popis entit modulu˚ Na´bozˇenstvı´ a Bohosluzˇby, kde prˇibyla entita Hodina na´bozˇenstvı´, Rocˇnı´k na´bozˇenstvı´ a entita Bohosluzˇba. Na obra´zku jsou pro prˇehlednost vztahu˚ pouzˇity take´ entity definovane´ drˇ´ıve, ale jizˇ u nich nebudou uvedeny atributy (kromeˇ prima´rnı´ho klı´cˇe).
Obra´zek 3.2: Entity Hodina na´bozˇenstvı´, Rocˇnı´k na´bozˇenstvı´ a Bohosluzˇba •
Hodina na´bozˇenstvı´ je vyucˇovacı´ hodina identifikovana´ svy´m cˇasem, mı´stem kona´nı´ a osobou, ktera´ danou hodinu vede1 .
•
Rocˇnı´k na´bozˇenstvı´ je seznam hodin na´bozˇenstvı´ konany´ch v jednom vyucˇovacı´m roce, ktery´ je shodny´ se sˇkolnı´m rokem.
•
Bohosluzˇba je posva´tny´ u´kon, ktery´ ma´ dva typy. Je to bohosluzˇba sva´tostna´, kterou mohou vykona´vat pouze duchovnı´ a bohosluzˇba nesva´tostna´, ktera´ mu˚zˇe by´t vykona´va´na i farnı´kem.
Aby mohl by´t typ bohosluzˇby pojmenova´n, poprˇ´ıpadeˇ i obsahovat dalsˇ´ı u´daje, nacha´zı´ se v syste´mu jesˇteˇ entita Typ bohosluzˇby s prima´rnı´m klı´cˇem ID, na ktery´ odkazuje atribut typ v entiteˇ Bohosluzˇba. Matriky Dalsˇ´ı cˇa´stı´ datove´ho modelu jsou za´znamy v jednotlivy´ch matrika´ch. Jedna´ se o krˇestnı´ matriku, matriku snˇatku˚ a matriku pohrˇbu˚. •
Matrika je kniha, ktera´ ma´ trˇi typy. Podle typu obsahuje za´znamy o udeˇlenı´ sva´tosti krˇtu, sva´tosti manzˇelstvı´ a pohrˇbu. Kazˇda´ farnost ma´ sve´ matriky pro vsˇechny trˇi typy. Kazˇda´ matrika ma´ sve´ cˇ´ıslo svazku, ktery´m se matriky stejne´ho typu ve stejne´ farnosti odlisˇujı´.
•
Za´znam v krˇestnı´ matrice popisuje jeden krˇest, kde je uvedeny´ krˇteˇnec, kmotr a bohosluzˇba, prˇi ktere´ byl krˇest udeˇlen. Z bohosluzˇby zı´ska´me spoustu dalsˇ´ıch informacı´ jako datum, mı´sto a duchovnı´ho, ktery´ krˇtil.
1. vyucˇovat na´bozˇenstvı´ mu˚zˇe jak duchovnı´, tak farnı´k, ale musı´ by´t katechetou
8
3. DATOVY´ MODEL
Obra´zek 3.3: Entity Matrika, Za´znam v krˇestnı´ matrice, Za´znam v matrice snˇatku˚ a Za´znam v matrice pohrˇbu˚ •
Za´znam v matrice snˇatku˚ popisuje jedno udeˇlenı´ sva´tosti manzˇelstvı´, kde jsou uvedeni oba snoubenci, dva sveˇdkove´ a opeˇt bohosluzˇba, prˇi nı´zˇ byla sva´tost udeˇlena.
•
Za´znam v matrice pohrˇbu˚ popisuje jeden pohrˇeb, kde je uveden zemrˇely´ a bohosluzˇba.
Kazˇdy´ za´znam v matrice obsahuje odkaz na matriku, ve ktere´ se za´znam nacha´zı´ (zastupuje ji svazek), da´le je uvedeno cˇ´ıslo stra´nky, porˇadove´ cˇ´ıslo a rok. Ostatnı´ sva´tosti Mezi ostatnı´ sva´tosti patrˇ´ı sva´tost eucharistie, u nı´zˇ evidujeme pouze prvnı´ svate´ prˇijı´ma´nı´2 , da´le sva´tost pomaza´nı´ nemocny´ch a birˇmova´nı´. •
Prvnı´ svate´ prˇijı´ma´nı´ eviduje prˇijetı´ prvnı´ho svate´ho prˇijı´ma´nı´ prˇi dane´ bohosluzˇbeˇ.
•
Pomaza´nı´ nemocny´ch prˇi bohosluzˇbeˇ eviduje prˇijetı´ te´to sva´tosti farnı´kem prˇi dane´ bohosluzˇbeˇ.
•
Pomaza´nı´ nemocny´ch bez bohosluzˇby eviduje prˇijetı´ te´to sva´tosti farnı´kem mimo bohosluzˇbu (naprˇ. v nemocnici).
•
Birˇmova´nı´ popisuje prˇijetı´ sva´tosti birˇmova´nı´ prˇi dane´ bohosluzˇbeˇ dany´m farnı´kem, ktery´ ma´ za kmotra jine´ho farnı´ka.
2. zaznamena´va´nı´ dalsˇ´ıch prˇijetı´ sva´tosti eucharistie nema´ zˇa´dny´ vy´znam a pro pocˇet nenı´ ani zjistitelny´
9
3. DATOVY´ MODEL
Obra´zek 3.4: Entity Prvnı´ svate´ prˇijı´ma´nı´, Pomaza´nı´ nemocny´ch prˇi bohosluzˇbeˇ a bez bohosluzˇby a entita Birˇmova´nı´ Kniha posˇty a Prˇı´jmy a vy´daje Moduly slouzˇ´ıcı´ pro evidenci prˇ´ıchozı´ a odchozı´ posˇty a da´le prˇ´ıjmu˚ a vy´daju˚ farnosti. •
Kniha posˇty slouzˇ´ı k evidenci prˇ´ıchozı´ a odchozı´ korespondence.
•
Prˇ´ıjmy a vy´daje slouzˇ´ı k evidenci toku financˇnı´ch prostrˇedku˚ ve farnosti.
Obra´zek 3.5: Entity Kniha posˇty a Prˇ´ıjmy a vy´daje
10
Kapitola 4
Spusteˇnı´ a ukoncˇenı´ serveru a klienta Spusˇteˇnı´ serveru Prvnı´, co je nutne´ udeˇlat, aby jsme mohli pracovat, je spusˇteˇnı´ serveru. Ten spustı´me pomocı´ prˇ´ıkazu java fis.server.RMIServer a CLASSPATH musı´ obsahovat cestu na JAR archı´vy s JDBC a dom4j a cestu na umı´steˇnı´ souboru˚ s prˇelozˇeny´mi trˇ´ıdami serveru. Prˇi spousˇteˇnı´ se nejdrˇ´ıve vytva´rˇ´ı mapa prˇihla´sˇeny´ch klientu˚, pote´ se nacˇ´ıta´ nastavenı´ serveru pomocı´ trˇ´ıdy ServerProperties. Pokud soubor s nastavenı´m neexistuje (˜/.fis/serverFIS.xml), je spusˇteˇn dialog umozˇnˇujı´cı´ nastavenı´ serveru. Dalsˇ´ı informace k nastavenı´ jsou v kapitole 7. Na´sleduje registrace ovladacˇe JDBC. Pokud by ovladacˇ nebyl nalezen, bude server ukoncˇen. Pokud se tak nestane, dojde k zaregistova´nı´ trˇ´ı na´sledujı´cı´ch trˇ´ıd do rmiregistru˚. Jsou to RemoteLoginManager pro prˇihla´sˇenı´ uzˇivatele do syste´mu, RemoteKillServer pro ukoncˇenı´ serveru a RemoteSetProperties pro vza´lene´ nastavenı´ serveru. Vsˇechny tyto trˇ´ıdy jsou vnitrˇnı´mi trˇ´ıdami RMIServer a implementujı´ rozhranı´ LoginManager, KillServer a SetProperties. Jako poslednı´ akcı´ je povolenı´ prˇihlasˇova´nı´ uzˇivatelu˚ (prˇirˇazenı´m newUser = true). Spusˇteˇnı´ klienta Od te´to doby je server dostupny´ na sı´ti a mu˚zˇeme tedy zacˇ´ıt se spousˇteˇnı´m klienta. K prˇipojenı´ musı´me zna´t uzˇivatelske´ jme´no, heslo a jme´no stroje, kde je FISServer spusˇteˇn. Klienta spustı´me prˇ´ıkazem java fis.client.LoginFrame a CLASSPATH musı´ odbsahovat cestu na JAR archı´vy s dom4j a JavaHelp a cestu na umı´steˇnı´ souboru˚ s prˇelozˇeny´mi trˇ´ıdami klienta. Prˇi spusˇteˇnı´ mu˚zˇeme take´ zadat trˇi argumenty (jme´no, heslo a stroj se serverem), pokud nezada´me nic nebo jen neˇktere´ parametry, zobrazı´ se dialog (obr. B.1) pro zada´nı´ jme´na, hesla a stroje. Prˇed zobrazenı´m se nacˇtou z XML dokumentu ˜/.fis/loginFrame.xml hodnoty, ktere´ byly zada´ny prˇi poslednı´m spusˇteˇnı´. Nacˇtenı´ hodnot zprostrˇedkova´va´ trˇ´ıda LoginFrameProperties obsahujı´cı´ metody pro vra´cenı´ posledneˇ zadany´ch hodnot. Argumenty zadane´ prˇi spusˇteˇnı´ majı´ prˇednost prˇed hodnotami posledneˇ pouzˇity´mi. V dialogu mu˚zˇeme zasˇkrtnout polı´cˇko Ulozˇit heslo, aby jsme ho prˇi prˇ´ısˇtı´m spusˇteˇnı´ nemuseli zada´vat. Po kliknutı´ na tlacˇ´ıtko OK se odesˇle dotaz na prˇihla´sˇenı´ k serveru. Nejdrˇ´ıve musı´me zı´skat odkaz na LoginManager lm, ktery´ na´m umozˇnı´ prˇ´ıstup k serveru. Zı´ska´me ho pomocı´ vola´nı´ metody (fis.server.LoginManager) Naming.lookup(”//stroj/fis/Login”), kde fis/Login je na´zev vzda´lene´ho objektu, pod ktery´m byl zaregistrova´n LoginManager prˇi spousˇteˇnı´ serveru a stroj je na´zev pocˇ´ıtacˇe, kde server beˇzˇ´ı. Prˇetypova´nı´ je nutne´, protozˇe metoda lookup() vracı´ odkaz na instanci rozhranı´ Remote a dı´ky tomu bychom nemohli pouzˇ´ıvat metody, ktere´ se nacha´zejı´ v rozhranı´ LoginManager. Pro zı´ska´nı´ odkazu na FISServer zavola´me vzda´leneˇ metodu lm.login(user, password, client), kde client je odkaz na tu cˇa´st klienta, ktera´ zprostrˇedkova´va´ zası´la´nı´ zpra´v od serveru (implementuje rozhranı´ FISClient, a v nasˇem prˇ´ıpadeˇ je to odkaz na instanci trˇ´ıdy RMIClient vytvorˇeny´ prˇed vola´nı´m te´to metody). Zbyle´ parametry jsou uzˇivatelske´ jme´no a heslo. Po zavola´nı´ metody login() se na straneˇ serveru nejdrˇ´ıve zjistı´, zda je povoleno prˇihlasˇova´nı´ novy´ch uzˇivatelu˚. Pokud ano, z tabulky users zı´ska´ informace, zda zadany´ uzˇivatel existuje a zda je zadane´ heslo spra´vne´. Nakonec si ulozˇ´ı odkaz na klienta do mapy s prˇihla´sˇe11
4. SPUSTEˇNI´ A UKONCˇENI´ SERVERU A KLIENTA ny´mi klienty a vra´tı´ odkaz na instanci trˇ´ıdy FISServer. Jednotlivı´ klienti jsou v mapeˇ ulozˇeni s klı´cˇem uzˇivatelske´ho jme´na, proto se mu˚zˇe jeden uzˇivatel prˇihla´sit pouze jednou, jinak bude jeho prˇ´ıstup odmı´tnut a vyvola´ se vyjı´mka LoginFailedException. Tato vyjı´mka je vyhozena i tehdy, pokud nesouhlası´ heslo nebo uzˇivatelske´ jme´no. Podrobneˇjsˇ´ı informace zjistı´me z vyjı´mky pomocı´ metody getMessage(). Klient (doposud reprezentova´n prˇihlasˇovacı´m oknem - LoginFrame) ulozˇ´ı prˇijaty´ odkaz na server do FISClienta. Pak nastavı´ zadane´ hodnoty z textovy´ch polı´ do instace trˇ´ıdy LoginFrameProperties a ulozˇ´ı XML dokument s hodnotami pomocı´ metody save() pro prˇ´ısˇtı´ pouzˇitı´. Nakonec vytvorˇ´ı a zobrazı´ hlavnı´ okno programu ClientFrame, ktere´ bude mı´t ulozˇen odkaz na instanci rozhranı´ FISClient pro zı´ska´nı´ odkazu na server. Nynı´ jizˇ nic nebra´nı´ pra´ci se syste´mem. Pokud se rozhodneme pra´ci ukoncˇit nebo ukoncˇit beˇh serveru, je postup na´sledujı´cı´. Ukoncˇenı´ klienta a serveru Ukoncˇenı´ klienta provedeme vola´nı´m metody logoutUserFromServer(), ktera´ zasˇle serveru informaci prˇes FISClienta, zˇe koncˇ´ıme. Server si tohoto klienta smazˇe z mapy prˇihla´sˇeny´ch uzˇivatelu˚ a klient je ukoncˇen. Pro ukoncˇenı´ serveru musı´me spustit prˇ´ıkaz java fis.server.KillFISServer s parametry na ´zev stroje, kde server beˇzˇ´ı, a heslo superuz ˇivatele. Pokud nenı´ jako parametr zada´no heslo, bude zada´nı´ umozˇneˇno po spusˇteˇnı´. Po te´ dojde ke kontrole hesla, a pokud je spra´vne´, na´sleduje ukoncˇenı´ serveru. Nejdrˇ´ıve se zaka´zˇe prˇihlasˇova´nı´ novy´ch uzˇivatelu˚ a pomocı´ metody smazNedostupneKlienty() se smazˇou nedostupnı´ klienti, ktere´ server pozna´ pomocı´ vola´nı´ metody zijes(), kterou vola´ ve vsˇech odkazech na instanci rozhranı´ FISClient. Pokud vypadne vyjı´mka RemoteException, je dany´ klient vymaza´n z mapy prˇihla´sˇeny´ch uzˇivatelu˚. Nakonec rozesˇle vsˇem zbyly´m klientu˚m informaci o tom, zˇe server bude ukoncˇen v na´sledujı´ch dvou minuta´ch. Na straneˇ klienta se zobrazı´ dialog s informacı´, zˇe server bude ukoncˇen beˇhem dvou minut. Po tuto dobu ma´ klient cˇas ulozˇit vsˇechnu rozdeˇlanou pra´ci a odpojit se od serveru. Na serveru je na´sledneˇ spusteˇno nove´ vla´kno, ktere´ cˇeka´ dveˇ minuty a za´rovenˇ kontroluje, zda se vsˇichni uzˇivatele´ uzˇ neodhla´sili. Pokud by k tomu dosˇlo, okamzˇiteˇ ukoncˇuje cˇinnost serveru. Po uplynutı´ dvou minut pocˇka´ jesˇteˇ pu˚l minuty pro prˇ´ıpad, zˇe klient zrovna ukla´da´ rozdeˇlanou pra´ci. Po tomto rezervnı´m cˇase je server ukoncˇen i kdyby byl neˇkdo sta´le prˇihla´sˇen. Prˇed u´plny´m ukoncˇenı´m je ulozˇeno nastavenı´ serveru, odregistrova´ny zaregistrovane´ RemoteObjekty z rmiregistru˚ a server je ukoncˇen.
12
Kapitola 5
Moduly Cely´ syste´m je rozdeˇlen na neˇkolik modulu˚. Kazˇdy´ modul je tvorˇen na straneˇ serveru jednou trˇ´ıdou, ktera´ zprostrˇedkova´va´ komunikaci s databa´zı´. Na straneˇ klienta je modul vzˇdy tvorˇen ne jednou, ale rˇadou trˇ´ıd vytva´rˇejı´cı´ch dialogy a panely komunikujı´cı´ s uzˇivatelem. Vsˇechny trˇ´ıdy jsou rozdeˇleny do jednotlivy´ch balı´cˇku˚ podle tohoto klı´cˇe. Trˇ´ıdy komunikujı´cı´ s databa´zı´ se nacha´zejı´ v balı´cˇku fis.server.modules, poprˇ. ve vnorˇene´m balı´cˇku models. Vsˇechny trˇ´ıdy na straneˇ klienta jsou ulozˇeny v balı´cˇku fis.client.gui, ktery´ se da´le deˇlı´ na balı´cˇky dialogs (obsahuje dialogy), panels (obsahuje panely pro vytva´rˇenı´ obsahu veˇtsˇiny dialogu˚) a frames (obsahuje okna pro zobrazenı´ seznamu˚ za´znamu˚). Objekty pro prˇeda´va´nı´ dat k za´znamu mezi klientem a serverem se nacha´zejı´ v balı´cˇku fis.object.
5.1
Podpu˚rne´ trˇı´dy
Trˇ´ıdy vsˇech modulu˚ majı´ svou za´kladnu na teˇchto podpu˚rny´ch trˇ´ıda´ch, ktere´ rozsˇirˇujı´. DatabaseMethods Na straneˇ serveru je to trˇ´ıda DatabaseMethods, ktera´ implementuje metody pro vykona´va´nı´ SQL prˇ´ıkazu˚. V konstruktoru vytvorˇ´ı spojenı´ s databa´zı´ dı´ky odkazu na server, odkud zı´ska´ nastavenı´ pomocı´ objektu FISServerProperties (mozˇnosti nastavenı´ viz. Kapitola 7). Trˇ´ıda obsahuje tyto metody: •
boolean execute(String command) - vykona´va´ SQL prˇ´ıkaz command a vracı´ true, pokud prˇ´ıkaz probeˇhl v porˇa´dku
•
int getLastInsertID(String command) - vracı´ poslednı´ ID vytvorˇene´ pomocı´ tohoto spojenı´1 ve sloupci definovane´m s atributem AUTO INCREMENT, kde parametr command zada´va´ prˇ´ıkaz, ktery´ se ma´ vykonat prˇed zı´ska´nı´m ID (veˇtsˇinou se jedna´ o prˇ´ıkaz INSERT; na mı´sto, kam se ma´ zadat ID, musı´ by´t zada´na hodnota NULL)
•
boolean existRecord(String query) - zjisˇtuje, zda vy´sledna´ sada po pouzˇitı´ dotazu query obsahuje neˇjaky´ za´znam
•
void sendSignalToClient(int typ, Object hodnota) - posı´la´ signa´l o zmeˇneˇ za´znamu typu typ, ktery´ je definova´n v rozhranı´ FISClient, a prˇeda´va´ hodnotu hodnota (mu˚zˇe by´t null, pokud nenı´ trˇeba zası´lat zˇa´dne´ blizˇsˇ´ı informace)
FISTableModel Prˇeda´va´nı´ seznamu˚ za´znamu˚ mezi serverem a klientem zprostrˇedkova´va´ trˇ´ıda fis.server .modules.models.DefaultFISTableModel implementujı´cı´ rozhranı´ FISTableModel ve stejne´m balı´cˇku. FISTableModel rozsˇirˇuje rozhranı´ Remote, a proto je trˇ´ıda DefaultFISTableModel vzda´leny´ objekt, ve ktere´m mu˚zˇeme volat metody. Mimo jine´ obsahuje metody podobne´ teˇm ze trˇ´ıdy javax.swing.table.TableModel: 1.
pouzˇitı´ te´to metody musı´ by´t synchronizovane´, jinak bychom nemuseli dostat na´mi zadane´ ID
13
ˇ I´DY ˚ RNE´ TR 5.1. PODPU •
int getColumnCount() - vracı´ pocˇet sloupcu˚ v tabulce
•
String getColumnName(int columnIndex) - vracı´ na´zev sloupce columnIndex.
•
int getRowCount() - vracı´ pocˇet rˇa´dku˚ v tabulce
•
Object getValueAt(int rowIndex, int columnIndex) - vracı´ objekt v rˇa´dku rowIndex a sloupci columnIndex.
•
boolean isCellEditable(int rowIndex, int columnIndex) - pokud je hodnota na rˇa´dku rowIndex a sloupci columnIndex meˇnitelna´, vracı´ true, cozˇ v nasˇem prˇ´ıpadeˇ nepovolujeme - vzˇdy tedy vracı´me hodnotu false
•
int getID(int row) - vracı´ ID za´znamu na rˇa´dku row, pokud zadany´ rˇa´dek neexistuje, je vra´cena hodnota -1
•
int getRow(int id) - vracı´ rˇa´dek, kde se nacha´zı´ za´znam s dany´m id. Pokud zadane´ ID neexistuje, je vra´cena -1
Trˇ´ıda DefaultFISTabelModel nemu˚zˇe implementovat rozhranı´ javax.swing.table. TableModel pro vykreslenı´ tabulky na straneˇ klienta, protozˇe je vzda´leny´m objektem a kazˇda´ jejı´ metoda mu˚zˇe vyvolat vyjı´mku RemoteException. Proto existuje trˇ´ıda RemoteFISTableModel na straneˇ klienta, ktera´ implementuje rozhranı´ TableModel. Ve sve´ vnitrˇnı´ promeˇnne´ ma´ odkaz na instanci rozhranı´ FISTabelModel, ze ktere´ zı´ska´va´ informace ze stejnojmenny´ch metod, ale vzˇdy musı´ osˇetrˇovat vyjı´mky RemoteException. Trˇ´ıdu RemoteFISTableModel jizˇ mu˚zˇeme pouzˇ´ıt prˇ´ımo pro vykreslenı´ tabulky se seznamem za´znamu˚. Trˇı´dy na straneˇ klienta Trˇ´ıdy, na ktery´ch stavı´ klient, jsou veˇtsˇinou abstraktnı´ a slouzˇ´ı pro jednodusˇsˇ´ı konstrukci objektu˚ JInternalFrame, Dialog a Panel. Patrˇ´ı sem trˇ´ıdy AbstractSeznamyIFrame, AbstractFISObjectDialog, AbstractChooseDialog, AbstractListPanel a AbstractEditableListPanel 2 . AbstractSeznamyIFrame Trˇ´ıda AbstractSeznamyIFrame slouzˇ´ı pro vytva´rˇenı´ seznamu˚ za´znamu˚. Tato abstraktnı´ trˇ´ıda vytva´rˇ´ı tlacˇ´ıtka Prˇidat objekt, Editovat/Zobrazit, Smazat, Vyhledat (zobrazuje se na pozˇadavek nadrˇazene´ trˇ´ıdy) a OK. Pro prvnı´ dveˇ tlacˇ´ıtka stacˇ´ı pouze implementovat trˇ´ıdy obsluhujı´cı´ uda´losti tlacˇ´ıtek pridatBTActionPerformed() a editShowBTActionPerformed(), ktery´m se prˇeda´va´ objekt typu ActionEvent. Pro obsluhu maza´nı´ stacˇ´ı implementovat metodu deleteObject(id), ktere´ je prˇeda´no jako parametr id ID odstranˇovane´ho objektu. V rozsˇirˇujı´cı´ metodeˇ stacˇ´ı vymazat za´znam z databa´ze. Prˇed smaza´nı´m za´znamu jsme ta´za´ni, zda chceme opravdu objekt smazat. Pokud chceme pouzˇ´ıt jiny´ text nezˇ „Chcete opravdu objekt smazat ze seznamu?“, mu˚zˇeme prˇekry´t metodu getPopisKSmazani(), ktera´ bude vracet text ota´zky. Po kazˇde´m provedenı´ prˇ´ıkazu prˇidej, edituj a smazˇ je nutno obnovit tabulku podle novy´ch za´znamu˚. Nety´ka´ se prˇ´ıpadu, kdy server posı´la´ zpra´vu3 o tom, zˇe dosˇlo ke zmeˇneˇ v za´znamech (cozˇ implicitneˇ deˇla´), protozˇe se tabulka obnovı´ automaticky. K dispocizi ma´me rˇadu metod obnovujı´cı´ tabulku: •
2. 3.
void setTableModel(FISTableModel tableModel) - parametr tableModel je typu FISTableModel a metoda podle tohoto modelu prˇenastavuje tabulku. Pokud seznam neobsahuje zˇa´dny´ za´znam, jsou zaka´za´na tlacˇ´ıtka Prˇidat a Smazˇ. trˇ´ıdy jsou rozdeˇleny podle klı´cˇe popsane´ho v u´vodu kapitoly server vola´ metodu refreshList(Object hodnota)
14
ˇ I´DY ˚ RNE´ TR 5.1. PODPU •
void refresh(int id) - parametr id urcˇujerˇa´dek se za´znamem. Pokud rˇa´dek s takovy´m ID v seznamu neexistuje, je oznacˇen rˇa´dek prvnı´.
•
void reLoadTableModel() - nejdrˇ´ıve zı´ska´ novy´ model tabulky a nastavı´ ho v tabulce jako vy´chozı´ pro vykreslova´nı´.
•
void reLoadTable() - shodna´ s reLoadTableModel(), ale navı´c si prˇed zı´ska´m nove´ho modelu zapamatuje ID oznacˇene´ho rˇa´dku a po prˇekreslenı´ se snazˇ´ı oznacˇit stejny´ rˇa´dek. Da´ se pouzˇ´ıt naprˇ´ıklad prˇi editaci, ale prˇi vkla´da´nı´ a mazanı´ se pouzˇ´ıt neda´.
•
void initTable() - inicializuje tabulku prˇi vytva´rˇenı´.
Pro zjednodusˇenı´ teˇchto metod existujı´ dalsˇ´ı metody pro prˇenastavenı´ tlacˇ´ıtek Prˇidat a Smazˇ a pro pra´ci s oznacˇenı´m rˇa´dku. •
void setTable() - pokud je v seznamu alesponˇ jeden za´znam, oznacˇuje prvnı´ za´znam, jinak zakazuje tlacˇ´ıtka Prˇidat a Smazˇ.
•
void refreshTableWith(int row) - snazˇ´ı se oznacˇit rˇa´dek prˇedany´ jako parametr row. Prˇed oznacˇenı´m dane´ho rˇa´dku se kontroluje, zda dany´ rˇa´dek existuje. Jinak je cˇ´ıslo rˇa´dku upraveno na rˇa´dek prvnı´ nebo poslednı´, poprˇ´ıpadeˇ zˇa´dny´, pokud neexistujı´ za´znamy.
SearchDialog Tlacˇ´ıtko Vyhledat je zobrazeno po vola´nı´ metody setSearchDialog(dialog), kde parametr dialog je typu SearchDialog a odkazuje na dialog s vyhleda´va´nı´m podle zadany´ch krite´riı´. Samotny´ dialog obsahuje tlacˇ´ıtka Zobraz a Zavrˇi v dolnı´ cˇa´sti a mozˇnost volby mezi vsˇemi za´znamy a vy´beˇrem v cˇa´sti hornı´. Prˇi vytva´rˇenı´ SearchDialogu prˇeda´me konstruktoru odkaz na instanci trˇ´ıdy SearchPanel nebo tento panel pro vyhleda´va´nı´ nastavı´me pozdeˇji pomocı´ metody setSearchPanel(SearchPanel searchPanel). Trˇ´ıda SearchPanel je abstraktnı´ a nadrˇazena´ trˇ´ıda musı´ implementovat tyto metody: •
FISTableModel getTableModel() - vracı´ model tabulky podle zadany´ch krite´riı´
•
void setEnabledPodminky(boolean enabled) - parametr enabled urcˇuje, zda majı´ by´t komponenty na panelu prˇ´ıstupne´ cˇi nikoli
Vyhleda´va´nı´ pak postupuje na´sledujı´cı´m zpu˚sobem. Po kliknutı´ na tlacˇ´ıtko Vyhledat se zobrazı´ vyhleda´vacı´ dialog, ktery´ ve strˇednı´ cˇa´sti vykreslı´ panel s mozˇnostı´ zada´nı´ krite´riı´ pro vyhleda´nı´. Pokud je zvolena hodnota Vsˇechny za´znamy, je panel s volbou krite´riı´ zablokovany´. Pokud je zvolena druha´ mozˇnost, mu˚zˇeme zadat vy´beˇr podle krite´riı´, ktera´ jsou dostupna´ v searchPanelu. Kazˇdy´ seznam, ktery´ nabı´zı´ vyhleda´va´nı´, implementuje vlastnı´ trˇ´ıdu deˇdı´cı´ SearchPanel, na ktere´m se nacha´zejı´ komponenty pro zada´nı´ hodnot urcˇeny´ch pro dany´ seznam. Po stisku tlacˇ´ıtka Zobraz se skryje okno a do vnitrˇnı´ promeˇnne´ se ulozˇ´ı informace o tom, zˇe okno nebylo zavrˇeno tlacˇ´ıtkem Zavrˇi4 . Okno se seznamem nejdrˇ´ıve z instance SearchDialog zjistı´, co bylo stisknuto. Jestlizˇe jsme stiskli tlacˇ´ıtko Zobraz, testuje, zda byly vybra´ny vsˇechny za´znamy. Pokud ano, obnovı´ tabulku pomocı´ metody reLoadTable(), jinak zavola´ metodu getTableModel() ve trˇ´ıdeˇ SearchDialog. Ta da´le vola´ stejnou metodu v instanci trˇ´ıdySearchPanel 5 , ktera´ vra´tı´ model tabulky podle zadany´ch krite´riı´. 4. 5.
stejny´ mechanismus je pouzˇit i u trˇ´ıdy AbstractFISObjectDialog, kde je popsa´n podrobneˇji pokud by panel nebyl nastaven, bude vra´ceno null a tabulka zu˚stane beze zmeˇny
15
ˇ I´DY ˚ RNE´ TR 5.1. PODPU AbstractFISObjectDialog Trˇ´ıda AbstractFISObjectDialog slouzˇ´ı pro vytva´rˇenı´ dialogu˚ zobrazujı´cı´ch informace o jednotlivy´ch objektech v syste´mu. Tato abstraktnı´ trˇ´ıda obsahuje v dolnı´ cˇa´sti okna tlacˇ´ıtka Ulozˇ a Zavrˇi. Pro obsluhu teˇchto tlacˇ´ıtek stacˇ´ı v deˇdı´cı´ trˇ´ıdeˇ implementovat metodu ulozBTActionPerformed(ActionEvent evt), uda´lost tlacˇ´ıtka Zavrˇi je jizˇ osˇetrˇena v te´to abstraktnı´ trˇ´ıdeˇ. Po ulozˇenı´ ani po zavrˇenı´ okna se dialog nemazˇe z pameˇti (metodou dispose()), ale pouze se nastavı´ vnitrˇnı´ promeˇnna´ wasCancel typu boolean, ktera´ rˇ´ıka´, cˇ´ım bylo okno uzavrˇeno. Metoda zobrazujı´cı´ tento dialog tak mu˚zˇe jednodusˇe zjistit, cˇ´ım bylo okno uzavrˇeno, a poprˇ´ıpadeˇ nava´zat dalsˇ´ı akci. Zda byl dialog uzavrˇen tlacˇ´ıtkem Zavrˇi zjistı´ metodou wasCancel(). Jestlizˇe je vra´cena hodnota false, bylo stisknuto tlacˇ´ıtko Ulozˇ. Tato vlastnost je umozˇneˇna vytvorˇenı´m „modal dialogu“ (tj. prˇeda´nı´m parametru modal hodnotu true). Metoda zobrazujı´cı´ dialog pak cˇeka´ na jeho zavrˇenı´. Samotna´ tlacˇ´ıtka by mnoho informacı´ asi nepoda´vala, proto trˇ´ıda obsahuje dveˇ metody pro vkla´da´nı´ panelu˚. Prvnı´ mozˇnostı´ je vlozˇit jeden hlavnı´ panel, ktery´ bude zabı´rat cele´ okno. Druhou mozˇnostı´ je pouzˇ´ıt za´lozˇky pro vı´ce panelu˚. Mu˚zˇeme pouzˇ´ıt na´sledujı´cı´ metody: •
void setRootPanel(JPanel panel) - nastavı´ v dialogu hlavnı´ panel panel
•
void addPanelToTabbedPane(String nazev, JPanel panel) - vlozˇ´ı do dialogu take´ jeden panel panel, ale tentokra´t do za´lozˇky, ktera´ ponese jme´no nazev. Metodu lze volat neˇkolikra´t a vzˇdy bude vytvorˇena nova´ za´lozˇka
Po vola´nı´ obou metod se vola´la´ metoda nastavDoprostred(), ktera´ nastavı´ potrˇebne´ hodnoty pro zobrazenı´ dialogu v prostrˇedku obrazovky. AbstractChooseDialog Trˇ´ıda AbstractChooseDialog slouzˇ´ı pro vy´beˇr jedne´ hodnoty z neˇkolika mozˇny´ch (mozˇnosti jsou zobrazeny v ComboBoxu). V dolnı´ cˇa´sti obsahuje tlacˇ´ıtka OK a Zavrˇi. Zˇa´dnou uda´lost teˇchto tlacˇ´ıtek nenı´ trˇeba implementovat, protozˇe pouze zavı´rajı´ okno, a jako u prˇedchozı´ trˇ´ıdy nastavujı´ promeˇnnou wasCancel. Je mozˇno zobrazit jesˇteˇ tlacˇ´ıtko Novy´, pro vytvorˇenı´ nove´ho objektu. Pro toto tlacˇ´ıtko jizˇ musı´me implementovat osˇetrˇenı´ uda´losti stisku tlacˇ´ıtka a to metodu novyBTActionPerformed(ActionEvent evt). Tlacˇ´ıtko Novy´ je implicitneˇ zobrazeno, pro odstraneˇnı´ tlacˇ´ıtka mu˚zˇeme pouzˇ´ıt metodu setVisibleBTNovy(false), pro zaka´za´nı´ pouzˇitı´ tohoto tlacˇ´ıtka metodu setEnabledBTNovy(false). Drˇ´ıve, nezˇ je okno zobrazeno, je nutne´ nastavit hodnoty pro vy´beˇr. Pro spra´vnou funkcˇnost musı´me v konstruktoru deˇdı´cı´ trˇ´ıdy volat metody setModel(FISTableModel model), kde jako parametr model zada´me FISTableModel s hodnotami pro vy´beˇr, a setCBModel(Vector v), kde parametr v obsahuje seznam hodnot ulozˇeny´ch ve vektoru. Prvnı´ metoda slouzˇ´ı pro nastavenı´ modelu pro zı´ska´va´nı´ ID vybrane´ hodnoty. Druha´ metoda nastavuje hodnoty z vektoru do ComboBoxu umozˇnˇujı´cı´ho vy´beˇr hodnoty. Podle vybrane´ho rˇa´dku v ComboBoxu zjistı´me ID z FISTableModelu, proto si musı´ rˇa´dky v teˇchto dvou objektech odpovı´dat. Po stisku tlacˇ´ıtka OK nebo Ulozˇ (v dialogu pro vytvorˇenı´ nove´ho objektu, pokud jsme stiskli tlacˇ´ıtko Novy´) je okno uzavrˇeno a pomocı´ metody getSelectedID() zı´ska´me ID vybrane´ho objektu nebo objektu noveˇ vytvorˇene´ho. Take´ mu˚zˇeme zı´skat na´zev vybrane´ polozˇky metodou getSelectedName(). Vectors Pro jednoduche´ zı´ska´nı´ instance typu Vector z objektu FISTableModel, mu˚zˇeme pouzˇ´ıt neˇkterou ze staticky´ch metod trˇ´ıdy fis.client.models.Vectors. Obsahuje na´sledujı´cı´ staticke´ metody: 16
ˇ I´DY ˚ RNE´ TR 5.1. PODPU •
Vector getFarnosti(FISTableModel model) - vracı´ vektor s na´zvy farnostı´, ktere´ se nacha´zejı´ v modelu v prvnı´m sloupci
•
Vector getOsoby(FISTableModel model) - vracı´ vektor se jme´ny osob ve tvaru „jme´no prˇ´ıjmenı´“, poprˇ. v za´vorce datum narozenı´, pokud je zna´mo. V modelu musı´ by´t v prvnı´m sloupci jme´no, ve druhe´m prˇ´ıjmenı´ a ve trˇetı´m rok narozenı´
•
Vector getUmisteni(FISTableModel model) - vracı´ vektor s na´zvy objektu˚ ve tvaru „na´zev objektu (obec nebo farnost)“. V prvnı´m sloupci modelu by se meˇl nacha´zet na´zev objektu a ve trˇetı´m6 hodnota, ktera´ ma´ by´t v za´vorce
•
Vector getFarnostiDekanaty(FISTableModel model) - vracı´ opeˇt seznam farnostı´, ale tentokra´t za na´zvem farnosti je v za´vorce na´zev deˇkana´tu. V modelu by na prvnı´m mı´steˇ meˇl by´t na´zev farnosti, na druhe´m na´zev deˇkana´tu
•
Vector getMatriky(FISTableModel model) - vracı´ ve vektoru seznam matrik ve tvaru Typ matriky - Na´zev farnosti (cˇ´ıslo svazku). Na prvnı´m mı´steˇ v modelu musı´ by´t typ matriky, ve druhe´m na´zev farnosti a ve trˇetı´m cˇ´ıslo svazku
•
Vector getHodinyNabozenstvi(FISTableModel model) - stejne´ jako u metody getFarnostiDekanaty(model)
•
Vector getNames(FISTableModel model, int column) - vracı´ vektor se seznamem hodnot nacha´zejı´cı´ch se ve sloupci column v modelu model
FarnostComboBox FarnostComboBox obsahuje ComboBox pro vy´beˇr farnosti. Zobrazuje ComboBox se seznamem dosud dostupny´ch farnostı´, ktere´ jsou zı´ska´ny ze serveru metodou getFarnostiTableModel(). Prˇi vytva´rˇenı´ te´to komponenty mu˚zˇeme zadat v konstruktoru ID farnosti, ktera´ ma´ by´t vybra´na. ID vybrane´ farnosti zjistı´me metodou getSelectedFarnostID(). AbstractListPanel Trˇ´ıda AbstractListPanel zobrazuje seznam (JList) objektu˚ s mozˇnostı´ zobrazenı´ blizˇsˇ´ıch informacı´ tlacˇ´ıtkem Podrobneˇjsˇ´ı informace. Pro obsluhu tohoto tlacˇ´ıtka je nutno implementovat metodu infoActionPerformed(ActionEvent evt). Pro zobrazenı´ seznamu je nutna´ inicializace metodou initList(FISTableModel tableModel, Vector listData), kde zada´me model tableModel a vektor listData s hodnotami vytvorˇeny´mi z modelu tableModel. AbstractEditableListPanel Prˇedchozı´ panel rozsˇirˇuje trˇ´ıda AbstractEditableListPanel, ktera´ umozˇnˇuje i prˇida´va´nı´ a maza´nı´ za´znamu˚ ze seznamu. K tomu definuje tlacˇ´ıtka Prˇidej a Smazˇ. Pro obsluhu teˇchto tlacˇ´ıtek musı´me implementovat metody pridejObject(ActionEvent event) a smazObject(ActionEvent event). Hodnoty v seznamu mu˚zˇeme zadat manua´lneˇ, jako v prˇedchozı´m prˇ´ıpadeˇ, pomocı´ metody initList()7 nebo automaticky implementova´nı´m metod getNewTableModel() a getColumn(). Na´vratova´ hodnota metody getColumn() oznacˇuje sloupec modelu tabulky vra´cene´ho metodou getNewTableModel(), ze ktere´ho vznikne vektor pro zobrazenı´ seznamu. Jelikozˇ se obsah seznamu mu˚zˇe meˇnit, existujı´ na´sledujı´cı´ metody pro obnovenı´ seznamu: 6. druhy´ sloupec je vynecha´n, protozˇe jako model je pouzˇit ten, ktery´ vykresluje seznam objektu˚, a na druhe´ pozici nenı´ informace, kterou potrˇebujeme (viz 5.3) 7. pak je ale nutne´ volat tuto metodu po kazˇde´ zmeˇneˇ seznamu (prˇida´va´nı´, maza´nı´)
17
ˇ EDA ´ VA ´ NI´ DAT 5.2. PR •
void setSelectedIndex(int index) - podpu˚rna´ motpda pro na´sledujı´cı´ metody. Oznacˇuje rˇa´dek s indexem index, ktery´ je prˇed pouzˇitı´m zkontrolova´n a poprˇ´ıpadeˇ upraven. Nastavuje take´ pouzˇitelnost tlacˇ´ıtek Prˇidej a Smazˇ podle pocˇtu za´znamu˚ v seznamu
•
void refresh(int index) - zı´ska´va´ novy´ model, podle ktere´ho vytvorˇ´ı vektor ze sloupce getColumn() a prˇekreslı´ podle neˇho seznam. Da´le oznacˇuje rˇa´dek index prˇedchozı´ metodou
•
void refresh() - obnovuje tabulku pomocı´ prˇedchozı´ metody a jako parametr index zada´va´ aktua´lneˇ vybrany´ rˇa´dek
PrintPreviewer Zobrazuje dialog s na´hledem na stra´nku urcˇenou k tisku. Pro vytvorˇenı´ potrˇebujeme zna´t forma´t stra´nky PageFormat a trˇ´ıdu implementujı´cı´ rozhranı´ Printable. V dolnı´ cˇa´sti dialogu se nacha´zejı´ tlacˇ´ıtka pro prˇesun na na´sledujı´cı´ nebo prˇedchozı´ stra´nku. Da´le zmeˇnu velikosti stra´nky v procentech, poprˇ´ıpadeˇ prˇizpu˚sobenı´ stra´nky velikosti dialogu (tlacˇ´ıtko Cela´ stra´nka). Poslednı´mi mozˇnostmi jsou tisk a zavrˇenı´ dialogu. Vykreslova´nı´ na´hledu zprostrˇedkova´va´ trˇ´ıda PrintComponent, ktera´ doka´zˇe vykreslit stra´nku procentua´lneˇ zmensˇenou nebo zveˇtsˇenou. Prˇi nastavova´nı´ velikosti se vola´ metoda setScaleFactor(double scale) ve trˇ´ıdeˇ PrintComponent nastavujı´cı´ zveˇtsˇenı´, kde parametr scale urcˇuje procentua´lnı´ zveˇtsˇenı´. Pro prˇizpu˚sobenı´ stra´nky dialogu je vola´na metoda sizeToFit(). Jako vzor pro vytvorˇenı´ trˇ´ıdy PrintPreviewer poslouzˇila stejnojmenna´ trˇ´ıda PrintPreviewer z knihy Java - Programujeme profesiona´lneˇ [JPP]. Trˇ´ıda PrintComponent byla z te´to knihy pouzˇita cela´ beze zmeˇn.
5.2
Prˇeda´va´nı´ dat
V informacˇnı´m syste´mu jsou nejdu˚lezˇiteˇjsˇ´ı informace a data. Prˇed popisem jednotlivy´ch modulu˚ va´s sezna´mı´m s implementacı´ prˇeda´va´nı´ dat mezi serverem a klientem. V syste´mu jsem pouzˇil trˇi zpu˚soby, z toho prvnı´ dva se lisˇ´ı jen nepatrneˇ. Trˇi odlisˇne´ zpu˚soby pouzˇ´ıva´m proto, abych uka´zal mozˇnosti, ktery´mi lze data vzda´leneˇ prˇeda´vat. •
Prvnı´ zpu˚sob spocˇ´ıva´ ve vytvorˇenı´ vzda´lene´ho objektu pomocı´ implementace rozhranı´ deˇdı´cı´ rozhranı´ Remote. Po zdeˇdeˇnı´ trˇ´ıdy UnicastRemoteObject nebo vola´nı´m jejı´ staticke´ metody8 se stane novy´ objekt vzda´leny´m. Zu˚sta´va´ v pameˇti pocˇ´ıtacˇe, ktery´ ho vytvorˇil. Ostatnı´m metoda´m se tedy posı´la´ pouze odkaz. Tento zpu˚sob je pouzˇit prˇeva´zˇneˇ v modulu Seznamy (kazˇdy´ objekt uchova´vajı´cı´ informace implementuje rozhranı´, ktere´ definuje metody dostupne´ v objektu) a prˇi prˇeda´va´nı´ dat pro vykreslova´nı´ seznamu˚ u trˇ´ıdy DefaultFISTableModel.
•
Druhy´ zpu˚sob take´ spocˇ´ıva´ ve vytvorˇenı´ vzda´lene´ho objektu, ale tentokra´t ne na straneˇ serveru, ale na straneˇ klienta. Serveru posı´la´ pouze odkaz a ten naplnı´ vzda´leneˇ objekt daty z databa´ze. Tento zpu˚sob je pouzˇit v modulech Na´bozˇenstvı´ a Bohosluzˇby.
•
Poslednı´m zpu˚sobem je vytvorˇenı´ serializovane´ho objektu, ktery´ je prˇeda´va´n mezi vzda´leny´mi metodami hodnotou. Mezi metodami jednoho procesu je objekt prˇeda´va´n odkazem.
Na kazˇde´m zpu˚sobu se dajı´ najı´t klady i za´pory, ale jako nejlepsˇ´ı se mi jevı´ poslednı´ zpu˚sob. Nemusı´ se prˇi kazˇde´m zı´ska´va´nı´ informace osˇetrˇovat vyjı´mka RemoteException, ale na 8.
viz popis technologie RMI v podkapitole 2.1.1
18
´ DRO) 5.3. SEZNAMY (JA druhou stranu musı´me myslet na to, zˇe kdyzˇ vzda´lene´ metodeˇ prˇeda´me serializovany´ objekt a ta v neˇm zmeˇnı´ jednu hodnotu, neprojevı´ se zmeˇna ve volajı´cı´ metodeˇ. Na´sledujı´cı´ podkapitoly se jizˇ zaby´vajı´ implementacı´ jednotlivy´ch modulu˚, ktere´ stavı´ na podpu˚rny´ch trˇ´ıda´ch popsany´ch v podkapitole 5.1.
5.3
Seznamy (ja´dro)
Modul Seznamy tvorˇ´ı za´klad cele´ho syste´mu, protozˇe umozˇnˇuje manipulaci s nejdu˚lezˇiteˇjsˇ´ımi seznamy. Jsou to seznamy farnı´ku˚, duchovnı´ch, farnostı´ a umı´steˇnı´ (objektu˚ pouzˇ´ıvany´ch farnostmi). Patrˇ´ı sem i seznam mimorˇa´dny´ch uda´lostı´, protozˇe je to take´ pouze seznam. Na straneˇ serveru je modul tvorˇen trˇ´ıdou SeznamyImpl implementujı´cı´ rozhranı´ Seznamy. Instance te´to trˇ´ıdy je vzda´leny´ objekt, jehozˇ odkaz mu˚zˇeme zı´skat ze serveru (FISServer) pomocı´ metody getSeznamy(). Trˇ´ıda s modulem obsahuje velke´ mnozˇstvı´ metod slouzˇ´ıcı´ch k manipulaci s vy´sˇe popsany´mi seznamy. 5.3.1 Farnı´ci Zakladnı´m kamenem farnosti jsou farnı´ci, proto se farnı´ku˚m budu veˇnovat jako prvnı´m. V informacˇnı´m syste´mu je potrˇeba o farnı´kovi uchova´vat velke´ mnozˇstvı´ informacı´, ktere´ nelze spravovat pouze v jednom modulu. Proto se s daty souvisejı´cı´mi s farnı´kem setka´me skoro u vsˇech modulu˚. Tento modul se zaby´va´ pouze za´kladnı´mi u´daji, ktere´ na´m poda´vajı´ informace o farnı´koveˇ jme´nu, prˇ´ıjmenı´, rodne´m prˇ´ıjmenı´, rodne´m cˇ´ısle, mı´stu narozenı´, okresu narozenı´, datu narozenı´, sta´tnı´ prˇ´ıslusˇnosti, vyzna´nı´, stavu a pohlavı´. Da´le spravuje informace o bydlisˇti: ulice, obec, okres, kraj a farnost, ve ktere´ farnı´k bydlı´. Pak jsou tu jesˇteˇ informace o rodicˇ´ıch a manzˇelovi(ce). Modul take´ spravuje informace o udeˇleny´ch sva´tostech krˇtu, birˇmova´nı´ a vykona´nı´ pohrˇbu, pokud nejsou v syste´mu podrobneˇjsˇ´ı informace v jine´m modulu. Umozˇnˇuje take´ uchova´vat textovou pozna´mku u kazˇde´ho farnı´ka. Seznam farnı´ku˚ Seznam farnı´ku˚ je reprezentova´n trˇ´ıdou FarniciTableIFrame rozsˇirˇujı´cı´ trˇ´ıdu AbstractTableIFrame. Za´znamy v seznamu farnı´ku˚ mu˚zˇeme editovat (zobrazovat), mazat a prˇida´vat. Poslednı´ mozˇnostı´ je vyhleda´nı´ farnı´ku˚ podle zadany´ch krite´riı´, kam patrˇ´ı jme´no, prˇ´ıjmenı´, rok narozenı´ nebo farnost. Farnı´k Informace o farnı´kovi poda´va´ trˇ´ıda FarnikDialog deˇdı´cı´ trˇ´ıdu AbstractFISObjectDialog. V dialogu se nacha´zejı´ cˇtyrˇi za´lozˇky: Informace o osobeˇ, Prˇijate´ sva´tosti, Deˇti a Na´bozˇenstvı´. Prˇi vytva´rˇenı´ nove´ho farnı´ka je zobrazena pouze za´lozˇka Informace o osobeˇ obsahujı´cı´ panely InfoOsobyPanel, BydlistePanel, RodicePanel, ManzelKaPanel. Zde je nutne´ mı´t vyplneˇno alesponˇ jme´no farnı´ka, jinak nemu˚zˇe by´t za´znam ulozˇen. Otce a matku vyplnı´me kliknutı´m na tlacˇ´ıtko pro zada´nı´ otce, resp. matky. Pro vy´beˇr slouzˇ´ı trˇ´ıda OsobaChooseDialog, ktera´ umozˇnˇuje vytvorˇit i nove´ho farnı´ka. Prˇi zada´va´nı´ matky jsou ve vy´beˇru pouze zˇeny, prˇi zada´va´nı´ otce, obsahuje vy´beˇr pouze muzˇe. Manzˇela(ku) lze zada´vat pouze, pokud stav farnı´ka je zˇenaty´ (vdana´). Kdyzˇ je farnı´k vdovcem (vdovou) nebo civilneˇ rozvedeny´9 , lze manzˇela(ku) zmeˇnit pomocı´ prave´ho tlacˇ´ıtka mysˇi na tlacˇ´ıtku se jme´nem manzˇela(ky). Jme´na osob do vy´beˇru zı´ska´va´me metodou getOsobyTableModel(typ) z rozhranı´ Seznamy, kde parametr typ je jedna z hodnot definovany´ch ve stejne´m rozhranı´: MUZ nebo OTEC (vybere vsˇechny muzˇe), ZENA 9.
cı´rkevneˇ rozvedeny´ by´t nemu˚zˇe, protozˇe cı´rkev rozvod neprˇipousˇtı´
19
´ DRO) 5.3. SEZNAMY (JA
Obra´zek 5.1: Za´lozˇka Informace o osobeˇ
nebo MATKA (vybere vsˇechny zˇeny), MANZEL (vybere vsˇechny nezˇenate´ muzˇe) a MANZELKA (vybere vsˇechny nevdane´ zˇeny). Pokud ma´me zvolenou matku nebo otce, mu˚zˇeme importovat adresu jednoho z rodicˇu˚. Po kliknutı´ na tlacˇ´ıtko Ulozˇ se nejdrˇ´ıve nacˇtou do objektu fis.objects.FISFarnik data z jednotlivy´ch textovy´ch polı´ a ComboBoxu ˚ metodou setValues() volanou ve vsˇech panelech na za´lozˇce. Zkontroluje se, zda ma´ farnı´k spra´vne´ pohlavı´ oproti sve´ manzˇelce(ovi) a zda je zada´no jme´no. Da´le je zı´ska´no nove´ UCˇO (metodou getNewUCO()) a ulozˇ´ıme data do databa´ze metodou updateFarnik(farnik), kde parametr farnik je odkaz na objekt typu FISFarnik. Ve skutecˇnosti je FISFarnik rozhranı´m implementovany´m trˇ´ıdou FISFarnikImpl, ktera´ je za´rovenˇ vzda´leny´m objektem (prˇeda´va´nı´ dat - Kapitola 5.2). Prˇi editaci/zobrazenı´ je nejdrˇ´ıve nutne´ zı´skat odkaz na objekt FISFarnik s daty o farnı´kovi. Zı´ska´me ho jako na´vratovou hodnotu metody getFarnik(int uco), kde parametr uco je UCˇO zobrazovane´ho farnı´ka. Prˇi editaci jsou jizˇ zobrazeny i zbyle´ za´lozˇky. Prvnı´ z nich je za´lozˇka Prˇijate´ sva´tosti, ktera´ poda´va´ informace o sva´tostech, ktere´ byli farnı´kem prˇijaty, da´le pozna´mky a informace o pohrˇbu. Ze sva´tostı´ jsou zde informace o krˇtu, prvnı´m svate´m prˇijı´ma´nı´ a birˇmova´nı´, da´le seznamy snˇatku˚ a udeˇleny´ch sva´tostı´ pomaza´nı´ nemocny´ch. ´ daje o krˇtu, birˇmova´nı´ a pohrˇbu je mozˇne´ zadava´vat bez toho, anizˇ by v syste´mu byl U ´ daje o udeˇlenı´ prvnı´ho svate´ho prˇijı´ma´nı´ jsou zobrazeny odkaz na podrobneˇjsˇ´ı informace. U pouze tehdy, pokud existuje v syste´mu odkaz na podrobneˇjsˇ´ı informace. Data o ostatnı´ch sva´tostech zı´ska´me pomocı´ metody getZaznamyOsoby() z objektu typu FISFarnik, ktera´ vracı´ objekt typu OstatniZaznamy. Zde zı´ska´me potrˇebna´ data i informaci o tom, zda existujı´ podrobneˇjsˇ´ı data v syste´mu o dane´ sva´tosti nebo pohrˇbu, na ktera´ je potrˇeba vytvorˇit odkaz. Zbyle´ dva seznamy jsou vytvorˇeny pomocı´ trˇ´ıd SnatkyOsobyPanel a PNOsobyPanel, ktere´ ale patrˇ´ı do modulu Sva´tosti (viz 5.7). Dalsˇ´ı za´lozˇka ma´ na´zev Deˇti. Zde se nacha´zı´ seznam deˇtı´ farnı´ka, u ktery´ch je veden jako otec nebo matka. Seznam deˇtı´ zı´ska´me metodou getDetiFarnika(int uco), kde parametr uco oznacˇuje farnı´ka, od ktere´ho chceme zna´t deˇti. Pomocı´ tlacˇ´ıtka Podrobneˇjsˇ´ı informace je zobrazı´me dialog FarnikDialog s informacemi o dane´m dı´teˇti. Poslednı´ za´lozˇka Na´bozˇenstvı´ spada´ do modulu Na´bozˇenstvı´ (viz 5.4). 20
´ DRO) 5.3. SEZNAMY (JA
Obra´zek 5.2: Za´lozˇka Prˇijate´ sva´tosti Farnı´k je smaza´n z databa´ze pomocı´ metody deleteFarnik(int uco), kde uco je UCˇO mazane´ho farnı´ka. Vyhleda´va´nı´ Prˇi vyhleda´va´nı´ je pouzˇit dialog SearchDialog popsany´ v podkapitole o podpu˚rny´ch trˇ´ıda´ch. Pro vyhleda´va´nı´ farnı´ku˚ je potrˇeba pouze implementovat trˇ´ıdu s panelem OsobaSearchPanel (obr. 5.3), ktera´ nabı´zı´ zada´nı´ cˇtyrˇ krite´riı´ pro vy´beˇr farnı´ku˚. Jsou to farnost, kde farnı´k bydlı´, rok narozenı´ a nakonec jme´no a prˇ´ıjmenı´, kde mu˚zˇeme znaky nahradit za´stupny´mi symboly ’%’ (nahrazuje neˇkolik znaku˚) a ’?’ (nahrazuje jeden znak).
Obra´zek 5.3: Vyhleda´va´nı´ farnı´ku˚ Pokud jsou vybra´ny vsˇechny za´znamy, zı´ska´me seznam pomocı´ metody getFarniciTableModel(). Ve druhe´m prˇ´ıpadeˇ je zı´ska´n model tabulky podle zada´ny´ch krite´riı´ pro vy´beˇr. Seznam farnı´ku˚ tedy zı´ska´me metodou getFarniciTableModelOf(jmeno, prijmeni, rok, farnost), kde parametry jmeno a prijmeni jsou hodnoty zadane´ v textovy´ch polı´ch vcˇetneˇ za´stupny´ch symbolu˚, parametr rok je rok narozenı´ a farnost je ID farnosti, kde majı´ 21
´ DRO) 5.3. SEZNAMY (JA vybı´ranı´ farnı´ci bydlet (pokud je ID = 0, zobrazı´ se farnı´ci vsˇech farnostı´; toho docı´lı´me tı´m, zˇe farnost nebude zasˇkrtnuta). 5.3.2 Seznam duchovnı´ch Seznam duchovnı´ch je vytvorˇen pomocı´ trˇ´ıdy DuchovniTableIFrame opeˇt deˇdı´cı´ trˇ´ıdu AbstractSeznamyTableIFrame. Jako u seznamu˚ farnı´ku˚ nabı´zı´ vytva´rˇenı´ novy´ch duchovnı´ch, editaci/zobrazova´nı´ a maza´nı´ (vyhleda´va´nı´ nenı´ zatı´m podporova´no). Jelikozˇ se cˇloveˇk sta´va´ duchovnı´m azˇ pote´, co byl farnı´kem, mu˚zˇe se sta´t, zˇe ho jizˇ v syste´mu evidujeme. Proto je prˇed vytvorˇenı´m nove´ho duchovnı´ho zobrazen dialog, kde mu˚zˇeme zvolit, zda chceme vytvorˇit u´plneˇ nove´ho duchovnı´ho nebo ho importovat z existujı´cı´cho farnı´ka. Importem nenı´ za´znam o farnı´kovi smaza´n, protozˇe duchovnı´ mu˚zˇe by´t zˇenaty´ muzˇ (pokud se jedna´ o trvale´ho ja´hna) a pak bychom se nedostali ke vsˇem jeho u´daju˚m. U duchovnı´ho take´ neevidujeme tolik informacı´ jako u farnı´ka. Duchovnı´ Prˇi vytva´rˇenı´, podle volby uzˇivatele, jsou nacˇteny informace o importovane´m farnı´kovi do objektu typu FISDuchovni, nebo je vytvorˇen objekt novy´. Prˇi editaci zı´ska´me takovy´ objekt metodou getDuchovni(int uco), kde uco je UCˇO hledane´ho duchovnı´ho. Data jsou zobrazena v dialogu DuchovniDialog, ktery´ obsahuje trˇi za´lozˇky: Informace o osobeˇ, Sveˇcenı´ a dekrety a Ostatnı´ za´znamy. Prvnı´ za´lozˇka je velice podobna´ za´lozˇce v dialogu FarnikDialog. Rozdı´l je pouze u bydlisˇteˇ, kde chybı´ informace o farnosti, a nelze zada´vat manzˇelku.
Obra´zek 5.4: Za´lozˇka Sveˇcenı´ a dekrety Dalsˇ´ı za´lozˇka Sveˇcenı´ a dekrety se skla´da´ z panelu˚ SveceniPanel, DekretyPanel a FarnostiPusobeniPanel. Prvnı´ panel obsahuje trˇi textova´ pole pro zada´nı´ ja´henske´ho, kneˇzˇske´ho a biskupske´ho sveˇcenı´. Jednotliva´ sveˇcenı´ musı´ navazovat na sebe a musı´ by´t vykona´na azˇ po narozenı´ dane´ osoby. V panelu DekretyPanel je seznam udeˇleny´ch dekretu˚ diece´znı´m biskupem dane´mu duchovnı´mu. Dekrety jsou ulozˇeny v objektu FISDuchovni a jsou nacˇ´ıta´ny prˇi nacˇ´ıta´nı´ dat o duchovnı´m. Kazˇdy´ dekret je v objektu FISDekret a odkaz na neˇj zı´ska´me metodou getDekret(int index), kde index je cˇ´ıslo dekretu. V seznamu jsou dekrety zobrazeny jako tlacˇ´ıtka s hodnotou data vyda´nı´ dane´ho dekretu. Po kliknutı´ na tlacˇ´ıtko se zobrazı´ 22
´ DRO) 5.3. SEZNAMY (JA dialog DekretDialog (obr. B.2), kde je zobrazeno datum vyda´nı´ dekretu a popis. Dekret je ulozˇen do databa´ze metodami insertDekret(dekret) nebo updateDekret(dekret) (podle toho zda uzˇ v databa´zi existuje nebo ne), kde dekret je odkaz na ukla´dany´ dekret typu FISDekret. Dekrety mu˚zˇeme prˇida´vat pomocı´ tlacˇ´ıtka Prˇidat dekret, kdy je zobrazen prˇedchozı´ dialog a po ulozˇenı´ se dekret prˇida´ do objektu FISDuchovni pomocı´ metody addDekret(dekret), kde dekret je odkaz na vkla´dany´ dekret. Poslednı´m panelem v te´to za´lozˇce je FarnostiPusobeniPanel, ve ktere´m se nacha´zı´ seznam farnostı´, kde duchovnı´ pu˚sobı´. Farnosti mu˚zˇeme vkla´dat, mazat a zobrazovat podrobneˇjsˇ´ı informace. Seznam farnostı´ je zı´ska´n z modulu Seznamy metodou getFarnostiKdePusobi( int uco), kde parametr uco je UCˇO duchovnı´ho. Pro prˇida´va´nı´ je zobrazen vy´beˇrovy´ dialog ChooseFarnostDialog a seznam je vytvorˇen ze za´znamu˚ vra´ceny´ch metodou getFarnostiTableModel(). Poslednı´ za´lozˇkou jsou Ostatnı´ za´znamy, ve ktere´m se nacha´zejı´ seznamy sveˇrˇeny´ch farnostı´ a vyucˇovany´ch hodin na´bozˇenstvı´ reprezentovane´ trˇ´ıdami SvereneFarnostiPanel a VyucovaneHodinyNabozenstviPanel. V obou prˇ´ıpadech mu˚zˇeme zobrazit podrobneˇjsˇ´ı informace o za´znamech v teˇchto seznamech tlacˇ´ıtkem Podrobneˇjsˇ´ı informace. Mazanı´ probı´ha´ pomocı´ metody deleteDuchovni(int uco), kde parametr uco je UCˇO mazane´ho duchovnı´ho. 5.3.3 Seznam farnostı´ Seznam farnostı´ je vytvorˇen pomocı´ trˇ´ıdy FarnostiTableIFrame deˇdı´cı´ trˇ´ıdu AbstractSeznamyTableIFrame. Data z databa´ze jsou zı´ska´na metodou getFarnostiTableModel(). Do seznamu mu˚zˇeme prˇida´vat nove´ farnosti, editovat/zobrazovat je nebo je mazat (metodou deleteFarnost(int id), kde id je ID mazane´ farnosti). Farnost Prˇi vytva´rˇenı´ farnosti se zobrazı´ dialog FarnostDialog (obr. B.4), ktery´ obsahuje panel FarnostPanel slozˇeny´ z panelu˚ InfoFarnostPanel a UmisteniPanel, kde se nacha´zejı´ informace o sı´dle farnosti. Pokud se zobrazuje jizˇ existujı´cı´ farnost, zı´ska´me informace o nı´ metodou getFarnost(), ktera´ vracı´ odkaz na objekt typu FISFarnost, kde jsou ulozˇena vsˇechna data. K farnosti mu˚zˇeme zadat ICˇO, jejı´ na´zev, deˇkana´t, do ktere´ho patrˇ´ı a jejı´ho spra´vce. Da´le mu˚zˇeme zadat sı´dlo nebo ho importovat pomocı´ tlacˇ´ıtka Import adresy sı´dla, kdy je zobrazen vy´beˇrovy´ dialog ChooseUmisteniDialog, ktery´ zı´ska´va´ seznam objektu˚ metodou getUmisteniTableModel(). Spra´vce farnosti zada´me kliknutı´m na tlacˇ´ıtko Spra´vce (pokud jesˇteˇ nenı´ zada´n) nebo pomocı´ prave´ho tlacˇ´ıtka mysˇi a volby Zmeˇnˇ spra´vce, kdy je zobrazen dialog ChooseOsobaDialog se zadany´m typem DUCHOVNI. Seznam je tak vytvorˇen pomocı´ metody getDuchovniNameTableModel(). Prˇed ulozˇenı´m je nutne´ zadat na´zev farnosti a na´zev sı´dla, jinak je ulozˇenı´ odmı´tnuto. Farnost nenı´ trˇeba zada´vat, protozˇe dosud o nı´ neexistuje za´znam v databa´zi. Noveˇ vznikajı´cı´ farnost se k sı´dlu ulozˇ´ı automaticky. Prˇed ulozˇenı´m jsou nejdrˇ´ıve nacˇtena data z textovy´ch polı´ do objektu typu FISFarnost a ten je ulozˇen do databa´ze bud’ metodou insertFarnost(farnost), nebo updateFarnost(farnost) podle toho, zda se farnost jizˇ v databa´zi nacha´zı´ nebo ne, a parametr farnost je odkaz na objekt s daty. 5.3.4 Seznam umı´steˇnı´ Seznam umı´steˇnı´ je vlastneˇ seznam objektu˚, ktere´ farnost vlastnı´ nebo pouzˇ´ıva´ pro akce, bohosluzˇby nebo vy´uku na´bozˇenstvı´. U kazˇde´ho tohoto objektu mu˚zˇe by´t zada´n na´zev, adresa 23
´ DRO) 5.3. SEZNAMY (JA a poprˇ´ıpadeˇ popis. Seznam je vytvorˇen trˇ´ıdou UmisteniTableIFrame, ktery´ zı´ska´va´ data metodou getUmisteniTableModel().
Obra´zek 5.5: Dialog UmisteniDialog
Prˇi vytva´rˇenı´ je nutne´ zadat v dialogu UmisteniDialog (obr. 5.5) na´zev objektu. Volitelne´ u´daje jsou ulice, obec, cˇa´st obce, okres, kraj, farnost a popis. Vsˇechna data jsou zada´vana´ pomocı´ panelu UmisteniPanel. Pro vy´beˇr farnosti je pouzˇita trˇ´ıda FarnostComboBox. Prˇi editaci jsou data z databa´ze nacˇtena do objektu typu FISUmisteni, na ktery´ vracı´ odkaz metoda getUmisteni(int id), kde id je ID zobrazovane´ho objektu. Po stisku tlacˇ´ıtka Ulozˇ jsou nacˇteny hodnoty z jednotlivy´ch textovy´ch polı´ a z FarnostComboBoxu metodou setValues() volanou nad panelem. Pokud je zada´n na´zev farnosti, je za´znam ulozˇen pomocı´ metody insertUmisteni(umisteni), pokud za´znam neexistuje, nebo metodou updateUmisteni(umisteni), pokud za´znam existuje. Parametr umisteni je odkaz na objekt typu FISUmisteni. Za´znamy jsou ze seznamu˚ maza´ny metodou deleteUmisteni(id), kde parametr id je ID mazane´ho za´znamu.
5.3.5 Mimorˇa´dne´ akce Do mimorˇa´dny´ch akcı´ patrˇ´ı vsˇe, co nepatrˇ´ı do bohosluzˇeb nebo do vy´uky na´bozˇenstvı´ (pravidelny´ch akcı´). Mohou to by´t ru˚zne´ vy´lety, vı´kendove´ akce atd. Seznam je vytva´rˇen trˇ´ıdou MimoradneAkceTableIFrame, ktera´ pro zı´ska´nı´ dat z databa´ze pouzˇ´ıva´ metodu getMimoradneAkceTableModel(). Informace o akci se zobrazujı´ v dialogu MimoradnaAkceDialog (obr. B.3), ktera´ obsahuje panel MimoradnaAkcePanel. Objekt s daty o mimorˇa´dne´ akci se jmenuje MimoradnaAkce. Pro vytvorˇenı´ musı´me zadat odpoveˇdnou osobu a na´zev akce, volitelneˇ pak mı´sto kona´nı´, datum, popis a pozna´mky. Prˇi ukla´da´nı´ se pouzˇije metoda updateMimoradneAkce(akce), kde jako parametr akce se zada´ objekt s informacemi. Metoda updateMimoradneAkce() pozna´, zda je nutne´ nejdrˇ´ıve vytvorˇit nove´ ID pro za´znam o mimorˇa´dne´ akci. Pokud chceme zobrazit neˇjaky´ za´znam o mimorˇa´dne´ akci, zı´ska´me objekt s informacemi metodou getMimoradnaAkce(int idAkce), kde idAkce je ID zobrazovane´ akce. Za´znam smazˇeme metodou deleteMimoradnaAkce(int idAkce), kde idAkce je opeˇt ID akce. 24
´ BOZˇENSTVI´ 5.4. NA
5.4
Na´bozˇenstvı´
Vy´uka na´bozˇenstvı´ je rozdeˇlena na jednotlive´ rocˇnı´ky podle sˇkolnı´ho roku. Do te´to vy´uky nepatrˇ´ı pouze vy´uka na´bozˇenstvı´ pro deˇti sˇkolnı´ho veˇku, ale i vy´uka pro dospeˇle´, ktera´ se kona´ pravidelneˇ (naprˇ. setka´nı´ nad katechizmem, ...), poprˇ´ıpadeˇ i jine´ akce, ktere´ se konajı´ pravidelneˇ. Na straneˇ serveru je modul tvorˇen trˇ´ıdou NabozenstviImpl implementujı´cı´ rozhranı´ Nabozenstvi. Na straneˇ klienta je za´kladem dialog RocnikNabozenstviDialog zobrazujı´cı´ jednotlive´ hodiny v jednom rocˇnı´ku. Dialog nabı´zı´ prˇesun mezi jednotlivy´mi rocˇnı´ky (rocˇnı´k je vzˇdy zobrazen v hornı´ cˇa´sti dialogu), informace o rocˇnı´ku, prˇida´nı´, editaci/zobrazenı´ a smaza´nı´ hodiny vy´uky a da´le tisk seznamu vyucˇovacı´ch hodin v aktua´lnı´m rocˇnı´ku. Vsˇechny data o rocˇnı´ku jsou ulozˇena v objektu typu RocnikNabozenstvi, ve ktere´m jsou ulozˇeny i informace o jednotlivy´ch hodina´ch dane´ho rocˇnı´ku. Informace o rocˇnı´ku Informace o rocˇnı´ku jsou zobrazeny v dialogu InfoRocnikNabozenstviDialog (obr. B.5), ktery´ je zobrazen po stisku tlacˇ´ıtka Informace o rocˇnı´ku. Dialog slouzˇ´ı pro zada´nı´ platnosti (od - do) a odpoveˇdne´ho duchovnı´ho, ktery´ je vybı´ra´n pomocı´ vy´beˇrove´ho dia´ daje zı´ska´va´ a ukla´da´ do objektu typu logu ChooseOsobaDialog s typem DUCHOVNI. U RocnikNabozenstvi, jehozˇ odkaz je prˇeda´n prˇi vytva´rˇenı´ dialogu. Po stisku tlacˇ´ıtka Ulozˇ, jsou data ulozˇena do databa´ze metodou updateRocnikNabozenstvi(rocnikNab), kde rocnikNab je odkaz na RocnikNabozenstvi. Seznam hodin vy´uky je vytvorˇen z dat nacha´zejı´cı´ch se v objektu RocnikNabozenstvi, ze ktere´ho zı´ska´me hodiny metodou getVectorSeJmenyHodin() vracejı´cı´ vektor s jednotlivy´mi na´zvy za´znamu˚. Hodina vy´uky Prˇi vytva´rˇenı´ nebo editaci hodiny vy´uky je zobrazen dialog HodinaNabozenstviDialog (obr. B.6), ktere´ prˇeda´me jako parametr odkaz na objekt typu HodinaNabozenstvi. Objekt zı´ska´me prˇi editaci metodou getHodinaNabozenstvi(int index), kde index je cˇ´ıslo za´znamu v seznamu. Prˇi vytva´rˇenı´ nove´ hodiny zı´ska´me odkaz na novy´ objekt metodou getNewHodinaNabozenstvi(). Zobrazeny´ dialog obsahuje dveˇ za´lozˇky: Informace o hodineˇ na´bozˇenstvı´ a Navsˇteˇvujı´cı´ farnı´ci. Za´lozˇky vytva´rˇ´ı panel HodinaNabozenstviPanel, kde prvnı´ za´lozˇka je tvorˇena panelem InfoHodinaNabPanel. Ten obsahuje informace o zacˇa´tku vy´uky (cˇas), vyucˇujı´cı´m, mı´stu kona´nı´, dnu v ty´dnu, kdy se vy´uka kona´, jak cˇasto (ty´dneˇ, 1x 14 dnı´, meˇsı´cˇneˇ), pro koho je vy´uka urcˇena a pozna´mky. Pro ulozˇenı´ je nutne´ zadat alesponˇ zacˇa´tek vy´uky a pro koho je vy´uka urcˇena. Vy´beˇr vyucˇujı´cı´ho je opeˇt obslouzˇen dialogem ChooseOsobaDialog a vy´beˇr mı´sta dialogem ChooseUmisteniDialog. Obeˇ tyto hodnoty lze zmeˇnit pravy´m kliknutı´m mysˇi na dane´m tlacˇ´ıtku a zvolenı´m volby pro zmeˇnu. Druha´ za´lozˇka je tvorˇena panelem NavstevujiciFarniciPanel, ktery´ zobrazuje seznam farnı´ku˚, kterˇ´ı navsˇteˇvujı´ danou hodinu vy´uky. Farnı´ky mu˚zˇeme prˇida´vat, mazat a zobrazovat o nich podrobneˇjsˇ´ı informace. Seznam je zı´ska´n ze serveru metodou getTableModelNavstevujicichFarniku(int hodinaNab), kde hodinaNab je ID zobrazovane´ hodiny na´bozˇenstvı´. Prˇi zobrazova´nı´ informacı´ o farnı´kovi se nacha´zı´ ve cˇtvrte´ za´lozˇce Na´bozˇenstvı´ seznam navsˇteˇvovany´ch hodin vy´uky na´bozˇenstvı´ a seznam vyucˇovany´ch hodin dany´m farnı´kem. Seznamy jsou zobrazeny pomocı´ panelu NavstiveneHodinyNabozenstviPanel (data zı´ska´me metodou getHodinyNabozenstviOsoby(int uco)) a panelu VyucovaneHodinyNabozenstviPanel (data zı´ska´me metodou getVyucovaneHodinyNabozenstviOsoby( 25
ˇ BY 5.5. BOHOSLUZ int uco), kde parametr uco je UCˇO osoby). Panel se seznamem vyucˇovany´ch hodin na´bozˇenstvı´ se nacha´zı´ take´ u zobrazenı´ informacı´ o duchovnı´m v za´lozˇce Ostatnı´ za´znamy. Tisk Po stisku tlacˇ´ıtka Tisk je prˇ´ımo tisknuta stra´nka se seznamem vyucˇovany´ch hodin v dane´m rocˇnı´ku. Pro tisk s na´hledem musı´me kliknout pravy´m tlacˇ´ıtkem mysˇi na tlacˇ´ıtko pro tisk a zvolit volbu Tist s na´hledem. Pak je zobrazen dialog s na´hledem PrintPreviewer popsany´m vy´sˇe v podkapitole 5.1, ktere´mu je prˇeda´n odkaz na instanci typu PrintRocnikNabozenstvi implementujı´cı´ rozhranı´ Printable.
5.5
Bohosluzˇby
Tento modul musı´ umozˇnˇovat zada´va´nı´ porˇadu bohosluzˇeb pro vsˇechny spravovane´ farnosti dohromady. Hlavnı´m u´cˇelem modulu je vytvorˇenı´ porˇadu bohosluzˇeb, kde je zada´n den, liturgicka´ oslava a seznam bohosluzˇeb (vzˇdy farnost, cˇas kona´nı´ a u´mysl). Velice neprˇ´ıjemny´ fakt je, zˇe pro porˇad bohosluzˇeb nelze pouzˇ´ıt zˇa´dnou z dostupny´ch komponent, proto musela by´t pro vykreslenı´ tabulky vytvorˇena komponenta nova´. Typicky´ vzhled porˇadu bohosluzˇeb si mu˚zˇeme prohle´dnout na obra´zku 5.6.
Obra´zek 5.6: Porˇad bohosluzˇeb 26
ˇ BY 5.5. BOHOSLUZ Za´klad modulu na straneˇ serveru tvorˇ´ı trˇ´ıda BohosluzbyImpl implementujı´cı´ rozhranı´ Bohosluzby. Na straneˇ klienta je to dialog BohosluzbyDialog obsahujı´cı´ vsˇechna potrˇebna´ tlacˇ´ıtka a tabulku s porˇadem bohosluzˇeb zobrazenou pomocı´ trˇ´ıdy BohosluzbaKalendarPanel. Prˇed zobrazenı´m porˇadu bohosluzˇeb je uzˇivatel ta´za´n, od kdy do kdy chce zobrazit porˇad bohosluzˇeb. Hodnoty si zvolı´ v dialogu OdDoDialog (obr. B.7), ze ktere´ho po uzavrˇenı´ zı´ska´me zadane´ hodnoty. Po te´ je vytvorˇen objekt typu PoradBohosluzeb, kam nastavı´me zı´skane´ datumy. Tento objekt naplnı´me daty metodou setPoradBohosluzeb(PoradBohosluzeb porad), kde parametrem porad je odkaz na objekt pro ulozˇenı´ dat. Po naplneˇnı´ jizˇ mu˚zˇeme zobrazit tabulku s porˇadem bohosluzˇeb. Sa´m objekt typu PoradBohosluzeb obsahuje pouze seznam objektu˚ typu DenPoraduBohosluzeb a metody pro manipulaci s tı´mto seznamem. Kazˇdy´ den porˇadu bohosluzˇeb pak obsahuje liturgickou oslavu a seznam bohosluzˇeb. Tyto u´daje jsou ulozˇeny v objektech typu Bohosluzba a Svatek. Tabulka a dialog jsou silneˇ propojeny, protozˇe tlacˇ´ıtka na dialogu musı´ odpovı´dat sloupci, ktery´ je oznacˇen v tabulce, o cˇemzˇ musı´ tabulka dialog informovat. Kazˇdy´ sloupec pouzˇ´ıva´ jine´ akce pro manipulaci s daty. Porˇad bohosluzˇeb Tabulka s porˇadem bohosluzˇeb obsahuje peˇt sloupcu˚, ve ktery´ch se nacha´zı´ informace o datu, liturgicke´ oslaveˇ, farnosti, cˇase kona´nı´ bohosluzˇby a u´myslu bohosluzˇby. Z toho den mu˚zˇe obsahovat zˇa´dny´ nebo vı´ce rˇa´dku˚ s bohosluzˇbami. Vykreslova´nı´ takove´ tabulky je implementova´no pomocı´ dvou polı´ columns[] a days[][], ktere´ uda´vajı´ y-ove´ a x-ove´ sourˇadnice jednotlivy´ch polı´cˇek. Prvnı´ pole obsahuje y-ove´ sourˇadnice jednotlivy´ch sloupcu˚. Druhe´ pole je dvourozmeˇrne´, kde prvnı´ dimenze uda´va´ den bohosluzˇeb a druha´ bohosluzˇbu. Cˇ´ıslo days[x][0] uda´va´ sourˇadnici hornı´ linky, kde zacˇ´ına´ den. Sourˇadnici oznacˇujı´cı´ linku na konci dne zı´ska´me days[x][days[x].length - 1]. Vsˇechny ostatnı´ sourˇadnice mezi teˇmito dveˇma oznacˇujı´ jednotlive´ rˇa´dky, kde koncˇ´ı polı´cˇka s bohosluzˇbami (tyto rˇa´dky jsou vykreslova´ny pouze ve trˇetı´m azˇ pa´te´m sloupci). Pole columns je naplneˇno staticky, ale pole days je plneˇno dynamicky metodou refreshPodlePoraduBohosluzeb(), ktera´ pole upravı´ podle aktua´lnı´ch dat v objektu typu PoradBohosluzeb. Te´to metodeˇ mu˚zˇeme prˇedat i cˇ´ıselny´ parametr uda´vajı´cı´ sˇ´ırˇku pole s u´myslem na bohosluzˇbu. Prˇi nastavova´nı´ pole se pouzˇ´ıva´ trˇ´ıda DrawTextArea, ktera´ obsahuje metodu pocˇ´ıtajı´cı´ vy´sˇku pole pro textem (ktery´ se nemusı´ vejı´t na jeden rˇa´dek) podle zadane´ sˇ´ırˇky polı´cˇka. Tato trˇ´ıda umı´ text vykreslit na vı´ce rˇa´dku˚. Je pouzˇita prˇi vykreslova´nı´ tabulky v metodeˇ print(). Tabulka ma´ i svu˚j nadpis tvorˇeny´ trˇ´ıdou NadpisPanel, ktera´ pro vykreslova´nı´ pouzˇ´ıva´ pole columns a pole nadpis s na´zvy popisku˚ jednotlivy´ch sloupcu˚. Vy´beˇr polı´cˇka je vzˇdy ulozˇen v poli selected[][], ktere´ obsahuje sourˇadnice leve´ho hornı´ho a prave´ho dolnı´ho bodu vy´beˇru. Pole je nastaveno metodou setColumnDay(Point bod), kde parametr bod oznacˇuje bod stisku tlacˇ´ıtka mysˇi. Oznacˇeny´ den mu˚zˇeme zı´skat metodou getSelectedDay(), oznacˇeny´ rˇa´dek metodou getSelectedRow() a oznacˇeny´ sloupec metodou getSelectedColumn(). Po oznacˇenı´ neˇjake´ho polı´cˇka jsou vola´nı´m metody setButtons(int column) ve trˇ´ıdeˇ BohosluzbyDialog prˇenastavena tlacˇ´ıtka podle parametru column. Akce nad dnem Pokud je oznacˇen sloupec se dnem, ma´me k dispozici na´sledujı´cı´ akce: Prˇidej bohosluzˇbu (tlacˇ´ıtko v dolnı´ cˇa´sti dialogu), Ohla´sˇky, Kopı´rova´nı´, Vkla´da´nı´ a Maza´nı´ vsˇech bohosluzˇeb (v menu zobrazene´m po stisku prave´ho tlacˇ´ıtka mysˇi na dni). 27
ˇ BY 5.5. BOHOSLUZ Prˇi vytva´rˇenı´ nove´ bohosluzˇby je vytvorˇen novy´ objekt typu Bohosluzba s nastaveny´m dnem kona´nı´ bohosluzˇby podle vybrane´ho dne. Na´sleduje zobrazenı´ dialogu popsane´ho nı´zˇe. Prˇi pouzˇitı´ volby Ohla´sˇky je zobrazen dialog OhlaskyDialog (obr. B.8), ktere´mu musı´me prˇedat odkaz na aktua´lnı´ den porˇadu bohosluzˇeb zı´skany´ vola´nı´m poradBohosluzeb.getDenPoraduBohosluzeb(getSelectedDay()), z neˇhozˇ dialog zı´ska´ jizˇ napsany´ text. Prˇi uzavrˇenı´ dialogu je text ulozˇen do databa´ze metodou updateOhlasky() z rozhranı´ Bohosluzby. Poslednı´ mozˇnostı´ je manipulace se vsˇemi bohosluzˇbami najednou. Prˇi kopı´rova´nı´ se do promeˇnne´ kopirovanyDen prˇidajı´ kopie vsˇech bohosluzˇeb z vybrane´ho dne. Prˇi vkla´da´nı´ se ze stejne´ promeˇnne´ vlozˇ´ı vsˇechny bohosluzˇby do vybrane´ho dne porˇadu bohosluzˇeb. Vlozˇit jednou zkopı´rovany´ den do jine´ho mu˚zˇeme pouze jednou, prˇi vkla´da´nı´ se totizˇ nevytva´rˇ´ı kopie. Prˇi maza´nı´ se odstranı´ vsˇechny bohosluzˇby z vybrane´ho dne. Liturgicka´ oslava (sva´tek) Ve druhe´m sloupci tabulky se nacha´zı´ liturgicka´ oslava, neboli sva´tek. Sva´tky mohou by´t pravidelne´ nebo nepravidelne´ (viz vytva´rˇenı´ sva´tku). Pokud pro dany´ den existuje pravidelny´ sva´tek, je uveden ve sloupci Liturgicka´ oslava. Cokoliv v tomto sloupci mu˚zˇeme zmeˇnit, smazat nebo editovat. Tyto akce jsou dostupne´ z menu zobrazene´ho po stisku prave´ho tlacˇ´ıtka mysˇi na sloupci s liturgickou oslavou. Ke kazˇde´mu dni mu˚zˇe existovat v tabulce svatek dne za´znam s odkazem na liturgickou oslavu10 (sva´tek). Pokud dany´ den za´znam nema´, mu˚zˇe se pouzˇ´ıt pravidelny´ sva´tek pro dany´ den, pokud existuje, jinak nebude liturgicka´ oslava vyplneˇna. Zmeˇnu liturgicke´ oslavy zprostrˇedkova´va´ vy´beˇrovy´ dialog ChooseSvatekDneDialog. Novou liturgickou oslavu vytvorˇ´ıme pomocı´ dialogu SvatekDialog (obr. B.9, kde je nutne´ zadat na´zev sva´tku (liturgicke´ oslavy). Pokud se jedna´ o pravidelny´ sva´tek, je nutne´ zadat i datum (bere se ohled pouze na meˇsı´c a den). Informace o sva´tku jsou zobrazeny opeˇt v dialogu SvatekDialog. Bohosluzˇba Poslednı´ trˇi sloupce poda´vajı´ informaci o bohosluzˇbeˇ, proto jsou oznacˇeny spolecˇneˇ jako jedna bunˇka. Zde mu˚zˇeme prova´deˇt na´sledujı´cı´ akce: zı´skat informace o bohosluzˇbeˇ, smazat bohosluzˇbu, kopı´rovat ji a vlozˇit zkopı´rovanou bohosluzˇbu jinam. Da´le zde je mozˇnost prˇipojenı´ udeˇlenı´ sva´tosti nebo vykona´nı´ pohrˇbu, ale to jizˇ patrˇ´ı do dalsˇ´ıch modulu˚. Prˇi kopı´rova´nı´ se objekt typu Bohosluzba zkopı´ruje do promeˇnne´ kopirovanaBohosluzba a prˇi vkla´da´nı´ se vlozˇ´ı do vybrane´ho dne. Opeˇt lze zkopı´rovanou bohosluzˇbu vlozˇit pouze jednou.
Obra´zek 5.7: Informace o bohosluzˇbeˇ 10. ve stejne´ tabulce je take´ ulozˇen text ohla´sˇek pro dany´ den
28
5.6. MATRIKY Vsˇechny informace o bohosluzˇbeˇ jsou zobrazeny v dialogu BohosluzbaDialog (obr. 5.7). Mı´sto kona´nı´ vybereme pomocı´ vy´beˇrove´ho dialogu ChooseUmisteniDialog, konajı´cı´ho pomocı´ dialogu ChooseOsobaDialog. Konajı´cı´ mu˚zˇe by´t pouze duchovnı´. Pokud se jedna´ o nesva´tostnou bohosluzˇbu, mu˚zˇe jı´m by´t i farnı´k. Proto musı´ by´t typ bohosluzˇby vybra´n drˇ´ıve nezˇ konajı´cı´. Typ vybereme pomocı´ dialogu ChooseTypBohosluzbyDialog nebo mu˚zˇeme vytvorˇit novy´ pomocı´ dialogu TypBohosluzbyDialog, kde je nutne´ zadat na´zev a zda se jedna´ o bohosluzˇbu sva´tostnou nebo nesva´tostnou. Bohosluzˇba da´le obsahuje na´zev, u´mysl a pozna´mky.
Tisk porˇadu bohosluzˇeb Tist zprostrˇedkova´va´ trˇ´ıda BohosluzbaTablePanel implementujı´cı´ rozhranı´ Printable. Vzhled tisknute´ stra´nky je jiny´ nezˇ vzhled zobrazene´ tabulky v dialogu, proto bylo nutne´ implementovat vykreslovacı´ metodu znovu. V hornı´ cˇa´sti stra´nky je vykresleno cˇ´ıslo ty´dne s na´pisem „Porˇad bohosluzˇeb“. Da´le je vykreslena tabulka s jednotlivy´mi dny a bohosluzˇbami. Nadpisy sloupcu˚ a jednotlive´ dny jsou vykresleny tucˇny´m pı´smem, ostatnı´ obycˇejny´m. Uka´zku vytisˇteˇne´ho porˇadu bohosluzˇeb si mu˚zˇeme prohle´dnout na obra´zku C.1.
5.6
Matriky
V matrika´ch jsou evidova´ny udeˇlene´ sva´tosti krˇtu a manzˇelstvı´ a da´le vykona´nı´ pohrˇbu. Kazˇda´ farnost musı´ mı´t sve´ matriky vsˇech teˇchto typu˚, tj. matrika krˇestnı´, snˇatku˚ a pohrˇbu˚. Seznam evidovany´ch matrik je vypisova´n v seznamu MatrikyTableIFrame. Data do seznamu jsou doda´na pomocı´ trˇ´ıdy MatrikyTableModel implementujı´cı´ rozhranı´ FISTableModel. Odkaz na tuto trˇ´ıdu zı´ska´me metodou getMatrikyInTable() v rozhranı´ Svatosti11 . Pro vypsa´nı´ tabulky se seznamem matrik nenı´ pouzˇita obvykla´ trˇ´ıda DefaultFISTableModel, protozˇe se v seznamu nacha´zı´ sloupec popisujı´cı´ typ matriky a v databa´zi je typ ulozˇen pomocı´ cˇ´ısla. Proto je nutna´ transformace cˇ´ısla na textove´ vyja´drˇenı´ typu, kterou prova´dı´ trˇ´ıda MatrikyTableModel. V seznamu mu˚zˇeme stiskem tlacˇ´ıtka Za´znamy v matrice zobrazit seznam za´znamu˚ ve vybrane´ matrice. Seznam zı´ska´me metodou getKrtyInTableFromMatrika(int id), getSnatkyInTableFromMatrika(int id) nebo metodou getPohrbyInTableFromMatrika(int id) podle typu matriky, kde parametr id je ID matriky, jejı´zˇ za´znamy chceme zobrazit. Ve vsˇech seznamech ma´me mozˇnost zobrazenı´ podrobneˇjsˇ´ıch informacı´ a smaza´nı´ za´znamu. V seznamu matrik ma´me mozˇnost i vytvorˇenı´ nove´ matriky. ´ daje o matrice zobrazuje dialog MatrikaDialog (obr. B.10), kde je nutne´ prˇi vytva´U rˇenı´ zadat cˇ´ıslo svazku, farnost a typ matriky. Data jsou do databa´ze ukla´da´na metodou updateMatrika(Matrika matrika), kde parametr matrika je odkaz na objekt s daty typu Matrika. Vsˇechny ostatnı´ za´znamy o udeˇlenı´ sva´tostı´ a pohrˇbu vytva´rˇ´ıme pomocı´ menu u bohosluzˇby v porˇadu bohosluzˇeb. Kazˇdy´ za´znam se zada´va´ prˇes dialog (podle sve´ho typu), ktery´ vzˇdy obsahuje dveˇ za´lozˇky. Prvnı´ je za´lozˇka Informace o bohosluzˇbeˇ tvorˇena´ trˇ´ıdou BohosluzbaPanelProSvatost, kde nalezneme informace o datu udeˇlenı´ sva´tosti, kdo sva´tost udeˇlil a kde byla udeˇlena. Seznam farnı´ku˚, kterˇ´ı prˇijali sva´tost (pohrˇeb), je zobrazen ve druhe´ za´lozˇce tvorˇene´ panelem podle prˇijate´ sva´tosti (pohrˇbu). Kazˇdy´ seznam umozˇnˇuje prˇida´va´nı´, maza´nı´ a u´pravu za´znamu˚.
11. modul Matriky pouzˇ´ıva´ stejnou trˇ´ıdu na straneˇ serveru jako modul Sva´tosti
29
5.6. MATRIKY
Obra´zek 5.8: Informace o bohosluzˇbeˇ prˇi udeˇlenı´ sva´tosti
5.6.1 Krˇestnı´ matrika Po vy´beˇru mozˇnosti Krˇest je zobrazen vy´sˇe zmı´neˇny´ dialog a jako druha´ za´lozˇka slouzˇ´ı panel ListPrijimajicichKrestPanel. Pro prˇida´nı´ (zobrazenı´) za´znamu o udeˇlenı´ krˇtu slouzˇ´ı dialog KrestDialog (obr. B.11). Zde je nutne´ vybrat svazek matriky, kde se dany´ za´znam nacha´zı´, da´le stranu, porˇadove´ cˇ´ıslo a rok. Pro zobrazenı´ teˇchto u´daju˚ slouzˇ´ı panel PoziceVMatricePanel. U krˇtu musı´ by´t take´ uveden krˇteˇnec a jeho kmotr, ktere´ vybereme pomocı´ dialogu ChooseOsobaDialog. Data jsou ulozˇena v objektu typu Krest. Seznam za´znamu˚ o udeˇlenı´ sva´tosti krˇtu je zobrazen trˇ´ıdou KrtyTableIFrame. Data do seznamu zı´ska´me metodou getKrtyInTable() nebo metodou getKrtyInTableFromMatrika(int matrika) pokud zobrazujeme za´znamy pouze z jedne´ matriky. Jako parametr matrika je zada´no ID matriky, jejı´zˇ za´znamy chceme zobrazit.
5.6.2 Matrika snˇatku˚ ´ daje ty´kajı´cı´ se U za´znamu˚ v matrice snˇatku˚ musı´me zadat oba snoubence a jejich sveˇdky. U pozice v matrice jsou shodne´ se krˇtem. Data se zada´vajı´ do dialogu SnatekDialog (obr. B.12) a jsou ulozˇena v objektu typu Snatek. Prˇi zobrazenı´ informacı´ o farnı´kovi se v druhe´ za´lozˇce Prˇijate´ sva´tosti nacha´zı´ panel SnatkyOsobyPanel se seznamem prˇijaty´ch sva´tostı´ manzˇelstvı´. Seznam je zı´ska´n metodou getSnatkyInTableOfUCO(int uco), kde parametr uco je UCˇO farnı´ka. V seznamu mu˚zˇeme zobrazovat podrobneˇjsˇ´ı informace o oznacˇene´m snˇatku pomocı´ tlacˇ´ıtka Podrobneˇjsˇ´ı informace. Seznam za´znamu˚ o udeˇlenı´ sva´tosti manzˇelstvı´ je zobrazen trˇ´ıdou SnatkyIFrame. Data zı´ska´me podobneˇ jako u seznamu za´znamu˚ v krˇestnı´ matrice s tı´m rozdı´lem, zˇe vola´me metody getSnatkyInTable() nebo getSnatkyInTableFromMatrika(int matrika) (parametr matrika ma´ stejny´ vy´znam jako u seznamu za´znamu˚ v krˇestnı´ matrice).
5.6.3 Matrika pohrˇbu˚ ´ daje jsou zada´Za´znam v matrice pohrˇbu˚ je opeˇt velice podobny´ prˇedchozı´m za´znamu˚m. U va´ny pomocı´ dialogu PohrebDialog (obr. B.13), kde je nutne´ vyplnit informace o matrice a zesnule´ho. Data jsou ulozˇena v objektu typu Pohreb. Pro zobrazenı´ u´daju˚ o pozici v matrice je pouzˇit opeˇt panel PoziceVMatricePanel. Seznam za´znamu˚ o vykona´nı´ pohrˇbu je zobrazen trˇ´ıdou PohrbyTableIFrame. Data zı´ska´me podobneˇ jako u prˇedchozı´ch matrik, ale vola´me metody getPohrbyInTable() nebo getPohrbyInTableFromMatrika(int matrika). 30
´ TOSTI 5.7. OSTATNI´ SVA
5.7
Ostatnı´ sva´tosti
Mezi ostatnı´ sva´tosti patrˇ´ı sva´tost eucharistie (kde evidujeme pouze prvnı´ svate´ prˇijı´ma´nı´), birˇmova´nı´ a pomaza´nı´ nemocny´ch. Sva´tost smı´rˇenı´ nelze z du˚vodu porusˇenı´ zpoveˇdnı´ho tajemstvı´ zaznamena´vat a poslednı´ sva´tost kneˇzˇstvı´ nenı´ nikdy udeˇlena v „obycˇejne´“ farnosti (sva´tost udeˇluje pouze biskup). Pro komunikaci s databa´zı´ pouzˇ´ıva´ modul trˇ´ıdu SvatostiImpl implementujı´cı´ rozhranı´ Svatosti (podobneˇ jako modul Matriky). Vytva´rˇenı´ za´znamu˚ o udeˇlenı´ sva´tosti probı´ha´ stejny´m zpu˚sobem jako u modulu Matriky. Dialog pro zada´nı´ za´znamu o udeˇlenı´ sva´tosti zobrazı´me prˇes volby v menu u bohosluzˇby. Vsˇechny dialogy obsahujı´ dveˇ za´lozˇky podobneˇ jako v prˇedchozı´m modulu. Prvnı´ za´lozˇka obsahuje informace o bohosluzˇbeˇ (obr. 5.8), prˇi nı´zˇ byla sva´tost udeˇlena, a druha´ zobrazuje seznam udeˇleny´ch sva´tostı´. 5.7.1 Prvnı´ svate´ prˇijı´ma´nı´ Seznam prˇijaty´ch prvnı´ch svaty´ch prˇijı´ma´nı´ je zobrazen trˇ´ıdou PSPTableIFrame, kam zı´ska´me data metodou getPSPInTable(). O jednotlivy´ch za´znamech mu˚zˇeme zobrazit podrobneˇjsˇ´ı u´daje pomocı´ trˇ´ıdy PSPDialog (obr. B.14), kam data doda´me v objektu typu PrvniSvatePrijimani vra´cene´ho metodou getPSP(int id), kde parametr id je ID zobrazovane´ho za´znamu. Novy´ za´znam vytvorˇ´ıme pomocı´ volby 1. svate´ prˇijı´ma´nı´ v menu u bohosluzˇby, kdy je zobrazen dialog BohosluzbaSpspDialog, ktery´ se (jako vsˇechny prˇedchozı´ pro vytva´rˇenı´ za´znamu) skla´da´ ze dvou za´lozˇek. Prvnı´ obsahuje informace o bohosluzˇbeˇ, druha´ umozˇnˇuje vytvorˇenı´ za´znamu o udeˇlenı´ sva´tosti. U prvnı´ho svate´ho prˇijı´ma´nı´ zada´va´me pouze farnı´ky, kterˇ´ı prˇijali sva´tost. Po vy´beˇru farnı´ka je vytvorˇen novy´ objekt typu PrvniSvatePrijimani, kam se nastavı´ farnı´k i bohosluzˇba, prˇi nı´zˇ byla sva´tost udeˇlena. Prostrˇednictvı´m tohoto objektu ulozˇ´ıme za´znam do databa´ze. Pouzˇijeme k tomu metodou updatePSP(psp), kde jako parametr psp zada´me objekt s daty. Seznam prˇijaty´ch prvnı´ch svaty´ch prˇijı´ma´nı´ prˇi jedne´ bohosluzˇbeˇ zı´ska´me metodou getPSPInTable(int bohosluzba), kde parametr bohosluzba je ID bohosluzˇby. 5.7.2 Sva´tost birˇmova´nı´ Za´znam o udeˇlenı´ sva´tosti birˇmova´nı´ prˇida´me do syste´mu obdobny´m zpu˚sobem jako prˇedchozı´ sva´tost, pouze pouzˇijeme volbu Birˇmova´nı´. Po zvolenı´ te´to volby je zobrazen dialog BohosluzbaS- BirmovanimDialog, kde je druhy´ panel pro vytvorˇenı´ za´znamu tvorˇen trˇ´ıdou ListPrijima- jicichBirmovaniPanel. Data do seznamu zı´ska´me vola´nı´m metody getBirmovaniInTa- ble(int bohosluzba), kde parametr bohosluzba je opeˇt ID bohosluzˇby. Prˇi vytva´rˇenı´ nove´ho za´znamu nestacˇ´ı pouze jme´no farnı´ka, ale je nutne´ zadat i jeho birˇmovacı´ho kmotra. To umozˇnı´ dialog BirmovaniDialog (obr. B.15). Zde pomocı´ dialogu ChooseOsobaDialog zada´me birˇmovance i jeho kmotra. Data se ukla´dajı´ do objektu typu Birmovani, pomocı´ ktere´ho je za´znam ulozˇen do databa´ze. K ulozˇenı´ slouzˇ´ı metoda updateBirmovani(birmovani), kde jako parametr birmovani zada´me objekt s daty. Seznam udeˇleny´ch sva´tostı´ birˇmova´nı´ zobrazuje trˇ´ıda BirmovaniTableIFrame, ktera´ zı´ska´ data z databa´ze metodou getBirmovaniInTable(). Tento seznam umozˇnˇuje pouze zobrazenı´ nebo smaza´nı´ za´znamu. Informace o birˇmova´nı´ zobrazı´me pomocı´ dialogu BirmovaniDialog, ktere´mu prˇeda´me objekt typu Birmovani zı´skane´ho metodou getBirmovani(int id), kde parametr id je ID za´znamu o birˇmova´nı´. Za´znam je smaza´n metodou deleteBirmovani(int id), kde parametr id je opeˇt ID za´znamu. 31
5.8. KNIHA POSˇTY 5.7.3 Pomaza´nı´ nemocny´ch Sva´tost pomaza´nı´ nemocny´ch nemusı´ by´t vzˇdy udeˇlena pouze prˇi bohosluzˇbeˇ, ale take´ naprˇ. v nemocnici nebo doma, kdyzˇ se jedna´ o nemocne´ho cˇloveˇka, ktery´ uzˇ nemu˚zˇe dojı´t na bohosluzˇbu. Proto existujı´ v databa´zi tabulky pro obeˇ varianty udeˇlenı´ sva´tosti. Seznam za´znamu˚ je take´ rozdeˇlen (podle teˇchto mozˇnostı´), ale zobrazen je pomocı´ jedne´ trˇ´ıdy PNTableIFrame, ktera´ definuje dalsˇ´ı tlacˇ´ıtko umozˇnˇujı´cı´ prˇepı´na´nı´ mezi jednotlivy´mi seznamy. Data jsou do seznamu˚ zı´ska´va´na metodami getPNInTable() nebo getPNInTable- BezBohosluzby(). Seznam udeˇleny´ch sva´tostı´ pomaza´nı´ nemocny´ch prˇi bohosluzˇbeˇ nabı´zı´ pouze zobrazenı´ a smaza´nı´ za´znamu. Zde jsou pouzˇity metody deletePN(int id) a getPN(int id), kde parametr id je u obou metod ID za´znamu. Metoda getPN() vracı´ objekt typu PomazaniNemocnych obsahujı´cı´ data o za´znamu. Zobrazenı´ informacı´ o za´znamu poskytuje dialog PNDialog (obr. B.16). Za´znam o udeˇlenı´ pomaza´nı´ nemocny´ch prˇi bohosluzˇbeˇ se vytvorˇ´ı prˇes menu u bohosluzˇby v porˇadu bohosluzˇeb volbou Pomaza´nı´ nemocny´ch. Zvolenı´m te´to mozˇnosti je zobrazen dialog BohosluzbaSpnDialog, ktery´ obsahuje dveˇ za´lozˇky. Prvnı´ obsahuje opeˇt informace o bohosluzˇbeˇ, druha´ seznam farnı´ku˚, kterˇ´ı prˇijali prˇi dane´ bohosluzˇbeˇ pomaza´nı´ nemocny´ch. Seznam zı´ska´me metodou getPNInTable(int bohosluzba), kde parametr bohosluzba je ID bohosluzˇby. Do seznamu mu˚zˇeme prˇida´vat dalsˇ´ı za´znamy o udeˇlenı´ sva´tosti, mazat za´znamy nebo zobrazovat podrobneˇjsˇ´ı informace o farnı´kovi, ktery´ sva´tost prˇijal. Prˇi vytva´rˇenı´ musı´me pouze vybrat farnı´ka, ktery´ prˇijal pomaza´nı´ nemocny´ch prˇi dane´ bohosluzˇbeˇ. Seznam udeˇleny´ch sva´tostı´ mimo bohosluzˇbu umozˇnˇuje navı´c i vytvorˇenı´ nove´ho za´znamu pomocı´ dialogu PNDialog, kde povolı´me u´pravy pomocı´ poslednı´ho parametru v konstruktoru. Zde je nutne´ zadat prˇijı´majı´cı´ho sva´tost, kdo ji udeˇlil a kdy byla udeˇlena. Prˇi ukla´da´nı´ jsou zadane´ u´daje ulozˇeny do objektu typu PomazaniNemocnych, pomocı´ ktere´ho jsou data ulozˇena do databa´ze metodou insertNewPNBezBohosluzby(PomazaniNemocnych pn). Pomaza´nı´ nemocny´ch mu˚zˇe cˇloveˇk prˇijmout vı´cekra´t za zˇivot, proto se u zobrazenı´ informacı´ o farnı´kovi nacha´zı´ i seznam prˇijaty´ch sva´tostı´ pomaza´nı´ nemocny´ch. Seznam je zobrazen pomocı´ panelu PNOsobyPanel, ktery´ se nacha´zı´ v za´lozˇce Prˇijate´ sva´tosti. Ve skutecˇnosti se jedna´ opeˇt o dva seznamy, mezi ktery´mi se mu˚zˇeme prˇesunovat pomocı´ menu zobrazene´ho po kliknutı´ pravy´m tlacˇ´ıtkem mysˇi na seznam. Prˇijata´ pomaza´nı´ nemocny´ch prˇi bohosluzˇbeˇ jsou zı´ska´na metodou getPNInTableOfUCO(int uco), pomaza´nı´ nemocny´ch mimo bohosluzˇbu metodou getPNBezBohosluzebInTableOfUCO(int uco), kde uco je UCˇO dane´ho farnı´ka. Podrobneˇjsˇ´ı informace o udeˇlenı´ sva´tosti jsou zobrazeny opeˇt pomocı´ dialogu PNDialog.
5.8
Kniha posˇty
Kniha posˇty slouzˇ´ı k evidenci prˇ´ıchozı´ a odchozı´ posˇty vcˇetneˇ dokumentu˚, ktere´ farnı´ u´rˇad obdrzˇel nebo vydal. Pro neˇkolik farnostı´ je pouzˇita jedna kniha posˇty, proto musı´me u kazˇde´ho dokumentu zna´t, ke ktere´ farnosti patrˇ´ı. Kazˇdy´ dokument musı´ by´t zarˇazen do kategorie podle skartacˇnı´ho rˇa´du Olomoucke´ arcidiece´ze, ze ktere´ho zjistı´me skartacˇnı´ znak a lhu˚tu pro skartaci. Seznam dokumentu˚ Seznam je vytvorˇen trˇ´ıdou KnihaPostyTableIFrame, kam zı´ska´me data metodou getZaznamyZKnihyPosty() v rozhranı´ KnihaPosty (implementova´no trˇ´ıdou KnihaPostyImpl na straneˇ serveru). Seznam obsahuje u´daje o datu dorucˇenı´, datu vyrˇ´ızenı´, farnosti, kam dokument patrˇ´ı, da´le odkud dokument prˇisˇel a co je jeho obsahem. Seznam umozˇnˇuje prˇida´va´nı´, editaci/zobrazenı´, maza´nı´ za´znamu˚ a vyhleda´va´nı´. V seznamu je vzˇdy zobrazeno poslednı´ch 20 za´znamu˚ z knihy posˇty (serˇazeno sestupneˇ 32
ˇ I´JMY A VY´DAJE 5.9. PR podle ID za´znamu). Dalsˇ´ı (prˇedchozı´) za´znamy zobrazı´me stiskem tlacˇ´ıtka Na´sledujı´cı´ (Prˇedchozı´). Metoda pro zı´ska´va´nı´ seznamu za´znamu˚ getZaznamyZKnihyPosty() ma´ cˇtyrˇi parametry, odZaznamu uda´va´ cˇ´ıslo za´znamu, od ktere´ho chceme data, da´le je zde parametr pocetZaznamu, cozˇ je maxima´lnı´ pocˇet za´znamu˚, ktere´ chceme zobrazovat. Dalsˇ´ı parametry umozˇnˇujı´ vra´tit za´znamy pouze urcˇite´ farnosti, poprˇ´ıpadeˇ i za´znamy mezi dveˇma zadany´mi daty. Tyto poslednı´ parametry jsou vyuzˇity prˇi vyhleda´vanı´. V seznamu mu˚zˇeme take´ zobrazit skartovane´ nebo skartovatelne´ dokumenty (vcˇetneˇ skartovany´ch). Metoda getSkartaciZKnihyPosty() vracejı´cı´ tyto seznamy ma´ stejne´ parametry jako metoda prˇedchozı´. Lisˇ´ı se pouze v poslednı´m parametru typu boolean, ktery´ rˇ´ıka´, zda chceme skartovane´ dokumenty (true) nebo skartovatelne´ vcˇetneˇ skartovany´ch (false). Vyhleda´va´nı´ bere ohled na typ zobrazene´ho seznamu. Vy´beˇr krite´riı´ pro vyhleda´va´nı´ provedeme pomocı´ dialogu SearchDialog (obr. 5.9), ktere´mu prˇeda´me panel KnihaPostySearchPanel. Zde mu˚zˇeme zadat farnost, datum, od ktere´ho chceme za´znamy, a nebo datum, do ktere´ho chceme za´znamy. Jako rozhodne´ datum je pouzˇito datum dorucˇenı´, pokud nenı´ uvedeno, pouzˇije se datum vyrˇ´ızenı´. Pokud nenı´ zada´no ani to, nenı´ za´znam do vy´sledku zahrnut.
Obra´zek 5.9: Vyhleda´va´nı´ v knize posˇty
Dokument v knize posˇty ´ daje o dokumentu jsou ulozˇeny v objektu typu DokumentZKnihyPosty, ktery´ lze z daU taba´ze zı´skat metodou getDokument(int id), kde id je ID zobrazovane´ho dokumentu. Data jsou zobrazena v dialogu DokumentZKnihyPostyDialog slozˇene´ho ze dvou za´lozˇek: O dokumentu (panel ODokumentuPanel) a Skartacˇnı´ rˇa´d (panel SkartacniRadPanel). V za´lozˇce O dokumentu mu˚zˇeme zadat datum dorucˇenı´, odkud byl dokument dorucˇen, obsah, vyrˇ´ızenı´, datum vyrˇ´ızenı´ a datum vypravenı´ dokumentu. Pro rozlisˇenı´, ktere´ farnosti dokument patrˇ´ı, musı´me vybrat i farnost. Datum nejdrˇ´ıveˇjsˇ´ıho skartova´nı´ je doplneˇno na za´kladeˇ kategorie vybrane´ ve skartacˇnı´m rˇa´du. Vy´beˇr je mozˇne´ prove´st pomocı´ druhe´ za´lozˇky Skartacˇnı´ rˇa´d vytvorˇene´ panelem SkartacniRadPanel. Popis kategorie je vzˇdy vypsa´n v textove´m poli v dolnı´ cˇa´sti dialogu. Text jednotlivy´ch kategoriı´ a podkategoriı´ je zobrazen v ComboBoxech v hornı´ cˇa´sti dialogu. Po ulozˇenı´ a opeˇtovne´m otevrˇenı´ je v sekci skartace jizˇ vyplneˇno datum mozˇne´ skartace. Zatrzˇenı´m polı´cˇka Skartova´no zaznamena´me do syste´mu, zˇe byl dokument fyzicky skartova´n. To lze prove´st azˇ po vyprsˇenı´ skartacˇnı´ lhu˚ty a nesmı´ se jednat o dokument s trvalou dokumentacˇnı´ hodnotou.
5.9
Prˇı´jmy a vy´daje
Modul slouzˇ´ı k evidenci prˇ´ıjmu˚ a vy´daju˚ farnosti. Kazˇda´ farnost musı´ ve´st tuto evidenci oddeˇleneˇ. Proto je prˇed zobrazenı´m seznamu prˇ´ıjmu˚ a vy´daju˚ uzˇivatel ta´za´n na farnost, s jejı´zˇ prˇ´ıjmy a vy´daji chce pracovat (pomocı´ vy´beˇrove´ho dialogu ChooseFarnostDialog). 33
ˇ I´JMY A VY´DAJE 5.9. PR
(a)
(b)
Obra´zek 5.10: Dokument v knize posˇty (a) za´lozˇka O dokumentu (b) za´lozˇka Skartacˇnı´ rˇa´d Modul na straneˇ serveru reprezentuje trˇ´ıda PrijmyVydajeImpl implementujı´cı´ rozhranı´ PrijmyVydaje, ktere´ popisuje metody dostupne´ na serveru. Za´znamy jsou rozdeˇleny po jednotlivy´ch meˇsı´cı´ch, ve ktery´ch byla cˇa´stka v dane´m za´znamu prˇijata nebo vyda´na. Mezi meˇsı´ci se pohybujeme tlacˇ´ıtky Prˇedchozı´ a Na´sledujı´cı´. V seznamu polozˇek kazˇde´ho meˇsı´ce je na prvnı´m mı´steˇ celkovy´ zu˚statek a na konci zu˚statek z minule´ho meˇsı´ce. Tyto za´znamy prˇida´va´ do tabulky trˇ´ıda PrijmyVydajeTableModel, ktera´ prˇeda´va´ data pro vykreslova´nı´ tabulky, a nelze je upravovat nebo zobrazovat. Aby se nemusel celkovy´ zu˚statek prˇi kazˇde´m zobrazova´nı´ seznamu prˇepocˇ´ıta´vat ze vsˇech za´znamu˚ v databa´zi, je u kazˇde´ho meˇsı´ce vzˇdy polozˇka se zu˚statkem z minule´ho meˇsı´ce (tento za´znam ma´ vzˇdy nejnizˇsˇ´ı ID v dane´m meˇsı´ci).Tı´m lze pro zjisˇteˇnı´ celkove´ho zu˚statku pouze prˇepocˇ´ıtat cˇa´stky v poslednı´m meˇsı´ci. Naopak nasta´va´ proble´m s prˇida´va´nı´m, editacı´ nebo maza´nı´m za´znamu˚ z jine´ho nezˇ aktua´lnı´ho meˇsı´ce, protozˇe musı´me zmeˇnit zu˚statky z minule´ho meˇsı´ce ve vsˇech na´sledujı´cı´ch meˇsı´cı´ch. To je osˇetrˇeno na serveru prˇi vola´nı´ metod pro ukla´da´nı´, cˇi maza´nı´ za´znamu. Za´znamy lze meˇnit maxima´lneˇ v meˇsı´ci o peˇt meˇsı´cu˚ starsˇ´ım nezˇ aktua´lnı´. Za´znamy ve strasˇ´ıch meˇsı´cı´ch lze pouze zobrazovat. Pokud nechceme meˇnit nebo prˇida´vat za´znamy do mladsˇ´ıch meˇsı´cu˚, mu˚zˇeme meˇsı´c uzavrˇ´ıt tlacˇ´ıtkem Za´veˇrka. Pokud po uzavrˇenı´ potrˇebujeme upravit neˇjakou polozˇku nebo ji zmeˇnit, lze v poslednı´ch peˇti meˇsı´cı´ch zrusˇit za´veˇrku tlacˇ´ıtkem Zrusˇ za´veˇrku. Kromeˇ za´veˇrky nabı´zı´ seznam prˇida´va´nı´, editaci/zobrazenı´ nebo maza´nı´ za´znamu˚. Take´ je zde mozˇnost vyhleda´va´nı´. Za´znam o prˇı´jmu nebo vy´daji ´ daje o jednom za´znamu prˇ´ıjmu nebo vy´daje jsou ulozˇeny v objektu typu PrijmyVydajeU Zaznam a zobrazeny v dialogu PrijmyVydajeDialog. Mezi zada´vane´ u´daje patrˇ´ı datum, cˇa´stka, typ, popis a pozna´mky (obr. 5.11). Typy jsou pouze dva: Sbı´rka a Jiny´. Prˇi zvolenı´ typu Sbı´rka jsme prˇi ukla´da´nı´ ta´za´ni, zda chceme vytisknout potvrzenı´ pro financˇnı´ u´rˇad. Pokud zvolı´me Ano, zobrazı´ se dialog PrintPotvrzeniOSbirceDialog pro zada´nı´ u´daju˚ o mı´steˇ vybra´nı´ sbı´rky a kde bylo potvrzenı´ vyda´no. Nakonec je vytisknuto potvrzenı´ o sbı´rce pomocı´ stejne´ trˇ´ıdy (obr. C.2 v prˇ´ıloze C). Pokud upravujeme za´znam jizˇ v uzavrˇene´m meˇsı´ci a chceme zmeˇnu ulozˇit, jsme ta´za´ni, zda chceme zrusˇit za´veˇrku. To platı´ pouze pokud se za´znam nenacha´zı´ v meˇsı´ci starsˇ´ım nezˇ peˇt meˇsı´cu˚ od aktua´lnı´ho. Uza´veˇrka je zrusˇena vola´nı´m metody uzavreno(FISDate datum, int farnost, boolean uzavreno) na straneˇ serveru, kde datum je datum se zadany´m meˇsı´cem a rokem, ve ktere´m chceme nastavit za´veˇrku. Parametr farnost je ID farnosti a 34
ˇ I´JMY A VY´DAJE 5.9. PR
Obra´zek 5.11: Dialog se za´znamem prˇ´ıjmu nebo vy´daje parametr uzavreno rˇ´ıka´, zda chceme dany´ meˇsı´c zavrˇ´ıt (true) nebo zrusˇit za´veˇrku (false). Vyhleda´va´nı´ Dialog pro vyhleda´va´nı´ je zobrazen trˇ´ıdou SearchDialog (obr. 5.12) s panelem PrijmyVydajeSearchPanel. Nabı´zı´ vy´beˇr za´znamu˚ podle farnosti, meˇsı´ce a roku a da´le podle cˇa´stky veˇtsˇ´ı nebo mensˇ´ı nezˇ cˇa´stka zadana´. Poslednı´ mozˇnostı´ je zobrazenı´ tabulky konecˇny´ch stavu˚ jednotlivy´ch meˇsı´cu˚ v dane´m roce nebo konecˇny´ch stavu˚ za jednotlive´ roky. Prˇi vy´beˇru z poslednı´ nabı´dky nelze v seznamu za´znamu˚ deˇlat zˇa´dne´ akce kromeˇ nove´ho vyhleda´va´nı´ a uzavrˇenı´ seznamu.
Obra´zek 5.12: Dialog pro zada´nı´ krite´riı´ pro vyhleda´va´nı´ v prˇ´ıjmech a vy´dajı´ch
35
Kapitola 6
Instalace syste´mu Prˇed samotnou instalacı´ syste´mu musı´me mı´t nainstalova´n databa´zovy´ server MySQL. Da´le je nutno mı´t vytvorˇenu databa´zi pro tento syste´m, kterou mu˚zˇeme vytvorˇit prˇ´ıkazem CREATE DATABASE fis; a uzˇivatele, ktery´ ma´ pra´vo manipulovat s touto databa´zı´. Pokud jizˇ databa´zi ma´me, vytvorˇ´ıme v nı´ vsˇechny potrˇebne´ tabulky a indexy definovane´ v prˇ´ıloze A. V tabulce user musı´me vytvorˇit za´znam pro superuzˇivatele INSERT INTO user (user, password) VALUES (”root”, PASSWORD(”root”)); poprˇ´ıpadeˇ vytvorˇit za´znamy i pro jine´ uzˇivatele. Da´le vytvorˇ´ıme domovsky´ adresa´rˇ pro syste´m a vytvorˇ´ıme v neˇm adresa´rˇe bin, lib a src (poprˇ. i adresa´rˇ ˜/.fis). Do adresa´rˇe bin nakopı´rujeme spousˇteˇcı´ skripty, do adresa´rˇe lib nakopı´rujeme jar archı´vy pro JavaHelp (jh.jar), Connector/J (mysql-connectorjava-3.0.11-stable-bin.jar nebo jinou verzi) a pro dom4j (dom4j.jar). V adresa´rˇi ˜/ .fis mu˚zˇeme vytvorˇit XML dokument s nastavenı´m serveru (soubor serverFIS.xml) nebo necha´me syste´m, aby tento soubor vytvorˇil sa´m prˇi prvnı´m spusˇteˇnı´. Do adresa´rˇe src rozbalı´me archı´v fis-server.tar.gz nebo fis-client.tar.gz (poprˇ. archı´v fis.tar.gz) podle toho, kterou cˇa´st syste´mu budeme chtı´t pouzˇ´ıvat. K instalaci lze pouzˇ´ıt take´ skript install v adresa´rˇi fis-install na CD. Prˇ´ıklad 6.0.1: XML dokument serverFIS.xml s nastavenı´m serveru <serverFIS> <mysql> na ´zev databa ´ze jme ´no poc ˇı ´tac ˇe, kde je databa ´zovy ´ server spus ˇte ˇn <user> jme ´no uz ˇivatele, pod ktery ´m se aplikace pr ˇihlas ˇuje k databa ´zi <password> heslo k tomuto uz ˇivatelske ´mu jme ´nu
36
Kapitola 7
Nastavenı´ a spra´va syste´mu Nastavenı´ a spra´vu syste´mu zajisˇt’uje trˇ´ıda SetFISServer, ktera´ tvorˇ´ı samostatny´ program spustitelny´ prˇ´ıkazem java fis.server.SetFISServer. Po spusˇteˇnı´ je nutno zadat heslo superuzˇivatele a po te´ dojde ke spojenı´ se serverem. Od neˇj zı´ska´ odkaz na objekt typu SetProperties, ze ktere´ho nacˇte pomocı´ metody getProperties() aktua´lnı´ nastavenı´ serveru reprezentovane´ objektem typu FISServerProperties. Objekt typu FISUserProperties umozˇnˇujı´cı´ manipulaci s uzˇivateli zı´ska´me metodou getUserProperties(). Obeˇ metody majı´ za parametr heslo superuzˇivatele. Pokud by heslo nesouhlasilo, je vyhozena vyjı´mka LoginFailedException. Po zı´ska´nı´ obou odkazu˚ je zobrazeno okno pro nastavenı´ serveru. V syste´mu lze nastavit pouze prˇ´ıstup k databa´zi, meˇnit heslo superuzˇivatele a vytva´rˇet a mazat uzˇivatele. Prˇ´ıstup k databa´zi je ulozˇen v XML dokumentu a vsˇe ostatnı´ je ulozˇeno v databa´zi. Struktura XML dokumentu s nastavenı´m byla jizˇ popsa´na v kapitole 6 v prˇ´ıkladu 6.0.1.
(a)
(b)
(c)
Obra´zek 7.1: Za´lozˇky v dialogu pro nastavenı´ serveru Jednotlive´ polozˇky mu˚zˇeme nastavit pomocı´ trˇ´ı za´lozˇek (obra´zky 7.1) zobrazeny´ch v okneˇ 37
7. NASTAVENI´ A SPRA´VA SYSTE´MU SetFISServer. Patrˇ´ı sem za´lozˇky: •
Databa´ze Tato prvnı´ za´lozˇka umozˇnˇuje nastavenı´ spojenı´ s databa´zı´. Mu˚zˇeme zde nastavit jme´no databa´ze, kde se nacha´zejı´ tabulky s daty, da´le stroj, na ktere´m je spusˇteˇn databa´zovy´ server MySQL, a prˇ´ıstupove´ jme´no s heslem. Po ulozˇenı´ je nastavenı´ ulozˇeno prostrˇednictvı´m instance rozhranı´ FISServerProperties prˇ´ımo do serveru, ktery´ ho ihned zacˇne pouzˇ´ıvat. Do XML dokumentu je nastavenı´ ulozˇeno azˇ po ukoncˇenı´ serveru.
•
Uzˇivatel V za´lozˇce Uzˇivatel ma´me mozˇnost vytva´rˇenı´ a maza´nı´ uzˇivatelu˚. V sekci Novy´ uzˇivatel zada´me pro vytvorˇenı´ nove´ho uzˇivatele jme´no a jeho heslo. Po stisku tlacˇ´ıtka Vytvorˇit je vytvorˇen novy´ uzˇivatel v databa´zi pomocı´ metody createNewUser(String name, String password), kde parametry name a password jsou jme´no a heslo. Metoda se nacha´zı´ v rozhranı´ FISUserProperties. Pokud jizˇ toto uzˇivatelske´ jme´no existuje, je vyhozena vyjı´mka UserExistException. Ve druhe´ sekci mu˚zˇeme naopak uzˇivatele smazat. Nejdrˇ´ıve ho vybereme v ComboBoxu, kde jsou zobrazena data z objektu typu FISUserProperties. Tato trˇ´ıda take´ slouzˇ´ı ke smaza´nı´ uzˇivatele po stisku tlacˇ´ıtka Zrusˇ za pomoci metody removeUser(String user), kde parametr user je jme´no mazane´ho uzˇivatele. Vsˇechny u´daje o uzˇivatelı´ch jsou ulozˇeny v databa´zi v tabulce user.
•
Superuzˇivatel Poslednı´ za´lozˇka umozˇnˇuje nastavenı´ hesla superuzˇivatele, kde je nutne´ nejdrˇ´ıve zadat stare´ heslo a dvakra´t nove´ (pro kontrolu). Po stisku tlacˇ´ıtka Zmeˇnˇ, je heslo zmeˇneˇno metodou setRootPassword(String oldPassword, String newPassword), kde parametry jsou stare´ a nove´ heslo. Metoda se opeˇt nacha´zı´ v rozhranı´ FISUserProperties. Pokud stare´ heslo nesouhlası´ s dosavadnı´m, je vyhozena vyjı´mka RootPasswordFailedException.
38
Kapitola 8
Za´veˇr V ra´mci te´to pra´ce se mi podarˇilo navrhnout a implementovat informacˇnı´ syste´m pro farnı´ u´rˇad, ktery´ umozˇnˇuje spra´vu vsˇech dat potrˇebny´ch pro beˇh farnosti. Syste´m je urcˇen pro farnosti spravovane´ jednı´m duchovnı´m spra´vcem. Nenı´ tedy vhodny´ pro spra´vu farnostı´ s ru˚zny´mi spra´vci. Tento nedostatek lze odstranit prˇida´nı´m prˇ´ıstupovy´ch pra´v na jednotliva´ data a oddeˇlenı´m porˇadu bohosluzˇeb a knihy posˇty pro kazˇdou skupinu farnostı´ zvla´sˇt’(dosavadnı´ syste´m s tı´mto vyuzˇitı´m nepocˇ´ıta´). Implementovany´ ko´d tvorˇ´ı za´kladnı´ strukturu syste´mu s nejpotrˇebneˇjsˇ´ımi funkcemi. Pro poskytnutı´ dalsˇ´ıch sluzˇeb je nutne´ doimplementovat dalsˇ´ı trˇ´ıdy. Jedna´ se prˇeva´zˇneˇ o tiskove´ vy´stupy, jako jsou vy´pisy z matrik, potvrzenı´ o udeˇlenı´ sva´tosti a dalsˇ´ı. Mezi oblasti vhodne´ k vylepsˇenı´ syste´mu mu˚zˇeme zarˇadit vybudova´nı´ navigacˇnı´ho okna (nebo panelu), ktere´ by uzˇivateli zprˇ´ıjemnilo a usnadnilo pra´ci se syste´mem. Informacˇnı´ syste´m farnı´ho u´rˇadu je sˇ´ırˇen pod GPL v2 (GNU GENERAL PUBLIC LICENSE Version 2) - http://www.gnu.org/copyleft/gpl.html1 .
1. cˇeske´ zneˇnı´ licence GPL nalezneme na internetove´ adrese http://staff.cesnet.cz/˜lhotka/ gnugpl-cz.html
39
Literatura [JDBC]
JDBC API Documentation, Sun Microsystems, Inc., 2002, java.sun.com http: //java.sun.com/j2se/1.4.2/docs/guide/jdbc/ . 2.1.3
[JDoc]
J2SE 1.4.2 API Specification, Sun Microsystems, Inc., 2003, java.sun.com http: //java.sun.com/j2se/1.4.2/docs/api/ .
[JPP]
Spell, B.: Java - programujeme profesiona´lneˇ , Computer Press a.s., 2002, 80-7226667-5, knihy.cpress.cz http://knihy.cpress.cz . 5.1
[MySQL]
MySQL, MySQL AB, 2004, www.mysql.com http://www.mysql.com . 2.1.2, 2.1.3
[Mza21]
Maslakowski, M.: Naucˇte se MySQL za 21 dnı´ , Computer Press a.s., 2001, 8072264486, knihy.cpress.cz http://knihy.cpress.cz . 2.1.2
[RMI]
Java Remote Method Invocation (Java RMI), Sun Microsystems, Inc., 1997 - 2003, java.sun.com http://java.sun.com/products/jdk/rmi/ . 2.1.1
[XML]
Extensible Markup Language (XML), W3C, 1996 - 2003, www.w3c.org http: //www.w3.org/XML/ . 2.1.4
[dom4j]
Dom4j, MetaStuff Ltd., 2002 - 2004, www.dom4j.org http://www.dom4j. org/ . 2.1.5
40
Prˇı´loha A
Vytvorˇenı´ tabulek a indexu˚ v databa´zi Tabulky CREATE TABLE user ( user VARCHAR(20), password VARCHAR(25) ); CREATE TABLE farnosti ( ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, ICO BIGINT, nazev VARCHAR(40), sidlo INTEGER, dekanat VARCHAR(40), duchovni_spravce INTEGER ); CREATE TABLE umisteni ( ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, nazev VARCHAR(50), ulice VARCHAR(35), obec VARCHAR(35), cast_obce VARCHAR(35), okres VARCHAR(35), kraj VARCHAR(35), farnost INTEGER, popis TEXT ); CREATE TABLE duchovni ( osoba INTEGER NOT NULL PRIMARY KEY, jahenske_sveceni DATE, knezske_sveceni DATE, biskupske_sveceni DATE ); CREATE TABLE farnosti_pusobeni ( duchovni INTEGER NOT NULL, farnost INTEGER NOT NULL, CONSTRAINT PRIMARY KEY fp_pk (duchovni, farnost) ); CREATE TABLE dekrety ( 41
A. VYTVORˇENI´ TABULEK A INDEXU˚ V DATABA´ZI ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, datum_vydani DATE, komu INTEGER, svereno TEXT ); CREATE TABLE osoby ( UCO INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, rc BIGINT, jmeno VARCHAR(25), prijmeni VARCHAR(30), rodne_prijmeni VARCHAR(30), stav ENUM(’svobodny’,’zenaty’,’rozvedeny’,’vdovec’), pohlavi ENUM(’muz’,’zena’), statni_prislusnost VARCHAR(20), vyznani VARCHAR(20), narozen DATE, misto_narozeni VARCHAR(30), okres_narozeni VARCHAR(30), ulice VARCHAR(30), obec VARCHAR(30), okres VARCHAR(30), kraj VARCHAR(30), otec INTEGER, matka INTEGER, poznamky TEXT ); CREATE TABLE farnici ( osoba INTEGER NOT NULL PRIMARY KEY, manzelka INTEGER, farnost INTEGER ); CREATE TABLE hodina_nabozenstvi ( ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, vyucujici INTEGER, kdy TIME, misto INTEGER, den_v_tydnu INTEGER, cetnost INTEGER, pro_koho VARCHAR(50), poznamky TEXT, rocnik INTEGER ); CREATE TABLE rocnik_nab ( rok_vyuky INTEGER NOT NULL PRIMARY KEY, platnost_od DATE, platnost_do DATE, odpovedny_duchovni INTEGER 42
A. VYTVORˇENI´ TABULEK A INDEXU˚ V DATABA´ZI ); CREATE TABLE navsteva_nab ( farnik INTEGER, hodina_nab INTEGER ); CREATE TABLE bohosluzby ( ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, nazev VARCHAR(50), cas_konani DATETIME, misto_konani INTEGER, konajici INTEGER, typ INTEGER, umysl TEXT, poznamky TEXT ); CREATE TABLE typ_bohosluzby ( ID INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, nazev VARCHAR(40), svatostna ENUM(’A’,’N’), typ INTEGER ); CREATE TABLE nazvy_bohosluzeb ( nazev VARCHAR(50) UNIQUE ); CREATE TABLE svatky ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, den DATE, nazev VARCHAR(50), typ ENUM(’P’,’N’) ); CREATE TABLE svatek_dne ( den DATE PRIMARY KEY, svatek INTEGER, ohlasky TEXT ); CREATE TABLE p_svate_prijimani ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, bohosluzba INTEGER, prijal INTEGER ); CREATE TABLE birmovani ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, bohosluzba INTEGER, 43
A. VYTVORˇENI´ TABULEK A INDEXU˚ V DATABA´ZI prijal INTEGER, kmotr INTEGER ); CREATE TABLE pomazani_nemocnych ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, bohosluzba INTEGER, prijal INTEGER ); --kdyz to nebylo pri msi, tak se musi zadat i datum a konajiciho CREATE TABLE pomazani_nemocnych_bez_bohosluzby ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, datum DATE, prijal INTEGER, kym INTEGER ); CREATE TABLE matriky ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, farnost INTEGER, svazek INTEGER, -- cislo typu se promitne az v programu na textove vyjadreni typ INTEGER ); CREATE TABLE krty ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, -- pozice v matrice matrika INTEGER, strana INTEGER, poradove_cislo INTEGER, rok INTEGER, -- ostatni polozky krtenec INTEGER, kmotr INTEGER, bohosluzba INTEGER ); CREATE TABLE snatky ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, -- pozice v matrice matrika INTEGER, strana INTEGER, poradove_cislo INTEGER, rok INTEGER, -- ostatni polozky snoubenec INTEGER, snoubenka INTEGER, svedek1 INTEGER, svedek2 INTEGER, 44
A. VYTVORˇENI´ TABULEK A INDEXU˚ V DATABA´ZI bohosluzba INTEGER ); CREATE TABLE pohrby ( zemrely INTEGER NOT NULL PRIMARY KEY, -- pozice v matrice matrika INTEGER, strana INTEGER, poradove_cislo INTEGER, rok INTEGER, -- ostatni polozky bohosluzba INTEGER ); CREATE TABLE mimoradne_akce ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, nazev VARCHAR(40), misto VARCHAR(40), datum_konani DATE, odpovedny INTEGER, popis TEXT, poznamky TEXT ); CREATE TABLE ostatni_zaznamy ( uco INTEGER NOT NULL PRIMARY KEY, datum_krtu DATE, misto_krtu VARCHAR(40), datum_birmovani DATE, misto_birmovani VARCHAR(40), datum_pohrbu DATE, misto_pohrbu VARCHAR(40), poznamky TEXT ); CREATE TABLE kniha_posty ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, doruceno DATE, odkud TEXT, obsah_spisu TEXT, vyrizeni VARCHAR(60), vyrizeno_dne DATE, vypraveno_dne DATE, farnost INTEGER, skartace_nejdrive DATE, skartovano ENUM(’A’, ’N’), -- skartacni skupina skupina INTEGER, podskupina INTEGER, deleni_podskupiny INTEGER ); 45
A. VYTVORˇENI´ TABULEK A INDEXU˚ V DATABA´ZI
CREATE TABLE prijmy_vydaje ( id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, datum DATE, castka DOUBLE, farnost INTEGER, typ INTEGER, zustatek TINYINT, popis TEXT, poznamky TEXT ); CREATE TABLE uzaverka_pv ( datum DATE NOT NULL, uzavreno ENUM(’A’, ’N’), farnost INTEGER NOT NULL, CONSTRAINT PRIMARY KEY uzaverka_pk (datum, farnost) ); Indexy CREATE INDEX farnosti_sidlo ON farnosti (sidlo); CREATE INDEX farnosti_spravce ON farnosti (duchovni_spravce); CREATE INDEX umisteni_farnost ON umisteni (farnost); CREATE INDEX dekrety_komu ON dekrety (komu); CREATE INDEX osoby_otec ON osoby (otec); CREATE INDEX osoby_matka ON osoby (matka); CREATE INDEX farnici_manzelka ON farnici (manzelka); CREATE INDEX farnici_farnost ON farnici (farnost); CREATE INDEX hodina_nabozenstvi_vyucujici ON hodina_nabozenstvi (vyucujici); CREATE INDEX hodina_nabozenstvi_misto ON hodina_nabozenstvi (misto); CREATE INDEX rocnik_nab_odpovedny_duchovni ON rocnik_nab (odpovedny_duchovni); CREATE INDEX navsteva_nab_farnik ON navsteva_nab (farnik); CREATE INDEX navsteva_nab_hodina_nab ON navsteva_nab (hodina_nab); CREATE INDEX bohosluzby_misto_konani ON bohosluzby (misto_konani); CREATE INDEX bohosluzby_konajici ON bohosluzby (konajici); CREATE INDEX bohosluzby_typ ON bohosluzby (typ); CREATE INDEX nazvy_bohosluzeb_nazev ON nazvy_bohosluzeb (nazev(4)); CREATE INDEX svatek_dne_svatek ON svatek_dne (svatek); 46
A. VYTVORˇENI´ TABULEK A INDEXU˚ V DATABA´ZI
CREATE INDEX p_svate_prijimani_bohosluzba ON p_svate_prijimani (bohosluzba); CREATE INDEX p_svate_prijimani_prijal ON p_svate_prijimani (prijal); CREATE INDEX birmovani_bohosluzba ON birmovani (bohosluzba); CREATE INDEX birmovani_prijal ON birmovani (prijal); CREATE INDEX birmovani_kmotr ON birmovani (kmotr); CREATE INDEX pomazani_nemocnych_prijal ON pomazani_nemocnych (prijal); CREATE INDEX pomazani_nemocnych_bohosluzba ON pomazani_nemocnych (bohosluzba); CREATE INDEX pomazani_nemocnych_bez_bohosluzby_prijal ON pomazani_nemocnych_bez_bohosluzby (prijal); CREATE INDEX pomazani_nemocnych_bez_bohosluzby_kym ON pomazani_nemocnych_bez_bohosluzby (kym); CREATE INDEX matriky_farnost ON matriky (farnost); CREATE INDEX matriky_svazek ON matriky (svazek); CREATE CREATE CREATE CREATE
INDEX INDEX INDEX INDEX
krty_matrika ON krty (matrika); krty_krtenec ON krty (krtenec); krty_kmotr ON krty (kmotr); krty_bohosluzba ON krty (bohosluzba);
CREATE CREATE CREATE CREATE CREATE CREATE
INDEX INDEX INDEX INDEX INDEX INDEX
snatky_matrika ON snatky (matrika); snatky_bohosluzba ON snatky (bohosluzba); snatky_snoubenec ON snatky (snoubenec); snatky_snoubenka ON snatky (snoubenka); snatky_svedek1 ON snatky (svedek1); snatky_svedek2 ON snatky (svedek2);
CREATE INDEX pohrby_matrika ON pohrby (matrika); CREATE INDEX pohrby_bohosluzba ON pohrby (bohosluzba); CREATE INDEX kniha_posty_farnost ON kniha_posty (farnost); CREATE INDEX kniha_posty_doruceno ON kniha_posty (doruceno); CREATE INDEX kniha_posty_vrizeno_dne ON kniha_posty (vyrizeno_dne); CREATE INDEX prijmy_vydaje_datum ON prijmy_vydaje (datum); CREATE INDEX prijmy_vydaje_farnost ON prijmy_vydaje (farnost);
47
Prˇı´loha B
Uka´zky dialogu˚
Obra´zek B.1: Dialog pro zada´nı´ uzˇivatelske´ho jme´na, hesla a stroje se spusˇteˇny´m serverem
Obra´zek B.2: Dialog pro zada´nı´ dekretu
Obra´zek B.3: Dialog pro zada´nı´ mimorˇa´dne´ akce
48
B. UKA´ZKY DIALOGU˚
Obra´zek B.4: Dialog s informacemi o farnosti
Obra´zek B.5: Informace o rocˇnı´ku vy´uky na´bozˇenstvı´
(a)
(b)
Obra´zek B.6: Hodina na´bozˇenstvı´: za´lozˇky Informace o hodineˇ na´bozˇenstvı´(a) a Navsˇteˇvujı´cı´ farnı´ci(b)
49
B. UKA´ZKY DIALOGU˚
Obra´zek B.7: Dialog pro zada´nı´ datumu˚ od - do
Obra´zek B.8: Dialog pro zada´nı´ ohla´sˇek
(a)
(b)
Obra´zek B.9: Vytva´rˇenı´ sva´tku pravidelne´ho (a) a nepravidelne´ho (b)
Obra´zek B.10: Vytvorˇenı´ matriky (MatrikaDialog)
50
B. UKA´ZKY DIALOGU˚
Obra´zek B.11: Krˇest
Obra´zek B.12: Snˇatek
Obra´zek B.13: Pohrˇeb
51
B. UKA´ZKY DIALOGU˚
Obra´zek B.14: Prvnı´ svate´ prˇijı´ma´nı´
Obra´zek B.15: Birˇmova´nı´
(a)
(b)
Obra´zek B.16: Pomaza´nı´ nemocny´ch prˇi bohosluzˇbeˇ (a) a mimo bohosluzˇbu (b)
52
Prˇı´loha C
Tiskove´ vy´stupy
Obra´zek C.1: Porˇad bohosluzˇeb
53
C. TISKOVE´ VY´STUPY
Obra´zek C.2: Potvrzenı´ sbı´rky
54