<smazatZpracovávanouPřihlášku> <editovatÚdajeODobrovolníkovi> <smazatZpracovávanouPřihlášku> <editovatÚdajeOWorkcampu>
Požádat o přijetí na workcamp Tok událostí: Žádost o přijetí na workcamp (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Požádat o přijetí dobrovolníka na workcamp" 2. Systém zobrazí dialog "Odeslat žádost o přijetí dobrovolníka na workcamp" 3. Systém vytvoří emailovou zprávu ze šablony "žádost o přijetí dobrovolníka na workcamp"; příjemce = emailová adresa Organizace, předmět = "{příjmení} [age {věk dobrovolníka}] on {kód workcampu}", text = {text ze šablony} 3.1 UživatelZaměstnanec k emailu přiloží VEFku dobrovolníka 4. INCLUDE (Poslat email)
Odmítnout workcamp Tok událostí: Odmítnutí workcampu (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Odmítnout workcamp" 2. KDYŽ je status přihlášky "WAITING FOR REPLY": 2.1 KDYŽ jsou v přihlášce další workcampy, o které nebylo požádáno: 2.1.1 Systém aktualizuje stav přihlášky na "NOT ASKED" 2.2 Jinak: 2.2.1 Systém aktualizuje stav přihlášky na "REJECTED" 3. KDYŽ je status přihlášky "ACCEPTED": 3.1 Systém aktualizuje stav přihlášky na "ACCEPTED and CANCELLED" 4. Systém vytvoří emailovou zprávu ze šablony "informovat dobrovolníka o odmítnutí jeho účasti na workcampu" 5. INCLUDE (Poslat email)
18
2. POŽADAVKY NA INFORMAČNÍ SYSTÉM
2.3.7.1
Životní cyklus přihlášky
stm Životní cyklus přihlášky
Začátek práce s přihláškou (nová)
NOT ASKED
Podána žádost o přijetí na WC
WAITING FOR REPLY
Účast dobrovolníka na WC odmítnuta [V přihlášce jsou další WC, o ktreré nebylo požádáno]
Dobrovolník zrušil svou přihlášku
Účast dobrovolníka na WC odmítnuta [Už bylo požádáno o všechny WC v přihlášce]
Dobrovolník zrušil svou přihlášku
Dobrovolník přijat na WC
CANCELLED
REJECTED
ACCEPTED
Dobrovolník účast na WC zrušil nebo byl WC organizací zrušen
ACCEPTED AND CANCELLED
Dobrovolník jede na WC
Konec
Obr. 11: Životní cyklus přihlášky
2.3.8
Modul Správa uživatelů
Balíček obsahuje případy užití související se správou uživatelů systému – přidání, odebrání uživatele, změna účtu a hesla; viz. Obr. 12. Případy užití, které mají u stereotypu relace «extend» uvedeno {jeVybránUživatel}, znamená to vstupní podmínku: Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakého existujícího uživatele z nabídky. Vytvořit nového uživatele Tok událostí: Vytvoření nového uživatele (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz Vytvořit nového uživatele 2. Systém zobrazí příslušný dialog a umožní zadat: jméno, příjmení, email, uživatelské jméno, heslo a uživatelskou roli v systému (DobrovolníkEditor, ZaměstnanecInexu, Administrátor) 3. UživatelZaměstnanec zadá příkaz "Vytvořit uživatelský účet" 4. KDYŽ se v Systému ještě nevyskytuje dané uživatelské jméno, 4.1 Systém vytvoří nový uživatelský účet 4.2 Systém odešle na uvedený email přihlašovací údaje 5. JINAK: 5.1 Systém vyzve ke změně uživatelského jména 5.2 Tok událostí pokračuje bodem (2)
2. POŽADAVKY NA INFORMAČNÍ SYSTÉM
19
uc Modul Správa uživatelů «Pre-condition» {K systému je přihlášen UživatelZaměstnanec}
Modul Správa uživatelů
Vytvořit nového uživatele
Změnit uživatelský účet
«extend» {jeVybránUživatel}
UživatelZaměstnanec (fromAktéři)
Zobrazit uživatele «extend» {jeVybránUživatel}
Odstranit uživatele
Administrátor (from Aktéři)
Případ užití smí spustit jen Administrátor.
Obr. 12: Případy užití – Modul Správa uživatelů
Změnit uživatelský účet Tok událostí: Změna uživatelského účtu (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Změnit uživatelský účet" 2. Systém zobrazí dialog s údaji daného uživatelského účtu a umožní změnit všechny údaje s výjimkou uživatelského jména 3. Systém uloží změny do databáze
2.3.9
Modul Statistiky
Balíček obsahuje případy užití související se získáváním statistických dat na konci sezóny. Požadavky na data se mění každou sezónu, je nutná značná variabilita "dotazů". Viz. Příloha 10.B.
2.3.10 Modul Synchronizace databází Balíček obsahuje případy užití související se synchronizací lokální databáze s databází na serveru www.inexsda.cz. Jedná se proces "stažení přihlášek", které si podali zájemci o účast na workcampech, ze serveru inexsda.cz a upload dat o workcampech na stejný server; viz. Obr. 13. Upload workcampů na web Tok událostí: Upload workcampů (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Uploadovat workcampy na web" 2. Systém provede upload všech workcampů (všech údajů o nich) do databáze na webu inexsda.cz, které splňují podmínku viditelnosti na webu; nastavené datum_zveřejnění_workcampu větší nebo rovno aktuální_datum a zároveň je datum zahájení workcampu v intervalu od-do definovaném pro daný upload.
20
2. POŽADAVKY NA INFORMAČNÍ SYSTÉM
uc Modul Synchronizace databází Modul Synchronizace databází
Upload workcampů na web
Vyhledat podobné dobrovolníky
Download přihlášek z webu Vytvořit přihlášku k dobrovolníkovi
UživatelZaměstnanec (fromAktéři)
«include» (fromModul Přihlášky)
«extend» «extend»
«Pre-condition» {K systému je přihlášen UživatelZaměstnanec}
Zpracovat přihlášky «extend»
Smazat aktuální přihlášku
«include» «extend» «extend»
Bod 4. scénáře případu užití je rozšířen o skutečnost, že systém předvyplní všechny údaje dostupné v přihlášce.
«extend» {jeVybranýDobrovolník}
Přidat nového dobrovolníka
Přejít na další přihlášku
Aktualizovat údaje o dobrovolníkovi
(fromModul Dobrovolníci)
Obr. 13: Případy užití – Modul Synchronizace databází
Download přihlášek z webu Tok událostí: Download přihlášek (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Stáhnout přihlášky z webu" 2. Systém získá podané přihlášky ze serveru www.inexsda.cz a zobrazí jejich počet
Zpracovat přihlášky Tok událostí: Zpracování přihlášek (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Zpracovat přihlášky" 2. WHILE jsou k dispozici další přihlášky: 2.1 Systém nabídne ke zpracování další podanou přihlášku v pořadí od nejstarší 2.2.1 Systém zobrazí údaje z přihlášky – datum podání, jméno a příjmení, rodné číslo, email, bydliště a kódy workcampů, na které se dobrovolník hlásí 2.2.2 INCLUDE (Vyhledat podobné dobrovolníky)
2. POŽADAVKY NA INFORMAČNÍ SYSTÉM
21
Vyhledat podobné dobrovolníky Tok událostí: Vyhledání podobných dobrovolníků (Simple) 1. Systém vyhledá "podobné dobrovolníky" již v systému existující – shoda rodného čísla a/nebo jména a příjmení a/nebo emailu 1.1 KDYŽ systém najde nějaké "podobné dobrovolníky", pak: 1.1.1 Nalezené výsledky systém zobrazí v tabulce 1.2 JINAK: 1.2.1 Systém zobrazí informaci, že nikdo nebyl nalezen
2.3.11 Modul Upomínky Balíček obsahuje případy užití týkající se upomínek na blížící se události, kterými jsou např.: INEX dobrovolníkovi neposlal včas infosheet, pořádající organizace neodpověděla v termínu na podanou žádost o přijetí dobrovolníka na workcamp; viz. Obr. 14. uc Modul Upomínky Modul Upomínky
Vytvořit upomínky časovačem
Vytvořit upomínky
«include»
Čas «include»
(fromAktéři)
Požádat o přijetí na workcamp Obnovit upomínky
«include» Znovu poslat žádost o přijetí
«Pre-condition» {K systému je přihlášen UživatelZaměstnanec}
«extend»
«extend»
(fromModul Přihlášky)
Upomínka poslat infosheet
«extend» «include» Zobrazit upomínky
Poslat infosheet
UživatelZaměstnanec (fromAktéři)
(fromModul Přihlášky)
Obr. 14: Případy užití – Modul Upomínky
Vytvořit upomínky Tok událostí: Vytvoření upomínek (Simple) 1. Systém vytvoří novou upomínku, když: 1.1 Organizace včas neodpověděla na žádost o přijetí dobrovolníka a statut přihlášky není CANCELED; více než 5 pracovních dnů (odpověď by měla přijít do 3 pracovních dnů) 1.2 Dobrovolníkovi nebyl měsíc (30 dnů) před odjezdem na workcamp odeslán infosheet
2.3.12 Modul Workcampy Balíček obsahuje případy užití týkající se správy workcampů. Kromě mazání workcampu má k těmto funkcím přístup aktér DobrovolníkEditor; viz. Obr. 15.
22
2. POŽADAVKY NA INFORMAČNÍ SYSTÉM
Případy užití, které mají u stereotypu relace «extend» uvedeno {jeVybránWorkcamp}, znamená to vstupní podmínku: Případ užití je rozšířen, pokud ObecnýUživatel vybere nějaký existující workcamp z nabídky. uc Modul Workcampy Modul Workcampy «Pre-condition» {K systému je přihlášen ObecnýUživatel}
Zobrazit detaily
«extend» {jeVybránWorkcamp}
Vyhledat workcampy
«extend» Seřadit výpis «extend»
Zobrazit Workcampy
ObecnýUživatel
«extend» Přidat nový workcamp
(fromAktéři)
«extend» {jeVybránWorkcamp} «include»
Editovat údaje o workcampu
«include» Načtení nabídkek
Obr. 15: Případy užití – Modul Workcampy
Přidat nový workcamp Tok událostí: Přidání nového workcampu (Basic Path) 1. Případ užití začíná, když Uživatel zadá příkaz "Přidat nový workcamp" 2. INCLUDE (Načtení nabídek) 3. Systém zobrazí dialog pro přidání nového workcampu. 4. Uživatel vybere z nabídky "Organizace" požadovanou organizaci, zadá kód workcampu ("wc_fiye"), název WC, z nabídky "Země" vybere zemi konání, zadá komunikační jazyk, datum konání WC od-do (pokud není známo, tak volitelně zadá přibližné datum do speciálního pole), z nabídky "Zaměření" vybere požadované zaměření (možno zadat dvě různá, první povinné), vybere typ WC (pro: teenagery, rodiny, důchodce, vegetariány nebo bez upřesnění = pro všechny), zadá minimální a maximální věk, oblast/místo konání, popis činnosti, popis anglicky, zadá typ ubytování a stravování a obecné poznámky k WC 5. Uživatel zadá kapacitu workcampu (plná kapacita, počet volných míst, počet volných míst muži a počet volných míst ženy 6. Uživatel volitelně zadá datum, ke kterému se má workcamp zobrazit na webu pro veřejnost (defaultně aktuální datum = hned) 7. Uživatel volitelně zadá, zda organizace urgentně hledá dobrovolníky na workcamp (ano / ne, defaultně ne) 8. Uživatel zadá příkaz "Uložit" 9. Systém provede validaci údajů (jedinečnost kódu workcampu v daném roce, smysluplné kapacity a věky, datum do _větší_než_; od) 10. KDYŽ proběhla validace bez chyb: 10.1 Systém uloží data z formuláře do databáze
2. POŽADAVKY NA INFORMAČNÍ SYSTÉM
23
11. JINAK: 11.1 Systém informuje ObecnéhoUživatele o problémech 11.2 Tok událostí pokračuje bodem 4. (úprava již zadaných údajů)
Vyhledat workcampy Tok událostí: Vyhledání workcampu (Basic Path) 1. Případ užití začíná, když ObecnýUživatel vepíše hledaný údaj do speciálního vyhledávacího pole 2. KDYŽ Uživatel volitelně vybere ze seznamu, jaké workcampy zahrnout do hledání (volné / volné pro ženy / volné pro muže / všechny – tedy i plné) 2.1 Systém hledání omezí jen na zvolenou 'skupinu' WC 3. JINAK Systém zahrne do hledání všechny workcampy, i plné 4. Uživatel zadá příkaz "Filtrovat" 5. Systém prohledá databázi workcampů pořádaných v daném roce (kód workcampu / jméno organizace / název WC / kód zaměření / popis práce / poznámky) 6. Systém zobrazí v tabulce výsledek hledání
Zobrazit detaily Tok událostí: Zobrazení detailů o workcampu (Simple) 1. Případ užití začíná, když ObecnýUživatel zadá příkaz "Zobrazit detaily" 2. Systém zobrazí detaily o aktuálně označeném workcampu v k tomu vymezeném prostoru (novém okně): 2.1 Detaily = kód, název, datum a místo konání workcampu; počet přihlášených dobrovolníků, počet dobrovolníků, o které bylo zažádáno, kolik bylo přijato a odmítnuto; oblast konání, pracovní náplň, ubytování, poznámky; dobrovolníci přihlášení na daný workcamp
2.3.13 Modul Zálohování Balíček obsahuje případy užití týkající se zálohování databáze. Zálohuje se prostředky daného databázového stroje.
24
3
3. ANALÝZA A DATOVÝ MODEL
Analýza a datový model
Tato kapitola se věnuje druhému pracovnímu postupu při vývoje aplikací podle metodiky Unified Process nazvanému Analýza. V této fázi se vytvářejí analytické třídy a realizace případů užití. Analytické třídy slouží kromě hlubšího pochopení požadavků také jako východisko ke tvorbě datového modelu. Při analýze informačního systému pro organizaci INEX – SDA bylo již k dispozici databázové schéma a jeho zkoumáním nebyly shledány žádné významné nedostatky nebo problémy. Z konzultací se zadavatelem vyplynul požadavek současného provozu původního informačního systému a nového s inkrementačně dodávanými funkcionalitami. To vedlo k rozhodnutí využít existující datové úložiště i pro nový systém, čímž odpadá nutnost synchronizace dat dvou různých databází. Schéma databáze však bylo třeba modifikovat, aby vyhovovalo novým požadavkům na systém. Ukázalo se, že nutných modifikací není mnoho a nejsou natolik významné, aby se vyplatilo konvertovat tabulky na analytické třídy, provést změny a model zpět transformovat na tabulky databázového schématu. Význam jednotlivých tabulek a atributů je přímo zřejmý z jejich názvů, proto byly potřebné úpravy provedeny přímo na úrovni tabulek. Následující oddíl popisuje výsledný datový model.
3.1
Datový model
Datový model informačního systému se skládá z dvou balíčků. Balíček inex_db reprezentuje primární databázi systému umístěnou na lokální síti v sídle zadavatele. Vzhledem k plošné velikosti je diagram rozdělen na menší části – následuje na obrázcích Obr. 16, Obr. 17 a Obr. 18. Balíček inexsda-cz představuje část schématu databáze na serveru www.inexsda.cz – Obr. 19. Diagramy byly získány prostředky modelovacího CASE nástroje z databázového schématu a následně upraveny. Podrobná specifikace datového modelu je svým rozsahem nad rámec tohoto textu a čtenář ji najde v Příloze 10.C. Následující strany obsahují rozdělený diagram datového modelu a pod každým příslušným obrázkem jsou uvedeny změny provedené v dané části schématu.
3. ANALÝZA A DATOVÝ MODEL
25
class inex_db
training
+training_pkey
«column» 1 *PK tr_name: char(25)
+country_tr_name_fkey
(tr_name = tr_name)
«PK» + training_pkey(char) +training_pkey
(co_id = co_id)
1
country
0..* «column» *PK co_id: char(8) * co_name: char(32) * co_visa: boolean = false +country_pkey co_visareq: text +country_pkey * co_invitationletter: boolean = false 1 FK tr_name: char(25) 1
+country_pkey
«PK» + country_pkey(char)
«FK» country_tr_name_fkey(char) 1 +
(tr_name = tr_name)
+country_pkey
+member_tr_name_fkey 0..*
+member_co_id_fkey 0..*
Nepoužívá se: co_invitationletter co_visareq
(co_id_2 = co_id)
member
(wc_country = co_id)
«column» *PK me_id: integer = nextval('member... * me_firstname: char(32) +member_co_id2_fkey * me_lastname: char(32) * me_email: char(128) 0..* me_mobile: char(32) me_phone: char(48) me_phone2: char(24) me_fax: char(24) me_address1: char(64) me_address2: char(64) me_city: char(64) me_zip: char(16) * me_activemember: boolean = false me_comments: text me_passport: char(64) * me_male: char(8) * me_vegetarian: boolean = false * me_maritalstatus: char(16) = 'n/a'::characte... me_negativeexperience: text me_bankcode: char(8) me_accountnumber: char(64) me_specificsymbol: char(8) me_birthdate: time with time zone * me_birthnumber: char(16) FK co_id: char(8) me_nationality: char(8) me_occupation: char(64) me_passportexpiry: time with time zone me_emergencycontact: char(64) me_emdayphone: char(32) me_emnightphone: char(32) me_speakwell: char(64) me_speaksome: char(64) me_specialneeds: text me_pastexperience: text FK tr_name: char(25) me_adress1_2: char(64) me_adress2_2: char(64) me_city_2: char(64) me_zip_2: char(64) FK co_id_2: char(8) +member_pkey «unique» + member_me_birthnumber_key(char)
workcamp «column» *PK wc_id: integer = nextval('workca... *FK wc_country: char(8) wc_language: char(16) FK wi_id: char(16) FK wi_id2: char(16) *FK or_id: char(48) * wc_name: char(182) wc_endesc: text wc_czdesc: text wc_begin: time with time zone wc_end: time with time zone +workcamp_or_id_fkey * wc_freeplaces: integer = 10 * wc_capacity: integer = 10 0..* * wc_freemale: integer = 1 * wc_freefemale: integer = 1 * wc_minage: integer = 18 +workcamp_wi_id_fkey * wc_maxage: integer = 98 wc_enreq: text 0..* wc_czreq: text * wc_vegetarian: boolean = false wc_fiyecode: char(16) wc_aproxdate: char(50) wc_area: text wc_workdesc: text wc_accomodation: text * wc_teenage: boolean = false wc_notes: text wc_booking: text * wc_wanted: boolean = false * wc_senior: boolean = false * wc_family: boolean = false
«index» + workcamp_or_id(char) + workcamp_wc_fiyecode(char) + workcamp_wi_id(char)
«index» + member_co_id(char) + member_me_birthnumber_key(char)
«FK» + workcamp_or_id_fkey(char) + workcamp_wc_country_fkey(char) + workcamp_wi_id2_fkey(char) + workcamp_wi_id_fkey(char)
«FK» + member_co_id2_fkey(char) + member_co_id_fkey(char) + member_tr_name_fkey(char) 1
+workcamp_wc_country_fkey 0..*
«PK» + workcamp_pkey(integer)
1
«PK» + member_pkey(integer)
+member_pkey
1
+workcamp_pkey
+workcamp_wi_id2_fkey 0..*
1
(me_id = me_id) (wc_id = wc_id)
| x| | |
|
Obr. 16: Datový model – balíček inex_db, část 1
Provedené změny tabulka workcamp: nové sloupce wc_senior a wc_family, indikující, zda je daný workcamp určen pro seniory a/nebo celé rodiny změna sloupce wc_language – max. délka zvětšena z 8 na 16 znaků, aby bylo možné uložit až čtyři kódy jazyků podle ISO 639-2 (-3) včetně oddělovače
26
3. ANALÝZA A DATOVÝ MODEL
organization
(co_id = co_id)
«column» *PK or_id: char(48) *FK co_id: char(8) * or_name: char(128) or_email1: char(64) or_incomingemail: char(50) +organization_co_id_fkey or_outgoingemail: char(50) 0..* or_email2: char(64) or_contactperson: char(64) or_phone: char(24) or_mobile: char(24) or_fax: char(24) or_address1: char(64) or_address2: char(64) or_postcode: char(16) or_zip: char(32) or_website: char(128) * or_network: char(50) +organization_pkey 1
«view» view_application_top_wc
«view» view_applications_calculated_status
«view» view_applications
«PK» + organization_pkey(char) «index» + organization_co_id(char)
«view» view_alerts
«FK» + organization_co_id_fkey(char)
«view» view_members
(or_id = or_id)
know_about_inex «column» *PK ka_year: integer *PK ka_from: char(64) ka_count: integer = 0
«view» view_workcamp
«PK» + know_about_inex_pkey(integer, char) «index» + know_about_inex_ka_from(char)
+workcamp_or_id_fkey
«view» view_volunteers +workcamp_wi_id_fkey
(wi_id = wi_id)
+workcamp_intention_pkey
«view» view_notrequestedbyorganization 1
workcamp_intention «column» *PK wi_id: char(16) * wi_namecz: char(128) wi_nameen: char(128) wi_desccz: text wi_descen: text «PK» +workcamp_intention_pkey + workcamp_intention_pkey(char) 1 (wi_id2 = wi_id) +workcamp_wi_id2_fkey
| |
| x| |
Obr. 17: Datový model – balíček inex_db, část 2
Provedené změny nová tabulka know_about_inex:
pro evidenci statistik, odkud se dobrovolníci, kteří si podali přihlášku, dozvěděli o organizaci INEX – SDA; rozlišení podle kalendářních roků (podrobnosti jsou uvedeny v příloze 10.C) změna pohledu view_workcamp: úprava zobrazení zaměření workcampu: rozdělení kódů čárkou, pokud má daný WC dvě zaměření, např. "ENVIAGRI" → "ENVI,AGRI"
3. ANALÝZA A DATOVÝ MODEL
27
(me_id = me_id)
+application_wc_id_fkey 0..* +payment_me_id_fkey 0..* application payment
+application_me_id_fkey «column» 0..* *PK ap_id: char(32) *FK me_id: integer * ap_receiveddate: time with time zone ap_acceptdate: time with time zone ap_rejectdate: time with time zone ap_description: text ap_canceleddate: time with time zone * ap_returnpayment: boolean = false ap_motivation: text * ap_tryotherwc: boolean = false ap_prefferedtime: char(50) ap_prefferedcountry: char(50) ap_generalremarks: text ap_resultby: char(32) ap_infosheetby: char(32) * ap_haveinvletter: boolean = false ap_prefferedintention: text ap_cancelreason: text ap_infosheetsentdate: time with time zone FK wc_id: integer ap_status: char(32) = 'NOT ASKED'::ch... ap_log: text ap_status_detail: text = 'NOT PAID!'::text ap_enterdate: time with time zone
«column» *PK pa_id: integer = nextval('paymen... *FK me_id: integer *FK mo_name: char(32) *FK rp_name: char(32) ap_id: char(32) ts_timescale: integer = 0 * pa_received: time with time zone = now() pa_description: char(255) * pa_amount: numeric(0) pa_returnedamount: numeric(0) = 0 pa_returnreason: text «PK» + payment_pkey(integer) «index» + payment_ap_id(char) + payment_me_id(integer) + payment_pa_id(integer) «FK» + payment_me_id_fkey(integer) + payment_mo_name_fkey(char) + payment_rp_name_fkey(char) +payment_rp_name_fkey
0..*
+payment_mo_name_fkey
0..* «PK» + application_pkey(char)
(rp_name = rp_name)
+reason_of_payment_pkey
(mo_name = mo_name)
1
+method_of_payment_pkey
reason_of_payment
«index» + application_me_id(integer)
1
«FK» + application_me_id_fkey(integer) + application_wc_id_fkey(integer)
method_of_payment
«column» *PK rp_name: char(32)
«column» *PK mo_name: char(32)
«PK» + reason_of_payment_pkey(char)
«PK» + method_of_payment_pkey(char)
+application_pkey
1
(ap_id = ap_id) +application_workcamp_ap_id_fkey 0..* application_workcamp «column» *pfK ap_id: char(32) *PK wc_id: integer = 0 * aw_priority: integer aw_requestdate: time with time zone aw_acceptdate: time with time zone aw_rejectdate: time with time zone
email_template
users
«column» *PK em_id: char(32) em_body: text «PK» + email_template_pkey(char)
«column» *PK us_username: char(16) * us_password: char(32) * us_firstname: char(32) * us_lastname: char(32) * us_email: char(128) «PK» + users_pkey(char)
languages
«PK» + application_workcamp_pkey(char, integer) «index» + application_workcamp_ap_id(char) + application_workcamp_not_null(char) + application_workcamp_wc_id(integer) + application_workcamp_uniq_priority(char) «FK» + application_workcamp_ap_id_fkey(char)
user_roles
«column» *PK la_code: char(3) la_name: char(20) «PK» + languages_pkey(char)
settings
«column» *PK ur_username: char(16) *PK ur_rolename: char(16)
«column» *PK se_name: char(32) * se_value: text
«PK» + ur_pkey(char, char)
«PK» + settings_pkey(char)
| | | x|
|
Obr. 18: Datový model – balíček inex_db, část 3
Provedené změny nová tabulka languages:
kódy jazyků podle ISO 639-2 (-3) a jejich popisy – dobrovolné užití pro jazyky workcampů a jazyky, kterými mluví dobrovolníci nové tabulky users a user_roles: evidence uživatelů systému a jejich uživatelských rolí tabulka application:
28
3. ANALÝZA A DATOVÝ MODEL
nový sloupec ap_enterdate – datum podání přihlášky dobrovolníkem (dříve jen datum přijetí a zpracování přihlášky ap_receivedate)
class inexsda-cz
vef «column» *PK vef_id: SMALLINT * vef_datum: TIMESTAMP = ''CURRENT_TIMES... vef_surname: VARCHAR(40) vef_first: VARCHAR(40) vef_sex: ENUM = 'female' vef_address: TEXT vef_city: VARCHAR(50) vef_zip: VARCHAR(20) vef_email: VARCHAR(40) vef_mobil: VARCHAR(20) vef_tel: VARCHAR(20) vef_birthdate: DATE vef_birthplace: VARCHAR(40) vef_nationality: VARCHAR(15) vef_occupation: VARCHAR(20) vef_passport: VARCHAR(20) vef_expiry: DATE vef_emer_name: VARCHAR(40) vef_emer_day: VARCHAR(20) vef_emer_nig: VARCHAR(20) vef_lang_well: VARCHAR(40) vef_lang_some: VARCHAR(40) vef_health: VARCHAR(40) vef_past: TEXT vef_code1: VARCHAR(10) vef_name1: VARCHAR(20) vef_date1: VARCHAR(20) vef_code2: VARCHAR(10) vef_name2: VARCHAR(20) vef_date2: VARCHAR(20) vef_code3: VARCHAR(10) vef_name3: VARCHAR(20) vef_date3: VARCHAR(20) vef_code4: VARCHAR(10) vef_name4: VARCHAR(20) vef_date4: VARCHAR(20) vef_code5: VARCHAR(10) vef_name5: VARCHAR(20) vef_date5: VARCHAR(20) vef_code6: VARCHAR(10) vef_name6: VARCHAR(20) vef_date6: VARCHAR(20) vef_code7: VARCHAR(10) vef_name7: VARCHAR(20) vef_date7: VARCHAR(20) vef_code8: VARCHAR(10) vef_name8: VARCHAR(20) vef_date8: VARCHAR(20) vef_note: VARCHAR(60) vef_motivation: TEXT vef_remarks: VARCHAR(255) * vef_rc: VARCHAR(15) vef_potvrzeni: ENUM = 'email' vef_infosheet: ENUM = 'email' vef_ucet: VARCHAR(40) vef_souhlas: ENUM = 'n' vef_c_address: TEXT * vef_c_city: VARCHAR(50) * vef_c_zip: VARCHAR(20) * vef_know_web: TINYINT * vef_know_fri: TINYINT * vef_know_leaf: TINYINT * vef_know_med: TINYINT * vef_know_other: VARCHAR(100)
Tabulka pro uložení podaných přihlášek (VEFek) na serveru.
«PK» + PK_vef(SMALLINT)
Obr. 19: Datový model – balíček inexsda-cz
4. NÁVRH A REALIZACE
4
29
Návrh a realizace
Tato kapitola se věnuje dalším pracovním postupům při vývoji aplikací podle metodiky Unified Process, nazvaným Návrh a Implementace. Návrh se zabývá realizací požadavků v architektuře systému, přičemž je snahou využití standardních návrhových a architektonických vzorů, vytvářen je především podrobný model návrhových tříd, které je již snadné transformovat na kostru zdrojového kódu. Implementace pak pojednává o samotné tvorbě programového díla. Na projektu informačního systému pro INEX – SDA byl z důvodu požadavku na webové řešení zvolen architektonický návrhový vzor Model-View-Controller (MVC). MVC např. podle [wiki-MVC] rozděluje aplikaci do tří komponent:
4.1
Model (model), což je doménově specifická reprezentace informací, s nimiž aplikace pracuje. View (pohled), který převádí data reprezentovaná modelem do podoby vhodné k interaktivní prezentaci uživateli. Controller (řadič), který reaguje na události (typicky pocházející od uživatele) a zajišťuje změny v modelu nebo v pohledu.
Volba platformy
Platformou v tomto kontextu se rozumí prostředí, ve kterém bude provozován nově vytvářený informační systém – operační systém a další podpůrné softwarové prostředky pro běh aplikace. Z pohledu požadavku na minimální náklady spojené s programovým vybavením směřuje volba operačního systému na některou z volně dostupných distribucí Linuxu. Potom se volba programovacího jazyka omezuje vzhledem k současným trendům v oblasti webových technologií na skriptovací jazyky, např. PHP(5), Python a kompilované, např. Java EE. Technologie společnosti Microsoft, např. ASP.NET vyžadují vlastní operační systémy a aplikační servery s nutností zakoupení licence, proto je nebudeme uvažovat. Po důkladném zvážení všech možností byl zvolen programovací jazyk Java. Přináší s sebou výhodu nezávislosti na konkrétní platformě a operačním systému díky běhu na virtuálním stroji. Jde o moderní objektově orientovaný jazyk s mnoha volně dostupnými rozšiřujícími frameworky a knihovnami, jehož běhové i vývojové prostředí je k dispozici zdarma. Ze současných webových technologií založených na jazyku Java byl zvolen MVC rámec JavaServer Faces, JSF[SunJSF], kterým se zabývá i [Mann]. JSF definuje jednotlivé objekty stránky jako komponenty s rozšířenou funkcionalitou, například k formulářovému textovému poli je možno přiřadit validátor obsahu.
4.2
Volba vývojového prostředí
Při volbě vývojového prostředí – IDE5 – byl kladen důraz na kvalitu a snadnou dostupnost a v neposlední řadě také na autorovu zkušenost s produktem. Na platformě Java přicházejí v úvahu NetBeans IDE a Eclipse6 IDE, přičemž zvoleno bylo první z nich. NetBeans IDE navíc nabízí již zabudovanou podporu vizuálního návrhu webových aplikací založených 5
Integrated Development Environment, IDE, integrované vývojové prostředí. Softwarový nástroj usnadňující vývoj aplikací včetně podpory ladění (debugger) a profilování (profiler). 6 Eclipse, http://eclipse.org, je open source platforma a IDE pro vývoj aplikací.
30
4. NÁVRH A REALIZACE
na technologiích JavaServer Faces a AJAX7 formou zásuvného modulu Visual Web JSF – projekt Woodstock8. Tato podpora významně usnadňuje vývoj JSF aplikací především rozšiřujícími komponentami a propojením View části modelu MVC, reprezentované JSF stránkami (XML dokument) a částí Model reprezentovanou tzv. backing page bean, což je „výkonný kód“ a jsou na něj propojeny jednotlivé komponenty a jejich akce při různých událostech. Pro optimální a efektivní návrh a implementaci aplikace, založené na těchto technologiích, je potřebné porozumět životnímu cyklu JSF a principům návrhu aplikací, využívajících framework Woodstock. Těmto tématům se věnuje např. [Mann], [SunJSF], [VisJSF], [NB-IDE] a [Prakash].
4.3
Model nasazení
Po zvolení cílové platformy v odstavci 4.1 je možné se detailněji zamyslet nad modelem nasazení navrhovaného systému v reálném podnikovém prostředí budoucího provozovatele a návrh již částečně směrovat zvolenou cestou. Model obsahuje jednotlivé výpočetní uzly a zařízení a artefakty informačního systému. Byly navrženy tři odlišné varianty nasazení IS. První varianta na Obr. 21 uvažuje zřízení webhostingu, druhá varianta z Obr. 22 předpokládá samostatný počítač pro aplikaci a třetí varianta na Obr. 23 představuje nejúspornější řešení co do počtu jednotek hardwaru. Tyto varianty byly konzultovány se zadavatelem a jeho správcem sítě a jako nejvýhodnější byla vyhodnocena varianta druhá (Obr. 22). Kompletní dokumentace všech variant modelu je obsažena v Příloze 10.E. deployment Model nasazení Uzly
Klienti
Servery
Artefakty
+ Klienti
+ PCmimoINEX
+ DBserver
+ DBschéma
+ Servery
+ PCvINEXu
+ server
+ INEXwebApp
+ SMTPserver
+ Apache
+ www.inexsda.cz
+ Apache Tomcat 6
+ Zařízení
+ Firefox, MS IE Zařízení
+ PostgreSQL
+ INEXinetGW
V1: hosting, DB jen v INEXu a na inexsda.cz
+ SMTP server
V2: Samostatné PC pro Tomcat
V3: Jeden vlastní server
+ iGW
+ iGW
+ iGW
+ DB-server-v-INEXu
+ DB-server-v-INEXu
+ PC-mimo-INEX
+ PC-mimo-INEX
+ PC-mimo-INEX
+ PC-v-INEXu
+ PC-v-INEXu
+ PC-v-INEXu
+ Server-v-INEXu
+ pipni.cz
+ Server-v-INEXu
+ Virt-server
+ Server-v-INEXu
+ Tomcat-server-v-INEXu
+ Virt-server
+ Virt-server
"V1" a "V2" umožňují přechod na "V3": - instalace potřebného SW - přesun databáze z 'DB-server-v-INEXu' na 'Server-v-INEXu' - "V1" --> "V3": přesun 'INEXwebApp' z 'pipni.cz' na 'Server-v-INEXu' - "V2" --> "V3": přesun 'INEXwebApp' z 'Tomcat-server-v-INEXu' na 'Server-v-INEXu'
Zvolená varianta
Obr. 20: Diagram modelu nasazení
7
AJAX je akronym pro Asynchronous JavaScript and XML, technologie vývoje interaktivních webových aplikací, které umožňují měnit obsah zobrazovaných stránek bez nutnosti kompletního znovunačtení. 8 Viz. kapitola 9.2 – Software.
4. NÁVRH A REALIZACE
31
deployment V1: DB jen v INEXu a na inexsda.cz
Varianta 1: Databáze jen v INEXu a na inexsda.cz, ne na pipni.cz.
SMTP server povolen pro IP adresu pipni.cz (WWW{2|3} -> 193.86.238.{12|13}).
PC-v-INEXu :PCvINEXu
Server-v-INEXu :server
«browser» prohlížeč1 : Firefox, MS IE
«smtpServer» SMTP :SMTP server
Přístup k databázi povolen (i) pro IP adresu pipni.cz (WWW{2|3} -> 193.86.238.{12|13}).
DB-server-v-INEXu :DBserver
«dbServer» dbserver2 :PostgreSQL
«TCP/IP» «HTTPS»
«deploy»
«TCP/IP»
INEX LAN «sql» DBschéma
«device» iGW :INEXinetGW
Komunikují s 'pipni.cz' "internet"
«HTTPS»
«TCP/IP» «TCP/IP»
PC-mimo-INEX :PCmimoINEX
«browser» prohlížeč2 : Firefox, MS IE
pipni.cz :server
Virt-server :www.inexsda.cz
«webserver» webserver2 : Apache
«webserver» webserver1 : Apache
«use»
«war» INEXwebApp
Pro HTTPS lze použít SSL certifikát pro *.pipni.cz.
«deploy»
«javaServletContainer» servletcontainer :Apache Tomcat 6
«use»
«dbServer» dbserver1 : PostgreSQL
"Synchronizace" databází na 'dbserver1' a 'dbserver2' iniciovaná 'INEXwebApp': 1) 'dbserver1' <-- 'dbserver2'.workcampy 2) 'dbserver1'.přihlášky --> 'dbserver2'
Práva: - přístup k DB z 'pipni.cz'
Obr. 21: Diagram modelu nasazení – varianta 1
První varianta, V1, uvažuje zřízení Java webhostingu se servlet kontejnerem Tomcat 6. Na webhostingu by nebyla databáze, využívala by se současná databáze. Tím odpadá problém synchronizace dat a/nebo vytvoření distribuovaného datového úložiště. Problém ale nastane při výpadku spojení hostingu a databázového stroje.
32
4. NÁVRH A REALIZACE
deployment V2: Samostatné PC pro Tomcat
Varianta 2 (-volba-): Samostatné PC pro Tomcat. Použití stávající PostgreSQL databáze.
HW: CPU cca 1 GHz + (AMD Athlon 900) 512 MB ++ (768 MB)
SW: Linux (openSUSE 10.3) Apache Tomcat 6.0.14 SSL - vlastní certifikát pro HTTPS
Práva: - admin. rozhraní Tomcatu - přístup k shellu (ssh)
PC-v-INEXu :PCvINEXu Tomcat-server-v-INEXu :server «browser» prohlížeč1 : Firefox, MS IE
DB-server-v-INEXu :DBserver
«HTTP»
«TCP/IP»
«webserver» webserver2 : Apache
«dbServer» dbserver2 : PostgreSQL
«use» «deploy»
Server-v-INEXu :server
«TCP/IP» «smtpServer» inex-smtp :SMTP server
«javaServletContainer» servletcontainer :Apache Tomcat 6
«deploy»
«war» INEXwebApp
«sql» DBschéma
«TCP/IP»
Virt-server :www.inexsda.cz PC-mimo-INEX :PCmimoINEX «HTTPS» «browser» prohlížeč2 : Firefox, MS IE
Komunikuje s 'Tomcat-server-v-INEXu'
«device» iGW :INEXinetGW
«TCP/IP» «webserver» webserver1 : Apache
Práva: - přístup k DB z 'Tomcat-server' (veřejná IP adresa "INEXinetGW" povolena)
"Synchronizace" databází na 'dbserver1' a 'dbserver2' iniciovaná 'INEXwebApp': 1) 'dbserver1' <-- 'dbserver2'.workcampy 2) 'dbserver1'.přihlášky --> 'dbserver2'
«use»
«dbServer» dbserver1 : PostgreSQL
Obr. 22: Diagram modelu nasazení – varianta 2 (zvolená)
Druhá varianta, V2, uvažuje samostatný počítač pro INEXwebApp a využití stávajícího databázového stroje v kanceláři INEX – SDA. Toto řešení přináší velmi významnou výhodu – server s INEXwebApp se nachází přímo na lokální síti a není přímo závislý na okamžité funkčnosti konektivity kanceláře do internetu. Komunikace se serverem www.inexsda.cz probíhá jen na vyžádání uživatele při procesu "stahování přihlášek". Třetí varianta, V3 na Obr. 23, integruje server pro INEXwebApp a databázový stroj do jediného počítače umístěného na lokální síti. Pro úplnost, původní systém založený na MS Access aplikaci pracuje v tomto prostředí: • • • •
Access aplikace slouží jako frontend k PostgreSQL databázi PostgreSQL databáze je umístěna na jednom z počítačů v kanceláři INEX – SDA Access klienti se k PostgreSQL připojují přes lokální síť Access klienti komunikují prostřednictvím internetové brány se serverem www.inexsda.cz.
4. NÁVRH A REALIZACE
33
deployment V3: Jeden vlastní server
Varianta 3: Jeden server, na kterém běží vše. HW: Intel Celeron 500MHz ++ 256 MB RAM -> 512 MB ++
Server-v-INEXu :server PC-v-INEXu :PCvINEXu
SW: PostgreSQL 8.2.x/8.3.x Apache Tomcat 6.0 SMTP server OpenSSL (?) + vlastní certifikát pro HTTPS
«webserver» webserver2 : Apache
«HTTP»
«browser» prohlížeč1 : Firefox, MS IE
«use»
«war» INEXwebApp
«javaServletContainer» servletcontainer :Apache Tomcat 6
«deploy»
«use»
Práva: - vzdálený přístup k DB (?) - admin. rozhraní Tomcatu - přístup ke skriptu pro restart Tomcatu (ssh?)
«use»
«smtpServer» inex-smtp :SMTP server
«dbServer» dbserver2 : PostgreSQL
«deploy»
«sql» DBschéma
Komunikuje s 'Server-v-INEXu' «TCP/IP» Virt-server :www.inexsda.cz
PC-mimo-INEX :PCmimoINEX
«HTTPS» «browser» prohlížeč2 : Firefox, MS IE
«device» iGW :INEXinetGW
«TCP/IP»
Práva: - přístup k DB z 'Server-v-INEXu'
"Synchronizace" databází na 'dbserver1' a 'dbserver2' iniciovaná 'INEXwebApp': 1) 'dbserver1' <-- 'dbserver2'.workcampy 2) 'dbserver1'.přihlášky --> 'dbserver2'
«webserver» webserver1 : Apache «use»
«dbServer» dbserver1 : PostgreSQL
Obr. 23: Diagram modelu nasazení – varianta 3
4.4
Model tříd
Model tříd obsahuje návrhové třídy informačního systému pro organizaci INEX – SDA (dále zkráceně INEXwebApp) s ohledem na zmíněné v předchozích odstavcích 4.1 a 4.2. Diagram modelu tříd aplikace INEXwebApp obsahuje několik balíčků. Model je detailně zaměřen na cílovou platformu Java EE, v některých specifikách i na použitý framework Visual Web JSF (projekt Woodstock [VisJSF]). Balíčky inexwebapp a secured (inexwebapp.secured, vnořený v inexwebapp) jsou jádrem business logiky aplikace. Vzhledem k frameworku Woodstock a jeho komplexnosti vznikly tyto balíčky modelu reverzním inženýrstvím zdrojového kódu. Třídy ostatních balíčků poskytují podporu aplikaci a výsledný zdrojový kód vznikal souběžně s návrhem a prototypováním na základě modelu iterativním pracovním postupem. Diagram kompletního modelu tříd je znázorněn na obrázku Obr. 24. V dalším textu jsou popsány jen vybrané balíčky a třídy modelu a jejich atributy a operace. Kompletní dokumentace je obsažena v Příloze 10.D.
34
4. NÁVRH A REALIZACE
class Model tříd
Model tříd znázorňující hierarchii tříd aplikace "INEXwebApp"
«framework» Frameworky
JavaScript Použité frameworky
+ Visual JSF
«system» secured
«system» inexwebapp
JavaScript podpora aplikace na straně klienta
+ jsFunctions
database + CheckDbConnection
+ ApplicationBean1
+ Applications
+ DataProviderHelper
+ AuthError
+ Footer
+ DataSourceHelper
+ Constants
+ Logout
+ DbManipulation
+ DbError
+ Navigation
+ Delete
+ GeneralError
+ Page_template_1
+ Insert
+ Login
+ Settings
+ QueryUtils
+ LoginError
+ SyncApplications
+ Search
+ RequestBean1
+ Synchronization
+ Routines
+ UserEditor
+ SessionBean1
+ UserManagement
+ SessionComponentVisibility
+ VolunteerEditor
+ secured
+ VolunteerEditorUpdate
+ Select Vnořený balíček balíčku inexwebapp
+ Update + VolunteerEditorDbSupport + DeleteInterface + InsertInterface
+ Volunteers
+ QueryUtilsInterface
+ WorkcampEditor
+ SearchInterface
+ Workcamps
+ SelectInterface + UpdateInterface
email + Email
login
helpers
+ EmailWithAuthentication
+ LoginRoutines
+ BinaryIntHelper
+ EmailInterface
+ MD5Passwd
+ CalendarHelper + ContextHelper + JsfHelper
pdf filter
+ FormProcessing
+ RequestHelper + ResponseHelper
+ ITextPdfForms
+ AuthFilter
+ FormProcessingInterface
+ SessionTimeoutCheckFilter
+ SessionHelper + StringHelper
Obr. 24: Model tříd – balíčky aplikace INEXwebApp
4.4.1
JavaScript
Balíček obsahuje JavaScriptové funkce pro podporu aplikace INEXwebApp na straně klienta – kopírování a nastavování hodnot komponent, jednoduchá kontrola rodného čísla (modulo 11) a rozpoznání data narození a pohlaví. Pro adresování komponent stránky se využívají jejich identifikátory DOM9. 4.4.1.1
jsFunctions
Public void transformBirthNumberToBirthDate() Funkce převede rodné číslo (české = 10 cifer, celé číslo včetně části za lomítkem dělitelné 11) na datum narození a pohlaví. Je provedena kontrola slabé podmínky správnosti rodného čísla (r.č.) – dělitelnosti číslem 11 beze zbytku. Tato podmínka nemusí být nutně splněna a přesto může být r.č. správné. Nevyhovuje-li r.č., je uživatel pouze upozorněn, může pokračovat. Dekódované datum narození je nastaveno do textového pole určeného pro datum narození (id = dateOfBirthCalendar), rozpoznané pohlaví je nastaveno jako volba v "radio button" přepínači (id = birthNumberTextField). 9
DOM, Document Object Model, http://www.w3.org/DOM/
4. NÁVRH A REALIZACE
4.4.2
35
Balíček database
Balíček obsahuje třídy pro práci s databází a jejich rozhraní. Rozhraní jsou navržena jen pro třídy, které jsou často využívány z různých lokací aplikace a jsou kandidáty na změny či optimalizaci. class database
«interface» SelectInterface + + + + +
«interface» InsertInterface
executeSelect(Connection, String) : void getActualApplicationsForWorkcamp(Connection, String) : Object[] getResultSet() : ResultSet usernameAlreadyExists(Connection, String) : boolean workcampAlreadyExists(Connection, String, Object) : boolean
+ + + + +
getNextValueFromSequence(Connection, String) : String insertNewRowIntoTable(Connection, String) : boolean insertNewRowIntoTable_user_roles(Connection, HashMap) : boolean insertNewRowIntoTable_users(Connection, HashMap) : boolean insertNewRowIntoTable_workcamp(Connection, HashMap) : boolean
Select
Insert
-
resultSet: ResultSet
-
qu: QueryUtilsInterface
+ + + + + +
executeSelect(Connection, String) : void getActualApplicationsForWorkcamp(Connection, String) : Object[] getResultSet() : ResultSet Select(String) usernameAlreadyExists(Connection, String) : boolean workcampAlreadyExists(Connection, String, Object) : boolean
+ + + + + +
getNextValueFromSequence(Connection, String) : String Insert(String) insertNewRowIntoTable(Connection, String) : boolean insertNewRowIntoTable_user_roles(Connection, HashMap) : boolean insertNewRowIntoTable_users(Connection, HashMap) : boolean insertNewRowIntoTable_workcamp(Connection, HashMap) : boolean
DbManipulation
CheckDbConnection + CheckDbConnection(String) - isConnectionClosed(Connection) : boolean + isDbConnectionAvailable(String) : boolean
driverClassName: String
+ closeInexConnection(Connection) : void + DbManipulation(String) + getInexConnection(String, String, String) : Connection
Delete + Delete(String) + deleteRowFromTable(Connection, String, String, Object) : boolean
«interface» DeleteInterface
Update -
qu: QueryUtilsInterface
+ + + + +
Update(String) updateExistingRowInTable(Connection, String) : boolean updateExistingRowInTable_user_roles(Connection, HashMap) : boolean updateExistingRowInTable_users(Connection, HashMap) : boolean updateExistingRowInTable_workcamp(Connection, HashMap) : boolean
+ deleteRowFromTable(Connection, String, String, Object) : boolean
«interface» UpdateInterface
| x|
|
+ + + +
updateExistingRowInTable(Connection, String) : boolean updateExistingRowInTable_user_roles(Connection, HashMap) : boolean updateExistingRowInTable_users(Connection, HashMap) : boolean updateExistingRowInTable_workcamp(Connection, HashMap) : boolean
Obr. 25: Model tříd – balíček database, část 1
36
4. NÁVRH A REALIZACE
QueryUtils + + + + + + + + + + + + +
«interface» SearchInterface
escapeSubquery(String) : String getInsertNewUser_rolesQuery(HashMap) : String getInsertNewUsersQuery(HashMap) : String getInsertNewWorkcampQuery(HashMap) : String getSearchTwoWordsSubquery(String, String, String, String) : String getUpdateExistingUser_roles(HashMap) : String getUpdateExistingUsersQuery(HashMap) : String getUpdateExistingWorkcampQuery(HashMap) : String getWi_id2_ins_param(boolean) : String getWi_id2_ins_val(boolean) : String getWi_id2_upd(boolean) : String setYearInQuery(String, Object) : String subClause_Arithmetic_and(String, String, String) : String subClause_Arithmetic_or(String, String, String) : String subClause_Like(String, String) : String subClause_Like_and(String, String) : String
«interface» QueryUtilsInterface
~qu + + + + + + + + + + ~qu + + +
~qu escapeSubquery(String) : String getInsertNewUser_rolesQuery(HashMap) : String getInsertNewUsersQuery(HashMap) : String getInsertNewWorkcampQuery(HashMap) : String getSearchTwoWordsSubquery(String, String, String, String) : String getUpdateExistingUser_roles(HashMap) : String getUpdateExistingUsersQuery(HashMap) : String getUpdateExistingWorkcampQuery(HashMap) : String setYearInQuery(String, Object) : String subClause_Arithmetic_and(String, String, String) : String subClause_Arithmetic_or(String, String, String) : String subClause_Like(String, String) : String subClause_Like_and(String, String) : String
DataSourceHelper + + + +
|
closeDataSourceConnection(Connection) : void getDatasourceByName(String) : DataSource getDataSourceConnection(String) : Connection getDataSourceURL(String) : String getDataSourceUsername(String) : String
+ + + + + + +
getApplicationStatusSearchSubquery_APP(Object) : String getCriteriaSearchSubquery_VOL(Object) : String getFree_fullSearchSubquery_WC(Object) : String getHideGoneSearchSubquery_WC(boolean) : String getKeywordSearchSubquery_APP(Object) : String getKeywordSearchSubquery_VOL(Object) : String getKeywordSearchSubquery_WC(Object) : String
-
qu: QueryUtilsInterface
+ + + + + + + +
getApplicationStatusSearchSubquery_APP(Object) : String getCriteriaSearchSubquery_VOL(Object) : String getFree_fullSearchSubquery_WC(Object) : String getHideGoneSearchSubquery_WC(boolean) : String getKeywordSearchSubquery_APP(Object) : String getKeywordSearchSubquery_VOL(Object) : String getKeywordSearchSubquery_WC(Object) : String Search()
Search
VolunteerEditorDbSupport + getNewVolunteerId() : int + getVolunteerId(CachedRowSetDataProvider, RowKey) : Object
DataProviderHelper + refreshDataProvider(com.sun.data.provider.impl.CachedRowSetDataProvider) : boolean + setCommand_inRowSet(com.sun.sql.rowset.CachedRowSetXImpl, String) : void
| x|
Obr. 26: Model tříd – balíček database, část 2
4.4.2.1
CheckDbConnection
Třída pro zjištění dostupnosti spojení/připojení k databázi 4.4.2.2
DataProviderHelper
Pomocná třída pro práci s DataProvidery. Metody implementačně závislé na použitém frameworku. Metody
Public void setCommand_inRowSet() V daném RowSetu nastaví query
4. NÁVRH A REALIZACE
37
Parametry
0: crs: com.sun.sql.rowset.CachedRowSetXImpl 1: query: String
4.4.2.3
RowSet SQL příkaz
DataSourceHelper
Pomocná třída pro práci se zdroji dat (DataSources). Metody implementačně závislé na použitém frameworku. Metody
Public void closeDataSourceConnection() Prověří, že con != null a pak uzavře dané spojení con Parametry
0: con: Connection
databázové spojení
Public Connection getDataSourceConnection() Ze zdroje dat daného jména získá spojení Connection (z connection poolu) VRÁTÍ: databázové spojení Parametry
0: dataSourceName: String
4.4.2.4
DbManipulation
Třída pro přístup k databázi, poskytuje svým potomkům potřebné základní operace. Atributy
Private String driverClassName jméno driveru (JDBC) jako řetězec (např. pro PostgreSQL: 'org.postgresql.Driver)
4.4.2.5
Delete
Třída pro smazání řádky z tabulky Metody
Public boolean deleteRowFromTable() Z dané tabulky table smaže pomocí spojení con řádek, kde má sloupec columnId hodnotu value. Generuje se SQL příkaz "DELETE FROM table WHERE (columnId = value);" VRÁTÍ: true, pokud byl řádek tabulky úspěšně smazán Parametry
0: con: Connection 1: table: String 2: columnId: String 3: value: Object
4.4.2.6
databázové spojení jméno tabulky jméno (id) sloupce hodnota podmínky, kterou se má řádek hledat
Insert
Třída s metodami pro vykonání SQL příkazů insert pro různé tabulky Atributy
Private QueryUtilsInterface qu objekt rozhraní QueryUtils - utility pro práci s queries s platností pro celou třídu Metody
Public boolean insertNewRowIntoTable() Pomocí spojení con a příkazu query vloží do databáze nový řádek. Využívají ji ostatní metody třídy se suffixem "_jméno_tabulky".
38
4. NÁVRH A REALIZACE
VRÁTÍ: true, pokud byl řádek úspěšně vložen, jinak false Parametry
0: con: Connection 1: query: String
4.4.2.7
databázové spojení SQL příkaz
QueryUtils
Třída pro práci s SQL příkazy – queries. Poskytuje podporu pro vytváření specifických SQL příkazů. Metody
Public String escapeSubquery() V dané subQuery nahradí znaky ' : ; \ escape sekvencemi \\' \\" \\; \\ VRÁTÍ: řetězec s nahrazenými znaky Parametry
0: subQuery: String SQL příkaz Public String getSearchTwoWordsSubquery() Vytvoří podmínkovou subquery (WHERE) s využitím operatoru LIKE primárně pro vyhledávání podle jména a příjmení. Předpokládá předzpracování hledaného řetězce - rozdělení na slova. Uvažujeme, že neznáme, jestli je první uvedeno jméno nebo příjmení, proto zkusíme obě varianty. Např.: ( (me_lastname = 'word1') and (me_firstname = 'word2') or (me_lastname = 'word2') and (me_firstname = 'word1') ) VRÁTÍ: příslušný subdotaz v závorkách '('...')' Parametry
0: column1: String 1: column2: String 2: word1: String 3: word2: String
jméno prvního sloupce tabulky jméno druhého sloupce tabulky první hledané slovo druhé hledané slovo
Public String setYearInQuery() Nastavení roku v dotazu. Předpokládá se např. "...year = '2008'..." VRÁTÍ: query se změneným rokem Parametry
0: query: String 1: year: Object
4.4.2.8
SQL příkaz rok, kterým se má nahradit stávající
Search
Třída pro práci s vyhledáváním (tvorba vyhledávacích dotazů) Atributy
Private QueryUtilsInterface qu objekt rozhraní QueryUtils - utility pro práci s queries s platností pro celou třídu
4.4.2.9
Select
Třída pro práci s SQL dotazy Atributy
Private ResultSet resultSet privátní ResultSet pro uložení výsledku dotazu Metody
Public void executeSelect()
4. NÁVRH A REALIZACE
39
Vykoná SQL příkaz select s danou query přes dané spojení Connection Parametry
0: con: Connection 1: query: String
databázové spojení SQL query
Public ResultSet getResultSet() VRÁTÍ: ResultSet jako výsledek dotazu
4.4.2.10
Update
Třída pro aktualizaci databáze Atributy
Private QueryUtilsInterface qu objekt rozhraní QueryUtils - utility pro práci s queries s platností pro celou třídu Metody
Public boolean updateExistingRowInTable() Pomocí spojení con a příkazu query aktualizuje řádek v tabulce. Využívají ji ostatní metody třídy se suffixem "_jméno_tabulky". VRÁTÍ: true, pokud probehla aktualizace v pořádku, jinak false Parametry
0: con: Connection 1: query: String
4.4.2.11
databázové spojení SQL příkaz
VolunteerEditorDbSupport
Podpora tříd "VolunterEditor" a "VolunterEditorUpdate" z balíčku "inexwebapp.secured". Metody implementačně závislé na použitém frameworku.
4.4.3
Balíček email
Balíček obsahuje třídy pro odesílání elektronické pošty a jejich společné rozhraní. Podporován je "neomezený" počet příloh. Varianta pro nezabezpečený SMTP server a server vyžadující autentizaci. class email
«interface» EmailInterface + postMail(String[], String, String, String, String[]) : void
EmailWithAuthentication
Email -
SMTP_HOST_NAME: String = helpers.Context... {readOnly}
+
postMail(String[], String, String, String, String[]) : void
-
SMTP_AUTH_PWD: String = "*h*e*s*l*o*" {readOnly} SMTP_AUTH_USER: String = "email" {readOnly} SMTP_HOST_NAME: String = "smtp.server.cz" {readOnly}
+
postMail(String[], String, String, String, String[]) : void
javax.mail.Authenticator EmailWithAuthentication::SMTPAuthenticator +
getPasswordAuthentication() : PasswordAuthentication
Obr. 27: Model tříd – balíček email
40
4. NÁVRH A REALIZACE
4.4.3.1
Email
Třída pro poslání emailu (s přílohami) přes SMTP server bez autentizace. Atributy
Private Static String SMTP_HOST_NAME jméno SMTP serveru získané z kontextového parametru (web.xml) Metody
Public void postMail() Odešle email Parametry
0: recipients: String[] příjemci (adresáti) 1: subject: String předmět emailu 2: message: String vlastní text emailu 3: from: String emailová adresa odesílatele 4: attachments: String[] přílohy - relativní cesty vzhledem k pracovnímu adresáři WORK_DIRECTORY (kontextový parametr, definice ve web.xml. attachments = null: email bude odeslán bez příloh
4.4.4
Balíček filter
Balíček obsahuje třídy filtrů, které jsou aplikovány na různé požadavky na server. Jde o funkce zajišťující zabezpečení aplikace proti neautorizovanému přístupu. 4.4.4.1
AuthFilter
Třída filtru chránícího zabezpečené sekce webu. Aplikace filtru na určité složky webu vzhledem ke kontextové cestě aplikace je nastavena v deployment deskriptoru (web.xml). Pokud filtr vyhodnotí, že uživatel nemá oprávnění spatřit vyžádanou stránku, přesměruje ho na informativní stránku s nabídkou dalšího postupu. 4.4.4.2
SessionTimeoutCheckFilter
Třída filtru, který v případě vypršení platnosti HTTP session přesměruje uživatele při následujícím požadavku na informativní stránku.
4.4.5
Balíček helpers
Balíček obsahuje pomocné třídy (helpery) pro usnadnění a zpřehlednění práce s různými zdroji. 4.4.5.1
BinaryIntHelper
Třída pro práci s tzv. binary integerem. Celé číslo nabývá jen hodnot 2^n, n=0,1,... a jsou v něm zakódovány binární váhy. 4.4.5.2
CalendarHelper
Třída pomocných utilit pro práci s datem a kalendářem a převody na SQL typy. 4.4.5.3
ContextHelper
Třída pomocných utilit pro práci s kontextem aplikace.
4. NÁVRH A REALIZACE
4.4.5.4
41
JsfHelper
Třída podpůrných utilit pro JSF framework 4.4.5.5
RequestHelper
Třída pro práci s HTTP servlet requestem 4.4.5.6
ResponseHelper
Třída pro práci s HTTP Servlet Response 4.4.5.7
SessionHelper
Třída pro práci s HTTP session (na serveru) Metody
Public String getAttrib() Z dané session získá hodnotu atributu se jménem attribName Parametry
0: session: HttpSession 1: attribName: String
Public void setAttrib() V dané session nastaví atribut attribName na hodnotu value Parametry
0: session: HttpSession 1: attribName: String 2: value: String
4.4.5.8
StringHelper
Třída pomocných utilit pro práci s řetězci (String) Metody
Public Static String removeCzechDiacritic() Ze vstupního řetězce odstraní českou diakritiku (háčky a čárky nad písmeny) VRÁTÍ: "text" bez diakritiky Parametry
0: text: String
Public Static String substituteKeyword() Náhrada klíčového slova v řetězci (např. "...{keyword}..." → "...value...") VRÁTÍ: řetězec s nahrazeným klíčovým slovem danou hodnotou Parametry
0: text: String původní text, ve kterém se má/mají nahrazovat klíčové(-á) slovo (-a); klíčové slovo se očekává ve složených závorkách ('{' 'keyword' '}') 1: keyword: String klíčové slovo - BEZ složených závorek '{' 'keyword' '}' 2: value: Object hodnota, kterou nahradit 'keyword'
4.4.6
Balíček inexwebapp
Balíček obsahuje základní třídy (beans) aplikace INEXwebApp. Konkrétně obsahuje všechny "backing page beans", což jsou třídy výkonného kódu, ke kterému jsou
42
4. NÁVRH A REALIZACE
asociovány JSF komponenty stránky JSP. Dále balíček obsahuje speciální beany: Application Bean – instance existující po celou dobu běhu aplikace. Session Bean – instance existuje pro každého uživatele. Request Bean – instance existuje od vzniku požadavku např. na jinou stránku do její "render response" fáze. Slouží k předání dat. Page Bean ("backing page bean") – třídy asociované s pohledy (View z MVC) reprezentovanými JSF JSP stránkami. Vnořený balíček "secured" obsahuje "backing page beans" stránek vyžadujících přihlášení. [Reverse engineering zdrojového kódu] Třídy tohoto balíčku jsou značně rozsáhlé, k prostudování jejich specifikací proto odkazuji do Přílohy 10.D.
4.4.7
Balíček inexwebapp.secured
Vnořený balíček balíčku inexwebapp obsahuje "backing page beans" stránek podléhající zabezpečení přístupu (vyžadujících přihlášení). [Reverse engineering zdrojového kódu] Podobně jako v odstavci 4.4.6, odkazuji k prostudování jejich specifikací do Přílohy 10.D.
4.4.8
Balíček login
Balíček obsahuje třídy podporující operace během a ihned po přihlášení uživatele do systému. class login
LoginRoutines + + + +
getUserRole(String, String) : String LoginRoutines() setSessionBeanData(inexwebapp.SessionBean1, String, String) : void setSessionData(String, String) : void
MD5Passwd + +
getHexData(byte[]) : String getMD5Password(String) : String printHexData(byte[]) : void testPassword(String, String) : boolean
Obr. 28: Model tříd – balíček login
4.4.8.1
LoginRoutines
Třída pro vykonání rutin během a po přihlášení uživatele. Metody
Public String getUserRole() K danému username a password zjistí z databáze uživatelskou roli VRÁTÍ: uživatelskou roli, pokud má uživatel platný účet, jinak null Parametry
0: username: String 1: password: String
Public void setSessionBeanData() V sessionBean nastaví atributy uživatelské jméno a roli v systému Parametry
0: sessionBean1: inexwebapp.SessionBean1 1: userName: String uživatelské jméno 2: roleName: String jméno uživatelské role
4. NÁVRH A REALIZACE
43
Public void setSessionData() V HTTP session na serveru nastaví atributy uživatelské jméno a roli v systému Parametry
0: userName: String 1: roleName: String
4.4.8.2
MD5Passwd
Třída pro práci s heslem jako MD5 hash. Metody
Public Static String getMD5Password() Převede čitelné nezakódované heslo clearTextPassword na MD5 hash VRÁTÍ: MD5 hash hesla Parametry
0: clearTextPassword: String
4.4.9
Balíček pdf
Balíček obsahuje třídy pro práci s PDF formuláři – podporu práce se samotnými formuláři a aplikační podporu vyplnění celého formuláře VEFky. class pdf
«interface» FormProcessingInterface + + + +
clearFormData() : boolean fillInForm(String, String) : boolean getDestFormURL() : String setDestFormFileName(String) : void
FormProcessing -
contextPath: String destFormFileName: String itpdff: ITextPdfForms pathToDestForm: String pathToSrcForm: String realPath: String
+ + + + +
clearFormData() : boolean fillInForm(String, String) : boolean FormProcessing() getDestFormURL() : String getVefWorkcaps(database.SelectInterface) : String setDestFormFileName(String) : void
ITextPdfForms -itpdff + + + + +
form: AcroFields reader: PdfReader stamp: PdfStamper bindPdfFile(String, String) : boolean close() : void ITextPdfForms() setFormField(String, String) : void setFormReadOnly(boolean) : void
Obr. 29: Model tříd – balíček pdf
4.4.9.1
FormProcessing
Třída pro zpracování formuláře - vyplnění formulářových polí Atributy
Private String contextPath kontextová URL cesta aplikace
Private String destFormFileName jméno souboru cílového formuláře
44
4. NÁVRH A REALIZACE
Private ITextPdfForms itpdff ITextPdfForms - lokální instance třídy
Private String pathToDestForm skutečná cesta k cílovému souboru formuláře
Private String pathToSrcForm skutečná cesta ke zdrojovému souboru formuláře
Private String realPath skutečná path cesta aplikace na serveru Metody
Public boolean fillInForm() Vyplní formulář VEFky, data získá z databáze pomocí poskytnutých id VRÁTÍ: true, pokud byl formulář úspěšně vyplněn, jinak false Parametry
0: ap_id: String 1: me_id: String
id přihlášky (tabulka application) id dobrovolníka (tabulka member)
Public String getDestFormURL() Vrátí cestu k cílovému formuláři jako URL. Uvažuje kontextovou cestu aplikace. VRÁTÍ: URL cílového formuláře
Public void setDestFormFileName() Nastaví jméno souboru cílového (vyplněného) formuláře. Zároveň nastaví skutečnou cestu. Parametry
0: destFormFileName: String
4.4.9.2
jméno souboru cílového souboru/formuláře
ITextPdfForms
Třída pro práci s PDF formuláři s využitím knihovny iText 2.1.0. Vychází z návodů na http://itextdocs.lowagie.com/tutorial/. Atributy
Private AcroFields form Private PdfReader reader Private PdfStamper stamp Metody
Public boolean bindPdfFile() Nastaví pracovní soubory formulářů, vytvoří cílový jako kopii zdrojového s daným jménem na dané cestě. VRÁTÍ: true, pokud proběhlo vše OK, false při chybě Parametry
0: pathToSrcForm: String 1: pathToDestForm: String
skutečná cesta ke zdrojovému formuláři skutečná cesta k cílovému formuláři
Public void close() Zavře cílový soubor formuláře.
Public void setFormField() Nastaví (vyplní) formulářové pole s jménem fieldName na hodnotu value. Parametry
0: fieldName: String 1: value: String
jméno (id) formulářového pole hodnota, kterou vyplnit pole
4. NÁVRH A REALIZACE
45
4.4.10 Frameworky Balíček obsahuje jména použitých frameworků. 4.4.10.1
Visual JSF
JSF, Java Server Faces Visual Web JSF, projekt Woodstock (https://woodstock.dev.java.net). Plugin pro NetBeans IDE umožňuje vizuální návrh stránky JSP s komponentami JSF, usnadňuje propojení JSF komponent s výkonným kódem v "(managed) backing bean".
4.5
Implementace
Ve fázi implementace, čtvrtém pracovním postupu podle metodiky UP zaměřené na vlastní tvorbu softwaru, byly převedeny modely tříd na funkční zdrojový kód. Výjimkou byly balíčky a třídy zmíněné v předchozím odstavci jako přímo implementované. Při psaní zdrojového kódu je nanejvýš žádoucí udržovat jednotlivé verze v různých stádiích zpracování a k těmto verzím mít v případě potřeby možnost se vrátit. Pro tyto účely slouží systémy pro správu verzí, jakými jsou například CVS10 a [SVN]. SVN, Subversion, je podobný systém pro správu verzí jako CVS, je však novější a odstraňuje jeho nedostatky. Při volbě vhodného nástroje bylo třeba uvážit podporu ve vývojovém prostředí – zvolené NetBeans IDE obsahuje podporu CVS i SVN, zvoleno proto bylo novější Subversion, které plně vyhovuje projektům tohoto rozsahu. Jako konkrétní implementace byl použit volně dostupný VisualSVN Server. Pro samotný management verzí pak posloužila podpora v NetBeans IDE. Jednotlivé vývojové verze projektu v SVN repozitáři je možno osobně předvést, na CD je nelze přiložit, protože obsahují i neveřejná data organizace INEX – SDA. Velmi důležitou funkcionalitou, skrytou běžnému uživateli, je vytváření běhového logu aplikace. Z něho je v případě výskytu chyby systému možno dohledat, kdy přesně, za jakých podmínek, v jakém kontextu ke konkrétní chybě došlo a významným způsobem to usnadní opravu problému. V projektu je využito služeb standardního logovacího nástroje jazyka Java z balíku java.util.logging a souvisejících. Způsob dodání systému byl po dohodě se zadavatelem nastaven na postupné přidávání funkcí systému. Byly definovány priority jednotlivých funkcionalit a na jejich základě bylo postupováno v dalším vývoji. Nejvyšší prioritu vedení INEX – SDA přiřadilo zadávání workcampů do systému, následovala správa dobrovolníků a zpracování přihlášek na projekty podaných prostřednictvím systému na serveru www.inexsda.cz. Posledně zmíněné zahrnuje programové vyplnění formuláře VEFky, který posílají jako přílohu žádosti o přijetí dobrovolníka na workcamp.
4.5.1
Stav implementace ke dni odevzdání práce
Systém je ke dni odevzdání práce dokončen na takové úrovni, aby pokryl hlavní nedostatky původního systému a vyhověl nejnovějším potřebám provozovatele v těchto oblastech činnosti: správa uživatelů systému, zadávání workcampů do systému a jejich úpravy, správa dobrovolníků včetně aktualizace na základě nových dat z webové přihlášky, generování PDF VEFky z existující přihlášky a činnosti související se stahováním 10
CVS, Concurrent Version System. http://ximbiot.com/cvs/wiki/
46
4. NASAZENÍ INFORMAČNÍHO SYSTÉMU
přihlášek z webu, kromě samotného vytvoření nové přihlášky v systému k danému dobrovolníkovi. Stav realizace hlavních požadavků na nový systém z odstavce 2.1 je uveden jako údaj status v příloze 10.A. K ostatním činnostem bude prozatím současně používán původní informační systém.
4.5.2
Autentizace
Při volbě zabezpečení Java EE aplikací je k dispozici několik variant, lišících se v úrovni bezpečnosti, ale také v komplikovanosti realizace daného způsobu. Ochrana pomocí filtrů je jednou ze standardních variant zabezpečení, zabývá se jí např. [IntervalF] a [Jworld1]. Spočívá v napsání kódu filtru, který prověří přístupová práva a případně zabrání realizaci požadavku neautorizovaného uživatele. Jde o řešení naprosto univerzální, nezávislé na aplikačním serveru. Další možností je konfigurace tzv. kontejnerové autentizace, kdy se o zabezpečení stará konkrétní aplikační server, na kterém je však řešení závislé; věnuje se jí např. [Jworld2]. Velmi robustního způsobu zabezpečení Java EE aplikací lze dosáhnout použitím, v Java SDK od verze 1.4 zabudované11, technologie Java Security, [JAAS] nebo specializovaného frameworku, jakým je např. [Acegi]. Acegi je primárně určen pro framework Spring12, nicméně integrace do JSF společnosti Sun Microsystems [SunJSF] je také možná, vyžaduje však hlubší pochopení problematiky. Obecně se efektivní autorizaci stránek v JSF věnuje článek [Mills]. Server s INEXwebApp (Tomcat-server-v-INEXu viz. Obr. 22 na str. 32) je v prostorách provozovatele fyzicky umístěn za firewallem, kde jsou pro něj povoleny jen nezbytné porty (SSH, porty pro HTTP a HTTPS). Z tohoto důvodu není nutné řešit zabezpečení aplikace na nejvyšší možné úrovni. Server Apache Tomcat, využívá vlastní kontejnerovou autentizaci s jediným uživatelským účtem nastaveným v příslušném konfiguračním souboru. Sekce INEXwebApp, vyžadující omezení přístupu nepřihlášených uživatelů, pak chrání filtr aplikovaný na všechny požadavky cílené do těchto oblastí systému. Pokud přihlášený uživatel stanovenou dobu se systémem nepracuje, je automaticky odhlášen.
11
Java Authentication and Authorization Service (JAAS), LoginModule Developer's Guide: http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/JAASLMDevGuide.html 12 http://springframework.org/
5. NASAZENÍ INFORMAČNÍHO SYSTÉMU
5
47
Nasazení informačního systému
Nasazení je proces spouštění a integrace nového systému v prostředí provozovatele. Na výpočetní uzly je instalován potřebný software pro fungování a využívání informačního systému a jsou provedeny úvodní testy a dále je systém provozován v reálných podmínkách, aby bylo možné odhalit případné problémy závislé na provozním prostředí. Informační systém INEXwebApp byl průběžně nasazován v různých fázích vývoje, jakmile byl k dispozici určitý nový funkční celek, podporující daný obchodní proces organizace INEX – SDA. Hlavní problémy, které se vyskytly ve fázi nasazení systému do reálného prostředí a jejich řešení jsou popsány v následující kapitole, odstavci 6.1 Řešení vzniklých problémů.
5.1
Hardware serveru a software
Jako server pro INEXwebApp byl s ohledem na aktuální možnosti provozovatele použit starší počítač typu PC. Výchozí hardware měl tyto parametry: AMD Athlon™ 900 MHz, 256 MB RAM, 10 GB HDD, AGP grafická karta. Do volného paměťového slotu byl dokoupen 512 MB modul. Jako operační systém byla na základě autorových zkušeností s administrací Linuxu zvolena moderní distribuce openSUSE 10.313. Krátce po instalaci OS se projevila vada grafické karty a byla proto vyměněna. Na serveru je pro běh INEXwebApp nainstalovaná Java SE 1.6.0 Update 4 SDK v kombinaci s Java Servlet a JSP kontejnerem Apache Tomcat 6.0.14. OS startuje do runlevelu 3 (víceuživatelský systém bez grafického prostředí) a Apache Tomcat 6 je následně spuštěn jako služba pomocí démona zkompilovaného ze zdrojových kódů. Po spuštění je služba jménem „tomcat6.sh“ převedena pro dosažení vyšší úrovně bezpečnosti pod neprivilegovaného uživatele. Podrobnosti ohledně nastavení lze nalézt v sekci Setup [Tomcat6].
5.2
Úpravy původního informačního systému
Po přestěhování INEX – SDA do nových prostor který bylo nutné prioritně vyřešit zprovoznění Accessovské aplikace, kterou v nových podmínkách počítačové sítě nebylo možné spustit. Problém byl po delším zkoumání příčiny odhalen ve vazbě na konkrétní doménové jméno, jehož přesměrování na konkrétní IP adresu databázového stroje bylo zřejmě nastaveno na routeru v původní síti. Realizovaným řešením byla příslušná editace systémového souboru „/etc/hosts“ na daných počítačích. Předtím, než mohl INEX použít nový formulář VEFky, bylo žádoucí stávající formulář v aplikaci Access upravit a přidat některé další údaje. Další úpravy bylo třeba provést v procesu stahování přihlášek z webu. Kritickým nedostatkem byla absence uložení poznámek ke zdravotnímu stavu dobrovolníka do lokální databáze systému.
13
http://www.opensuse.org/
48
5.3
5. TESTOVÁNÍ
Setup aplikace INEXwebApp v provozním prostředí
Samotná aplikace má dva důležité konfigurační soubory. Jsou jimi tzv. deployment deskriptor /WEB-INF/web.xml obsahující nastavení serveru pro danou aplikaci, úvodní a chybové stránky, nastavení filtrů, kontextových parametry, které má aplikace za chodu k dispozici a dalších parametrů. Druhým souborem je /META-INF/context.xml, jenž obsahuje především konfiguraci datových zdrojů pro přístup k databázím. Podrobný postup nastavení zdroje dat je popsán v částech „JDBC DataSources“ a „JNDI Resources“ dokumentace serveru [Tomcat6]. Aby nebylo nutné při každém přenosu aplikace z vývojového a testovacího prostředí do produkčního přenastavovat URL databáze, je pro každý databázový stroj definováno jednoznačné hostitelské jméno a v každém běhovém prostředí je nastaven v souboru „/etc/hosts“ lokální překlad hostitelských jmen db strojů na skutečné IP adresy. Webovou aplikaci jde na server Apache Tomcat umístit (deploy) třemi způsoby. První možnost je přes webové administrační rozhraní uploadem distribučního balíku (web archive, .war) na server nebo specifikací jména balíku již na serveru umístěném v podadresáři webapps instalace Tomcatu, případně jinde, pokud je tak nastaveno. Druhou možností je aplikaci ze serveru odstranit (undeploy), jestliže na něm už běží, nahrát .war soubor do adresáře webapps a Tomcat restartovat. Poslední variantou je v adresáři webapps vytvořit podadresář s požadovaným kontextovým jménem aplikace a zkopírovat do něj obsah distribučního balíku. Apache Tomcat 6 je v systému nastaven jako automaticky spouštěná služba, ručně se ovládá stejně, jako jakákoliv jiná služba, tedy: service tomcat6.sh start service tomcat6.sh stop.
Pro zajištění šifrování při přenosu dat protokolem HTTPS je v konfiguračním souboru serveru Apache Tomcat
14
Transport Layer Security, viz. např. http://cs.wikipedia.org/wiki/TLS
6. TESTOVÁNÍ
6
49
Testování
Systém byl během vývojového procesu testován ve třech fázích. Nejprve byla prověřena funkčnost samostatných celků, jako např. podpory databáze, emailů, práce s PDF formuláři a dalších pomocí vlastních testovacích utilit (programů) pro daný balíček. V další fázi byla funkčnost systému jako celku prověřena na různých testovacích datech, akceptovatelných i neakceptovatelných, kde mohlo k oběma variantám dojít. Poslední fáze testování spočívala v reálném testovacím provozu u zadavatele. Nalezené nedostatky a chyby byly průběžně odstraňovány a bylo-li to třeba, změny byly zaneseny do příslušných modelů. Lokální databáze systému v působišti provozovatele má z bezpečnostních důvodů povolen přístup jen z lokální sítě. Někdy bylo před spuštěním nové verze na produkčním serveru potřeba provést drobné změny v databázi, týkající se pouze nového systému tak, aby nemohla být narušena funkčnost původní aplikace. Změny byly provedeny buď při osobních návštěvách nebo vzdáleně pomocí autorovy vlastní webové aplikace QueryTool, vzniklé při předchozích akademických projektech. Aplikace QueryTool byla na produkčním serveru spuštěna vždy jen na dobu nezbytně nutnou k provedení změn.
6.1
Řešení vzniklých problémů
Během nasazení systému v první použitelné verzi, kdy byla dokončena podpora zadávání workcampů, se projevil jen jeden funkčně kritický problém. Jakmile se k systému přihlásilo a současně s ním pracovalo více uživatelů, objevovala se chyba spojení s databází. Zkoumáním běhového logu bylo zjištěno, že databázový stroj po určitém objemu požadavků začal odmítat další spojení. Problém byl kombinovaný – v některých situacích se korektně neukončovala síťová spojení s databázovým strojem, což vedlo k hromadění současně otevřených spojení. Druhou související příčinou byl příliš nízký počet současně otevřených spojení na straně databázového stroje, jejichž počet byl nejvýše deset. Tento počet akorát tak s malou rezervou stačil na provoz jen Accessovské aplikace. Problém byl úspěšně vyřešen povolením více současných spojení na databázovém stroji a především optimalizací využívání spojení novým systémem. Všechna již nepotřebná spojení jsou důsledně ukončována a aplikace je nastavena podle dokumentace [Tomcat6] tak, aby jí server Tomcat přiděloval spojení z tzv. connection poolu omezené velikosti a případná spojení nepoužívaná stanovenou dobu automaticky ukončoval. Výsledná podoba podpory PDF formulářů je již druhou verzí založenou na jiné knihovně. První verze používala k programovému vyplnění formulářových polí malou knihovnu JustFormsPDF, podporující jen editaci formulářů, jak název napovídá. Pro tuto knihovnu byl vyvinut a na přiložených formulářích odladěn příslušný balíček systému INEXwebApp. Následně byl v aplikaci OpenOffice.org Writer realizován formulář VEFky a převeden do formátu PDF. Ukázalo se však, že knihovna JustFormsPDF dokáže zpracovat zřejmě jen formuláře vytvořené Adobe Acrobatem, jimž byly vygenerovány dříve zmíněné ukázkové formuláře. Řešení poskytla jiná, volně dostupná knihovna iText. Díky jednoduššímu a logicky lépe uspořádanému API dokonce zjednodušila třídy podpůrného balíčku aplikace INEXwebApp. Další více čí méně závažné problémy byly eliminovány ještě před poskytnutím dané verze provozovateli.
50
7. ZÁVĚR
Problémy a chyby, které provozovatel objevil při běžném používání systému byly průběžně nahlašovány elektronickou poštou případně během konzultací. Mezi takové problémy patřil např. ne zcela vyhovující způsob navigace v aplikaci během procesu stahování přihlášek, kdy bylo nutné přejít do jiných sekcí systému a po provedení požadovaných úkonů nebyl uživatel vrácen přesně do situace, ve které se předtím nacházel. Nedostatek byl odstraněn sofistikovanějším způsobem navigace, přičemž je uvažován hlubší kontext uživatelova jednání. Během reálného nasazení systému při zadávání nových workcampů vyplynul požadavek, aby bylo možné založit nový projekt na základě projektu již v systému obsaženém. Nezanedbatelný počet workcampů se liší jen jménem, kódem a dobou konání. I tomuto novému požadavku bylo vyhověno, je možné vyhledat existující workcamp, editovat jej a vytvořit nový s danými údaji. Formálně je tento požadavek zanesen do modelu požadavků z odstavce 2.1, v případech užití bude domodelován později).
7
Uživatelská příručka
Při realizaci systému bylo prioritou intuitivní uživatelské rozhraní a některých aspektech i podobnost s původní aplikací. Zadavatel INEX – SDA se zúčastnil formou detailních konzultací celého procesu vývoje systému a je proto schopen si uživatelskou příručku pro potřeby dobrovolníků přizvaných na pomoc během sezóny sestavit sám. Za běžných podmínek se systémem pracují jen vyškolení pracovníci.
8. ZÁVĚR
8
51
Závěr
Všech cílů práce vytčených v úvodu se podařilo dosáhnout. Nový informační systém je dokumentován sadou modelů, vyhovuje nejnovějším potřebám zadavatele a pokrývá nedostatky původního systému. Systém byl nasazen a otestován v reálném provozu před začátkem letošní sezóny. Od té doby je provozovateli nepřetržitě k dispozici. Hlavního cíle této práce, zdokumentování požadavků organizace INEX – SDA na informační systém formou modelu, se podařilo v plné míře dosáhnout. Požadavky jsou zaneseny v modelech požadavků a případů užití. Návrh a implementace systému na základě požadavků se nacházejí ve stavu, pokrývajícím nedostatky původního systému a vyhovujícím všem novým potřebám. Jeden z nejkritičtějších problémů původního systému, absence přístupových práv, je plně odstraněn. Provozovatel souhlasí s dočasným provozem původního a nového informačního systému. Implementovaný systém je v plném rozsahu integrován do podnikového prostředí provozovatele, čímž je dosaženo i předposledního cíle práce. Konečně, vedlejší cíl určité podpory stávajícího systému byl naplněn ku spokojenosti provozovatele.
8.1
Budoucí práce
Systém je ke dni odevzdání práce dokončen na takové úrovni, aby pokryl hlavní nedostatky původního systému a vyhověl nejnovějším potřebám provozovatele. Práce na projektu bude pokračovat spoluprací autora s organizací INEX – SDA při realizaci dalších funkcionalit systému, obsažených v modelu požadavků a případů užití, které jsou již nad rámec této diplomové práce. Předpokládá se pokračování tvorby modelu, aby k novému systému byla kompletní programátorská dokumentace.
52
9
9. LITERATURA A SOFTWARE
Literatura a software
9.1
Literatura
[INEX]
INEX – SDA [online]. 2008 [cit. 2008-05-01]. Dostupný z WWW:
[UML-UP]
ARLOW, Jim, NEUSTADT, Ila. UML a unifikovaný proces vývoje aplikací. 2. vyd. Brno : CP Books a.s., c2005. 387 s. ISBN 80-7226-947-X.
[Sparx]
UML tools for software development and Modelling - Enterprise Architect Full Lifecycle UML modeling tool [online]. 2007-2008 [cit. 2007-2008]. Dostupný z WWW:
[OMG]
Object Management Group [online]. 2007 [cit. 2007]. Dostupný z WWW:
[Mlejnek]
MLEJNEK, Jiří. Analýza informačního systému pro praktické lékaře., leden 2007. 166 s. České vysoké učení technické v Praze, Fakulta elektrotechnická. Diplomová práce.
[SunJSF]
Sun Developer Network - JavaServer Faces : API Specifications, Documentation [online]. 2007-2008 [cit. 2007-2008]. Dostupný z WWW:
[VisJSF]
Woodstock: Project Woodstock - Documentation [online]. 2008 [cit. 2008]. Dostupný z WWW:
[NB-IDE]
Web Application Learning Trail - NetBeans Tutorials, Guides and Articles [online]. 2007-2008 [cit. 2007-2008]. Dostupný z WWW:
[Mann]
MANN, Kito D. JavaServer Faces in Action. Greenwich : Manning Publications Co., c2005. 1038 s. ISBN 1-932394-11-7.
[Sun]
Developer Resources for Java Technology [online]. 2007-2008 [cit. 20072008]. Dostupný z WWW:
[Prakash]
PRAKASH, Winstron. Technical Articles by Dr. Winston Prakash [online]. 2006-2008 [cit. 2007-2008]. Dostupný z WWW:
[Interval]
Interval.cz - Internetový magazín o webdesignu, vývoji webových aplikací a e-komerci [online]. -2008 [cit. 2007-2008]. Dostupný z WWW:
[IntervalF]
Autentizace pomocí filtrů na serveru TomCat [online]. 2004-2005 [cit. 2007]. Dostupný z WWW:
[Hall]
HALL, Marty. Java servlety a stránky JSP. Praha : Neocortex spol. s r. o., 2001. 586 s. ISBN 80-86330-06-0.
9. LITERATURA A SOFTWARE
53
[wiki-MVC] Model-view-controller : Wikipedia, the free encyclopedia [online]. 2007[cit. 2008-05-02]. Dostupný z WWW:
Tigris.org - Subversion [online]. 2006- [cit. 2007]. Dostupný z WWW:
[Tomcat6]
Apache Tomcat 6.0 - Documentation Index [online]. 1999- [cit. 2007-2008]. Dostupný z WWW:
[Acegi]
Acegi Security - Acegi Security System for Spring : Documentation [online]. 2004-2008 [cit. 2008]. Dostupný z WWW:
[JAAS]
JDK 6 Security-related APIs & Developer Guides - from Sun Microsystems [online]. 2005- [cit. 2008]. Dostupný z WWW:
[Jworld1]
HUNTER, Jason. Filter code with Servlet 2.3 model : Discover freely available servlet filters you can use today [online]. 2001 [cit. 2007]. Dostupný z WWW:
[Jworld2]
PONTARELLI, Brian. J2EE security: Container versus custom : Choose the appropriate type of security for your application [online]. 2004 [cit. 2007]. Dostupný z WWW:
[Mills]
MILLS, Duncan, NIMPHIUS, Frank. Effective Page Authorization In JavaServer Faces : Application security - the art of applications defending themselves - represents an important line of defence [online]. 2006 [cit. 2007]. Dostupný z WWW:
54
9.2
9. PŘÍLOHY
Software
Sparx Systems Enterprise Architect, verze 7.0.815 – 7.0.829 http://www.sparxsystems.com.au/ NetBeans IDE, verze 5.5 – 6.1 http://www.netbeans.org/ VisualSVN Server, verze 1.1 http://www.visualsvn.com/server/ Visual Web JSF, projekt Woodstock, verze 4.3, NetBeans modul verze 1.1 https://woodstock.dev.java.net/ Java SE 6, Java SE 6 SDK Update 4 http://java.sun.com/javase/ Apache Tomcat, verze 6.0.14 http://tomcat.apache.org/ PostgreSQL, verze 8.2 http://java.sun.com/javase/ JavaMail API, verze 1.4.1 http://java.sun.com/products/javamail/ OpenOffice.org Writer, verze 2.4 http://www.openoffice.org/ iText, volná Java-PDF knihovna, verze 2.1.0 http://www.lowagie.com/iText/ JustFormsPDF, verze 1.1.9 http://www.justformspdf.com/
10. PŘÍLOHY
55
10 Přílohy Přílohy této práce jsou vzhledem ke svému rozsahu číslovány jako samostatné dokumenty. K modelům, tedy přílohám 10.A až 10.E, je na CD přiložena dokumentace i ve formátu HTML.
10.A Model požadavků Počet stran: 8
10.B Model případů užití Počet stran: 32
10.C Datový model Počet stran: 18
10.D Model tříd Dokumentace modelu tříd je pro svůj rozsah vyhotovena ve dvou verzích. První, stručnější tištěná, neobsahuje detaily balíčků získaných reverzním inženýrstvím zdrojového kódu, inexwebapp a secured (inexwebapp.secured). Druhá je pak kompletní, obsahuje všechny podrobnosti a lze ji nalézt na přiloženém CD. Počet stran: 37 / 165
10.E Model nasazení Počet stran: 11
10.F Formulář VEFky Příloha nenese žádné speciální označení, titulek formuláře je: „VOLUNTEER EXCHANGE FORM (VEF)“ Počet stran: 1
10.G Obsah přiloženého CD Počet stran: 1
Příloha A – Model požadavků
1
Model požadavků na systém Tento dokument definuje požadavky na aplikaci "INEXwebApp" – webový informační systém zadavatele – organizace INEX – SDA (http://www.inexsda.cz). Dokument je generovaný z modelu požadavků vytvořeném CASE nástrojem Enterprise Architect (http://www.sparxsystems.com.au).
Obsah 1.
Model požadavků ..................................................................................................................2 1.0 Funkční požadavky .........................................................................................................3 1.0.0 Obchodní logika.....................................................................................................4 1.0.1 Uživatelské rozhraní...............................................................................................6 1.1 Nefunkční požadavky .....................................................................................................7 1.1.0 Bezpečnost .............................................................................................................7 1.1.1 Škálovatelnost ........................................................................................................8 1.1.2 Perzistence .............................................................................................................8
2
Příloha A – Model požadavků
1. Model požadavků custom Model požadavků Funkční požadavky
Nefunkční požadavky
+ Obchodní logika
+ Bezpečnost
+ Uživatelské rozhraní
+ Škálovatelnost + Perzistence + N01. Systém bude vyžadovat minimální náklady na nutné programové vybavení, nejvýše řádově v tisících Kč + N02. Systém bude realizován ve webovém prostředí + N03. Systém bude mít otevřený kód a licenci
Obr. 1: Model požadavků
Příloha A – Model požadavků
1.0
3
Funkční požadavky
custom Funkční požadavky Obchodní logika + F01. Systém bude spravovat data o spolupracujících organizacích + F02. Systém bude generovat upomínky na blížící se termíny + F03. Systém bude schopen odesílat emaily s přílohami založené na šablonách + F04. Systém bude umožňovat editaci šablon emailů + F05. Systém bude spravovat uživatele systému + F06. Systém bude rozlišovat uživatelské role + F07. Systém bude vyžadovat přihlášení registrovaným uživatelem + F08. Systém bude při vyplňování formulářů možno logicky ovládat klávesnicí + F09. Systém bude spravovat dobrovolníky + F10. Systém bude spravovat workcampy + F11. Systém bude evidovat platby + F12. Systém bude schopen generovat přihlášku (VEF) včetně grafiky jako soubor .rtf/.pdf + F13. Systém bude spravovat přihlášky na workcampy + F14. Systém bude schopen stáhnout podané přihlášky z databáze na www.inexsda.cz + F15. Systém bude schopen změnit údaje o existujícím dobrovolníkovi na základě podané přihlášky + F16. Systém bude při aktualizaci dat o dobrovolníkovi "z webu" zvýrazňovat nové a/nebo změněné údaje + F17. Systém bude schopen vyhledat (nově podané) přihlášky podle data zpracování. + F18. Systém bude při zpracování přihlášky z webu vyhledávat podobné dobrovolníky v databázi + F19. Systém bude schopen přidat do existující přihlášky workcamp vyhledáním podle kódu + F20. Systém bude při stahování přihlášek z webu přihlášky zachovávat v databázi na webu, dokud je uživatel explicitně nesmaže + F21. Systém bude při stahování přihlášek z webu nabízet jednotlivé přihlášky sekvenčně od nejdříve podané s možností přeskočení aktuální + F22. Systém bude schopen ve výpisech řadit data, kde to má smysl + F23. Systém bude umožňovat vyhledat dobrovolníka + F24. Systém bude umožňovat vyhledat workcamp + F25. Systém bude umožňovat vyhledat platbu + F26. Systém bude umožňovat vyhledat přihlášku + F27. Systém bude schopen sestavit žádost o přijetí daného dobrovolníka na daný workcamp + F28. Systém bude schopen sestavit hromadnou žádost o přijetí dobrovolníků na workcampy pořádané danou organizací + F29. Systém bude nově rozlišovat typ workcampu pro seniory a pro rodiny + F30. Systém bude evidovat informaci, odkud se dobrovolník dozvěděl o INEX-SDA + F31. Systém bude umožňovat získání statistických dat v dále zpracovatelné podobě + F32. Systém bude umožňovat zadat nový workcamp na základě informací z workcampu již v systému existujícím
Model případů užití + Aktéři + Modul Dobrovolníci + Modul Nastavení + Modul Organizace + Modul Platby
Uživatelské rozhraní + FUI01. Uživatelské rozhraní bude v rámci možností podobné stávající Accessovské aplikaci + FUI01. Uživatelské rozhraní bude v rámci možností podobné stávající Accessovské aplikaci + FUI02. Systém bude s uživateli komunikovat anglicky + FUI02. Systém bude s uživateli komunikovat anglicky + FUI03. Uživatelské rozhraní bude co nejvíce intuitivní, v případě nejednoznačností bude + FUI03. Uživatelské rozhraní bude co nejvíce intuitivní, v případě nejednoznačností bude doplněno nápovědou doplněno nápovědou + FUI04. Systém bude pro jednotlivé akce vyžadovat co nejméně kliknutí + FUI04. Systém bude pro jednotlivé akce vyžadovat co nejméně kliknutí
+ Modul Posílání emailů + Modul Přihlášky + Modul Správa uživatelů + Modul Statistiky + Modul Synchronizace databází + Modul Upomínky + Modul Workcampy + Modul Zálohování
Obr. 2: Funkční požadavky
4
Příloha A – Model požadavků
1.0.0 Obchodní logika custom Obchodní logika
F01. Systém bude spravovat data o spolupracujících organizacích
F02. Systém bude generovat upomínky na blížící se termíny F03. Systém bude schopen odesílat emaily s přílohami založené na šablonách
F04. Systém bude umožňovat editaci šablon emailů
F05. Systém bude spravovat uživatele systému
F06. Systém bude rozlišovat uživatelské role
F07. Systém bude vyžadovat přihlášení registrovaným uživatelem
F08. Systém bude při vyplňování formulářů možno logicky ovládat klávesnicí
F09. Systém bude spravovat dobrovolníky
F10. Systém bude spravovat workcampy
F11. Systém bude evidovat platby
F12. Systém bude schopen generovat přihlášku (VEF) včetně grafiky jako soubor .rtf/.pdf
F14. Systém bude schopen stáhnout podané přihlášky z databáze na www.inexsda.cz
F15. Systém bude schopen změnit údaje o existujícím dobrovolníkovi na základě podané přihlášky
F16. Systém bude při aktualizaci dat o dobrovolníkovi "z webu" zvýrazňovat nové a/nebo změněné údaje
F17. Systém bude schopen vyhledat (nově podané) přihlášky podle data zpracování.
F18. Systém bude při zpracování přihlášky z webu vyhledávat podobné dobrovolníky v databázi
F19. Systém bude schopen přidat do existující přihlášky workcamp vyhledáním podle kódu
F20. Systém bude při stahování přihlášek z webu přihlášky zachovávat v databázi na webu, dokud je uživatel explicitně nesmaže
F21. Systém bude při stahování přihlášek z webu nabízet jednotlivé přihlášky sekvenčně od nejdříve podané s možností přeskočení aktuální
F22. Systém bude schopen ve výpisech řadit data, kde to má smysl
F13. Systém bude spravovat přihlášky na workcampy
Obr. 3: Obchodní logika
F01. Systém bude spravovat data o spolupracujících organizacích Status: Proposed
Spolupracujících organizací je cca 70, s 30 z nich intenzivní komunikace.
F02. Systém bude generovat upomínky na blížící se termíny Status: Proposed
blížící se termíny: - blížící se termín splatnosti, ale dosud nebyla přijata/zpracována platba - je třeba poslat informace o workcampu (infosheet) dobrovolníkovi - organizace včas neposlala infosheet
F23. Systém bude umožňovat vyhledat dobrovolníka
F24. Systém bude umožňovat vyhledat workcamp
F25. Systém bude umožňovat vyhledat platbu
F26. Systém bude umožňovat vyhledat přihlášku
F27. Systém bude schopen sestavit žádost o přijetí daného dobrovolníka na daný workcamp
F28. Systém bude schopen sestavit hromadnou žádost o přijetí dobrovolníků na workcampy pořádané danou organizací
F29. Systém bude nově rozlišovat typ workcampu pro seniory a pro rodiny
F30. Systém bude evidovat informaci, odkud se dobrovolník dozvěděl o INEX-SDA
F31. Systém bude umožňovat získání statistických dat v dále zpracovatelné podobě
F32. Systém bude umožňovat zadat nový workcamp na základě informací z workcampu již v systému existujícím
Příloha A – Model požadavků
5
F03. Systém bude schopen odesílat emaily s přílohami založené na šablonách Status: Proposed
Systém primárně postoupí příkaz k vytvoření emailu (odesílatel, adresát, předmět, text) operačnímu systému (výchozímu emailovému klientovi), bude však schopen email editovat a odeslat sám.
F04. Systém bude umožňovat editaci šablon emailů Status: Proposed
Šablony: poslání 1) Infosheetu, 2) potvrzení o stažení a zpracování přihlášky, 3) informace o zamítnutí účasti dobrovolníka na Workcampu Organizací, 4) Žádosti o přijetí dobrovolníka na Workcamp adresované Organizaci, 5) Hromadné žádosti o přijetí dobrovolníků na Workcampy pořádané danou Organizací, 6) informace pro Dobrovolníka, že byl přijat na Workcamp, 7) přání k narozeninám.
F05. Systém bude spravovat uživatele systému Status: Validated
Správa zahrnuje vytvoření, editaci (změna hesla atd.) a smazání uživatelského účtu
F06. Systém bude rozlišovat uživatelské role Status: Validated
F07. Systém bude vyžadovat přihlášení registrovaným uživatelem Status: Validated
F08. Systém bude při vyplňování formulářů možno logicky ovládat klávesnicí Status: Validated
Ovládáním klávesnicí se rozumí především přechod na logicky následující formulářové pole klávesou
F09. Systém bude spravovat dobrovolníky Status: Validated
F10. Systém bude spravovat workcampy Status: Validated
F11. Systém bude evidovat platby Status: Proposed
F12. Systém bude schopen generovat přihlášku (VEF) včetně grafiky jako soubor .rtf/.pdf Status: Validated
Současný formát je RTF, nová VEFka lépe v PDF.
F13. Systém bude spravovat přihlášky na workcampy Status: Approved
F14. Systém bude schopen stáhnout podané přihlášky z databáze na www.inexsda.cz Status: Approved
F15. Systém bude schopen změnit údaje o existujícím dobrovolníkovi na základě podané přihlášky Status: Validated
F16. Systém bude při aktualizaci dat o dobrovolníkovi "z webu" zvýrazňovat nové a/nebo změněné údaje Status: Validated
F17. Systém bude schopen vyhledat (nově podané) přihlášky podle data zpracování. Status: Validated
F18. Systém bude při zpracování přihlášky z webu vyhledávat podobné dobrovolníky v databázi Status: Validated
Podobný dobrovolník je takový již v databázi existující, jehož jméno a příjmení a/nebo rodné číslo a/nebo emailová adresa se shoduje s údaji poskytnutými v přihlášce.
F19. Systém bude schopen přidat do existující přihlášky workcamp vyhledáním podle kódu Status: Proposed
F20. Systém bude při stahování přihlášek z webu přihlášky zachovávat v databázi na webu, dokud je uživatel explicitně nesmaže
6
Příloha A – Model požadavků
Status: Validated
F21. Systém bude při stahování přihlášek z webu nabízet jednotlivé přihlášky sekvenčně od nejdříve podané s možností přeskočení aktuální Status: Validated
F22. Systém bude schopen ve výpisech řadit data, kde zpráva má smysl Status: Implemented
F23. Systém bude umožňovat vyhledat dobrovolníka Status: Implemented
F24. Systém bude umožňovat vyhledat workcamp Status: Validated
F25. Systém bude umožňovat vyhledat platbu Status: Proposed
F26. Systém bude umožňovat vyhledat přihlášku Status: Implemented
F27. Systém bude schopen sestavit žádost o přijetí daného dobrovolníka na daný workcamp Status: Proposed
F28. Systém bude schopen sestavit hromadnou žádost o přijetí dobrovolníků na workcampy pořádané danou organizací Status: Proposed
F29. Systém bude nově rozlišovat typ workcampu pro seniory a pro rodiny Status: Implemented
Původně jen "pro všechny" a pro teenagery.
F30. Systém bude evidovat informaci, odkud se dobrovolník dozvěděl o INEX - SDA Status: Proposed
Tuto informaci volitelně uvádí dobrovolník při podání přihlášky na www.inexsda.cz. Varianty: z webu inexsda.cz, od přátel a známých, z letáku a plakátu, z médií, jinak (jak...).
F31. Systém bude umožňovat získání statistických dat v dále zpracovatelné podobě Status: Proposed
Statistická data se budou dále zpracovávat aplikací MS Office Excel. Výstupní formát statistických dat ideálně přímo ".xls", možno i jako ".csv" (Comma Separated Values - čárkou oddělené hodnoty). Příklad statistických dat: - počet dobrovolníků přijatých danou organizací (zvlášť muži / ženy) - počet dobrovolníků vyslaných do dané země (zvlášť muži / ženy) - počet vyslaných dobrovolníků podle věku (<= 18, 18 - 20, 21 - 24, 25 - 29, >= 30) v den nástupu na Workcamp - intervaly věku musí jít změnit.
F32. Systém bude umožňovat zadat nový workcamp na základě informací z workcampu již v systému existujícím Status: Validated
1.0.1 Uživatelské rozhraní Balíček zachycuje požadavky na uživatelské rozhraní systému. custom Uživatelské rozhraní FUI01. Uživatelské rozhraní bude v rámci možností podobné stávající Accessovské aplikaci
FUI03. Uživatelské rozhraní bude co nejvíce intuitivní, v případě nejednoznačností bude doplněno nápovědou
FUI02. Systém bude s uživateli komunikovat anglicky
FUI04. Systém bude pro jednotlivé akce vyžadovat co nejméně kliknutí
Obr. 4: Uživatelské rozhraní
Příloha A – Model požadavků
7
FUI01. Uživatelské rozhraní bude v rámci možností podobné stávající Accessovské aplikaci Status: Implemented
FUI02. Systém bude s uživateli komunikovat anglicky Status: Implemented
Volba jazyka (CZ / EN / ...) není potřeba, kažkdý uživatel musí ovládat angličtinu.
FUI03. Uživatelské rozhraní bude co nejvíce intuitivní , v případě nejednoznačností bude doplněno nápovědou Status: Implemented
FUI04. Systém bude pro jednotlivé akce vyžadovat co nejméně kliknutí Status: Approved
1.1
Nefunkční požadavky custom Nefunkční požadavky Perzistence
N01. Systém bude vyžadovat minimální náklady na nutné programové vybavení, nejvýše řádově v tisících Kč
Bezpečnost
Škálovatelnost
N02. Systém bude realizován ve webovém prostředí
N03. Systém bude mít otevřený kód a licenci
Obr. 5: Nefunkční požadavky
N01. Systém bude vyžadovat minimální náklady na nutné programové vybavení, nejvýše řádově v tisících Kč Status: Validated
Systém bude v co nejvyšší míře používat volně dostupný software. Náklady budou ideálně nulové.
N02. Systém bude realizován pro webové prostředí Status: Implemented
N03. Systém bude mít otevřený kód a licenci Status: Proposed
1.1.0 Bezpečnost custom Bezpečnost
NB01: Systém bude povolovat přístup ke chráněným sekcím jen přihlášeným registrovaným uživatelům s oprávněním využít příslušné sekce a funkcionality
NB02: Systém bude používat uživatelské role v systému
NB03: Systém bude zabezpečovat data přenášená mimo lokální síť
NB04. Systém bude uchovávat hesla uživatelů v zabezpečeném tvaru jako MD5 hash
Obr. 6: Bezpečnost
NB01: Systém bude povolovat přístup ke chráněným sekcím jen přihlášeným registrovaným uživatelům s oprávněním využít příslušné sekce a funkcionality Status: Implemented
Systém bude alespoň částečně odolný vůči neautorizovanému přístupu ve smyslu nutnosti přihlášení.
8
Příloha A – Model požadavků
NB02: Systém bude používat uživatelské role v systému Status: Validated
Uživatelskými rolemi se rozumí role Administrátor, Dobrovolník, Zaměstnanec INEXu. Vzhledem k roli přihlášeného uživatele systém umožní pracovat jen s množinou funkcí přístupnou dané roli.
NB03: Systém bude šifrovat data přenášená mimo lokální síť Status: Approved
Šifrování ve webovém prostředí protokolem SSL (HTTPS).
NB04. Systém bude uchovávat hesla uživatelů v zabezpečeném tvaru jako MD5 hash Status: Implemented
1.1.1 Škálovatelnost custom Škálovatelnost
NS01: Systém bude dimenzován na maximálně desítky současně pracujících uživatelů
NS02: Systém bude rozšiřitelný o nové funkce
Obr. 7: Škálovatelnost
NS01: Systém bude dimenzován na maximálně desítky současně pracujících uživatelů Status: Approved
Běžný počet uživatelů současně pracujících se systémem se bude pohybovat řádově v jednotkách. V době zadávání workcampů do systému se může počet uživatelů zvýšit na nejvýše desítky.
NS02: Systém bude rozšiřitelný o nové funkce Status: Proposed
1.1.2 Perzistence custom Perzistence NP01: Systém bude využívat stávající PostgreSQL databázi umístěnou na lokální síti
NP03: Systém bude využívat existující MySQL databázi na serveru www.inexsda.cz
NP02. Systém bude při práci s lokální perzistencí nezávislý na funkčnosti připojení k internetu
NP04: Systém bude pravidelně zálohovat databázi
Obr. 8: Perzistence
NP01: Systém bude využívat stávající PostgreSQL databázi umístěnou na lokální síti Status: Implemented
NP02. Systém bude při práci s lokální perzistencí nezávislý na funkčnosti připojení k internetu Status: Implemented
NP03: Systém bude využívat existující MySQL databázi na serveru www.inexsda.cz Status: Implemented
Databáze na www.inexsda.cz obsahuje aktuální nabídku workcampů přístupnou veřejnosti a nově podané přihlášky (VEF).
NP04: Systém bude pravidelně zálohovat databázi Status: Approved
Přípustné je zálohování databáze prostředky operačního systému (plánovač spouštění úloh).
Příloha B – Model případů užití
1
Model případů užití Tento dokument definuje případy užití aplikace "INEXwebApp" – webového informačního systému zadavatele – organizace INEX – SDA (http://www.inexsda.cz). Dokument je generovaný z modelu případů užití vytvořeném CASE nástrojem Enterprise Architect (http://www.sparxsystems.com.au).
Obsah Model případů užití ............................................................................................................................ 1 1 Slovníček pojmů ......................................................................................................................... 4 Případy užití ....................................................................................................................................... 5 2 Model případů užití..................................................................................................................... 5 2.1 IS pro INEX – SDA .............................................................................................................. 6 2.2 Aktéři .................................................................................................................................... 6 2.2.1 Administrátor................................................................................................................ 6 2.2.2 DobrovolníkEditor........................................................................................................ 6 2.2.3 ObecnýUživatel ............................................................................................................ 6 2.2.4 UživatelZaměstnanec ................................................................................................... 6 2.2.5 ZaměstnanecInexu........................................................................................................ 6 2.2.6 Čas ................................................................................................................................ 7 2.3 Modul Dobrovolníci.............................................................................................................. 7 2.3.1 Editovat údaje o dobrovolníkovi .................................................................................. 7 2.3.2 Načtení nabídek ............................................................................................................ 8 2.3.3 Přidat nového dobrovolníka ......................................................................................... 8 2.3.4 Seřadit výpis ................................................................................................................. 8 2.3.5 Vyhledat dobrovolníky................................................................................................. 9 2.3.6 Vymazat dobrovolníka ................................................................................................. 9 2.3.7 Zobrazit dobrovolníkovy platby ................................................................................... 9 2.3.8 Zobrazit dobrovolníkovy přihlášky .............................................................................. 9 2.3.9 Zobrazit dobrovolníky................................................................................................ 10 2.4 Modul Nastavení ................................................................................................................. 10 2.4.1 Editovat šablonu ......................................................................................................... 11 2.4.2 Nastavit aktuální rok................................................................................................... 11 2.4.3 Nastavit datum od-do pro upload workcampů na web ............................................... 11 2.4.4 Nastavit výši poplatku za workcamp.......................................................................... 11 2.4.5 Smazat šablonu emailu ............................................................................................... 11 2.4.6 Vytvořit novou šablonu .............................................................................................. 12 2.4.7 Zobrazit šablony emailů ............................................................................................. 12 2.5 Modul Organizace............................................................................................................... 12 2.5.1 Generovat hromadnou žádost ..................................................................................... 12 2.5.2 Hromadná žádost........................................................................................................ 13 2.5.3 Seřadit výpis ............................................................................................................... 13
2
Příloha B – Model případů užití
2.5.4 Zobrazit organizace .................................................................................................... 13 2.6 Modul Platby....................................................................................................................... 13 2.6.1 Editovat platbu............................................................................................................ 14 2.6.2 Registrace nové platby................................................................................................ 15 2.6.3 Smazat platbu ............................................................................................................. 15 2.6.4 Vrátit platbu................................................................................................................ 15 2.6.5 Vyhledat platbu........................................................................................................... 15 2.6.6 Zobrazit platby............................................................................................................ 16 2.7 Modul Posílání emailů ........................................................................................................ 16 2.7.1 Poslat email ................................................................................................................ 16 2.8 Modul Přihlášky .................................................................................................................. 17 2.8.1 Editovat přihlášku....................................................................................................... 17 2.8.2 Aktualizovat stav přihlášky ........................................................................................ 18 2.8.3 Filtrovat přihlášky....................................................................................................... 18 2.8.4 Generovat VEFku ....................................................................................................... 19 2.8.5 Napsat email ............................................................................................................... 19 2.8.6 Obnovit seznam přihlášek .......................................................................................... 19 2.8.7 Odmítnout workcamp ................................................................................................. 19 2.8.8 Poslat infosheet........................................................................................................... 19 2.8.9 Požádat o přijetí na workcamp ................................................................................... 20 2.8.10 Přijmout na workcamp................................................................................................ 20 2.8.11 Seřadit výpis ............................................................................................................... 20 2.8.12 Smazat přihlášku......................................................................................................... 20 2.8.13 Stáhnout VEFku ......................................................................................................... 20 2.8.14 Vytvořit přihlášku k dobrovolníkovi .......................................................................... 21 2.8.15 Zobrazit přihlášky....................................................................................................... 21 2.9 Modul Správa uživatelů ...................................................................................................... 21 2.9.1 Odstranit uživatele...................................................................................................... 22 2.9.2 Vytvořit nového uživatele .......................................................................................... 22 2.9.3 Změnit uživatelský účet.............................................................................................. 23 2.9.4 Zobrazit uživatele ....................................................................................................... 23 2.10 Modul Statistiky.............................................................................................................. 23 2.10.1 Statistika přijetí mužů a žen........................................................................................ 23 2.10.2 Statistika přijetí podle organizace............................................................................... 24 2.10.3 Statistika přijetí podle věku ........................................................................................ 24 2.10.4 Statistika přijetí podle zaměstnání.............................................................................. 24 2.11 Modul Synchronizace databází ....................................................................................... 24 2.11.1 Aktualizovat údaje o dobrovolníkovi ......................................................................... 24 2.11.2 Download přihlášek z webu ....................................................................................... 25 2.11.3 Přejít na další přihlášku .............................................................................................. 25 2.11.4 Smazat aktuální přihlášku........................................................................................... 25 2.11.5 Upload workcampů na web ........................................................................................ 25 2.11.6 Vyhledat podobné dobrovolníky ................................................................................ 26 2.11.7 Zpracovat přihlášky .................................................................................................... 26 2.12 Modul Upomínky............................................................................................................ 26 2.12.1 Obnovit upomínky...................................................................................................... 26 2.12.2 Upomínka poslat infosheet ......................................................................................... 26 2.12.3 Vytvořit upomínky ..................................................................................................... 26 2.12.4 Vytvořit upomínky časovačem ................................................................................... 27 2.12.5 Znovu poslat žádost o přijetí....................................................................................... 27 2.12.6 Zobrazit upomínky ..................................................................................................... 27 2.13 Modul Workcampy ......................................................................................................... 28 2.13.1 Editovat údaje o workcampu ...................................................................................... 28 2.13.2 Načtení nabídkek ........................................................................................................ 29 2.13.3 Přidat nový workcamp................................................................................................ 29
Příloha B – Model případů užití
3
2.13.4 Seřadit výpis ............................................................................................................... 29 2.13.5 Vyhledat workcampy.................................................................................................. 30 2.13.6 Zobrazit Workcampy.................................................................................................. 30 2.13.7 Zobrazit detaily........................................................................................................... 30 2.14 Modul Zálohování........................................................................................................... 30 2.14.1 Zálohovat databázi...................................................................................................... 31 Příloha: Životní cyklus přihlášky .................................................................................................... 32
4
1
Příloha B – Model případů užití
Slovníček pojmů
Skupina Business
Termín Žádost
Technical
Technical
{klíčové_slovo}
Business
Dobrovolník
Business
Friday listy
Business
INEX
Business
INEXwebApp
Business
Infosheet
Business
Organizace
Business
Přihláška
Business
stahování přihlášek (z webu)
Business
VEFka
Business
web / z webu
Business
Workcamp (WC)
Definice Žádost o přijetí dobrovolníka adresovaná spolupracující organizaci. V závorkách "<" a ">" ve scénářích případů užití je uveden název bodu rozšíření (relace EXTEND). V závorkách "{" a "}" je uvedeno klíčové slovo / jméno atributu, které bude nahrazeno skutečnou hodnotou. Osoba, která se chce zúčastnit workcampu a tento zájem vyjádřila podáním přihlášky na www.inexsda.cz nebo osobně. Pravidelné informace o změnách stavů volných míst na workcampech zasílané pořádající organizací (zpravidla v pátek, odtud pojmenování). Zkrácená podoba úplného jména (zadávající) organizace INEX - SDA Sdružení dobrovolných aktivit, Budečská 1, Praha 2; www.inexsda.cz. Slovem "INEXwebApp", zapsaným přesně takto, se rozumí webový informační systém pro organizaci INEX - SDA. Podobný tvar, zapsaný pouze malými písmeny, je jméno základního balíčku aplikace. Dokument obsahující podrobnosti o workcampu, posílá ho spolupracující organizace INEXu, který jej dále přeposílá dobrovolníkům. Většinou zahraniční spolupracující organizace, která organizuje workcampy, může však jít i o českou organizaci. Přihláška na workcamp podaná elektronicky na www.inexsda.cz nebo osobně. Procesem stahování přihlášek se rozumí proces, kdy systém kontaktuje server www.inexsda.cz za účelem stažení podaných přihlášek. Systém postupně nabízí jednotlivé přihlášky ke zpracování a zachová je v databázi na www.inexsda.cz, dokud je uživatel explicitně nevymaže. Přihláška na workcamp(y), kterou INEX posílá organizaci. VEF = Volunteer Exchange Form. Dokument v podobě formuláře obsahuje informace o dobrovolníkovi, kontaktní a další údaje, dále seznam workcampů, o které má dobrovolník zájem. Webem se rozumí spolupracující systém na serveru www.inexsda.cz, pokud není uvedeno jinak. Mezinárodní dobrovolnický projekt v zahraničí nebo v ČR; většinou v zahraničí.
Příloha B – Model případů užití
5
Případy užití Z důvodu zpřehlednění modelu nejsou vedlejší scénáře ("Alternate") uvedeny u všech případů užití. Pokud není uvedeno jinak, vedlejším scénářem je "přerušení akce využitím jiné dostupné funkce systému, pokud již nebyl zadán příkaz pro modifikaci".
2
Model případů užití uc Model Případů užití IS pro INEX-SDA
Aktéři
Modul Dobrovolníci
+ Administrátor
+ Editovat údaje o dobrovolníkovi
+ DobrovolníkEditor
+ Načtení nabídek
+ Čas
+ Přidat nového dobrovolníka
+ ObecnýUživatel
+ Seřadit výpis
+ UživatelZaměstnanec
+ Vyhledat dobrovolníky
+ ZaměstnanecInexu
+ Vymazat dobrovolníka
Pokud není ve scénářích uvedeno jinak, lze akce přerušit využitím jiné funkce systému, dokud není zadán příkaz "Uložit" / "Smazat" / "Odeslat..."
+ Zobrazit dobrovolníkovy platby + Zobrazit dobrovolníkovy přihlášky + Zobrazit dobrovolníky
Modul Platby + Editovat platbu + Registrace nové platby
Modul Workcampy + Editovat údaje o workcampu
Modul Synchronizace databází
+ Smazat platbu + Vrátit platbu
+ Načtení nabídkek
+ Aktualizovat údaje o dobrovolníkovi
+ Přidat nový workcamp
+ Download přihlášek z webu
+ Seřadit výpis
+ Přejít na další přihlášku
+ Vyhledat workcampy
+ Smazat aktuální přihlášku
+ Zobrazit detaily
+ Upload workcampů na web
+ Zobrazit Workcampy
+ Vyhledat podobné dobrovolníky + Zpracovat přihlášky
+ Vyhledat platbu + Zobrazit platby
Modul Správa uživatelů + Odstranit uživatele
Modul Přihlášky + Aktualizovat stav přihlášky + Editovat přihlášku + Filtrovat přihlášky + Generovat VEFku + Napsat email + Obnovit seznam přihlášek
+ Vytvořit nového uživatele Modul Upomínky + Obnovit upomínky
+ Změnit uživatelský účet + Zobrazit uživatele
+ Upomínka poslat infosheet + Vytvořit upomínky + Vytvořit upomínky časovačem + Znovu poslat žádost o přijetí + Zobrazit upomínky
Modul Posílání emailů + Poslat email
+ Odmítnout workcamp + Požádat o přijetí na workcamp + Poslat infosheet + Přijmout na workcamp
Modul Nastavení
+ Seřadit výpis
+ Editovat šablonu
+ Smazat přihlášku
+ Nastavit aktuální rok
+ Stáhnout VEFku
+ Nastavit datum od-do pro upload workcampů na web
+ Vytvořit přihlášku k dobrovolníkovi
+ Nastavit výši poplatku za workcamp
+ Zobrazit přihlášky
+ Smazat šablonu emailu + Vytvořit novou šablonu + Zobrazit šablony emailů
Modul Organizace
Modul Statistiky
+ Generovat hromadnou žádost
+ Statistika přijetí mužů a žen
+ Hromadná žádost
+ Statistika přijetí podle organizace
+ Seřadit výpis
+ Statistika přijetí podle věku
+ Zobrazit organizace
+ Statistika přijetí podle zaměstnání
Obr. 1: Model případů užití
Modul Zálohování + Zálohovat databázi
6
Příloha B – Model případů užití
2.1
IS pro INEX – SDA
2.2
Aktéři
Balíček obsahuje hierarchii uživatelských rolí systému a jejich jednotlivá zobecnění pro potřeby specifikace případů užití. uc Aktéři
ObecnýUživatel
UživatelZaměstnanec
Administrátor
Čas
DobrovolníkEditor
ZaměstnanecInexu
Obr. 2: Aktéři
2.2.1 Administrátor Administrátor systému má plná, nejvyšší práva
2.2.2 DobrovolníkEditor Je zpráva dobrovolník, který INEXu pomáhá se správou workcampů - má přístup pouze k modulu Workcamps: přehled workcampů v systému, editace a změna údajů o workcampech, zadání nového workcampu; o případné vymazání workcampu musí požádat aktéra UživatelZaměstnanec (ZaměstnanecInexu nebo Administrátor).
2.2.3 ObecnýUživatel Obecný uživatel systému s libovolnou rolí.
2.2.4 UživatelZaměstnanec Zastřešuje role Administátor a ZaměstnanecInexu
2.2.5 ZaměstnanecInexu Pracovník INEXu ("kanceláře") - má nižší práva než Administrátor: nemůže: vymazat dobrovolníka ze systému, vymazat uživatele systému, vymazat platbu, vymazat šablonu emailu.
Příloha B – Model případů užití
7
2.2.6 Čas Čas slouží pro pravidelné automatické akce - zálohování databáze.
2.3
Modul Dobrovolníci
Balíček obsahuje případy užití vztahující se ke správě dobrovolníků. O každém dobrovolníkovi jsou evidovány tyto údaje (povinné jsou označeny hvězdičkou*): jméno*, příjmení*, rodné číslo*, datum narození*, pohlaví*, email*; vegetarián?, národnost, zaměstnání, číslo pasu, datum platnosti pasu, mobil, telefon/fax, adresy (trvalé bydliště, kontaktní adresa), ovládané jazyky (dobře, trochu), bankovní účet, kontakt na blízkou osobu, poznámky ke zdravotnímu stavu/speciální potřeby/diety, minulé zkušenosti, absolvování přípravného kursu. uc Modul Dobrovolníci Modul Dobrovolníci
«Pre-condition» {K systému je přihlášen UživatelZaměstnanec}
Přidat nového dobrovolníka
Načtení nabídek
Seřadit výpis
«include»
«include»
«extend»
Editovat údaje o dobrovolníkovi
Vyhledat dobrovolníky
«extend» «extend» {jeVybranýDobrovolník}
Vytvořit přihlášku k dobrovolníkovi «extend» «extend» {jeVybranýDobrovolník}
(fromModul Přihlášky)
UživatelZaměstnanec (fromAktéři)
Zobrazit dobrovolníkovy platby
«extend» {jeVybranýDobrovolník}
Zobrazit dobrovolníky
«extend» {jeVybranýDobrovolník} «extend» {jeVybranýDobrovolník} «extend» {jeVybranýDobrovolník}
«include»
Registrace nové platby
Zobrazit platby
(fromModul Platby)
(fromModul Platby)
Administrátor (fromAktéři) Vymazat dobrovolníka
Zobrazit dobrovolníkovy přihlášky
«include»
Případ užití smí spustit jen Administrátor.
Zobrazit přihlášky
(fromModul Přihlášky)
Obr. 3: Modul Dobrovolníci
2.3.1 Editovat údaje o dobrovolníkovi Tok událostí: Editovat dostupné údaje o dobrovolníkovi (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Editovat údaje o dobrovolníkovi" 2. INCLUDE (Načtení nabídek) 3. Systém zobrazí dialog "Editace údajů o dobrovolníkovi" 4. Systém Uživateli umožní změnu / přidání údajů 5. KDYŽ UživatelZaměstnanec zadá příkaz "Uložit změny" 5.1 Systém provede validaci údajů (jedinečné rodné číslo v systému)
8
Příloha B – Model případů užití
5.2 KDYŽ úspěšně proběhla validace: 5.2.1 Systém uloží data z formuláře do databáze 5.3 JINAK: 5.3.1 Systém vyzve k opravě údajů 5.3.2 Scénář pokračuje bodem 4. 6. KDYŽ UživatelZaměstnanec zadá příkaz "Storno" 6.1 Systém 'zapomene' všechny změny Tok událostí: Zrušení akce (Alternate) 1. UživatelZaměstnanec může kdykoliv zrušit režim editace zadáním příkazu "Storno" 2. Systém neuloží žádné změny v údajích o dobrovolníkovi Vstupní podmínka: jeVybranýDobrovolník Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakého existujícího dobrovolníka z nabídky.
2.3.2 Načtení nabídek Tok událostí: Načtení nabídek (Simple) 1. Systém načte z databáze seznam všech možných zaměření workcampů do rozbalovací nabídky "Zaměření" 2. Systém načte z databáze seznam všech možných jmen zemí do rozbalovací nabídky "Země" 3. Systém načte z databáze seznam všech možných kódů zemí do rozbalovací nabídky "Národnost"
2.3.3 Přidat nového dobrovolníka Tok událostí: Přidat nového dobrovolníka (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Přidat dobrovolníka" 2. INCLUDE (Načtení nabídek) 3. Systém zobrazí dialog pro přidání nového dobrovolníka - jméno*, příjmení*, rodné číslo*, datum narození*, pohlaví*, email* a další nepovinné údaje (vegetarián?, národnost, zaměstnání, číslo pasu, datum platnosti pasu, mobil, telefon/fax, adresy (trvalé bydliště, kontaktní adresa), ovládané jazyky (dobře, trochu), bankovní účet, kontakt na blízkou osobu, poznámky ke zdravotnímu stavu/speciální potřeby/diety, minulé zkušenosti, absolvování přípravného kursu) 4. UživatelZaměstnanec vyplní alespoň povinné údaje o dobrovolníkovi 5. KDYŽ UživatelZaměstnanec zadá příkaz "Uložit" 5.1 Systém provede validaci údajů (jedinečné rodné číslo v systému) 5.2 KDYŽ úspěšně proběhla validace: 5.2.1 Systém uloží data z formuláře do databáze 5.3 JINAK: 5.3.1 Systém vyzve k opravě údajů 5.3.2 Scénář pokračuje bodem 4. Tok událostí: Zrušení akce (Alternate) 1. UživatelZaměstnanec může kdykoliv opustit dialog "Přidat nového dobrovolníka" zadáním příkazu "Storno" 2. Systém neprovede žádné změny databáze "Dobrovolníci"
2.3.4 Seřadit výpis Tok událostí: Defaultní seřazení výpisu (Basic Path) 1. Systém seřadí výpis v tabulce podle příjmení Tok událostí: Seřazení výpisu (Alternate) 1. Případ užití začíná, když UživatelZaměstnanec požaduje jiné seřazení výpisu 2. UživatelZaměstnanec zvolí vzestupné nebo sestupné řazení požadovaného sloupce
Příloha B – Model případů užití
(jméno, příjmení, email, věk, datum narození) 3. Systém provede zvolené řazení
2.3.5 Vyhledat dobrovolníky Tok událostí: Vyhledání dobrovolníka (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec vepíše hledaný údaj do speciálního vyhledávacího pole a zadá příkaz "Filtrovat" 2. Systém prohledá databázi dobrovolníků (jméno a/nebo příjmení, rodné číslo, email, mobil, adresa) 3. Systém zobrazí v tabulce výsledek hledání Tok událostí: Zrušení filtru (Alternate) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Zrušit filtr" 2. Systém zobrazí v tabulce všechny dobrovolníky
2.3.6 Vymazat dobrovolníka Případ užití může spustit pouze Administrátor Tok událostí: Vymazání dobrovolníka (Basic Path) 1. Případ užití začíná, když Administrátor zadá příkaz "Vymazat dobrovolníka" 2. Systém si vyžádá potvrzení akce 3. KDYŽ Administrátor potvrdí smazání dobrovolníka: 3.1 Systém vymaže dobrovolníka z databáze 4. JINAK systém neprovede žádné změny Tok událostí: Zrušení akce (Alternate) 1. Administrátor může kdykoliv použít jinou funkci systému 2. Systém neprovede vymazání dobrovolníka z databáze Vstupní podmínka: K systému je přihlášený Administrátor Vstupní podmínka: jeVybranýDobrovolník Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakého existujícího dobrovolníka z nabídky.
2.3.7 Zobrazit dobrovolníkovy platby Tok událostí: Zobrazení dobrovolníkových plateb (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Zobrazit platby" 2. Systém hledá v databázi platby patřící k daném dobrovolníkovi 3. INCLUDE (Zobrazit platby) Tok událostí: Zrušení akce (Alternate) 1. UživatelZaměstnanec může kdykoliv použít jinou funkci systému Vstupní podmínka: jeVybranýDobrovolník Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakého existujícího dobrovolníka z nabídky.
2.3.8 Zobrazit dobrovolníkovy přihlášky Tok událostí: Zobrazit dobrovolníkovy přihlášky (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Zobrazit přihlášky" 2. Systém hledá v databázi přihlášky patřící k daném dobrovolníkovi 3. INCLUDE (Zobrazit přihlášky) Tok událostí: Opuštění dialogu (Alternate) 1. UživatelZaměstnanec může kdykoliv použít jinou funkci systému
9
10
Příloha B – Model případů užití
Vstupní podmínka: jeVybranýDobrovolník Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakého existujícího dobrovolníka z nabídky.
2.3.9 Zobrazit dobrovolníky Tok událostí: Zobrazit dobrovolníky (Simple) 1. Případ užití začíná, když UživatelZaměstnanec vstoupí do sekce Dobrovolníci 2. Systém zobrazí v tabulce informace o všech dobrovolnících v databázi (jméno, příjmení, email, mobil, věk, datum narození)
2.4
Modul Nastavení
Balíček obsahuje případy užití vztahující se k nastavení aplikace v rámci session přihlášeného uživatele a nastavení trvalého charakteru, např. editaci šablon emailů. uc Modul Nastavení Modul Nastavení
Nastavit aktuální rok
Nastavit výši poplatku za workcamp
UživatelZaměstnanec (fromAktéři)
Nastavit datum od-do pro upload workcampů na web Vytvořit novou šablonu
«extend» «include» Zobrazit šablony emailů «extend» {jeVybránaŠablona} Editovat šablonu «extend» {jeVybránaŠablona}
Administrátor (fromAktéři) Smazat šablonu emailu Případ užití smí spustit jen Administrátor.
Obr. 4: Modul Nastavení
Příloha B – Model případů užití
11
2.4.1 Editovat šablonu Tok událostí: Editace šablony (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Editovat šablonu emailu" NEBO byl zadán požadavek na novou šablonu 2. Systém umožní upravit/vytvořit jméno šablony, předmět emailu a text emailu s "formulářovými poli" definovanými řetězci ve složených závorkách ( "{pole}" ) 3. KDYŽ UživatelZaměstnanec zadá příkaz "Uložit šablonu": 3.1 Systém uloží šablonu do databáze 4. KDYŽ UživatelZaměstnanec zadá příkaz "Storno": 4.1 Systém neprovede žádné změny Vstupní podmínka: jeVybránaŠablona Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakou existující šablonu emailu z nabídky.
2.4.2 Nastavit aktuální rok Tok událostí: Nastavení aktuálního roku (Alternate) 0. Systém vytvoří nabídku možných roků, prvním rokem je "2000" a posledním
2.4.3 Nastavit datum od-do pro upload workcampů na web Každý workcamp má své datum uveřejnění na webu inexsda.cz, ale tato volba umožňuje uploadované workcampy dále omezit nadřazeným filtrem. Tok událostí: Nastavení dat od-do pro upload (Simple) 0. Systém zobrazí od = 1.1.
2.4.4 Nastavit výši poplatku za workcamp Tok událostí: Nastavení výše poplatku (Simple) 1. Systém zobrazí naposledy nastavenou hodnotu výše poplatku (defaultně 2200,- Kč v roce 2008) v módu editace 2. UživatelZaměstnanec změní hodnotu "výše poplatku" a změnu potvrdí 3. Systém uloží novou výši poplatku do databáze
2.4.5 Smazat šablonu emailu Tok událostí: Smazání šablony (Simple) 1. Případ užití začíná, když Administrátor zadá příkaz "Smazat šablonu emailu" 2. Systém si vyžádá potvrzení akce 3. KDYŽ Administrátor smazání šablony potvrdí: 3.1 Systém vymaže šablonu z databáze Vstupní podmínka: K systému je přihlášený Administrátor Vstupní podmínka: jeVybránaŠablona Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakou existující šablonu emailu z nabídky.
12
Příloha B – Model případů užití
2.4.6 Vytvořit novou šablonu Tok událostí: Vytvoření šablony emailu (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Vytvořit novou šablonu emailu" 2. INCLUDE (Editovat šablonu)
2.4.7 Zobrazit šablony emailů Tok událostí: Zobrazení šablon emailů (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Zobrazit šablony emailů" 2. Systém zobrazí dialog "Zobrazení šablon emailů" 3. Pro každou šablonu nalezenou v databázi: 3.1 Systém zobrazí "název šablony" <editaceŠablony> [jen Administrátor] <smazáníŠablony>
2.5
Modul Organizace
Balíček obsahuje případy užití týkající se správy hromadných žádostí o přijetí dobrovolníků na workcampy pořádané spolupracujícími organizacemi. Při hromadné žádosti je místo žádosti o přijetí každého jednotlivého dobrovolníka na daný workcamp žádáno danou organizaci o přijetí všech dobrovolníků, kteří by se rádi zúčastnili projektu u této organizace najednou v jediné žádosti. uc Modul Organizace Modul Organizace
Seřadit výpis
«extend»
UživatelZaměstnanec
Hromadná žádost
«extend» {jeVybránaOrganizace}
Zobrazit organizace
(fromAktéři)
«include»
Generovat hromadnou žádost
«include»
Poslat email Administrátor (fromModul Posílání emailů)
(fromAktéři)
Obr. 5: Modul Organizace
2.5.1 Generovat hromadnou žádost Tok událostí: Vytvoření hromadné žádosti (Simple) 1. Systém vyhledá všechny workcampy v daném roce u zvolené organizace, na které
Příloha B – Model případů užití
13
se přihlásil nějaký dobrovolník a dosud o jeho přijetí na workcamp nebylo požádáno 1.1 Systém uvažuje jen zaplacené přihlášky 1.2 Systém vybírá workcampy z dobrovolníkovy přihlášky podle priority od nejvyšší 1.3 Systém uvažuje jen workcampy z přihlášky, které mají volnou kapacitu 2. Ke každému dobrovolníkovi systém vygeneruje ze šablony část emailu obsahující údaje o něm a workcampu, na který se hlásí 3. Systém nastaví emailovou adresu příjemce podle zvolené organizace 4. INCLUDE (Poslat email) 4.1 UživatelZaměstnanec k emailu přiloží VEFky všech dobrovolníků, o jejichž přijetí se v emailu žádá
2.5.2 Hromadná žádost Hromadné žádosti (requesty) slouží k podání žádosti o přijetí určité množiny dobrovolníků přihlášených na workcamp(y) pořádané danou organizací najednou = v 1 emailu. Tok událostí: Vytvoření hromadné žádosti (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Hromadná žádost" 2. INCLUDE (Generovat hromadnou žádost) Vstupní podmínka: jeVybránaOrganizace Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakou existující organizaci z nabídky.
2.5.3 Seřadit výpis Tok událostí: Defaultní seřazení výpisu (Basic Path) 1. Systém defaultně řadí organizace podle jejich kódu Tok událostí: Seřazení výpisu (Alternate) 1. Případ užití začíná, když UživatelZaměstnanec požaduje jiné seřazení výpisu 2. UživatelZaměstnanec zvolí vzestupné nebo sestupné řazení požadovaného sloupce (kód, jméno, počet žádostí o přijetí na WC) 3. Systém provede zvolené řazení
2.5.4 Zobrazit organizace Slouží pro podání hromadných žádostí o přijetí dobrovolníků na workcampy pořádané danou organizací. Tok událostí: Zobrazení organizací (Simple) 1. Případ užití začíná, když UživatelZaměstnanec vstoupí do sekce Organizace 2. Pro každou organizaci, kterou má INEX požádat o přijetí nějakého dobrovolníka na workcamp organizací pořádaný: 2.1 Systém v tabulce zobrazí kód organizace, název organizace, kód země a počet workcampů, o které má INEX u dané organizace zažádat <seřazeníVýpisu>
2.6
Modul Platby
Balíček obsahuje případy užití související se správou plateb. Každý dobrovolník, který si podá přihlášku na workcamp(y) musí uhradit poplatek za zprostředkování. Až poté se INEX přihláškou zabývá ve smyslu žádosti o přijetí.
14
Příloha B – Model případů užití
uc Modul Platby Modul Platby «Pre-condition» {K systému je přihlášen UživatelZaměstnanec} Vrátit platbu
Editovat platbu
«extend» {jeVybránaPlatba}
«extend» {jeVybránaPlatba}
UživatelZaměstnanec Vyhledat platbu
(fromAktéři) Zobrazit platby
«extend» {jeVybránaPlatba}
«extend»
Registrace nové platby
Administrátor (fromAktéři) Smazat platbu Případ užití je spouštěn z balíčku Dobrovolníci
Případ užití smí spustit jen Administrátor.
Obr. 6: Modul Platby
2.6.1 Editovat platbu Tok událostí: Editace platby (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Editovat platbu" 2. Systém zobrazí dialog pro editaci platby - v záhlaví zobrazí jméno, příjmení, věk, email, telefon(y) 3. Systém připraví do nabídky dobrovolníkovy přihlášky na workcampy 4. UživatelZaměstnanec upraví datum 5. UživatelZaměstnanec ze seznamu/nabídky dobrovolníkových workcampů vybere příslušný workcamp (za který dobrovolník zaplatil) 6. UživatelZaměstnanec ze seznamu vybere typ platby (hotově, bankovním převodem, složenkou) 7. UživatelZaměstnanec nepovinně vyplní popis platby 8. Uživatel upraví výši platby (Systém předvyplní "defaultní hodnotu" = 1800,- Kč v roce 2007) 9. KDYŽ UživatelZaměstnanec zadá příkaz "Uložit platbu" 9.1 Systém uloží informace o platbě do databáze 10. KDYŽ UživatelZaměstnanec zadá příkaz "Storno" 10.1 Systém zapomene případné provedené změny Tok událostí: Zrušení editace (Alternate) 1. UživatelZaměstnanec může kdykoliv zrušit reřim editace zadáním příkazu "Storno" 2. Systém zapomene případné provedené změny Vstupní podmínka: jeVybránaPlatba Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakou existující platbu z nabídky.
Příloha B – Model případů užití
15
2.6.2 Registrace nové platby Tok událostí: Registrace nové platby (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Registrace nové platby" 2. Systém zobrazí dialog pro registraci platby, v záhlaví budou údaje: jméno, příjmení, věk, email a telefon(y) dobrovolníka 3. Systém připraví do nabídky dobrovolníkovy přihlášky na workcampy 4. UživatelZaměstnanec upraví datum (Systém nabídne aktuální) 5. UživatelZaměstnanec ze seznamu/nabídky dobrovolníkových workcampů vybere příslušný workcamp (za který dobrovolník zaplatil) 6. UživatelZaměstnanec ze seznamu vybere typ platby (hotově, bankovním převodem, složenkou) 7. UživatelZaměstnanec nepovinně vyplní popis platby 8. UživatelZaměstnanec upraví výši platby (Systém předvyplní nastavenou "defaultní hodnotu" = 2200,- Kč v roce 2008) 9. UživatelZaměstnanec zadá příkaz "Uložit platbu" 10. Systém uloží informace o platbě do databáze Tok událostí: Zrušení akce (Alternate) 1. UživatelZaměstnanec může kdykoliv opustit dialog "Registrace nové platby" zadáním příkazu Storno 2. Systém neprovede změnu v platbách Vstupní podmínka: jeVybranýDobrovolník Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakého existujícího dobrovolníka z nabídky.
2.6.3 Smazat platbu Tok událostí: Smazání platby (Simple) 1. Případ užití začíná, když Administrátor zadá příkaz "Smazat platbu" 2. Systém si vyžádá potvrzení operace 3. KDYŽ Administrátor potvrdí smazání platby: 3.1. Systém vymaže vybranou platbu z databáze Vstupní podmínka: K systému je přihlášený Administrátor Vstupní podmínka: jeVybránaPlatba Případ užití je rozšířen, pokud Administrátor vybere nějakou existující platbu z nabídky.
2.6.4 Vrátit platbu Tok událostí: Vrácení platby (Simple) 0. UživatelZaměstnanec vybere jednu položku z nabídky (tabulky) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Vrátit platbu" 2. UživatelZaměstnanec vybere z nabídky platbu, kterou chce vrátit a zadá příkaz "Vrátit platbu" 3. Systém u příslušné platby označí skutečnost, že byla vrácena Vstupní podmínka: jeVybránaPlatba Případ užití je rozšířen, pokud Administrátor vybere nějakou existující platbu z nabídky.
2.6.5 Vyhledat platbu Tok událostí: Vyhledání platby (Basic Path) 1. Případ užití začíná, kdž UživatelZaměstnanec vepíše hledaný údaj (jméno/příjmení/rodné číslo) do speciálního vyhledávacího pole 2. UživatelZaměstnanec zadá příkaz "Filtrovat" 3. Systém prohledá databázi plateb (jméno, příjmení, rodné číslo) 4. Systém zobrazí v tabulce výsledek hledání
16
Příloha B – Model případů užití
Tok událostí: Zrušení filtru (Alternate) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Zrušit filtr" 2. Systém zobrazí v tabulce všechny platby
2.6.6 Zobrazit platby Tok událostí: Zobrazení plateb (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec vstoupí do sekce Platby 2. Systém zobrazí v tabulce údaje o všech registrovaných platbách v daném roce (viz Modul Nastavení) - částka, vrácená částka, jméno a příjmení dobrovolníka, datum přijetí platby, způsob platby, důvod platby, ID příslušné přihlášky, platba vrácena? (ano / ne) <editovatPlatbu>
2.7
Modul Posílání emailů
Balíček obsahuje případy užití vztahující se ke službě odesílání emailů. Emaily jsou zpravidla založené na určité šabloně v závislosti na kontextu. Email je možno odeslat prostřednictvím emailového klienta nainstalovaného na počítači uživatele nebo prostřednictvím systému. uc Modul Posílání emailů «Pre-condition» {K systému je přihlášen ObecnýUživatel}
Modul Posílání emailů
Poslat email
ObecnýUživatel (fromAktéři)
Obr. 7: Modul Posílání emailů
2.7.1 Poslat email Tok událostí: Poslání emailu (Alternate) 1. Případ užití začíná, když ObecnýUživatel odesílá email prostřednictvím Systému 2. Uživatel specifikuje emailovou adresu příjemce, předmět emailu, text emailu a volitelně soubory příloh emailu
Příloha B – Model případů užití
17
3. Systém nastaví emailovou adresu odesílatele podle uživatele, který je k systému přihlášen a vyžádal si tuto službu 4. Systém odešle email na adresu příjemce prostřednictvím SMTP serveru (ve skryté kopii i na emailovou adresu odesílatele) Tok událostí: Poslání emailu systémem (Alternate) 1. Případ užití začíná, když ObecnýUživatel zadá příkaz "Editovat a poslat email prostřednictvím systému" 2. Systém zobrazí dialog pro vytvoření emailu (odesílatel, adresát, kopie, předmět, text, přílohy) 3. ObecnýUživatel volitelně vybere šablonu emailu 4. ObecnýUživatel napíše email 5. KDYŽ ObecnýUživatel zadá příkaz odeslat email, systém odešle email prostřednictvím SMTP serveru Tok událostí: Poslání emailu ze šablony (Basic Path) 1. Případ užití začíná, když ObecnýUživatel zadá příkaz "Poslat email založený na šabloně" 2. Systém z kontextu zvolí správnou šablonu emailu 3. Systém připraví text emailu nahrazením "formulářových polí" skutečnými hodnotami 4. Systém postoupí připravený email defaultnímu emailovému klientovi na daném počítači 5. ObecnýUživatel (volitelně) upraví emailovou adresu příjemce, předmět emailu, text emailu a volitelně přiloží soubory příloh emailu 6. Email je odeslán
2.8
Modul Přihlášky
Balíček obsahuje případy užití týkající se správy přihlášek dobrovolníků na workcampy.
2.8.1 Editovat přihlášku Tok událostí: Editace přihlášky (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Editovat přihlášku" 3. Systém zobrazí dialog pro editaci přihlášky na workcamp 4. UživatelZaměstnanec může vyplnit klíčové slovo pro hledání workcampu (kód WC) 5. UživatelZaměstnanec zadá příkaz "Vyhledat workcamp" 6. KDYŽ UživatelZaměstnanec zadal klíčové slovo pro hledání: 6.1 Systém zobrazí v tabulce výsledek hledání. Zahrnuty jsou jen workcampy pořádané v daném (nastaveném) kalendářním roce 7. JINAK: 7.1 Systém zobrazí v tabulce všechny dostupné volné workcampy 8. UživatelZaměstnanec z nabídky vybere workcamp 9. UživatelZaměstnanec zvolí prioritu workcampu z intervalu 1-10 10. UživatelZaměstnanec zadá příkaz "Přidat workcamp" 11. Systém přidá workcamp do přihlášky 12. Systém zobrazí aktualizovaný seznam workcampů na přihlášce
18
Příloha B – Model případů užití
uc Modul Přihlášky Modul Přihlášky
Obnovit seznam přihlášek
Filtrovat přihlášky
Poslat infosheet «include»
«Pre-condition» {K systému je přihlášen UživatelZaměstnanec}
Poslat email
«extend» {jeVybránaPřihláška} «include» «extend»
(from Modul Posílání emailů)
«extend» Napsat email «extend» {jeVybránaPřihláška}
Zobrazit přihlášky
«include»
Požádat o přijetí na workcamp
«include»
«include»
Přijmout na workcamp
Odmítnout workcamp
UživatelZaměstnanec (fromAktéři) «extend» {jeVybránaPřihláška}
«extend» {volnáKapacita}
«extend» «extend»
Editovat přihlášku «extend» {jeVybránaPřihláška}
«extend»
«extend» {jeVybránaPřihláška}
Smazat přihlášku
Aktualizovat stav přihlášky
«include»
Generovat VEFku
Seřadit výpis
«extend»
Původně VEFky .rtf, nově .pdf programovým vyplněním PDF formuláře.
Vytvořit přihlášku k dobrovolníkovi
Případ užití je spouštěn i z balíčků Dobrovolníci a Synchronizace databází.
Obr. 8: Modul Přihlášky
2.8.2 Aktualizovat stav přihlášky Tok událostí: Aktualizace stavu přihlášky (Simple) 1. Případ užití začíná, kdyz UživatelZamšstnanec zadá příkaz "Aktualizovat stav přihlášky" 2. Systém zobrazí dialog pro aktualizaci stavu přihlášky s informacemi o zvolené přihlášce, dobrovolníkovi a status platby
2.8.3 Filtrovat přihlášky Tok událostí: Filtrování přihlášek (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zvolí ze speciálního seznamu požadovaný status přihlášek, které chce zobrazit (vše, přijaté, odmítnuté, čekající na odpověď, nebylo požádáno, přijato + zrušeno, bez workcampu) 2. Systém nastaví filtr zobrazení jen na ty přihlášky, které vyhovují zvolenému kritériu
Příloha B – Model případů užití
19
2.8.4 Generovat VEFku Tok událostí: Generování VEFky (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Generovat VEFku" 2. Systém vytvoří PDF dokument z dané přihlášky programovým vyplněním PDF formuláře. Jméno souboru bude "VEF_{Prijmeni}_{Jmeno}.pdf" 3. Systém umožní UživateliZaměstnanci dokument stáhnout 3.1 UživatelZaměstnanec soubor ručně uloží do archivu. Pokud se v něm soubor daného jména již vyskytuje (shoda jména a příjmení různých dobrovolníků nebo druhá a další přihláška v sezóně), UživatelZaměstnanec jméno souboru vhodně upraví.
2.8.5 Napsat email Tok událostí: Napsání emailu (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Napsat email" 2. Systém zobrazí dialog pro psaní emailu - adresa příjemce = email z přihlášky, adresa odesílatele = email přihlášeného UživateleZaměstnance; možno upravit předmět a text emailu, volitelně možno připojit přílohu 3. INCLUDE (Poslat email) Vstupní podmínka: jeVybránaPřihláška Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakou existující přihlášku z nabídky.
2.8.6 Obnovit seznam přihlášek Tok událostí: Obnovení seznamu přihlášek (Simple) 1. Případ užití začíná, kdyz UživatelZamšstnanec zadá příkaz "Obnovit seznam přihlášek" 2. Systém zruší filtr hledání 3. Systém obnoví seznam přihlášek z databáze
2.8.7 Odmítnout workcamp Tok událostí: Odmítnutí workcampu (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Odmítnout workcamp" 2. KDYŽ je status přihlášky "WAITING FOR REPLY": 2.1 KDYŽ jsou v přihlášce další workcampy, o které nebylo požádáno: 2.1.1 Systém aktualizuje stav přihlášky na "NOT ASKED" 2.2 Jinak: 2.2.1 Systém aktualizuje stav přihlášky na "REJECTED" 3. KDYŽ je status přihlášky "ACCEPTED": 3.1 Systém aktualizuje stav přihlášky na "ACCEPTED and CANCELLED" 4. Systém vytvoří emailovou zprávu ze šablony "informovat dobrovolníka o odmítnutí jeho účasti na workcampu" 5. INCLUDE (Poslat email)
2.8.8 Poslat infosheet Tok událostí: Poslání infosheetu (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Poslat infosheet" 2. Systém zobrazí dialog pro psaní emailu - adresa příjemce = email z přihlášky, adresa odesílatele = email přihlášeného UživateleZaměstnance, předmět = "Infosheet"; možno upravit předmět a text emailu, možno připojit přílohu 3. INCLUDE (Poslat email)
20
Příloha B – Model případů užití
Vstupní podmínka: jeVybránaPřihláška Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakou existující přihlášku z nabídky.
2.8.9 Požádat o přijetí na workcamp Tok událostí: Žádost o přijetí na workcamp (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Požádat o přijetí dobrovolníka na workcamp" 2. Systém zobrazí dialog "Odeslat žádost o přijetí dobrovolníka na workcamp" 3. Systém vytvoří emailovou zprávu ze šablony "žádost o přijetí dobrovolníka na workcamp"; příjemce = emailová adresa Organizace, předmět = "{příjmení} [age {věk dobrovolníka}] on {kód workcampu}", text = {text ze šablony} 3.1 UživatelZaměstnanec k emailu přiloží VEFku dobrovolníka 4. INCLUDE (Poslat email) Vstupní podmínka: volnáKapacita Případ užití je rozšířen, jen pokud má daný workcamp volnou kapacitu.
2.8.10 Přijmout na workcamp Tok událostí: Přijetí na workcamp (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Přijmout na workcamp" 2. Systém aktualizuje stav přihlášky na "ACCEPTED" 3. Systém vytvoří emailovou zprávu ze šablony "informovat dobrovolníka o přijetí na workcamp" 4. INCLUDE (Poslat email)
2.8.11 Seřadit výpis Tok událostí: Defaultní seřazení výpisu (Basic Path) 1. Systém seřadí výpis přihlášek podle data přijetí Tok událostí: Seřazení výpisu (Alternate) 1. Případ užití začíná, když UživatelZaměstnanec požaduje jiné seřazení výpisu 2. UživatelZaměstnanec zvolí vzestupné nebo sestupné řazení požadovaného sloupce (datum přijetí, ID přihlášky, jméno, příjmení, status) 3. Systém provede zvolené řazení
2.8.12 Smazat přihlášku Tok událostí: Smazání přihlášky (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Smazat přihlášku" 2. Systém si vyžádá potvrzení akce 3. KDYŽ UživatelZaměstnanec potvrdí smazání: 3.1 Systém uvolní kapacity workcampů na přihlášce 3.2 Systém vymaže přihlášku z databáze 4. JINAK systém neprovede žádné změny Vstupní podmínka: jeVybránaPřihláška Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakou existující přihlášku z nabídky.
2.8.13 Stáhnout VEFku Tok událostí: Stažení VEFky (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Stáhnout VEFku" 2. Systém postoupí vyžádanou VEFku UživateliZaměstnanci 3. UživatelZaměstnanec VEFku uloží do úložiště/archivu VEFek 4. UživatelZaměstnanec VEFku vytiskne na tiskárně
Příloha B – Model případů užití
21
2.8.14 Vytvořit přihlášku k dobrovolníkovi Tok událostí: Vytvoření přihlášky (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Vytvořit přihlášku k dobrovolníkovi" 2. INCLUDE (Editovat přihlášku) Tok událostí: Zrušení volby (Alternate) 1. UživatelZaměstnanec může kdykoliv zrušit akci "Vytvořit přihlášku k dobrovolníkovi" zadáním příkazu "Storno" Vstupní podmínka: jeVybranýDobrovolník Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakého existujícího dobrovolníka z nabídky.
2.8.15 Zobrazit přihlášky Tok událostí: Zobrazení přihlášek (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec vstoupí do sekce "Přihlášky" 2. Systém zobrazí v tabulce přihlášky patřící do nastaveného roku (viz. Modul Nastavení). Ke každé přihlášce zobrazí: datum podání, datum přijetí (stažení z webu), ID přihlášky, příjmení a jméno dobrovolníka, status přihlášky, detail o WC, datum odeslání infosheetu <editovatPřihlášku>
2.9
Modul Správa uživatelů
Balíček obsahuje případy užití související se správou uživatelů systému - přidání, odebrání uživatele, změna účtu a hesla.
22
Příloha B – Model případů užití
uc Modul Správa uživatelů «Pre-condition» {K systému je přihlášen UživatelZaměstnanec}
Modul Správa uživatelů
Vytvořit nového uživatele
Změnit uživatelský účet
«extend» {jeVybránUživatel}
UživatelZaměstnanec (fromAktéři)
Zobrazit uživatele «extend» {jeVybránUživatel}
Odstranit uživatele
Administrátor (fromAktéři)
Případ užití smí spustit jen Administrátor.
Obr. 9: Modul Správa uživatelů
2.9.1 Odstranit uživatele Tok událostí: Odstranění uživatele (Basic Path) 1. Případ užití začíná, když Administrátor (označí nějakého uživatele a) zadá příkaz "Odstranit uživatelský účet" 2. Systém si vyžádá potvrzení operace 3. KDYŽ Administrátor s odstraněním uživatelského účtu souhlasí, 3.1 Systém odstraní uživatelský účet z databáze 4. JINAK: 4.1 Systém ponechá daný uživatelský účet Vstupní podmínka: K systému je přihlášený Administrátor Vstupní podmínka: jeVybránaPřihláška Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakou existující přihlášku z nabídky.
2.9.2 Vytvořit nového uživatele Tok událostí: Vytvoření nového uživatele (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz Vytvořit nového uživatele 2. Systém zobrazí příslušný dialog a umožní zadat: jméno, příjmení, email, uživatelské jméno, heslo a uživatelskou roli v systému (DobrovolníkEditor, ZaměstnanecInexu, Administrátor) 3. UživatelZaměstnanec zadá příkaz "Vytvořit uživatelský účet" 4. KDYŽ se v Systému ještě nevyskytuje dané uživatelské jméno, 4.1 Systém vytvoří nový uživatelský účet 4.2 Systém odešle na uvedený email přihlašovací údaje 5. JINAK: 5.1 Systém vyzve ke změně uživatelského jména 5.2 Tok událostí pokračuje bodem (2)
Příloha B – Model případů užití
23
2.9.3 Změnit uživatelský účet Tok událostí: Změna uživatelského účtu (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Změnit uživatelský účet" 2. Systém zobrazí dialog s údaji daného uživatelského účtu a umožní změnit všechny údaje s výjimkou uživatelského jména 3. Systém uloží změny do databáze Vstupní podmínka: jeVybránUživatel Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakého existujícího uživatele z nabídky.
2.9.4 Zobrazit uživatele Tok událostí: Zobrazení uživatelů (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz Zobrazit uživatele 2. Systém zobrazí jednotlivé uživatele systému v tabulce - všechny dostupné údaje, kromě hesla
2.10 Modul Statistiky Balíček obsahuje případy užití související se získáváním statistických dat na konci sezóny. Požadavky na data se mění každou sezónu, je nutná značná variabilita "dotazů". uc Modul Statistiky Modul Statistiky
Statistika přijetí mužů a žen
Statistiky neúplné, požadavky na statistická data se mohou měnit každou sezónu. Je nutná variabilita a možnost editace "dotazů".
Statistika přijetí podle organizace "přijetí" = přijetí na workcamp
UživatelZaměstnanec (fromAktéři) Statistika přijetí podle věku
Statistika přijetí podle zaměstnání
Obr. 10: Modul Statistiky
2.10.1 Statistika přijetí mužů a žen muži a ženy zvlášť
24
Příloha B – Model případů užití
2.10.2 Statistika přijetí podle organizace 2.10.3 Statistika přijetí podle věku Rozdělení podle intervalů věku (<18, 18 - 21, ...)
2.10.4 Statistika přijetí podle zaměstnání
2.11 Modul Synchronizace databází Balíček obsahuje případy užití související se synchronizací lokální databáze s databází na serveru www.inexsda.cz. Jedná se proces "stažení přihlášek", které si podali zájemci o účast na workcampech, ze serveru inexsda.cz a upload dat o workcampech na stejný server. uc Modul Synchronizace databází Modul Synchronizace databází
Upload workcampů na web
Vyhledat podobné dobrovolníky
Download přihlášek z webu Vytvořit přihlášku k dobrovolníkovi
UživatelZaměstnanec (fromAktéři)
«include» (fromModul Přihlášky)
«extend» «extend»
«Pre-condition» {K systému je přihlášen UživatelZaměstnanec}
Zpracovat přihlášky «extend»
«extend» «extend»
Bod 4. scénáře případu užití je rozšířen o skutečnost, že systém předvyplní všechny údaje dostupné v přihlášce.
«extend» {jeVybranýDobrovolník}
Přidat nového dobrovolníka
Smazat aktuální přihlášku
«include»
Přejít na další přihlášku
Aktualizovat údaje o dobrovolníkovi
(fromModul Dobrovolníci)
Obr. 11: Modul Synchronizace databází
2.11.1 Aktualizovat údaje o dobrovolníkovi Tok událostí: Aktualizace údajů o dobrovolníkovi (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Aktualizovat údaje o dobrovolníkovi" 2. Systém zobrazí v jednom sloupci údaje o dobrovolníkovi získané z perzistence systému a ve druhém sloupci nové údaje z podané přihlášky
Příloha B – Model případů užití
25
3. Systém zvýrazní nové a/nebo změněné údaje 4. UživatelZaměstnanec provede požadované změny 5. KDYŽ UživatelZaměstnanec zadá příkaz "Uložit": 5.1 Systém uloží změny do databáze 6. KDYŽ UživatelZaměstnanec zadá příkaz "Storno": 6.1 Systém neprovede žádné změny Vstupní podmínka: jeVybranýDobrovolník Případ užití je rozšířen, pokud UživatelZaměstnanec vybere nějakého existujícího dobrovolníka z nabídky.
2.11.2 Download přihlášek z webu Tok událostí: Download přihlášek (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Stáhnout přihlášky z webu" 2. Systém získá podané přihlášky ze serveru www.inexsda.cz a zobrazí jejich počet
2.11.3 Přejít na další přihlášku Tok událostí: Přechod na další přihlášku (Simple) 1. Případ užití začíná, kdyz Uživatel zaměstnanec zadá příkaz "Přejít na další přihlášku" NEBO byla právě smazána aktuální přihláška 2. Systém přejde na další podanou přihlášku v pořadí od nejstarší
2.11.4 Smazat aktuální přihlášku Systém zachovává podané přihlášky v databázi na serveru www.inexsda.cz, dokud každou jednotlivou z nich UživatelZaměstnanec po zpracování explicitně nesmaže. Tok událostí: Smazání přihlášky (Simple) 1. Systém si vyžádá potvrzení smazání 2. KDYŽ Uživatel zaměstnanec potvrdil smazání: 2.1 Systém vymaže aktuálně zpracovávanou přihlášku z databáze na www.inexsda.cz 2.2 INCLUDE (Přejít na další přihlášku) 3. JINAK systém neprovede žádné změny
2.11.5 Upload workcampů na web Tok událostí: Upload workcampů (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Uploadovat workcampy na web" 2. Systém provede upload všech workcampů (všech údajů o nich) do databáze na webu inexsda.cz, které splňují podmínku viditelnosti na webu; nastavené datum_zveřejnění_workcampu větší nebo rovno aktuální_datum a zároveň je datum zahájení workcampu v intervalu od-do definovaném pro daný upload Tok událostí: Oznámení chyby (Alternate) 1. Když během uploadu dojde k chybě: 1.1 Systém zobrazí chybové hlášení včetně identifikace workcampu, u kterého došlo k chybě 1.2 Systém zapíše příslušné chybové hlášení do logu 1.3 Když existuje funkční spojení s databází na webu: 1.3.1 Systém pokračuje v uploadu dalších workcampů
26
Příloha B – Model případů užití
2.11.6 Vyhledat podobné dobrovolníky Tok událostí: Vyhledání podobných dobrovolníků (Simple) 1. Systém vyhledá "podobné dobrovolníky" již v systému existující - shoda rodného čísla a/nebo jména a příjmení a/nebo emailu 1.1 KDYŽ systém najde nějaké "podobné dobrovolníky", pak: 1.1.1 Nalezené výsledky systém zobrazí v tabulce 1.2 JINAK: 1.2.1 Systém zobrazí informaci, že nikdo nebyl nalezen
2.11.7 Zpracovat přihlášky Tok událostí: Přerušení zpracování (Alternate) 1. UživatelZaměstnanec může kdykoliv přerušit proces zpracování přihlášek využitím jiné funkce systému Tok událostí: Zpracování přihlášek (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Zpracovat přihlášky" 2. WHILE jsou k dispozici další přihlášky: 2.1 Systém nabídne ke zpracování další podanou přihlášku v pořadí od nejstarší 2.2.1 Systém zobrazí údaje z přihlášky - datum podání, jméno a příjmení, rodné číslo, email, bydliště a kódy workcampů, na které se dobrovolník hlásí 2.2.2 INCLUDE (Vyhledat podobné dobrovolníky)
2.12 Modul Upomínky Balíček obsahuje případy užití týkající se upomínek na blížící se události, kterými jsou např.: INEX dobrovolníkovi neposlal včas infosheet, pořádající organizace neodpověděla v termínu na podanou žádost o přijetí dobrovolníka na workcamp.
2.12.1 Obnovit upomínky Tok událostí: Obnovení upomínek (Simple) 1. Případ užití začíná, když UživatelZaměstnanec zadá příkaz "Obnovit upomínky" 2. INCLUDE (Vytvořit upomínky)
2.12.2 Upomínka poslat infosheet Tok událostí: Poslání infosheetu (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec označí upomínku typu "Dobrovolníkovi nebyl včas odeslán infosheet" 2. UživatelZaměstnanec zadá příkaz "Poslat infosheet" 3. INCLUDE (Poslat infosheet)
2.12.3 Vytvořit upomínky Tok událostí: Vytvoření upomínek (Simple) 1. Systém vytvoří novou upomínku, když: 1.1 Organizace včas neodpověděla na žádost o přijetí dobrovolníka a statut přihlášky není CANCELED; více než 5 pracovních dnů (odpověď by měla přijít do 3 pracovních dnů) 1.2 Dobrovolníkovi nebyl měsíc (30 dnů) před odjezdem na workcamp odeslán infosheet
Příloha B – Model případů užití
27
uc Modul Upomínky Modul Upomínky
Vytvořit upomínky časovačem
Vytvořit upomínky
«include»
Čas (fromAktéři)
«include» Požádat o přijetí na workcamp Obnovit upomínky
«include» Znovu poslat žádost o přijetí
«Pre-condition» {K systému je přihlášen UživatelZaměstnanec}
«extend»
«extend»
(fromModul Přihlášky)
Upomínka poslat infosheet
«extend» «include» Zobrazit upomínky
Poslat infosheet
UživatelZaměstnanec (fromAktéři)
(fromModul Přihlášky)
Obr. 12: Modul Upomínky
2.12.4 Vytvořit upomínky časovačem Tok událostí: Vytvoření upomínky časovačem (Simple) 1. Čas spustí v pravidelných intervalech operaci 'vytváření upomínek' 2. INCLUDE (Vytvořit upomínky)
2.12.5 Znovu poslat žádost o přijetí žádost = žádost o přijetí dobrovolníka adresovaná spolupracující organizaci Tok událostí: Odeslání zádosti o přijetí dobrovolníka (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec označí upomínku typu "Organizace neodpověděla včas na žádost" 2. UživatelZaměstnanec zadá příkaz "Znovu poslat žádost" 3. INCLUDE (Požádat o přijetí na workcamp)
2.12.6 Zobrazit upomínky Tok událostí: Zobrazení upomínek (Basic Path) 1. Případ užití začíná, když UživatelZaměstnanec vstoupí do sekce "Upomínky" 2. Systém zobrazí v tabulce přehled všech upomínek - informace: jméno a příjmení dobrovolníka, datum upomínky a důvod upomínky 2.1 Jednotlivé typy upomínek Systém barevně odliší <žádostOPřijetí> <poslatInfosheet>
28
Příloha B – Model případů užití
2.13 Modul Workcampy Balíček obsahuje případy užití týkající se správy workcampů. Kromě mazání workcampu má k těmto funkcím přístup aktér DobrovolníkEditor. uc Modul Workcampy Modul Workcampy «Pre-condition» {K systému je přihlášen ObecnýUživatel}
Zobrazit detaily
«extend» {jeVybránWorkcamp}
Vyhledat workcampy
«extend» Seřadit výpis «extend»
Zobrazit Workcampy
ObecnýUživatel
«extend» Přidat nový workcamp
(fromAktéři)
«extend» {jeVybránWorkcamp} «include»
Editovat údaje o workcampu «include» Načtení nabídkek
Obr. 13: Modul Workcampy
2.13.1 Editovat údaje o workcampu Tok událostí: Editace údajů o workcampu (Basic Path) 1. Případ užití začíná, když ObecnýUživatel zadá příkaz "Editovat workcamp" 2. Systém zobrazí dialog pro editaci údajů o vybraném workcampu 3. Uživatel volitelně provede změny údajů podle potřeby 4. KDYŽ Uživatel zadá příkaz "Uložit" 4.1 Systém provede validaci údajů 4.2 KDYŽ proběhne validace bez chyb: 4.2 Systém uloží data do databáze 4.3 JINAK: 4.3.1 Systém upozorní na problémy 4.3.2 Tok událostí pokračuje bodem 3. 5. KDYŽ Uživatel zadá příkaz "Storno" 5.1 Systém zapomene všechny změny Tok událostí: Zrušení editace (Alternate) 1. Uživatel může kdykoliv opustit režim editace zadáním příkazu "Storno" 2. Systém zapomene všechny případné změny Vstupní podmínka: jeVybránWorkcamp Případ užití je rozšířen, pokud ObecnýUživatel vybere nějaký existující workcamp
Příloha B – Model případů užití
29
z nabídky.
2.13.2 Načtení nabídkek Načtení dat z databáze pro rozbalovací nabídky, konkrétně: - seznam dostupných organizací - seznam zemí, kde se konají workcampy - seznam zkratek pro zaměření workcampu Tok událostí: Načtení nabídek (Simple) 1. Systém načte z databáze seznam všech jmen organizací do rozbalovací nabídky "Organizace" 2. Systém načte z databáze seznam všech možných cílových zemí pro workcampy do rozbalovací nabídky "Země" 3. Systém načte z databáze seznam všech možných zaměření workcampů do rozbalovací nabídky "Zaměření"
2.13.3 Přidat nový workcamp Tok událostí: Přidání nového workcampu (Basic Path) 1. Případ užití začíná, když Uživatel zadá příkaz "Přidat nový workcamp" 2. INCLUDE (Načtení nabídek) 3. Systém zobrazí dialog pro přidání nového workcampu. 4. Uživatel vybere z nabídky "Organizace" požadovanou organizaci, zadá kód workcampu ("wc_fiye"), název WC, z nabídky "Země" vybere zemi konání, zadá komunikační jazyk, datum konání WC od-do (pokud není známo, tak volitelně zadá přibližné datum do speciálního pole), z nabídky "Zaměření" vybere požadované zaměření (možno zadat dvě různá, první povinné), vybere typ WC (pro: teenagery, rodiny, důchodce, vegetariány nebo bez upřesnění = pro všechny), zadá minimální a maximální věk, oblast/místo konání, popis činnosti, popis anglicky, zadá typ ubytování a stravování a obecné poznámky k WC 5. Uživatel zadá kapacitu workcampu (plná kapacita, počet volných míst, počet volných míst muži a počet volných míst ženy 6. Uživatel volitelně zadá datum, ke kterému se má workcamp zobrazit na webu pro veřejnost (defaultně aktuální datum = hned) 7. Uživatel volitelně zadá, zda organizace urgentně hledá dobrovolníky na workcamp (ano / ne, defaultně ne) 8. Uživatel zadá příkaz "Uložit" 9. Systém provede validaci údajů (jedinečnost kódu workcampu v daném roce, smysluplné kapacity a věky, datum do _větší_než_ od) 10. KDYŽ proběhla validace bez chyb: 10.1 Systém uloží data z formuláře do databáze 11. JINAK: 11.1 Systém informuje ObecnéhoUživatele o problémech 11.2 Tok událostí pokračuje bodem 4. (úprava již zadaných údajů) Tok událostí: Zrušení akce (Alternate) 1. Uživatel může kdykoliv opustit dialog pro přidání nového workcampu zadáním příkazu "Storno" 2. Systém zahodí všechny zadané informace o novém workcampu
2.13.4 Seřadit výpis Tok událostí: Defaultní seřazení výpisu (Basic Path) 1. Systém seřadí výpis workcampů abecedně podle kódu Tok událostí: Seřazení výpisu (Alternate) 1. Případ užití začíná, když ObecnýUživatel požaduje jiné seřazení výpisu 2. ObecnýUživatel zvolí vzestupné nebo sestupné řazení požadovaného sloupce (kód WC,
30
Příloha B – Model případů užití
kód země, kód organizace, název WC, datum začátku, datum konce, volná místa, zaměření WC, teenage) 3. Systém provede zvolené řazení
2.13.5 Vyhledat workcampy Tok událostí: Vyhledání workcampu (Basic Path) 1. Případ užití začíná, když ObecnýUživatel vepíše hledaný údaj do speciálního vyhledávacího pole 2. KDYŽ Uživatel volitelně vybere ze seznamu, jaké workcampy zahrnout do hledání (volné / volné pro ženy / volné pro muže / všechny - tedy i plné) 2.1 Systém hledání omezí jen na zvolenou 'skupinu' WC 3. JINAK Systém zahrne do hledání všechny workcampy, i plné 4. Uživatel zadá příkaz "Filtrovat" 5. Systém prohledá databázi workcampů pořádaných v daném roce (kód workcampu / jméno organizace / název WC / kód zaměření / popis práce / poznámky) 6. Systém zobrazí v tabulce výsledek hledání Tok událostí: Zrušení filtru (Alternate) 1. Případ užití začíná, když ObecnýUživatel zadá příkaz "Zrušit filtr" 2. Systém zobrazí v tabulce všechny workcampy pořádané v daném roce
2.13.6 Zobrazit Workcampy Tok událostí: Zobrazení workcampů (Simple) 1. Případ užití začíná, když Uživatel vstoupí do sekce Workcampy 2. Systém zobrazí v tabulce informace o všech workcampech v databázi vyhovujících vyhledávacím kritériím pro daný rok (viz Modul Nastavení) (kód WC, kód země, jméno organizace, jméno/název WC, datum začátku a konce WC, počet volných míst na WC celkem celosvětově, počet volných míst pro ženy a muže, zaměření WC)
2.13.7 Zobrazit detaily Tok událostí: Zobrazení detailů o workcampu (Simple) 1. Případ užití začíná, když ObecnýUživatel zadá příkaz "Zobrazit detaily" 2. Systém zobrazí detaily o aktuálně označeném workcampu v k tomu vymezeném prostoru (novém okně): 2.1 Detaily = kód, název, datum a místo konání workcampu; počet přihlášených dobrovolníků, počet dobrovolníků, o které bylo zažádáno, kolik bylo přijato a odmítnuto; oblast konání, pracovní náplň, ubytování, poznámky; dobrovolníci přihlášení na daný workcamp Vstupní podmínka: jeVybránWorkcamp Případ užití je rozšířen, pokud ObecnýUživatel vybere nějaký existující workcamp z nabídky.
2.14 Modul Zálohování Balíček obsahuje případy užití týkající se zálohování databáze. Zálohuje se prostředky daného databázového stroje.
Příloha B – Model případů užití
31
uc Modul Zálohování Modul Zálohování
Čas (fromAktéři) Zálohovat databázi
Administrátor (fromAktéři)
Obr. 14: Modul Zálohování
2.14.1 Zálohovat databázi Implementační poznámka: pravděpodobně 'cron' na platformě Linux/Unix, Plánovač na platformě MS Windows Tok událostí: Pravidelné zálohování databáze (Basic Path) 1. Případ užití začíná, když Čas spustí příkaz "Zálohovat databázi" 2. Systém provede zálohu databáze. Jméno souboru určuje datum a čas zálohy a její ID (pořadové číslo) Tok událostí: Zálohování databáze na žádost (Alternate) 1. Případ užití začíná, když Administrátor spustí příkaz "Zálohovat databázi" 2. Systém provede zálohu databáze. Jméno souboru určuje datum a čas zálohy a její ID (pořadové číslo)
32
Příloha B – Model případů užití
Příloha: Životní cyklus přihlášky stm Životní cyklus přihlášky
Začátek práce s přihláškou (nová)
NOT ASKED
Podána žádost o přijetí na WC
WAITING FOR REPLY
Účast dobrovolníka na WC odmítnuta [V přihlášce jsou další WC, o ktreré nebylo požádáno]
Dobrovolník zrušil svou přihlášku
Účast dobrovolníka na WC odmítnuta [Už bylo požádáno o všechny WC v přihlášce]
Dobrovolník zrušil svou přihlášku Dobrovolník přijat na WC
CANCELLED
REJECTED
ACCEPTED
Dobrovolník účast na WC zrušil nebo byl WC organizací zrušen
ACCEPTED AND CANCELLED
Dobrovolník jede na WC
Konec
Obr. 15: Životní cyklus přihlášky
Příloha C – Datový model
1
Datový model Tento dokument definuje datový aplikace "INEXwebApp" – webového informačního systému zadavatele – organizace INEX – SDA (http://www.inexsda.cz). Dokument je generovaný z datového modelu vytvořeném CASE nástrojem Enterprise Architect (http://www.sparxsystems.com.au). Počáteční verze modelu byla importována ze schématu databáze přes ODBC konektor.
Obsah Datový model ................................................................................................................................. 2 1. inex_db .................................................................................................................................. 2 1.0 view_alerts .................................................................................................................. 5 1.1 view_application_top_wc ........................................................................................... 5 1.2 view_applications........................................................................................................ 6 1.3 view_applications_calculated_status .......................................................................... 6 1.4 view_members ............................................................................................................ 6 1.5 view_notrequestedbyorganization............................................................................... 6 1.6 view_volunteers .......................................................................................................... 6 1.7 view_workcamp .......................................................................................................... 6 1.8 application................................................................................................................... 6 1.9 application_workcamp ................................................................................................ 7 1.10 country ........................................................................................................................ 8 1.11 email_template ............................................................................................................ 8 1.12 know_about_inex ........................................................................................................ 8 1.13 languages..................................................................................................................... 9 1.14 member........................................................................................................................ 9 1.15 method_of_payment.................................................................................................. 11 1.16 organization............................................................................................................... 11 1.17 payment..................................................................................................................... 12 1.18 reason_of_payment ................................................................................................... 12 1.19 settings ...................................................................................................................... 13 1.20 training ...................................................................................................................... 13 1.21 user_roles .................................................................................................................. 13 1.22 users .......................................................................................................................... 14 1.23 workcamp.................................................................................................................. 14 1.24 workcamp_intention.................................................................................................. 15 2. inexsda-cz............................................................................................................................ 15 1.25 vef ............................................................................................................................. 17
2
Příloha C – Datový model
Datový model Type: Balíček:
Balíček WebIS_pro_INEX - SDA
Datový model informačního systému se skládá z dvou balíčků. Balíček „inex_db“ reprezentuje primární databázi systému umístěnou na lokální síti a balíček „inexsda-cz" představuje část schématu databáze na serveru www.inexsda.cz. class Datový model
Datový model reprezentující databázová schémata: - 'lokální' databáze INEX-SDA "inex_db" - databázový stroj: PostgreSQL 8.2 - databáze na serveru www.inexsda.cz "inexsda-cz" - databázový stroj: MySQL
inex_db + application + application_workcamp + country + email_template + know_about_inex + languages + member
Databázové schéma "inex_db" ("lokální databáze")
+ method_of_payment + organization + payment + reason_of_payment + settings + training
Část databázového schématu "inexsda-cz" (databáze na serveru www.inexsda.cz)
+ user_roles + users + view_alerts + view_application_top_wc + view_applications + view_applications_calculated_status
inexsda-cz + vef
+ view_members + view_notrequestedbyorganization + view_volunteers + view_workcamp + workcamp + workcamp_intention
Obr. 1: Datový model
1. Type: Balíček:
inex_db Balíček Datový model
Diagram schématu je z důvodu větších rozměrů rozdělen na následujících stranách na tři části (obrázky Obr. 2-1, Obr. 2-2 a Obr. 2-3).
Příloha C – Datový model
3
class inex_db
training
+training_pkey
«column» 1 *PK tr_name: char(25)
+country_tr_name_fkey
(tr_name = tr_name)
«PK» + training_pkey(char) +training_pkey
(co_id = co_id)
1
country
0..* «column» *PK co_id: char(8) * co_name: char(32) * co_visa: boolean = false +country_pkey co_visareq: text +country_pkey * co_invitationletter: boolean = false 1 FK tr_name: char(25) 1
+country_pkey
«PK» + country_pkey(char)
«FK» country_tr_name_fkey(char) 1 +
(tr_name = tr_name)
+country_pkey
+member_tr_name_fkey 0..*
+member_co_id_fkey 0..*
Nepoužívá se: co_invitationletter co_visareq
(co_id_2 = co_id)
member
(wc_country = co_id)
«column» *PK me_id: integer = nextval('member... * me_firstname: char(32) +member_co_id2_fkey * me_lastname: char(32) 0..* * me_email: char(128) me_mobile: char(32) me_phone: char(48) me_phone2: char(24) me_fax: char(24) me_address1: char(64) me_address2: char(64) me_city: char(64) me_zip: char(16) * me_activemember: boolean = false me_comments: text me_passport: char(64) * me_male: char(8) * me_vegetarian: boolean = false * me_maritalstatus: char(16) = 'n/a'::characte... me_negativeexperience: text me_bankcode: char(8) me_accountnumber: char(64) me_specificsymbol: char(8) me_birthdate: time with time zone * me_birthnumber: char(16) FK co_id: char(8) me_nationality: char(8) me_occupation: char(64) me_passportexpiry: time with time zone me_emergencycontact: char(64) me_emdayphone: char(32) me_emnightphone: char(32) me_speakwell: char(64) me_speaksome: char(64) me_specialneeds: text me_pastexperience: text FK tr_name: char(25) me_adress1_2: char(64) me_adress2_2: char(64) me_city_2: char(64) me_zip_2: char(64) +member_pkey FK co_id_2: char(8) «unique» + member_me_birthnumber_key(char)
+workcamp_wc_country_fkey 0..*
«index» + workcamp_or_id(char) + workcamp_wc_fiyecode(char) + workcamp_wi_id(char)
«index» + member_co_id(char) + member_me_birthnumber_key(char)
«FK» + workcamp_or_id_fkey(char) + workcamp_wc_country_fkey(char) + workcamp_wi_id2_fkey(char) + workcamp_wi_id_fkey(char)
«FK» + member_co_id2_fkey(char) + member_co_id_fkey(char) + member_tr_name_fkey(char) 1
workcamp «column» *PK wc_id: integer = nextval('workca... *FK wc_country: char(8) wc_language: char(16) FK wi_id: char(16) FK wi_id2: char(16) *FK or_id: char(48) * wc_name: char(182) wc_endesc: text wc_czdesc: text wc_begin: time with time zone wc_end: time with time zone +workcamp_or_id_fkey * wc_freeplaces: integer = 10 * wc_capacity: integer = 10 0..* * wc_freemale: integer = 1 * wc_freefemale: integer = 1 * wc_minage: integer = 18 +workcamp_wi_id_fkey * wc_maxage: integer = 98 wc_enreq: text 0..* wc_czreq: text * wc_vegetarian: boolean = false wc_fiyecode: char(16) wc_aproxdate: char(50) wc_area: text wc_workdesc: text wc_accomodation: text * wc_teenage: boolean = false wc_notes: text wc_booking: text * wc_wanted: boolean = false * wc_senior: boolean = false * wc_family: boolean = false «PK» + workcamp_pkey(integer)
1
«PK» + member_pkey(integer)
+member_pkey
1
+workcamp_pkey
+workcamp_wi_id2_fkey 0..*
1
(me_id = me_id) (wc_id = wc_id)
Obr. 2-1: inex_db – část 1
| x| | |
|
4
Příloha C – Datový model
organization
(co_id = co_id)
«column» *PK or_id: char(48) *FK co_id: char(8) * or_name: char(128) or_email1: char(64) or_incomingemail: char(50) +organization_co_id_fkey or_outgoingemail: char(50) 0..* or_email2: char(64) or_contactperson: char(64) or_phone: char(24) or_mobile: char(24) or_fax: char(24) or_address1: char(64) or_address2: char(64) or_postcode: char(16) or_zip: char(32) or_website: char(128) * or_network: char(50) +organization_pkey
«view» view_application_top_wc
«view» view_applications_calculated_status
«view» view_applications
1 «PK» + organization_pkey(char) «index» + organization_co_id(char)
«view» view_alerts
«FK» + organization_co_id_fkey(char)
«view» view_members
(or_id = or_id)
know_about_inex «column» *PK ka_year: integer *PK ka_from: char(64) ka_count: integer = 0
«view» view_workcamp
«PK» + know_about_inex_pkey(integer, char) «index» + know_about_inex_ka_from(char) +workcamp_or_id_fkey «view» view_volunteers +workcamp_wi_id_fkey
(wi_id = wi_id)
+workcamp_intention_pkey
«view» view_notrequestedbyorganization 1
workcamp_intention «column» *PK wi_id: char(16) * wi_namecz: char(128) wi_nameen: char(128) wi_desccz: text wi_descen: text «PK» +workcamp_intention_pkey + workcamp_intention_pkey(char) 1 (wi_id2 = wi_id) +workcamp_wi_id2_fkey
| |
Obr. 2-2: inex_db – část 2
| x| |
Příloha C – Datový model
5
(me_id = me_id)
+application_wc_id_fkey 0..* +payment_me_id_fkey 0..* application payment
+application_me_id_fkey «column» 0..* *PK ap_id: char(32) *FK me_id: integer * ap_receiveddate: time with time zone ap_acceptdate: time with time zone ap_rejectdate: time with time zone ap_description: text ap_canceleddate: time with time zone * ap_returnpayment: boolean = false ap_motivation: text * ap_tryotherwc: boolean = false ap_prefferedtime: char(50) ap_prefferedcountry: char(50) ap_generalremarks: text ap_resultby: char(32) ap_infosheetby: char(32) * ap_haveinvletter: boolean = false ap_prefferedintention: text ap_cancelreason: text ap_infosheetsentdate: time with time zone FK wc_id: integer ap_status: char(32) = 'NOT ASKED'::ch... ap_log: text ap_status_detail: text = 'NOT PAID!'::text ap_enterdate: time with time zone
«column» *PK pa_id: integer = nextval('paymen... *FK me_id: integer *FK mo_name: char(32) *FK rp_name: char(32) ap_id: char(32) ts_timescale: integer = 0 * pa_received: time with time zone = now() pa_description: char(255) * pa_amount: numeric(0) pa_returnedamount: numeric(0) = 0 pa_returnreason: text «PK» + payment_pkey(integer) «index» + payment_ap_id(char) + payment_me_id(integer) + payment_pa_id(integer) «FK» + payment_me_id_fkey(integer) + payment_mo_name_fkey(char) + payment_rp_name_fkey(char) +payment_rp_name_fkey
0..*
+payment_mo_name_fkey
0..* «PK» + application_pkey(char)
(rp_name = rp_name)
+reason_of_payment_pkey
(mo_name = mo_name)
1
+method_of_payment_pkey
reason_of_payment
«index» + application_me_id(integer)
1
method_of_payment
«column» *PK rp_name: char(32)
«column» *PK mo_name: char(32)
«PK» + reason_of_payment_pkey(char)
«PK» + method_of_payment_pkey(char)
«FK» + application_me_id_fkey(integer) + application_wc_id_fkey(integer) +application_pkey
1
(ap_id = ap_id) +application_workcamp_ap_id_fkey 0..* application_workcamp «column» *pfK ap_id: char(32) *PK wc_id: integer = 0 * aw_priority: integer aw_requestdate: time with time zone aw_acceptdate: time with time zone aw_rejectdate: time with time zone
email_template «column» *PK em_id: char(32) em_body: text «PK» + email_template_pkey(char)
users «column» *PK us_username: char(16) * us_password: char(32) * us_firstname: char(32) * us_lastname: char(32) * us_email: char(128) «PK» + users_pkey(char)
languages «column» *PK la_code: char(3) la_name: char(20) «PK» + languages_pkey(char)
user_roles
«PK» + application_workcamp_pkey(char, integer) «index» + application_workcamp_ap_id(char) + application_workcamp_not_null(char) + application_workcamp_wc_id(integer) + application_workcamp_uniq_priority(char) «FK» + application_workcamp_ap_id_fkey(char)
settings
«column» *PK ur_username: char(16) *PK ur_rolename: char(16)
«column» *PK se_name: char(32) * se_value: text
«PK» + ur_pkey(char, char)
«PK» + settings_pkey(char)
Obr. 2-3: inex_db – část 3
1.0
view_alerts
Databáze:
1.1
PostgreSQL, Stereotype: «view», Balíček: inex_db
view_application_top_wc
Databáze: PostgreSQL, Stereotype: «view», Balíček: inex_db Poznámky: For each application shows the top not asked/rejected/accepted workcamp!
| | | x|
|
6
1.2
Příloha C – Datový model
view_applications
Databáze:
1.3
view_applications_calculated_status
Databáze:
1.4
PostgreSQL, Stereotype: «view», Balíček: inex_db
view_workcamp
Databáze:
1.8
PostgreSQL, Stereotype: «view», Balíček: inex_db
view_volunteers
Databáze:
1.7
PostgreSQL, Stereotype: «view», Balíček: inex_db
view_notrequestedbyorganization
Databáze:
1.6
PostgreSQL, Stereotype: «view», Balíček: inex_db
view_members
Databáze:
1.5
PostgreSQL, Stereotype: «view», Balíček: inex_db
PostgreSQL, Stereotype: «view», Balíček: inex_db
application
Databáze: PostgreSQL, Stereotype: «table», Balíček: inex_db Poznámky: Provedené změny tabulka application: nový sloupec ap_enterdate datum podání přihlášky dobrovolníkem (dříve jen datum přijetí a zpracování přihlášky ap_receivedate) Sloupce PK Jméno True ap_id False me_id False ap_receiveddate False False False False False False False False False False False False False False False False False False
Typ char integer time with time zone ap_acceptdate time with time zone ap_rejectdate time with time zone ap_description text ap_canceleddate time with time zone ap_returnpayment boolean ap_motivation text ap_tryotherwc boolean ap_prefferedtime char ap_prefferedcountry char ap_generalremarks text ap_resultby char ap_infosheetby char ap_haveinvletter boolean ap_prefferedintentio text n ap_cancelreason text ap_infosheetsentdate time with time zone wc_id integer ap_status char
Not Null True True True
Unique True False False
Len 32 0 0
Prec 0 0 0
Scale 0 0 0
False
False
0
0
0
False
False
0
0
0
False False
False False
0 0
0 0
0 0
True False True False False False False False True False
False False False False False False False False False False
0 0 0 50 50 0 32 32 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
False False
False False
0 0
0 0
0 0
False False
False False
0 32
0 0
0 0
Init
false false
false
'NOT ASKE D'::cha racter
Poznámky
Příloha C – Datový model
7
PK
Jméno
Typ
Not Null Unique
Len
Prec Scale
False False
ap_log ap_status_detail
text text
False False
False False
0 0
0 0
0 0
False
ap_enterdate
time with False time zone
False
0
0
0
Constraints Jméno application_pkey application_me_id application_me_id_fkey application_wc_id_fkey Relationships Sloupce (me_id = me_id) (wc_id = wc_id) (ap_id = ap_id)
1.9
Typ Public Public Public Public
Sloupce ap_id me_id me_id wc_id
Init varyin g
Poznámky
'NOT PAID!' ::text
Inicializační kód
Asociace 0..* application.application_me_id_fkey 1 member.member_pkey 0..* application.application_wc_id_fkey 1 workcamp.workcamp_pkey 0..* application_workcamp.application_workcamp_ap_id_fkey 1 application.application_pkey
Date of entering the application by volunteer
Poznámky
Poznámky
application_workcamp
Databáze:
PostgreSQL, Stereotype: «table», Balíček: inex_db
Sloupce PK Jméno True ap_id True wc_id False aw_priority False aw_requestdate False
aw_acceptdate
False
aw_rejectdate
Typ char integer integer time with time zone time with time zone time with time zone
Constraints Jméno application_workcamp_pkey application_workcamp_ap_id application_workcamp_not_null application_workcamp_wc_id application_workcamp_uniq_priority application_workcamp_ap_id_fkey Relationships Sloupce (ap_id = ap_id)
Not Null True True True False
Unique True True False False
Len 32 0 0 0
Prec 0 0 0 0
Scale Init 0 0 0 0 0
False
False
0
0
0
False
False
0
0
0
Typ Public Public Public Public Public Public
Sloupce ap_id wc_id ap_id ap_id wc_id ap_id ap_id
Inicializační kód
Asociace 0..* application_workcamp.application_workcamp_ap_id_fkey 1 application.application_pkey
Poznámky
Poznámky
Poznámky
8
Příloha C – Datový model
1.10
country
Databáze:
PostgreSQL, Stereotype: «table», Balíček: inex_db
Sloupce PK Jméno True co_id False co_name False co_visa False co_visareq False co_invitationletter False tr_name Constraints Jméno country_pkey country_tr_name_fkey Relationships Sloupce (tr_name = tr_name) (co_id_2 = co_id) (co_id = co_id) (co_id = co_id) (wc_country = co_id)
1.11
Typ Public Public
Not Null True True True False True False
Unique True False False False False False
Len 8 32 0 0 0 25
Sloupce co_id tr_name
Prec 0 0 0 0 0 0
Scale Init 0 0 0 false 0 0 false 0
Inicializační kód
Asociace 0..* country.country_tr_name_fkey 1 training.training_pkey 0..* member.member_co_id2_fkey 1 country.country_pkey 0..* member.member_co_id_fkey 1 country.country_pkey 0..* organization.organization_co_id_fkey 1 country.country_pkey 0..* workcamp.workcamp_wc_country_fkey 1 country.country_pkey country.
Poznámky
Poznámky
Poznámky
email_template
Databáze:
PostgreSQL, Stereotype: «table», Balíček: inex_db
Sloupce PK Jméno True em_id False em_body Constraints Jméno email_template_pkey
1.12
Typ char char boolean text boolean char
Typ char text
Typ Public
Not Null Unique Len True True 32 False False 0
Sloupce em_id
Prec Scale Init 0 0 0 0
Inicializační kód
Poznámky
Poznámky
know_about_inex
Databáze: PostgreSQL, Stereotype: «table», Balíček: inex_db Poznámky: Table that holds information about how did volunteers get zpráva know about INEX-SDA for particular year. Provedené změny nová tabulka know_about_inex: pro evidenci statistik, odkud se dobrovolníci, kteří si podali přihlášku, dozvěděli o organizaci INEX – SDA; rozlišení podle kalendářních roků ka_from bude inkrementovano pro dany rok, pokud se v tabulce vyskytuje, jinak pridan dalsi radek (volba "other")
Příloha C – Datový model
Sloupce PK Jméno True ka_year
9
Typ integer
Not Null True
Unique False
Len 0
Prec 0
Scale 0
True
ka_from
char
True
False
64
0
0
False
ka_count
integer
False
False
0
0
0
Constraints Jméno know_about_inex_pkey
know_about_inex_ka_fr om
1.13
Typ Public
Sloupce ka_year ka_from
Public
ka_from
Init
0
Inicializační kód
Poznámky numerical representation of year from where (INEX-SDA website, friends, leaflets and posters, media, other = from where) count of occurrence
Poznámky
languages
Databáze: PostgreSQL, Stereotype: «table», Balíček: inex_db Poznámky: Language codes for workcamps (English = "ENG", ...) Provedené změny nová tabulka languages: kódy jazyků podle ISO 639-2 (-3) a jejich popisy – dobrovolné užití pro jazyky workcampů a jazyky, kterými mluví dobrovolníci Sloupce PK Jméno True la_code
False
la_name
Typ char
Not Null True
Unique True
Len 3
Prec 0
Scale 0
char
False
False
20
0
0
Constraints Jméno languages_pkey
1.14
Sloupce la_code
Poznámky Language codes according zpráva ISO 639-2 / ISO 639-3 Name of the language
Inicializační kód
Poznámky
member
Databáze:
PostgreSQL, Stereotype: «table», Balíček: inex_db
Sloupce PK Jméno True me_id
False False False False False False
Typ Public
Init
me_firstname me_lastname me_email me_mobile me_phone me_phone2
Typ integer
Not Null Unique Len True True 0
char char char char char char
True True True False False False
False False False False False False
32 32 128 32 48 24
Prec Scale Init Poznámky 0 0 nextval ('mem ber_me _id_se q'::regc lass) 0 0 0 0 0 0 0 0 0 0 0 0
10
Příloha C – Datový model
PK False False False False False False False False False False False
Jméno me_fax me_address1 me_address2 me_city me_zip me_activemember me_comments me_passport me_male me_vegetarian me_maritalstatus
Typ char char char char char boolean text char char boolean char
Not Null False False False False False True False False True True True
Unique False False False False False False False False False False False
Len 24 64 64 64 16 0 0 64 8 0 16
Prec 0 0 0 0 0 0 0 0 0 0 0
Scale 0 0 0 0 0 0 0 0 0 0 0
False
me_negativeexperie nce me_bankcode me_accountnumber me_specificsymbol me_birthdate
text
False
False
0
0
0
False False False False
False False False False
8 64 8 0
0 0 0 0
0 0 0 0
True False False False False
False False False False False
16 8 8 64 0
0 0 0 0 0
0 0 0 0 0
False
False
64
0
0
False False False False False False False False False False False False
False False False False False False False False False False False False
32 32 64 64 0 0 25 64 64 64 64 8
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
False False False False
False False False False False
False False False False False False False False False False False False False
char char char time with time zone me_birthnumber char co_id char me_nationality char me_occupation char me_passportexpiry time with time zone me_emergencyconta char ct me_emdayphone char me_emnightphone char me_speakwell char me_speaksome char me_specialneeds text me_pastexperience text tr_name char me_adress1_2 char me_adress2_2 char me_city_2 char me_zip_2 char co_id_2 char
Constraints Jméno Typ member_me_birthnumbe Public r_key member_pkey Public member_co_id
Public
Sloupce me_birthnumber me_id co_id
member_me_birthnumbe Public r_key member_co_id2_fkey Public
co_id_2
member_co_id_fkey
co_id
Public
me_birthnumber
Init
Poznámky
false
false 'n/a'::c haracte r varyin g
Inicializační kód
Poznámky
Příloha C – Datový model
11
Jméno
Typ
Sloupce
member_tr_name_fkey
Public
tr_name
Relationships Sloupce (me_id = me_id) (co_id_2 = co_id) (co_id = co_id) (tr_name = tr_name) (me_id = me_id)
1.15 Databáze:
Asociace 0..* application.application_me_id_fkey 1 member.member_pkey 0..* member.member_co_id2_fkey 1 country.country_pkey 0..* member.member_co_id_fkey 1 country.country_pkey 0..* member.member_tr_name_fkey 1 training.training_pkey 0..* payment.payment_me_id_fkey 1 member.member_pkey
Poznámky
PostgreSQL, Stereotype: «table», Balíček: inex_db
Typ char
Constraints Jméno method_of_payment_pkey
Typ Public
Relationships Sloupce (mo_name = mo_name)
Databáze:
Poznámky
method_of_payment
Sloupce PK Jméno True mo_name
1.16
Inicializační kód
Not Null Unique Len True True 32
Sloupce mo_name
Prec Scale Init 0 0
Inicializační kód
Asociace 0..* payment.payment_mo_name_fkey 1 method_of_payment.method_of_payment_pkey
Poznámky
Poznámky
Poznámky
organization PostgreSQL, Stereotype: «table», Balíček: inex_db
Sloupce PK Jméno True or_id False co_id False or_name False or_email1 False or_incomingemail False or_outgoingemail False or_email2 False or_contactperson False or_phone False or_mobile False or_fax False or_address1 False or_address2 False or_postcode False or_zip False or_website False or_network
Typ char char char char char char char char char char char char char char char char char
Not Null True True True False False False False False False False False False False False False False True
Unique True False False False False False False False False False False False False False False False False
Len 48 8 128 64 50 50 64 64 24 24 24 64 64 16 32 128 50
Prec 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Scale Init 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Poznámky
12
Příloha C – Datový model
Constraints Jméno organization_pkey organization_co_id organization_co_id_fkey Relationships Sloupce (co_id = co_id) (or_id = or_id)
1.17
Typ Public Public Public
Sloupce or_id co_id co_id
Inicializační kód
Asociace 0..* organization.organization_co_id_fkey 1 country.country_pkey 0..* workcamp.workcamp_or_id_fkey 1 organization.organization_pkey
Poznámky
Poznámky
payment
Databáze:
PostgreSQL, Stereotype: «table», Balíček: inex_db
Sloupce PK Jméno True pa_id
False False False False False False
me_id mo_name rp_name ap_id ts_timescale pa_received
False False False False
pa_description pa_amount pa_returnedamount pa_returnreason
Constraints Jméno payment_pkey payment_ap_id payment_me_id payment_pa_id payment_me_id_fkey payment_mo_name_fkey payment_rp_name_fkey Relationships Sloupce (me_id = me_id) (mo_name = mo_name) (rp_name = rp_name)
1.18 Databáze:
Typ integer
Not Null Unique Len True True 0
integer char char char integer time with time zone char numeric numeric text
True True True False False True
False False False False False False
0 32 32 32 0 0
Prec Scale Init Poznámky 0 0 nextval(' payment _pa_id_s eq'::regcl ass) 0 0 0 0 0 0 0 0 0 0 0 0 0 now()
False True False False
False False False False
255 0 0 0
0 0 0 0
Typ Public Public Public Public Public Public Public
Sloupce pa_id ap_id me_id pa_id me_id mo_name rp_name
0 0 0 0
Inicializační kód
Asociace 0..* payment.payment_me_id_fkey 1 member.member_pkey 0..* payment.payment_mo_name_fkey 1 method_of_payment.method_of_payment_pkey 0..* payment.payment_rp_name_fkey 1 reason_of_payment.reason_of_payment_pkey
reason_of_payment PostgreSQL, Stereotype: «table», Balíček: inex_db
0
Poznámky
Poznámky
Příloha C – Datový model
13
Sloupce PK Jméno True rp_name
Typ char
Constraints Jméno reason_of_payment_pkey
Typ Public
Relationships Sloupce (rp_name = rp_name)
1.19
Inicializační kód
Asociace 0..* payment.payment_rp_name_fkey 1 reason_of_payment.reason_of_payment_pkey
Poznámky
Poznámky
Poznámky
PostgreSQL, Stereotype: «table», Balíček: inex_db
Sloupce PK Jméno True se_name False se_value Constraints Jméno settings_pkey
Typ char text
Typ Public
Not Null Unique Len True True 32 True False 0
Sloupce se_name
Prec Scale Init 0 0 0 0
Inicializační kód
Poznámky
Poznámky
training
Databáze:
PostgreSQL, Stereotype: «table», Balíček: inex_db
Sloupce PK Jméno True tr_name Constraints Jméno training_pkey Relationships Sloupce (tr_name = tr_name) (tr_name = tr_name)
1.21
Sloupce rp_name
Prec Scale Init 0 0
settings
Databáze:
1.20
Not Null Unique Len True True 32
Typ char
Typ Public
Not Null Unique Len True True 25
Sloupce tr_name
Prec Scale Init 0 0
Inicializační kód
Asociace 0..* country.country_tr_name_fkey 1 training.training_pkey 0..* member.member_tr_name_fkey 1 training.training_pkey
Poznámky
Poznámky
Poznámky
user_roles
Databáze: PostgreSQL, Stereotype: «table», Balíček: inex_db Poznámky: Provedené změny nová tabulka user_roles: evidence uživatelských rolí uživatelů systému Sloupce PK Jméno True ur_username True ur_rolename Constraints Jméno ur_pkey
Typ char char
Typ Public
Not Null Unique Len True True 16 True True 16
Sloupce ur_username ur_rolename
Prec Scale Init 0 0 0 0
Inicializační kód
Poznámky
Poznámky
14
1.22
Příloha C – Datový model
users
Databáze: PostgreSQL, Stereotype: «table», Balíček: inex_db Poznámky: Provedené změny: nová tabulka users – evidence uživatelů systému Sloupce PK Jméno True us_username False us_password False us_firstname False us_lastname False us_email Constraints Jméno users_pkey
1.23
Typ char char char char char
Typ Public
Not Null True True True True True
Unique True False False False False
Len 16 32 32 32 128
Sloupce us_username
Prec 0 0 0 0 0
Scale Init 0 0 0 0 0
Inicializační kód
Poznámky MD5 hash
Poznámky
workcamp
Databáze: PostgreSQL, Stereotype: «table», Balíček: inex_db Poznámky: Provedené změny: nové sloupce wc_senior a wc_family, indikující, zda je daný workcamp určen pro seniory a/nebo celé rodiny změna sloupce wc_language – max. délka zvětšena z 8 na 16 znaků, aby bylo možné uložit až čtyři kódy jazyků podle ISO 639-2 (-3) včetně oddělovačů (4 × 3 + 3) Sloupce PK Jméno True wc_id
False False False False False False False False False False False False False False False False False False False False False False False False False
wc_country wc_language wi_id wi_id2 or_id wc_name wc_endesc wc_czdesc wc_begin
Typ integer
char char char char char char text text time with time zone wc_end time with time zone wc_freeplaces integer wc_capacity integer wc_freemale integer wc_freefemale integer wc_minage integer wc_maxage integer wc_enreq text wc_czreq text wc_vegetarian boolean wc_fiyecode char wc_aproxdate char wc_area text wc_workdesc text wc_accomodation text wc_teenage boolean
Not Null Unique Len True True 0
True False False False True True False False False
False False False False False False False False False
8 16 16 16 48 182 0 0 0
Prec Scale Init Poznámky 0 0 nextval(' workcam p_wc_id _seq'::reg class) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
False
False
0
0
0
True True True True True True False False True False False False False False True
False False False False False False False False False False False False False False False
0 0 0 0 0 0 0 0 0 16 50 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
10 10 1 1 18 98
false
false
Příloha C – Datový model
PK False False False False False
Jméno wc_notes wc_booking wc_wanted wc_senior wc_family
15
Typ text text boolean boolean boolean
Constraints Jméno workcamp_pkey workcamp_or_id workcamp_wc_fiyecode workcamp_wi_id workcamp_or_id_fkey workcamp_wc_country_fkey workcamp_wi_id2_fkey workcamp_wi_id_fkey Relationships Sloupce (wc_id = wc_id) (or_id = or_id) (wc_country = co_id) (wi_id2 = wi_id) (wi_id = wi_id)
1.24
Typ Public Public Public Public Public Public Public Public
Len 0 0 0 0 0
Sloupce wc_id or_id wc_fiyecode wi_id or_id wc_country wi_id2 wi_id
Prec 0 0 0 0 0
Scale 0 0 0 0 0
Init
Poznámky
false false false
Inicializační kód
Asociace 0..* application.application_wc_id_fkey 1 workcamp.workcamp_pkey 0..* workcamp.workcamp_or_id_fkey 1 organization.organization_pkey 0..* workcamp.workcamp_wc_country_fkey 1 country.country_pkey 0..* workcamp.workcamp_wi_id2_fkey 1 workcamp_intention.workcamp_intention_pkey 0..* workcamp.workcamp_wi_id_fkey 1 workcamp_intention.workcamp_intention_pkey
Poznámky
Poznámky
PostgreSQL, Stereotype: «table», Balíček: inex_db
Sloupce PK Jméno True wi_id False wi_namecz False wi_nameen False wi_desccz False wi_descen
Typ char char char text text
Constraints Jméno workcamp_intention_pkey
Typ Public
Relationships Sloupce (wi_id2 = wi_id) (wi_id = wi_id)
Type: Balíček:
Unique False False False False False
workcamp_intention
Databáze:
2.
Not Null False False True True True
inexsda-cz Balíček Datový model
Not Null True True False False False
Unique True False False False False
Sloupce wi_id
Len 16 128 128 0 0
Prec 0 0 0 0 0
Scale Init 0 0 0 0 0
Inicializační kód
Asociace 0..* workcamp.workcamp_wi_id2_fkey 1 workcamp_intention.workcamp_intention_pkey 0..* workcamp.workcamp_wi_id_fkey 1 workcamp_intention.workcamp_intention_pkey
Poznámky
Poznámky
Poznámky
16
Příloha C – Datový model
class inexsda-cz
vef «column» *PK vef_id: SMALLINT * vef_datum: TIMESTAMP = ''CURRENT_TIMES... vef_surname: VARCHAR(40) vef_first: VARCHAR(40) vef_sex: ENUM = 'female' vef_address: TEXT vef_city: VARCHAR(50) vef_zip: VARCHAR(20) vef_email: VARCHAR(40) vef_mobil: VARCHAR(20) vef_tel: VARCHAR(20) vef_birthdate: DATE vef_birthplace: VARCHAR(40) vef_nationality: VARCHAR(15) vef_occupation: VARCHAR(20) vef_passport: VARCHAR(20) vef_expiry: DATE vef_emer_name: VARCHAR(40) vef_emer_day: VARCHAR(20) vef_emer_nig: VARCHAR(20) vef_lang_well: VARCHAR(40) vef_lang_some: VARCHAR(40) vef_health: VARCHAR(40) vef_past: TEXT vef_code1: VARCHAR(10) vef_name1: VARCHAR(20) vef_date1: VARCHAR(20) vef_code2: VARCHAR(10) vef_name2: VARCHAR(20) vef_date2: VARCHAR(20) vef_code3: VARCHAR(10) vef_name3: VARCHAR(20) vef_date3: VARCHAR(20) vef_code4: VARCHAR(10) vef_name4: VARCHAR(20) vef_date4: VARCHAR(20) vef_code5: VARCHAR(10) vef_name5: VARCHAR(20) vef_date5: VARCHAR(20) vef_code6: VARCHAR(10) vef_name6: VARCHAR(20) vef_date6: VARCHAR(20) vef_code7: VARCHAR(10) vef_name7: VARCHAR(20) vef_date7: VARCHAR(20) vef_code8: VARCHAR(10) vef_name8: VARCHAR(20) vef_date8: VARCHAR(20) vef_note: VARCHAR(60) vef_motivation: TEXT vef_remarks: VARCHAR(255) * vef_rc: VARCHAR(15) vef_potvrzeni: ENUM = 'email' vef_infosheet: ENUM = 'email' vef_ucet: VARCHAR(40) vef_souhlas: ENUM = 'n' vef_c_address: TEXT * vef_c_city: VARCHAR(50) * vef_c_zip: VARCHAR(20) * vef_know_web: TINYINT * vef_know_fri: TINYINT * vef_know_leaf: TINYINT * vef_know_med: TINYINT * vef_know_other: VARCHAR(100) «PK» + PK_vef(SMALLINT)
Obr. 3: inexsda-cz
Tabulka pro uložení podaných přihlášek (VEFek) na serveru.
Příloha C – Datový model
2.1
17
vef
Databáze: MySql, Stereotype: «table», Balíček: inexsda-cz Poznámky: Tabulka v databázi na serveru www.inexsda.cz, do které se ukládají nově podané přihlášky. Sloupce PK Jméno True vef_id False vef_datum
False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False
vef_surname vef_first vef_sex vef_address vef_city vef_zip vef_email vef_mobil vef_tel vef_birthdate vef_birthplace vef_nationality vef_occupation vef_passport vef_expiry vef_emer_name vef_emer_day vef_emer_nig vef_lang_well vef_lang_some vef_health vef_past vef_code1 vef_name1 vef_date1 vef_code2 vef_name2 vef_date2 vef_code3 vef_name3 vef_date3 vef_code4 vef_name4 vef_date4 vef_code5 vef_name5 vef_date5 vef_code6 vef_name6 vef_date6 vef_code7 vef_name7 vef_date7 vef_code8 vef_name8 vef_date8 vef_note vef_motivation
Typ Not Null Unique Len SMALLINT True False 0 TIMESTAM True False 0 P
VARCHAR VARCHAR ENUM TEXT VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR DATE VARCHAR VARCHAR VARCHAR VARCHAR DATE VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR TEXT VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR VARCHAR TEXT
False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False
False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False
40 40 0 0 50 20 40 20 20 0 40 15 20 20 0 40 20 20 40 40 40 0 10 20 20 10 20 20 10 20 20 10 20 20 10 20 20 10 20 20 10 20 20 10 20 20 60 0
Prec Scale Init Poznámky 0 0 0 0 ''CURRE NT_TIM ESTAM P'' 0 0 0 0 0 0 'female' 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18
PK False False False False False False False False False False False False False False
Příloha C – Datový model
Jméno vef_remarks vef_rc vef_potvrzeni vef_infosheet vef_ucet vef_souhlas vef_c_address vef_c_city vef_c_zip vef_know_web vef_know_fri vef_know_leaf vef_know_med vef_know_other
Constraints Jméno PK_vef Relationships Sloupce
Typ VARCHAR VARCHAR ENUM ENUM VARCHAR ENUM TEXT VARCHAR VARCHAR TINYINT TINYINT TINYINT TINYINT VARCHAR
Typ Public
Asociace vef.
Not Null False True False False False False False True True True True True True True
Unique False False False False False False False False False False False False False False
Sloupce vef_id
Len 255 15 0 0 40 0 0 50 20 0 0 0 0 100
Prec 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Scale 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Init
Poznámky
'email' 'email' 'n'
Inicializační kód
Poznámky
Poznámky
Příloha D – Model tříd
1
Model tříd Tento dokument dokumentuje model tříd aplikace "INEXwebApp" – webového informačního systému zadavatele – organizace INEX – SDA (http://www.inexsda.cz). Dokument je generovaný z modelu tříd vytvořeném CASE nástrojem Enterprise Architect (http://www.sparxsystems.com.au).
Obsah Model tříd........................................................................................................................................... 1 1 Slovníček pojmů ......................................................................................................................... 3 Třídy................................................................................................................................................... 4 2 Model tříd ................................................................................................................................... 4 2.1 Balíček JavaScript............................................................................................................. 5 2.1.1 jsFunctions.................................................................................................................... 5 2.2 Balíček database ............................................................................................................... 6 2.2.1 CheckDbConnection..................................................................................................... 6 2.2.2 DataProviderHelper...................................................................................................... 9 2.2.3 DataSourceHelper......................................................................................................... 9 2.2.4 DbManipulation.......................................................................................................... 10 2.2.5 Delete.......................................................................................................................... 10 2.2.6 Insert........................................................................................................................... 11 2.2.7 QueryUtils .................................................................................................................. 12 2.2.8 Search ......................................................................................................................... 14 2.2.9 Select .......................................................................................................................... 15 2.2.10 Update ........................................................................................................................ 16 2.2.11 VolunteerEditorDbSupport......................................................................................... 17 2.2.12 DeleteInterface ........................................................................................................... 17 2.2.13 InsertInterface............................................................................................................. 17 2.2.14 QueryUtilsInterface .................................................................................................... 18 2.2.15 SearchInterface ........................................................................................................... 20 2.2.16 SelectInterface ............................................................................................................ 21 2.2.17 UpdateInterface .......................................................................................................... 22 2.3 Balíček email .................................................................................................................. 22 2.3.1 Email .......................................................................................................................... 22 2.3.2 EmailWithAuthentication........................................................................................... 23 2.3.3 EmailInterface ............................................................................................................ 23 2.4 Balíček filter ................................................................................................................... 24 2.4.1 AuthFilter ................................................................................................................... 24 2.4.2 SessionTimeoutCheckFilter ....................................................................................... 25 2.5 Balíček helpers................................................................................................................ 25 2.5.1 BinaryIntHelper.......................................................................................................... 25 2.5.2 CalendarHelper........................................................................................................... 26
2
Příloha D – Model tříd
2.5.3 ContextHelper............................................................................................................. 27 2.5.4 JsfHelper..................................................................................................................... 27 2.5.5 RequestHelper ............................................................................................................ 28 2.5.6 ResponseHelper .......................................................................................................... 28 2.5.7 SessionHelper ............................................................................................................. 28 2.5.8 StringHelper ............................................................................................................... 29 2.6 Balíček inexwebapp ........................................................................................................ 30 2.6.1 ApplicationBean1 ....................................................................................................... 30 2.6.2 AuthError.................................................................................................................... 30 2.6.3 Constants .................................................................................................................... 30 2.6.4 DbError....................................................................................................................... 30 2.6.5 GeneralError ............................................................................................................... 30 2.6.6 Login........................................................................................................................... 30 2.6.7 LoginError .................................................................................................................. 31 2.6.8 RequestBean1 ............................................................................................................. 31 2.6.9 Routines...................................................................................................................... 31 2.6.10 SessionBean1.............................................................................................................. 31 2.6.11 SessionComponentVisibility ...................................................................................... 31 2.6.12 Balíček secured........................................................................................................... 31 2.6.12.1 Applications ....................................................................................................... 32 2.6.12.2 Footer ................................................................................................................. 32 2.6.12.3 Logout................................................................................................................ 32 2.6.12.4 Navigation.......................................................................................................... 32 2.6.12.5 Page_template_1 ................................................................................................ 32 2.6.12.6 Settings............................................................................................................... 32 2.6.12.7 SyncApplications ............................................................................................... 32 2.6.12.8 Synchronization ................................................................................................. 32 2.6.12.9 UserEditor.......................................................................................................... 32 2.6.12.10 UserManagement ............................................................................................... 32 2.6.12.11 VolunteerEditor ................................................................................................. 32 2.6.12.12 VolunteerEditorUpdate ...................................................................................... 32 2.6.12.13 Volunteers.......................................................................................................... 32 2.6.12.14 WorkcampEditor................................................................................................ 33 2.6.12.15 Workcamps ........................................................................................................ 33 2.7 Balíček login ................................................................................................................... 33 2.7.1 LoginRoutines ............................................................................................................ 33 2.7.2 MD5Passwd................................................................................................................ 33 2.8 Balíček pdf...................................................................................................................... 34 2.8.1 FormProcessing .......................................................................................................... 35 2.8.2 ITextPdfForms............................................................................................................ 35 2.8.3 FormProcessingInterface ............................................................................................ 36 2.9 Frameworky .................................................................................................................... 37 2.9.1 Visual JSF................................................................................................................... 37
Příloha D – Model tříd
1
3
Slovníček pojmů
Skupina Business Technical Technical Business
Business
Business
Business
Business
Business
Business Business
Business
Business Business
Termín Žádost
Definice Žádost o přijetí dobrovolníka adresovaná spolupracující organizaci.
4
Příloha D – Model tříd
Třídy Diagram modelu tříd aplikace INEXwebApp obsahuje několik balíčků. Model je detailně zaměřen na cílovou platformu Java EE, v některých specifikách i na použitý framework Visual Web JSF (projekt Woodstock [VisJSF]). Balíčky inexwebapp a secured (inexwebapp.secured, vnořený v inexwebapp) jsou jádrem business logiky aplikace. Vzhledem k použitému frameworku Woodstock a jeho komplexnosti vznikly tyto balíčky modelu reverzním inženýrstvím zdrojového kódu. Třídy ostatních balíčků poskytují podporu aplikaci a výsledný zdrojový kód vznikal souběžně s návrhem a prototypováním na základě modelu iterativním pracovním postupem.
2
Model tříd
class Model tříd
Model tříd znázorňující hierarchii tříd aplikace "INEXwebApp"
«framework» Frameworky + Visual JSF
«system» inexwebapp
JavaScript Použité frameworky
JavaScript podpora aplikace na straně klienta
+ jsFunctions
«system» secured
database + CheckDbConnection
+ ApplicationBean1
+ Applications
+ DataProviderHelper
+ AuthError
+ Footer
+ DataSourceHelper
+ Constants
+ Logout
+ DbManipulation
+ DbError
+ Navigation
+ Delete
+ GeneralError
+ Page_template_1
+ Insert
+ Login
+ Settings
+ QueryUtils
+ LoginError
+ SyncApplications
+ Search
+ RequestBean1
+ Synchronization
+ Routines
+ UserEditor
+ SessionBean1
+ UserManagement
+ SessionComponentVisibility
+ VolunteerEditor
+ secured
+ VolunteerEditorUpdate
+ Select Vnořený balíček balíčku inexwebapp
+ Update + VolunteerEditorDbSupport + DeleteInterface + InsertInterface
+ Volunteers
+ QueryUtilsInterface
+ WorkcampEditor
+ SearchInterface
+ Workcamps
+ SelectInterface + UpdateInterface
email + Email
login
helpers
+ EmailWithAuthentication
+ LoginRoutines
+ BinaryIntHelper
+ EmailInterface
+ MD5Passwd
+ CalendarHelper + ContextHelper + JsfHelper
pdf + FormProcessing
+ RequestHelper
filter
+ ResponseHelper
+ ITextPdfForms
+ AuthFilter
+ FormProcessingInterface
+ SessionTimeoutCheckFilter
Obr. 1: Model tříd
+ SessionHelper + StringHelper
Příloha D – Model tříd
2.1
5
Balíček JavaScript
Balíček obsahuje JavaScript funkce pro podporu aplikace INEXwebApp na straně klienta. class JavaScript
jsFunctions + + + + + + + + +
addOtherLanguage(String) : void askForDeleteConfirmation(String) : boolean copyTextField(String) : void copyTextField2(String, String) : void copyTextField2DropDown(String) : void setLanguages(String) : void setNationality() : void setSexRadioButton(String) : void transformBirthNumberToBirthDate() : void
Obr. 2: Balíček JavaScript
2.1.1 jsFunctions jsFunctions.js - JavaScript funkce pro podporu aplikace INEXwebApp na straně klienta. Pro adresování komponent stránky se využívají jejich identifikátory DOM (Document Object Model, http://www.w3.org/DOM/). Metody
Public void addOtherLanguage() Funkce nastaví textové vyjádření dalších voleb jazyků (do rozbalovacího seznamu již načteny z databáze) do textového pole "speak well" / "speak some" v závislosti na parametru "speak". Parametry
0: speak: String
Public boolean askForDeleteConfirmation() Funkce se dotáže uživatele, zda opravdu chce smazat to, co je předáno jako parametr "whatToDelete". Parametry
0: whatToDelete: String
Public void copyTextField() Funkce zkopíruje text ze zdrojového textoveho pole do cílového. Parametr "id" je 'část' DOM id komponenty. Cílové textové pole má id např. "jmeno", zdrojové musí mít id "jmeno_NEW", proto stačí jako parametr "jmeno". Parametry
0: id: String
Public void copyTextField2() Funkce zkopíruje text ze zdrojového ("id1") textového pole do cílového ("id2"). Parametr "id1"/"id2" je 'část' DOM id komponenty. Zdrojové textové pole musí mít id "id1"+"_NEW". Parametry
0: id1: String 1: id2: String
Public void copyTextField2DropDown() Funkce zkopíruje vybranou hodnotu ze zdrojového rozbalovacího seznamu do cílového textoveho pole. Parametr "id" je 'část' DOM id komponenty. Cílové textové pole má id např. "jmeno", zdrojové musí mít id "jmeno_NEW", proto stačí jako parametr "jmeno".
6
Příloha D – Model tříd
Parametry
0: id: String
Public void setLanguages() Funkce nastaví textové vyjádření základních voleb jazyků (ENG, GER, FRA) do textového pole "speak well" / "speak some" v závislosti na parametru "speak". Parametry
0: speak: String
Public void setNationality() Funkce nastaví textové vyjádření národnosti do příslušného textového pole. Jako zdroj informace je použit rozbalovací seznam s daty načtenými z databáze.
Public void setSexRadioButton() Funkce nastaví jako vybraný "radio button" odpovídající pohlaví předanému parametrem "sex". Parametr "sex" = "male" pro muže a "sex" = "female" pro ženu. Parametry
0: sex: String
Public void transformBirthNumberToBirthDate() Funkce převede rodné číslo (české = 10 cifer, celé číslo včetně části za lomítkem dělitelné 11) na datum narození a pohlaví. Je provedena kontrola slabé podmínky správnosti rodného čísla (r.č.) - dělitelnosti číslem 11 beze zbytku. Tato podmínka nemusí být nutně splněna a přesto může být r.č. správné. Nevyhovuje-li r.č., je uživatel pouze upozorněn, může pokračovat. Dekódované datum narození je nastaveno do textového pole určeného pro datum narození (id = dateOfBirthCalendar), rozpoznané pohlaví je nastaveno jako volba v "radio button" přepínači (id = birthNumberTextField).
2.2
Balíček database
Balíček obsahuje třídy pro práci s databází a jejich rozhraní. Rozhraní jsou navržena jen pro třídy, které jsou často využívány z různých lokací aplikace a jsou kandidáty na změny či optimalizaci. Vzhledem k plošné velikosti byl původní diagram tříd balíčku „database“ rozdělen na dvě části, obrázky Obr. 3-1 a Obr. 3-2.
2.2.1 CheckDbConnection Třída pro zjištění dostupnosti spojení/připojení k databázi Metody
Public CheckDbConnection() Parametry
0: driverClassName: String 'org.postgresql.Driver)
jméno driveru (JDBC) jako řetězec (např. pro PostgreSQL:
Private boolean isConnectionClosed() Zjistí, zda je spojení Connection zavřené VRÁTÍ: true, pokud je con zavrené Parametry
0: con: Connection
databázové spojení
Příloha D – Model tříd
7
class database
«interface» SelectInterface + + + + +
«interface» InsertInterface
executeSelect(Connection, String) : void getActualApplicationsForWorkcamp(Connection, String) : Object[] getResultSet() : ResultSet usernameAlreadyExists(Connection, String) : boolean workcampAlreadyExists(Connection, String, Object) : boolean
+ + + + +
getNextValueFromSequence(Connection, String) : String insertNewRowIntoTable(Connection, String) : boolean insertNewRowIntoTable_user_roles(Connection, HashMap) : boolean insertNewRowIntoTable_users(Connection, HashMap) : boolean insertNewRowIntoTable_workcamp(Connection, HashMap) : boolean
Select
Insert
-
resultSet: ResultSet
-
qu: QueryUtilsInterface
+ + + + + +
executeSelect(Connection, String) : void getActualApplicationsForWorkcamp(Connection, String) : Object[] getResultSet() : ResultSet Select(String) usernameAlreadyExists(Connection, String) : boolean workcampAlreadyExists(Connection, String, Object) : boolean
+ + + + + +
getNextValueFromSequence(Connection, String) : String Insert(String) insertNewRowIntoTable(Connection, String) : boolean insertNewRowIntoTable_user_roles(Connection, HashMap) : boolean insertNewRowIntoTable_users(Connection, HashMap) : boolean insertNewRowIntoTable_workcamp(Connection, HashMap) : boolean
DbManipulation
CheckDbConnection + CheckDbConnection(String) - isConnectionClosed(Connection) : boolean + isDbConnectionAvailable(String) : boolean
driverClassName: String
+ closeInexConnection(Connection) : void + DbManipulation(String) + getInexConnection(String, String, String) : Connection
Delete + Delete(String) + deleteRowFromTable(Connection, String, String, Object) : boolean
«interface» DeleteInterface
Update -
qu: QueryUtilsInterface
+ + + + +
Update(String) updateExistingRowInTable(Connection, String) : boolean updateExistingRowInTable_user_roles(Connection, HashMap) : boolean updateExistingRowInTable_users(Connection, HashMap) : boolean updateExistingRowInTable_workcamp(Connection, HashMap) : boolean
+ deleteRowFromTable(Connection, String, String, Object) : boolean
«interface» UpdateInterface
| x|
|
+ + + +
updateExistingRowInTable(Connection, String) : boolean updateExistingRowInTable_user_roles(Connection, HashMap) : boolean updateExistingRowInTable_users(Connection, HashMap) : boolean updateExistingRowInTable_workcamp(Connection, HashMap) : boolean
Obr. 3-1: Balíček database – část 1
8
Příloha D – Model tříd
QueryUtils + + + + + + + + + + + + +
«interface» SearchInterface
escapeSubquery(String) : String getInsertNewUser_rolesQuery(HashMap) : String getInsertNewUsersQuery(HashMap) : String getInsertNewWorkcampQuery(HashMap) : String getSearchTwoWordsSubquery(String, String, String, String) : String getUpdateExistingUser_roles(HashMap) : String getUpdateExistingUsersQuery(HashMap) : String getUpdateExistingWorkcampQuery(HashMap) : String getWi_id2_ins_param(boolean) : String getWi_id2_ins_val(boolean) : String getWi_id2_upd(boolean) : String setYearInQuery(String, Object) : String subClause_Arithmetic_and(String, String, String) : String subClause_Arithmetic_or(String, String, String) : String subClause_Like(String, String) : String subClause_Like_and(String, String) : String
«interface» QueryUtilsInterface
~qu + + + + + + + + + + ~qu + + +
~qu escapeSubquery(String) : String getInsertNewUser_rolesQuery(HashMap) : String getInsertNewUsersQuery(HashMap) : String getInsertNewWorkcampQuery(HashMap) : String getSearchTwoWordsSubquery(String, String, String, String) : String getUpdateExistingUser_roles(HashMap) : String getUpdateExistingUsersQuery(HashMap) : String getUpdateExistingWorkcampQuery(HashMap) : String setYearInQuery(String, Object) : String subClause_Arithmetic_and(String, String, String) : String subClause_Arithmetic_or(String, String, String) : String subClause_Like(String, String) : String subClause_Like_and(String, String) : String
DataSourceHelper + + + +
|
+ + + + + + +
getApplicationStatusSearchSubquery_APP(Object) : String getCriteriaSearchSubquery_VOL(Object) : String getFree_fullSearchSubquery_WC(Object) : String getHideGoneSearchSubquery_WC(boolean) : String getKeywordSearchSubquery_APP(Object) : String getKeywordSearchSubquery_VOL(Object) : String getKeywordSearchSubquery_WC(Object) : String
Search -
qu: QueryUtilsInterface
+ + + + + + + +
getApplicationStatusSearchSubquery_APP(Object) : String getCriteriaSearchSubquery_VOL(Object) : String getFree_fullSearchSubquery_WC(Object) : String getHideGoneSearchSubquery_WC(boolean) : String getKeywordSearchSubquery_APP(Object) : String getKeywordSearchSubquery_VOL(Object) : String getKeywordSearchSubquery_WC(Object) : String Search()
VolunteerEditorDbSupport + getNewVolunteerId() : int + getVolunteerId(CachedRowSetDataProvider, RowKey) : Object
DataProviderHelper
closeDataSourceConnection(Connection) : void getDatasourceByName(String) : DataSource getDataSourceConnection(String) : Connection getDataSourceURL(String) : String getDataSourceUsername(String) : String
+ refreshDataProvider(com.sun.data.provider.impl.CachedRowSetDataProvider) : boolean + setCommand_inRowSet(com.sun.sql.rowset.CachedRowSetXImpl, String) : void
| x|
Obr. 3-2: Balíček database – část 2
Příloha D – Model tříd
9
Public boolean isDbConnectionAvailable() Zjistí, zda je dostupné spojení s databází pomocí zdroje dat datasource s daným jménem VRÁTÍ: true, pokud je dostupné Parametry
0: dataSourceName: String
jméno zdroje dat ('jdbc/jméno_datového_zdroje')
2.2.2 DataProviderHelper Pomocná třída pro práci s DataProvidery. Metody implementačně závislé na použitém frameworku. Metody
Public boolean refreshDataProvider() Obnoví dataprovider (znovu načte data ze zdroje dat) VRÁTÍ: true, pokud byl dataprovider úspěšně obnoven Parametry
0: dataProvider: com.sun.data.provider.impl.CachedRowSetDataProvider "poskytovatel dat"
Public void setCommand_inRowSet() V daném RowSetu nastaví query Parametry
0: crs: com.sun.sql.rowset.CachedRowSetXImpl 1: query: String
RowSet SQL příkaz
2.2.3 DataSourceHelper Pomocná třída pro práci se zdroji dat (DataSources). Metody implementačně závislé na použitém frameworku. Metody
Public void closeDataSourceConnection() Prověří, že con != null a pak uzavře dané spojení con Parametry
0: con: Connection
databázové spojení
Private DataSource getDatasourceByName() Vyhledá DataSource podle jména VRÁTÍ: DataSource příslušný k danému jménu Parametry
0: dataSourceName: String
jméno zdroje dat
Public Connection getDataSourceConnection() Ze zdroje dat daného jména získá spojení Connection (z connection poolu) VRÁTÍ: databázové spojení Parametry
0: dataSourceName: String
Public String getDataSourceURL() Ze jména zdroje dat DataSource zjistí adresu (URL) pro přístup ke zdroji dat VRÁTÍ: URL k databázi příslušného DataSource Parametry
0: dataSourceName: String
jméno zdroje dat
10
Příloha D – Model tříd
Public String getDataSourceUsername() Ze jména zdroje dat DataSource zjistí uživatelské jméno pro přístup ke zdroji dat VRÁTÍ: uživatelské jméno k databázi příslušného DataSource Parametry
0: dataSourceName: String
jméno zdroje dat
2.2.4 DbManipulation Třída pro přístup k databázi, poskytuje svým potomkům potřebné základní operace. Atributy
Private String driverClassName jméno driveru (JDBC) jako řetězec (např. pro PostgreSQL: 'org.postgresql.Driver) Metody
Public void closeInexConnection() Uzavře dané spojení con Parametry
0: con: Connection
databázové spojení
Public DbManipulation() Konstruktor s parametrem = název třídy db driveru (PostgreSQL: 'org.postgresql.Driver' Parametry
0: driverClassName: String jméno driveru (JDBC) jako řetězec (např. pro PostgreSQL: 'org.postgresql.Driver)
Public Connection getInexConnection() Získá spojení connection z connection poolu podle URL, username a hesla VRÁTÍ: spojení s databází - objekt typu Connection) Parametry
0: dbUrl: String 1: dbUsername: String 2: dbPassword: String
2.2.5 Delete Třída pro smazání řádky z tabulky Metody
Public Delete() Konstruktor s parametrem = název třídy db driveru (PostgreSQL: 'org.postgresql.Driver' Parametry
0: driverClassName: String jméno driveru (JDBC) jako řetězec (např. pro PostgreSQL: 'org.postgresql.Driver)
Public boolean deleteRowFromTable() Z dané tabulky table smaže pomocí spojení con řádek, kde má sloupec columnId hodnotu value. Generuje se SQL příkaz "DELETE z table WHERE (columnId = value);" VRÁTÍ: true, pokud byl řádek tabulky úspěšně smazán Parametry
0: con: Connection 1: table: String 2: columnId: String 3: value: Object
databázové spojení jméno tabulky jméno (id) sloupce hodnota podmínky, kterou se má řádek hledat
Příloha D – Model tříd
11
2.2.6 Insert Třída s metodami pro vykonání SQL příkazů insert pro různé tabulky Atributy
Private QueryUtilsInterface qu objekt rozhraní QueryUtils - utility pro práci s queries s platností pro celou třídu Metody
Public String getNextValueFromSequence() Z dané sekvence získá následující hodnotu pomocí spojení con VRÁTÍ: řetězec obsahující následující hodnotu ze sekvence Parametry
0: con: Connection 1: seqName: String
databázové spojení jméno sekvence
Public Insert() Konstruktor s parametrem = nazev třídy db driveru (PostgreSQL: 'org.postgresql.Driver' Parametry
0: driverClassName: String jméno driveru (JDBC) jako řetězec (např. pro PostgreSQL: 'org.postgresql.Driver)
Public boolean insertNewRowIntoTable() Pomocí spojení con a příkazu query vloží do databáze nový řádek. Využívají ji ostatní metody třídy se suffixem "_jméno_tabulky". VRÁTÍ: true, pokud byl řádek úspěšně vložen, jinak false Parametry
0: con: Connection 1: query: String
databázové spojení SQL příkaz
Public boolean insertNewRowIntoTable_user_roles() Do tabulky 'user_roles' vloží nový řádek přes spojení con. Data pro vytvoření query získá z HashMapy. VRÁTÍ: true, pokud byl řádek úspěšně vložen, jinak false Parametry
0: con: Connection 1: map: HashMap
databázové spojení mapa typu HashMap s hodnotami (klíč, hodnota)
Public boolean insertNewRowIntoTable_users() Do tabulky 'users' vloží nový řádek přes spojení con. Data pro vytvoření query získá z HashMapy. VRÁTÍ: true, pokud byl řádek úspěšně vložen, jinak false Parametry
0: con: Connection 1: map: HashMap
databázové spojení mapa typu HashMap s hodnotami (klíč, hodnota)
Public boolean insertNewRowIntoTable_workcamp() Do tabulky 'workcamp' vloží nový řádek přes spojení con. Data pro vytvoření query získá z HashMapy. VRÁTÍ: true, pokud byl řádek úspěšně vložen, jinak false Parametry
0: con: Connection 1: map: HashMap
databázové spojení mapa typu HashMap s hodnotami (klíč, hodnota)
12
Příloha D – Model tříd
2.2.7 QueryUtils Rozhraní třídy pro práci s SQL příkazy - queries. Poskytuje podporu pro vytváření specifických SQL příkazů. Metody
Public String escapeSubquery() V dané subQuery nahradí znaky ' : ; \ escape sekvencemi \\' \\" \\; \\ VRÁTÍ: řetězec s nahrazenými znaky Parametry
0: subQuery: String
SQL příkaz
Public String getInsertNewUser_rolesQuery() Vytvoří query pro vložení nové uživatelské role daného uživatele do databáze (tabulka 'user_roles'). Vkládaná data získá z HashMapy. VRÁTÍ: příslušnou query Parametry
0: map: HashMap
mapa typu HashMap s hodnotami (klíč, hodnota)
Public String getInsertNewUsersQuery() Vytvoří query pro vložení nového uživatele do databáze (tabulka 'users'). Vkladaná data získá z HashMapy. VRÁTÍ: příslušnou query Parametry
0: map: HashMap
mapa typu HashMap s hodnotami (klíč, hodnota)
Public String getInsertNewWorkcampQuery() Vytvoří query pro vložení nového workcampu do databáze (tabulka 'workcamp'). Vkládaná data získá z HashMapy. VRÁTÍ: příslušnou query Parametry
0: map: HashMap
mapa typu HashMap s hodnotami (klíč, hodnota)
Public String getSearchTwoWordsSubquery() Vytvoří podmínkovou subquery (WHERE) s využitím operatoru LIKE primárně pro vyhledávání podle jména a příjmení. Předpokládá předzpracování hledaného řetězce - rozdělení na slova. Uvažujeme, že neznáme, jestli je první uvedeno jméno nebo příjmení, proto zkusíme obě varianty. Např.: ( (me_lastname = 'word1') and (me_firstname = 'word2') or (me_lastname = 'word2') and (me_firstname = 'word1') ) VRÁTÍ: příslušný subdotaz v závorkách '('...')' Parametry
0: column1: String 1: column2: String 2: word1: String 3: word2: String
jméno prvního sloupce tabulky jméno druhého sloupce tabulky první hledané slovo druhé hledané slovo
Public String getUpdateExistingUser_roles() Vytvoří query pro aktualizaci uživatelské role v databázi (tabulka 'user_roles'). Aktualizační data získá z HashMapy. VRÁTÍ: příslušnou query Parametry
0: map: HashMap
mapa typu HashMap s hodnotami (klíč, hodnota)
Public String getUpdateExistingUsersQuery() Vytvoří query pro aktualizaci uživatele systému v databázi (tabulka 'users'). Aktualizační data získá z HashMapy. VRÁTÍ: příslušnou query
Příloha D – Model tříd
13
Parametry
0: map: HashMap
mapa typu HashMap s hodnotami (klíč, hodnota)
Public String getUpdateExistingWorkcampQuery() Vytvoří query pro aktualizaci workcampu v databázi (tabulka 'workcamp'). Aktualizační data získá z HashMapy. VRÁTÍ: příslušnou query Parametry
0: map: HashMap
mapa typu HashMap s hodnotami (klíč, hodnota)
Private String getWi_id2_ins_param() Pomocná metoda pro getInsertNewWorkcampQuery(): - část query "INSERT INTO table (..., wi_id2, ...) ..." VRÁTÍ: část query s vložením 'wi_id2', pokud je vkládáno Parametry
0: insertWiId2: boolean
true, pokud je vkládáno druhé zaměření workcampu (wi_id2)
Private String getWi_id2_ins_val() Pomocná metoda pro getInsertNewWorkcampQuery(): - část query "INSERT INTO table (...) VALUES (..., wi_id2, ...)" VRÁTÍ: část query s vložením 'wi_id2', pokud je vkládáno Parametry
0: insertWiId2: boolean
true, pokud je vkládáno druhé zaměření workcampu (wi_id2)
Private String getWi_id2_upd() Pomocná metoda pro getUpdateExistingWorkcampQuery(): - část query: "UPDATE table SET (..., wi_id2 = '_zaměření_', ..." VRÁTÍ: část query pro aktualizaci 'wi_id2' podle toho, jestli se vkládá nebo ne (pokud ne, bude se 'wi_id2' aktualizovat hodnotou null, jinak příslušným id) Parametry
0: wi_id2_exists: boolean workcampu
true, pokud existuje druhe zaměření aktualizovaného
Public String setYearInQuery() Nastavení roku v dotazu. Předpokládá se např. "...year = '2008'..." VRÁTÍ: query se změneným rokem Parametry
0: query: String 1: year: Object
SQL příkaz rok, kterým se má nahradit stávající
Public String subClause_Arithmetic_and() Vytvoří podmínkovou (WHERE) subquery s porovnáním sloupce tabulky s hodnotou s použitím daného operátoru. VRÁTÍ: nový_řádek + and '(subquery)' Parametry
0: columnId: String 1: operator: String 2: value: String
jméno (id) sloupce operátor ("=" / "<" / ">" / ...) hodnota, se kterou porovnat
Public String subClause_Arithmetic_or() Vytvoří podmínkovou (WHERE) subquery s porovnáním sloupce tabulky s hodnotou s použitím daného operátoru. VRÁTÍ: nový_řádek + or '(subquery)'
14
Příloha D – Model tříd
Parametry
0: columnId: String 1: operator: String 2: value: String
jméno (id) sloupce operátor ("=" / "<" / ">" / ...) hodnota, se kterou porovnat
Public String subClause_Like() Vytvoří podmínkovou (WHERE) subquery s operátorem LIKE. Písmena v hledaném řetězci keyWord jsou převedena na malá. VRÁTÍ: (...LIKE...) Parametry
0: columnId: String 1: keyWord: String
jméno (id) sloupce hledaný řetězec
Public String subClause_Like_and() Vytvoří podmínkovou (Where) subquery s operátorem LIKE, přidá 'and ...'. Písmena v hledaném řetězci keyWord jsou převedena na malá. VRÁTÍ: nový_řádek + and (...LIKE...) Parametry
0: columnId: String 1: keyWord: String
jméno (id) sloupce hledaný řetězec
2.2.8 Search Třída pro práci s vyhledáváním (tvorba vyhledávacích dotazů) Atributy
Private QueryUtilsInterface qu objekt rozhraní QueryUtils - utility pro práci s queries s platností pro celou třídu Metody
Public String getApplicationStatusSearchSubquery_APP() Vytvoří subdotaz pro hledání v přihláškách podle údaje 'status' VRÁTÍ: příslušný subdotaz Parametry
0: status: Object
zvolený status přihlášky (ze seznamu) - "ACCEPTED" / "REJECTED" / …
Public String getCriteriaSearchSubquery_VOL() Vytvoří subdotaz pro hledání ve workcampech podle zvolené podmínky VRÁTÍ: příslušný subdotaz Parametry
0: choice: Object
volba - podmínka, omezení hledání
Public String getFree_fullSearchSubquery_WC() Vytvoří subdotaz pro hledání ve workcampech podle volby, jaké workcampy zahrnout do vysledku všechny, plné, volná kapacita pro určité pohlaví VRÁTÍ: příslušný subdotaz Parametry
0: choice: Object
volba - všechny, jen plné, jen volné, jen volné pro muže, jen volné pro ženy
Public String getHideGoneSearchSubquery_WC() Vytvoří subdotaz pro hledání ve workcampech podle podmínky, zda zahrnout do výsledku i workcampy, které už proběhly (začaly) nebo ne VRÁTÍ: příslušný subdotaz Parametry
0: checked: boolean
true, pokud je volba zatržena
Příloha D – Model tříd
15
Public String getKeywordSearchSubquery_APP() Vytvoří subdotaz pro hledání v přihláškách podle klíčového slova (řetězce). Podporované bude i hledání podle jména a příjmení zároveň nezávisle na pořadí. VRÁTÍ: příslušný subdotaz Parametry
0: keyWord: Object
hledaný řetězec
Public String getKeywordSearchSubquery_VOL() Vytvoří subdotaz pro hledání v dobrovolnících podle klíčového slova (řetězce). Podporované bude i hledání podle jména a příjmení zároveň nezavisle na pořadí. VRÁTÍ: příslušný subdotaz Parametry
0: keyWord: Object
hledaný řetězec
Public String getKeywordSearchSubquery_WC() Vytvoří subdotaz pro hledání ve workcampech podle klíčového slova (řetězce) VRÁTÍ: příslušný subdotaz Parametry
0: keyWord: Object
hledaný řetězec
Public Search() konstruktor...
2.2.9 Select Třída pro práci s SQL dotazy Atributy
Private ResultSet resultSet privátní ResultSet pro uložení výsledku dotazu Metody
Public void executeSelect() Vykoná SQL příkaz select s danou query přes dané spojení Connection Parametry
0: con: Connection 1: query: String
databázové spojení SQL query
Public Object getActualApplicationsForWorkcamp() Zjistí platné přihlášky (= nebyly zamítnuty) k danému workcampu VRÁTÍ: null, pokud nebyly nalezeny žádné přihlášky na daný workcamp; jinak pole id přihlášek Parametry
0: con: Connection 1: wc_id: String
databázové spojení id daného workcampu
Public ResultSet getResultSet() VRÁTÍ: ResultSet jako výsledek dotazu
Public Select() Konstruktor s parametrem = nazev tridy db driveru (PostgreSQL: 'org.postgresql.Driver' Parametry
0: driverClassName: String jméno driveru (JDBC) jako řetězec (např. pro PostgreSQL: 'org.postgresql.Driver)
Public boolean usernameAlreadyExists() Přes dané spojení Connection zjistí, jestli je už v databázi daný uživatel (už existuje dané username) VRÁTÍ: true, pokud už username existuje, jinak false
16
Příloha D – Model tříd
Parametry
0: con: Connection 1: username: String
databázové spojení uživatelské jméno
Public boolean workcampAlreadyExists() Zjistí přes dané spojení Connection, zda v daném roce již existuje workcamp s daným kodem (wc_fiyecode) VRÁTÍ: true, pokud v daném roce workcamp už existuje, jinak false Parametry
0: con: Connection 1: wc_fiy: String 2: year: Object
databázové spojení kód workcampu rok (aktuálně zvolený, nastavený v session)
2.2.10 Update Třída pro aktualizaci databáze Atributy
Private QueryUtilsInterface qu objekt rozhraní QueryUtils - utility pro práci s queries s platností pro celou třídu Metody
Public Update() Konstruktor s parametrem = nazev tridy db driveru (PostgreSQL: 'org.postgresql.Driver' Parametry
0: driverClassName: String jméno driveru (JDBC) jako řetězec (např. pro PostgreSQL: 'org.postgresql.Driver)
Public boolean updateExistingRowInTable() Pomocí spojení con a příkazu query aktualizuje řádek v tabulce. Využívají ji ostatní metody třídy se suffixem "_jméno_tabulky". VRÁTÍ: true, pokud probehla aktualizace v pořádku, jinak false Parametry
0: con: Connection 1: query: String
databázové spojení SQL příkaz
Public boolean updateExistingRowInTable_user_roles() Aktualizuje řádek tabulky 'user_roles' přes spojení con. Data pro vytvoření query získá z HashMapy. VRÁTÍ: true, pokud proběhla aktualizace v pořádku, jinak false Parametry
0: con: Connection 1: map: HashMap
databázové spojení mapa typu HashMap s hodnotami (klíč, hodnota)
Public boolean updateExistingRowInTable_users() Aktualizuje řádek tabulky 'users' přes spojení con. Data pro vytvoření query získá z HashMapy. VRÁTÍ: true, pokud proběhla aktualizace v pořádku, jinak false Parametry
0: con: Connection 1: map: HashMap
databázové spojení mapa typu HashMap s hodnotami (klíč, hodnota)
Public boolean updateExistingRowInTable_workcamp() Aktualizuje řádek tabulky 'workcamp' přes spojení con. Data pro vytvoření query získá z HashMapy. VRÁTÍ: true, pokud proběhla aktualizace v pořádku, jinak false
Příloha D – Model tříd
17
Parametry
0: con: Connection 1: map: HashMap
databázové spojení mapa typu HashMap s hodnotami (klíč, hodnota)
2.2.11 VolunteerEditorDbSupport Podpora tříd "VolunterEditor" a "VolunterEditorUpdate" z balíčku "inexwebapp.secured". Metody implementačně závislé na použitém frameworku. Metody
Public Static int getNewVolunteerId() Získá volné id do tabulky volunteers (ze sekvence) VRÁTÍ: volné id
Public Static Object getVolunteerId() Z dp a rk získá id dobrovolníka (me_id). VRÁTÍ: me_id dobrovolníka nebo null v případě neúspěchu Parametry
0: dp: CachedRowSetDataProvider 1: rk: RowKey
2.2.12 DeleteInterface Rozhraní třídy pro smazání řádky z tabulky Metody
Public boolean deleteRowFromTable() Z dané tabulky table smaže pomocí spojení con řádek, kde má sloupec columnId hodnotu value. Generuje se SQL příkaz "DELETE z table WHERE (columnId = value);" VRÁTÍ: true, pokud byl řádek tabulky úspěšně smazán Parametry
0: con: Connection 1: table: String 2: columnId: String 3: value: Object
databázové spojení jméno tabulky jméno (id) sloupce hodnota podmínky, kterou se má řádek hledat
2.2.13 InsertInterface Rozhraní třídy s metodami pro vykonání SQL příkazů insert pro různé tabulky Metody
Public String getNextValueFromSequence() Z dané sekvence získá následující hodnotu pomocí spojení con VRÁTÍ: řetězec obsahující následující hodnotu ze sekvence Parametry
0: con: Connection 1: seqName: String
databázové spojení jméno sekvence
Public boolean insertNewRowIntoTable() Pomocí spojení con a příkazu query vloží do databáze nový řádek. Obecná metoda nezávislá na tabulce. Využívají ji ostatní metody třídy se suffixem "_jméno_tabulky". VRÁTÍ: true, pokud byl řádek úspěšně vložen, jinak false Parametry
0: con: Connection 1: query: String
databázové spojení SQL příkaz
18
Příloha D – Model tříd
Public boolean insertNewRowIntoTable_user_roles() Do tabulky 'user_roles' vloží nový řádek přes spojení con. Data pro vytvoření query získá z HashMapy. VRÁTÍ: true, pokud byl řádek úspěšně vložen, jinak false Parametry
0: con: Connection 1: map: HashMap
databázové spojení mapa typu HashMap s hodnotami (klíč, hodnota)
Public boolean insertNewRowIntoTable_users() Do tabulky 'users' vloží nový řádek přes spojení con. Data pro vytvoření query získá z HashMapy. VRÁTÍ: true, pokud byl řádek úspěšně vložen, jinak false Parametry
0: con: Connection 1: map: HashMap
databázové spojení mapa typu HashMap s hodnotami (klíč, hodnota)
Public boolean insertNewRowIntoTable_workcamp() Do tabulky 'workcamp' vloží nový řádek přes spojení con. Data pro vytvoření query získá z HashMapy. VRÁTÍ: true, pokud byl řádek úspěšně vložen, jinak false Parametry
0: con: Connection 1: map: HashMap
databázové spojení mapa typu HashMap s hodnotami (klíč, hodnota)
2.2.14 QueryUtilsInterface Třída pro práci s SQL příkazy - queries. Poskytuje podporu pro vytváření specifických SQL příkazů. Metody
Public String escapeSubquery() V dané subQuery nahradí znaky ' : ; escape sekvencemi \\' \\" \\; VRÁTÍ: řetězec s nahrazenými znaky Parametry
0: subQuery: String
SQL příkaz
Public String getInsertNewUser_rolesQuery() Vytvoří query pro vložení nové uživatelské role daného uživatele do databáze (tabulka 'user_roles'). Vkládaná data získá z HashMapy. VRÁTÍ: příslušnou query Parametry
0: map: HashMap
mapa typu HashMap s hodnotami (klíč, hodnota)
Public String getInsertNewUsersQuery() Vytvoří query pro vložení nového uživatele do databáze (tabulka 'users'). Vkladaná data získá z HashMapy. VRÁTÍ: příslušnou query Parametry
0: map: HashMap
mapa typu HashMap s hodnotami (klíč, hodnota)
Public String getInsertNewWorkcampQuery() Vytvoří query pro vložení nového workcampu do databáze (tabulka 'workcamp'). Vkládaná data získá z HashMapy. VRÁTÍ: příslušnou query Parametry
0: map: HashMap
mapa typu HashMap s hodnotami (klíč, hodnota)
Příloha D – Model tříd
19
Public String getSearchTwoWordsSubquery() Vytvoří podmínkovou subquery (WHERE) s využitím operatoru LIKE primárně pro vyhledávání podle jména a příjmení. Předpokládá předzpracování hledaného řetězce - rozdělení na slova. Uvažujeme, že neznáme, jestli je první uvedeno jméno nebo příjmení, proto zkusíme obě varianty. Např.: ( (me_lastname = 'word1') and (me_firstname = 'word2') or (me_lastname = 'word2') and (me_firstname = 'word1') ) VRÁTÍ: příslušný subdotaz v závorkách '('...')' Parametry
0: column1: String 1: column2: String 2: word1: String 3: word2: String
jméno prvního sloupce tabulky jméno druhého sloupce tabulky první hledané slovo druhé hledané slovo
Public String getUpdateExistingUser_roles() Vytvoří query pro aktualizaci uživatelské role v databázi (tabulka 'user_roles'). Aktualizační data získá z HashMapy. VRÁTÍ: příslušnou query Parametry
0: map: HashMap
mapa typu HashMap s hodnotami (klíč, hodnota)
Public String getUpdateExistingUsersQuery() Vytvoří query pro aktualizaci uživatele systému v databázi (tabulka 'users'). Aktualizační data získá z HashMapy. VRÁTÍ: příslušnou query Parametry
0: map: HashMap
mapa typu HashMap s hodnotami (klíč, hodnota)
Public String getUpdateExistingWorkcampQuery() Vytvoří query pro aktualizaci workcampu v databázi (tabulka 'workcamp'). Aktualizační data získá z HashMapy. VRÁTÍ: příslušnou query Parametry
0: map: HashMap
mapa typu HashMap s hodnotami (klíč, hodnota)
Public String setYearInQuery() Nastavení roku v dotazu. Předpokládá se např. "...year = '2008'..." VRÁTÍ: query se změneným rokem Parametry
0: query: String 1: year: Object
SQL příkaz rok, kterým se má nahradit stávající
Public String subClause_Arithmetic_and() Vytvoří podmínkovou (WHERE) subquery s porovnáním sloupce tabulky s hodnotou s použitím daného operátoru. VRÁTÍ: nový_řádek + and '(subquery)' Parametry
0: columnId: String 1: operator: String 2: value: String
jméno (id) sloupce operátor ("=" / "<" / ">" / ...) hodnota, se kterou porovnat
Public String subClause_Arithmetic_or() Vytvoří podmínkovou (WHERE) subquery s porovnáním sloupce tabulky s hodnotou s použitím daného operátoru. VRÁTÍ: nový_řádek + or '(subquery)'
20
Příloha D – Model tříd
Parametry
0: columnId: String 1: operator: String 2: value: String
jméno (id) sloupce operátor ("=" / "<" / ">" / ...) hodnota, se kterou porovnat
Public String subClause_Like() Vytvoří podmínkovou (WHERE) subquery s operátorem LIKE. Písmena v hledaném řetězci keyWord jsou převedena na malá. VRÁTÍ: (...LIKE...) Parametry
0: columnId: String 1: keyWord: String
jméno (id) sloupce hledaný řetězec
Public String subClause_Like_and() Vytvoří podmínkovou (Where) subquery s operátorem LIKE, přidá 'and ...'. Písmena v hledaném řetězci keyWord jsou převedena na malá. VRÁTÍ: nový_řádek + and (...LIKE...) Parametry
0: columnId: String 1: keyWord: String
jméno (id) sloupce hledaný řetězec
2.2.15 SearchInterface Rozhraní třídy pro práci s vyhledáváním (tvorba vyhledávacích dotazů) Metody
Public String getApplicationStatusSearchSubquery_APP() Vytvoří subdotaz pro hledání v přihláškách podle údaje 'status' VRÁTÍ: příslušný subdotaz Parametry
0: status: Object
zvolený status přihlášky (ze seznamu) - "ACCEPTED" / "REJECTED" / ...
Public String getCriteriaSearchSubquery_VOL() Vytvoří subdotaz pro hledání ve workcampech podle zvolené podmínky VRÁTÍ: příslušný subdotaz Parametry
0: choice: Object
volba - podmínka, omezení hledání
Public String getFree_fullSearchSubquery_WC() Vytvori subdotaz pro hledani ve workcampech podle volby, jake workcampy zahrnout do vysledku vsechny, plne, volna kapacita pro urcite pohlavi VRÁTÍ: příslušný subdotaz Parametry
0: choice: Object
volba - všechny, jen plné, jen volné, jen volné pro muže, jen volné pro ženy
Public String getHideGoneSearchSubquery_WC() Vytvoří subdotaz pro hledání ve workcampech podle podmínky, zda zahrnout do výsledku i workcampy, které už proběhly (začaly) nebo ne VRÁTÍ: příslušný subdotaz Parametry
0: checked: boolean
true, pokud je volba zatržena
Public String getKeywordSearchSubquery_APP() Vytvoří subdotaz pro hledání v přihláškách podle klíčového slova (řetězce). Podporované bude i hledání podle jména a příjmení zároveň nezávisle na pořadí. VRÁTÍ: příslušný subdotaz
Příloha D – Model tříd
21
Parametry
0: keyWord: Object
hledaný řetězec
Public String getKeywordSearchSubquery_VOL() Vytvoří subdotaz pro hledání v dobrovolnících podle klíčového slova (řetězce). Podporované bude i hledání podle jména a příjmení zároveň nezavisle na pořadí. VRÁTÍ: příslušný subdotaz Parametry
0: keyWord: Object
hledaný řetězec
Public String getKeywordSearchSubquery_WC() Vytvoří subdotaz pro hledání ve workcampech podle klíčového slova (řetězce) VRÁTÍ: příslušný subdotaz Parametry
0: keyWord: Object
hledaný řetězec
2.2.16 SelectInterface Rozhraní třídy pro práci s SQL dotazy Metody
Public void executeSelect() Vykoná SQL příkaz select s danou query přes dané spojení Connection Parametry
0: con: Connection 1: query: String
databázové spojení SQL query
Public Object getActualApplicationsForWorkcamp() Zjistí platné přihlášky (= nebyly zamítnuty) k danému workcampu VRÁTÍ: null, pokud nebyly nalezeny žádné přihlášky na daný workcamp; jinak pole id přihlášek Parametry
0: con: Connection 1: wc_id: String
databázové spojení id daného workcampu
Public ResultSet getResultSet() VRÁTÍ: ResultSet jako výsledek dotazu
Public boolean usernameAlreadyExists() Přes dané spojení Connection zjistí, jestli je už v databázi daný uživatel (už existuje dané username) VRÁTÍ: true, pokud už username existuje, jinak false Parametry
0: con: Connection 1: username: String
databázové spojení uživatelské jméno
Public boolean workcampAlreadyExists() Zjistí přes dané spojení Connection, zda v daném roce již existuje workcamp s daným kodem (wc_fiyecode) VRÁTÍ: true, pokud v daném roce workcamp už existuje, jinak false Parametry
0: con: Connection 1: wc_fiy: String 2: year: Object
databázové spojení kód workcampu rok (aktuálně zvolený, nastavený v session)
22
Příloha D – Model tříd
2.2.17 UpdateInterface Rozhraní třídy pro aktualizaci databáze Metody
Public boolean updateExistingRowInTable() Pomocí spojení con a příkazu query aktualizuje řádek v tabulce. Využívají ji ostatní metody třídy se suffixem "_jméno_tabulky". VRÁTÍ: true, pokud probehla aktualizace v pořádku, jinak false Parametry
0: con: Connection 1: query: String
databázové spojení SQL příkaz
Public boolean updateExistingRowInTable_user_roles() Aktualizuje řádek tabulky 'user_roles' přes spojení con. Data pro vytvoření query získá z HashMapy. VRÁTÍ: true, pokud proběhla aktualizace v pořádku, jinak false Parametry
0: con: Connection 1: map: HashMap
databázové spojení mapa typu HashMap s hodnotami (klíč, hodnota)
Public boolean updateExistingRowInTable_users() Aktualizuje řádek tabulky 'users' přes spojení con. Data pro vytvoření query získá z HashMapy. VRÁTÍ: true, pokud proběhla aktualizace v pořádku, jinak false Parametry
0: con: Connection 1: map: HashMap
databázové spojení mapa typu HashMap s hodnotami (klíč, hodnota)
Public boolean updateExistingRowInTable_workcamp() Aktualizuje řádek tabulky 'workcamp' přes spojení con. Data pro vytvoření query získá z HashMapy. VRÁTÍ: true, pokud proběhla aktualizace v pořádku, jinak false Parametry
0: con: Connection 1: map: HashMap
2.3
databázové spojení mapa typu HashMap s hodnotami (klíč, hodnota)
Balíček email
Balíček obsahuje třídy pro odesílání elektronické pošty a jejich společné rozhraní. Podporován je "neomezený" počet příloh. Varianta pro nezabezpečený SMTP server a server vyžadující autentizaci; viz. Obr. 4.
2.3.1 Email Třída pro poslání emailu (s přílohami) přes SMTP server bez autentizace. Atributy
Private Static String SMTP_HOST_NAME jméno SMTP serveru získané z kontextového parametru (web.xml) Metody
Public void postMail() Odešle email Parametry
0: recipients: String[] příjemci (adresáti) 1: subject: String předmět emailu 2: message: String vlastní text emailu 3: from: String emailová adresa odesílatele 4: attachments: String[] přílohy - relativní cesty vzhledem k pracovnímu adresáři WORK_DIRECTORY (kontextový parametr, definice ve web.xml.
Příloha D – Model tříd
23
attachments = null: email bude odeslán bez příloh class email
«interface» EmailInterface + postMail(String[], String, String, String, String[]) : void
EmailWithAuthentication
Email -
SMTP_HOST_NAME: String = helpers.Context... {readOnly}
+
postMail(String[], String, String, String, String[]) : void
-
SMTP_AUTH_PWD: String = "*h*e*s*l*o*" {readOnly} SMTP_AUTH_USER: String = "email" {readOnly} SMTP_HOST_NAME: String = "smtp.server.cz" {readOnly}
+
postMail(String[], String, String, String, String[]) : void
javax.mail.Authenticator EmailWithAuthentication::SMTPAuthenticator +
getPasswordAuthentication() : PasswordAuthentication
Obr. 4: Balíček email
2.3.2 EmailWithAuthentication Třída pro poslání emailu (s přílohami) přes SMTP server s autentizaci. Atributy
Private Static String SMTP_AUTH_PWD Private Static String SMTP_AUTH_USER Private Static String SMTP_HOST_NAME Metody
Public void postMail() Odešle email Parametry
0: recipients: String[] prijemci (adresati) 1: subject: String predmet emailu 2: message: String vlastni text emailu 3: from: String emailova adresa odesilatele 4: attachments: String[] prilohy - relativni cesty vzhledem k pracovnimu adresari WORK_DIRECTORY (kontextovy parametr, definice ve web.xml) attachments = null: email bude odeslan bez priloh
2.3.3 EmailInterface Rozhraní pro poslání emailu (s přílohami) přes SMTP server. Metody
Public void postMail() Odešle email Parametry
0: recipients: String[] příjemci (adresáti) 1: subject: String předmět emailu 2: message: String vlastní text emailu 3: from: String emailová adresa odesílatele 4: attachments: String[] přílohy - relativní cesty vzhledem k pracovnímu adresáři WORK_DIRECTORY (kontextový parametr, definice ve web.xml.
24
Příloha D – Model tříd
attachments = null: email bude odeslán bez příloh
2.4
Balíček filter
Balíček obsahuje třídy filtrů, které jsou aplikovány na různé požadavky na server. Jde o funkce zajišťující zabezpečení aplikace proti neautorizovanému přístupu. class filter Filter
Filter
AuthFilter + + + + -
SessionTimeoutCheckFilter
canSeePage(String, Object) : boolean destroy() : void doFilter(ServletRequest, ServletResponse, FilterChain) : void init(FilterConfig) : void sessionAttribute_isNull(HttpSession, String) : boolean
-
firstRequest: boolean = true
+ + +
destroy() : void doFilter(ServletRequest, ServletResponse, FilterChain) : void init(FilterConfig) : void
Obr. 5: Balíček filter
2.4.1 AuthFilter Třída filtru chránícího zabezpečené sekce webu. Aplikace filtru na určité složky webu vzhledem ke kontextové cestě aplikace je nastavena v deployment deskriptoru (web.xml) . Pokud filtr vyhodnotí, že uživatel nemá oprávnění spatřit vyžádanou stránku, přesměruje ho na informativní stránku s nabídkou dalšího postupu. Metody
Public boolean canSeePage() Určí, zda uživatel dané uživatelské role má právo zobrazit stránku s danou "Page Beanou" VRÁTÍ: true, pokud uživatel může zobrazit stránku Parametry
0: pageBeanName: String 1: userRole: Object
jméno PageBean stránky, na kterou hodlá uživatel přistoupit uživatelská role
Public void destroy() Zrušení filtru, povinná metoda rozhraní Filter.
Public void doFilter() Vlastní "výkonná" metoda filtru Parametry
0: request: ServletRequest 1: response: ServletResponse 2: chain: FilterChain
Public void init() Inicializace filtru, povinná metoda rozhraní Filter. Parametry
0: filterConfig: FilterConfig
Private boolean sessionAttribute_isNull() Zjistí, zda je atribut session na serveru null. VRÁTÍ: true, pokud je atribut = null, jinak false Parametry
0: session: HttpSession 1: attribName: String
Příloha D – Model tříd
25
2.4.2 SessionTimeoutCheckFilter Třída filtru, který v případě vypršení platnosti HTTP session přesměruje uživatele při následujícím požadavku na informativní stránku. Atributy
Private Static boolean firstRequest flag určující, zda jde o první požadavek Metody
Public void destroy() Zrušení filtru, povinná metoda rozhraní Filter.
Public void doFilter() vlastní "výkonná" metoda filtru Parametry
0: request: ServletRequest 1: response: ServletResponse 2: chain: FilterChain
Public void init() Inicializace filtru, povinná metoda rozhraní Filter. Parametry
0: filterConfig: FilterConfig
2.5
Balíček helpers
Balíček obsahuje pomocné třídy (helpery) pro usnadnění a zpřehlednění práce s různými zdroji.
2.5.1 BinaryIntHelper Třída pro práci s tzv. binary integerem. Celé číslo nabývá jen hodnot 2^n, n=0,1,... a jsou v něm zakódovány binarní váhy. Metody
Public boolean isSetOnWeight() VRÁTÍ: true, pokud je nastavena váha weight Parametry
0: binInt: int 1: weight: int
číslo "binary integeru" váha, kterou testovat, zda je nastavena
Public int setBinaryWeight() Nastaví binární '1' na váze weight. Př.: máme váhy ... 16 8 4 2 1. Pokud chceme nastavit váhu "8", položíme weight=8. Pokud byla původní hodnota binInt=0, dostaneme binary integer = "01000". VRÁTÍ: binInt + weight (tzn. nastavenou váhu, pokud již nebyla nastavena - kontroluje se) Parametry
0: binInt: int 1: weight: int
číslo "binary integeru" váha, kterou nastavit
26
Příloha D – Model tříd
class helpers AbstractPageBean CalendarHelper
JsfHelper + + + + + + +
compareValuesHideOnIdentity(TextField, TextField) : void compareValuesHideOnIdentity(TextField, TextField, ImageHyperlink) : boolean setComponentRendered(UIComponent, boolean) : void setComponentVisible(UIComponent, boolean) : void setHeight_inStyle(String, int) : String setSelectedTabId(String) : void setYearInTableTitle(String, Object) : String
+ + + + +
getActualYear() : int getSqlDate(Date) : java.sql.Date getSqlTimestamp(Date) : java.sql.Timestamp getTimestamp(Calendar) : String getTimestampString(Date) : String
ContextHelper StringHelper + + + + + +
+ + + + +
eliminateNullString(String) : String extractAccountNumber(String) : String extractBankCode(String) : String removeCzechDiacritic(String) : String removeNonDigitChars(String) : String substituteKeyword(String, String, Object) : String
getApplicationContextPath() : String getApplicationContextRealPath() : String getApplicationExternalContext() : ExternalContext getContextParamValue(String) : String redirToUrl(String) : void
SessionHelper RequestHelper
+ getAttrib(HttpSession, String) : String + getSession() : HttpSession + setAttrib(HttpSession, String, String) : void
+ getRequest() : HttpServletRequest
BinaryIntHelper
ResponseHelper
+ isSetOnWeight(int, int) : boolean + setBinaryWeight(int, int) : int
+ getResponse() : HttpServletResponse
Obr. 6: Balíček helpers
2.5.2 CalendarHelper Třída pomocných utilit pro práci s datem a kalendářem a převody na SQL typy. Metody
Public int getActualYear() Zjistí aktuální rok nastavený v systému (na serveru) VRÁTÍ: číselné vyjádření roku
Public java.sql.Date getSqlDate() Dané datum převede na SQL date VRÁTÍ: SQL date Parametry
0: date: Date
datum (java.util.Date)
Public java.sql.Timestamp getSqlTimestamp() Dané datum date převede na SQL timestamp VRÁTÍ: SQL timestamp Parametry
0: date: Date
datum (java.util.Date)
Public String getTimestamp() Daný kalendář cal převede na SQL timestamp VRÁTÍ: SQL timestamp jako String Parametry
0: cal: Calendar
kalendář
Příloha D – Model tříd
27
Public String getTimestampString() Dané datum date převede na SQL timestamp VRÁTÍ: SQL timestamp jako String Parametry
0: date: Date
datum (java.util.Date)
2.5.3 ContextHelper Třída pomocných utilit pro práci s kontextem aplikace. Metody
Public Static String getApplicationContextPath() VRÁTÍ: kontextovou cestu aplikace (www url)
Public Static String getApplicationContextRealPath() VRÁTÍ: skutečnou kontextovou cestu aplikace na serveru (adresář)
Public Static ExternalContext getApplicationExternalContext() VRÁTÍ: "ExternalContext" aplikace
Public Static String getContextParamValue() Z kontextu aplikace získá požadovaný parametr VRÁTÍ: hodnotu parametru, pokud existuje, jinak null Parametry
0: paramName: String
Public Static void redirToUrl() Přesměruje uživatele na danou URL aplikace Parametry
0: toUrl: String
část url bez kontextové cesty aplikace
2.5.4 JsfHelper Třída podpůrných utilit pro JSF framework Metody
Public Static void compareValuesHideOnIdentity() Porovná textové hodnoty obou textových polí a nastaví příznak Visible na false, pokud jsou stejné. Parametry
0: tf_toHide: TextField 1: tf_toCompare: TextField
TextField, který při identitě skrýt TextField, s jehož textem se porovnává
Public Static boolean compareValuesHideOnIdentity() Porovná textové hodnoty obou textových polí a nastaví příznak Visible na false, pokud jsou stejné. VRÁTÍ: true, pokud byly komponenty nastaveny jako skryté (obsahy byly stejné) Parametry
0: tf_toHide: TextField 1: tf_toCompare: TextField 2: ih_toHide: ImageHyperlink
Public Static void setComponentRendered() Nastaví příznak renderování komponenty Parametry
0: component: UIComponent 1: rendered: boolean
28
Příloha D – Model tříd
Public Static void setComponentVisible() Nastaví příznak viditelnosti komponenty Parametry
0: component: UIComponent 1: visible: boolean
Public String setHeight_inStyle() V řetězci stylu style změní parametr height na danou hodnotu VRÁTÍ: upravený styl Parametry
0: style: String 1: heightInPX: int
Public void setSelectedTabId() Nastaví tab (záložku) daného id jako vybraný, aktivní Parametry
0: id: String
id
Public String setYearInTableTitle() V řetězci title nastaví hodnotu roku year Parametry
0: title: String 1: year: Object
2.5.5 RequestHelper Třída pro práci s HTTP servlet requestem Metody
Public HttpServletRequest getRequest() VRÁTÍ: HTTP request servletu (JSF)
2.5.6 ResponseHelper Třída pro práci s HTTP Servlet Response Metody
Public HttpServletResponse getResponse() VRÁTÍ: HTTP Servlet Response
2.5.7 SessionHelper Třída pro práci s HTTP session (na serveru) Metody
Public String getAttrib() Z dané session získá hodnotu atributu se jménem attribName Parametry
0: session: HttpSession 1: attribName: String
Public HttpSession getSession() VRÁTÍ: HTTP session
Příloha D – Model tříd
29
Public void setAttrib() V dané session nastaví atribut attribName na hodnotu value Parametry
0: session: HttpSession 1: attribName: String 2: value: String
2.5.8 StringHelper Třída pomocných utilit pro práci s řetězci (String) Metody
Public Static String eliminateNullString() Eliminuje null hodnotu. V případě, že text = null, vrátí prázdný řetězec, jinak parametr text. VRÁTÍ: prázdný řetězec "", pokud text == null, jinak text Parametry
0: text: String
Public Static String extractAccountNumber() Z daného řetězce accountNumber extrahuje číslo účtu VRÁTÍ: část řetězce před lomítkem '/' Parametry
0: accountNumber: String
číslo účtu - očekává se tvar 'číslo účtu'/'kód banky'
Public Static String extractBankCode() Z daného řetězce accountNumber extrahuje kód banky VRÁTÍ: část řetězce za lomítkem '/' Parametry
0: accountNumber: String
číslo účtu - očekává se tvar 'číslo účtu'/'kód banky'
Public Static String removeCzechDiacritic() Ze vstupního řetězce odstraní českou diakritiku (háčky a čárky nad písmeny) VRÁTÍ: "text" bez diakritiky Parametry
0: text: String
Public Static String removeNonDigitChars() Ze vstupního řetězce odstraní všechny znaky různé od číslic '0' - '9'. VRÁTÍ: řetězec s odstraněnými znaky různými od číslic '0' - '9' Parametry
0: text: String
Public Static String substituteKeyword() Náhrada klíčového slova v řetězci (např. "...{keyword}..." → "...value...") VRÁTÍ: řetězec s nahrazeným klíčovým slovem danou hodnotou Parametry
0: text: String původní text, ve kterém se má/mají nahrazovat klíčové(-á) slovo (-a); klíčové slovo se očekává ve složených závorkách ('{' 'keyword' '}') 1: keyword: String klíčové slovo - BEZ složených závorek '{' 'keyword' '}' 2: value: Object hodnota, kterou nahradit 'keyword'
30
2.6
Příloha D – Model tříd
Balíček inexwebapp
Balíček obsahuje základní třídy (beans) aplikace INEXwebApp. Konkrétně obsahuje všechny "backing page beans", což jsou třídy výkonného kódu, ke kterému jsou asociovány JSF komponenty stránky JSP. Dále balíček obsahuje speciální beany: Application Bean - instance existující po celou dobu běhu aplikace. Session Bean - instance existuje pro každého uživatele. Request Bean - instance existuje od vzniku požadavku např. na jinou stránku do její "render response" fáze. Slouží k předání dat. Page Bean - "backing page bean" - třídy asociované s pohledy (View z MVC) reprezentovanými JSF JSP stránkami. Vnořený balíček "secured" obsahuje "backing page beans" stránek vyžadujících přihlášení. [Reverse engineering zdrojového kódu] Třídy dědící "Abstract{Page|Fragment}Bean": Atributy jsou privátní a jde o komponenty JSF JSP stránky (TextField, Button, Table a další). K těmto atributům třída obsahuje gettery /get<jméno_komponenty>()/ a settery /set<jméno_komponenty>(
2.6.1 ApplicationBean1 Třída s platností po celou dobu běhu aplikace od prvního požadavku. Obsahuje atributy společné pro všechny uživatele systému. Anglický popis třídy generovaný IDE: Application scope data bean for your application. Create properties here to represent cached data that should be made available to all users and pages in the application. An instance of this class will be created for you automatically, the first time your application evaluates a value binding expression or method binding expression that references a managed bean using this class.
2.6.2 AuthError Page bean pro stranku informujici o problemu s autentizaci. Poskytuje zakladni informace, co je pricinou problemu a nabizi prechod na prihlasovaci obrazovku.
2.6.3 Constants Trida definujici staticke konstanty pouzivane v aplikaci.
2.6.4 DbError Page bean pro stranku informujici o problemu s databazi. Poskytuje zakladni informace, co je pricinou problemu a nabizi prechod na prihlasovaci obrazovku.
2.6.5 GeneralError Page bean pro stranku informujici o chybe aplikace (serveru).
2.6.6 Login Page bean pro prihlasovaci stranku.
Příloha D – Model tříd
31
2.6.7 LoginError Page bean pro stranku informujici o problemu s prihlasenim. Poskytuje zakladni informace, co je pricinou problemu a nabizi prechod na prihlasovaci obrazovku.
2.6.8 RequestBean1 Třída s platností po dobu zpracování HTTP požadavku na jinou stránku. Obsahuje atributy a operace sloužící k předání informace nově vyžádané stránce (resp. její "Page Bean". Anglický popis třídy generovaný IDE: Request scope data bean for your application. Create properties here to represent data that should be made available across different pages in the same HTTP request, so that the page bean classes do not have to be directly linked to each other. An instance of this class will be created for you automatically, the first time your application evaluates a value binding expression or method binding expression that references a managed bean using this class.
2.6.9 Routines Trida podpurnych rutin
2.6.10 SessionBean1 Třída s platností po dobu platnosti session uživatele od prvního požadavku. Obsahuje atributy, které mají být dostupné po celou dobu session bez ohledu na aktuální stránku. Anglický popis třídy generovaný IDE: Session scope data bean for your application. Create properties here to represent cached data that should be made available across multiple HTTP requests for an individual user. An instance of this class will be created for you automatically, the first time your application evaluates a value binding expression or method binding expression that references a managed bean using this class.
2.6.11 SessionComponentVisibility Trida definujici viditelnost sledovanych komponent stranek v zavislosti na roli prihlaseneho uzivatele v ramci session. Po uspesnem prihlaseni uzivatele jsou podle jeho role nastaveny priznaky viditelnosti techto komponent.
2.6.12 Balíček secured Balíček obsahuje "backing page beans" stránek vyžadující přihlášení. Vnořený balíček - "backing page beans" - stránek podléhající zabezpečení přístupu (nutnost přihlášení). [Reverse engineering zdrojového kódu] Atributy jsou privátní a jde o komponenty JSF JSP stránky (TextField, Button, Table a další). K těmto atributům třída obsahuje gettery /get<jméno_komponenty>()/ a settery /set<jméno_komponenty>(
32
2.6.12.1
Příloha D – Model tříd
Applications
Page bean pro stranku Applications - sprava prihlasek
2.6.12.2
Footer
Page fragment bean pro paticku stranky.
2.6.12.3
Logout
Page bean pro stranku Logout - odhlaseni uzivatele
2.6.12.4
Navigation
Fragment bean that corresponds to a similarly named JSP page fragment. This class contains component definitions (and initialization code) for all components that you have defined on this fragment, as well as lifecycle Metody and event handlers where you may add behavior to respond to incoming events. Page fragment bean pro navigation - hlavicka stranky s navigaci pomoci tabu (zalozek). Dale obsahuje informace o prihlasenem uzivateli.
2.6.12.5
Page_template_1
Page bean that corresponds to a similarly named JSP page. This class contains component definitions (and initialization code) for all components that you have defined on this page, as well as lifecycle methods and event handlers where you may add behavior to respond to incoming events. Page bean pro stranku Page_template_1 - sablona pro nove stranky
2.6.12.6
Settings
Page bean that corresponds to a similarly named JSP page. This class contains component definitions (and initialization code) for all components that you have defined on this page, as well as lifecycle Metody and event handlers where you may add behavior to respond ot incoming events. Page bean pro stranku Settings - nastaveni aplikace v ramci session
2.6.12.7
SyncApplications
Page bean pro stranku SyncApplications - "stahovani prihlasek z webu", aktualizace a pridani novych dobrovolniku, ...
2.6.12.8
Synchronization
Page bean pro stranku Synchronization - synchronizace databazi: "stazeni prihlasek", "upload workcampu na web"
2.6.12.9
UserEditor
Page bean pro stranku UserEditor - editace a pridani uzivatelu systemu
2.6.12.10
UserManagement
Page bean pro stranku UserManagement - sprava uzivatelu systemu
2.6.12.11
VolunteerEditor
Page bean pro stranku VolunteerEditor - editace a pridani novych dobrovolniku.
2.6.12.12
VolunteerEditorUpdate
Page bean pro stranku VolunteerEditor - editace existujiciho dobrovolnika v rezimu aktualizace. V levem sloupci jsou puvodni data z databaze, v pravem jsou nova z VEFky.
2.6.12.13
Volunteers
Page bean pro stranku Volunteers - sprava dobrovolniku.
Příloha D – Model tříd
2.6.12.14
33
WorkcampEditor
Page bean pro stranku WorkcampEditor - editace a zadani novych workcampu.
2.6.12.15
Workcamps
Page bean pro stranku Workcamps - sprava workcampu.
2.7
Balíček login
Balíček obsahuje třídy podporující operace během a ihned po přihlášení uživatele do systému. class login
LoginRoutines + + + +
MD5Passwd
getUserRole(String, String) : String LoginRoutines() setSessionBeanData(inexwebapp.SessionBean1, String, String) : void setSessionData(String, String) : void
+ +
getHexData(byte[]) : String getMD5Password(String) : String printHexData(byte[]) : void testPassword(String, String) : boolean
Obr. 7: Balíček login
2.7.1 LoginRoutines Třída pro vykonání rutin během a po přihlášení uživatele Metody
Public String getUserRole() K danému username a password zjistí z databáze uživatelskou roli VRÁTÍ: uživatelskou roli, pokud má uživatel platný účet, jinak null Parametry
0: username: String 1: password: String
Public LoginRoutines() Public void setSessionBeanData() V sessionBean nastaví atributy uživatelské jméno a roli v systému Parametry
0: sessionBean1: inexwebapp.SessionBean1 1: userName: String uživatelské jméno 2: roleName: String jméno uživatelské role
Public void setSessionData() V HTTP session na serveru nastaví atributy uživatelské jméno a roli v systému Parametry
0: userName: String 1: roleName: String
2.7.2 MD5Passwd Třída pro práci s heslem jako MD5 hash Metody
Private Static String getHexData() Převede pole byte[] na HEX String VRÁTÍ: HEXa řetězec z původního pole bytů
34
Příloha D – Model tříd
Parametry
0: data: byte[]
Public Static String getMD5Password() Převede čitelné nezakódované heslo clearTextPassword na MD5 hash VRÁTÍ: MD5 hash hesla Parametry
0: clearTextPassword: String
Private Static void printHexData() Na standardní výstup vypíše byte-pole data v HEX tvaru Parametry
0: data: byte[]
Public Static boolean testPassword() Porovná dané čitelné nezakódované heslo clearTextPassword s daným MD5 tvarem VRÁTÍ: true, pokud se MD5(clearTextPassword) = encodedPasswd, jinak false Parametry
0: clearTextPasswd: String 1: encodedPasswd: String
2.8
"čitelné heslo" zakódované heslo (MD5)
Balíček pdf
Balíček obsahuje třídy pro práci s PDF formuláři - podporu práce se samotnými formuláři a aplikační podporu vyplnění celého formuláře VEFky. class pdf
«interface» FormProcessingInterface + + + +
clearFormData() : boolean fillInForm(String, String) : boolean getDestFormURL() : String setDestFormFileName(String) : void
FormProcessing -
contextPath: String destFormFileName: String itpdff: ITextPdfForms pathToDestForm: String pathToSrcForm: String realPath: String
+ + + + +
clearFormData() : boolean fillInForm(String, String) : boolean FormProcessing() getDestFormURL() : String getVefWorkcaps(database.SelectInterface) : String setDestFormFileName(String) : void
ITextPdfForms -itpdff -
Obr. 8: pdf
+ + + + +
form: AcroFields reader: PdfReader stamp: PdfStamper bindPdfFile(String, String) : boolean close() : void ITextPdfForms() setFormField(String, String) : void setFormReadOnly(boolean) : void
Příloha D – Model tříd
35
2.8.1 FormProcessing Třída pro zpracování formuláře - vyplnění formulářových polí Atributy
Private String contextPath kontextová URL cesta aplikace
Private String destFormFileName jméno souboru cílového formuláře
Private ITextPdfForms itpdff ITextPdfForms - lokální instance třídy
Private String pathToDestForm skutečná cesta k cílovému souboru formuláře
Private String pathToSrcForm skutečná cesta ke zdrojovému souboru formuláře
Private String realPath skutečná path cesta aplikace na serveru Metody
Public boolean clearFormData() Vymaže formularová pole formuláře VRÁTÍ: true, pokud proběhlo mazání bez chyb
Public boolean fillInForm() Vyplní formulář VEFky, data získá z databáze pomocí poskytnutých id VRÁTÍ: true, pokud byl formulář úspěšně vyplněn, jinak false Parametry
0: ap_id: String 1: me_id: String
id přihlášky (tabulka application) id dobrovolníka (tabulka member)
Public FormProcessing() Konstruktor - nastaví cesty a vytvoří instanci ITextPdfForms
Public String getDestFormURL() Vrátí cestu k cílovému formuláři jako URL. Uvažuje kontextovou cestu aplikace. VRÁTÍ: URL cílového formuláře
Private String getVefWorkcaps() Vrátí řetězec s workcampy z přihlášky (kod WC, od-do), co řádek to workcamp VRÁTÍ: textový řetězec s workcampy na přihlášce Parametry
0: sel: database.SelectInterface
výsledek hledání workcampů na přihlášce
Public void setDestFormFileName() Nastaví jméno souboru cílového (vyplněného) formuláře. Zároveň nastaví skutečnou cestu. Parametry
0: destFormFileName: String
jméno souboru cílového souboru/formuláře
2.8.2 ITextPdfForms Třída pro práci s PDF formuláři s využitím knihovny iText 2.1.0. Vychází z návodů na http://itextdocs.lowagie.com/tutorial/. Atributy
Private AcroFields form Private PdfReader reader Private PdfStamper stamp
36
Příloha D – Model tříd
Metody
Public boolean bindPdfFile() Nastaví pracovní soubory formulářů, vytvoří cílový jako kopii zdrojového s daným jménem na dané cestě. VRÁTÍ: true, pokud proběhlo vše OK, false při chybě Parametry
0: pathToSrcForm: String 1: pathToDestForm: String
skutečná cesta ke zdrojovému formuláři skutečná cesta k cílovému formuláři
Public void close() Zavře cílový soubor formuláře.
Public ITextPdfForms() Public void setFormField() Nastaví (vyplní) formulářové pole s jménem fieldName na hodnotu value. Parametry
0: fieldName: String 1: value: String
jméno (id) formulářového pole hodnota, kterou vyplnit pole
Public void setFormReadOnly() Nastaví cílový formulář jen pro čtení podle flagu readOnly Parametry
0: readOnly: boolean
true = formulář bude jen ke čtení
2.8.3 FormProcessingInterface Rozhraní třídy pro zpracování/vyplnění PDF formuláře. Metody
Public boolean clearFormData() Vymaže formularová pole formuláře VRÁTÍ: true, pokud proběhlo mazání bez chyb
Public boolean fillInForm() Vyplní formulář VEFky, data získá z databaze pomocí poskytnutých id VRÁTÍ: true, pokud byl formulář úspěšně vyplněn, jinak false Parametry
0: ap_id: String 1: me_id: String
id přihlášky (tabulka application) id dobrovolníka (tabulka member)
Public String getDestFormURL() Vrátí cestu k cílovému formuláři jako URL. Uvažuje kontextovou cestu aplikace. VRÁTÍ: URL cílového formuláře
Public void setDestFormFileName() Nastaví jméno souboru cílového (vyplněného) formuláře. Zaroveň nastaví skutečnou cestu. Parametry
0: destFormFileName: String
jméno souboru cílového souboru/formuláře
Příloha D – Model tříd
2.9
37
Frameworky class Frameworky Visual JSF Použité frameworky
Obr. 9: Frameworky
2.9.1 Visual JSF JSF, Java Server Faces Visual Web JSF, projekt Woodstock (https://woodstock.dev.java.net). Plugin pro NetBeans IDE umožňuje vizuální návrh stránky JSP s komponentami JSF, usnadňuje propojení JSF komponent s výkonným kódem v "(managed) backing bean".
Příloha E – Model nasazení
1
Model nasazení Tento dokument obsahuje varianty nasazení "INEXwebApp" – webového informačního systému zadavatele – organizace INEX – SDA (http://www.inexsda.cz) do reálného prostředí v rámci možností zadavatele. Dokument je generovaný z modelu nasazení vytvořeném CASE nástrojem Enterprise Architect (http://www.sparxsystems.com.au).
Obsah Model nasazení................................................................................................................................... 1 Model nasazení................................................................................................................................... 3 1 Model nasazení ........................................................................................................................... 4 1.1 Uzly................................................................................................................................... 4 1.1.1 Klienti........................................................................................................................... 4 1.1.1.1 PCmimoINEX...................................................................................................... 5 1.1.1.2 PCvINEXu........................................................................................................... 5 1.1.2 Servery.......................................................................................................................... 5 1.1.2.1 DBserver .............................................................................................................. 5 1.1.2.2 SMTPserver ......................................................................................................... 5 1.1.2.3 server.................................................................................................................... 5 1.1.2.4 www.inexsda.cz................................................................................................... 5 1.1.3 Zařízení......................................................................................................................... 5 1.1.3.1 INEXinetGW ....................................................................................................... 5 1.2 Artefakty ........................................................................................................................... 6 1.2.1 Apache.......................................................................................................................... 6 1.2.2 Apache Tomcat 6.......................................................................................................... 6 1.2.3 Firefox, MS IE.............................................................................................................. 6 1.2.4 PostgreSQL .................................................................................................................. 6 1.2.5 SMTP server................................................................................................................. 6 1.2.6 DBschéma .................................................................................................................... 6 1.2.7 INEXwebApp ............................................................................................................... 6 1.3 V1: hosting, DB jen v INEXu a na inexsda.cz ................................................................. 7 1.3.1 DB-server-v-INEXu ..................................................................................................... 7 1.3.2 PC-mimo-INEX............................................................................................................ 7 1.3.3 PC-v-INEXu ................................................................................................................. 8 1.3.4 Server-v-INEXu ........................................................................................................... 8 1.3.5 Virt-server .................................................................................................................... 8 1.3.6 pipni.cz ......................................................................................................................... 8 1.3.7 iGW .............................................................................................................................. 8 1.4 V2: Samostatné PC pro Tomcat........................................................................................ 9 1.4.1 DB-server-v-INEXu ..................................................................................................... 9 1.4.2 PC-mimo-INEX............................................................................................................ 9
2
Příloha E – Model nasazení
1.4.3 PC-v-INEXu ................................................................................................................. 9 1.4.4 Server-v-INEXu............................................................................................................ 9 1.4.5 Tomcat-server-v-INEXu............................................................................................. 10 1.4.6 Virt-server................................................................................................................... 10 1.4.7 iGW ............................................................................................................................ 10 1.5 V3: Jeden vlastní server .................................................................................................. 10 1.5.1 PC-mimo-INEX.......................................................................................................... 11 1.5.2 PC-v-INEXu ............................................................................................................... 11 1.5.3 Server-v-INEXu.......................................................................................................... 11 1.5.4 Virt-server................................................................................................................... 11 1.5.5 iGW ............................................................................................................................ 11
Příloha E – Model nasazení
3
Model nasazení Model nasazení obsahuje tři samostatné varianty nasazení aplikace INEXwebApp do reálných podmínek provozu. Nasazení současného systému založeného na MS Access aplikaci: • Access aplikace slouží jako frontend k PostgreSQL databázi • PostgreSQL databáze je umístěna na jednom z počítačů v kanceláři INEX – SDA • Access klienti se k PostgreSQL připojují přes lokální síť • Access klienti komunikují prostřednictvím internetové brány se serverem www.inexsda.cz. Primárně budou pracovníci INEX – SDA nový systém používat z prostředí kanceláře. Před zahájením sezóny, v době zadávání workcampů do systému, je očekáván vzdálený přístup "z internetu". První varianta, V1, uvažuje zřízení Java webhostingu se servlet kontejnerem Tomcat 6. Na hostingu by nebyla databáze, využívala by se současná databáze. Tím odpadá problém synchronizace dat a/nebo vytvoření distribuovaného datového úložiště. Problém ale nastane při výpadku spojení hostingu a databázového stroje. Druhá varianta, V2, uvažuje samostatný počítač pro INEXwebApp a využití stávajícího databázového stroje v kanceláři INEX – SDA. Toto řešení přináší velmi významnou výhodu – server s INEXwebApp se nachází přímo na lokální síti a není přímo závislý na okamžité funkčnosti konektivity kanceláře do internetu. Komunikace se serverem www.inexsda.cz probíhá jen na vyžádání uživatele při procesu "stahování přihlášek". Tato varianta byla po konzultaci se zadavatelem a správcem sítě zhodnocena jako nejvýhodnější a zvolena k realizaci. Třetí varianta, V3, integruje server pro INEXwebApp a databázový stroj do jediného počítače umístěného na lokální síti.
4
1
Příloha E – Model nasazení
Model nasazení deployment Model nasazení Uzly
Klienti
Servery
Artefakty
+ Klienti
+ PCmimoINEX
+ DBserver
+ DBschéma
+ Servery
+ PCvINEXu
+ server
+ INEXwebApp
+ SMTPserver
+ Apache
+ www.inexsda.cz
+ Apache Tomcat 6
+ Zařízení
+ Firefox, MS IE Zařízení
+ PostgreSQL
+ INEXinetGW
V1: hosting, DB jen v INEXu a na inexsda.cz
+ SMTP server
V2: Samostatné PC pro Tomcat
V3: Jeden vlastní server
+ iGW
+ iGW
+ iGW
+ DB-server-v-INEXu
+ DB-server-v-INEXu
+ PC-mimo-INEX
+ PC-mimo-INEX
+ PC-mimo-INEX
+ PC-v-INEXu
+ PC-v-INEXu
+ PC-v-INEXu
+ Server-v-INEXu
+ pipni.cz
+ Server-v-INEXu
+ Virt-server
+ Server-v-INEXu
+ Tomcat-server-v-INEXu
+ Virt-server
+ Virt-server
"V1" a "V2" umožňují přechod na "V3": - instalace potřebného SW - přesun databáze z 'DB-server-v-INEXu' na 'Server-v-INEXu' - "V1" --> "V3": přesun 'INEXwebApp' z 'pipni.cz' na 'Server-v-INEXu' - "V2" --> "V3": přesun 'INEXwebApp' z 'Tomcat-server-v-INEXu' na 'Server-v-INEXu'
Zvolená varianta
Obr. 1: Model nasazení
1.1
Uzly deployment Uzly Klienti
Zařízení
Servery Uvnitř balíčků se zde nic nezobrazuje, ale diagramy nejsou prázdné.
Obr. 2: Uzly
1.1.1 Klienti deployment Klienti
PCvINEXu
PCmimoINEX
Obr. 3: Klienti
Příloha E – Model nasazení
5
1.1.1.1 PCmimoINEX Počítač umístěný mimo kancelář INEXu. Je připojený k internetu. Počet počítačů není omezen, cca 0-50.
1.1.1.2 PCvINEXu Počítač umístěný v kanceláři INEXu. Počítačů může být více, cca 0-6.
1.1.2 Servery deployment Servery
DBserver
server
SMTPserver
www.inexsda.cz
Obr. 4: Servery
1.1.2.1 DBserver Databázový server.
1.1.2.2 SMTPserver Vlastní server odchozí pošty INEXu.
1.1.2.3 server "server" je obecně server.
1.1.2.4 www.inexsda.cz Virtuální webový server INEX-SDA.
1.1.3 Zařízení deployment Zařízení
«device» INEXinetGW
Obr. 5: Zařízení
1.1.3.1 INEXinetGW Zjednodušeně brána, zprostředkující připojení do internetu v kanceláři INEXu.
6
1.2
Příloha E – Model nasazení
Artefakty deployment Artefakty
«browser» Firefox, MS IE
«webserver» Apache
«dbServer» PostgreSQL
Firefox, MS IE znamená libovolný jeden z nich.
«javaServletContainer» Apache Tomcat 6
«sql» DBschéma
«war» INEXwebApp
«smtpServer» SMTP server
Obr. 6: Artefakty
1.2.1 Apache Webový server Apache.
1.2.2 Apache Tomcat 6 Apache Tomcat 6 - servlet container pro server Apache.
1.2.3 Firefox, MS IE Vebové prohlížeče Mozilla Firefox, MS Internet Explorer (v6, v7).
1.2.4 PostgreSQL Databázový server PostgreSQL v8 a novější.
1.2.5 SMTP server Server odchozí pošty.
1.2.6 DBschéma SQL skript pro vytvoření a počáteční inicializaci databáze.
1.2.7 INEXwebApp Webová aplikace v distribučním balíku .WAR. Stereotyp <<war>> = Web ARchive, obdoba JAR = JavaARchive pro webové Java aplikace. Deployment probíhá přes webové administrační rozhraní Tomcatu (event. automaticky při startu serveru - .war umístěn v podadresáři "webapps".
Příloha E – Model nasazení
1.3
7
V1: hosting, DB jen v INEXu a na inexsda.cz
deployment V1: DB jen v INEXu a na inexsda.cz
Varianta 1: Databáze jen v INEXu a na inexsda.cz, ne na pipni.cz.
SMTP server povolen pro IP adresu pipni.cz (WWW{2|3} -> 193.86.238.{12|13}).
PC-v-INEXu :PCvINEXu
Server-v-INEXu :server
«browser» prohlížeč1 : Firefox, MS IE
«smtpServer» SMTP :SMTP server
Přístup k databázi povolen (i) pro IP adresu pipni.cz (WWW{2|3} -> 193.86.238.{12|13}).
DB-server-v-INEXu :DBserver
«dbServer» dbserver2 :PostgreSQL
«TCP/IP» «HTTPS»
«deploy»
«TCP/IP»
INEX LAN «sql» DBschéma
«device» iGW :INEXinetGW
Komunikují s 'pipni.cz' "internet"
«HTTPS»
«TCP/IP» «TCP/IP»
PC-mimo-INEX :PCmimoINEX
«browser» prohlížeč2 : Firefox, MS IE
pipni.cz :server
Virt-server :www.inexsda.cz
«webserver» webserver2 : Apache
«webserver» webserver1 : Apache
«use»
«war» INEXwebApp
Pro HTTPS lze použít SSL certifikát pro *.pipni.cz.
«deploy»
«javaServletContainer» servletcontainer :Apache Tomcat 6
«use»
«dbServer» dbserver1 : PostgreSQL
"Synchronizace" databází na 'dbserver1' a 'dbserver2' iniciovaná 'INEXwebApp': 1) 'dbserver1' <-- 'dbserver2'.workcampy 2) 'dbserver1'.přihlášky --> 'dbserver2'
Práva: - přístup k DB z 'pipni.cz'
Obr. 7: V1: DB jen v INEXu a na inexsda.cz
1.3.1 DB-server-v-INEXu Databázový "server" (PC) umístěný v INEXu. Aktuálně slouží jako DB stroj pro Accessovskou aplikaci.
1.3.2 PC-mimo-INEX Klientský počítač mimo kancelář INEXu. Může k serveru přistupovat jen přes HTTPS.
8
Příloha E – Model nasazení
1.3.3 PC-v-INEXu Klientský počítač v kanceláři INEXu. Může k serveru přistupovat přes HTTP i HTTPS.
1.3.4 Server-v-INEXu Jeden vlastní server v kanceláři INEXu.
1.3.5 Virt-server Virtuální webový server INEX-SDA. Obsahuje jen omezenou část databáze z 'dbserver2' - jen tabulky týkající se informací o workcampech a nových podaných přihlášek.
1.3.6 pipni.cz Webhosting na pipni.cz.
1.3.7 iGW Internetová brána
Příloha E – Model nasazení
1.4
9
V2: Samostatné PC pro Tomcat
deployment V2: Samostatné PC pro Tomcat
Varianta 2 (-volba-): Samostatné PC pro Tomcat. Použití stávající PostgreSQL databáze.
HW: CPU cca 1 GHz + (AMD Athlon 900) 512 MB ++ (768 MB)
SW: Linux (openSUSE 10.3) Apache Tomcat 6.0.14 SSL - vlastní certifikát pro HTTPS
Práva: - admin. rozhraní Tomcatu - přístup k shellu (ssh)
PC-v-INEXu :PCvINEXu Tomcat-server-v-INEXu :server «browser» prohlížeč1 : Firefox, MS IE
DB-server-v-INEXu :DBserver
«HTTP»
«TCP/IP»
«webserver» webserver2 : Apache
«dbServer» dbserver2 : PostgreSQL
«use» «deploy»
Server-v-INEXu :server
«TCP/IP» «smtpServer» inex-smtp :SMTP server
«javaServletContainer» servletcontainer :Apache Tomcat 6
«deploy»
«war» INEXwebApp
«sql» DBschéma
«TCP/IP»
Virt-server :www.inexsda.cz PC-mimo-INEX :PCmimoINEX «HTTPS» «browser» prohlížeč2 : Firefox, MS IE
Komunikuje s 'Tomcat-server-v-INEXu'
«device» iGW :INEXinetGW
«TCP/IP» «webserver» webserver1 : Apache
Práva: - přístup k DB z 'Tomcat-server' (veřejná IP adresa "INEXinetGW" povolena)
"Synchronizace" databází na 'dbserver1' a 'dbserver2' iniciovaná 'INEXwebApp': 1) 'dbserver1' <-- 'dbserver2'.workcampy 2) 'dbserver1'.přihlášky --> 'dbserver2'
«use»
«dbServer» dbserver1 : PostgreSQL
Obr. 8: V2: Samostatné PC pro Tomcat
1.4.1 DB-server-v-INEXu Databázový "server" (PC) umístěný v INEXu. Aktuálně slouží jako DB stroj pro Accessovskou aplikaci.
1.4.2 PC-mimo-INEX Klientský počítač mimo kancelář INEXu. Může k serveru přistupovat jen přes HTTPS.
1.4.3 PC-v-INEXu Klientský počítač v kanceláři INEXu. Může k serveru přistupovat přes HTTP i HTTPS.
1.4.4 Server-v-INEXu Vlastní server v kanceláři INEXu.
10
Příloha E – Model nasazení
1.4.5 Tomcat-server-v-INEXu Nový server/PC pro Tomcat 6, na kterém poběží 'INEXwebApp'.
1.4.6 Virt-server Virtuální webový server INEX-SDA. Obsahuje jen omezenou část databáze z 'dbserver2' - jen tabulky týkající se informací o workcampech a nových podaných přihlášek.
1.4.7 iGW Internetová brána
1.5
V3: Jeden vlastní server
deployment V3: Jeden vlastní server
Varianta 3: Jeden server, na kterém běží vše. HW: Intel Celeron 500MHz ++ 256 MB RAM -> 512 MB ++
Server-v-INEXu :server PC-v-INEXu :PCvINEXu
«browser» prohlížeč1 : Firefox, MS IE
«war» INEXwebApp
SW: PostgreSQL 8.2.x/8.3.x Apache Tomcat 6.0 SMTP server OpenSSL (?) + vlastní certifikát pro HTTPS
«webserver» webserver2 : Apache
«HTTP»
«use»
«javaServletContainer» servletcontainer :Apache Tomcat 6
«deploy»
«use»
Práva: - vzdálený přístup k DB (?) - admin. rozhraní Tomcatu - přístup ke skriptu pro restart Tomcatu (ssh?)
«use»
«smtpServer» inex-smtp :SMTP server
«dbServer» dbserver2 : PostgreSQL
«deploy»
«sql» DBschéma
Komunikuje s 'Server-v-INEXu' «TCP/IP» Virt-server :www.inexsda.cz
PC-mimo-INEX :PCmimoINEX
«HTTPS» «browser» prohlížeč2 : Firefox, MS IE
«device» iGW :INEXinetGW
«TCP/IP»
Práva: - přístup k DB z 'Server-v-INEXu'
"Synchronizace" databází na 'dbserver1' a 'dbserver2' iniciovaná 'INEXwebApp': 1) 'dbserver1' <-- 'dbserver2'.workcampy 2) 'dbserver1'.přihlášky --> 'dbserver2'
Obr. 9: V3: Jeden vlastní server
«webserver» webserver1 : Apache «use»
«dbServer» dbserver1 : PostgreSQL
Příloha E – Model nasazení
1.5.1 PC-mimo-INEX Klientský počítač mimo kancelář INEXu. Může k serveru přistupovat jen přes HTTPS.
1.5.2 PC-v-INEXu Klientský počítač v kanceláři INEXu. Může k serveru přistupovat přes HTTP i HTTPS.
1.5.3 Server-v-INEXu Jeden vlastní server v kanceláři INEXu.
1.5.4 Virt-server Virtuální webový server INEX-SDA. Obsahuje jen omezenou část databáze z 'dbserver2' - jen tabulky týkající se informací o workcampech a nových podaných přihlášek.
1.5.5 iGW Internetová brána
11
VOLUNTEER EXCHANGE FORM (VEF) Surname:
{me_lastname}
Nationality:
First name:
{me_firstname}
Sex:
Birth date:
{me_birthdate}
Workcamps:
Present address:
{me_address1} {me_address2}
City, ZIP:
{me_city}
Email:
{me_email}
Mobile phone:
{me_mobile}
Phone:
{me_phone}
Birth number:
{me_birthnumber}
Occupation:
{me_occupation}
Passport No.:
{me_passport}
Passport expiration:
{me_passportexpiry}
Emergency contact:
{me_emergencycontact}
Em. phone day, night:
{me_emdayphone}
Lang. speek well:
{me_speakwell}
Lang. speek some:
{me_speaksome}
General remarks:
{ap_generalremarks}
Remarks on health:
{me_comments}
Past volunteer experience / general skills:
{me_pastexperience}
Motivation:
{ap_motivation}
{me_nationality}
Male
Female
{aw_priority} {wc_fiyecode} {wc_begin}-{wc_end}
{me_zip}
{me_emnightphone}
INEX – Sdružení dobrovolných aktivit INEX – Association of Voluntary Activities Budečská 1 120 00 Praha 2 Czech Republic tel.: +420 222 362 713 mob.: +420 604 269 685 fax.: +420 222 362 719 email: [email protected]
Příloha G – Obsah CD
1
Obsah CD /bin INEXwebApp.war
distribuční balíček nového IS pro server Apache Tomcat 6.0
/doc /ea_projekt INEXwebApp.EAP /javadoc index.html /software /AdobeReader /ApacheTomcat /EnterpriseArchitect /Java /libraries /MySQL /NetBeans /PostgreSQL /VisualSVN
projekt z CASE nástroje Enterprise Architect index Javadoc dokumentace zdrojových kódů Adobe Acrobat Reader 8.0 server Apache Tomcat 6.0 Sparx Systems Enterprise Architect, 30 day trial JDK 6 (1.6.0) Update 4 knihovny, které používá nový IS MySQL server, JDBC, ODBC NetBeans IDE, verze 6.1 PostgreSQL server 8.2 + PgAdmin III Subversion, VisualSVN Server 1.1
/src /databaze /INEXwebApp_NB61 /SVN
skripty pro vytvoření a inicializaci databází projekt NetBeans IDE 6.1 repozitář Subversion (podrobnosti v souboru readme.txt) adresář s textem a přílohami diplomové práce
/text /prilohy /html HTML dokumentace EA projektu /A_Model-pozadavku /B_Model-pripadu-uziti /C_Datovy-model /D_Model-trid /E_Model-nasazeni /doc dokumenty příloh ve formátu Microsoft Word / OpenOffice.org /pdf přílohy ve formátu PDF Diplomka.doc Diplomka.pdf Prilohy.pdf Diplomka_vcetnePriloh.pdf