10.08.2015 Views

Gmail Assistant - Záverečná správa Katalóg požiadaviek

zaverecnaSprava Final.pdf - dai.fmph

zaverecnaSprava Final.pdf - dai.fmph

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Gmail</strong> <strong>Assistant</strong> - <strong>Záverečná</strong> <strong>správa</strong><strong>Gmail</strong> <strong>Assistant</strong> - <strong>Katalóg</strong> <strong>požiadaviek</strong>..................................................................................1Konceptuálna analýza.............................................................................................................7Analýza technológií, dekompozícia a dátový model..............................................................14Objektový návrh.....................................................................................................................16Podrobná špecifikácia komponentov......................................................................................24Záznam z testovania...............................................................................................................46Záznam z odovzdávania.........................................................................................................48Záverečné zhodnotenie...........................................................................................................49Úvod<strong>Katalóg</strong> <strong>požiadaviek</strong>Tento dokument popisuje interakciu užívateľa s aplikáciou <strong>Gmail</strong> <strong>Assistant</strong> a funkcie tejtoaplikácie. Aplikácia je určená používateľom služby <strong>Gmail</strong> a ponúka rozšírenú funkcionalitu, ktorú vsúčasnosti <strong>Gmail</strong> neposkytuje.Prihlásenie do systémuUžívateľovi sa po spustení aplikácie zjaví formulár, kde následne zadá svoje prihlasovacieúdaje do služby <strong>Gmail</strong>. Po úspešnom prihlásení sa mu objaví hlavné rozhranie aplikácie. V prípadeneúspešného prihlásenia aplikácia zobrazí chybovú správu a umožní opätovné prihlásenie. Systémnedovolí viac ako päť pokusov o prihlásenie za minútu.Hlavné rozhranieV hlavnom rozhraní sa nachádza zoznam všetkých e-mailov z užívateľovej schránky,zoznam priečinkov, ovládacie prvky a stavový riadok.Kontext systémuKontextový diagram:gmailKlient (nasa aplikacia)Server (nasa aplikacia)


Systémové rozhrania• Rozhranie klient – server – plánované odosielanie emailov, backup, logovanie aktivity• Rozhranie server – gmail – plánované odosielanie emailov• Rozhranie server – internet – sledovanie stránok• Rozhranie klient – gmail (týmto si nie som istý, podľa toho, či to chceme s gmailomkomunikovať napriamo z klienta alebo ak nie, tak všetko budeme riešiť cez server) –sťahovanie mailovPoužívateľské rozhrania• Rozhranie užívateľ – klient – stránkovanie, zoznam príhloh, skupinové maily, filtorvanie,atď• formou samostatnej desktopovej aplikácieSoftwareové rozhraniaAplikácia bude využívať technológiu Java EE. Keďže Java je multiplatformová, klientskáaplikácia bude môcť bežať na systéme Windows aj Linux. Serverová aplikácia bude bežať na OSLinux.Inicializačné požiadvky• Do systému musí užívateľ zadať svoje prihlasovacie údaje k službe <strong>Gmail</strong>.Triedy používateľov• Užívateľ – ľubovoľná osoba, ktorá využíva službu <strong>Gmail</strong>• Administrátor – stará sa o chod serveraFunkcie systému a špecifikácia <strong>požiadaviek</strong>Funkcie systému sú rozdelené do 3 skupín:1. Klientská aplikácia2. Serverová aplikácia3. Webový náhľadKlientská aplikáciaZobrazenie zoznamu správ podľa priečinkovAplikácia vie zobraziť správy tak, ako sú rozdelené do priečinkov v <strong>Gmail</strong> schránke, tedaprijatá pošta, odoslaná pošta, rozpísaná pošta a ostatné priečinky. Navyše je k dispozícii zvláštnypriečinok, v ktorom je uložená pošta, ktorá čaká na odoslanie.Stránkovanie zobrazených správSlužba <strong>Gmail</strong> ponúka stránkovanie zobrazených správ, avšak v prípade veľkého množstva


emailov je neúčinné. Aplikácia <strong>Gmail</strong><strong>Assistant</strong> umožňuje zobraziť zadaný rozsah zobrazenýchspráv, teda konkrétnu stránku, čo zrýchli prehliadanie pošty. Týmto spôsobom je možné prehliadaťľubovoľný priečinok. Užívateľ bude v grafickom rohraní zadávať žiadaný rozsah zobrazenia správbuď podľa dátumu (od – do) alebo podľa čísla stránky a aplikácia podľa zadaných parametrov popotvrdení tento rozsah zobrazí.Odosielanie naplánovaných emailov• Súčasťou aplikácie je možnosť napísať email a odoslať ho v ľubovoľný nastavený dátum ačas• fomulár pre odosielanie naplánovaných emailov bude obsahovať:◦ štandardné rozhranie pre odosielanie emailov (príjemca, kópia, skrytá kópia, predmetsprávy, telo správy, pridanie prílohy)◦ tlačidlo Uložiť pre uloženie správy do priečinka Koncepty, bez odoslania◦ pole pre výber dátumu a času odoslania správy◦ tlačidlo Odoslať• po kliknutí na Odoslať sa <strong>správa</strong> presunie do priečinka Čakajúce na odoslanie. V nastavenýdátum a čas sa <strong>správa</strong> odošle a presunie sa do priečinka OdoslanéZoznam všetkých príloh od konkrétneho užívateľa alebo pre konkrétneho užívateľa• užívateľ zadá emailovú adresu osoby, od ktorej chce zobraziť prílohy a všetky prílohy sazobrazia vo formulári.• Možnosť stiahnutia každej zo zobrazených prílohFiltrovanie a zoraďovanie správ a príloh podľa rôznych kritérií (chronologicky, názov,odosielateľ, typ súboru, atď)• zobrazenie len tých sprav, ktoré vyhovujú filtru. Filter umožňuje zobraziť správy aleboprílohy chronologicky, podľa názvu, mena odosielateľa, typu súboru a podobne. Môže safiltrovať podla viacerých kritérií zároveň.Posielanie hromadných emailov s oslovením zvlásť pre každého príjemcu• užívateľ štandardne napíše email, zadá emailové adresy požadovaným prijímateľom a kukaždej z týchto adries zadá patričné oslovenie, ktoré sa automaticky pripíše do užívateľomnapísaného emailu.Zobrazovanie výsledkov sledovania zmien na vybraných webových stránkach.• Každý užívateľ má možnosť zadefinovať si webové sránky, ktoré bude aplikácia pravidelnesledovať, zisťovať zmeny, ktoré nastali a informovať o tom užívateľa• program bude obsahovať formulár, ktorý umožňuje:◦ zadať zoznam sledovaných webových stránok◦ nastaviť počet posledných zmien, ktoré si má program pre každú stránku zapamätať◦ povoliť, resp. zakázať zobrazovanie zistených zmien v hlavnom okne aplikácie◦ nastaviť email notifikáciu na zadaný email alebo na užívateľove gmail konto• oznam o zistených zmenách bude možné zobraziť 2 spôsobmi:◦ v hlavnom okne programu (nastavieľná možnosť)◦ v samostatnom formulári, ktorý sa zobrazí v menu Sledovanie zmien stránok >>Zoznam zmien• pri každom zobrazenom zázname o zmene bude zároveň odkaz na stránku, kde zmenanastala


Možnosť nastavenia viacerých odosielacích adries pre jedno kontoUžívateľ si može v systéme zadefinovať viacero svojich existujúcich gmail adries.Pristupovať ku kontu <strong>Gmail</strong><strong>Assistant</strong> bude cez údaje, s ktorými sa prihlásil do systému ako prvými.Celé konto bude fungovať ako akési metakonto pre všetky gmail adresy, ktoré užívateľ v systémenastaví. Primárne konto sa bude môcť v systéme zmeniť na jednu zo zadaných adries. Po zmene sanebude užívateľ prihlasovať na pôvodné údaje, ale na tie ktoré nastavil ako primárne konto. Vhlavnom užívateľskom rozhraní bude možnosť rýchlo prepínať medzi všetkými gmail kontami.


Serverová aplikáciaOdosielanie naplánovaných emailovServer sa stará o odoslanie naplánovaných emailov, teda nie je potrebné, aby klientksáaplikácia bola zapnutá v čase odosielania.V daný dátum a čas odošle email presne tak, ako houžívateľ pripravil na odoslanie.Automatické sledovanie zmeny obsahu vybraných webových stránokUžívateľ bude mať možnosť si vybrať ľubovoľne veľa adries, ktoré bude aplikáciakontrolovať. Stránky sa budú pravidelne sťahovať a porovnávať s už uloženými stránkami. Prizmene sledovanej adresy sa zobrazí notifikácia priamo v aplikácii a zaradí sa do chronologickéhoporadia ešte neprečítaných zmien. Po kliknutí užívateľa na notifikáciu sa otvorí daná stránka anotifikácia zmizne zo zoznamu, užívateľ ich bude môcť mazať aj bez prezretia stránky.Logovanie aktivity servera• Server vedie denník, kde sa zapisuje aktivita užívateľa a aktivita serveru (odoslanienaplánovanej správy, automatický backup, zistila sa zmena sledovanej stránky, prihlásenie aodhlásenie užívateľa a podobne).Periodické zálohovanie databázy a logu• Každý (neskôr dohodnutý) časový interval sa bude obsah databázy ukladať v podobe .ziparchívu ukladať na server, prístup k zálohám je obmedzený len pre systémovéhoadministrátora• Uložené zálohy bude v prípade straty údajov z databázy možné vyvolať a vrátiť sa tak kbodu, kedy bola záloha vytvorená• Zálohy sa budu na serveri udržiavať mesiac, počas ktorého budú prístupné; neskôr budúvymazanéUkladanie osobných údajov užívateľaVšetky osobné údaje o užívateľovi (napr. prihlasovacie údaje), ktoré si server bude ukladať,budú uložené v kryptovanej podobe.Webový náhľadZobrazenie logu, monitorovanie stránky a funkčnosť servera• Na webovom rozhraní bude dostupné:◦ prehliadanie logu v štruktúrovanej podobe◦ monitorovanie zmien vybraných stránok (pri zmene ich obsahu a porovnaní s uloženouverziou bude užívateľ upozornený na zmeny)• Cez informácie v logu, príp. v inkonzistencie v logu, bude možné sledovať funkčnosťservera (hlásenie chýb pri vynechávaní periodických kontrol a pod.)Budúce verzieBudúca verzia systému bude umožňnovať komunikáciu klienta s webovým skriptom. Budevedieť príjimať príkazy na štandardnom vstupe a bude vedieť posielať príkazy na štandardnývýstup. Celé rozhranie klientskej aplikácie sa bude dať preniesť na web.


DokumentáciaK softwareu bude vypracovaná podrobná dokumentácia, na základe ktorej bude možnépokračovať vo vývoji aplikácie.


Požiadavky aplikácieZo strany servera• serverová aplikácia beži na OS Linux• potrebné technológie: JAVA, PHPKonceptuálna analýzaZo strany klienta• webový prehliadač – nie je nevyhnutný pre beh aplikácie, je to iba doplnená funkcionalita• JAVA• funkčné pripojenie na internet• účet na službe <strong>Gmail</strong> a v nastaveniach účtu musí byť povolený IMAP prístupSystémové rozhraniaKlient – server• klient posiela požiadavky na server vo forme XML súboru, ktorý bude mať vopredpredpísanú štruktúru• pre každý typ požiadavky je definovaná štruktúra posielaného XML dokumentu, tútoštruktúru musí poznať aj server, aj klient• pri odpovedi servera (reakcia na požiadavku) sa bude spätne klientovi posielať XMLdokument s odpoveďouServer – <strong>Gmail</strong>• komunikácia bude prebiehať prostredníctvom IMAP protokolu, posielanie mailov pomocouSMTPServer – internet• PHP skript, ktorý vygeneruje stránku na základe prístupu do databázy a súborov (logaktivity)• pri kontrole zmien webstránok – pošle sa http request na konkrétnu stránku, server si stránkustiahne a u seba porovná so staršou verziouTriedy používateľovUžívateľ• užívateľ je ľubovoľná osoba, ktorá vlastní jeden alebo viac <strong>Gmail</strong>ových účtov• program používa s cieľom zefektívnenia práce a využívania funkcionality, ktorú <strong>Gmail</strong>neposkytuje• funkcie, ku ktorým bude mať prístup, súvisia s:◦ prácou s emailami, ich efektívnym prezeraním, organizovaním◦ hromadným odosielaním, resp. naplánovaným odosielaním emailov


◦ možnosťou sledovať zmeny na webových stránkachAdministrátor• typ používateľa, ktorý na prístup ku aplikácii nepotrebuje mať vytvorený <strong>Gmail</strong>ový účet• prihlasovanie administrátora do systému bude prebiehať cez príkazový riadok• pri prvom prihlásení zadá administrátor preddefinované meno a heslo uložené v databáze apo prihlásení bude mať možnosť si tieto údaje zmeniť• užívateľské rozhranie administrátora bude príkazový riadok, cez ktorý bude mať prístup kuvšetkým potrebným funkciám• funkcie, ktoré má admin k dispozícii, sa týkajú údržby a chodu aplikácie na serveri:◦ spúšťanie a vypínanie aplikácie na serveri◦ odosielanie správ o stave systému, ktoré sa zobrazujú na webovom náhľade a v okneužívateľskej aplikácie◦ prezeranie a kontrola logu◦ možnosť vrátiť sa ku záložnému bodu a obnoviť systém◦ funkcia „report bug“ - v prípade, že objaví funkčnú chybu v aplikácii, môže o tomodoslať správu na webový náhľad◦ možnosť kedykoľvek urobiť zálohu programuFunkcie systémuFunkcie systému sú rozdelené do 3 skupín, každá má svoje moduly:1. Klientská aplikácia◦ GUI◦ komunikačný modul2. Serverová aplikácia◦ jadro◦ komunikácia s <strong>Gmail</strong>-om (IMAP)◦ komunikácia s klientom◦ komunikácia s databázou◦ modul na odosielanie naplánovaných emailov◦ sledovanie zmien stránok◦ administrátorský interface3. Webový náhľadKlientská aplikáciaGUI• úlohou GUI je zobrazovanie výstupov na základe vstupov z Emailového modulu a aktivityužívateľa, resp. zobrazovanie systémových správ


• obsahuje všetky ovládacie prvky a zobrazovaciu časť pre zoznamy priečinkov, emailov(výstup vyžiadaný užívateľom)• v hornej časti okna sa nachádza hlavné menu, ktoré umožňuje prístup ku všetkým funkciámaplikácie• v strednej časti sa nachádza časť, v ktorej sa zobrazuje zoznam emailov a priečinkov, sktorými sa dá interagovať (myš, klávesnica), vzhľadom pripomína <strong>Gmail</strong>ové rozhranie• v dolnej časti okna sa nachádza stavový riadok, ktorý zobrazuje aktuálny stav aplikácie(napr. v prípade chyby sa na ňom zobrazí chybový stav)Komunikačný modul• obojsmerná komunikácia medzi klientom a serverom• na základe vstupu užívateľa sformuluje požiadavku a odošle ju na server• odchytáva udalosti (odpovede servera), spracuje XML odpovede a postará sa o vykonaniepríslušnej reakcie v GUI


State chart diagram: používateľServerová aplikáciaIMAP• od jadra dostane na vstup query, ktore ma poslat na <strong>Gmail</strong>• prijima od <strong>Gmail</strong>u odpoveď a posiela ju do jadra na spracovanieKomunikácia s klientom• od klienta dostáva XML požiadavku, posiela ju do jadra na spracovanie• dostáva od jadra odpovede vo forme XMLKomunikácia s databázou• od jadra dostáva query, ktoré sa má v databáze vykonať• výsledok z vykonania posiela jadru na spracovanieModul na odosielanie naplánovaných emailov• modul sleduje aktuálny čas a pamätá si čas, v ktorom sa má odoslať najbližsí email• po odoslaní každého emailu ho zaradí do priečinka „Odoslané“ a vymaže záznam o maili zdatabázy


Sledovanie zmien stránok• každý daný časový interval, resp. na vyžiadanie sa zistí, či bola stránka zo zadanéhozoznamu stránok zmenená• zisťovanie zmien prebieha na základe porovnávania obsahu posledného uloženéhodokumentu stránky s aktuálnym dokumentom, ak sa nájde zmena, informácia o nej sa pošlejadru na ďalšie spracovanie• posledný uložený dokument sa nahradí aktuálnym pre všetky stránkyAdministrátorský interface• beží na serveri, prijíma príkazy od administrátora a vykonáva ichState chart diagram: administrátorJadro• zachytáva všetku aktivitu servera a zaznamenáva ju do logu• vytvára backup aplikácie• prechádzajú cez neco všetky posielané požiadavky a odpovede v komunikácii medziklientom, serverom, <strong>Gmail</strong>om, databázou• spracúva prijaté požiadavky a podľa typu požiadavky ju posiela ďalej v konkrétnem formátekonkrétnemu moduluWebový náhľad• Tvorí ho php skript, ktorý na základe informácii v databáze vygeneruje zobrazovanú stránku


Use-case diagram


Entitno-relačný diagram


TechnológieAnalýza technológií, dekompozícia a dátový model• Klient: Java• Server: Java, MySQL, IMAP, PHPMožné technológieZvažovali sme použitie webového rozhrania cez internetový prehliadač alebo použitiesamostatnej desktopovej aplikácie v jazyku Java. Rozhodli sme sa pre samostatnú aplikáciu, kvôlivhodnejšej tvorbe užívateľského rozhrania.Na komunikáciu serverovej aplikácie a serveru <strong>Gmail</strong> sme zvažovali protokoly POP3 aleboIMAP. Usúdili sme, že pre účely našej aplikácie je lepšie použiť protokol IMAP, pretože POP3neposkytuje požadovanú funkcionalitu. POP3 nezachováva štruktúru priečinkov, vymazávastiahnuté e-maily zo servera a IMAP nesťahuje celú správu, ale iba jej časť (súhrn správy). Celá<strong>správa</strong> je stiahnutá až vtedy, keď si to užívateľ vyžiada.Server bude mať nainštalovanú databázu MySQL, PHP a Apache.Návrh databázyPopis fungovania databázy• tabuľka Administrator si ukladá prihlasovacie údaje na administrátorský účet k aplikácii, nieje viazaná na žiadne iné tabuľky• tabuľka Uzivatelia uchováva mená užívateľov služby <strong>Gmail</strong>, ktorí sa už niekedy prihlásilido aplikácie. Pri prihlásení sa vytvára záznam v tejto tabuľke a zároveň v tabuľke Ucet.Každý záznam z Uzivatelia môže mať k sebe priradené neobmedzené množstvo účtov vtabulke Ucet. Prepojenie je zabezpecene cez atribut id_uzivatela.• tabuľka Planovane_emaily obsahuje zoznam emailov čakajúcich na odoslanie, sú viazané nakonkrétny účet v tabuľke Ucty. Tabuľky sú prepojené cez atribút id_uctu.• Každý užívateľ si vie zadefinovať neobmedzené množstvo sledovaných stránok, tie saukladajú do tabuľky Sledovane_stranky. Každá stránka z tejto tabuľky je cez atribútid_uzivatela viazaná na konkrétneho užívateľa aplikácie.


• Tabuľka Zmeny_stránok obsahuje zoznam zaregistrovaných zmien pre príslušnú stránku ztabuľky Sledovane_stranky. Prepojené sú atribútom id_stranky.Súborový systém• Na serveri existujú tri priečinky pre ukladanie súborov aplikácie:◦ logovanie_aktivity – logy sú rozdelené do samostatných súborov podla nejakej časovejjednotky (napr. mesiac)◦ zaloha – zip archivy so zálohami systému◦ posledne_stranky – adresár obsahuje podadresáre podla id užívateľov, tie obsahujúhtml dokumenty = všetky posledné stránky, ktoré aplikácie sleduje• u klienta sa ukladá konfiguračný súbor sa nastaveniami programuDeployment diagram


GUIObsahuje triedu:Objektový návrh• GUIclass – trieda sa stará o vykonávanie <strong>požiadaviek</strong> na základe užívateľského vstupuMetódy:◦ zobrazPrihlasenie()◦ skryPrihlasenie()◦ zobrazMaily() = metódu využíva komunikačný modul. Maily, ktoré GUI dostane,zobrazí v hlavnom okne vo forme Odosielateľ/príjemca – Predmet – Začiatok správy –Dátum, v prípade zobrazenia naplánovaných emailov dátum = plánovaný dátumodoslania◦ zobrazPrilohy()◦ posliHormadneMaily() = podľa počtu zadaných príjemcov pri odosielaní hromadnéhomailu vytvorí finálne podoby mailov a po jednom ich pošle. Ešte pred zavolaním tohtosa musia skontrolovať odosielatelia zadaní v zozname správ◦ povol/zakazZobrazovanieZmienVHlavnomOkne() = úprava súboru s nastaveniamiKomunikačný modul klient->server a server->klientMiesto, kde klient a server spolu komunikujú. Klient posiela požiadavky na server, ktorýpožiadavku spracuje pomocou svojich modulov a odpoveď pošle naspať klientovi. Modul vklientskej časti udržuje s modulom v serverovej časti otvorené TCP/IP spojenie.Požiadavka aj odpoveď majú podobu XML dokumentu, v ktorom je popísaný typpožiadavky, ďalšie upresňujúce parametre, prípadne telo odpovede ak ide o odpoveď na nejakúpožiadavku.Všetky požiadavky a odpovede majú vlastný formát. Typ požiadavky a odpovede sa rozlíšipodľa atribútu type. Každá požiadavka pri spracovávaní získa unikátny identifikátor, ktorý slúži naodsledovanie požiadavky v logu a či bola korektne spracovaná. Odpoveď má podobne unikátnyidentifikátor, ktorý sa určí podľa ID požiadavky, ku ktorej sa doplní prefix, ktorý určí, že ide oodpoveď.Typy komunikácie požiadavka-odpoveďTyp požiadavky Akcia servera Odpoveď servera Akcia klientaPrihlásenie do aplikácie Overí prihlasovacieúdaje z požiadavkyÚspešné prihlásenie –potvrdzujúca <strong>správa</strong>Neúspešné prihlásenie-chybová <strong>správa</strong> oneúspešnom prihláseníPri úspešnomprihlásení sa grafickérozhranie klienta zmenído stavu prihlásenéhoužívateľa, v opačnomprípade ostanenezmenené. V obochprípadoch klientzobrazí správu o staveprihlásenia


Odhlásenie z aplikácieZobrazenie zoznamuspráv (príloh) (podľafiltra, v poradí,rozsahu, atď)Zobrazenie mailuOdoslanie / Uloženie /Vymazanie /Presunutie mailu /Vytvorenie priečinku /zrušenie priečinkuNaplánovanie mailuZruší užívateľovsessionZo servera <strong>Gmail</strong> získa,zoznam hlavičiekpožadovaných mailov vpožadovanom poradí,rozsahu a podľazadaného filtraZo servera <strong>Gmail</strong> získatelo žiadaného mailu ajs odkazom na prílohuak existuje.Podľa typu požiadavkypošle na server <strong>Gmail</strong>požiadavku, abyvykonal akciu.Požiadavka obsahujetelo mailu, jehohlavičku, menopriečinku, mailovéadresy príjemcov –podľa typu požiadavky.Požiadavka obsahujeúdaje ako pri uloženíkonceptu na servergmail, avšak navyšeobsahuje aj časodoslania. Server uložíkoncept na serveri<strong>Gmail</strong> v priečinkuRozísaných správ auloží do databázyzáznam o plánovanomSpráva o úspešnomresp. neúspešnomodhláseníÚspešná akcia – teloodpovede obsahujehlavičky mailov naktoré už boliaplikované všetky filtrea sú zoradenéNeúspešná akcia –server <strong>Gmail</strong> v danomčasovom intervaleneodpovedal. Odpoveďje chybová <strong>správa</strong> ochybe spojenia soserverom <strong>Gmail</strong>Úspešná akcia – teloodpovede obsahuje telomailu a prípadný odkazna prílohyNeúspešná akcia –server <strong>Gmail</strong> v danomčasovom intervaleneodpovedal. Odpoveďje chybová <strong>správa</strong> ochybe spojenia soserverom <strong>Gmail</strong>Úspešná akcia –Podvrdzujúca <strong>správa</strong>Neúspešná akcia –server <strong>Gmail</strong> v danomčasovom intervaleneodpovedal. Odpoveďje chybová <strong>správa</strong> ochybe spojenia soserverom <strong>Gmail</strong>Úspešná akcia – teloodpovede obsahuje telomailu a prípadný odkazna prílohyNeúspešná akcia –server <strong>Gmail</strong> v danomčasovom intervaleneodpovedal. Odpoveďje chybová <strong>správa</strong> ochybe spojenia soKlient pri úspešnomodhlásení zatvoríaplikáciuZobrazí v grafickomrozhraní žiadanéhlavičky mailov. Vprípade chybovejsprávy zobrazí hlásenieo chybe spojenia soserverom <strong>Gmail</strong>Zobrazí v grafickomrozhraní žiadaný mail.V prípade chybovejsprávy zobrazí hlásenieo chybe spojenia soserverom <strong>Gmail</strong>Zobrazí hlásenie oúspešnej aleboneúspešnej akciiZobrazí hlásenie oúspešnej aleboneúspešnej akcii.


Zrušenie naplánovaniamailuVrátenie zoznamukontaktovPridanie (zmazanie)sledovanej stránkyNastavenie počtupamätaných zmienstránokodoslaníPožiadavka obsahujeID mailu. Ak sa mail stakýmto ID nachádza vdatabáze, môže serverzrušiť akciuPožiadavka obsahujeadresu stránky a účet,ku ktorému sa mápridať(odobrať)Požiadavka obsahujepočet a adresu účtuserverom <strong>Gmail</strong>alebo zadaný čas nie jeprístupný – užívateľzadal už uplynulýdátumSpráva o zrušenínaplánovaného mailuÚspešná akcia –Získaný zoznamkontaktovNeúspešná akcia –server <strong>Gmail</strong> v danomčasovom intervaleneodpovedal. Odpoveďje chybová <strong>správa</strong> ochybe spojenia soserverom <strong>Gmail</strong>Úspešná akcia –Správa o pridaníNeúspešná akcia –nepodarilo sa spojiť sdatabázouÚspešná akcia –Správa o úpravezáznamuZobrazí hlásenie oúspešnej aleboneúspešnej akciiZoznam kontaktov sazobrazí pri písaníemailu ako „hint“ privkladaní príjemcuZobrazí sa <strong>správa</strong> one/vykonaní operácieZobrazí sa <strong>správa</strong> one/vykonaní operácieNeúspešná akcia –nepodarilo sa spojiť sdatabázouVrátenie zoznamuzmien na stránkachPožiadavka obsahujeadresu účtuÚspešná akcia – Vrátilsa zoznam zmien(prázdy alebo nie)Zobrazí sa aktuálnyzoznam zmienZrušenie zobrazovaniazmenyPožiadavka obsahujeID zmeny a adresu účtuNeúspešná akcia –nepodarilo sa spojiť sdatabázouÚspešná akcia –Správa o úpravezáznamuAktualizuje sa zoznamzmien, bez vymazanejNeúspešná akcia –nepodarilo sa spojiť sdatabázouPridanie ďalšej adresy Požiadavka obsahuje Id Úspešná akcia – Správa o ne/úspešnom


k užívateľoviNastavenie primárnejadresyužívateľa a novú<strong>Gmail</strong>ovú adresu napridanie s prístupovýmiúdajmiPožiadavka obsahuje Idužívateľa a <strong>Gmail</strong>ovúadresu, ktorá má byťnová aktívnaSpráva o úpravezáznamuNeúspešná akcia –nepodarilo sa spojiť sdatabázou alebo zadaný<strong>Gmail</strong>ový účetneexistuje/mánesprávne zadané údajeÚspešná akcia –Správa o úpravezáznamuNeúspešná akcia –nepodarilo sa spojiť sdatabázoupridaní nového účtuSpráva o ne/úspešnejzmene primárneho účtuKomunikačný modul – klientObsahuje triedy:• CommModule - hlavná trieda, ktorá zapuzdruje všetku komunikáciu klient-server na straneklienta, na vytváranie <strong>požiadaviek</strong> využíva triedu RequestGenerator a na rozparsovanieodpovedí využíva triedu ResponseResolver. Metódy:◦ createRequest() – vytvorí XML dokument s požiadavkou, zavolá príslušnú metóduRequestGenerator◦ sendRequest() - pošle požiadavku na server◦ getResponse() - získa odpoveď od servera◦ resolveResponse() - rozparsuje XML odpoveď a zavolá prislušné metódy, zavolápríslušnú metódu triedy ResponseResolver• ResponseResolver - implementovaná trieda na prácu s emailami. Podľa typu XMLvygeneruje odpoveď a pošle GUI. Metódy:◦ resolveResponse()• RequestGenerator - Metódy:◦ mailRequest()◦ mailHeaderRequest()◦ mailDeleteRequest()◦ mailMoveRequest()◦ mailPlannerRequest()◦ mailSendRequest()◦ contactListRequest()◦ dbQueryRequest()◦ loginRequest()◦ logoutRequest()


Komunikačný modul – serverObsahuje triedy:Jadro• ServerCommModule – zapuzdruje komunikáciu klient-server na strane servera. Využívatriedy ServerRequestResolver a ServerResponseGenerator na spracovanie a vytvorenieXML dokumentov, pomocou ktorých komunikuje s klientskou časťou aplikácie. Metódy:◦ receive() – dostane požiadavku na vykonanie buď od jadra alebo klientskej strany, podľatypu požiadavky ju posiela ďalej jadru/klientovi◦ sendRequest()Obsahuje triedu:• triedaJadro – Metódy:◦ recieve() - dostane od ostatných modulov XML súbor spožiadavkou na vykonanie◦ log() - zapisovanie aktivity servera do súboru, zaznamenáva vykonané operácie receive()a send()◦ mailResponse()◦ mailHeaderResponse()◦ mailDeleteResponse()◦ mailMoveResponse()◦ mailPlannerResponse()◦ mailSendResponse()◦ dbqueryResponse()◦ loginResponse()◦ logoutResponse()Komunikácia s <strong>Gmail</strong>-om (IMAP)• Modul obsahuje triedu IMAPclass, MailHeader, WholeMail a FileWrapper, využívaprotokol IMAP. Použitá je knižnica JavaMail• Zapuzdruje komunikáciu so službou <strong>Gmail</strong>. Metódy IMAPClass:public int sendFromDrafts(String mailID)public int sendMail(Message mail)public int connect(User u)public int closeConnection()public ArrayList listFolders()public int copyMail(String sourceFolder, int[] msgIDs, StringtargetFolder)public WholeMail getMail(String mailID)public ArrayList getMailHeader(String url, SearchTerm st)throws MessagingExceptionpublic ArrayList getMailHeader(String url, int lowIndex, inthighIndex) throws MessagingExceptionpublic int deleteMail(String mailID)public int moveToTrash(String mailID)


public int moveMail(String mailID, String target)public int saveToDrafts(WholeMail mail)public int sendMail(WholeMail mail)public String getConnectedAccount()private MimeMessage wholeMailToMimeMessage(Session s, WholeMail mail)public String getMessageID(String mailID)public int getFolderMessageCount(String folderName)public ArrayList getAttachmentList(SearchTerm st, String name)public FileWrapper getAttachment(String mailID)• Trieda FileWrapper slúži na uloženie dátového súboru do pamäti a manipuláciu s ním.public String getFileName()public int[] getFileBytes()• Trieda WholeMail zapuzdruje mail so všetkými jeho dátami vrátane príloh. TriedaWholeMail funguje na uloženie prijatých správ aj správ na odoslanie.public String getSender()public String getSubject()public Date getDate()public String getPlainText()public String getHtml()public Boolean hasAttachments()public ArrayList getAttachments()public String[] getRecipient()public String[] getCc()public String[] getBcc()public void setRecipients(String[] _komu, String[] _cc, String[] _bcc)• MailHeader - Trieda na reprezentáciu hlavičky mailu.public String getId()public String getSubject()public Date getDate()public String getMessageAbstract()public ArrayList getAttachments()public ArrayList getSender()public String toString()private String getMessageAbstract(Message msg, int charNum)Komunikácia s databázouObsahuje triedu:• databaseClass – stará sa o generovanie query-<strong>požiadaviek</strong> na databázu. Metódy:◦ query() - vykoná zadanú query v db, vráti požadované dáta a informáciu o úspešnostivykonania◦ backup() - vyexportuje obsah databázyModul na odosielanie naplánovaných emailovObsahuje triedu:• planovacOdosielania – metódy:• AktualizujCasy() v databáze vyberie najbližší čas odoslania emailu a aktualizuje ho vosvojej pamäti. Nebude si pamatať celé správy, iba ID emailu na najbližsie odoslanie.Keď nastane čas odoslania, zavolá metódu odosliNaplanovane()


• odosliNaplanovane(ID)- odošle (pošle <strong>Gmail</strong>u požiadavku na odoslanie) danú správu,vymaže ju z databázySledovanie zmien stránokObsahuje triedy:• triedaSledujStranky – Metódy:◦ stiahniStranku() - metóda stiahne stránku a uloží ju◦ nacitajStranku() - načíta stránku zo súboru do pamäte◦ porovnaj() - porovnanie zmien◦ run() - všetko čo má modul vykonávať – zistiť ktoré stránky třeba porovnať, sťahovaniestránok načítavanie stránok, porovnávanie stránok, vrátenie zmien• triedaParser – HTML Cleaner 2.0Administrátorský interfaceAdministratorský interface predstavuje prostredie pre administrátora systému na obsluhuserverovej časti aplikácie. Administrátor obsluhuje server pomocou niekoľkých systémovýchpríkazov, ktoré píše do terminálu.Príkaz (presna podoba co sa realne bude pisatdo terminalu bude vyzerat inac)StatusStopSysMessageChangeLoginCreateAdministratorBackupLoadBackupLogAkcia serveraStav serveraZastavenie serveraSystémová <strong>správa</strong>Zmena mena a hesla administrátoraVytvorenie nového administrátoraVynutenie zálohy systémuVráti systém k bodu zálohyOtvorí log pre prezeranieInterface zapuzdruje trieda ServerCmd. Táto trieda implementuje pre každý príkaz metódu, ktorápríkaz vykoná. Zároveň trieda má listener, ktorý odchytáva príkazy z terminálu. Modul obsahujetiež triedu User. Trieda User zapuzdruje prihlasovacie údaje užívateľa. Má metódy:public String getUserName()public String getUserPass()Webový náhľadObsahuje triedu:• webNahlad – trieda má za úlohu generovať jednoduchú stránku, na ktorej budú zobrazenéinformácie o behu servera/log/ a bug-report. Metódy:– zobrazLog() - prečíta súbor s logom a pretransformuje ho na html– zobrazReport() - podľa inkonzistencií logu vygeneruje, v akom čase server nefungoval


Diagramy(pozri súbory:)class diagram:správne. (log sa periodicky ukladá, obsahuje časovú známku a keď nebude periódadodržaná, tak sa ten časový interval vloží do bug-reportu)• classDiagram.pngsequence diagramy:• prihlasovanie-sequence.png• zobrazenieSpravPriecinku-sequence.png• pridanieSledovanejStranky-sequence.png• posielanieMailu-sequence.png• planovaneOdosielanie-sequence.png


GUIclassPodrobná špecifikácia komponentov• Trieda reprezentujúca užívateľské rozhranie aplikáciePremenné• public final static int MSG_OK = 0;• public final static int MSG_WRONG = 1;• public final static int MSG_INFO = 2;◦ konštanty popisujúce typ správy zobrazujúcej sa v stavovom riadku• private CommModule klient;◦ inštancia komunikačného modulu na strane klienta• private String userMail = "";◦ email aktuálne používaného účtu• private String[] zoznamID = null;◦ pri zobrazení zoznamu správ ukladá ich ID v poradí, v akom sú zobrazené• private FilterSprav konfigSprav◦ zapamätanie posledného filtra,na základe ktorého sa zobrazí zoznam emailov (napr. priakcii „späť“)• private FilterPriloh konfigPriloh◦ rovnako, pre zoznam zobrazených príloh• private boolean zobrazenieSprav◦ informácia o tom, ci je posledná konfigurácia zoznam správ alebo prílohMetódy• private void zobrazPrihlasenie()◦ zablokuje ostatné komponenty v rozhraní a zobrazí prihlasovací formulár• public void skryPrihlasenie()◦ odblokuje sa užívateľské rozhranie a skryje sa prihlasovací formulár• public void ZobrazNovyMail(NewEmail mail)◦ zobrazí sa formulár pre vytvorenie mailu a predvyplní sa hodnotami z mail• public void posledneZobrazenie()◦ načíta sa posledný zavolaný zoznam správ alebo príloh, podľa premennýchkonfigSprav/konfigPriloh/zobrazenieSprav• public void zlePrihlasenie()◦ zobrazenie chybovej správy o zlom prihlásení a umožnenie prihlásiť sa znova• public void nacitajZoznamPriecinkov(Vector zoznam)◦ zobrazí v ľavom paneli zoznam priečinkov, ktoré má účet vytvorené• public void nacitajZoznamMailov(FilterSprav zFiltra, int pocetMailov,Vector zoznam)


◦ zobrazí zoznam emailov podla vstupu 'zoznam', nastaví hodnoty vo formulári podlatoho, z akeho filtra zoznam emailov prisiel a podla celkoveho poctu mailovvyhovujucich filtru• public void nacitajZoznamPriloh(FilterPriloh zFiltra, int pocetPriloh,Vector zoznam)◦ zobrazí zoznam príloh podľa vstupu, rovnako ako zoznam mailov• public void zobrazMail(WholeEmail mail)◦ otvorí formulár pre prezeranie emailu a zobrazí v ňom email podľa parametra mail• public void stavovaSprava(String text, int type)◦ v stavovom riadku hlavného formulára zobrazí text stavovej správy a inkonku podľatypu správy• public void stavovaSpravaZmien(String text, int type)◦ v stavovom riadku formulára pre narábanie so zmenami stránok zobrazí text stavovejsprávy a inkonku podľa typu správy• private void nastavZobrazovanieZmienVOkne(boolean co)◦ úprava súboru s nastaveniami a nastavenie hodnoty hovoriacej o zobrazovaní zmien vhlavnom okne• private boolean jePovoleneZobrazovanieZmien()◦ prečítanie súboru s nastaveniami• private void ZobrazKonkretneSpravy ()◦ vytvorenie premennej triedy FilterSprav, nastavenie jej premenných podľa toho, ktorésprávy sa užívateľ rozhodol zobraziť, zavolanie requestu na zobrazenie daných emailov• private void ZobrazKonkretnePrilohy()◦ podobne ako ZobrazKonkretneSpravy(), pre prílohy• public void spracujZoznamKontaktov(String[] zoznam)◦ zobrazenie zoznamu kontaktov daného účtu pre použitie ako „hint“ pri odosielaní správ• public void spracujZoznamStranok(String[][] zoznam)◦ vypísanie zoznamu sledovaných stránok v tvare Link – Nazov• public void zobrazZoznamZmien(Vector zoznam)◦ zobrazenie zoznamu nových zmien na sledovaných stránkach• public void spracujZoznamUctov(String[] zoznam)◦ aktualizovanie zoznamu účtov, medzi ktorými sa môže prepínať• public void logout()◦ odhlásenie, ukončenie všetkých vytvorených spojení a ukončenie programuAttachmentInfo• Trieda popisujúca konkrétnu prílohuPremenné• String odkoho, Komu, datum, idPrilohy, nazov, link;


Metódy◦ informácie o prílohe• public AttachmentInfo()◦ konštruktor s nastavením defaultných hodnôt pre premenné• public AttachmentInfo(String _odkoho, String _komu, String _datum, String_idPrilohy, String _nazov, String _link)◦ konštruktor s nastavením hodnôt pre premenné podľa parametrovEmailInfo• Trieda popisujúca zhrňujúce informácie o emailePremenné• String odkohoKomu, predmet, zaciatok, datum, idMailu;• boolean maPrilohuMetódy◦ informácie o emaile• public EmailInfo()◦ konštruktor s nastavením defaultných hodnôt pre premenné• public EmailInfo(String od, String pr, String zac, String dat, booleanpril, String id)◦ konštruktor s nastavením hodnôt pre premenné podľa parametrovFilterPriloh• Trieda popisujúca to, aké prílohy boli vyžiadanéPremenné• String mail, odkoho, komu, nazov, odkedy, dokedy, pripona;• boolean podlaStranok;• boolean vsetkoNaraz◦ informacia o tom, ci vo filtri maju platit vsetky podmienky naraz alebonie• int stranka;◦ informácie o filtriMetódy• public FilterPriloh()◦ konštruktor s nastavením defaultných hodnôt pre premenné• public FilterPriloh(String _mail, String _odkoho, String _komu, String_odkedy, String _dokedy, String _nazov, String _pripona, Boolean


_podlaStranok, int _stranka, boolean _vsetkonaraz)◦ konštruktor s nastavením hodnôt pre premenné podľa parametrovFilterSprav• Trieda popisujúca to, aké správy boli vyžiadanéPremenné• String mail, odkoho, komu, predmet, priecinok, obsahuje, neobsahuje,odkedy, dokedy;• boolean maPrilohu, podlaStranok;• boolean vsetkonaraz;◦ to iste ako pri filterPriloh• int stranka;◦ informácie o filtriMetódy• public FilterSprav()◦ konštruktor s nastavením defaultných hodnôt pre premenné• public FilterSprav(String _mail, String _odkoho, String _komu, String_predmet, String _priecinok, String _obsahuje, String _neobsahuje, String_odkedy, String _dokedy, boolean _maPrilohu, _podlaStranok, int _stranka,boolean _vsetkonaraz)◦ konštruktor s nastavením hodnôt pre premenné podľa parametrovNewEmail• Trieda popisujúca nový vytvorený email, ktorý sa má odoslaťPremenné• String komu, kopia, skrytaKopia, datum, predmet, text, prilohy;• boolean planOdoslanie, maPrilohy;◦ informácie o maileMetódy• public NewEmail()◦ konštruktor s nastavením defaultných hodnôt pre premenné• public NewEmail(String _komu, String _kopia, String _sKopia, String_datum, _predmet, String _text, String _prilohy, boolean _pOd, boolean_maPr)◦ konštruktor s nastavením hodnôt pre premenné podľa parametrovWholeEmail• Trieda popisujúca kompletný existujúci email


Premenné• String odkohoKomu, predmet, datum, text;• boolean maPrilohu;• String[] prilohy;◦ informácie o maileMetódy• public WholeEmail()◦ konštruktor s nastavením defaultných hodnôt pre premenné• public WholeEmail(String od, String pr, String dat, String tx, booleanpril, String[] zp)◦ konštruktor s nastavením hodnôt pre premenné podľa parametrovNewEmail• Trieda popisujúca nový vytvorený email, ktorý sa má odoslaťPremenné• String komu, kopia, skrytaKopia, datum, predmet, text, prilohy;• boolean planOdoslanie, maPrilohy;◦ informácie o maileMetódy• public NewEmail()◦ konštruktor s nastavením defaultných hodnôt pre premenné• public NewEmail(String _komu, String _kopia, String _sKopia, String_datum, _predmet, String _text, String _prilohy, boolean _pOd, boolean_maPr)◦ konštruktor s nastavením hodnôt pre premenné podľa parametrovIniFileClass• Trieda na narábanie s .xml súborom s nastaveniami• tvar súboru:value1value2...Premenné• private Element root = null; //root element• private Document doc; //dokument udrziavajuci xml obsah


• private File file;Metódy• public iniFileClass(String nazovSub);◦ konštruktor s nastavením premennej nazovSuboru• public boolean existuje(String nazov);◦ zistí, či existuje v súbore nejaký parameter• public String vratHodnotu(String nazov);◦ vráti hodnotu parametra zo súboru, ak parameter neexistuje, vráti prázdny string• public void zmenHodnotu(String nazov, String nova);◦ v súbore prepíše hodnotu parametra, ak existuje.• public void pridajZaznam(String parameter, String hodnota);◦ pridanie záznamu na koniec súboru, ak ešte parameter neexistuje• public void zmazZaznam(String nazov);◦ zmazanie záznamu, ak existuje• private void zapisNovyDoc(Document doc)◦ pomocna funkcia na prepisanie suboru novym documentomCommModule• trieda v klientskej aplikacii, ktora sa stara o komunikaciu so serverom, posiela poziadavky aprijima odpovede vo forme XML dokumentovPremenné• ResponseResolver rr - parser XML odpovedi servera• Zoznam premennych popisujucich typ poziadavky: int• GUIclass gui; //odkaz na gui• ResponseResolver rr;• RequestGenerator rg;• Socket socket; //pre vytvaranie spojenia so serverom• private static final int port = 21008; //komunikacny port• Thread th;• OutputStream wr;• InputStream rd; //na posielanie/prijimanie sprav zo serveraMetódy• public ServerXMLRequest createRequest(int requestType, Object data)◦ parametrom je typ poziadavky a data k poziadavke◦ vrati sformulovanu poziadavku, ktora si v sebe drzi XML dokument◦ metoda sformuluje poziadavku na server, zavola metodu triedy RequestGenerator• public void sendRequest(ServerXMLRequest request)


◦ parametrom je poziadavka◦ metoda posle na server cez udrziavane TCP/IP spojenie posle XML dokument• public void getResponse()◦ metoda ziska odpoved zo servera, zavola metodu triedy ResponseResolver narozparsovanie XML dokumentu• private void createConnection()◦ vytvorenie spojenia so serverom• private String docToStr(Document doc)◦ pomocna funkcia na konverziu z Document na StringRequestGenerator• trieda v klientskej aplikacii, ktora formuluje poziadavky na serverMetódy• public Document mailRequest(String mailID)◦ parametrom je identifikator mailu◦ vrati XML dokument◦ metoda sformuluje XML dokumet s poziadavkou na konkretny mail• public Document mailHeaderRequest(Filter filter)◦ parametrom je filter◦ vrati XML dokument◦ metoda sformuluje poziadavku na zoznam hlaviciek mailov• public Document mailDeleteRequest(String mailID)◦ parametrom je identifikator mailu◦ vrati XML dokument◦ metoda sformuluje poziadavku na vymazanie konkretneho mailu• public Document mailMoveRequest(String mailID, String target)◦ parametrom je identifikator mailu a cielovy priecinok◦ vrati XML dokument◦ metoda sformuluje poziadavku na presunutie mailu do konkretneho priecinku• public Document mailPlannerRequest(String mailID, Date date)◦ parametrom je identifikator mailu a datum◦ vrati XML dokument◦ metoda sformuluje poziadavku na naplanovanie odoslania mailu• public Document mailSendRequest(EMail em)


◦ parametrom je Email na odoslani◦ vrati XML dokument◦ metoda sformuluje poziadavku na poslanie mailu• public Document contactListRequest()◦ vrati XML dokument◦ metoda sformuluje poziadavku na zoznamu kontaktov• public Document dbQueryRequest(String query)◦ parametrom je retazec s dotazom do databazy◦ vrati XML dokument◦ metoda sformuluje poziadavku na databazu• public Document loginRequest(String name, String password)◦ parametrom je prihlasovacie meno a heslo◦ vrati XML dokument◦ metoda sformuluje poziadavku na prihlasenie uzivatela• public Document logoutRequest()◦ vrati XML dokument◦ metoda sformuluje poziadavku na odhlasenie uzivatelaTrieda ResponseResolver• komunikacny modul pocuva na spojeni so serverom• Rozparsuje XML dokument s odpovedou. Podla typu odpovede zavola metody grafickehorozhrania na zobrazenie odpovede.Metódy• public void resolveResponse(Document response)◦ parametrom je XML dokument s odpovedou servera◦ metoda rozparsuje odpoved servera a zavola metody GUI na zobrazenie odpovedeIMAPIMAPClassTrieda komunikuje priamo so sluzbou <strong>Gmail</strong>Konštanty (verejné)public static final int SUCCESS_CODE – všetko OK


public static final int WRONG_CREDENTIALS_CODE – nesprávne prihlasovacieúdajepublic static final int NO_SUCH_PROVIDER_CODE – nesprávny prevádzkovateľpublic static final int MESSAGING_EXCEPTION_CODE – chyba priposielaní/získavaní správypublic static final int BAD_REQUEST_CODE - chybná požiadavkapublic static final int ACTION_FAILED_CODE – chyba pri vykonávanípožiadavkyMetódypublic int sendFromDrafts(String mailID)- pošle mail uložený v priečinku Rozpísané (Drafts)public int sendMail(Message mail)- Pošle mail- parameter – Inštancia triedy WholeMail- vráti – číselná konštanta, ktorá hovorí o úspešnosti akcie.public int connect(User u)- Pripojí užívateľa ku kontu gmail, zároveň slúži aj na overenieprihlasovacích údajov.- Inštancia triedy User, ktorá zapuzdruje prihlasovacie údaje užívateľa.- Metóda vráti číselnú konštantu, ktorá hovorí o úspešnosti akcie.public int closeConnection()- Ukončí spojenie konta so serverom <strong>Gmail</strong>.- Metóda vráti číselnú konštantu, ktorá hovorí o úspešnosti akcie.public ArrayList listFolders()- Vráti zoznam priečinkov konta.public int copyMail(String sourceFolder, int[] msgIDs, StringtargetFolder)- Skopíruje dané maily do cieľového priečinka.- sourceFolder Zdrojový priečinok, msgIDs Číselné identifikátory mailov vpriečinku, targetFolder Cieľový adresár- Metóda vráti číselnú konštantu, ktorá hovorí o úspešnosti akcie.public WholeMail getMail(String mailID)- Metóda získa mail so všetkými jeho metadátami a prílohami.- Identifikátor mailu.- vráti Inštancia triedy WholeMail, ktorá zapuzdruje mail.public ArrayList getMailHeader(String url, SearchTerm st)throws MessagingException- Získa zoznam hlavičiek mailov.- url Url priečinka , st Inštancia triedy SearchTerm, ktorá zabezpečízískanie len vyžiadaných mailov.- vráti - Zoznam hlavičiek mailov.public ArrayList getMailHeader(String url, int lowIndex, inthighIndex) throws MessagingException- Získa zoznam hlavičiek mailov.


- url Url priečinka, st Inštancia triedy SearchTerm, ktorá zabezpečízískanie len vyžiadaných mailov.- Zoznam hlavičiek mailov.public int deleteMail(String mailID)- Vymaže mail z priečinku. Ak sa mail nachádza v priečinku Kôš (Trash),mail bude vymazaný natrvalo.- mailID Identifikátor mailu.- Metóda vráti číselnú konštantu, ktorá hovorí o úspešnosti akcie.public int moveToTrash(String mailID)- Presunie daný mail do priečinku Kôš (Trash), čo spôsobí jeho vymazanievo všetkých ostatných priečinkoch. Služba <strong>Gmail</strong> mail v priečinku Kôš automatickyvymaže po 30 dňoch.- mailID Identifikátor mailu.- Metóda vráti číselnú konštantu, ktorá hovorí o úspešnosti akcie.public int moveMail(String mailID, String target)- Presunie dany mail do zadanéo priečinku.- mailID Identifikátor mailu, target Cieľový priečinok.- Metóda vráti číselnú konštantu, ktorá hovorí o úspešnosti akcie.public int saveToDrafts(WholeMail mail)- Uloží mail do priešinku Rozpísané (Drafts)- mail Inštancia triedy WholeMail- vráti číselnú konštantu o úspešnosti akciepublic int sendMail(WholeMail mail)- Pošle mail.- mail Inštancia triedy WholeMail- Metóda vráti číselnú konštantu, ktorá hovorí o úspešnosti akcie.public String getConnectedAccount()- Vráti názov prihláseného konta v tejto inštancii.- vráti názov prihláseného konta.private MimeMessage wholeMailToMimeMessage(Session s, WholeMail mail)address = new Interne- Konvertuje inštanciu triedy WholeMail na inštanciu triedy MimeMessage.- s <strong>Gmail</strong> session, mail Inštancia triedy WholeMail na konverziu.- vráti konvertovanú inštanciu MimeMessage.public String getMessageID(String mailID)- Vráti ID správy generované gmailom resp javamailom.- mailID Identifikátor správy podla priečinka a poradia v priečinku- vráti ID správy.public int getFolderMessageCount(String folderName)- Vráti počet mailov v priečinku.- folderName Meno priečinku.- Počet mailov.public ArrayList getAttachmentList(SearchTerm st, String name)


- Vráti zoznam príloh.- st Filter príloh, name Filter podla mena suboru.- vráti zoznam príloh.public FileWrapper getAttachment(String mailID)- vráti konkrétnu prílohu- mailID – identifikátor mailu- vráti inštanciu triedy FileWrapperFileWrapperTrieda FileWrapper slúži na uloženie dátového súboru do pamäti a manipuláciu sním.public String getFileName()- Vráti meno súborupublic int[] getFileBytes()- Vráti pole int-ov, ktoré predstavuje dátovú reprezentáciu.WholeMailTrieda WholeMail zapuzdruje mail so všetkými jeho dátami vrátane príloh. TriedaWholeMail funguje na uloženie prijatých správ aj správ na odoslanie.public String getSender()- Vráti odosielateľa správy.public String getSubject()- Vráti predmet správy.public Date getDate()- Vráti dátum odoslania.public String getPlainText()- Vráti text správy.public String getHtml()- Vráti obsah správy vo formáte html, ak <strong>správa</strong> obsahovala časť s htmlkódom.public Boolean hasAttachments()- Vráti logickú hodnotu, či obsahuje <strong>správa</strong> prílohy.public ArrayList getAttachments()- Vráti zoznam príloh.


public String[] getRecipient()- Vráti zoznam príjemcov správy.public String[] getCc()- Vráti zoznam príjemcov kópie správy.public String[] getBcc()- Vráti zoznam príjemcov skrytej kópie správy.public void setRecipients(String[] _komu, String[] _cc, String[] _bcc)- Nastaví príjemcov správy, jej kópie a skrytej kópie.UserTrieda User zapuzdruje prihlasovacie údaje užívateľa.public String getUserName()- Vráti prihlasovacie meno užívateľa.public String getUserPass()- Vráti heslo užíateľa.MailHeaderTrieda na reprezentáciu hlavičky mailu.public String getId()- vráti ID správypublic String getSubject()- Vráti predmet správy.public Date getDate()- Vráti dátum odoslania správy.public String getMessageAbstract()- Vráti abstrakt správy, ktorý tvorí prvých niekoľko slov správy.public ArrayList getAttachments()- Vráti zoznam príloh mailu.public ArrayList getSender()- Vráti zoznam odosielateľov správy.


public String toString()- Textová reprezentácia hlavičky mailu.private String getMessageAbstract(Message msg, int charNum)- Vráti abstrakt správy, ktorý tvorí prvých niekoľko slov správy.- msg Správa na spracovanie, charNum Počet znakov výsledného abstraktu.Administratorsky interfaceServerCMDTrieda ServerCMD je podtriedou triedy Thread.Premenné triedy (verejné)loggedUser – inštancia triedy User, drží v sebe údaje prihláseného administrátora.Metódy• public String status()◦ vrati retazec ktory obsahuje informacie o stave servera◦ metoda vrati stav servera Stav servera• public void stop()◦ metoda ukonci cinnost servera• public void sysMessage(String msg)◦ parametrom je retazec systemovej spravy◦ metoda odosle systemovu spravu, ktora sa zobrazi vsetkym klientom• public void changeLogin(User u)◦ parametrom je trieda ktora drzi nove udaje administratora• public void createAdministrator(User u)◦ parametrom je trieda ktora drzi udaje noveho administratora• public void backup()◦ metoda vyvola zalohovanie systemu• public void loadBackup()◦ metoda vyvola a nacita zalohu systemu• public void log()◦ metoda vypise logZdedené metódy:run() - pri behu metódy run sa odchytáva a spracováva vstup z konzoly.


ServerCommModule• zapuzdruje komunikáciu klient-server na strane servera. Využíva• triedy ServerRequestResolver a ServerResponseGenerator na spracovanie a vytvorenieXML dokumentov, pomocou ktorých komunikuje s klientskou časťou aplikácie. Metódy:Metódy• public void receive()◦ dostane požiadavku cez TCP IP spojenie◦ metoda prijme XML dokument a zavola metodu na rozparsovanie poziadavky• public void sendResponse(Document response)◦ parametrom je XML dokument s odpovedou◦ metoda posle klientovi XML odpovedServerRequestResolverMetódy• Rozparsuje XML dokument s požíadavkou a tú posunie príslušnému modulu naspracovanie = pošle ju buď jadru alebo komunikačnému modulu na strane klienta.• public void requestResolve(Document request)◦ parametrom je XML dokument s poziadavkou◦ metoda rozparsuje poziadavku a zavola prislusne metodyServerResponseGenerator• formuluje XML dokumet s odpovedou pre klientaMetódy• public Document mailResponse(Object response)◦ parametrom je objekt ktory drzi mail a jeho metadata◦ vrati XML dokument s odpovedou servera◦ metoda odpoveda na poziadavku konkretneho mailu.• public Document mailHeaderResponse(Object response)◦ parametrom je objekt ktory drzi zoznam hlaviciek mailov◦ vrati XML dokument s odpovedou servera◦ metoda odpoveda na poziadavku hlaviciek mailov.• public Document mailDeleteResponse(int response)◦ parametrom je konstanta, ktora hovori o uspesnosti vykonanej akcie◦ vrati XML dokument s odpovedou servera


◦ metoda odpoveda na poziadavku vymazania konkretneho mailu.• public Document mailMoveResponse(int response)◦ parametrom je konstanta, ktora hovori o uspesnosti vykonanej akcie◦ vrati XML dokument s odpovedou servera• public Document mailPlannerResponse(int response)◦ parametrom je konstanta, ktora hovori o uspesnosti vykonanej akcie◦ vrati XML dokument s odpovedou servera◦ metoda odpoveda na poziadavku naplanovania mailu.• public Document mailSendResponse(int response)◦ parametrom je konstanta, ktora hovori o uspesnosti vykonanej akcie◦ vrati XML dokument s odpovedou servera◦ metoda odpoveda na poziadavku odoslania mailu.• public Document dbqueryResponse(Object response)◦ parametrom je objekt, ktory drzi odpoved na dotaz do databazy◦ vrati XML dokument s odpovedou servera• public Document loginResponse(int response)◦ parametrom je konstanta, ktora hovori o uspesnosti vykonanej akcie◦ vrati XML dokument s odpovedou servera• public Document logoutResponse(int response)◦ parametrom je konstanta, ktora hovori o uspesnosti vykonanej akcie◦ vrati XML dokument s odpovedou serveraDatabazaMetódy• public boolean pridajAdmina(String meno, String heslo)◦ prida do tabulky noveho administratora, vrati true, ak nenastala chyba• public boolean zmenAdmina(String meno, String heslo, String stareMeno)◦ zmeni meno a heslo• public boolean prihlasenieAdmina(String meno, String heslo)◦ vrati true, heslo sedi k menu, inak false• public boolean existujeUcet(String email)◦ vrati true a ucet "email" je v tabulke• public boolean pridajUcet(String email, String heslo, StringexistujuciEmail)◦ prida novy gmailovy ucet, uzivatelovy s patricnym id, ak take id nie je v tabulke, vytvoriaj noveho uzivatela a jemu priradi tento novy ucet


• public boolean prihlasenie(String email, String heslo)◦ vrati true, heslo sedi k menu, inak false• public boolean odstranUcet(String email)◦ odstrani existujuci ucet, ak to bol jediny ucet uzivatela, odstrani aj uzivatela• public ArrayList zoznamUctov(String email)◦ vrati vsetkych uctov, ktore patria pouzivatelovi, ktoremu patri "email"• public boolean pridajStranku(String email, String adresa, String nazov)◦ prida sledovanu stranku konkretnemu uzivatelovi• public boolean odstranStranku(String email, String adresa)◦ odstrani sledovanu stranku• public String[][] vsetkyStranky(String email)◦ vrati pole vsetkych adries a nazvov stranok, ktore patria danemu uctu• public String nazovStranky(String email, String adresa)◦ vrati nazo pozadovanej stranky• public String dateToStr(Date cas)• public Date strToDate(String text)◦ konverzie Date String• public boolean pridajZmenenuStranku(String email, String adresa, Date cas,String zmena)◦ prida zmenu, ktora nastala na stranke spolu s casom, a informaciou, ktora stranka sazmenila• public boolean odstranZmenyStranky(String email, String adresa)◦ odstrani zaznamy o zmenach stranky• public ArrayList vratZmenyStranky(String email, String adresa)◦ vrati zmeny stranky (adresa nazov datum text id)• public ArrayList zmenyStranky(String email)◦ vrati vsetky zmeny strankok uzivatela (adresa nazov datum text id)• public boolean odstranZmenu(int id)◦ odstrani zmeny stranok uzivatela• public Date najblizsiCasPlanovaneho()◦ vyberie najblizsi cas, kedy sa ma poslat mail z databazy• public boolean pridajPlanovany(PlanovanyEmail planovany)◦ prida cas, ucet a id emailu, ktory sa ma odoslat• public PlanovanyEmail[] vsetkyPlanovaneUctu(String email)◦ vrati udaje o vsetkych naplanovanych spravach uctu• public PlanovanyEmail[] vsetkyPlanovaneUzivatela(String email)◦ vrati udaje o vsetkych naplanovanych spravach uzivatela• public boolean odstranPlanovany(String email, String id)◦ vymaze planovany email• private boolean odstranVsetkyPlanovaneUctu(String email)◦ odstrani vsetky planovane emaily uctu• public PlanovanyEmail[] casyPred(Date cas)


◦ vrati vsetky planovane emaily ktorych cas je uz stary• public boolean odstranOdoslane(Date cas)◦ odstrani vsetky planovane emaily ktorych cas je uz stary• public boolean zapisCas(Date d)◦ zapise do databazy cas• public void vytvotBackupSubor()◦ vytvori backup subor• public boolean vytvorDBzBackup()◦ vytvori databazu z backup suboruClass PlanovanyEmail• pomocna trieda pouzita pre planovane odosielanie a databazuPremenné• String email• Date cas• int id◦ informácie o emaileMetódy• Public PlanovanyEmail(String email, Date cas, int id)◦ konštruktor s nastavením premennýchPlanovaneOdosielaniePremenné• Date najblizsiCasMetódy• Date NajblizsiCas()◦ vrtai najblizsi cas odoslania• bool Pridaj(PlanovanyEmail email)◦ prida novy udaj o naplanovanej sprave na odoslanie• PlanovanyEmail[] VratVsetkyUctu(String email)◦ vrati vsetky naplanovane emaily uctu• PlanovanyEmail[] VratVsetkyUzivatela(String email)


◦ vrati vsetky naplanovane emaily uzivatel• bool vymaz(int id)◦ vymaze naplanovanu spravu• bool odosli(Date cas)◦ v databaze najde vyhovujuce casy a odosle vhodne spravyTriedaJadroPremenné• ArrayList prihlaseny◦ pole mien prihlasenych uzivatelov• HashMap imapy◦ instancie imap classov• Timer timer◦ timer• TStranky s◦ instancia modulu na sledovanie stranok• ZapisCas z• DocumentBuilderFactory fac• DocumentBuilder builder• CommModule comm◦ instancia komunikacneho modulu• Databaza db◦ instancia modulu na komunikaciu s databazou• ServerCMD cmd• PlanovaneOdosielanie poMetódy• boolean vytvorAdministratora(String meno, String heslo)◦ prida admina• void sysSprava◦ administratorsky interface posiela systemovu spravu klientovi• ArrayList vratVsetkyStranky◦ vrati vsetky stranky z databazy ktore treba sledovat• void prijmiZmeny(ArrayList zmenene, Date datum, ArrayList texty)◦ funkcia posle zmeny klientovi• Date najblizsiCasPlanovaneho()


• PlanovanyEmail[] vsetkyPlanovaneUctu(String email)• PlanovanyEmail[] vsetkyPlanovaneUzivatela(String email)• boolean odstranPlanovany(String email, String id)• void odosliPlanovany()• Document dirListResponse(String type, ArrayList folders)• ...◦ generovanie xml• SearchTerm vytvorSearchTerm(String odkoho, String komu...)• SearchTerm vytvorSearchTerm2(String mail, String odkoho...)• boolean prihlasenieAdmina(String meno, String heslo)• log(String cas, String modul, String uzivatel)• log(String exception)◦ funkciu bude moct ktorykolvek modul zavolat aby zapisala jeho konkretnu aktivitu dosuborov rozdelenych po mesiaci.• void receive(Document d)◦ vykona poziadavku zaslanu v xml a vrati xml odpovedTriedaSledujStrankyPremenné• TJadro j• ArrayList ztextyMetódy• void stiahniStranku(String FolderName, String adresa)◦ stiahne a ulozi stranku do suboru• TagNode nacitajStranku(String source)◦ nacita stranku zo suboru do pamate• boolean porovnaj(TagNode t1, TagNode t2)◦ porovnava stranky• void run()◦ kazdu polhodinu vykona proces stiahnutia a porovnania stranok


ParserHTML cleaner 2.0ZapisCasPremenné• Databaza db◦ pointer na databázuMetódy• zapisCas(Databaza d)◦ konštruktor v ktorom sa odovzdá pointer na databázu• void run()◦ zapíše čas do databázy, malo by sa to volať z jadra každú pol hodinuWebový náhľad - funkcie.phpMetódy• check()◦ testovanie prihlasovacích údajov na tabuľke užívateľov◦ volanie ďaľších funkcií po úspešnom náleze v databáze• checkA()◦ testovanie prihlasovacích údajov na tabuľke admina◦ volanie ďaľších funkcií po úspešnom náleze v databáze• toString($userId)◦ výpis zmien stránok pre vybraného užívateľa• toStringA()◦ výpis logu a posledného záznamu o chode aplikácie• zmenyStranok($uzivatel)


◦ vyberie z databázy zmenené stránky užívateľa• hlavicka($nadpis)premenné• $db◦ vytvorí hlavičku html dokumentu◦ vytvorený objekt pre prácu s databázou• $result◦ výsledok SQL dotazu• $resultPole◦ výsledok dotazu usporiadaný podľa stĺpcov do poľa• $output◦ akumulátor stringov, ktoré funkcie vracajú• $out◦ pomocná premenná pre $output• $xml a $xml_string◦ premenné cez, ktoré otvorím súbor s xml-kom a potom ho zmením na stringDb.php- Obsahuje triedu pre prácu s databázou (db)Metódy• Construct()◦ konštruktor triedy• connect()


◦ pripojenie na databázu• disconnect()◦ odpojenie• query($query)◦ posielanie dotazu ($query) databáze• setError($errorText)◦ nastavenie textu chybovej hlášky• isError()◦ vráti true ak nastala chyba• getError()premenné◦ vráti text chyby• DB_HOST, DB_USER, DB_PASS, DB_DATABASE◦ konštantny pre prácu s databázou- obsahuje triedu pre narabanie s vysledkom db->query, class mysql• query($query)◦ nastaví sa result a query• numRows()◦ vráti počet riadkov resultu• fetchRow($typ)


◦ vráti asociatívne pole nasledujúceho riadku v resulte• error()◦ vráti text chybyStretnutie č.1Aplikacia je spustitelna:Záznam z testovania• prihlasenie uzivatela funguje,• zobrazenie priecinkov funguje,• zobrazenie zoznamu priecinkov funguje,chyba - pri otvoreni konkretneho mailu modul IMAPclass vratil chybu,dovod - dostal stary typ ID, pricom klient posielal novy typ - odstranene, uz je moznezobrazit konkretny mailchyba - nezobrazoval sa zoznam uctov - odstranenechyba - MailHeader z nejakych pricin vyhadzuje chybu pri vytvarani abstraktu spravy priniektorych mailoch- dovod - sprava niekedy nie je niekedy multipart objekt ale string, treba testovat na typinstancie objektu - odstranenechyba - neuspesne odoslanie mailu- dovod - ak objekt triedy WholeMail dostal prazdny retazec ako zoznam adresatovkopie a skrytej kopie, nastala chybaStretnutie č.2kedze imap cakal pre prazdny zoznam null - odstraneneLadenie aplikacie GA- zlucovanie zmien, ktore clenovia timu spravili od posledneho stretnutia samostatne- testovanie dalsich features aplikacie- IMAPClass - nespravny format retazca odosielatela - opravene- konsolidovanie modulu na sledovanie zmien stranok - opravene- nefunguje parsovanie datumu - workaround - opravene- nevracia zmeny stranok - opravene- chyba pri mazani zaznamu o zmene stranky - opravane


- chyba SQL syntaxe - opravene- chyba struktury databazy – opravene


Záznam z odovzdávania• odovzdavanie projektu prebiehalo na cvicenach• po nainstalovani aplikacie (serverovej aj klientskej casti) na pocitac zadavetela sa zacalotestovanie a zistovanie, ktore funkcie programu su a ktore nie su funkcne• my ako tvorcovia tohto projektu sme si boli vedomi toho, ze vela veci tam nie je funkcnych(co bolo do velkej miery zapricinene rozsiahlostou projektu), takze to, ze zadavatel nebol svysledkom spokojny, bola od zaciatku ocakavana reakcia• z funkcii, ktore boli spisane v katalogu poziadaviek sa podarilo uspesne otestovat vypisemailov podla priecinkov, odosielanie a hromadne odosielanie emailov, scasti aj sledovaniezmien stranok (scasti preto, ze aj ked tato vec bola funkcna, chybalo uz len lepsie nastavenietimer-a starajuceho sa o pravidelne zistovanie zmien)• chybalo vela podstatnych veci, kvoli ktorym bol tento projekt v podstate vytvoreny -planovane odosielanie emailov, strankovanie zobrazenia sprav a priloh a vyhladavanie• aj napriek velmi nekonfliktnemu priebehu testovania (pri ktorom nedoslo k ziadnej fyzickej,a snad ani psychickej ujme zucastnenych) zaverecne vyjadrenie zadavatela "vypnite to, a uznikdy v zivote mi to neukazujte" zrejme hovori za vsetko :)


Katarína Matysová:Záverečné zhodnotenie• aj napriek tomu, ako veľmi je náš výsledný program nefunkčný na prvý pohľad, som svýsledkom našej práce celkom spokojná, vzhľadom na to, že pôvodne to mal byť projektnaprogramovateľný za 2 dni (od čoho mal TAAAAAKTO ďaleko ). Veľmi veľa času smestrávili iba tým, aby sme postavili stabilný základ, čo samozrejme nie je vidno z pohľadučloveka, ktorý nestrávil X týdňov vytváraním tejto aplikácie. Ako to povedať čonajstručnejšie a čo najjasnejšie:Toto je časť projektu, ktorá jeviditeľná a je hodnotená jejfunkčnosťToto je zvyšok našej roboty :)• Myslím, že jadro programu je dobre navrhnuté, pravdepodobne by nebol problém vyvíjaťaplikáciu ďalej a dotiahnuť to s funčnosťou do konca. Ak by bol na to čas. Čo nie je.• Spätná väzba od zadávateľa jednoznačne hovorila o tom, že mu tam chýbajú funkcie, ktorétam podľa katalógu <strong>požiadaviek</strong> mali byť. Ak by sa mala robiť nasledujúca verzia, bolo bytreba najprv dotestovať projekt dokonca a sfunkčniť chýbajúce veci. Plus urobiť viac userfriedlyužívateľské rozhranie.• Pôvodného plánu sme sa z väčšej časti držali, aj keď pri prvom hrubom návrhukomponentov nebolo celkom vidno komplikácie, ktoré neskôr nastanú, takže rozdiely oprotipôvodnému plánu sa vyskytli hlavne tam, kde sme to nie úplne domysleli pri návrhu.• Naša tímová práca bola lepšia, ako som na začiatku čakala. Veľkú výhodu malo to, že všetcičlenovia nášho tímu boli viacmenej stále pokope, čiže ak sme sa potrebovali stretnúť, dalosa to. V každom prípade, nájsť taký čas, kedy má 5 ľudí naraz voľno vie byť niekedy väčšíproblém, ako sa zdá. V komunikácii boli miestami trochu diery, čo sa prejavilo najviac prifinálnom testovaní a skladaní projektu, keď sme zrazu zistili, že sme sa nedohodli poriadnena jednotlivých rozhraniach a na tom, čo ktorá funkcia vracia a čo očakáva ako vstup. Amohli sme sa potom čudovať, prečo tam nič nefunguje :)Robert Maurer:1. Nie som s naším projektom spokojný, vzhľadom na pomer daného množstva práce a časusme viac zvládnuť nemohli, ale výsledok je beztak mizerný.Neboli sme schopní napísať návrh, podľa ktorého by sa dali nezávisle naprogramovaťjednotlivé komponenty.Riešili sme to vzájomnou komunikáciou. Vždy keď mi nebolo jasné ako mávyzerať niektorá časť komponentu, tak bolo možné od ostatných členov tímu bez problémov zistiťpotreby ich komponentov.2. Na základe spätnej väzby od zadávateľa odporúčam, aby sa v projekte dorobili zvyšnéfunkcie. Okrem toho by sa mali optimalizovať niektoré operácie s e-mailami.3. Plánu sme sa síce nedokázali držať úplne, ale z väčšej časti sa nám darilo pridŕžať sa ho.


Odlišnosti od plánu nie som schopný konkretizovať.4. Ako tím sme spolupracovali v rámci možností. Koniec koncov som s našou spoluprácouspokojný. Úlohy sme si rozdelili rovnomerne, každý dostal časť podľa svojho záujmu. Somspokojný s našou komunikáciou. Zlepšiť by sa dala častejšími skupinovými konverzáciami cezSkype.Pavol Hudec:S nasim celkovym dielom nie som spokojny, pretoze nema vlastnosti, ake boli od neho ocakavane,vzhladom k tomu, ze bol privelmi zlozity na velmi kratke casove obdobie.Po dorobeni naplanovanych veci sa menili niektore casti projektu, na ktore som musel reagovatpridanim a zmenami funkcii, a zmenou databazy.Pre nasledujucu verziu odporucam v prvom rade doladit existujuci kod.Planu sme sa drzali vo velkej miere.Museli sme zmenit databazu.Ako tim sme sa vedeli dohodnut v pripadnych odlisnostiach a vedeli sme pohotovo a rychloreagovat na necakane problemy. Pouzili sme primerane vela vulgarizmov.Ulohy sme si rozdelili podla sympatii a zaujmu a priblizne rovnomerne. Komunikacia bola vacsinoudostatocna, vacsinou boli ludia s timu dostupni.Martin Ďatko:1. S projektom nie som celkom spokojny, pretoze sme ho nedotiahli do uspesneho konca.Chcelo by to este trocha popracovat, co vsak vzhladom na rozsah zadania a cas vyhradenyna pracu nebolo realne. Projekt mal aj ine problemy, na ktore sme narazili pocasjeho tvorby, ktorym sa uz nedalo prisposobit a kvoli ktorym je celkovo projekt nepouzitelny.2. Kedze projekt nebol v plnom rozsahu dokonceny, tak v prvom rade by bolo potrebnedokoncit ho.3. Povodneho planu sa dalo drzat. Zvonka kompomenty fungovali ako mali, avsak(aspon z mojej strany) mali urcite principialne problemy, ktore vyzadovali iny pristupk problemu.4. V time sa mi pracovalo dobre, niekedy bol problem sa stretnut, kedze skoordinovat5 ludi nie je jednoduche. Preto niekedy hladanie terminu stretnutia bolo velmi narocne.Druhy problem bol, ze sme sa nedohodli na pouzivani CVS alebo SVN, preto pri skonsolidovavaniprojektu vznikali mierne problemy.Marek MeňhartS výsledkom som spokojný. Celý projekt je na vysokej úrovni. Problémy boli pri bugfixoch,keďže bola potrebná účasť všetkých a náročne sa koordinovalo 5 ľudí.Odporúčam iba dokončenie, ktoré sa v najbližšom roku (ani neskôr) neuskutoční.Odlišnosti vznikli pri ukončovaní projektu, kde debug trval štandardne voči rozsahuprojektu, ale taký čas naň nebol vyhradený.S tímom som maximálne spokojný, pracovalo sa dobre, úlohy boli rozdelené podľaschopností a predošlých skúseností, organizovanie stretnutí bolo obtiažne, ale zvládli sme to.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!