Za´padoˇceska´ univerzita v Plzni Fakulta aplikovany´ch vˇed Katedra informatiky a vy´poˇcetn´ı techniky
Diplomov´ a pr´ ace Pouˇ zit´ı cloudov´ ych u ´ loˇ ziˇ st’ v mobiln´ıch aplikac´ıch
Plzeˇ n 2014
Jarom´ır Stanˇek
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem diplomovou pr´aci vypracoval samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. V Plzni dne 26. ˇcervna 2014 Jarom´ır Stanˇek
Abstract Use of cloud storage in mobile applications This thesis focuses on cloud storage services and their use in desktop and mobile applications. First part of the thesis is devoted to a brief introduction of cloud computing and its categories. This part is followed by an overview of selected cloud storage services with a particular focus on limitations in the use of the services and existing applications for accessing them. Next part studies the API provided for accessing the services. Based on the theoretical part a new library is proposed and implemented. As a part of the library design new functionality is proposed. With the use of the library two applications are then developed. First application is a desktop application pro accessing files in the cloud storages while the second one is a mobile application.
Obsah ´ 1 Uvod
1
2 Cloudov´ e sluˇ zby 2.1 Rozdˇelen´ı cloudov´ ych sluˇzeb . . . . . . . . . . . . . . . . . . .
2 3
3 Cloudov´ au ´ loˇ ziˇ stˇ e 3.1 Vybran´a u ´loˇziˇstˇe . . . . . . . . . . 3.2 Srovn´an´ı u ´loˇziˇst’ . . . . . . . . . . . 3.2.1 Licenˇcn´ı ujedn´an´ı . . . . . . 3.2.2 Kapacita u ´loˇziˇst’ . . . . . . 3.2.3 Limit velikosti soubor˚ u . . . 3.2.4 Autorizace pˇr´ıstupu . . . . . 3.2.5 Zp˚ usob v´ ymˇeny informac´ı . 3.3 Dostupn´a API a SDK . . . . . . . 3.3.1 Z´akladn´ı porovn´an´ı . . . . . 3.3.2 Dostupn´a dokumentace . . . 3.3.3 N´ahled do obsahu knihoven 3.3.4 Pˇr´ım´ y pˇr´ıstup . . . . . . . . 3.4 Existuj´ıc´ı aplikace . . . . . . . . . . 3.4.1 Nativn´ı klienti . . . . . . . . 3.4.2 Klienti tˇret´ıch stran . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
5 5 6 6 6 7 8 11 15 15 16 16 18 18 18 19
4 N´ avrh knihovny 4.1 Volba vlastn´ıho ˇreˇsen´ı . . . . 4.2 Poˇzadovan´a funkcionalita . . . 4.3 Proces autorizace . . . . . . . 4.4 Metadata . . . . . . . . . . . 4.5 Chybov´a hl´aˇsen´ı . . . . . . . . 4.6 Informace o uˇzivateli . . . . . 4.7 Mnoˇzina operac´ı . . . . . . . . 4.7.1 Generick´a operace . . 4.7.2 Manipulace se soubory 4.7.3 Informaˇcn´ı operace . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
21 21 21 22 26 28 29 30 30 31 34
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
5 N´ avrh rozˇ s´ıˇ ren´ e funkcionality 35 5.1 Paraleln´ı nahr´av´an´ı . . . . . . . . . . . . . . . . . . . . . . . . 35 5.2 Zrychlen´ı stahov´an´ı . . . . . . . . . . . . . . . . . . . . . . . . 36 5.3 Kontrola konzistence dat . . . . . . . . . . . . . . . . . . . . . 39
5.4 5.5 5.6
Synchronizace sloˇzek . . . . . . 5.4.1 Selektivn´ı synchronizace Transfer soubor˚ u . . . . . . . . Rozvrˇzen´ı funkcionality . . . . .
. . . .
. . . .
. . . .
6 Implementace knihovny 6.1 Volba komponent . . . . . . . . . . . 6.2 Odliˇsnosti cloudov´ ych u ´loˇziˇst’ . . . . 6.2.1 Konfigurace na stranˇe u ´loˇziˇst’ 6.2.2 Rozf´azov´an´ı operac´ı . . . . . . 6.3 Rozvrˇzen´ı knihovny . . . . . . . . . . 6.4 Dosaˇzen´e v´ ysledky . . . . . . . . . . 7 Implementace klientsk´ e aplikace 7.1 Rozˇs´ıˇren´a funkcionalita . . . . . . . . 7.1.1 Kontrola konzistence dat . . . 7.1.2 Synchronizace sloˇzek . . . . . 7.1.3 Transfer soubor˚ u . . . . . . . 7.2 Rozvrˇzen´ı aplikace . . . . . . . . . . 7.2.1 Grafick´e uˇzivatelsk´e rozhran´ı . 7.2.2 Zpracov´an´ı na pozad´ı . . . . . 8 Implementace mobiln´ıho 8.1 Vybran´a funkcionalita 8.2 Rozvrˇzen´ı aplikace . . 8.3 Uk´azka aplikace . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
. . . . . .
. . . . . . .
. . . .
40 41 41 42
. . . . . .
44 44 45 45 46 47 51
. . . . . . .
54 54 54 55 56 57 57 59
klienta 61 . . . . . . . . . . . . . . . . . . . . . . 62 . . . . . . . . . . . . . . . . . . . . . . 62 . . . . . . . . . . . . . . . . . . . . . . 64
9 Moˇ znosti rozˇ s´ıˇ ren´ı 66 9.1 Webov´a sluˇzba . . . . . . . . . . . . . . . . . . . . . . . . . . 67 10 Z´ avˇ er
69
Pˇ r´ıloha A A.1 Dokumentace knihovny . . . A.1.1 Metody knihovny . . A.1.2 V´ yjimky . . . . . . . A.1.3 Rozhran´ı . . . . . . . A.1.4 Abstraktn´ı tˇr´ıdy . . A.1.5 Konfiguraˇcn´ı soubor A.1.6 Nasazen´ı knihovny .
80 80 80 86 86 87 87 91
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
Pˇ r´ıloha B B.1 Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudDesktop B.1.1 Instalace a spuˇstˇen´ı . . . . . . . . . B.1.2 Ovl´ad´an´ı . . . . . . . . . . . . . . . B.2 Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudAndroid B.2.1 Instalace a spuˇstˇen´ı . . . . . . . . . B.2.2 Ovl´ad´an´ı . . . . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
92 92 92 93 102 102 102
Pˇ r´ıloha C 108 C.1 Obsah CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
´ 1 Uvod Mezi jeden z fenom´en˚ u dneˇsn´ı doby, kter´e se v oblasti informaˇcn´ıch technologi´ı ˇcasto skloˇ nuj´ı, patˇr´ı tzv. cloudy. Zde se pod t´ımto pojem oznaˇcuj´ı sluˇzby dostupn´e prostˇrednictv´ım s´ıtˇe Internet a je moˇzn´e je d´ale dˇelit do kategori´ı, kter´e jsou pops´any v n´asleduj´ıc´ı kapitole. Jednou ze sluˇzeb poskytovan´ ych v cloudu jsou i cloudov´a u ´loˇziˇstˇe, ve kter´ ych je moˇzno uchov´avat soubory uˇzivatele. Jedn´a se o veˇrejn´e sluˇzby, kter´e jsou ˇcasto poskytov´any bezplatnˇe. Tato diplomov´a pr´ace se zamˇeˇruje na cloudov´a u ´loˇziˇstˇe a moˇznosti jejich vyuˇzit´ı na desktopov´e i mobiln´ı platformˇe. Jedn´ım z c´ıl˚ u pr´ace je prozkoumat vybran´a cloudov´a u ´loˇziˇstˇe, jejich vlastnosti a analyzovat principy jejich fungov´an´ı. Souˇca´st´ı anal´ yzy je i prozkoum´an´ı jiˇz existuj´ıc´ıch knihoven a aplikac´ı pracuj´ıc´ıch s cloudov´ ymi u ´loˇziˇsti. Pro vybran´a u ´loˇziˇstˇe pak bude vytvoˇrena aplikace, kter´a bude schopna k tˇemto u ´loˇziˇst´ım pˇristupovat a spravovat data v nich uloˇzen´a. Dalˇs´ım c´ılem je rozˇs´ıˇrit z´akladn´ı funkcionalitu o funkce usnadˇ nuj´ıc´ı pr´aci s uloˇzen´ ymi daty. Jako usnadnˇen´ı je zde uvaˇzov´an stav, kdy uˇzivatel je schopen doc´ılit stejn´eho v´ ysledku s niˇzˇs´ım poˇctem klientsk´ ych aplikac´ı, za kratˇs´ı dobu nebo vykon´an´ım niˇzˇs´ıho poˇctu u ´kon˚ u. Mezi takov´e funkce se ˇrad´ı napˇr´ıklad synchronizace sloˇzek, nahr´av´an´ı soubor˚ u na v´ıce u ´loˇziˇst’ z´aroveˇ n nebo transfer soubor˚ u mezi u ´loˇziˇsti. V´ ysledn´e aplikace by se tak mˇely svou funkcionalitou podobat jiˇz existuj´ıc´ım ˇreˇsen´ım a pˇrin´aˇset nad r´amec existuj´ıc´ıch aplikac´ı novou funkcionalitu.
1
2 Cloudov´e sluˇzby Ve spojitosti s informaˇcn´ımi technologiemi (IT) se st´ale ˇcastˇeji skloˇ nuje slovo cloud. V prvn´ı ˇradˇe je d˚ uleˇzit´e tento pojem pˇresnˇeji definovat a n´aslednˇe zav´est pojmy s n´ım spojen´e. Pot´e je moˇzno zav´est rozdˇelen´ı cloudu a urˇcit um´ıstˇen´ı cloudov´ ych u ´loˇziˇst’ v r´amci tohoto rozdˇelen´ı. Doslovn´ y pˇreklad slova cloud zn´ı oblak“. V poˇc´ıtaˇcov´e terminologii se ” t´ımto pojmem bˇeˇznˇe oznaˇcuje velk´e seskupen´ı objekt˚ u, kter´e zd´anlivˇe tvoˇr´ı jednotn´ y celek, pˇriˇcemˇz jednotliv´e prvky tohoto seskupen´ı nejsou bl´ıˇze zkoum´any. Ve sch´ematick´ ych n´akresech jsou takov´ato seskupen´ı zn´azornˇena pr´avˇe oblakem [1]. Z´akladn´ım pojmem z oblasti cloud˚ u je cloud computing. Jedn´a se o model zpˇr´ıstupnˇen´ı a poskytov´an´ı v´ ypoˇcetn´ıho v´ ykonu uˇzivatel˚ um formou sluˇzeb. Z´akladn´ı charakteristiky tohoto pˇr´ıstupu jsou n´asleduj´ıc´ı [1, 3]: • Sluˇ zba na poˇ z´ ad´ an´ı – uˇzivatel plat´ı pouze za to, co opravdu vyuˇz´ıv´a a sv´e poˇzadavky m˚ uˇze mˇenit bez nutnosti z´asahu ze strany poskytovatele sluˇzeb. ˇ alovatelnost a elasticita – umoˇzn • Sk´ ˇuje dynamicky pˇridˇelovat a odeb´ırat zdroje dle aktu´aln´ıch potˇreb uˇzivatel˚ u. • Sd´ılen´ı zdroj˚ u a n´ aklad˚ u – rovnˇeˇz oznaˇcov´ano jako multitenancy“, ” kde v´ıce uˇzivatel˚ u mezi sebou sd´ıl´ı jak zdroje, tak i n´aklady s nimi spojen´e. • Monitorov´ an´ı v´ ykonu – automatick´a spr´ava a optimalizace vyuˇz´ıv´an´ı zdroj˚ u, transparentn´ı monitorov´an´ı sluˇzby. • Dostupnost – ke sluˇzbˇe je moˇzno pˇristupovat z jak´ehokoliv m´ısta prostˇrednictv´ım Internetu. V´ yhodami pouˇz´ıv´an´ı cloudov´ ych sluˇzeb je pˇredevˇs´ım odst´ınˇen´ı uˇzivatele od probl´em˚ u spojen´ ych s provozem sluˇzby, pˇr´ıstup odkudkoliv, odolnost proti ztr´atˇe dat a rychl´e pˇrizp˚ usoben´ı potˇreb´am uˇzivatele. Mezi nev´ yhody pak patˇr´ı, ˇze uˇzivatel nev´ı, co se s jeho daty dˇeje a kde jsou fyzicky uloˇzena, d´ale tak´e z´avislost na poskytovateli sluˇzby a pˇripojen´ı k s´ıti Internet.
2
Cloudov´e sluˇzby
2.1
Rozdˇelen´ı cloudov´ych sluˇzeb
Rozdˇ elen´ı cloudov´ ych sluˇ zeb
Sluˇzby v cloudu je moˇzno rozdˇelit do nˇekolika kategori´ı v z´avislosti na u ´hlu pohledu. Pˇri pohledu na model poskytovan´ ych sluˇzeb, se uplatˇ nuje n´asleduj´ıc´ı dˇelen´ı [1]: • Infrastruktura jako sluˇ zba (IaaS) – v tomto pˇr´ıpadˇe je poskytovatelem poskytov´an pˇr´ımo hardware ˇci jeho virtualizace. Poskytovatel˚ u na t´eto u ´rovni nen´ı z pravidla mnoho a sluˇzba je urˇcena pˇrev´aˇznˇe pro spoleˇcnosti, kter´e potˇrebuj´ı rychle spustit nov´ y hardware a nechtˇej´ı ˇreˇsit probl´emy s n´ım spojen´e. • Platforma jako sluˇ zba (PaaS) – poskytov´ana je pˇredem pˇripraven´a platforma, na kter´e je moˇzno vyv´ıjet a provozovat aplikace uˇzivatele. V´ yhodou pro uˇzivatele je odst´ınˇen´ı od probl´em˚ u spojen´ ych s provozem platformy. • Software jako sluˇ zba (SaaS) – poskytovatel poskytuje jiˇz hotov´ y software. Sluˇzba na t´eto u ´rovni je zamˇeˇrena pˇredevˇs´ım na koncov´e uˇzivatele, kteˇr´ı pˇristupuj´ı pˇr´ımo k softwaru a jsou tak odst´ınˇeni od implementaˇcn´ıch detail˚ u. Toto je pouze z´akladn´ı dˇelen´ı, kter´e b´ yv´a ˇcasto rozˇs´ıˇreno o dalˇs´ı kategorie. Jednou z rozˇsiˇruj´ıc´ıch kategori´ı m˚ uˇze b´ yt napˇr´ıklad Storage as a service, kde poskytovanou sluˇzbou je pr´avˇe cloudov´e u ´loˇziˇstˇe [2]. Mezin´arodn´ı telekomunikaˇcn´ı uni´ı (ITU) jsou pak zavedeny jeˇstˇe n´asleduj´ıc´ı dvˇe kategorie: Communications as a Service, kde poskytovanou sluˇzbou je komunikace v re´aln´em ˇcase, a Network as a Service, kde je poskytov´ana konektivita [3]. Druh´ ym pohledem na cloudov´e sluˇzby je jejich rozdˇelen´ı podle zp˚ usobu nasazen´ı: • Priv´ atn´ı cloud – sluˇzba je provozov´ana pouze v r´amci organizace, at’ uˇz organizac´ı samotnou, nebo extern´ım dodavatelem. • Veˇ rejn´ y cloud – jedn´a se o model, kdy je sluˇzba nab´ıdnuta ˇsirok´e veˇrejnosti a tud´ıˇz k n´ı muˇze pˇristupovat kdokoliv.
3
Cloudov´e sluˇzby
Rozdˇelen´ı cloudov´ych sluˇzeb
• Komunitn´ı cloud – model, kdy je sluˇzba sd´ılena mezi nˇekolika organizacemi ˇci v omezen´e skupinˇe uˇzivatel˚ u. • Hybridn´ı cloud – jedn´a se o kombinaci dvou a v´ıce cloud˚ u (veˇrejn´ ych, komunitn´ıch a priv´atn´ıch), kter´e jsou mezi sebou propojeny. Tato pr´ace je zamˇeˇrena na cloudov´a u ´loˇziˇstˇe, kter´a spadaj´ı do kategorie veˇrejn´ ych cloud˚ u. Cloudov´a u ´loˇziˇstˇe je rovnˇeˇz moˇzno klasifikovat jako sluˇzby, u kter´ ych je poskytov´an jiˇz hotov´ y software, do kter´eho nem´a uˇzivatel moˇznost zasahovat (SaaS).
4
3 Cloudov´a u´loˇziˇstˇe V t´eto kapitole jsou pˇredstavena vybran´a cloudov´a u ´loˇziˇstˇe, se kter´ ymi se v dalˇs´ıch ˇc´astech pr´ace pracuje. Zamˇeˇren´ı kapitoly je pˇredevˇs´ım na z´akladn´ı vlastnosti jednotliv´ ych u ´loˇziˇst’, na moˇznosti pˇr´ıstupu k u ´loˇziˇsti pomoc´ı aplikac´ı tˇret´ıch stran a na podporu tvorby takov´ ych aplikac´ı ze strany poskytovatel˚ uu ´loˇziˇst’.
3.1
Vybran´ au ´ loˇ ziˇ stˇ e
Pro u ´ˇcely t´eto pr´ace byla vybr´ana pouze nˇekter´a z dostupn´ ych u ´loˇziˇst’. V´ ybˇer u ´loˇziˇst’ byl proveden na z´akladˇe popularity u ´loˇziˇst’ a s ohledem na dostupnost a podporu rozhran´ı pro programov´an´ı aplikac´ı (API), pˇr´ıpadnˇe bal´ıku n´astroj˚ u pro v´ yvoj aplikac´ı (SDK). Dalˇs´ım faktorem, kter´ y ovlivnil v´ ybˇer, bylo i to, ˇze u vybran´ ych u ´loˇziˇst’ je vyuˇz´ıv´ano stejn´eho zp˚ usobu pro autorizaci aplikace a v´ ymˇenu informac´ı. Ze ˇsirok´e mnoˇziny u ´loˇziˇst’ byla vybr´ana tato u ´loˇziˇstˇe: • Dropbox od spoleˇcnosti Dropbox, Inc., • Google Drive od spoleˇcnosti Google Inc., • OneDrive (p˚ uvodnˇe SkyDrive) od spoleˇcnosti Microsoft. Pro u ´plnost je nutno jeˇstˇe uv´est dalˇs´ı u ´loˇziˇstˇe, kter´a byla zkoum´ana, ale nebyla nakonec vybr´ana. Mezi hlavn´ı d˚ uvody pro vyˇrazen´ı u ´loˇziˇstˇe patˇr´ı napˇr´ıklad nedostupnost API ˇci SDK, nedostupnost API ˇci SDK pro zvolenou platformu a programovac´ı jazyk, propriet´arn´ı ˇreˇsen´ı autorizace, atp. Mezi zkouman´a a vyˇrazen´a u ´loˇziˇstˇe patˇr´ı napˇr´ıklad iCloud od spoleˇcnosti Apple Inc., SugarSync od spoleˇcnosti SugarSync, Inc., Box od spoleˇcnosti Box, Inc., Amazon Cloud Drive od spoleˇcnosti Amazon.com, Inc., Ubuntu One od spoleˇcnosti Canonical Ltd., a dalˇs´ı.
5
Cloudov´a u ´loˇziˇstˇe
3.2
Srovn´an´ı u ´loˇziˇst’
Srovn´ an´ı u ´ loˇ ziˇ st’
Kaˇzd´e z cloudov´ ych u ´loˇziˇst’ je implementov´ano jinak, liˇs´ı se zp˚ usobem poskytov´an´ı sluˇzeb, zp˚ usobem pˇr´ıstupu ke sluˇzbˇe, velikost´ı poskytovan´eho prostoru a dalˇs´ımi parametry. N´asleduje pohled na z´akladn´ı parametry u ´loˇziˇst’, jejichˇz souhrn je n´aslednˇe zachycen v tabulce 3.2.
3.2.1
Licenˇ cn´ı ujedn´ an´ı
Podm´ınkou pro uˇz´ıv´an´ı sluˇzeb cloudov´ ych u ´loˇziˇst’ je vˇzdy vytvoˇren´ı uˇzivatelsk´eho u ´ˇctu. Ned´ılnou souˇc´ast´ı procesu vytv´aˇren´ı uˇzivatelsk´eho u ´ˇctu je i odsouhlasen´ı licenˇcn´ıch podm´ınek. Licenˇcn´ı podm´ınky vˇsech u ´loˇziˇst’ si jsou velmi podobn´e. Mezi body, kter´e je vhodn´e zm´ınit, patˇr´ı napˇr´ıklad to, ˇze podm´ınky uˇz´ıv´an´ı sluˇzby se mohou kdykoliv zmˇenit. Dalˇs´ım d˚ uleˇzit´ ym bodem je, ˇze aˇckoliv uˇzivatel z˚ ust´av´a vlastn´ıkem obsahu, m˚ uˇze poskytovatel sluˇzby do jeho obsahu zasahovat. V´ yznamn´e je tak´e, ˇze poskytovatel nepˇreb´ır´a zodpovˇednost za obsah [4, 5, 6].
3.2.2
Kapacita u ´ loˇ ziˇ st’
D˚ uleˇzit´ ym parametrem, na kter´ y je tˇreba se zamˇeˇrit u jednotliv´ ych u ´loˇziˇst’, je velikost dostupn´eho prostoru pro soubory a poplatky spojen´e s poskytov´an´ım tohoto prostoru. Vˇsechna vybran´a u ´loˇziˇstˇe poskytuj´ı prostor zdarma, kter´ y je moˇzno za urˇcit´ ych podm´ınek rozˇs´ıˇrit, at’ se jedn´a o bezplatn´e nav´ yˇsen´ı prostoru na z´akladˇe nˇejak´e akce, nebo rozˇs´ıˇren´ı prostoru spojen´e s finanˇcn´ım poplatkem. Dalˇs´ım d˚ uleˇzit´ ym aspektem poskytov´an´ı prostoru je zp˚ usob, kter´ ym je onen prostor vyuˇz´ıv´an. Kaˇzd´e z vybran´ ych u ´loˇziˇst’ vyuˇz´ıv´a rezervovan´ y prostor odliˇsnˇe. Dropbox poˇc´ıt´a do celkov´eho obsazen´eho prostoru i obsah sd´ılen´ ych sloˇzek. Pokud tedy uˇzivatel´e mezi sebou sd´ıl´ı nˇejak´ y obsah, zapoˇc´ıt´av´a se jeho velikost do obsazen´eho prostoru vˇsech tˇechto uˇzivatel˚ u [7]. Google Drive vyhrazen´ y prostor sd´ıl´ı i mezi dalˇs´ı sv´e sluˇzby. Obsazen´ y prostor tak tvoˇr´ı soubory z u ´loˇziˇstˇe, emaily a uloˇzen´e konverzace sluˇzby GMail a fotografie aplikace Google+, kter´e jsou vˇetˇs´ı neˇz 2048 × 2048 pixel˚ u [8]. 6
Cloudov´a u ´loˇziˇstˇe
Srovn´an´ı u ´loˇziˇst’
Pro OneDrive nebyla zjiˇstˇena ˇza´dn´a neobvyklost ve vyuˇz´ıv´an´ı dostupn´eho prostoru ˇci v´ ypoˇctu jeho obsazen´ı. V tomto smˇeru funguje vˇse dle oˇcek´av´an´ı a vyuˇzit´ y prostor odpov´ıd´a souˇctu velikost´ı vˇsech soubor˚ uvu ´loˇziˇsti.
3.2.3
Limit velikosti soubor˚ u
Kaˇzd´e z u ´loˇziˇst’ m´a jin´e nastaven´ı limit˚ u pro soubory. Limity se t´ ykaj´ı pˇredevˇs´ım maxim´aln´ı velikosti souboru v u ´loˇziˇsti, maxim´aln´ı velikosti souboru pˇri nahr´av´an´ı pˇres klientskou aplikaci a webov´e rozhran´ı, nebo tak´e omezen´ı platn´a pro jednotliv´e typy soubor˚ u. Pro Dropbox plat´ı, ˇze maxim´aln´ı velikost souboru nahran´eho pomoc´ı desktopov´e nebo mobiln´ı aplikace nen´ı omezena. Stejnˇe tak nen´ı omezena ani maxim´aln´ı velikost souboru v u ´loˇziˇsti. Omezen´ı plat´ı pouze pro maxim´aln´ı velikost souboru nahran´eho pˇres webov´e rozhran´ı, kter´e je nastaveno na 10 GB [9]. U Dropboxu nejsou zavedeny ˇza´dn´e limity pro jednotliv´e typy soubor˚ u. Jedin´ ym limitem v tomto smˇeru je moˇznost nastaven´ı omezen´ı pˇr´ıstupu aplikace pouze k urˇcit´ ym kategori´ım soubor˚ u pˇres API. Mezi tyto kategorie patˇr´ı textov´e soubory, dokumenty, obr´azky, videa, hudba a elektronick´e knihy, a pro kaˇzdou kategorii je definov´ana mnoˇzina koncovek soubor˚ u, podle kter´ ych jsou jednotliv´e soubory do kategori´ı pˇriˇrazov´any [10]. Google Drive m´a maxim´aln´ı velikost souboru v u ´loˇziˇsti omezenou na 1 TB. Vˇetˇs´ı soubory nen´ı moˇzn´e v u ´loˇziˇsti zobrazit. Pro soubory v Google Docs form´atu plat´ı zvl´aˇstn´ı omezen´ı. Dokumenty mohou obsahovat maxim´alnˇe 1 024 000 znak˚ u a nahran´e dokumenty konvertovan´e do form´atu Google Docs nesm´ı b´ yt vˇetˇs´ı neˇz 10 MB. Pro tabulky plat´ı omezen´ı na 400 000 bunˇek a 256 sloupc˚ u. Nahran´e a konvertovan´e tabulky do Google Docs form´atu nesm´ı b´ yt vˇetˇs´ı neˇz 20 MB. Pro tabulky plat´ı jeˇstˇe nˇekolik dalˇs´ıch omezen´ı. Posledn´ım typem soubor˚ u s omezen´ım jsou prezentace, pro kter´e plat´ı, ˇze nesm´ı b´ yt vˇetˇs´ı neˇz 50 MB. Pro dokumenty, tabulky i prezentace, kter´e nejsou pˇrevedeny do Google Docs form´atu, plat´ı maxim´aln´ı velikost souboru 1 TB [11]. Maxim´aln´ı velikost souboru pro u ´loˇziˇstˇe OneDrive je 2 GB. Toto omezen´ı plat´ı i pro nahr´av´an´ı soubor˚ u, at’ uˇz pˇres webov´e rozhran´ı, nebo pˇres klientskou aplikaci. Jednotliv´e typy soubor˚ u nejsou na tomto u ´loˇziˇsti zvl´aˇst’ limitov´any [12].
7
Cloudov´a u ´loˇziˇstˇe
3.2.4
Srovn´an´ı u ´loˇziˇst’
Autorizace pˇ r´ıstupu
Pro v´ yvoj aplikac´ı je rovnˇeˇz d˚ uleˇzit´e zn´at zp˚ usob, jak´ ym je aplikaci povoleno pˇristupovat k soubor˚ um uˇzivatele. Pro pˇr´ıstup ke vˇsem vybran´ ym u ´loˇziˇst´ım je vyuˇzito OAuth 2.0 frameworku. Tento framework definuje metody, kter´ ymi je moˇzno autorizovat aplikaci pro pˇr´ıstup k dat˚ um uˇzivatele, a je pops´an v dokumentu RFC 6749 vydan´eho pod IETF. Verze OAuth 2.0 rovnˇeˇz nahrazuje pˇredchoz´ı verzi OAuth 1.0, se kterou nen´ı zpˇetnˇe kompatibiln´ı [13, 14, 15]. Autorizaˇcn´ı framework je vyuˇz´ıv´an hned z nˇekolika d˚ uvod˚ u. Jedn´ım z tˇechto d˚ uvod˚ u je zjednoduˇsen´ı pˇr´ıstupu k uloˇzen´ ym dat˚ um, zvl´aˇstˇe pak pokud se jedn´a o opakovan´e pˇr´ıstupy, mezi kter´ ymi je delˇs´ı ˇcasov´ y odstup. N´asleduje nˇekolik pˇr´ıpad˚ u, kter´e jsou autorizaˇcn´ım frameworkem ˇreˇseny. Pˇ rihlaˇ sov´ an´ı uˇ zivatele M´ame u ´loˇziˇstˇe, ke kter´emu chceme pˇristupovat. Po pˇrihl´aˇsen´ı se pomoc´ı uˇzivatelsk´eho jm´ena a hesla m˚ uˇzeme k u ´loˇziˇsti pˇristupovat po dobu platnosti vytvoˇren´eho sezen´ı. Po jeho vyprˇsen´ı se mus´ıme znovu pˇrihl´asit. Pokud ale nechceme zad´avat pˇrihlaˇsovac´ı u ´daje opakovanˇe, mus´ıme je nˇekde uloˇzit. V tomto bodˇe nast´av´a probl´em, protoˇze k uloˇzen´ ym u ´daj˚ um se potenci´alnˇe m˚ uˇze dostat neopr´avnˇen´a osoba. Nav´ıc pˇri zmˇenˇe pˇrihlaˇsovac´ıch u ´daj˚ u bude opˇet nutn´e tyto u ´daje zadat do aplikace a uloˇzit. Oba tyto probl´emy ˇreˇs´ı OAuth 2.0. Pˇrihlaˇsovac´ı u ´daje uˇzivatele jsou potˇreba jen bˇehem procesu autorizace, kter´ ym je ve vˇetˇsinˇe pˇr´ıpad˚ u nutn´e proj´ıt pouze jednou. Po u ´spˇeˇsn´e autorizaci je aplikaci pˇridˇelen pˇr´ıstupov´ y token, kter´ y je uloˇzen a vyuˇz´ıv´an pro opakovan´ y pˇr´ıstup. Spolu s pˇr´ıstupov´ ym tokenem m˚ uˇze b´ yt aplikaci pˇridˇelen i obnovovac´ı token, kter´ y slouˇz´ı pro z´ısk´an´ı nov´eho pˇr´ıstupov´eho tokenu po vyprˇsen´ı jeho platnosti. Ukl´ ad´ an´ı pˇ rihlaˇ sovac´ıch u ´ daj˚ u Dalˇs´ım bezpeˇcnostn´ım rizikem je samotn´a aplikace. Uˇzivatel nemus´ı aplikaci d˚ uvˇeˇrovat a nechce tud´ıˇz skrze aplikaci pˇred´avat pˇrihlaˇsovac´ı u ´daje vzd´alen´emu serveru. Rizikem v tomto pˇr´ıpadˇe je, ˇze aplikace m˚ uˇze pˇrihlaˇsovac´ı u ´daje zachytit a zneuˇz´ıt. Pˇri pouˇzit´ı OAuth 2.0 frameworku aplikace v ide´aln´ım pˇr´ıpadˇe v˚ ubec nepˇrijde do styku s citliv´ ymi u ´daji uˇzivatele. Doporuˇcen´ ym krokem autorizaˇc-
8
Cloudov´a u ´loˇziˇstˇe
Srovn´an´ı u ´loˇziˇst’
n´ıho procesu je autentizace uˇzivatele skrze aplikaci, kter´e uˇzivatel d˚ uvˇeˇruje, nejˇcastˇeji v´ ychoz´ı webov´ y prohl´ıˇzeˇc uˇzivatele. Veˇsker´a bezpeˇcnostn´ı rizika spojen´a s autorizac´ı aplikace jsou pops´ana v sekci 10 dokumentu RFC 6749 [13]. OAuth 2.0 framework zav´ad´ı 4 z´akladn´ı zp˚ usoby z´ısk´an´ı pˇr´ıstupu k dat˚ um uˇzivatele a moˇznost rozˇs´ıˇrit tuto mnoˇzinu o dalˇs´ı zp˚ usoby. Z t´eto mnoˇziny jsou pro dalˇs´ı ˇca´sti pr´ace d˚ uleˇzit´e pouze dva zp˚ usoby z´ısk´an´ı pˇr´ıstupu, a to sice Authorization Code Grant a Implicit Grant. Tyto dva zp˚ usoby autorizace jsou totiˇz podporov´any vˇsemi vybran´ ymi u ´loˇziˇsti.
I. Authorization code grant Tento autorizaˇcn´ı grant slouˇz´ı pro z´ısk´an´ı jak pˇr´ıstupov´eho, tak i obnovovac´ıho tokenu. Tento zp˚ usob z´ısk´an´ı pˇr´ıstupu je vhodn´ y pro klientsk´e aplikace, kter´e jsou provozov´any na stranˇe uˇzivatele. Na obr´azku 3.1 je zachycen pr˚ ubˇeh z´ısk´av´an´ı token˚ u.
Obr´azek 3.1: Authorization code grant. Pr˚ ubˇeh z´ısk´av´an´ı token˚ u je rozdˇelen do nˇekolika krok˚ u. Kroky (A), (B) a (C) jsou rozdˇeleny do dvou ˇca´st´ı z d˚ uvodu jejich pr˚ uchodu prohl´ıˇzeˇcem. • (A) – Proces je zapoˇcat t´ım, ˇze klient sestav´ı poˇzadavek na autorizaci, kter´ y vyˇsle skrz uˇzivatel˚ uv prohl´ıˇzeˇc na autorizaˇcn´ı server. Souˇca´st´ı tohoto poˇzadavku je identifik´ator klienta, poˇzadovan´ y rozsah pˇr´ıstupu, 9
Cloudov´a u ´loˇziˇstˇe
Srovn´an´ı u ´loˇziˇst’
stavov´a promˇenn´a a jednotn´ y identifik´ator zdroje (URI), na kter´ y m´a b´ yt uˇzivatel pˇresmˇerov´an po dokonˇcen´ı procesu autorizace. • (B) – Autorizaˇcn´ı server ovˇeˇr´ı identitu uˇzivatele skrz prohl´ıˇzeˇc a nab´ıdne mu moˇznost poˇzadavek klienta na autorizaci potvrdit nebo zam´ıtnout. • (C) – Autorizaˇcn´ı server pˇresmˇeruje prohl´ıˇzeˇc zpˇet na klienta. Souˇc´ast´ı URI, na kterou je prohl´ıˇzeˇc pˇresmˇerov´an, je i autorizaˇcn´ı k´od a stavov´a promˇenn´a, kter´a byla zad´ana na zaˇc´atku procesu. • (D) – Klient poˇsle poˇzadavek na z´ısk´an´ı token˚ u autorizaˇcn´ımu serveru. Souˇca´st´ı poˇzadavku je i autorizaˇcn´ı k´od z´ıskan´ y z pˇredchoz´ıho bodu a URI pro pˇresmˇerov´an´ı, kter´a byla pouˇzita pro z´ısk´an´ı autorizaˇcn´ıho k´odu. • (E) – Autorizaˇcn´ı server verifikuje poˇzadavek a pokud je v poˇra´dku, vr´at´ı klientovi pˇr´ıstupov´ y a pˇr´ıpadnˇe i obnovovac´ı token. II. Implicit grant Tento autorizaˇcn´ı grant slouˇz´ı pouze pro z´ısk´av´an´ı pˇr´ıstupov´eho tokenu a je optimalizov´an pˇredevˇs´ım pro JavaScriptov´e klienty spouˇstˇen´e pˇr´ımo v prohl´ıˇzeˇci. Oproti pˇredchoz´ımu zp˚ usobu se liˇs´ı pˇredevˇs´ım t´ım, ˇze klient nepos´ıl´a ˇz´adn´ y oddˇelen´ y poˇzadavek na z´ısk´an´ı pˇr´ıstupov´eho tokenu. Nam´ısto toho je pˇr´ıstupov´ y token souˇca´st´ı URI, na kterou je prohl´ıˇzeˇc pˇresmˇerov´an.
Obr´azek 3.2: Implicit grant.
10
Cloudov´a u ´loˇziˇstˇe
Srovn´an´ı u ´loˇziˇst’
Na obr´azku 3.2 je zachycen pr˚ ubˇeh z´ısk´av´an´ı pˇr´ıstupov´eho tokenu. Kroky (A) a (B) jsou rozdˇeleny do dvou ˇc´ast´ı z d˚ uvodu jejich pr˚ uchodu prohl´ıˇzeˇcem. • (A) – Proces je opˇet zapoˇcat t´ım, ˇze klient sestav´ı poˇzadavek na autorizaci, kter´ y vyˇsle skrz uˇzivatel˚ uv prohl´ıˇzeˇc na autorizaˇcn´ı server. Souˇca´st´ı tohoto poˇzadavku je identifik´ator klienta, poˇzadovan´ y rozsah pˇr´ıstupu, stavov´a promˇenn´a a URI pro pˇresmˇerov´an´ı po dokonˇcen´ı procesu autorizace. • (B) – Autorizaˇcn´ı server ovˇeˇr´ı identitu uˇzivatele skrz prohl´ıˇzeˇc a nab´ıdne mu moˇznost poˇzadavek klienta na autorizaci potvrdit nebo zam´ıtnout. • (C) – Autorizaˇcn´ı server pˇresmˇeruje prohl´ıˇzeˇc zpˇet na klienta. Souˇc´ast´ı fragmentu URI je i pˇr´ıstupov´ y token. • (D) – Prohl´ıˇzeˇc pokraˇcuje v pˇresmˇerov´an´ı t´ım, ˇze vyˇsle poˇzadavek na webov´ y zdroj klienta, ovˇsem bez fragmentu obsahuj´ıc´ı pˇr´ıstupov´ y token. • (E) – Od webov´eho zdroje klienta je navr´acena webov´a str´anka se skriptem, kter´ y je schopen pˇr´ıstupu k URI fragmentu. • (F) – Prohl´ıˇzeˇc vykon´a z´ıskan´ y skript a extrahuje tak pˇr´ıstupov´ y token z URI fragmentu. • (G) – Prohl´ıˇzeˇc poˇsle z´ıskan´ y pˇr´ıstupov´ y token klientovi. Vˇsechna vybran´a u ´loˇziˇstˇe podporuj´ı oba dva popsan´e zp˚ usoby z´ısk´an´ı pˇr´ıstupov´eho tokenu OAuth 2.0 frameworku. Z´ıskan´ y token je pak nutn´e pˇri kaˇzd´em poˇzadavku na u ´loˇziˇstˇe pˇred´avat. To je moˇzno prov´est tˇremi zp˚ usoby, bud’ vloˇzen´ım autorizaˇcn´ı hlaviˇcky do zas´ılan´eho poˇzadavku, vloˇzen´ım pˇr´ıstupov´eho tokenu jako parametru do tˇela poˇzadavku, nebo vloˇzen´ım jako parametru pˇr´ımo do URI poˇzadavku. Zp˚ usoby pouˇzit´ı pˇr´ıstupov´eho tokenu jsou podrobnˇeji pops´any v RFC 6750 [16].
3.2.5
Zp˚ usob v´ ymˇ eny informac´ı
Architekturou pro v´ ymˇenu dat mezi klientem a cloudov´ ym u ´loˇziˇstˇem je representational state transfer (REST). Jedn´a se o datovˇe orientovanou 11
Cloudov´a u ´loˇziˇstˇe
Srovn´an´ı u ´loˇziˇst’
architekturu urˇcenou pro pˇr´ıstup ke zdroj˚ um um´ıstˇen´ ym v distribuovan´em prostˇred´ı. Mezi vlastnosti architektury patˇr´ı n´asleduj´ıc´ı [17, 18]: • Model klient – server – Oddˇelen´ı prezentaˇcn´ı vrstvy od datov´e, kde klient m´a na starost uˇzivatelsk´e rozhran´ı, zat´ımco server pracuje s datovou vrstvou. • Bezestavovost – Poˇzadavky mus´ı obsahovat kompletn´ı sadu parametr˚ u potˇrebn´ ych pro jejich vykon´an´ı. V pˇr´ıpadˇe nutnosti uchov´avat stavov´e informace se tak dˇeje na stranˇe klienta. • Cacheable – Moˇznost ukl´adat v´ ysledky nˇekter´ ych poˇzadavk˚ u pro zv´ yˇsen´ı v´ ykonnosti syst´emu. • Vrstven´ y syst´ em – Server nemus´ı b´ yt koneˇcn´ ym serverem, ale m˚ uˇze slouˇzit jako prostˇredn´ık mezi klientem a dalˇs´ım serverem. • Code on demand – Moˇznost rozˇs´ıˇren´ı funkcionality klienta pomoc´ı k´odu zaslan´eho serverem. • Jednotn´ e rozhran´ı – Jednotn´ y pˇr´ıstup pro manipulaci s daty, kter´ y vyuˇz´ıv´a URI pro identifikaci zdroj˚ u. Nav´ıc pˇren´aˇsen´e zpr´avy mus´ı obsahovat dostatek informac´ı pro zpracov´an´ı zpr´avy. Mnoˇzina operac´ı pro manipulaci s daty je create, read, update a delete (CRUD). Tato mnoˇzina je koneˇcn´a a vˇsechny operace jsou mapov´any na metody Hypertext Transfer Protokolu (HTTP), kter´ y je pouˇz´ıv´an jako protokol pro v´ ymˇenu zpr´av. V tabulce 3.1 je mapov´an´ı operac´ı CRUD na metody HTTP [44]. Operace CRUD HTTP metody Create POST Read GET Update PUT Delete DELETE
Popis operace Vloˇzen´ı zdroje. Z´ısk´an´ı zdroje. Modifikace zdroje. Smaz´an´ı zdroje.
Tabulka 3.1: Mapov´an´ı CRUD operac´ı na HTTP metody. Syst´em, kter´ y dodrˇzuje vˇsechny principy REST architektury je moˇzn´e oznaˇcit jako RESTful. U vˇsech vybran´ ych u ´loˇziˇst’ je moˇzno vyuˇz´ıt pˇr´ım´eho pˇr´ıstupu k dat˚ um pomoc´ı CRUD operac´ı REST architektury. Pˇr´ım´ y pˇr´ıstup je podrobnˇeji pops´an v sekci 3.3.4. 12
Cloudov´a u ´loˇziˇstˇe
Srovn´an´ı u ´loˇziˇst’
Pro v´ ymˇenu dat mezi klientem a cloudov´ ym u ´loˇziˇstˇem je moˇzno vyuˇz´ıt r˚ uzn´ ych form´at˚ u dat. Form´atem vyuˇz´ıvan´ ym vˇsemi vybran´ ymi u ´loˇziˇsti je JavaScript Object Notation (JSON). Jedn´a se o textov´ y form´at dat nez´avisl´ y na programovac´ım jazyce. Tento form´at je v souˇcasn´e dobˇe pops´an dvˇema standardy, RFC 7159 [20] a ECMA-404 [21]. Standardy ECMA jsou vyd´av´any organizac´ı Ecma International, kter´a se zab´ yv´a tvorbou standard˚ u pro informaˇcn´ı a komunikaˇcn´ı syst´emy. Zkratka ECMA znaˇc´ı European Computer Manufacturers Association. Hlavn´ımi stavebn´ımi kameny form´atu JSON jsou dvojice kl´ıˇc – hodnota, kter´e jsou pouˇz´ıv´any k definici objekt˚ u, a pole hodnot. Form´at JSON definuje 6 z´akladn´ıch typ˚ u hodnot [19]. • object – Jedn´a se mnoˇzinu dvojic kl´ıˇc – hodnota, kter´a je uzavˇrena do sloˇzen´ ych z´avorek ({ a }). Jednotliv´e p´ary jsou oddˇeleny ˇca´rkou a oddˇelen´ı kl´ıˇce od hodnoty je provedeno pomoc´ı dvojteˇcky. Kl´ıˇce jsou tvoˇreny ˇretˇezcem. • array – Pole hodnot je uzavˇreno hranat´ ymi z´avorkami ([ a ]) a jednotliv´e hodnoty jsou mezi sebou oddˇeleny ˇca´rkou. ˇ ezec znak˚ • string – Retˇ u je uzavˇren do uvozovek (") a nesm´ı obsahovat znak uvozovek a zpˇetn´e lom´ıtko, kter´e slouˇz´ı jako uvozovac´ı znak ˇr´ıd´ıc´ı sekvence uvnitˇr ˇretˇezce. • number – Obecn´a ˇc´ıseln´a hodnota. • boolean – Logick´a hodnota true nebo false. • null – Pr´azdn´a hodnota. Pomoc´ı tˇechto z´akladn´ıch hodnot je moˇzno definovat prakticky jakoukoliv datovou strukturu. V´ yhodou form´atu JSON oproti jin´ ym form´at˚ um bˇeˇznˇe pouˇz´ıvan´ ym je pˇredevˇs´ım jednoduchost, ˇcitelnost a n´ızk´a m´ıra reˇzie dat. N´asleduje uk´azka z´apisu dat ve form´atu XML (k´od 3.1) a stejn´ ych dat ve form´atu JSON (k´od 3.2). Extensible markup language (XML) je zde vybr´an pˇredevˇs´ım jako uk´azka alternativn´ıho form´atu pro v´ ymˇenu dat.
13
Cloudov´a u ´loˇziˇstˇe
Srovn´an´ı u ´loˇziˇst’
< person id = " 1 " > < firstName > Philip firstName > < lastName > Black lastName > < address > < street > Somestreet street > < houseNumber >1 2 3 houseNumber > < city > Sometown city > address > < phone > < phoneNumber type = " mobile " >1 2 3 4 5 6 7 8 9 phoneNumber > < phoneNumber type = " home " >9 8 7 6 5 4 3 2 1 phoneNumber > phone > person >
K´od 3.1: Uk´azka dat ve form´atu XML. { " id " : 1 , " name " : " Philip Black " , " address " : { " street " : " Somestreet " , " house_number " : 1 2 3 , " city " : " Sometown " }, " phone " : [ { " type " : " mobile " , " number " : 1 2 3 4 5 6 7 8 9 }, { " type " : " home " , " number " : 9 8 7 6 5 4 3 2 1 } ] }
K´od 3.2: Uk´azka dat ve form´atu JSON.
14
Cloudov´a u ´loˇziˇstˇe
Dostupn´a API a SDK
Dropbox prostoru 2 GB
Velikost zdarma Maxim´aln´ı velikost souboru v u ´loˇziˇsti Maxim´aln´ı velikost souboru nahran´eho aplikac´ı Maxim´aln´ı velikost souboru nahran´eho pˇres webov´e rozhran´ı Autorizace Komunikaˇcn´ı architektura Komunikaˇcn´ı protokol Form´at zpr´av ∗
Google Drive OneDrive 15 GB 7 GB
neomezen´a∗
1 TB
2 GB
neomezen´a∗
1 TB
2 GB
10 GB
1 TB
2 GB
OAuth 1.0, 2.0 REST
OAuth 2.0 REST
OAuth 2.0 REST
HTTP JSON
HTTP JSON
HTTP JSON
) Soubor nem˚ uˇze b´ yt vˇetˇs´ı neˇz dostupn´a kapacita u ´loˇziˇstˇe.
Tabulka 3.2: Srovn´an´ı cloudov´ ych u ´loˇziˇst’.
3.3
Dostupn´ a API a SDK
Kaˇzd´e z vybran´ ych u ´loˇziˇst’ nab´ız´ı v´ yvoj´aˇr˚ um vlastn´ı API nebo SDK pro v´ yvoj aplikac´ı. API ˇci SDK jsou ve vˇsech pˇr´ıpadech dostupn´e pro r˚ uzn´e programovac´ı jazyky a r˚ uzn´e platformy. D´ale pak existuj´ı API a SDK tˇret´ıch stran, kter´e je pro v´ yvoj rovnˇeˇz moˇzno pouˇz´ıt. API a SDK tˇret´ıch stran jsou ve vˇetˇsinˇe pˇr´ıpad˚ u dostupn´e pro kombinace programovac´ıch jazyk˚ u a platforem, kter´e ofici´aln´ı distribuce nepokr´ yv´a.
3.3.1
Z´ akladn´ı porovn´ an´ı
Pro v´ yvoj aplikac´ı pro u ´loˇziˇstˇe Dropbox jsou dostupn´e knihovny pro programovac´ı a skriptovac´ı jazyky Python, Ruby, PHP a Java. D´ale jsou dostupn´e knihovny pro v´ yvoj na mobiln´ıch platform´ach Android a iOS, a tak´e pro platformu OS X. Mimo tyto ofici´aln´ı knihovny jsou dostupn´e i knihovny tˇret´ıch stran pro jazyky C++, C#, JavaScript, a dalˇs´ı [22]. 15
Cloudov´a u ´loˇziˇstˇe
Dostupn´a API a SDK
Pro Google Drive jsou dostupn´e knihovny pro rodinu jazyk˚ u .NET, jazyky Java, JavaScript, Objective-C, PHP, Python, Go, Ruby, a dalˇs´ı [23]. Pro OneDrive jsou dostupn´a SDK pro v´ yvoj na mobiln´ıch platform´ach iOS, Android a Windows Phone. D´ale je t´eˇz podporov´an v´ yvoj pro Windows a .NET [24].
3.3.2
Dostupn´ a dokumentace
Pro kaˇzdou ofici´aln´ı API knihovnu nebo SDK bal´ık je dostupn´a online dokumentace. Nav´ıc jsou z ofici´aln´ıch zdroj˚ u dostupn´e i pˇr´ıklady k´odu pro vybran´e jazyky a platformy. Google Drive a OneDrive nad r´amec bˇeˇzn´e dokumentace jeˇstˇe poskytuj´ı interaktivn´ı webov´e rozhran´ı, pomoc´ı kter´eho je moˇzno vyzkouˇset si kl´ıˇcov´e koncepty v praxi. Google Drive toto rozhran´ı zobrazuje pro kaˇzdou ˇc´ast dokumentace API, zat´ımco OneDrive toto interaktivn´ı rozˇs´ıˇren´ı z dokumentace vyˇclenil[25]. Dropbox nab´ız´ı pˇr´ıklady a dokumentaci pro jednotliv´e knihovny a zvl´aˇst’ pak ucelenou dokumentaci popisuj´ıc´ı vˇsechny z´akladn´ı koncepty implementovan´e u ´loˇziˇstˇem [22, 27]. U u ´loˇziˇstˇe Google Drive je dokumentace rozdˇelena do nˇekolika ˇca´st´ı. Principy autorizace jsou pops´any v ˇc´asti Authorize Requests, zat´ımco ˇ ast API Reference z´akladn´ı koncepty u ´loˇziˇstˇe jsou v ˇca´sti Developer Guide. C´ pak popisuje jednotliv´e ˇca´sti API, kter´e je moˇzno si prostˇrednictv´ım interaktivn´ıho rozhran´ı i vyzkouˇset [23, 28]. ´ ziˇstˇe OneDrive m´a rovnˇeˇz rozdˇelenou dokumentaci do v´ıce ˇc´ast´ı. Uloˇ Z´akladn´ı principy pro pˇr´ıstup k u ´loˇziˇsti [26], dokumentace API, interaktivn´ı SDK a uk´azkov´e pˇr´ıklady jsou tak oddˇeleny. Nˇekter´e ˇc´asti dokumentace jsou duplikov´any na v´ıce m´ıstech. Toto plat´ı napˇr´ıklad pro dokumentaci pˇr´ım´eho pˇr´ıstupu k u ´loˇziˇsti pomoc´ı RESTu, kter´a je pops´ana jednak jako souˇc´ast dokumentace API [29], a pak tak´e zvl´aˇst’ na nˇekolika m´ıstech [30, 31].
3.3.3
N´ ahled do obsahu knihoven
Knihovny pro pˇr´ıstup k u ´loˇziˇst´ım je moˇzno dekomponovat do nˇekolika element´arn´ıch ˇca´st´ı. Pro tuto pr´aci maj´ı velk´ y v´ yznam pˇredevˇs´ım ˇc´asti pro 16
Cloudov´a u ´loˇziˇstˇe
Dostupn´a API a SDK
autorizaci a pˇrenos zpr´av a soubor˚ u. Pˇri bliˇzˇs´ım pr˚ uzkumu knihoven pro Dropbox byly zkoum´any verze 1.5.3 a 1.7.6 pro Javu a verze 1.5.3 a 1.6.1 pro Android. Knihovna verze 1.5.3 pro Javu vyuˇz´ıv´a autorizace pomoc´ı OAuth 1.0, HTTP klienta od Apache [33] pro komunikaci a knihovny JSON.simple [34] pro zpracov´an´ı pˇred´avan´ ych zpr´av. Oproti tomu verze 1.7.6 jiˇz podporuje autorizaci pomoc´ı OAuth 2.0, vyuˇz´ıv´a standardn´ıho zabezpeˇcen´eho HTTP spojen´ı, kter´e je souˇc´ast´ı Javy, pro komunikaci a knihovny Jackson [35] pro zpracov´an´ı zpr´av. U verz´ı knihoven pro Android doˇslo rovnˇeˇz k pˇrechodu od autorizace pomoc´ı OAuth 1.0 k OAuth 2.0, kde OAuth 1.0 z˚ ust´av´a nad´ale podporov´an. Pro komunikaci slouˇz´ı HTTP klient od Apache [33] a pro zpracov´an´ı zpr´av knihovna JSON.simple [34]. Pro Google Drive je dostupn´a jednotn´a Java knihovna pro desktopov´e aplikace i platformu Android. Zkoum´ana byla verze knihovny 1.18.0-rc. Obsahem t´eto knihovny je mnoho knihoven, kter´e zajiˇst’uj´ı kompatibilitu knihovny s r˚ uzn´ ymi platformami. Knihovnu je tak moˇzno vyuˇz´ıt nejen pro Javu na desktopu a Android, ale i pro Google App Engine a pro servletov´e aplikace. Pro zpracov´an´ı zpr´av je moˇzno vyuˇz´ıt bud’ knihovny GSON, kter´a je implementac´ı JSON form´atu od spoleˇcnosti Google, knihovnu Jackson nebo Java Data Objects (JDO), kter´e jsou souˇca´st´ı Javy. Pro komunikaci je moˇzno vyuˇz´ıt r˚ uzn´ ych HTTP klient v z´avislosti na pouˇz´ıvan´e platformˇe. K dispozici je napˇr´ıklad HTTP klient od Apache nebo HTTP klient, kter´ y je souˇc´ast´ı Javy. Pro OneDrive je pro v´ yvoj desktopov´ ych aplikac´ı dostupn´a pouze knihovna v jazyce C#. Pro platformu Android byla zkoum´ana knihovna ve verzi 5.5, kter´a vyuˇz´ıv´a pro komunikaci HTTP klienta od Apache, kter´ y je souˇc´ast´ı platformy Android. Pro zpracov´an´ı zpr´av je rovnˇeˇz vyuˇzito dostupn´ ych prostˇredk˚ u platformy, kterou je v´ ychoz´ı implementace org.json [19]. Pohled na knihovnu pro C# je zaj´ımav´ y z hlediska autorizaˇcn´ıho procesu, bˇehem kter´eho je oproti ostatn´ım ˇreˇsen´ım vyuˇz´ıv´ano webov´eho prohl´ıˇzeˇce, kter´ y je komponentou .NET frameworku. Pˇri podrobnˇejˇs´ım pohledu na obsah knihovny je tak´e d˚ uleˇzit´e pod´ıvat se na licenˇcn´ı ujedn´an´ı, kter´e je z pravidla jej´ı souˇca´st´ı. Dropbox i OneDrive distribuuj´ı knihovnu pod vlastn´ı licenc´ı, zat´ımco Google Drive pouˇz´ıv´a licenci Apache verze 2.0 [32].
17
Cloudov´a u ´loˇziˇstˇe
3.3.4
Existuj´ıc´ı aplikace
Pˇ r´ım´ y pˇ r´ıstup
Ke kaˇzd´emu z vybran´ ych u ´loˇziˇst’ je moˇzn´e pˇristupovat i pˇr´ımo bez vyuˇzit´ı nˇekter´e z dostupn´ ych knihoven. Kaˇzd´e z u ´loˇziˇst’ m´a tuto moˇznost dobˇre zdokumentovanou. Pro kaˇzdou operaci jsou poskytov´any informace o HTTP poˇzadavku, kter´ y m´a b´ yt u ´loˇziˇsti zasl´an, parametrech a tˇele tohoto poˇzadavku, odpovˇedi serveru na tento poˇzadavek a chybov´ ych k´odech. Kaˇzd´e u ´loˇziˇstˇe m´a toto rozhran´ı pro pˇr´ıstup odliˇsn´e. Pro Dropbox a Google Drive je toto rozhran´ı popsan´e v r´amci dostupn´e dokumentace [27, 28]. OneDrive m´a rozhran´ı pro pˇr´ım´ y pˇr´ıstup pops´ano tˇremi dokumenty, z toho se kaˇzd´ y zab´ yv´a odliˇsn´ ymi aspekty pˇr´ıstupu [29, 30, 31]. Hlavn´ımi rozd´ıly mezi implementacemi jsou pouˇzit´e metody protokolu HTTP, d´ale pak zas´ılan´e parametry a pˇrij´ıman´e odpovˇedi od server˚ u. Vˇsechna u ´loˇziˇstˇe vyuˇz´ıvaj´ı standardn´ıch HTTP metod specifikovan´ ych v RFC 2616 – GET, POST, PUT a DELETE [44]. Pro nˇekter´e operace ovˇsem vyuˇz´ıvaj´ı r˚ uzn´a u ´loˇziˇstˇe r˚ uzn´ ych HTTP metod. Google Drive nav´ıc vyuˇz´ıv´a jeˇstˇe metody PATCH, kter´a je definov´ana v RFC 2068, kter´e je jiˇz zastaral´e [28, 45]. Pro OneDrive jsou definov´any a vyuˇz´ıv´any dvˇe nestandardn´ı metody – COPY a MOVE. Jak jiˇz jejich n´azev napov´ıd´a, slouˇz´ı pro kop´ırov´an´ı a pˇresun soubor˚ u v r´amci u ´loˇziˇstˇe [29].
3.4
Existuj´ıc´ı aplikace
Pro kaˇzd´e z vybran´ ych u ´loˇziˇst’ existuje cel´a ˇrada aplikac´ı, kter´e poskytuj´ı pˇr´ıstup k soubor˚ um v u ´loˇziˇst´ıch. Aplikace je moˇzno rozdˇelit podle nˇekolika krit´eri´ı. Jedn´ım z krit´eri´ı je vydavatel aplikace. Aplikace je tak moˇzno rozdˇelit na ty, kter´e dod´av´a pˇr´ımo poskytovatel u ´loˇziˇstˇe, a ty, kter´e jsou vyd´av´any nˇek´ ym jin´ ym (klienti tˇret´ıch stran). Dalˇs´ım krit´eriem dˇelen´ı m˚ uˇze b´ yt napˇr´ıklad platforma, pro kterou jsou aplikace urˇceny, nebo mnoˇzina u ´loˇziˇst’, ke kter´ ym je moˇzno pomoc´ı zvolen´e aplikace pˇristupovat.
3.4.1
Nativn´ı klienti
Jako nativn´ı klienti jsou zde oznaˇcov´any klientsk´e aplikace poskytovan´e pˇr´ımo k u ´loˇziˇsti. Tyto aplikace pracuj´ı na principu synchronizace lok´aln´ı sloˇzky. Po instalaci klienta se vytvoˇr´ı v lok´aln´ım souborov´em syst´emu sloˇzka 18
Cloudov´a u ´loˇziˇstˇe
Existuj´ıc´ı aplikace
urˇcen´a pro synchronizaci. Obsah t´eto sloˇzky je automaticky synchronizov´an s obsahem u ´loˇziˇstˇe. Plat´ı zde pravidlo, ˇze obsah cloudov´eho u ´loˇziˇstˇe m´a pˇrednost pˇred obsahem lok´aln´ı sloˇzky. Toto chov´an´ı je patrn´e napˇr´ıklad v situaci, kdy vznikne konflikt mezi lok´aln´ım souborem a souborem v u ´loˇziˇsti. Ve v´ ysledku je zachov´an vzd´alen´ y soubor beze zmˇeny, zat´ımco lok´aln´ı soubor je pˇrejmenov´an. Jednou z dalˇs´ıch vlastnost´ı, kter´a je podporov´ana u klientsk´ ych aplikac´ı poskytovan´ ych k u ´loˇziˇsti, je moˇznost v´ ybˇeru sloˇzek, kter´e se synchronizuj´ı. Na lok´aln´ı u ´loˇziˇstˇe se tak nestahuje kompletn´ı obsah u ´loˇziˇstˇe, ale jen vybran´e sloˇzky. Je nutno rovnˇeˇz zm´ınit, ˇze u tˇechto aplikac´ı je moˇzn´e se pˇripojit pouze k jednomu u ´ˇctu dan´eho u ´loˇziˇstˇe. Rovnˇeˇz je moˇzno z´ıskat klientsk´e aplikace i pro mobiln´ı platformy.
3.4.2
Klienti tˇ ret´ıch stran
Existuje cel´a ˇrada klientsk´ ych aplikac´ı tˇret´ıch stran, kter´e pracuj´ı s cloudov´ ymi u ´loˇziˇsti. Nˇekter´e aplikace je moˇzno st´ahnout a nainstalovat na poˇc´ıtaˇc ˇci mobiln´ı platformu, jin´e jsou koncipov´any pouze jako webov´a sluˇzba. V´ yhodami tˇechto aplikac´ı oproti aplikac´ım poskytovan´ ych spolu ˇ s u ´loˇzn´ ym prostorem je pˇredevˇs´ım rozˇs´ıˇren´a funkcionalita. Casto se jedn´a pr´avˇe o sdruˇzen´ı v´ıce u ´loˇziˇst’ pod jednu aplikaci. Desktopov´ e aplikace Mezi pˇr´ıklady desktopov´ ych aplikac´ı patˇri SME Cloud Explorer nebo CarotDAV. Druh´a zm´ınˇen´a aplikace je jednoduch´ ym n´astrojem pro spr´avu soubor˚ u ve v´ıce u ´loˇziˇst´ıch. Z rozˇsiˇruj´ıc´ıch funkcionalit disponuje napˇr´ıklad moˇznost´ı pˇr´ıstupu k soubor˚ um pomoc´ı protokolu pro pˇrenos soubor˚ u (FTP), ˇsifrov´an´ım soubor˚ u nebo moˇznost´ı komprese a automatick´eho rozdˇelen´ı souboru [36]. Aplikace SME Cloud Explorer podporuje pˇrenos soubor˚ u mezi u ´loˇziˇsti, ˇsifrov´an´ı nebo zamyk´an´ı soubor˚ u. Nad r´amec tohoto je aplikace propojena s webovou sluˇzbou a je moˇzno z´ıskat i klienty pro mobiln´ı platformy. Transfer soubor˚ u mezi u ´loˇziˇsti je tak realizov´an prostˇrednictv´ım webov´e sluˇzby [37].
19
Cloudov´a u ´loˇziˇstˇe
Existuj´ıc´ı aplikace
Webov´ e sluˇ zby Dostupn´ ych webov´ ych sluˇzeb je velk´e mnoˇzstv´ı. Zde jsou vyjmenov´any pouze nˇekter´e. Tyto sluˇzby maj´ı spoleˇcn´e hlavnˇe to, ˇze dok´aˇz´ı pˇristupovat k r˚ uzn´ ym cloudov´ ym u ´loˇziˇst´ım. Webov´e sluˇzby sdruˇzuj´ıc´ı cloudov´a u ´loˇziˇstˇe je moˇzn´e d´ale rozdˇelit podle principu jejich fungov´an´ı. Existuj´ı tak sluˇzby zamˇeˇren´e na spr´avu soubor˚ u, sluˇzby orientovan´e na dokumenty, synchroniˇ zaˇcn´ı sluˇzby, a dalˇs´ı. Cast´ ym prvkem je pak i propojen´ı sluˇzby se soci´aln´ımi s´ıtˇemi a webov´ ymi sluˇzbami pro spr´avu fotografi´ı. Mezi spr´avce soubor˚ u patˇr´ı napˇr´ıklad sluˇzby CloudKaf´e, Jolidrive, primadesk a MultCloud. Vˇsechny tyto sluˇzby vyˇzaduj´ı registraci pro uˇz´ıv´an´ı. Mezi sebou se pak liˇs´ı pˇredevˇs´ım m´ırou zpoplatnˇen´ı a funkcemi, kter´e nab´ız´ı. Vˇsechny tyto sluˇzby podporuj´ı transfer soubor˚ u mezi u ´loˇziˇsti [38, 39, 40, 41]. Sluˇzba cloudHQ je pak online synchronizaˇcn´ım klientem. Stejnˇe jako u ostatn´ıch sluˇzeb, i zde je potˇreba registrace pˇred moˇznost´ı uˇz´ıv´an´ı sluˇzby. Ve sluˇzbˇe je pak moˇzn´e nastavit smˇer, kter´ ym bude synchronizace prob´ıhat [42]. Posledn´ı zaj´ımavou sluˇzbou je IFTTT. Tato sluˇzba se od ostatn´ıch zde vyjmenovan´ ych sluˇzeb podstatnˇe liˇs´ı. Nen´ı zde totiˇz nab´ıdnuta klasick´a spr´ava soubor˚ u, ale moˇznost vytvoˇren´ı spouˇstˇeˇc˚ u a pˇriˇrazen´ı k nim nˇejak´e akce. Touto sluˇzbou je napˇr´ıklad podporov´ano sledov´an´ı obsahu u ´loˇziˇstˇe Dropbox, kde pˇri nahr´an´ı nov´eho souboru m˚ uˇze b´ yt tento soubor nakop´ırov´an i na dalˇs´ı u ´loˇziˇstˇe [43].
20
4 N´avrh knihovny Pro implementaci jednotn´eho pˇr´ıstupu k v´ıce u ´loˇziˇst´ım z´aroveˇ n je moˇzno vyuˇz´ıt existuj´ıc´ı knihovny poskytovan´e u ´loˇziˇsti. Stejnˇe tak je ale moˇzn´e zvolit vlastn´ı ˇreˇsen´ı a vytvoˇrit jednotnou knihovnu pro pˇr´ıstup k vybran´ ym cloudov´ ym u ´loˇziˇst´ım. V t´eto kapitole je od˚ uvodnˇena volba ˇreˇsen´ı, po kter´e n´asleduje anal´ yza kl´ıˇcov´ ych aspekt˚ u a n´avrh implementace zvolen´eho ˇreˇsen´ı.
4.1
Volba vlastn´ıho ˇ reˇ sen´ı
Po anal´ yze dostupn´ ych knihoven pro pˇr´ıstup ke cloudov´ ym u ´loˇziˇst´ım bylo rozhodnuto o vytvoˇren´ı vlastn´ı knihovny sjednocuj´ıc´ı pˇr´ıstup. Motivac´ı pro tuto volbu byla moˇznost implementace rozˇsiˇruj´ıc´ıch funkc´ı na niˇzˇs´ı u ´rovni, potenci´aln´ı sn´ıˇzen´ı velikosti knihovny, lepˇs´ı moˇznost znovupouˇzitelnosti komponent knihovny, nez´avislost na knihovn´ach dod´avan´ ych provozovateli u ´loˇziˇst’ a implementace knihovny umoˇzn ˇuj´ıc´ı snadn´e rozˇs´ıˇren´ı na dalˇs´ı cloudov´a u ´loˇziˇstˇe. Zvolenou mobiln´ı platformou pro implementaci je Android. Pro desktopovou aplikaci byla zvolena implementace v programovac´ım jazyce Java. V´ ystupem implementaˇcn´ıho procesu by mˇela b´ yt knihovna pouˇziteln´a jak pro desktopovou aplikaci, tak i pro mobiln´ı platformu.
4.2
Poˇ zadovan´ a funkcionalita
V prvn´ı ˇradˇe je potˇreba aby knihovna mohla zah´ajit proces autorizace a z´ıskat pˇr´ıstupov´e tokeny po jeho skonˇcen´ı. Dalˇs´ım d˚ uleˇzit´ ym aspektem je podpora z´akladn´ıch operac´ı se soubory a sloˇzkami. C´ılem je tak vytvoˇren´ı jednotn´eho rozhran´ı pro vˇsechna u ´loˇziˇstˇe. Pod jednotn´e rozhran´ı spad´a nejen jednotn´e vol´an´ı operac´ı nad u ´loˇziˇsti, ale tak´e sjednocen´ı form´at˚ u dat z´ısk´avan´ ych z u ´loˇziˇst’, kter´e zahrnuj´ı metadata soubor˚ u a sloˇzek, informace o uˇzivateli a u ´loˇziˇsti, a chybov´a hl´aˇsen´ı. N´asleduje n´avrh a implementace rozˇs´ıˇren´e funkcionality.
21
N´avrh knihovny
4.3
Proces autorizace
Proces autorizace
Pro implementaci byly zvoleny autorizaˇcn´ı procesy authorization code grant a implicit grant. Tyto dva autorizaˇcn´ı procesy jsou podporov´any vˇsemi vybran´ ymi u ´loˇziˇsti, pˇriˇcemˇz prvn´ı zm´ınˇen´ y se vyuˇz´ıv´a hlavnˇe pro instalovan´e klientsk´e aplikace. Druh´ y zm´ınˇen´ y proces je vyuˇz´ıv´an pˇrev´aˇznˇe pro webov´e sluˇzby. Pro vyˇsˇs´ı m´ıru znovupouˇzitelnosti v´ ysledn´e knihovny byla zvolena implementace i tohoto procesu autorizace. Proces autorizace je pops´an v sekci 3.2.4. Pro maxim´aln´ı komfort uˇzivatele se zachov´an´ım vysok´e m´ıry bezpeˇcnosti jsem pˇri n´avrhu vych´azel ze sekce 9 dokumentu RFC 6749. Pro d˚ uvˇeryhodnost aplikace je tak zvoleno otevˇren´ı okna v´ ychoz´ıho prohl´ıˇzeˇce bˇehem autorizaˇcn´ıho procesu [13]. Pro vyˇsˇs´ı komfort je zvoleno pouˇzit´ı lok´aln´ıho webov´eho serveru pro odchyt´av´an´ı zpˇetn´eho pˇresmˇerov´an´ı po autorizaci aplikace. V´ ysledn´ y proces pro authorization code grant je zn´azornˇen na obr´azku 4.1.
Obr´azek 4.1: Implementace procesu pro authorization code grant. • (A) – Uˇzivatel spust´ı proces autorizace aplikace. • (B) – Aplikace pˇresmˇeruje uˇzivatele na autorizaˇcn´ı server u ´loˇziˇstˇe t´ım, ˇze vyvol´a nov´e okno uˇzivatelova v´ ychoz´ıho prohl´ıˇzeˇce. • (C) – Uˇzivatel provede pˇrihl´aˇsen´ı k u ´loˇziˇsti skrze okno prohl´ıˇzeˇce, tud´ıˇz aplikace nem´a pˇr´ıstup k pˇrihlaˇsovac´ım u ´daj˚ um uˇzivatele. 22
N´avrh knihovny
Proces autorizace
• (D) – Uˇzivatel provede autorizaci aplikace. • (E) – Uˇzivatel je pˇresmˇerov´an z webov´eho rozhran´ı u ´loˇziˇstˇe na adresu webov´eho serveru aplikace. • (F) – Aplikace zpracuje pˇrijat´a data od u ´loˇziˇstˇe a zobraz´ı uˇzivateli webovou str´anku s v´ ysledkem autorizace. • (G) – V pˇr´ıpadˇe u ´spˇeˇsn´e autorizace provede aplikace v´ ymˇenu autorizaˇcn´ıho k´odu za pˇr´ıstupov´ y token. Aby nebylo nutn´e rezervovat lok´aln´ı port pro webov´ y server, bylo zvoleno naslouch´an´ı na n´ahodn´em portu pˇridˇelen´eho syst´emem. Probl´emem v tomto bodˇe je pˇredevˇs´ım to, ˇze podle sekce 10.6. RFC 6749 je autorizaˇcn´ı server povinen m´ıt zaregistrov´any URI pro pˇresmˇerov´an´ı [13]. Kaˇzd´e z vybran´ ych u ´loˇziˇst’ se k tomuto bodu stav´ı trochu odliˇsnˇe. Dropbox povoluje lok´aln´ı server, ale je nutno registrovat kaˇzd´ y port zvl´aˇst’, Google Drive rovnˇeˇz povoluje lok´aln´ı server, ovˇsem ˇc´ısla port˚ u neˇreˇs´ı, a OneDrive v˚ ubec nerozpozn´a adresu lok´aln´ıho serveru (localhost ani 127.0.0.1) a vyˇzaduje tak pˇresmˇerov´an´ı na dom´enu, kter´a je v r´amci registrovan´ ych aplikac´ı pro OneDrive unik´atn´ı. Pro vyvarov´an´ı se probl´em˚ um s autorizaˇcn´ım procesem bylo zvoleno pˇresmˇerov´an´ı pomoc´ı skriptu hypertextov´eho preprocesoru (PHP) na dom´enˇe 3. ˇra´du https://home.zcu.cz. Aby bylo moˇzn´e poˇzadavek u ´spˇeˇsnˇe pˇresmˇerovat, je potˇreba zn´at ˇc´ıslo lok´aln´ıho portu, na kter´ y se m´a pˇresmˇerov´an´ı prov´est. Pro vyˇreˇsen´ı t´eto obt´ıˇze je vyuˇzito promˇenn´e state, kter´a slouˇz´ı v autorizaˇcn´ım procesu jako prevence cross-site request forgery (CSRF) u ´toku popsan´eho v sekci 10.12. RFC 6749 [13]. Aby tato promˇenn´a co nejl´epe plnila sv˚ uj u ´ˇcel, je prvn´ı ˇca´st promˇenn´e tvoˇrena ˇc´ıslem lok´aln´ıho portu, po kter´em n´asleduje pomlˇcka a s´erie n´ahodn´ ych znak˚ u. Pˇri pouˇzit´ı tohoto form´atu je moˇzn´e ˇc´ıslo portu jednoduˇse z´ıskat zpˇet. Implementace procesu pro implicit grant je podobn´a jako pro authorization code grant a je zachycena na obr´azku 4.2. Hlavn´ım probl´emem je v tomto pˇr´ıpadˇe, kromˇe jiˇz vyˇreˇsen´ ych, extrahov´an´ı pˇr´ıstupov´eho tokenu z URI fragmentu. Pro tento u ´ˇcel poslouˇz´ı opˇet jiˇz zm´ınˇen´ y PHP skript, kter´ y vr´at´ı uˇzivateli jednoduchou webovou str´anku s JavaScriptem pro z´ısk´an´ı ´ pˇr´ıstupov´eho tokenu. Ukolem JavaScriptu je tedy z´ısk´an´ı pˇr´ıstupov´eho tokenu z URI fragmentu a pˇresmˇerov´an´ı uˇzivatele na lok´aln´ı webov´ y server klienta, kter´emu bude pˇr´ıstupov´ y token pˇred´an jako parametr URI. 23
N´avrh knihovny
Proces autorizace
Obr´azek 4.2: Implementace procesu pro implicit grant.
• (A) aˇz (D) – shodn´e s popisem procesu pro authorization code grant. • (E) – Uˇzivatel je pˇresmˇerov´an na PHP skript, kter´ y dod´a uˇzivateli JavaScript pro extrahov´an´ı pˇr´ıstupov´eho tokenu z URI fragmentu. • (F) – Uˇzivatel je pˇresmˇerov´an na adresu webov´eho serveru aplikace, v tuto chv´ıli jiˇz s extrahovan´ ym pˇr´ıstupov´ ym tokenem. • (G) – Aplikace zpracuje pˇrijat´a data a zobraz´ı uˇzivateli webovou str´anku s v´ ysledkem autorizace. Ostatn´ı granty nen´ı nutn´e pro spr´avn´e fungov´an´ı aplikace implementovat. Vybran´a u ´loˇziˇstˇe vyuˇz´ıvaj´ı authorization code grant a implicit grant pro autorizaci. Na co je ovˇsem nutn´e se zamˇeˇrit je ukl´ad´an´ı pˇr´ıstupov´ ych a obnovovac´ıch token˚ u. Podle sekc´ı 10.3. a 10.4. dokumentu RFC 6749, vydan´e tokeny mus´ı b´ yt bezpeˇcnˇe pˇren´aˇseny a uchov´av´any [13]. Pˇrenos token˚ u ˇreˇs´ı zabezpeˇcen´e spojen´ı, ale pro uchov´av´an´ı token˚ u je potˇreba navrhnout zp˚ usob pro jejich uloˇzen´ı. Pro ukl´ad´an´ı token˚ u je potˇreba zvolit nˇejak´ y zp˚ usob ˇsifrov´an´ı. Na v´ ybˇer je zde ˇsifrov´an´ı se symetrick´ ym nebo s asymetrick´ ym kl´ıˇcem. V´ yhodou symetrick´eho kl´ıˇce je, ˇze stejn´ ym kl´ıˇcem se provede zaˇsifrov´an´ı token˚ u i jejich n´asledn´e deˇsifrov´an´ı. Pro asymetrick´ y kl´ıˇc jsou potˇreba dva kl´ıˇce, veˇrejn´ y kl´ıˇc 24
N´avrh knihovny
Proces autorizace
pro zaˇsifrov´an´ı token˚ u a priv´atn´ı kl´ıˇc pro deˇsifrov´an´ı. Vzhledem k tomu, ˇze bude pˇristupov´ano k token˚ um v´ yhradnˇe skrze aplikaci, bude lepˇs´ı volbou ˇsifrov´an´ı se symetrick´ ym kl´ıˇcem. Implementace pak m˚ uˇze bud’ vyuˇz´ıt pˇredem nastaven´ y v´ ychoz´ı kl´ıˇc, nebo poˇzadovat po uˇzivateli zad´an´ı kl´ıˇce (hesla) [47]. Pro ˇsifrov´an´ı se symetrick´ ym kl´ıˇcem existuje cel´a ˇrada algoritm˚ u, ze kter´ ych je moˇzno vyb´ırat. Mezi nejzn´amˇejˇs´ı patˇr´ı [47]: • AES (Advanced Encryption Standard), • Blowfish, • DES (Data Encryption Standard) a jeho varianty, • Serpent, • Twofish, • a mnoho dalˇs´ıch. Hlavn´ımi krit´erii volby algoritmu byla dostupnost implementace algoritmu pro Javu, nejl´epe jiˇz zakomponovan´a pˇr´ımo v Javˇe samotn´e, a bezpeˇcnost algoritmu. Z v´ yˇse zm´ınˇen´ ych byl nakonec zvolen algoritmus AES. Jedn´a se o blokovou ˇsifru s velikost´ı bloku 128 bit˚ u a d´elkou kl´ıˇce 128, 192 nebo 256 bit˚ u [48, 49]. Jako dalˇs´ı bylo potˇreba zvolit m´od, ve kter´em bude algoritmus pracovat. Na v´ ybˇer byly m´ody Electronic Codebook (ECB), Cipher block chaining (CBC), Output feedback mode (OFB) a Counter mode (CTR), z ˇcehoˇz posledn´ı dva m´ody vyˇzaduj´ı pˇrevod blokov´e ˇsifry na proudovou [50, 51]. Po prostudov´an´ı dostupn´ ych m´od˚ u a jejich vlastnost´ı byl nakonec zvolen m´od CBC. M´od CBC vyuˇz´ıv´a zˇretˇezen´ı blok˚ u pˇri ˇsifrov´an´ı a odstraˇ nuje t´ım nev´ yhody m´odu ECB. V obr´azku 4.3 je pak zn´azornˇeno ˇsifrov´an´ı token˚ u pomoc´ı symetrick´eho kl´ıˇce.
Obr´azek 4.3: Symetrick´e ˇsifrov´an´ı token˚ u.
25
N´avrh knihovny
4.4
Metadata
Metadata
Z´akladem jednotn´eho pˇr´ıstupu k u ´loˇziˇst´ım je sjednocen´ı metadat soubor˚ u a sloˇzek. Kaˇzd´e z u ´loˇziˇst’ popisuje soubory a sloˇzky jin´ ymi metadaty, kter´a vrac´ı uˇzivateli ve form´atu JSON. Prvn´ım u ´kolem tedy bylo vyhled´an´ı shodn´ ych rys˚ u metadat ze vˇsech u ´loˇziˇst’. K tomuto u ´ˇcelu slouˇz´ı tabulka 4.1, kter´a zachycuje nˇekter´a vybran´a metadata. Ve sloupc´ıch pro jednotliv´a u ´loˇziˇstˇe je vˇzdy zachycen n´azev atributu a jeho datov´ y typ (n´azev: typ). Pouˇzit´e datov´e typy v tabulce 4.1 jsou mapov´any na datov´e typy form´atu JSON pˇrevodn´ı tabulkou 4.2. Z tabulky 4.1 vypl´ yv´a, ˇze existuje pouze nˇekolik m´alo atribut˚ u, kter´e je moˇzno z´ıskat ze vˇsech u ´loˇziˇst’. Mezi tyto atributy patˇr´ı n´azev souboru ˇci sloˇzky, velikost, obsah (pokud se jedn´a o sloˇzku), rodiˇcovskou sloˇzku a datum modifikace. Ostatn´ı atributy se vyskytuj´ı pouze u nˇekter´ ych u ´loˇziˇst’, coˇz je komplikac´ı, protoˇze nˇekter´e z tˇechto atribut˚ u mohou m´ıt kl´ıˇcovou roli pro prov´adˇen´e operace. Nav´ıc jeˇstˇe kaˇzd´ y z atribut˚ u m˚ uˇze b´ yt v r˚ uzn´ ych u ´loˇziˇst´ıch oznaˇcen jin´ ym n´azvem a reprezentov´an jin´ ym datov´ ym typem, coˇz celou situaci jeˇstˇe v´ıce komplikuje. Rozd´ıln´e n´azvy atribut˚ u je moˇzno vyˇreˇsit mapov´an´ım. V praxi to znamen´a hned dvoj´ı mapov´an´ı. Prvn´ı mapov´an´ı mus´ı probˇehnout pˇri z´ısk´an´ı metadat, aby bylo moˇzn´e metadata uloˇzit v jednotn´e podobˇe pro pozdˇejˇs´ı uˇzit´ı. Bˇehem prvn´ıho mapov´an´ı je rovnˇeˇz nutn´e mapovat do hloubky. To znamen´a, ˇze pokud pˇrijat´a data ve form´atu JSON obsahuj´ı pole a objekty, je nutn´e mapovat i atributy obsaˇzen´e v tˇechto datov´ ych struktur´ach. Druh´e mapov´an´ı je pak zpˇetn´e mapov´an´ı z uloˇzen´e podoby na podobu vyˇzadovanou konkr´etn´ım u ´loˇziˇstˇem. Pˇri zpˇetn´em mapov´an´ı nemus´ı doch´azet pouze k mapov´an´ı atribut˚ u do form´atu JSON, ale rovnˇeˇz na parametry URI pˇred´avan´e HTTP poˇzadavkem. Atributy, kter´e hraj´ı kl´ıˇcovou roli pˇri vol´an´ı operac´ı, jsou pro kaˇzd´e u ´loˇziˇstˇe odliˇsn´e. Pro Dropbox je hlavn´ı cesta k souboru, pomoc´ı kter´e je vu ´loˇziˇsti soubor jednoznaˇcnˇe identifikov´an [27]. Pro Google Drive a OneDrive tuto roli zast´av´a identifik´ator souboru [28, 29, 30]. Jelikoˇz je pro soubory i sloˇzky vyuˇz´ıv´ano stejn´eho form´atu dat, je kl´ıˇcov´e urˇcit, zda se jedn´a pr´avˇe o soubor ˇci sloˇzku. U Dropboxu je pˇr´ıtomn´ y y toto pˇr´ımo urˇcuje hodnotou typu boolean [27]. U ostatatribut is dir, kter´ n´ıch u ´loˇziˇst’ je toto urˇcen´ı obt´ıˇznˇejˇs´ı. Pro OneDrive je pˇr´ıtomen atribut type, kter´ y m˚ uˇze obsahovat jeden z ˇretˇezc˚ u file, notebook, album, audio, folder, 26
N´avrh knihovny
Parametr N´azev Velikost Identifik´ator Cesta
Obsah
Typ Smazan´ y
Sd´ılen´ y
Rodiˇc
MimeType Checksum Vytvoˇren´ı Modifikace ∗
Metadata
Dropbox path∗ : str bytes: num ——– path: str contents: [ {file_obj}, ... ] is dir: bool
Google Drive OneDrive title: str name: str quotaBytesUsed: num size: num id: str id: str ——– ——– items: data: [ [ {file_obj}, {file_obj}, ... ... ] ] ——– type: str labels: { is deleted: bool ——– trashed: bool } shared with: { ——– shared: bool access: str } parents: [ path∗∗ : str {file_obj}, parent id: str ... ] mime type: str mimeType: str ——– ——– md5Checksum: str ——– ——– createdDate: date created time: date modified: date modifiedDate: date updated time: date
) N´ azev souboru ˇci sloˇzky je moˇzno z´ıskat parsov´an´ım cesty. ) Rodiˇce souboru ˇci sloˇzky je moˇzno z´ıskat parsov´an´ım cesty.
∗∗
Tabulka 4.1: Porovn´an´ı vybran´ ych atribut˚ u dostupn´ ych metadat.
27
N´avrh knihovny
Chybov´a hl´aˇsen´ı
Typ z tabulky 4.1 Typ form´ atu JSON Popis str string ˇretˇezec znak˚ u num number ˇc´ıseln´a hodnota bool boolean hodnota true nebo false date string ˇretˇezec reprezentuj´ıc´ı datum [ ... ] array pole hodnot { ... } object reprezentace objektu {file_obj} object objekt metadat souboru Tabulka 4.2: Mapov´an´ı datov´ ych typ˚ u. ˇ ezce album a folder identifikuj´ı sloˇzky, hodnoty file, photo a video. Retˇ notebook, audio, photo a video pak urˇcuj´ı, ˇze se jedn´a o soubor [29]. Pro Google Drive je rozliˇsen´ı sloˇzek a soubor˚ u jeˇstˇe o nˇeco sloˇzitˇejˇs´ı. Nen´ı zde totiˇz pˇr´ıtomen ˇza´dn´ y speci´aln´ı atribut a toto rozliˇsov´an´ı se prov´ad´ı na z´akladˇe typ˚ u Multipurpose Internet Mail Extensions (MIME), kter´ y je pˇren´aˇsen atributem mimeType. Typ MIME, kter´ y urˇcuje sloˇzku vu ´loˇziˇsti Google Drive, je application/vnd.google-apps.folder [28]. Mezi vlastnostmi u ´loˇziˇst’ Dropbox a Google Drive je moˇznost pˇr´ıstupu ke smazan´ ym soubor˚ um. U kaˇzd´eho smazan´eho souboru nebo sloˇzky je nastaven pˇr´ısluˇsn´ y atribut, kter´ y oznaˇcuje, zda se jedn´a o smazan´ y obsah. OneDrive tuto moˇznost nepodporuje. U soubor˚ u a sloˇzek u ´loˇziˇst’ Google Drive a OneDrive lze zjistit, zda jsou sd´ıleny s jin´ ymi uˇzivateli. Aˇckoliv i Dropbox podporuje sd´ılen´ı soubor˚ u a sloˇzek mezi uˇzivateli, nen´ı moˇzn´e o sd´ılen´ı nic zjistit z dostupn´ ych metadat.
4.5
Chybov´ a hl´ aˇ sen´ı
Ned´ılnou souˇca´st´ı dat z´ısk´avan´ ych od cloudov´ ych u ´loˇziˇst’ jsou i chybov´a hl´aˇsen´ı. V tabulce 4.3 jsou zachyceny form´aty chybov´ ych hl´aˇsen´ı pro jednotliv´a u ´loˇziˇstˇe. Z t´eto tabulky je vidˇet, ˇze form´aty chybov´ ych hl´aˇsen´ı se mezi u ´loˇziˇsti podstatnˇe liˇs´ı. Pro Dropbox je vracen pouze ˇretˇezec s popisem chyby, zat´ımco pro Google Drive a OneDrive je n´avratovou hodnotou chybov´ y objekt ({error_obj}). Souˇc´ast´ı chybov´eho objektu je vˇzdy k´od chyby (code) a chybov´e hl´aˇsen´ı (message).
28
N´avrh knihovny
Informace o uˇzivateli
Dropbox Google Drive OneDrive error: { errors: error: [ { {error_obj}, error: str code: str, ... message: str ], } code: num, message: str } Tabulka 4.3: Porovn´an´ı form´at˚ u chybov´ ych hl´aˇsen´ı. Probl´emem u k´odu chyby je, ˇze Google Drive vrac´ı ˇc´ıselnou hodnotu, zat´ımco OneDrive ˇretˇezec. Vzhledem k tomu, ˇze k´od chyby je pˇred´av´an i stavov´ ym k´odem HTTP odpovˇedi a odpov´ıd´a hodnotˇe pˇred´avan´e v chybov´em objektu, je moˇzn´e jej z´ısk´avat pˇr´ımo z HTTP odpovˇedi [28, 29, 44]. T´ımto zp˚ usobem se vyˇreˇs´ı i absence k´odu chyby v odpovˇedi pro Dropbox. Pro vybran´a u ´loˇziˇstˇe je tedy vˇzdy dostupn´ y k´od chyby a chybov´e hl´aˇsen´ı.
4.6
Informace o uˇ zivateli
Posledn´ımi daty, kter´a je potˇreba sjednotit, jsou informace o uˇzivateli a jeho u ´ˇctu v r´amci u ´loˇziˇstˇe. Kaˇzd´e u ´loˇziˇstˇe pouˇz´ıv´a odliˇsn´ y form´at dat. Rozd´ıly jsou pak zachyceny v tabulce 4.4. Pro kaˇzd´e u ´loˇziˇstˇe je moˇzn´e z´ıskat jm´eno uˇzivatele, jeho identifik´ator a celkovou kapacitu prostoru dostupnou pro uˇzivatele. Rozd´ıln´e je z´ısk´av´an´ı velikosti obsazen´eho, resp. voln´eho prostoru. Dropbox a Google Drive navrac´ı velikost obsazen´eho prostoru, zat´ımco pro OneDrive je dostupn´a informace o voln´em prostoru. Z dostupn´ ych dat pak lze dopoˇc´ıtat velikost voln´eho, resp. obsazen´eho prostoru pro vˇsechna u ´loˇziˇstˇe.
29
N´avrh knihovny Parametr Jm´eno Identifik´ator Celkov´ y prostor
Vyuˇzit´ y prostor∗
Voln´ y prostor
Mnoˇzina operac´ı Dropbox display name: str id: str quota info: { quota: num } quota info { normal: num shared: num } ——–
Google Drive name: str permissionId: str
OneDrive name: str id: str
quotaBytesTotal: num
quota: num
quotaBytesUsedAggregate: num
——–
——–
available: num
∗
) Pro Dropbox je vyuˇzit´ y prostor souˇctem normal (prostor vyuˇzit´ y pro soubory uˇzivatele) a shared (prostor vyuˇzit´ y soubory s uˇzivatelem sd´ılen´ ymi).
Tabulka 4.4: Form´at informac´ı o uˇzivateli a u ´ˇctu.
4.7
Mnoˇ zina operac´ı
Mnoˇzina operac´ı urˇcen´ ych pro implementaci vych´az´ı pˇr´ımo z mnoˇzin operac´ı podporovan´ ych jednotliv´ ymi u ´loˇziˇsti. Pro spolehlivou funkcionalitu je moˇzno implementovat pouze ty operace, kter´e jsou podporov´any vˇsemi u ´loˇziˇsti z´aroveˇ n. V´ yslednou mnoˇzinu operac´ı je moˇzno rozdˇelit na operace pro manipulaci se soubory a sloˇzkami, a na operace pro z´ısk´an´ı informac´ı o uˇzivateli a u ´loˇziˇsti.
4.7.1
Generick´ a operace
Pro zjednoduˇsen´ı implementace jednotliv´ ych operac´ı bylo zvoleno vytvoˇren´ı abstraktn´ı operace, kter´a je z´akladem pro vˇsechny ostatn´ı operace. Hlavn´ı u ´lohou t´eto operace je obstarat komunikaci s u ´loˇziˇstˇem. Pro tento u ´ˇcel mus´ı operace umˇet sestavit HTTP poˇzadavek, odeslat ho, pˇrijmout odpovˇed’ a zpracovat ji. Pˇredpokladem pro sestaven´ı poˇzadavku a zpracov´an´ı odpovˇedi je jiˇz zm´ınˇen´e mapov´an´ı atribut˚ u (viz sekce 4.4). V obr´azku 4.4 je zn´azornˇen n´avrh generick´e operace. Ostatn´ı operace dodaj´ı generick´e operaci pouze potˇrebn´a data pro sestaven´ı HTTP poˇzadavku 30
N´avrh knihovny
Mnoˇzina operac´ı
a z´ıskaj´ı zpˇet data z odpovˇedi u ´loˇziˇstˇe ve sjednocen´em form´atu. Kaˇzd´a operace mus´ı dodat URI, na kter´e m´a b´ yt poˇzadavek odesl´an a HTTP metodu poˇzadavku. Pro vykon´an´ı operace nen´ı nutn´e specifikovat parametry, hlaviˇcky a/nebo data poˇzadavku. Jelikoˇz je naprost´a vˇetˇsina operac´ı prov´adˇena nad chr´anˇen´ ymi daty, je pro pˇr´ıstup k nim potˇreba dodat rovnˇeˇz pˇr´ıstupov´ y token, kter´ y je vloˇzen do HTTP poˇzadavku jako parametr nebo jako hlaviˇcka.
Obr´azek 4.4: N´avrh generick´e operace.
4.7.2
Manipulace se soubory
Pro kaˇzd´e u ´loˇziˇstˇe existuje mnoˇzina operac´ı, kter´a je urˇcena v´ yhradnˇe pro manipulaci se soubory a sloˇzkami. V t´eto sekci jsou pops´any z´akladn´ı operace dostupn´e na vˇsech u ´loˇziˇst´ıch a n´avrh jejich jednotn´eho vol´an´ı, vˇcetnˇe vstupn´ıch a v´ ystupn´ıch parametr˚ u. V tabulce 4.5 je pˇrehled pouˇz´ıvan´ ych HTTP metod [27, 28, 29, 30]. Staˇ zen´ı souboru – Pro staˇzen´ı souboru je na vˇsech u ´loˇziˇst´ıch pouˇz´ıv´ana HTTP metoda GET. Vstupem jsou metadata stahovan´eho souboru, c´ılov´ y lok´aln´ı soubor a zda m´a b´ yt lok´aln´ı soubor pˇreps´an v pˇr´ıpadˇe jeho existence. V´ ystupem je pak nutnˇe lok´aln´ı soubor, kter´ y byl staˇzen. Nahr´ an´ı souboru – Nahr´av´an´ı soubor˚ u m´a kaˇzd´e z u ´loˇziˇst’ implementov´ano odliˇsnˇe. Zde je hlavn´ım zamˇeˇren´ım nahr´av´an´ı soubor˚ u po ˇc´astech. Dropbox pro nahr´av´an´ı souboru vyuˇz´ıv´a opakovan´eho vol´an´ı HTTP metody PUT, pomoc´ı kter´eho se na u ´loˇziˇstˇe nahr´av´a obsah souboru. Nahr´av´an´ı souboru je zakonˇceno vol´an´ım metody POST. Google Drive oˇcek´av´a jako prvn´ı krok metadata nov´eho souboru pˇred´avan´a pomoc´ı POST. N´asleduje opakovan´e vol´an´ı PUT, kter´ ym se pˇred´av´a obsah souboru. OneDrive nepodporuje nahr´av´an´ı souboru po ˇc´astech. Cel´ y soubor je na u ´loˇziˇstˇe nahr´av´an jedn´ım poˇzadavkem typu PUT. 31
N´avrh knihovny
Mnoˇzina operac´ı
Vstupem operace pro nahr´av´an´ı souboru je lok´aln´ı soubor, c´ılov´a sloˇzka a n´azev souboru, a zda m´a b´ yt pˇr´ıpadn´ y existuj´ıc´ı soubor v u ´loˇziˇsti pˇreps´an. V´ ystup operace pak tvoˇr´ı metadata novˇe nahran´eho souboru. ´ Uprava obsahu souboru – Tato operace je t´emˇeˇr shodn´a s operac´ı nahr´av´an´ı souboru. Rozliˇsen´ı mezi u ´pravou a nahr´av´an´ım je nutn´e pro u ´loˇziˇstˇe Google Drive, kter´e vyˇzaduje, aby prvn´ı vol´an´ı probˇehlo HTTP metodou PUT nam´ısto POST. Pokud by bylo vol´an´ı provedeno metodou POST, byl by v u ´loˇziˇsti vytvoˇren nov´ y soubor, kter´ y by mˇel stejn´ y n´azev jako jiˇz existuj´ıc´ı soubor v u ´loˇziˇsti. Pro uˇzivatele by to znamenalo sn´ıˇzen´ı pˇrehlednosti obsahu u ´loˇziˇstˇe. Vstupy a v´ ystupy operace jsou shodn´e se vstupy a v´ ystupy operace nahr´av´an´ı. Na vstupu operace jsou nav´ıc vyˇzadov´ana metadata souboru, kter´ y m´a b´ yt zmˇenˇen. Z´ısk´ an´ı obsahu sloˇ zky – Operace pro z´ısk´an´ı obsahu sloˇzky je vykon´av´ana na vˇsech u ´loˇziˇst´ıch HTTP metodou GET. Vstupem pro operaci jsou metadata sloˇzky, jej´ıˇz obsah m´a b´ yt z´ısk´an, a zda maj´ı b´ yt ve v´ ysledku zahrnuty smazan´e a sd´ılen´e soubory. Na v´ ystupu jsou oˇcek´av´ana metadata sloˇzky doplnˇena o pole s metadaty soubor˚ u a sloˇzek, kter´e sloˇzka obsahuje. Komplikace nast´avaj´ı u u ´loˇziˇstˇe Google Drive, kter´e standardnˇe vrac´ı jako v´ ysledek kompletn´ı seznam soubor˚ u a sloˇzek v cel´em u ´loˇziˇsti. Pro odstranˇen´ı tohoto probl´emu a z´ısk´an´ı pouze poˇzadovan´eho obsahu je nutn´e odeslat jeˇstˇe jeden GET poˇzadavek, kter´ ym jsou z´ısk´any identifik´atory soubor˚ u a sloˇzek, kter´e sloˇzka obsahuje. Vytvoˇ ren´ı sloˇ zky – Nov´a sloˇzka je na vˇsech u ´loˇziˇst´ıch vytvoˇrena pomoc´ı HTTP metody POST. Vstupem operace je n´azev nov´e sloˇzky a tak´e metadata rodiˇcovsk´e sloˇzky. V´ ystupem pak metadata novˇe vytvoˇren´e sloˇzky. Z´ısk´ an´ı metadat – Pro z´ısk´an´ı metadat souboru ˇci sloˇzky je vˇsemi u ´loˇziˇsti vyuˇzito metody GET. Vstupem operace mus´ı b´ yt jednoznaˇcn´ y identifik´ator zdroje. V pˇr´ıpadˇe Dropboxu je to cesta ke zdroji, v pˇr´ıpadˇe Google Drivu a OneDrivu pak identifik´ator. Na v´ ystupu operace jsou oˇcek´av´ana kompletn´ı metadata zdroje. Vyhled´ av´ an´ı – Vyhled´avat je moˇzn´e na vˇsech u ´loˇziˇst´ıch. Pouˇzitou HTTP metodou je ve vˇsech pˇr´ıpadech GET. Vstupem je pak vyhled´avan´ y ˇretˇezec a zda m´a b´ yt vyhled´av´ano i mezi smazan´ ymi soubory. V´ ystupem je pak pole s metadaty soubor˚ u a sloˇzek. Probl´emem pˇri vyhled´av´an´ı je, ˇze metadata u ´loˇziˇst’ Google Drive a OneDrive neobsahuj´ı cestu k souboru ˇci sloˇzce. Pro z´ısk´an´ı um´ıstˇen´ı souboru ˇci sloˇzky je tak potˇreba vz´ıt z metadat identifi-
32
N´avrh knihovny
Mnoˇzina operac´ı
k´ator rodiˇcovsk´e sloˇzky a z´ıskat jej´ı metadata. Pokud nen´ı rodiˇcovsk´a sloˇzka koˇrenem adres´aˇrov´e struktury u ´loˇziˇstˇe, je potˇreba z´ıskat metadata rodiˇcovsk´e sloˇzky aktu´aln´ı sloˇzky. Takto se pokraˇcuje aˇz do nalezen´ı koˇrenov´e sloˇzky. Ze z´ıskan´ ych metadat sloˇzek je moˇzno sestavit cestu k souboru ˇci sloˇzce z vyhled´av´an´ı. Kop´ırov´ an´ı – Pro kop´ırov´an´ı plat´ı u Google Drivu omezen´ı pouze na soubory. Aby bylo moˇzn´e vytvoˇrit jednotnou operaci kop´ırov´an´ı, je nutn´e omezit kop´ırov´an´ı u ostatn´ıch u ´loˇziˇst’ rovnˇeˇz pouze na soubory. Dropbox a Google Drive vyuˇz´ıvaj´ı pro kop´ırov´an´ı HTTP metodu POST. OneDrive definuje vlastn´ı HTTP metodu COPY. Vstupem operace jsou metadata kop´ırovan´eho souboru, metadata c´ılov´e sloˇzky a c´ılov´ y n´azev souboru v pˇr´ıpadˇe, ˇze je podporov´ano pˇrejmenov´an´ı souboru bˇehem operace. V´ ystupem jsou metadata kop´ırovan´eho souboru. Pˇ resun – Pˇresunovat je moˇzno soubory i sloˇzky. Dropbox vyuˇz´ıv´a pro pˇresun HTTP metodu POST, zat´ımco Google Drive vyuˇz´ıv´a PUT. Zvl´aˇstn´ım pˇr´ıpadem je zde OneDrive, kter´ y m´a pro pˇresun definovanou nestandardn´ı HTTP metodu MOVE. Na vstupu operace se oˇcek´avaj´ı metadata souboru (ˇci sloˇzky) urˇcen´eho pro pˇresun, metadata c´ılov´e sloˇzky a pˇr´ıpadnˇe nov´ y n´azev souboru, pokud je v r´amci pˇresunu povolena i zmˇena n´azvu. V´ ystupem pak jsou nov´a metadata souboru ˇci sloˇzky. Pˇ rejmenov´ an´ı – Operace pˇrejmenov´an´ı nen´ı implicitnˇe dostupn´a pro vˇsechna vybran´a u ´loˇziˇstˇe. Dropbox tuto operaci neimplementuje, nicm´enˇe je moˇzno ji nahradit operac´ı pˇresunu souboru, pro kterou je vyuˇz´ıv´ano HTTP metody POST. Ostatn´ı u ´loˇziˇstˇe podporuj´ı pˇrejmenov´an´ı metodou PUT. Operace je aplikovateln´a na soubory i sloˇzky. Vstupem metody jsou metadata souboru ˇci sloˇzky a nov´ y n´azev. V´ ystupem pak jsou nov´a metadata souboru ˇci sloˇzky. Smaz´ an´ı – Tato operace je aplikovateln´a pro soubory i pro sloˇzky. N´asledkem vykon´an´ı t´eto operace je smaz´an´ı vybran´e sloˇzky (vˇcetnˇe obsahu) nebo souboru. Dropbox pouˇz´ıv´a pro maz´an´ı HTTP metodu POST, zat´ımco ostatn´ı u ´loˇziˇstˇe vyuˇz´ıvaj´ı metody DELETE. Vstupn´ım parametrem t´eto operace jsou metadata souboru ˇci sloˇzky. V´ ystup t´eto operace by mˇel indikovat, zda byla operace u ´spˇeˇsnˇe provedena.
33
N´avrh knihovny
Mnoˇzina operac´ı
Operace Staˇzen´ı Nahr´an´ı ´ Uprava obsahu Obsah sloˇzky Vytvoˇren´ı sloˇzky Metadata Vyhled´av´an´ı Kop´ırov´an´ı Pˇresun Pˇrejmenov´an´ı∗ Smaz´an´ı ∗
Dropbox GET PUT + POST PUT + POST GET POST GET GET POST POST POST POST
Google Drive GET POST + PUT PUT + PUT GET + GET POST GET GET POST PUT PUT DELETE
OneDrive GET PUT PUT GET POST GET GET COPY MOVE PUT DELETE
) U Dropboxu je pro pˇrejmenov´an´ı vyuˇzito operace pˇresunu.
Tabulka 4.5: HTTP metody operac´ı.
4.7.3
Informaˇ cn´ı operace
Do t´eto kategorie patˇr´ı operace pro z´ısk´av´an´ı informac´ı o uˇzivateli a jeho u ´ˇctu v r´amci u ´loˇziˇstˇe. Vˇsechny zde vyjmenovan´e operace vyuˇzivaj´ı HTTP metodu GET. Jelikoˇz OneDrive rozdˇeluje z´ısk´av´an´ı informac´ı o uˇzivateli a z´ısk´av´an´ı informac´ı o u ´ˇctu do dvou odliˇsn´ ych vol´an´ı, je nutn´e rozdˇelit tato vol´an´ı i u ostatn´ıch u ´loˇziˇst’. Informace o uˇ zivateli – C´ılem t´eto operace je z´ıskat z´akladn´ı informace o uˇzivateli, mezi kter´e patˇr´ı uˇzivatelsk´e jm´eno a identifik´ator uˇzivatele. Na vstupu operace nejsou potˇreba ˇza´dn´a data. Informace o u ´ˇ ctu – V´ ystupem t´eto operace je zjiˇstˇen´ı celkov´eho prostoru u ´loˇziˇstˇe a jeho obsazen´e, resp. voln´e ˇc´asti. Ani tato operace nevyˇzaduje ˇz´adn´ y vstup.
34
5 N´avrh rozˇs´ıˇren´e funkcionality C´ılem t´eto kapitoly je n´avrh funkcionality pro inteligentn´ı pr´aci se soubory v cloudov´ ych u ´loˇziˇst´ıch. Pod pojmem inteligentn´ı je zde ch´ap´ano takov´e chov´an´ı aplikace, kter´e pˇrin´aˇs´ı uˇzivateli zjednoduˇsen´ı pr´ace. Za zjednoduˇsen´ı je moˇzn´e povaˇzovat napˇr´ıklad sn´ıˇzen´ı poˇctu r˚ uzn´ ych aplikac´ı, kter´e by bylo pro dosaˇzen´ı stanoven´eho c´ıle potˇreba instalovat, zkr´acen´ı ˇcasu potˇrebn´eho pro dosaˇzen´ı c´ıle, nebo sn´ıˇzen´ı poˇctu u ´kon˚ u, kter´e by bylo nutn´e vykonat pro dosaˇzen´ı c´ıle. Zde navrˇzen´a funkcionalita se op´ır´a o dostupnou dokumentaci pro pˇr´ıstup k u ´loˇziˇst´ım a z´akladn´ı sjednocen´e operace navrˇzen´e v pˇredchoz´ı kapitole. C´ılem navrˇzen´ ych rozˇs´ıˇren´ı je nab´ıdnout uˇzivateli funkce, na kter´e je zvykl´ y z existuj´ıc´ıch program˚ u, a vylepˇsit je. Navrˇzen´a funkcionalita se bude liˇsit od st´avaj´ıc´ıch program˚ u pˇredevˇs´ım t´ım, ˇze bude aplikovateln´a pˇres vˇsechna vybran´a u ´loˇziˇstˇe.
5.1
Paraleln´ı nahr´ av´ an´ı
Vzhledem k tomu, ˇze skrze aplikaci bude pˇristupov´ano k v´ıce cloudov´ ym u ´loˇziˇst´ım z´aroveˇ n, nab´ız´ı se zde moˇznost implementace paraleln´ıho nahr´av´an´ı souboru na v´ıce u ´loˇziˇst’. Pro uˇzivatele by tato moˇznost znamenala u ´sporu ˇcasu, kterou by str´avil nahr´av´an´ım souboru na kaˇzd´e u ´loˇziˇstˇe zvl´aˇst’. Navrhovan´a funkcionalita totiˇz poˇc´ıt´a se soubˇeˇzn´ ym spuˇstˇen´ım nahr´av´an´ı na vˇsechna u ´loˇziˇstˇe z´aroveˇ n. Celkov´ y ˇcas potˇrebn´ y pro nahr´an´ı souboru by se tak rovnal ˇcasu potˇrebn´emu pro nahr´an´ı souboru na u ´loˇziˇstˇe s nejniˇzˇs´ı rychlost´ı nahr´av´an´ı. Komplikac´ı by mohlo b´ yt pˇreruˇsen´ı nahr´av´an´ı souboru. V takov´em pˇr´ıpadˇe by mohlo doj´ıt k situaci, ˇze by pˇreruˇsen´ı nastalo v momentˇe, kdy uˇz by byl soubor na nˇekter´a u ´loˇziˇstˇe nahr´an, ale na ostatn´ı ne. Nejjednoduˇsˇs´ım ˇreˇsen´ım by bylo situaci ignorovat, coˇz je moˇzn´e, protoˇze na ˇz´adn´em zu ´loˇziˇst’ se nekompletn´ı soubory nijak neodr´aˇz´ı na vyuˇzit´e kapacitˇe u ´loˇziˇstˇe a nejsou pˇrid´any do c´ılov´e sloˇzky. Dalˇs´ı moˇznost´ı by bylo jiˇz nahran´e soubory smazat a vr´atit tak u ´loˇziˇstˇe do stavu pˇred zapoˇcet´ım operace.
35
N´avrh rozˇs´ıˇren´e funkcionality
5.2
Zrychlen´ı stahov´an´ı
Zrychlen´ı stahov´ an´ı
Teoreticky je moˇzn´e z´ıskat pouze vybranou ˇca´st souboru z u ´loˇziˇstˇe. Pˇredpokladem pro tento zp˚ usob pˇr´ıstupu k dat˚ um je jeho podpora na vybran´em u ´loˇziˇsti. Pokud tedy u ´loˇziˇstˇe takov´ yto zp˚ usob pˇr´ıstupu k dat˚ um podporuje, b´ yv´a zpravidla nˇekde zdokumentov´an. Pro zjiˇstˇen´ı podpory bylo tedy nutn´e d˚ ukladnˇe prostudovat dokumentaci a zdrojov´e k´ody API vybran´ ych u ´loˇziˇst’. ´ Uloˇziˇstˇe pˇr´ımo specifikuj´ı v dokumentac´ıch sv´ ych API tuto moˇznost, a jak´ ym zp˚ usobem je moˇzno ji vyuˇz´ıt [27, 28, 30]. Jedn´a se o podporu hlaviˇcky Range protokolu HTTP/1.1, pomoc´ı kter´e je moˇzno specifikovat rozsah bajt˚ u souboru, kter´ y m´a b´ yt staˇzen [44, 46]. Jin´a u ´loˇziˇstˇe mohou tuto moˇznost rovnˇeˇz podporovat, avˇsak m˚ uˇze b´ yt teoreticky zavedena i jin´ ym zp˚ usobem. Tato moˇznost je kl´ıˇcov´a pro vyuˇzit´ı redundantn´ıho uloˇzen´ı soubor˚ u ve v´ıce u ´loˇziˇst´ıch ve prospˇech koncov´eho uˇzivatele. Kromˇe moˇznosti nav´az´an´ı stahov´an´ı souboru po v´ ypadku klienta se t´ım otev´ır´a i moˇznost pro nav´az´an´ı stahov´an´ı souboru z jin´eho u ´loˇziˇstˇe, neˇz ze kter´eho byl soubor stahov´an. Jeˇstˇe zaj´ımavˇejˇs´ı je pak moˇznost paraleln´ıho stahov´an´ı souboru z v´ıce u ´loˇziˇst’ z´aroveˇ n. Paraleln´ı stahov´an´ı souboru funguje v principu tak, ˇze soubor je rozdˇelen do v´ıce ˇca´st´ı, kter´e jsou stahov´any nez´avisle na sobˇe a sestaveny aˇz na stranˇe uˇzivatele, kter´ y je stahuje. Hlavn´ı v´ yhodou tohoto pˇr´ıstupu je z hlediska uˇzivatele teoretick´e nav´ yˇsen´ı rychlosti stahov´an´ı souboru, ale pouze v pˇr´ıpadech, ˇze jiˇz uˇzivatel nevyuˇz´ıv´a plnou kapacitu linky, kterou je pˇripojen k u ´loˇziˇsti. Z pohledu cloudov´ ych u ´loˇziˇst’ je pak moˇzn´e jako pozitivum povaˇzovat sn´ıˇzen´ı z´atˇeˇze server˚ u a konektivity v d˚ usledku rozloˇzen´ı stahov´an´ı mezi r˚ uzn´a u ´loˇziˇstˇe a t´ım i pˇren´aˇsen´ı menˇs´ıch datov´ ych objem˚ u z kaˇzd´eho u ´loˇziˇstˇe. Pod pojmem paraleln´ıho stahov´an´ı si lze pˇredstavit nejen stahov´an´ı z v´ıce u ´loˇziˇst’ najednou, ale t´eˇz stahov´an´ı z jednoho u ´loˇziˇstˇe ve v´ıce vl´aknech najednou. Z tohoto pohledu je takt´eˇz teoreticky moˇzn´e zv´ yˇsit rychlost pˇrenosu souboru. Vˇse opˇet z´avis´ı na poskytovateli u ´loˇzn´eho prostoru, zda tuto moˇznost povoluje a jak´ ym zp˚ usobem upravuje rychlost pˇren´aˇsen´ı dat. Nev´ yhodou tohoto pˇr´ıstupu je doˇcasn´e zv´ yˇsen´ı z´atˇeˇze u ´loˇziˇstˇe oproti bˇeˇzn´emu stahov´an´ı v jednom vl´aknˇe. Moˇznosti stahov´an´ı souboru jsou n´azornˇe ilustrov´any v nˇekolika n´asleduj´ıc´ıch obr´azc´ıch. V obr´azku 5.1 je zn´azornˇeno sekvenˇcn´ı stahov´an´ı souboru z jednoho u ´loˇziˇstˇe. V obr´azku je zachyceno rozdˇelen´ı souboru do nˇekolika ˇca´st´ı a jejich postupn´e stahov´an´ı. V tomto pˇr´ıpadˇe jsou jednotliv´e 36
N´avrh rozˇs´ıˇren´e funkcionality
Zrychlen´ı stahov´an´ı
ˇc´asti souboru stahov´any jedn´ım vl´aknem v poˇrad´ı podle ˇc´ısel, kter´ ymi jsou oznaˇceny. Paraleln´ı stahov´an´ı z jednoho u ´loˇziˇstˇe je pak zn´azornˇeno obr´azkem 5.2. Od pˇredchoz´ıho obr´azku se paraleln´ı stahov´an´ı liˇs´ı pˇredevˇs´ım t´ım, ˇze vl´aken pro stahov´an´ı je v´ıce. Soubor je opˇet rozdˇelen do nˇekolika ˇc´ast´ı a vl´akn˚ um jsou jednotliv´e ˇc´asti pˇridˇelov´any opˇet v sekvenˇcn´ım poˇrad´ı dle jejich ˇc´ıseln´eho oznaˇcen´ı. Vl´akna mezi sebou o jednotliv´e ˇca´sti soupeˇr´ı. Kaˇzd´a jednotliv´a ˇca´st je tak pˇridˇelena tomu vl´aknu, kter´e o ni jako prvn´ı zaˇz´ad´a, pˇriˇcemˇz ˇza´dost m˚ uˇze vyslat pouze vl´akno, kter´e dokonˇcilo stahov´an´ı pˇredchoz´ı ˇc´asti. D´ale n´asleduje sekvenˇcn´ı stahov´an´ı z v´ıce u ´loˇziˇst’ v obr´azku 5.3. V tomto pˇr´ıpadˇe je opˇet pouˇzito jen jedno vl´akno, kter´e stahuje ˇc´asti soubor˚ u dle jejich ˇc´ıseln´eho oznaˇcen´ı. Od stahov´an´ı z jednoho cloudov´eho u ´loˇziˇstˇe se tento pˇr´ıstup liˇs´ı pˇredevˇs´ım t´ım, ˇze kaˇzd´a jednotliv´a ˇca´st souboru je stahov´ana z jin´eho u ´loˇziˇstˇe. Posledn´ım obr´azkem 5.4 je kombinovan´ y pˇr´ıstup pro stahov´an´ı pomoc´ı v´ıce vl´aken z v´ıce u ´loˇziˇst’. Soubor je zde rozdˇelen do ˇca´st´ı, o kter´e jednotliv´a vl´akna soupeˇr´ı. Kaˇzd´emu z vl´aken je pˇridˇeleno jedno cloudov´e u ´loˇziˇstˇe, ze kter´e pak ˇc´asti soubor˚ u stahuje. Pro implementaci byl zvolen postup stahov´an´ı zn´azornˇen´ y obr´azkem 5.4. Jedn´a se o univerz´aln´ı postup, kter´ y je moˇzn´e volbou poˇctu vl´aken a cloudov´ ych u ´loˇziˇst’ pˇrev´est na zbyl´e tˇri zm´ınˇen´e postupy. Tak´e je moˇzn´e u tohoto pˇr´ıstupu pˇredpokl´adat nejvyˇsˇs´ı m´ıru urychlen´ı stahov´an´ı souboru. Dosaˇzen´e v´ ysledky tohoto pˇr´ıstupu k dat˚ um v u ´loˇziˇst´ıch jsou bl´ıˇze pops´any a vyhodnoceny v sekci 6.4.
Obr´azek 5.1: Sekvenˇcn´ı stahov´an´ı souboru jedn´ım vl´aknem z jednoho u ´loˇziˇstˇe. 37
N´avrh rozˇs´ıˇren´e funkcionality
Zrychlen´ı stahov´an´ı
Obr´azek 5.2: Stahov´an´ı souboru ve v´ıce vl´aknech z jednoho u ´loˇziˇstˇe.
Obr´azek 5.3: Sekvenˇcn´ı stahov´an´ı souboru jedn´ım vl´aknem z v´ıce u ´loˇziˇst’.
Obr´azek 5.4: Stahov´an´ı souboru z v´ıce u ´loˇziˇst’ ve v´ıce vl´aknech.
38
N´avrh rozˇs´ıˇren´e funkcionality
5.3
Kontrola konzistence dat
Kontrola konzistence dat
Pro stahov´an´ı soubor˚ u z v´ıce u ´loˇziˇst’ z´aroveˇ n je potˇreba zaruˇcit konzistenci obsahu soubor˚ u napˇr´ıˇc u ´loˇziˇsti. Pokud by byt’ jedin´ y ze soubor˚ u neobsahoval stejn´a data jako ostatn´ı, mohlo by bˇehem stahov´an´ı doj´ıt k poˇskozen´ı v´ ysledn´eho souboru. V´ ysledn´ y staˇzen´ y soubor by totiˇz obsahoval ˇca´sti dat ze vˇsech stahovan´ ych soubor˚ u a neodpov´ıdal ˇza´dn´emu z nich. Tento pˇr´ıpad je n´azornˇe ilustrov´an obr´azkem 5.5.
Obr´azek 5.5: Probl´em nekonzistence soubor˚ u napˇr´ıˇc u ´loˇziˇsti. Pro oˇsetˇren´ı tohoto probl´emu existuje nˇekolik moˇzn´ ych ˇreˇsen´ı. Jedn´ım ˇreˇsen´ım by bylo staˇzen´ı souboru ze vˇsech u ´loˇziˇst’ z´aroveˇ n a porovn´an´ı jejich obsahu. N´aslednˇe by pak bylo moˇzno vybrat jednu verzi souboru, kter´a by odpov´ıdala pˇredstav´am uˇzivatele. Tento pˇr´ıstup ovˇsem nen´ı pˇr´ıliˇs vhodn´ y, protoˇze by soubor bylo nutn´e stahovat N-kr´at, kde N je poˇcet u ´loˇziˇst’, ze kter´ ych by byl soubor stahov´an. Lepˇs´ım pˇr´ıstupem je z´ısk´an´ı pouze kontroln´ıch souˇct˚ u soubor˚ u a jejich porovn´an´ı pˇred staˇzen´ım. U kontroln´ıch souˇct˚ u se pˇredpokl´ad´a, ˇze dva soubory maj´ı shodn´ y kontroln´ı souˇcet pouze v pˇr´ıpadˇe, ˇze maj´ı i shodn´ y obsah. Toto ovˇsem nemus´ı platit vˇzdy a mohou existovat dva obsahovˇe odliˇsn´e soubory se stejn´ ym kontroln´ım souˇctem. Pˇred t´ımto probl´emem je moˇzno se br´anit kontrolou velikosti soubor˚ u. Pravdˇepodobnost, ˇze by dva stejnˇe 39
N´avrh rozˇs´ıˇren´e funkcionality
Synchronizace sloˇzek
velk´e soubory s rozd´ıln´ ym obsahem mˇely stejn´e kontroln´ı souˇcty, je prakticky nulov´a. Kontroln´ı souˇcty je nav´ıc moˇzno ukl´adat a pˇristupovat k nim pozdˇeji. Jelikoˇz jedin´ ym u ´loˇziˇstˇem, kter´e poskytuje kontroln´ı souˇcty jako souˇc´ast metadat, je Google Drive, je nutn´e pro soubory v ostatn´ıch u ´loˇziˇst´ıch kontroln´ı souˇcty poˇc´ıtat manu´alnˇe [28]. Pro vypoˇcten´ı kontroln´ıho souˇctu souboru je potˇreba soubor nejprve st´ahnout. D˚ uleˇzit´e je rovnˇeˇz zpˇetn´e pˇriˇrazen´ı kontroln´ıho souˇctu k souboru. To je moˇzn´e pouze v pˇr´ıpadˇe, ˇze soubor nebyl zmˇenˇen. Spolu s kontroln´ım souˇctem je tedy nutn´e uchov´avat i metadata souboru, ke kter´emu kontroln´ı souˇcet patˇr´ı. Pro jednoznaˇcn´e pˇriˇrazen´ı kontroln´ıho souˇctu k souboru je potˇreba zn´at jednoznaˇcn´ y identifik´ator souboru, at’ uˇz se jedn´a o cestu k souboru v pˇr´ıpadˇe u ´loˇziˇstˇe Dropbox, nebo identifik´ator u u ´loˇziˇst’ Google Drive a OneDrive. D´ale by mˇel odpov´ıdat i n´azev souboru. Co odpov´ıdat mus´ı, je velikost souboru, a datum a ˇcas posledn´ı u ´pravy. Pokud je dostupn´ yu ´daj o datu a ˇcase vytvoˇren´ı souboru, mus´ı odpov´ıdat i ten. Posledn´ı d˚ uleˇzit´ y atribut, kter´ y mus´ı odpov´ıdat, je identifik´ator uˇzivatelsk´eho u ´ˇctu v r´amci u ´loˇziˇstˇe.
5.4
Synchronizace sloˇ zek
Na z´akladˇe kontroln´ıch souˇct˚ u je moˇzno synchronizovat lok´aln´ı a vzd´alen´e sloˇzky. Zde je nejd˚ uleˇzitˇejˇs´ı detekce zmˇeny souboru. Soubor, kter´ y byl pozmˇenˇen, je pak potˇreba nahr´at na u ´loˇziˇstˇe nebo z u ´loˇziˇstˇe st´ahnout, v z´avislosti na tom, kde zmˇena nastala. Synchronizaci je moˇzno bud’ prov´adˇet kontinu´alnˇe nebo jednor´azovˇe. Kontinu´aln´ı pˇr´ıstup vyˇzaduje sledov´an´ı zmˇen v lok´aln´ım souborov´em syst´emu a ve vzd´alen´ ych u ´loˇziˇst´ıch z´aroveˇ n. Pro sledov´an´ı lok´aln´ıch zmˇen je potˇreba program, kter´ y by pomoc´ı funkc´ı operaˇcn´ıho syst´emu zmˇeny sledoval. Sledov´an´ı vzd´alen´ ych zmˇen pak vyˇzaduje periodick´e dotazy na metadata sledovan´ ych soubor˚ u. Nˇekter´a u ´loˇziˇstˇe dokonce podporuj´ı zas´ıl´an´ı notifikac´ı v pˇr´ıpadˇe zmˇen soubor˚ u. Jednor´azov´a synchronizace je jednoduˇsˇs´ı, protoˇze nevyˇzaduje ˇza´dn´e sledov´an´ı soubor˚ u, at’ uˇz lok´aln´ıch nebo vzd´alen´ ych. Pro jednor´azovou synchronizaci tak staˇc´ı z´ısk´an´ı kontroln´ıch souˇct˚ u soubor˚ u v synchronizovan´ ych sloˇzk´ach, jejich porovn´an´ı a vyhodnocen´ı zmˇen. Po identifikaci zmˇenˇen´ ych soubor˚ u je potˇreba urˇcit smˇer, kter´ ym se zmˇeny budou propagovat. 40
N´avrh rozˇs´ıˇren´e funkcionality
5.4.1
Transfer soubor˚ u
Selektivn´ı synchronizace
Selektivn´ı synchronizace je vlastnost aplikace, kter´a umoˇzn ˇuje uˇzivatel˚ um zvolit si v r´amci synchronizaˇcn´ı sloˇzky obsah, kter´ y bude synchronizov´an. Ve v´ ysledku se tak synchronizuj´ı pouze uˇzivatelem oznaˇcen´e soubory. Pro selektivn´ı synchronizaci je nejprve d˚ uleˇzit´e urˇcit, zda m´a prioritu lok´aln´ı nebo vzd´alen´a sloˇzka. Vˇetˇsina existuj´ıc´ıch klient˚ u pouˇz´ıv´a vzd´alenou sloˇzku jako prioritn´ı. V praxi to znamen´a, ˇze uˇzivatel si vyb´ır´a, kter´e ze vzd´alen´ ych podsloˇzek se budou synchronizovat na lok´aln´ı disk. Pˇr´ıstup s prioritn´ı vzd´alenou sloˇzkou nen´ı ovˇsem vhodn´ y v pˇr´ıpadˇe, ˇze je pro synchronizaci zvoleno v´ıce u ´loˇziˇst’ najednou. Nast´av´a zde totiˇz probl´em s urˇcen´ım prioritn´ı sloˇzky. Pokud by bylo jedno z u ´loˇziˇst’ urˇceno jako hlavn´ı, musela by synchronizace prob´ıhat i mezi u ´loˇziˇsti. Lepˇs´ım ˇreˇsen´ım tak je volba lok´aln´ı sloˇzky jako prioritn´ı. Uˇzivateli se tak nab´ız´ı moˇznost vybrat si na kter´a u ´loˇziˇstˇe budou lok´aln´ı podsloˇzky synchronizov´any.
5.5
Transfer soubor˚ u
Dalˇs´ı navrˇzenou rozˇsiˇruj´ıc´ı funkc´ı je pˇresun soubor˚ u mezi u ´loˇziˇsti. Moˇznost´ı pro implementaci t´eto funkcionality je opˇet v´ıce. Ide´aln´ım ˇreˇsen´ım by byl pˇresun soubor˚ u pˇr´ımo mezi u ´loˇziˇsti. To ovˇsem nen´ı bohuˇzel moˇzn´e, protoˇze by tato moˇznost musela b´ yt podporov´ana pˇr´ımo u ´loˇziˇsti. Soubory je tedy nutn´e pˇresunovat prostˇrednictv´ım klientsk´e aplikace. Prvn´ı variantou ˇreˇsen´ı je staˇzen´ı cel´eho souboru na lok´aln´ı disk a jeho n´asledn´e nahr´an´ı na c´ılov´e u ´loˇziˇstˇe. Hlavn´ı v´ yhodou tohoto pˇr´ıstupu je moˇznost vyuˇzit´ı rychlejˇs´ıho stahov´an´ı popsan´eho v sekci 5.2. Nev´ yhodou pak je potˇreba dostateˇcnˇe velk´eho prostoru na lok´aln´ım disku pro doˇcasn´e uloˇzen´ı souboru. Dalˇs´ı nev´ yhodou je, ˇze soubor m˚ uˇze b´ yt nahr´an na vzd´alen´e u ´loˇziˇstˇe aˇz po jeho kompletn´ım staˇzen´ı na lok´aln´ı disk. Druhou variantou ˇreˇsen´ı by mohlo b´ yt sekvenˇcn´ı stahov´an´ı souboru do mezipamˇeti a souˇcasn´e nahr´av´an´ı staˇzen´ ych dat na c´ılov´e u ´loˇziˇstˇe. Mezipamˇet’ by tak mohla m´ıt velikost zlomku velikosti cel´eho souboru a nemusela by v˚ ubec vyuˇz´ıt lok´aln´ı diskov´ y prostor. Nev´ yhodou vˇsak je pomalejˇs´ı stahov´an´ı dat.
41
N´avrh rozˇs´ıˇren´e funkcionality
Rozvrˇzen´ı funkcionality
Pokud se vezme v potaz i kontrola konzistence dat a synchronizace sloˇzek, je v´ıce neˇz vhodn´e vypoˇc´ıt´avat kontroln´ı souˇcet souboru pˇri jeho pr˚ uchodu skrze klienta. Toto pˇrin´aˇs´ı dalˇs´ı nev´ yhodu pro druhou variantu ˇreˇsen´ı, jelikoˇz by bylo nutn´e duplikovat pˇrijat´a data. Jedna kopie dat by byla nahr´av´ana na c´ılov´e u ´loˇziˇstˇe, zat´ımco z druh´e kopie by byl vypoˇcten kontroln´ı souˇcet. Z navrˇzen´ ych variant byla zvolena metoda staˇzen´ı cel´eho souboru a jeho n´asledn´e nahr´an´ı na c´ılov´e u ´loˇziˇstˇe. D˚ uvodem t´eto volby byla moˇznost vyuˇzit´ı stahov´an´ı ve v´ıce vl´aknech. Dalˇs´ım d˚ uvodem pro tuto volbu byla moˇznost vyuˇzit´ı jiˇz navrˇzen´ ych operac´ı pro implementaci transferu soubor˚ u mezi u ´loˇziˇsti.
5.6
Rozvrˇ zen´ı funkcionality
V n´asleduj´ıc´ım obr´azku 5.6 je zachyceno rozdˇelen´ı navrˇzen´e z´akladn´ı i rozˇs´ıˇren´e funkcionality mezi implementovan´e programov´e ˇc´asti. Jednotliv´a funkcionalita je symbolicky oznaˇcena. USER INFO a USER QUOTA reprezentuj´ı z´akladn´ı operace pro z´ısk´an´ı informac´ı o uˇzivateli a jeho kapacity prostoru v r´amci u ´loˇziˇstˇe. N´asleduj´ı operace pro manipulaci se soubory. Operace LIST FOLDER pˇredstavuje operaci z´ısk´an´ı obsahu vzd´alen´e sloˇzky. CREATE FOLDER je pak vytvoˇren´ım sloˇzky v u ´loˇziˇsti. Operace pro nahr´av´an´ı a stahov´an´ı jsou oznaˇceny jako UPLOAD a DOWNLOAD. Operace pˇrejmenov´an´ı soubor˚ u a sloˇzek je oznaˇcena jako RENAME. Pˇresun a kop´ırov´an´ı soubor˚ u je pak MOVE a COPY. Operace maz´an´ı soubor˚ u a sloˇzek je nazv´ana DELETE. Operace SEARCH pak pˇredstavuje operaci vyhled´av´an´ı soubor˚ uvu ´loˇziˇsti. Posledn´ı z´akladn´ı funkcionalitou je z´ısk´av´an´ı metadat soubor˚ u a sloˇzek oznaˇcen´e jako METADATA. Rozˇs´ıˇren´a funkcionalita obsahuje operace pro transfer soubor˚ u mezi u ´loˇziˇsti TRANSFER. Tato operace zahrnuje kop´ırov´an´ı i pˇresun soubor˚ u. MULTI-UPLOAD pˇredstavuje operaci pro nahr´av´an´ı souboru na v´ıce u ´loˇziˇst’ z´aroveˇ n a MULTI-DOWNLOAD operaci pro stahov´an´ı souboru ve v´ıce vl´aknech. CHECKSUM pak oznaˇcuje rozˇs´ıˇrenou funkcionalitu pro vytv´aˇren´ı kontroln´ıch souˇct˚ u a jejich porovn´av´an´ı v r´amci nˇekter´ ych operac´ı. Posledn´ı je operace synchronizace SYNCHRONIZE, kter´a v sobˇe zahrnuje i selektivn´ı synchronizaci. Veˇsker´a z´akladn´ı funkcionalita je navrˇzena jako souˇc´ast knihovny. Z rozˇs´ıˇren´e funkcionality obsahuje knihovna jeˇstˇe operace pro nahr´av´an´ı souboru na 42
N´avrh rozˇs´ıˇren´e funkcionality
Rozvrˇzen´ı funkcionality
v´ıce u ´loˇziˇst’ a stahov´an´ı souboru z v´ıce u ´loˇziˇst’. Zbyl´a rozˇsiˇruj´ıc´ı funkcionalita byla navrˇzena jako souˇca´st aplikace vyuˇz´ıvaj´ıc´ı implementovanou knihovnu. Desktopov´a aplikace obsahuje veˇskerou funkcionalitu, kter´a je obsaˇzena v knihovnˇe. Nad r´amec jiˇz poskytnut´e funkcionality implementuje aplikace i zbylou rozˇsiˇruj´ıc´ı funkcionalitu. Souˇca´st´ı mobiln´ı aplikace je pouze omezen´a funkcionalita. Ze z´akladn´ıch operac´ı byly vynech´any operace pro pˇresun a kop´ırov´an´ı soubor˚ u a vyhled´av´an´ı. Z rozˇsiˇruj´ıc´ı funkcionality je pak vynech´ana operace pro transfer soubor˚ u mezi u ´loˇziˇsti. Operace pro nahr´av´an´ı soubor˚ u na v´ıce u ´loˇziˇst’ a stahov´an´ı z v´ıce u ´loˇziˇst’ jsou vyuˇz´ıv´any pouze v r´amci synchronizace, nikoliv samostatnˇe.
Obr´azek 5.6: Pˇrehled implementovan´e funkcionality.
43
6 Implementace knihovny Pro tvorbu knihovny bylo nutn´e zvolit nejprve komponenty. Z n´avrhu knihovny vypl´ yv´a, ˇze je potˇreba urˇcit nˇekolik z´akladn´ıch stavebn´ıch kamen˚ u, ze kter´ ych bude knihovna sloˇzena. Komponenty knihovny jsou tvoˇreny HTTP klientem, komponentou pro pr´aci s daty ve form´atu JSON, komponentou pro autorizaci pomoc´ı OAuth 2.0 a webov´ ym serverem. D´ale pak bylo rozhodnuto o implementaci sekce 5.2 jako souˇca´sti knihovny.
6.1
Volba komponent
Prvn´ı komponentou, kterou bylo potˇreba zvolit, byl HTTP klient. V u ´vahu pˇripadal HTTP klient od Apache, HTTP klient od Googlu a implementace HTTP spojen´ı dostupn´a jako souˇca´st Javy. Z tˇechto variant byl nakonec zvolen HTTP klient od Apache, protoˇze se jedn´a o robustn´ı ˇreˇsen´ı, kter´e je nav´ıc dostupn´e jako v´ ychoz´ı HTTP klient na platformˇe Android [33, 52]. Dalˇs´ı komponentou je parser pro data ve form´atu JSON. Zde se vych´azelo ze seznamu dostupn´ ych knihoven na json.org [19]. Hlavn´ımi kandid´aty byly knihovny JSON.simple, Jackson a GSON [34, 35, 53]. Pˇri v´ ybˇeru bylo pˇrihl´ıˇzeno na dokumentaci knihoven a na v´ ysledky srovn´avac´ıch test˚ u rychlosti serializace a deserializace. Na z´akladˇe srovn´avac´ıch test˚ u byla nakonec zvolena knihovna Jackson [54, 55, 56]. U autorizaˇcn´ı komponenty byl v´ ybˇer prov´adˇen na z´akladˇe seznamu klientsk´ ych knihoven pro OAuth 2.0 [14]. Po anal´ yze dostupn´ ych knihoven byla nakonec zvolena vlastn´ı implementace. V´ yhodou t´eto volby je pˇredevˇs´ım moˇznost zakomponov´an´ı webov´eho serveru pro z´ısk´av´an´ı pˇr´ıstupov´ ych token˚ u z autorizaˇcn´ıho procesu. Pro volbu webov´eho serveru bylo vych´azeno ze seznamu existuj´ıc´ıch open source webov´ ych server˚ u [57]. C´ılem bylo vybrat co nejjednoduˇsˇs´ı implementaci, kter´a bude z´aroveˇ n podporovat parsov´an´ı HTTP poˇzadavk˚ u a naslouch´an´ı na n´ahodn´em portu. Po prozkoum´an´ı dostupn´ ych ˇreˇsen´ı byl zvolen HTTP server Simple, kter´ y splˇ nuje vˇsechna krit´eria v´ ybˇeru [58].
44
Implementace knihovny
6.2
Odliˇsnosti cloudov´ych u ´loˇziˇst’
Odliˇ snosti cloudov´ ych u ´ loˇ ziˇ st’
Pˇri implementaci je potˇreba se soustˇredit na drobn´e odliˇsnosti mezi jednotliv´ ymi u ´loˇziˇsti. Hlavn´ı dosud nepopsan´e rozd´ıly jsou v konfiguraci aplikace na stranˇe u ´loˇziˇstˇe a v nˇekter´ ych operac´ıch, kter´e se skl´adaj´ı z v´ıce r˚ uzn´ ych poˇzadavk˚ u na server.
6.2.1
Konfigurace na stranˇ eu ´ loˇ ziˇ st’
Aby bylo moˇzn´e pouˇz´ıvat aplikaci pro pˇr´ıstup k u ´loˇziˇsti, je nutn´e ji na u ´loˇziˇsti zaregistrovat. Registrace aplikace vyˇzaduje registrovan´eho uˇzivatele. Registrac´ı aplikace je z´ısk´an identifik´ator aplikace a tajn´ y kl´ıˇc, kter´e jsou potˇreba pro autorizaci pˇr´ıstupu. U Dropboxu je d˚ uleˇzit´e povolit aplikaci pˇr´ıstup ke vˇsem soubor˚ um uˇzivatele. V opaˇcn´em pˇr´ıpadˇe by byl pˇr´ıstup aplikace omezen pouze na jednu sloˇzku speci´alnˇe vytvoˇrenou pro aplikaci. Po vytvoˇren´ı aplikace m´a aplikace pˇridˇelen status v´ yvoje a pro z´ısk´an´ı produkˇcn´ıho statusu je potˇreba odeslat ˇz´adost z administraˇcn´ıho rozhran´ı Dropboxu. Aplikaci je jinak moˇzno nastavit ikonu, popis a domovskou str´anku [59]. Pˇri registraci aplikace na Google Drive je potˇreba pˇri vytv´aˇren´ı OAuth pˇr´ıstupov´ ych informac´ı zvolit typ aplikace jako Installed application a Other. Kromˇe registrace aplikace je nutn´e jeˇstˇe povolit pˇr´ıstup ke konkr´etn´ımu API, v tomto pˇr´ıpadˇe Drive API. D´ale je moˇzn´e nastavit ikonu aplikace, podm´ınky uˇzit´ı a z´asady ochrany osobn´ıch u ´daj˚ u, kter´e budou zobrazeny pˇri autorizaci aplikace [60]. Pro OneDrive je rovnˇeˇz moˇzn´e nastaven´ı ikony aplikace a pˇriloˇzen´ı podm´ınek uˇzit´ı a z´asad ochrany osobn´ıch u ´daj˚ u. Oproti ostatn´ım u ´loˇziˇst´ım je zde moˇzn´e nastavit lokalizovan´ y n´azev aplikace. Zvl´aˇstnˇe formulovanou moˇznost´ı nastaven´ı je zde volba mezi mobiln´ı a desktopovou aplikac´ı. Nastaven´ı by mˇelo upravovat, kter´e autorizaˇcn´ı granty bude moˇzn´e v aplikaci vyuˇz´ıt. Pˇri testov´an´ı vˇsak nebyl zjiˇstˇen ˇza´dn´ y vliv tohoto nastaven´ı na knihovnu. Pro knihovnu byla nakonec zvolena volba desktopov´e aplikace. S touto volbou byla pozdˇeji knihovna vyuˇzita i na mobiln´e platformˇe bez probl´em˚ u [61].
45
Implementace knihovny
6.2.2
Odliˇsnosti cloudov´ych u ´loˇziˇst’
Rozf´ azov´ an´ı operac´ı
Nˇekter´e operace vyˇzaduj´ı vykon´an´ı v´ıce poˇzadavk˚ u neˇz pouze jednoho. Pˇritom je nutn´e jeˇstˇe rozliˇsovat, zda vˇsechny vykon´avan´e poˇzadavky v r´amci jedn´e operace maj´ı stejn´ y z´aklad nebo ne. V pˇr´ıpadˇe stejn´eho z´akladu je moˇzn´e zpracov´avat poˇzadavek uvnitˇr cyklu. V opaˇcn´em pˇr´ıpadˇe je potˇreba operaci rozdˇelit do v´ıce f´az´ı. D˚ uvodem pro rozf´azov´an´ı operac´ı jsou operace z´ısk´an´ı obsahu sloˇzky a nahr´av´an´ı souboru. Knihovna implementuje rozdˇelen´ı do tˇr´ı f´az´ı – pˇr´ıpravn´e, exekuˇcn´ı (hlavn´ı) a ukonˇcovac´ı. Prvn´ı f´aze slouˇz´ı jako zah´ajen´ı operace. V druh´e f´azi je vykon´an hlavn´ı poˇzadavek cel´e operace a v posledn´ı f´azi je provedeno ukonˇcen´ı operace. Jednotliv´e operace nemus´ı vyuˇz´ıt vˇsech f´az´ı. Z´ısk´ an´ı obsahu sloˇ zky – Pro tuto operaci je potˇreba rozdˇelen´ı do v´ıce f´az´ı z d˚ uvodu zp˚ usobu, jak´ ym je z´ısk´av´an obsah sloˇzky na u ´loˇziˇsti Google Drive. V tomto konkr´etn´ım pˇr´ıpadˇe je z´ısk´av´an zvl´aˇst’ seznam vˇsech soubor˚ u v u ´loˇziˇsti a seznam identifik´ator˚ u soubor˚ u, kter´e jsou obsahem konkr´etn´ı sloˇzky. Do preparaˇcn´ı f´aze byl tedy vyˇclenˇen poˇzadavek na z´ısk´an´ı seznamu identifik´ator˚ u. V hlavn´ı f´azi pak z˚ ustal poˇzadavek na z´ısk´an´ı obsahu sloˇzky. Nahr´ av´ an´ı souboru – Tato operace m´a pro kaˇzd´e u ´loˇziˇstˇe odliˇsn´ y pr˚ ubˇeh. Pro Dropbox plat´ı, ˇze v prvn´ım poˇzadavku je pos´ıl´ana prvn´ı ˇc´ast dat. V odpovˇedi serveru je pak obsaˇzen identifik´ator relace pro nahr´av´an´ı souboru. N´asleduje opakovan´e nahr´av´an´ı ˇc´ast´ı souboru dokud nen´ı soubor nahr´an cel´ y. Operace je zakonˇcena speci´aln´ım poˇzadavkem, kter´ ym je potvrzeno nahr´an´ı souboru na u ´loˇziˇstˇe a nastaven´ı jeho um´ıstˇen´ı v u ´loˇziˇsti [27]. Google Drive m´a pro nahr´av´an´ı souboru opaˇcn´ y postup. Nejprve jsou posl´ana metadata a teprv pot´e je nahr´av´an soubor po ˇca´stech [28]. Pro OneDrive nen´ı moˇzn´e nahr´av´an´ı souboru po ˇca´stech a staˇc´ı tak pouze jeden poˇzadavek [31]. V pr˚ ubˇehu implementaˇcn´ıho procesu bylo rozhodnuto o implementaci soubˇeˇzn´eho nahr´av´an´ı souboru na v´ıce u ´loˇziˇst’ z´aroveˇ n v r´amci knihovny. N´asledkem tohoto rozhodnut´ı bylo pˇresunut´ı procesu nahr´av´an´ı a jeho f´az´ı do samostatn´eho vl´akna. V d˚ usledku tohoto pˇresunu je pro nahr´av´an´ı souboru vyuˇzita pouze hlavn´ı f´aze, kter´a spouˇst´ı vl´akna pro nahr´av´an´ı. Posledn´ı f´aze tak nen´ı vyuˇz´ıv´ana ˇz´adnou operac´ı a z˚ ust´av´a tak pˇripravena pro moˇzn´a rozˇs´ıˇren´ı knihovny.
46
Implementace knihovny
6.3
Rozvrˇzen´ı knihovny
Rozvrˇ zen´ı knihovny
Knihovna je rozvrˇzena do nˇekolika z´akladn´ıch ˇc´ast´ı, kter´e navz´ajem spolupracuj´ı. Z´akladn´ı ˇc´ast´ı knihovny je spr´ava podporovan´ ych cloudov´ ych u ´loˇziˇst’, uˇzivatelsk´ ych u ´ˇct˚ u a pˇr´ıstupov´ ych token˚ u. Cloudov´ a u ´ loˇ ziˇ stˇ e – Rozhran´ım pro spr´avu u ´loˇziˇst’ je CloudManager. V knihovnˇe je vytvoˇrena i jeho jednoduch´a implementace, kter´a naˇc´ıt´a definice cloudov´ ych u ´loˇziˇst’ ze soubor˚ u ve form´atu JSON. Kaˇzd´a definice cloudov´eho u ´loˇziˇstˇe obsahuje z´akladn´ı identifikaci u ´loˇziˇstˇe, pˇr´ıstupov´e informace pro autorizaci aplikace a definice poˇzadavk˚ u pro autorizaci a pro jednotliv´e operace. Kaˇzd´ y poˇzadavek pak obsahuje URI poˇzadavku, HTTP metodu poˇzadavku a m˚ uˇze obsahovat definici mapov´an´ı parametr˚ u, seznam parametr˚ u vol´an´ı, hlaviˇcky poˇzadavku a tˇelo poˇzadavku. Uˇ zivatelsk´ eu ´ˇ cty – Pro spr´avu uˇzivatelsk´ ych u ´ˇct˚ u je vytvoˇreno rozhran´ı AccountManager. D´ale je dostupn´a jeho implementace pracuj´ıc´ı se soubory na lok´aln´ım disku. Informace uchov´avan´e pro kaˇzd´ y uˇzivatelsk´ y u ´ˇcet jsou tvoˇreny n´azvem u ´ˇctu, identifik´atorem cloudov´eho u ´loˇziˇstˇe a identifik´atorem tokenu. Pˇ r´ıstupov´ e tokeny – Pro kaˇzd´ y uˇzivatelsk´ y u ´ˇcet je potˇreba ukl´adat pˇr´ıstupov´e a obnovovac´ı tokeny. Jelikoˇz jsou pˇr´ıstupov´ y i obnovovac´ı token v´az´any pouze na jeden u ´ˇcet, je moˇzn´e je uchov´avat spoleˇcnˇe v p´aru. Pro spr´avu token˚ u je pˇripraveno rozhran´ı CredentialStore a dvˇe z´akladn´ı implementace tohoto rozhran´ı, kter´e pracuj´ı se soubory. Prvn´ı implementac´ı je z´akladn´ı ukl´ad´an´ı token˚ u do souboru. Na v´ ybˇer je zde typ serializace. Je moˇzno volit mezi z´akladn´ı serializac´ı objekt˚ u dostupn´e v Javˇe a pˇrevodem objekt˚ u do form´atu JSON. Pro z´ısk´an´ı tokenu je nutn´e zn´at jeho identifik´ator, pod kter´ ym je uloˇzen. Identifik´atory jsou tvoˇreny ˇretˇezci a je moˇzn´e je zvolit ruˇcnˇe nebo generovat n´ahodnˇe. V´ ychoz´ı d´elka generovan´eho identifik´atoru je 8 znak˚ u. Druhou implementac´ı je rozˇs´ıˇren´ı prvn´ı implementace o ˇsifrov´an´ı souboru. Pro ˇsifrov´an´ı je dle n´avrhu vyuˇzito symetrick´e ˇsifrov´an´ı AES [48]. V implementaci je nastaven v´ ychoz´ı kl´ıˇc pro ˇsifrov´an´ı, kter´ y je moˇzno zmˇenit. Pro serializaci dat je zde vyuˇz´ıv´ano pouze objektov´e serializace Javy a nen´ı ji moˇzno zmˇenit. Tato implementace splˇ nuje poˇzadavky na ukl´ad´an´ı token˚ u specifikovan´e v dokumentu RFC 6749 [13]. 47
Implementace knihovny
Rozvrˇzen´ı knihovny
Pro spr´avu u ´loˇziˇst’, uˇzivatel˚ u a token˚ u plat´ı n´asleduj´ıc´ı logika. Kaˇzd´a definice cloudov´eho u ´loˇziˇstˇe se vztahuje pouze k jednomu u ´loˇziˇsti. Mˇelo by se pˇredej´ıt duplicitn´ım definic´ım u ´loˇziˇst’. V´ıce uˇzivatelsk´ ych u ´ˇct˚ u m˚ uˇze pˇristupovat k jednomu cloudov´emu u ´loˇziˇsti. Pro kaˇzd´ y uˇzivatelsk´ yu ´ˇcet existuje vlastn´ı sada token˚ u. Tyto vazby jsou pak zn´azornˇeny v obr´azku 6.1.
Obr´azek 6.1: Vazby mezi cloudov´ ymi u ´loˇziˇsti, tokeny a uˇzivatelsk´ ymi u ´ˇcty. Dalˇs´ı ˇca´st´ı knihovny je vlastn´ı implementace autorizaˇcn´ıho procesu. Do t´eto ˇca´sti patˇr´ı pˇredevˇs´ım rozhran´ı OAuth2Grant, kter´e tvoˇr´ı z´aklad pro implementaci jednotliv´ ych autorizaˇcn´ıch proces˚ u. Implementac´ı tohoto rozhran´ı lze tak´e zav´est rozˇsiˇruj´ıc´ı granty. Jednou z metod rozhran´ı je metoda authorize, kter´a spouˇst´ı autorizaˇcn´ı proces. Pokud se jedn´a o proces, pˇri kter´em je vyˇzadov´ana interakce s uˇzivatelem, je touto metodou navr´acen poˇzadavek na interakci s uˇzivatelem. Knihovna rovnˇeˇz poskytuje rozhran´ı AuthorizationCallback, jehoˇz implementaci je pr´avˇe pˇred´av´an poˇzadavek na interakci s uˇzivatelem. Implementace tohoto rozhran´ı tak m˚ uˇze napˇr´ıklad otevˇr´ıt okno prohl´ıˇzeˇce a zobrazit uˇzivateli str´anku s poˇzadavkem na autorizaci uˇzivatele. Souˇca´st´ı autorizace je i naslouch´an´ı na lok´aln´ım portu. Jelikoˇz se jedn´a o n´ahodn´ y port, je starost´ı naslouchaj´ıc´ıho serveru i pˇred´an´ı informac´ı o pˇridˇelen´em portu. Implementace pˇred´av´an´ı ˇc´ısla lok´aln´ıho portu odpov´ıd´a n´avrhu a je pˇred´av´ano parametrem state. Ned´ılnou u ´lohou naslouchaj´ıc´ıho serveru je pˇrijet´ı poˇzadavku od autorizaˇcn´ıch serveru a pˇred´an´ı pˇrijat´ ych dat pomoc´ı rozhran´ı RedirectCallback. Od tˇr´ıdy implementuj´ıc´ı toto rozhran´ı je pak navr´acen obsah webov´e str´anky, kter´a m´a b´ yt zobrazena uˇzivateli.
48
Implementace knihovny
Rozvrˇzen´ı knihovny
Posledn´ı velkou ˇca´st´ı knihovny je implementace jednotliv´ ych operac´ı. Pro snazˇs´ı implementaci je zde vytvoˇrena abstraktn´ı tˇr´ıda Operation
, kter´a slouˇz´ı jako z´aklad pro vˇsechny ostatn´ı operace. Souˇca´st´ı t´eto tˇr´ıdy je i typov´ y parametr T, kter´ y urˇcuje typ n´avratov´ ych dat operace. Kaˇzd´a operace rozˇsiˇruj´ıc´ı tuto abstraktn´ı operaci mus´ı obsahovat implementaci metod abort, operationBegin, operationExecute a operationFinish. Posledn´ı tˇri jmenovan´e metody tvoˇr´ı dohromady cel´ y proces operace a jsou vol´any z metody execute. Rozdˇelen´ım metody execute do tˇr´ı dalˇs´ıch metod je dosaˇzeno rozf´azov´an´ı operace (v´ıce v sekci 6.2.2). Metoda abort – Tato metoda slouˇz´ı pro pˇreruˇsen´ı cel´e operace. Pokud tedy operace vyuˇz´ıv´a napˇr´ıklad v´ıce vl´aken, mus´ı pˇri zavol´an´ı t´eto metody b´ yt vˇsechna vl´akna pˇreruˇsena a bˇeh operace ukonˇcen. Pro operaci bˇeˇz´ıc´ı v jednom vl´aknˇe to znamen´a pˇreruˇsen´ı pr´avˇe vykon´avan´eho poˇzadavku HTTP klientem. Metoda operationBegin – Metoda je prvn´ı f´az´ı operace, ve kter´e by mˇelo doch´azet k z´ısk´an´ı dat potˇrebn´ ych pro vykon´an´ı dalˇs´ı f´aze operace. Vˇetˇsina operac´ı m´a tuto metodu pr´azdnou, protoˇze nevyˇzaduj´ı ˇza´dn´e pˇredzpracov´an´ı. Operacemi, kter´e vyˇzaduj´ı pˇredzpracov´an´ı, jsou operace z´ısk´an´ı obsahu sloˇzky a nahr´av´an´ı souboru. Metoda operationExecute – Jedn´a se o hlavn´ı f´azi operace, kter´a je implementov´ana vˇsemi operacemi. V t´eto f´azi je zpravidla provedeno odesl´an´ı poˇzadavku na cloudov´e u ´loˇziˇstˇe a zpracov´an´ı pˇrijat´e odpovˇedi. Operace stahov´an´ı souboru a nahr´av´an´ı souboru si v t´eto f´azi vytv´aˇrej´ı vl´akna. Metoda operationFinish – Tato metoda slouˇz´ı k odesl´an´ı poˇzadavku slouˇz´ıc´ıho pro ukonˇcen´ı cel´e operace. Ve vˇetˇsinˇe pˇr´ıpad˚ u je i tato metoda ponech´ana pr´azdn´a. V´ yjimku tvoˇr´ı operace nahr´av´an´ı souboru, kter´a zde v pˇr´ıpadˇe nahr´av´an´ı souboru po ˇc´astech pos´ıl´a poˇzadavek na ukonˇcen´ı nahr´av´an´ı souboru. Jak jiˇz bylo zm´ınˇeno, nˇekter´e operace si vytv´aˇrej´ı vl´akna. Konkr´etnˇe se jedn´a o operace stahov´an´ı souboru a nahr´av´an´ı souboru. Pro stahov´an´ı souboru je dˇelen´ı do vl´aken prov´adˇeno z d˚ uvodu paraleln´ıho stahov´an´ı, at’ uˇz se jedn´a o stahov´an´ı z jednoho nebo z v´ıce u ´loˇziˇst’. U nahr´av´an´ı souboru je prostˇrednictv´ım v´ıce vl´aken umoˇznˇeno nahr´avat soubor na v´ıce u ´loˇziˇst’ z´aroveˇ n (viz sekce 5.1). Pro operace stahov´an´ı a nahr´av´an´ı souboru je dostupn´a abstraktn´ı tˇr´ıda ProgressListener, kter´a umoˇzn ˇuje sledov´an´ı pr˚ ubˇehu tˇechto operac´ı. Jedi49
Implementace knihovny
Rozvrˇzen´ı knihovny
nou abstraktn´ı metodou t´eto tˇr´ıdy je metoda onProgress(), kter´a je vyvoˇ l´av´ana po uplynut´ı ˇcasov´eho intervalu. Casov´ y interval je moˇzn´e pˇredat tˇr´ıdˇe pomoc´ı konstruktoru. Pˇr´ısluˇsn´e operace tak pˇred´avaj´ı tˇr´ıdˇe poˇcty pˇrenesen´ ych bajt˚ u a ta se star´a o jejich pˇred´an´ı uˇzivateli. Pro stahov´an´ı i nahr´av´an´ı soubor˚ u mus´ı b´ yt vˇzdy dod´ana knihovnˇe implementace t´eto tˇr´ıdy. Obr´azek 6.2 zachycuje zjednoduˇsen´ y schematick´ y model knihovny, ve kter´em je kladen pˇredevˇs´ım d˚ uraz na zobrazen´ı vnitˇrn´ı struktury knihovny a zachycen´ı oblast´ı, do kter´ ych n´aleˇz´ı jednotliv´e komponenty knihovny. Na lev´e stranˇe je vstupn´ı bod knihovny. Knihovna poskytuje sv´e metody aplikac´ım formou API. Na druh´e stranˇe pak knihovna z´ısk´av´a a ukl´ad´a uˇzivatelsk´e u ´ˇcty, definice cloudov´ ych u ´loˇziˇst’ a tokeny, a pˇristupuje ke cloudov´ ym u ´loˇziˇst´ım. Uvnitˇr knihovny jsou pak vidˇet jednotliv´e komponenty, ze kter´ ych se knihovna skl´ad´a, a zp˚ usob, kter´ ym mezi sebou jednotliv´e komponenty spolupracuj´ı.
Obr´azek 6.2: Vnitˇrn´ı struktura knihovny. Samotn´a knihovna pak obsahuje 69 soubor˚ u, kter´e obsahuj´ı celkem 52 tˇr´ıd, 7 rozhran´ı, 7 enumerac´ı a 4 v´ yjimky. Soubory jsou rozdˇeleny do 5 bal´ık˚ u se specializovan´ ym zamˇeˇren´ım a jednoho obecn´eho bal´ıku. Specializovan´e bal´ıky tvoˇr´ı n´asleduj´ıc´ı bal´ıky: 50
Implementace knihovny
Dosaˇzen´e v´ysledky
• filesystem – Obsahem tohoto bal´ıku jsou jednotliv´e operace prov´adˇen´e nad u ´loˇziˇsti. Souˇc´ast´ı bal´ıku jsou i tˇr´ıdy umoˇzn ˇuj´ıc´ı sledov´an´ı pr˚ ubˇehu nˇekter´ ych operac´ı. • http – Tento bal´ık obsahuje implementaci HTTP metod COPY a MOVE, kter´e vyuˇz´ıv´a OneDrive. • json – V tomto bal´ıku jsou pˇrev´aˇznˇe tˇr´ıdy typu Plain Old Java Object (POJO), kter´e jsou mapov´any JSON parserem. • oauth2 – Obsahem tohoto bal´ıku je implementace autorizace pomoc´ı OAuth 2.0. Souˇc´ast´ı bal´ıku je i webov´ y server pro zachycen´ı pˇresmˇerovan´ı po dokonˇcen´ı procesu autorizace. • utils – V tomto bal´ıku jsou obsaˇzena rozhran´ı pro spr´avu uˇzivatelsk´ ych u ´ˇct˚ u, definic cloudov´ ych u ´loˇziˇst’ a token˚ u. Souˇca´st´ı bal´ıku jsou i z´akladn´ı implementace tˇechto rozhran´ı a tˇr´ıda Utils, kter´a zprostˇredkov´av´a statick´e metody pro u ´pravu dat. Rozsah knihovny byl mˇeˇren pomoc´ı metriky Lines of Code (LOC). Celkov´ y rozsah knihovny pˇres´ahl 11 tis´ıc ˇra´dek k´odu, z toho pˇribliˇznˇe 31% je obsaˇzeno v bal´ıku filesystem, 26% v bal´ıku oauth2, 16% je ve v´ ychoz´ım bal´ıku, 15% v bal´ıku json, 11% v bal´ıku utils a 1% v bal´ıku http [66].
6.4
Dosaˇ zen´ e v´ ysledky
Implementace knihovny podporuje vˇsechny z´akladn´ı operace navrˇzen´e pro implementaci. Rovnˇeˇz je v knihovnˇe implementov´an navrˇzen´ y autorizaˇcn´ı proces. Nad r´amec tˇechto vlastnost´ı je jeˇstˇe implementov´ano rychlejˇs´ı stahov´an´ı soubor˚ u navrˇzen´e v sekci 5.2 a paraleln´ı nahr´av´an´ı ze sekce 5.1. Rychlejˇs´ı stahov´an´ı pak bylo testov´ano a jeho v´ ysledky n´aslednˇe porovn´any s tradiˇcn´ım sekvenˇcn´ım stahov´an´ım. V´ ysledky pro rychlejˇs´ı stahov´an´ı jsou zaznamen´any v tabulce 6.1. Graficky jsou pak v´ ysledky zn´azornˇeny v obr´azku 6.3. Pro testov´an´ı rychlejˇs´ıho stahov´an´ı byl pˇripraven soubor o velikosti 256 MB. Pˇri stahov´an´ı byl tento soubor rozdˇelen na nˇekolik ˇca´st´ı, kter´e byly stahov´any nez´avisle na sobˇe. Dˇelen´ı souboru bylo provedeno automaticky knihovnou. Mˇeˇreny byly ˇcasy stahov´an´ı souboru pro r˚ uzn´e konfigurace vl´aken a u ´loˇziˇst’. Testov´an´ı probˇehlo na symetrick´e lince s kapacitou pˇrenosu dat 100 Mb/s. Kaˇzd´e mˇeˇren´ı bylo provedeno 10kr´at. 51
Implementace knihovny
Dosaˇzen´e v´ysledky
Vzhledem k tomu, ˇze v´ ysledky mˇeˇren´ı jsou ovlivˇ nov´any r˚ uzn´ ymi nepˇredv´ıdateln´ ymi vlivy, nepˇrineslo by v tomto pˇr´ıpadˇe v´ıce mˇeˇren´ı nutnˇe pˇresnˇejˇs´ı v´ ysledky. Jelikoˇz se jedn´a o cloudovou sluˇzbu, ke kter´e se pˇristupuje prostˇrednictv´ım s´ıtˇe Internet, mˇenily by se v´ ysledky v z´avislosti na denn´ı dobˇe a vyt´ıˇzen´ı jednotliv´ ych s´ıt’ov´ ych prvk˚ u mezi knihovnou a u ´loˇziˇstˇem. ´ celem zde prezentovan´ Uˇ ych v´ ysledku tedy nen´ı urˇcit pˇresn´e hodnoty, ale pouze podloˇzit funkˇcnost navrˇzen´eho konceptu ˇreˇsen´ı. Pro zpracov´an´ı v´ ysledk˚ u mˇeˇren´ı bylo pouˇzito statistick´ ych metod. Z namˇeˇren´ ych ˇcas˚ u jsou vypoˇcteny dva v´ ysledn´e ˇcasy. Jeden odpov´ıd´a aritmetick´emu pr˚ umˇeru namˇeˇren´ ych ˇcas˚ u, zat´ımco druh´ y je jejich medi´anem. Pro namˇeˇren´e ˇcasy je rovnˇeˇz vypoˇctena smˇerodatn´a odchylka [62]. Urychlen´ı ud´av´a kolikr´at rychlejˇs´ı bylo stahov´an´ı ve v´ıce vl´aknech oproti stahov´an´ı v jednom vl´aknˇe. ´ ziˇ Vl´ aken Uloˇ stˇ e 1
2
3
5
7
10
Dropbox Google Drive OneDrive Dropbox Google Drive OneDrive Dropbox Google Drive OneDrive Dropbox Google Drive OneDrive Dropbox Google Drive OneDrive Dropbox Google Drive OneDrive
V´ ysledn´ yˇ cas [s] Odchylka [s] Urychlen´ı Pr˚ umˇ er Medi´ an 184, 20 186, 72 ±8, 12 ——– 33, 71 31, 18 ±6, 39 ——– 481, 49 477, 63 ±19, 56 ——– 112, 80 113, 06 ±6, 88 ∼ 1, 64× 25, 26 24, 95 ±0, 89 ∼ 1, 30× 250, 92 250, 63 ±9, 66 ∼ 1, 91× 77, 32 75, 36 ±4, 35 ∼ 2, 43× 23, 81 23, 85 ±0, 32 ∼ 1, 36× 181, 87 182, 41 ±3, 88 ∼ 2, 63× 56, 95 58, 09 ±5, 62 ∼ 3, 22× 23, 51 23, 46 ±0, 28 ∼ 1, 38× 124, 86 122, 60 ±6, 72 ∼ 3, 88× 48, 65 48, 66 ±4, 63 ∼ 3, 81× 23, 43 23, 40 ±0, 19 ∼ 1, 39× 90, 61 89, 91 ±3, 60 ∼ 5, 31× 40, 90 41, 56 ±3, 65 ∼ 4, 50× 23, 42 23, 42 ±0, 16 ∼ 1, 39× 70, 80 70, 35 ±4, 40 ∼ 6, 80×
Tabulka 6.1: Mˇeˇren´ı rychlosti stahov´an´ı. Z v´ ysledk˚ u mˇeˇren´ı v tabulce 6.1 je vidˇet, ˇze paraleln´ı pˇr´ıstup k soubor˚ um vu ´loˇziˇsti je moˇzn´ y a lze jej vyuˇz´ıt pro rychlejˇs´ı stahov´an´ı soubor˚ u. Nav´ yˇsen´ı rychlosti stahov´an´ı pro Google Drive se zastavilo uˇz pˇri pouˇzit´ı tˇrech vl´aken. 52
Implementace knihovny
Dosaˇzen´e v´ysledky
Pˇri pouˇzit´ı v´ıce vl´aken se jiˇz jen stabilizovaly ˇcasy na hodnotˇe kolem 23, 45 sekund. Toto bylo zp˚ usobeno pln´ ym vyt´ıˇzen´ım linky a mˇeˇren´ı tak bylo nutn´e zopakovat na lince s kapacitou 1 Gb/s. Pˇri testov´an´ı na 1 Gb/s lince se vˇsak uk´azalo, ˇze i pˇres nav´ yˇsen´ı kapacity linky byla rychlost stahov´an´ı pˇribliˇznˇe stejn´a. Vynech´ame-li v´ ysledky pro Google Drive, m˚ uˇzeme ˇr´ıct, ˇze s pˇrib´ yvaj´ıc´ımi vl´akny rostla i rychlost stahov´an´ı. Pˇri pouˇzit´ı 10-ti vl´aken je rychlost stahov´an´ı pro Dropbox nav´ yˇsena na v´ıce neˇz ˇctyˇrn´asobek p˚ uvodn´ı rychlosti. Pro OneDrive se nav´ yˇsen´ı rychlosti dostalo aˇz t´emˇeˇr na sedmin´asobek. Pro Google Drive je nav´ yˇsen´ı rychlosti stahov´an´ı podstatnˇe niˇzˇs´ı, avˇsak i tak se jedn´a o nav´ yˇsen´ı oproti hodnot´am dosaˇzen´ ym pro jedno vl´akno. V tomto ohledu splnila knihovna veˇsker´a oˇcek´av´an´ı.
Obr´azek 6.3: Graf urychlen´ı stahov´an´ı.
53
7 Implementace klientsk´e aplikace Z´akladem klientsk´e aplikace je implementovan´a knihovna, kter´a poskytuje aplikaci z´akladn´ı funkcionalitu a nˇekter´e rozˇsiˇruj´ıc´ı funkce. C´ılem implementace aplikace tak je poskytnout uˇzivateli grafick´e uˇzivatelsk´e rozhran´ı (GUI) pro pr´aci s u ´loˇziˇsti a rozˇs´ıˇrenou funkcionalitu, kter´a nen´ı souˇc´ast´ı knihovny.
7.1
Rozˇ s´ıˇ ren´ a funkcionalita
V r´amci aplikace je implementov´ana rozˇs´ıˇren´a funkcionalita, kter´a je tvoˇrena kontrolou konzistence dat, synchronizac´ı sloˇzek a transferem soubor˚ u mezi u ´loˇziˇsti.
7.1.1
Kontrola konzistence dat
J´adrem kontroly konzistence dat je tˇr´ıda ChecksumProvider, kter´a m´a na starosti spr´avu kontroln´ıch souˇct˚ u a jejich pˇriˇrazov´an´ı k metadat˚ um soubor˚ u zu ´loˇziˇst’. Pro uchov´av´an´ı kontroln´ıch souˇct˚ u je na lok´aln´ım disku vytvoˇren soubor .multicloud. Kontroln´ı souˇcty jsou uchov´av´any ve form´atu JSON. Stejn´ y soubor je vytvoˇren i v koˇrenov´em adres´aˇri na kaˇzd´em cloudov´em u ´loˇziˇsti spravovan´em v aplikaci. V pˇr´ıpadˇe poˇskozen´ı nebo smaz´an´ı lok´aln´ıho souboru je tak moˇzn´e z´ıskat soubor zpˇet. Dalˇs´ı v´ yhodou uloˇzen´ı souboru na cloudov´ ych u ´loˇziˇst´ıch je moˇznost jejich pˇrenositelnosti na dalˇs´ı uˇzivatele a stroje. Pokud by tedy pˇristupoval uˇzivatel ke sv´emu u ´loˇziˇsti z jin´eho stroje, z´ısk´a kontroln´ı souˇcty staˇzen´ım jednoho souboru. Aby byly kontroln´ı souˇcty pˇrenositeln´e, je u kaˇzd´eho z´aznamu nam´ısto lok´aln´ıho n´azvu u ´ˇctu pouˇzito identifik´atoru uˇzivatele na u ´loˇziˇsti. V pˇr´ıpadˇe soubˇeˇzn´eho pˇr´ıstupu k u ´loˇziˇsti z v´ıce instanc´ı aplikace z´aroveˇ n, je pˇred t´emˇeˇr kaˇzdou operac´ı kontrolov´ana aktu´alnost soubor˚ u s kontroln´ımi souˇcty. Pokud je na nˇekter´em z u ´loˇziˇst’ detekov´an novˇejˇs´ı soubor s kontroln´ımi souˇcty, je tento soubor staˇzen a slouˇcen s lok´aln´ım souborem. Slouˇcen´ı prob´ıh´a tak, ˇze novˇejˇs´ı soubor je pouˇzit jako z´aklad. Ze starˇs´ıho souboru jsou pak postupnˇe vyb´ır´any jednotliv´e z´aznamy a kontrolov´ana jejich 54
Implementace klientsk´e aplikace
Rozˇs´ıˇren´a funkcionalita
existence v novˇejˇs´ım souboru. Pokud jiˇz v novˇejˇs´ım souboru existuj´ı, jsou zahozeny. Pokud nikoliv, jsou do novˇejˇs´ıho souboru pˇrid´any. C´ılem slouˇcen´ı je udrˇzovat jen nejnovˇejˇs´ı verze z´aznam˚ u, ale pˇritom nepˇrij´ıt o ˇza´dn´e z´aznamy. Naplnˇen´ı souboru s kontroln´ımi souˇcty prob´ıh´a pˇri kaˇzd´e operaci nahr´av´an´ı souboru a transferu soubor˚ u mezi u ´loˇziˇsti. D´ale pak byla vytvoˇrena speci´aln´ı operace, kter´a st´ahne soubor z u ´loˇziˇstˇe do doˇcasn´e sloˇzky a spoˇcte jeho kontroln´ı souˇcet. Staˇzen´ y soubor je n´aslednˇe smaz´an. Pˇriˇrazen´ı kontroln´ıho souˇctu prob´ıh´a na z´akladˇe shody mezi uloˇzen´ ymi metadaty v z´aznamu kontroln´ıho souˇctu a metadaty z´ıskan´ ymi z u ´loˇziˇstˇe. Kontrolovan´e atributy souboru jsou pops´any v sekci 5.3. Kontroln´ı souˇcty pak hraj´ı d˚ uleˇzitou roli pˇri stahov´an´ı souboru z v´ıce u ´loˇziˇst’ z´aroveˇ n. Postup stahov´an´ı prob´ıh´a v tomto pˇr´ıpadˇe tak, ˇze uˇzivatel nejprve zvol´ı soubor, kter´ y chce st´ahnout. Tento soubor je n´aslednˇe nutn´e naj´ıt i v dalˇs´ıch u ´loˇziˇst´ıch. • Pokud vybran´ y soubor mˇel spoˇcten´ y kontroln´ı souˇcet, vyhled´avaj´ı se v dalˇs´ıch u ´loˇziˇst´ıch pouze soubory se shodn´ ym kontroln´ım souˇctem nebo soubory bez kontroln´ıho souˇctu se shodnou velikost´ı. Pokud je uˇzivatelem vybr´an soubor bez kontroln´ıho souˇctu, je uˇzivatel na tuto skuteˇcnost pˇred stahov´an´ım upozornˇen. Obsah staˇzen´eho souboru by ve v´ ysledku nemusel odpov´ıdat. • Pokud vybran´ y soubor nemˇel spoˇcten´ y kontroln´ı souˇcet, je moˇzno vyb´ırat ze soubor˚ u se shodnou velikost´ı jako m´a p˚ uvodnˇe vybran´ y soubor. Pokud ale nˇekter´e z vybran´ ych soubor˚ u maj´ı kontroln´ı souˇcty spoˇcten´e a navz´ajem se liˇs´ı, nen´ı soubor moˇzn´e st´ahnout, protoˇze nˇekter´e ze soubor˚ u obsahuj´ı odliˇsn´a data.
7.1.2
Synchronizace sloˇ zek
Dalˇs´ı rozˇs´ıˇrenou funkcionalitou, kter´a je zaloˇzena na kontroln´ıch souˇctech, je synchronizace sloˇzek. Pro synchronizaci sloˇzek byl zvolen jednor´azov´ y bˇeh synchronizaˇcn´ıho procesu vzhledem k jeho jednoduˇsˇs´ı implementaci a prioritu dostala lok´aln´ı sloˇzka. V nastaven´ı programu je tak moˇzn´e zvolit si sloˇzku z lok´aln´ıho disku, kter´a bude synchronizov´ana. Souˇc´ast´ı synchronizace je i moˇznost v´ ybˇeru, na kter´e u ´loˇziˇstˇe bude kter´ y soubor synchronizov´an. V´ ychoz´ım stavem pro kaˇzd´ y soubor pak je pr´azdn´a mnoˇzina u ´loˇziˇst’, na kter´e bude synchronizov´an. 55
Implementace klientsk´e aplikace
Rozˇs´ıˇren´a funkcionalita
Proces synchronizace je zah´ajen zjiˇstˇen´ım struktury soubor˚ u v lok´aln´ı sloˇzce. N´aslednˇe je pro tyto soubory vypoˇcten kontroln´ı souˇcet. Pot´e se pokraˇcuje zjiˇstˇen´ım struktury soubor˚ u ve sloˇzk´ach na vzd´alen´ ych u ´loˇziˇst´ıch a dopoˇcten´ı chybˇej´ıc´ıch kontroln´ıch souˇct˚ u. Po tˇechto operac´ıch m˚ uˇze probˇehnout porovn´an´ı kontroln´ıch souˇct˚ u a zjiˇstˇen´ı zmˇen soubor˚ u. V pˇr´ıpadˇe nalezen´ı zmˇeny lok´aln´ıho souboru, je tento soubor pˇripraven k nahr´an´ı na u ´loˇziˇstˇe. Pokud pak soubor v u ´loˇziˇsti je beze zmˇen, m˚ uˇze probˇehnout nahr´an´ı lok´aln´ı verze na u ´loˇziˇstˇe. Pokud je ale detekov´ana zmˇena na vzd´alen´em souboru, je vyˇzadov´an z´asah uˇzivatele, kter´ y m˚ uˇze rozhodnout, kter´ y ze soubor˚ u bude pˇreps´an, pˇr´ıpadnˇe m˚ uˇze rozhodnout o pˇreskoˇcen´ı synchronizace souboru. Jelikoˇz byla zvolena strategie s prioritn´ı lok´aln´ı sloˇzkou, zmˇena souboru ve vzd´alen´em u ´loˇziˇsti nevyvol´a automaticky stahov´an´ı vzd´alen´eho souboru. Nam´ısto toho je opˇet na uˇzivateli rozhodnout, kter´ y ze soubor˚ u bude pˇreps´an. Podobnˇe je tomu i v pˇr´ıpadˇe maz´an´ı soubor˚ u. Smaz´an´ı souboru v u ´loˇziˇsti nem´a za n´asledek smaz´an´ı souboru na lok´aln´ım disku. Pokud by tedy uˇzivatel smazal soubor z u ´loˇziˇstˇe a spustil proces synchronizace, soubor by byl na u ´loˇziˇstˇe znovu nahr´an. Obdobnˇe je tomu i pˇri smaz´an´ı lok´aln´ıho souboru. Pˇri jeho smaz´an´ı nedojde ke smaz´an´ı souboru v u ´loˇziˇsti. D˚ uvodem pro toto chov´an´ı je to, ˇze k souboru v u ´loˇziˇsti m˚ uˇze b´ yt pˇristupov´ano z v´ıce zaˇr´ızen´ı. Pokud by tak byl smaz´an soubor v u ´loˇziˇsti, byl by pˇri synchronizaci dalˇs´ıho zaˇr´ızen´ı opˇet na u ´loˇziˇstˇe nahr´an.
7.1.3
Transfer soubor˚ u
Tato rozˇsiˇruj´ıc´ı funkcionalita je implementov´ana pomoc´ı operac´ı CUT, COPY a PASTE. V pˇr´ıpadˇe vyvol´an´ı operace CUT nebo COPY jsou uloˇzena do pamˇeti metadata souboru, nad kter´ ym byla tato operace vyvol´ana. Spoleˇcnˇe s metadaty je uchov´ano i u ´loˇziˇstˇe, nad kter´ ym byla tato operace provedena a typ operace. Operac´ı PASTE nad jin´ ym u ´loˇziˇstˇem je spuˇstˇen proces transferu soubor˚ u mezi u ´loˇziˇsti. Tento proces prob´ıh´a tak, ˇze je nejprve soubor staˇzen na lok´aln´ı disk. Pot´e je vypoˇcten jeho kontroln´ı souˇcet a nakonec je soubor nahr´an na c´ılov´e u ´loˇziˇstˇe. Pokud se jednalo o pˇresun souboru, je p˚ uvodn´ı soubor smaz´an. Operace maz´an´ı je prov´adˇena jako posledn´ı pro pˇr´ıpad moˇzn´e chyby v pˇrenosu souboru.
56
Implementace klientsk´e aplikace
7.2
Rozvrˇzen´ı aplikace
Rozvrˇ zen´ı aplikace
Aplikace je rozdˇelena do dvou hlavn´ıch ˇc´ast´ı. Z´akladem je grafick´e rozhran´ı, kter´e poskytuje uˇzivateli okamˇzitou odezvu na prov´adˇen´e akce. Aby vˇsak toto bylo moˇzn´e, je na pozad´ı vytvoˇreno druh´e vl´akno (d´ale referov´ano jako worker ), kter´e m´a na starosti pr´aci s knihovnou a vol´an´ı jej´ıch metod. Worker pak po dokonˇcen´ı operace pos´ıl´a z´ıskan´a data zpˇet grafick´e ˇca´sti, kter´a je zobraz´ı. Celkovˇe je aplikace rozdˇelena do 6 bal´ık˚ u, kter´e obsahuj´ı dohromady 63 soubor˚ u. V tˇechto souborech je obsaˇzeno celkem 59 tˇr´ıd, 3 enumerace a jedno rozhran´ı. Rozsah aplikace podle metriky LOC pˇrevyˇsuje 11 tis´ıc ˇra´dek k´odu. Z tohoto mnoˇzstv´ı je pˇribliˇznˇe 33% obsaˇzeno v bal´ıku data, 27% v bal´ıku dialog, 16% v bal´ıku action, 14% ve v´ ychoz´ım bal´ıku a 5% v kaˇzd´em z bal´ık˚ u renderer a callback [66]. N´asleduje struˇcn´ y popis jednotliv´ ych bal´ık˚ u: • action – Obsahem tohoto bal´ıku jsou akce vyvol´avan´e uˇzivatelem z grafick´eho rozhran´ı aplikace. • callback – Tento bal´ık obsahuje rozhran´ı pro zpˇetn´a vol´an´ı z vl´akna workera. • data – Obsahem tohoto bal´ıku jsou tˇr´ıdy pro reprezentaci dat a tˇr´ıdy pro zpracov´an´ı dat. V tomto bal´ıku je obsaˇzena tˇr´ıda workera a tˇr´ıda pro pr´aci s kontroln´ımi souˇcty. • dialog – Jiˇz podle n´azvu bal´ıku je patrn´e, ˇze jeho obsahem jsou dialogov´a okna zobrazovan´a aplikac´ı. • renderer – Tento bal´ık v sobˇe zahrnuje tˇr´ıdy, kter´e maj´ı na starost zobrazov´an´ı poloˇzek v seznamech typu JList a stromech typu JTree.
7.2.1
Grafick´ e uˇ zivatelsk´ e rozhran´ı
D˚ uleˇzitou ˇca´st´ı desktopov´e aplikace je pr´avˇe grafick´e rozhran´ı, kter´e umoˇzn ˇuje uˇzivateli ovl´adat knihovnu a pracovat tak se soubory v cloudov´ ych u ´loˇziˇst´ıch. Dalˇs´ı funkc´ı grafick´eho rozhran´ı je zobrazovat uˇzivateli data z´ıskan´a z cloudov´ ych u ´loˇziˇst’. 57
Implementace klientsk´e aplikace
Rozvrˇzen´ı aplikace
Podoba grafick´eho rozhran´ı je zachycena na obr´azku 7.1. V lev´e ˇca´sti tohoto okna je seznam uˇzivatelsk´ ych u ´ˇct˚ u, zat´ımco v prav´e jsou zobrazeny soubory a sloˇzky vzd´alen´eho u ´loˇziˇstˇe. V horn´ı ˇca´sti je pak nab´ıdka operac´ı, kter´e je moˇzn´e v aplikaci prov´adˇet, a v doln´ı ˇc´asti se zobrazuj´ı informace o v´ ysledku operac´ı a jejich pr˚ ubˇehu. Kompletn´ı uˇzivatelsk´a pˇr´ıruˇcka aplikace je pak obsaˇzena v pˇr´ıloze B.1.
Obr´azek 7.1: Hlavn´ı okno desktopov´e aplikace. Hlavn´ı tˇr´ıdou grafick´eho rozhran´ı je tˇr´ıda MultiCloudDesktop, kter´a rozˇsiˇruje tˇr´ıdu JFrame. Tˇr´ıda JFrame je tˇr´ıdou z knihovny grafick´ ych prvk˚ u Swing a slouˇz´ı pro vytvoˇren´ı okna aplikace [67]. Obsahem tohoto okna jsou dalˇs´ı grafick´e prvky z t´eˇze knihovny. V horn´ı ˇca´sti okna je nab´ıdka aplikace, kter´a je tvoˇrena r˚ uzn´ ymi operacemi, kter´e jsou rozˇrazeny do nˇekolika kategori´ı. Kategorie Account v sobˇe zahrnuje operace pro pr´aci s uˇzivatelsk´ ymi u ´ˇcty, zat´ımco Operation obsahuje operace pro pr´aci se soubory a sloˇzkami. Stejn´e nab´ıdky se zobrazuj´ı i pˇri kliknut´ı prav´ ym tlaˇc´ıtkem na nˇejakou poloˇzku v pˇr´ısluˇsn´em seznamu pod nab´ıdkou. Nab´ıdka File umoˇzn ˇuje vyvolat nastaven´ı aplikace a spustit proces synchronizace. Posledn´ı nab´ıdka Help v sobˇe nab´ız´ı poloˇzku pro zobrazen´ı informac´ı o aplikaci. Kaˇzd´e poloˇzce v nab´ıdce je pˇriˇrazena jedna akce, kter´a je provedena pˇri aktivaci poloˇzky. Aktivaci nˇekter´ ych poloˇzek je 58
Implementace klientsk´e aplikace
Rozvrˇzen´ı aplikace
takt´eˇz moˇzn´e prov´est pomoc´ı kl´avesov´ ych zkratek, kter´e jsou zobrazeny vedle n´azvu poloˇzky v hlavn´ı nab´ıdce. Spuˇstˇen´a akce pak ve vˇetˇsinˇe pˇr´ıpad˚ u vyvol´a dialogov´e okno. Dialogov´a okna jsou souˇca´st´ı bal´ıku dialog a slouˇz´ı pro zobrazov´an´ı a zad´av´an´ı r˚ uzn´ ych typ˚ u dat. Pomoc´ı dialogov´ ych oken jsou tak shrom´aˇzdˇena data potˇrebn´a pro vyvol´an´ı nˇekter´e z metod knihovny. Shrom´aˇzdˇen´a data jsou pak pˇred´ana vl´aknu workera, kter´ y provede vol´an´ı metody knihovny. Zpˇetnou vazbou od workera jsou pˇred´ana zpˇet data, kter´a je potˇreba uˇzivateli zobrazit. K tomuto u ´ˇcelu slouˇz´ı bal´ık renderer, kter´ y obsahuje tˇr´ıdy pro vykreslov´an´ı obsahu grafick´ ych prvk˚ u typu JList a JTree.
7.2.2
Zpracov´ an´ı na pozad´ı
Na pozad´ı bˇehu aplikace je spuˇstˇeno vl´akno workera, kter´ y je pak zpˇetnˇe prov´az´an s grafick´ ym rozhran´ım pomoc´ı rozhran´ı pro zpˇetn´e vyvol´an´ı BackgroundCallback, kde typov´ ym parametrem T je typ n´avratov´ ych dat. Worker tak po dokonˇcen´ı vol´an´ı knihovn´ı metody vyvol´a metodu onFinish poskytnut´e implementace tohoto rozhran´ı a pˇred´a tak data grafick´emu rozhran´ı. Bal´ıkem, ve kter´em jsou obsaˇzena n´avratov´a vol´an´ı, je bal´ık callback. Samotn´ y worker je pak souˇca´st´ı bal´ıku data, jehoˇz obsahem jsou pak jeˇstˇe tˇr´ıdy pro ukl´ad´an´ı a spr´avu dat aplikace. Vl´akno workera nen´ı aktivn´ı po celou dobu. Worker je aktivov´an pouze v pˇr´ıpadˇe, kdy je uˇzivatelem vyvol´ana nˇekter´a akce vyˇzaduj´ıc´ı zpracov´an´ı na pozad´ı. V tu chv´ıli jsou vl´aknu pˇred´ana potˇrebn´a data a vl´akno je probuzeno. N´asleduje zpracov´an´ı dat vl´aknem a navr´acen´ı v´ ysledku grafick´emu rozhran´ı. Po dokonˇcen´ı zpracov´an´ı dat je vl´akno opˇet usp´ano a pˇrevedeno do stavu ˇcek´an´ı na dalˇs´ı data. Vl´aknu workera nen´ı moˇzn´e pˇred´avat data v pˇr´ıpadˇe, ˇze zrovna prob´ıh´a zpracov´an´ı jin´ ych dat. Zpracov´an´ı dat je ale moˇzn´e pˇreruˇsit. Na obr´azku 7.2 je zobrazen schematick´ y postup zpracov´an´ı akce vyvolan´e uˇzivatelem. Vyvol´an´ım akce jsou na u ´rovni grafick´eho rozhran´ı z´ısk´ana potˇrebn´a data prostˇrednictv´ım dialogov´ ych oken. Data jsou n´aslednˇe pˇred´ana vl´aknu workera ke zpracov´an´ı. Soubˇeˇznˇe s t´ım je uˇzivateli zobrazen grafick´ y prvek pro sledov´an´ı pr˚ ubˇehu operace. Vl´akno workera je probuzeno a zahajuje zpracov´an´ı dat. Pˇri zpracov´an´ı jsou vol´any metody knihovny, prostˇrednictv´ım kter´e je pˇristupov´ano k u ´loˇziˇsti. Bˇehem zpracov´an´ı pˇred´av´a worker grafick´emu rozhran´ı data o pr˚ ubˇehu zpracov´an´ı operace. Po dokon59
Implementace klientsk´e aplikace
Rozvrˇzen´ı aplikace
ˇcen´ı operace jsou grafick´emu rozhran´ı pˇred´ana data s v´ ysledkem operace. V´ ysledn´a data jsou n´aslednˇe prezentov´ana uˇzivateli. Vl´akno workera je v tomto bodˇe opˇet usp´ano a ˇcek´a na dalˇs´ı data ke zpracov´an´ı.
Obr´azek 7.2: Zpracov´an´ı akce vyvolan´e uˇzivatelem.
60
8 Implementace mobiln´ıho klienta Mobiln´ı klient je rovnˇeˇz postaven na implementovan´e knihovnˇe. Aby vˇsak bylo moˇzn´e knihovnu pouˇz´ıt i pro mobiln´ı aplikaci, bylo nejprve nutn´e ovˇeˇrit jej´ı funkˇcnost na zvolen´e platformˇe, tj. Android. Pˇri prvn´ım testov´an´ı vˇsak byla zjiˇstˇena nekompatibilita knihovny s platformou Android. Tato nekompatibilita se t´ ykala HTTP klienta pouˇzit´eho v knihovnˇe. Probl´emem bylo, ˇze na zvolen´e platformˇe je jiˇz dostupn´ y HTTP klient od Apache, bohuˇzel vˇsak v odliˇsn´e verzi neˇz na jak´e je z´avisl´a knihovna. Nebylo tak moˇzn´e vyuˇz´ıt jiˇz existuj´ıc´ıho HTTP klienta, jak bylo navrˇzeno v sekci 6.1 a bylo nutn´e tento probl´em vyˇreˇsit jin´ ym zp˚ usobem. Pˇri zkoum´an´ı HTTP klienta na platformˇe Android byla zjiˇstˇena verze odpov´ıdaj´ıc´ı pˇribliˇznˇe verzi 4.0-beta-1 [63, 64]. Knihovna vˇsak je z´avisl´a na verzi klienta 4.3.3. Moˇznost´ı ˇreˇsen´ı tohoto probl´emu bylo v´ıce. Prvn´ı moˇznost´ı byla zmˇena z´avislost´ı knihovny a pˇreps´an´ı jej´ıho k´odu pro verzi HTTP klienta dostupn´e na platformˇe Android. Tato moˇznost by byla ale znaˇcnˇe n´aroˇcn´a na u ´pravy. Kromˇe knihovny by bylo nutn´e i upravit jiˇz vytvoˇrenou desktopovou aplikaci a ovˇeˇrit jej´ı funkˇcnost. Druhou moˇznost´ı bylo staˇzen´ı ofici´aln´ıho bal´ıku pro podporu novˇejˇs´ıch HTTP klient˚ u na platformˇe Android pˇr´ımo od Apache [64]. Tento bal´ık pracuje tak, ˇze novˇejˇs´ı tˇr´ıdy HTTP klienta verze 4.3.x jsou pˇrejmenov´any a tud´ıˇz je moˇzn´e se k nim dostat pod jin´ ym n´azvem. Volba t´eto moˇznosti tak´e nebyla ide´aln´ı, protoˇze by opˇet bylo potˇreba upravovat k´od knihovny a pˇr´ıpadnˇe i desktopov´e aplikace. Posledn´ı moˇznost´ı, kter´a byla v r´amci zkoum´an´ı tohoto probl´emu nalezena, bylo pouˇzit´ı knihovny Jar Jar Links bˇehem vytv´aˇren´ı v´ ystupn´ıho bal´ıku knihovny. Knihovna Jar Jar Links pˇri pˇrekladu a kompletaci v´ ystupn´ıho JAR archivu dok´aˇze vz´ıt pˇreloˇzen´e tˇr´ıdy zmˇenit package, do kter´eho tˇr´ıdy patˇr´ı [65]. Tato moˇznost nevyˇzaduje ˇz´adn´e u ´pravy existuj´ıc´ıho k´odu, proto tak´e byla zvolena. Bal´ık (package), do kter´eho patˇr´ı tˇr´ıdy HTTP klienta, tak byl pˇrejmenov´an z org.apache.* na xorg.apache.*. V´ ysledkem se tak stala knihovna nez´avisl´a na implementaci HTTP klienta dostupn´eho na platformˇe Android. Pro vytvoˇren´ı v´ ystupn´ı verze knihovny byla pouˇzita verze 1.4 knihovny Jar Jar Links.
61
Implementace mobiln´ıho klienta
8.1
Vybran´a funkcionalita
Vybran´ a funkcionalita
V r´amci implementace klientsk´e aplikace pro mobiln´ı platformu Android byla zvolena pouze omezen´a mnoˇzina navrˇzen´ ych funkc´ı. Stejnˇe tak byla omezena funkˇcnost nˇekter´ ych funkc´ı. D˚ uvodem t´eto volby byly pˇredevˇs´ım omezen´e v´ ypoˇcetn´ı prostˇredky platformy. Pro implementaci byly zvoleny z´akladn´ı funkce pro proch´azen´ı adres´aˇrov´e struktury vzd´alen´ ych u ´loˇziˇst’, nahr´av´an´ı a stahov´an´ı soubor˚ u a manipulaci se soubory a sloˇzkami v u ´loˇziˇsti. Funkce pro kop´ırov´an´ı, pˇresun a vyhled´av´an´ı soubor˚ u byly vynech´any. Z rozˇs´ıˇren´e funkcionality byly zvoleny funkce pro v´ ypoˇcet kontroln´ıch souˇct˚ u a synchronizaci sloˇzek. V r´amci synchronizace je vyuˇzito i nahr´av´an´ı na v´ıce u ´loˇziˇst’ a stahov´an´ı ve v´ıce vl´aknech. Rovnˇeˇz je dostupn´a selektivn´ı synchronizace. Rozˇs´ıˇren´a funkcionalita je v pˇr´ıpadˇe mobiln´ıho klienta pˇrevzata od desktopov´e aplikace (viz sekce 7.1) a poupravena pro pouˇzit´ı na mobiln´ı platformˇe.
8.2
Rozvrˇ zen´ı aplikace
Mobiln´ı aplikace je rozdˇelena do 4 bal´ık˚ u, s pˇribliˇzn´ ym celkov´ ym rozsahem 6000 ˇra´dek k´odu dle metriky LOC [66]. Souˇc´ast´ı tˇechto 4 bal´ık˚ u je 38 soubor˚ u, jejichˇz obsahem je 34 tˇr´ıd, 2 rozhran´ı a 2 enumerace. V´ yznam bal´ık˚ u je n´asleduj´ıc´ı: • display – Tento bal´ık obsahuje grafick´e a datov´e prvky aplikace. Souˇca´st´ı bal´ıku jsou tˇr´ıdy pro vykreslov´an´ı poloˇzek v seznamech typu ListView, tˇr´ıdy implementuj´ıc´ı dialogov´a okna pro nastaven´ı aplikace a tˇr´ıda zprostˇredkuj´ıc´ı ostatn´ı dialogov´a okna aplikace. • fragment – Obsahem tohoto bal´ıku jsou jednotliv´e fragmenty aplikace. Je zde um´ıstˇen fragment pro zobrazen´ı uˇzivatelsk´ ych u ´ˇct˚ u, soubor˚ ua fragment pro nastaven´ı aplikace. • tasks – V tomto bal´ıku jsou obsaˇzeny asynchronn´ı u ´lohy implementuj´ıc´ı jednotliv´e operace prov´adˇen´e nad u ´loˇziˇstˇem. • V´ychoz´ı bal´ık – Ve v´ ychoz´ım bal´ıku jsou um´ıstˇeny pˇredevˇs´ım tˇr´ıdy pro zpracov´an´ı kontroln´ıch souˇct˚ u a tˇr´ıdy s aktivitami aplikace. 62
Implementace mobiln´ıho klienta
Rozvrˇzen´ı aplikace
Rozloˇzen´ı k´odu pak je pˇribliˇznˇe 36% v bal´ıku display, 28% ve v´ ychoz´ım bal´ıku, 28% v bal´ıku tasks a nakonec 8% v bal´ıku fragment. Z´akladem mobiln´ı aplikace jsou dvˇe aktivity. Prvn´ı aktivitou je hlavn´ı aktivita, kter´a jako svou souˇca´st zobrazuje fragmenty se seznamem uˇzivatel˚ u a seznamem soubor˚ uvu ´loˇziˇsti. Souˇcasn´ y n´avrh aplikace dovoluje zobrazen´ı pouze jednoho fragmentu a tak jsou fragmenty dynamicky stˇr´ıd´any. Druhou aktivitou je aktivita pro nastaven´ı aplikace. Souˇca´st´ı t´eto aktivity je pouze jeden fragment s nastaven´ım. Prvn´ım z fragment˚ u hlavn´ı aktivity je fragment slouˇz´ıc´ı pro zobrazov´an´ı informac´ı o uˇzivatelsk´ ych u ´ˇctech. Z tohoto fragmentu je moˇzn´e u ´ˇcty vytv´aˇret, autorizovat, pˇrejmenov´avat a mazat. Ke kaˇzd´emu u ´ˇctu je moˇzn´e rovnˇeˇz vyvolat operaci pro z´ısk´an´ı informac´ı o uˇzivateli a dostupn´em prostoru. Druh´ y z fragment˚ u je urˇcen pro proch´azen´ı adres´aˇrov´e struktury na u ´loˇziˇsti. Z tohoto fragmentu je moˇzn´e nahr´avat a stahovat soubory, mazat a pˇrejmenov´avat soubory i sloˇzky a vytv´aˇret nov´e sloˇzky. D´ale je zde moˇznost spuˇstˇen´ı v´ ypoˇctu kontroln´ıho souˇctu souboru. Oba fragmenty rozˇsiˇruj´ı ListFragment a vyuˇz´ıvaj´ı vlastn´ı layout pro zobrazen´ı poloˇzek seznamu. U obou fragment˚ u je rovnˇeˇz vyuˇzito zobrazen´ı nab´ıdky s ikonami ve spodn´ı ˇca´sti obrazovky a kontextov´e nab´ıdky vyvolan´e dlouh´ ym stiskem poloˇzky seznamu. Dalˇs´ı ˇca´st´ı aplikace je nab´ıdka s nastaven´ım aplikace. Pro nastaven´ı poˇctu vl´aken, synchronizaˇcn´ı sloˇzky a selektivn´ı synchronizace bylo nutn´e vytvoˇren´ı vlastn´ıch dialogov´ ych oken. Nejd˚ uleˇzitˇejˇs´ım dialogov´ ym oknem je okno pro v´ ybˇer lok´aln´ıch soubor˚ u a sloˇzek. Vlastnost´ı tohoto dialogu je moˇznost proch´azen´ı lok´aln´ı adres´aˇrov´e struktury. Tento dialog je v pozmˇenˇen´e formˇe pouˇzit i pro operace nahr´av´an´ı a stahov´an´ı souboru. Vˇsechny operace implementovan´e v aplikaci jsou vytvoˇreny jako asynchronn´ı u ´lohy bˇeˇz´ıc´ı na pozad´ı. Na popˇred´ı je vˇzdy zobrazeno dialogov´e okno informuj´ıc´ı o pr˚ ubˇehu operace, pomoc´ı kter´eho je operaci moˇzn´e pˇreruˇsit. Asynchronn´ı u ´lohy tak rozˇsiˇruj´ı tˇr´ıdu AsyncTask, kter´a je dˇelena do tˇrech f´az´ı. V prvn´ı f´azi je provedena pˇr´ıprava operace. Druhou f´az´ı je proveden´ı operace na pozad´ı. Posledn´ı f´az´ı je pak ukonˇcen´ı operace. Prvn´ı a posledn´ı f´aze nav´ıc mohou pˇristupovat ke grafick´emu rozhran´ı a zobrazovat tak uˇzivateli informace o v´ ysledc´ıch operace. Pro zobrazov´an´ı pr˚ ubˇehu operace je pak pˇripravena metoda onProgressUpdate.
63
Implementace mobiln´ıho klienta
Uk´azka aplikace
Obr´azek 8.1: Zpracov´an´ı akce vyvolan´e uˇzivatelem v mobiln´ım klientu. Obr´azek 8.1 slouˇz´ı jako ilustrace pr˚ ubˇehu zpracov´an´ı akce vyvolan´e uˇzivatelem. Vyvolan´a akce spust´ı skrze grafick´e rozhran´ı dialogov´e okno pro ´ zobrazen´ı pr˚ ubˇehu operace a asynchronn´ı u ´lohu na pozad´ı. Uloze jsou pˇre´ d´ana potˇrebn´a data pro proveden´ı operace. Uloha pak spust´ı sv˚ uj bˇeh, bˇehem kter´eho vyvol´av´a metody knihovny a z´aroveˇ n informuje uˇzivatele o pr˚ ubˇehu operace. Po dokonˇcen´ı operace pˇred´a u ´loha grafick´emu rozhran´ı z´ıskan´a data a ukonˇc´ı se. S kaˇzdou akc´ı uˇzivatele je tak vyvol´ana nov´a u ´loha. Vzhledem k omezen´e velikosti pamˇeti dostupn´e pro aplikaci byl maxim´aln´ı poˇcet vl´aken omezen na 5. Dalˇs´ı omezen´ı je aplikov´ano na operaci synchronizace, u kter´e nen´ı vyvol´av´an dialog v pˇr´ıpadˇe konflikt˚ u mezi soubory. Nam´ısto toho je pouze zobrazeno dialogov´e okno po dokonˇcen´ı synchronizace, ve kter´em jsou vyps´any soubory, kter´e nebylo moˇzn´e synchronizovat. Na uˇzivateli je pak ponech´ano vyˇreˇsen´ı probl´em˚ u s tˇemito soubory.
8.3
Uk´ azka aplikace
Na obr´azc´ıch 8.2 jsou zobrazeny uk´azky z mobiln´ı aplikace. Obr´azek 8.2(a) zachycuje fragment pro zobrazen´ı uˇzivatelsk´ ych u ´ˇct˚ u. Na obr´azku 8.2(b) je uk´azka fragmentu pro zobrazov´an´ı obsahu vzd´alen´eho u ´loˇziˇstˇe. Obr´azek 8.2(c) pak pˇredstavuje obrazovku s nastaven´ım aplikace. Uˇzivatelsk´a pˇr´ıruˇcka aplikace je pak obsaˇzena v pˇr´ıloze B.2.
64
Implementace mobiln´ıho klienta
(a) Uˇzivatelsk´e u ´ˇcty.
Uk´azka aplikace
(b) Prohl´ıˇzen´ı soubor˚ u.
(c) Nastaven´ı.
Obr´azek 8.2: Uk´azky obrazovek mobiln´ı aplikace.
65
9 Moˇznosti rozˇs´ıˇren´ı Vytvoˇrenou knihovnu i aplikace by bylo moˇzn´e d´ale rozˇsiˇrovat. Nˇekter´a zde navrˇzen´a rozˇs´ıˇren´ı by bylo moˇzn´e implementovat bud’ na stranˇe knihovny nebo aplikace, jin´a nikoliv. V z´avˇeru je navrˇzeno rozˇs´ıˇren´ı cel´eho konceptu o webovou sluˇzbu. Knihovna Moˇzn´ ym rozˇs´ıˇren´ım na stranˇe knihovny by byla implementace transferu ˇ ast´ı pro soubor˚ u mezi u ´loˇziˇsti v r´amci knihovny nebo alespoˇ n jeho ˇc´ast´ı. C´ transfer soubor˚ u se rozum´ı podpora sekvenˇcn´ıho stahov´an´ı souboru, jehoˇz v´ ystupem by byl proud dat, kter´ y by bylo moˇzn´e rozdˇelit do proud˚ u pro v´ ypoˇcet kontroln´ıho souˇctu a proudu pro nahr´av´an´ı souboru. Dalˇs´ı takovou ˇc´ast´ı by pak nutnˇe byla i podpora pro nahr´av´an´ı datov´eho proudu na u ´loˇziˇstˇe. Dalˇs´ım rozˇs´ıˇren´ım knihovny by mohla b´ yt podpora zpracov´an´ı v´ıce operac´ı soubˇeˇznˇe. V dosavadn´ı implementaci je podpora pouze jedn´e prob´ıhaj´ıc´ı operace. Aby bylo moˇzn´e takto knihovnu rozˇs´ıˇrit, bylo by potˇreba zajistit, aby neprob´ıhaly soubˇeˇznˇe dvˇe operace nad jedn´ım u ´loˇziˇstˇem, resp. jedn´ım souborem. V´ yluˇcn´ y pˇr´ıstup k u ´loˇziˇst´ım je zvl´aˇstˇe d˚ uleˇzit´ y pˇredevˇs´ım pokud jde o operace nahr´av´an´ı a stahov´an´ı soubor˚ u. Pro rozˇs´ıˇren´ı moˇznosti znovupouˇzitelnosti knihovny by bylo knihovnu moˇzn´e rozdˇelit do nˇekolika menˇs´ıch knihoven. Mohla by tak vzniknout napˇr´ıklad samostatn´a knihovna s implementac´ı OAuth 2.0 autorizace. Desktopov´ a aplikace Pro desktopovou aplikaci by bylo moˇzn´e navrhnout a implementovat celou ˇradu nov´ ych rozˇs´ıˇren´ı. Jako souˇca´st aplikace by mohl napˇr´ıklad vzniknout synchronizaˇcn´ı klient, kter´ y by sledoval zmˇeny na lok´aln´ım disku a propagoval je na vzd´alen´a u ´loˇziˇstˇe. V aplikaci by pak mohla vzniknout podpora pl´anov´an´ı synchronizaˇcn´ıch proces˚ u. Vhodn´e by pro tento u ´ˇcel bylo ˇcasov´e pl´anov´an´ı, u kter´eho by bylo moˇzn´e zvolit datum a ˇcas pˇr´ıˇst´ı synchronizace. Moˇznost´ı by bylo i napˇr´ıklad synchronizovat soubor aˇz po uplynut´ı pˇredem stanoven´e doby od jeho posledn´ı zmˇeny. Upravovan´ y soubor by tak nebyl nahr´an na u ´loˇziˇstˇe pˇri kaˇzd´em uloˇzen´ı zmˇen, ale mohl by b´ yt nahr´an aˇz po dokonˇcen´ı pr´ace s n´ım.
66
Moˇznosti rozˇs´ıˇren´ı
Webov´a sluˇzba
Rozˇs´ıˇrit aplikaci by bylo moˇzn´e i mimo r´amec cloudov´ ych u ´loˇziˇst’. Zde se nask´ yt´a moˇznost vyuˇzit´ı jin´ ych protokol˚ u pro pˇr´ıstup a manipulaci se soubory. Jedn´ım takov´ ym protokolem je napˇr´ıklad FTP. Aplikace by tak z´ıskala moˇznost pˇr´ıstupu jak k veˇrejn´ ym, tak i priv´atn´ım FTP server˚ um. Stejnˇe tak by mohla vzniknout napˇr´ıklad podpora protokolu OAuth 1.0 pro autorizaci. Realizaci tˇechto rozˇs´ıˇren´ı by pak bylo vhodn´e prov´est pˇriloˇzen´ım dalˇs´ıch knihoven implementuj´ıc´ıch zvolen´e protokoly. Mobiln´ı klient Moˇznost´ı rozˇs´ıˇren´ı mobiln´ı aplikace by byla implementace dosud vynechan´e funkcionality. Pro toto rozˇs´ıˇren´ı by bylo ovˇsem vhodn´e nejprve rozˇs´ıˇrit knihovnu o podporu pˇrenosu soubor˚ u v datov´ ych proudech. Bez t´eto podpory by mohl b´ yt v urˇcit´ ych pˇr´ıpadech pˇrenos velk´ ych soubor˚ u problematick´ y. Pro mobiln´ı aplikaci by bylo rovnˇeˇz moˇzn´e rozˇs´ıˇren´ı o dalˇs´ı protokoly pro pˇr´ıstup k u ´loˇziˇst´ım a manipulaci se soubory. Vhodn´e rozˇs´ıˇren´ı pro mobiln´ı aplikaci by bylo sledov´an´ı stavu baterie a dostupn´eho pˇr´ıpojen´ı k s´ıti Internet. V pˇr´ıpadˇe n´ızk´eho stavu baterie by tak napˇr´ıklad nebylo moˇzn´e spustit synchronizaci. Naopak, pˇri pˇripojen´ı mobiln´ı platformy ke zdroji nap´ajen´ı a k bezdr´atov´e s´ıti WiFi by mohla b´ yt provedena synchronizace automaticky.
9.1
Webov´ a sluˇ zba
Po vzoru existuj´ıc´ıch aplikac´ı tˇret´ıch stran pro pˇr´ıstup ke cloudov´ ym u ´loˇziˇst´ım by bylo moˇzn´e vytvoˇrit webovou sluˇzbu, se kterou by komunikovaly ´ celem webov´e sluˇzby by byl pˇresun a kop´ırov´an´ı soubor˚ obˇe aplikace. Uˇ u mezi u ´loˇziˇsti. Z klientsk´e aplikace by tak staˇcilo odeslat poˇzadavek na spuˇstˇen´ı vybran´e operace a ta by byla provedena bez nutnosti pˇrenosu souboru skrze klienta. Dalˇs´ı funkcionalitou, kterou by webov´a sluˇzba mohla m´ıt, by byla synchronizace soubor˚ u mezi u ´loˇziˇsti. Tato synchronizace by nav´ıc mohla b´ yt spouˇstˇena dle pˇredem nastaven´eho ˇcasov´eho pl´anu bez nutnosti z´asahu uˇzivatele. Souˇc´ast´ı webov´e sluˇzby by tak mˇelo b´ yt i webov´e rozhran´ı pro pˇr´ıstup prostˇrednictv´ım prohl´ıˇzeˇce s moˇznost´ı nastaven´ı vˇsech potˇrebn´ ych parametr˚ u.
67
Moˇznosti rozˇs´ıˇren´ı
Webov´a sluˇzba
Spoleˇcnˇe se synchronizac´ı by ve sluˇzbˇe mohla b´ yt udrˇzov´ana i aktu´aln´ı metadata a sluˇzba by tak mohla ˇr´ıdit i stahov´an´ı a nahr´av´an´ı soubor˚ u klienta. V pˇr´ıpadˇe stahov´an´ı by tak staˇcilo z klientsk´e aplikace poslat poˇzadavek s vybran´ ym souborem a sluˇzba by se postarala o nalezen´ı shodn´eho souboru i v dalˇs´ıch u ´loˇziˇst´ıch. Aplikaci by pak byly vr´aceny pouze zdroje, ze kter´ ych m´a soubor stahovat. Pro nahr´av´an´ı souboru na v´ıce u ´loˇziˇst’ by pak mohlo b´ yt implementov´ano nahr´an´ı souboru pouze na webovou sluˇzbu, kter´a by soubor sama rozkop´ırovala na vybran´a u ´loˇziˇstˇe. Vytvoˇren´ım webov´e sluˇzby by se tak mohl sn´ıˇzit celkov´ y datov´ y tok klientsk´e aplikace. To by bylo zvl´aˇstˇe v´ yhodn´e pro mobiln´ı klienty, kde b´ yvaj´ı datov´e pˇrenosy limitovan´e sign´alem, oper´atorem a v´ ydrˇz´ı baterie.
68
10 Z´avˇer Diplomov´a pr´ace se zab´ yvala problematikou cloudov´ ych u ´loˇziˇst’. Nejprve byla prozkoum´ana vybran´a cloudov´a u ´loˇziˇstˇe se zamˇeˇren´ım na principy jejich fungov´an´ı. N´asledoval pr˚ uzkum dostupn´ ych knihoven pro pˇr´ıstup k u ´loˇziˇst´ım. Na z´akladˇe jejich d˚ ukladn´e anal´ yzy pak bylo zvoleno vlastn´ı ˇreˇsen´ı pro pˇr´ıstup ke cloudov´ ym u ´loˇziˇst´ım. V r´amci pr´ace byla vytvoˇrena knihovna pro jednotn´ y pˇr´ıstup ke vˇsem vybran´ ym u ´loˇziˇst´ım. Tato knihovna nen´ı z´avisl´a na ˇza´dn´e jin´e knihovnˇe pro pˇr´ıstup ke cloudov´ ym u ´loˇziˇst´ım. V´ yhodou t´eto knihovny je pˇredevˇs´ım moˇznost jej´ıho pouˇzit´ı pro dalˇs´ı cloudov´a u ´loˇziˇstˇe bez nutnosti u ´pravy zdrojov´eho k´odu knihovny. Dalˇs´ı v´ yhodou oproti existuj´ıc´ım knihovn´am je moˇznost soubˇeˇzn´eho nahr´av´an´ı soubor˚ u na v´ıce u ´loˇziˇst’ z´aroveˇ n. Souˇca´st´ı knihovny je i implementace paraleln´ıho stahov´an´ı soubor˚ u, kter´e je pops´ano v sekci 5.2. Funkcionalita paraleln´ıho stahov´an´ı byla n´aslednˇe ovˇeˇrena v sekci 6.4. S vyuˇzit´ım vytvoˇren´e knihovny byla d´ale navrˇzena a implementov´ana klientsk´a aplikace pro pˇr´ıstup k vybran´ ym cloudov´ ym u ´loˇziˇst´ım. V r´amci klientsk´e aplikace byla implementov´ana i dalˇs´ı navrˇzen´a rozˇs´ıˇren´ı z kapitoly 5. Kromˇe z´akladn´ıch operac´ı se soubory podporuje klientsk´a aplikace kontrolu konzistence dat, synchronizaci sloˇzek a transfer soubor˚ u mezi jednotliv´ ymi u ´loˇziˇsti. Implementovanou funkcionalitou se aplikace vyrovn´a existuj´ıc´ım ˇreˇsen´ım, kter´e v nˇekter´ ych aspektech dokonce pˇredˇc´ı. Pro mobiln´ı platformu Android byla vyˇreˇsena kompatibilita knihovny. Na z´akladˇe knihovny pak byla vytvoˇrena mobiln´ı aplikace s vybranou funkcionalitou ze sekce 8.1. V´ ysledn´a mobiln´ı aplikace v sobˇe kombinuje vybranou mnoˇzinu z´akladn´ıch a rozˇsiˇruj´ıc´ıch funkc´ı. Implementac´ı byla ovˇeˇrena funkcionalita na zvolen´ ych platform´ach. V´ ystupem pr´ace je tak jednotn´a knihovna pouˇziteln´a na desktopov´e i mobiln´ı platformˇe a dvˇe aplikace vyuˇz´ıvaj´ıc´ı knihovnu na zvolen´ ych platform´ach. Knihovnu i aplikace by bylo d´ale moˇzn´e rozˇs´ıˇrit o dalˇs´ı funkcionalitu, pˇr´ıpadnˇe by bylo moˇzn´e vytvoˇrit webovou sluˇzbu, kter´a by d´ale rozˇsiˇrovala moˇznosti spr´avy soubor˚ u v cloudov´ ych u ´loˇziˇst´ıch.
69
Pˇ rehled zkratek AES (Advanced Encryption Standard) Algoritmus pro ˇsifrov´an´ı dat, kter´ y vyuˇz´ıv´a symetrick´eho kl´ıˇce. API (Application Programming Interface) Rozhran´ı pro programov´an´ı aplikac´ı, ˇcasto rozhran´ı pro vol´an´ı funkc´ı knihovny. CBC (Cipher block chaining) M´od operace blokov´e ˇsifry, kdy ˇsifrov´an´ı blok˚ u je zˇretˇezeno. CRUD (create, read, update, delete) Mnoˇzina operac´ı definovan´a pro manipulaci s daty pomoc´ı RESTu. CTR (Counter mode) M´od operace blokov´e ˇsifry, u kter´eho je blokov´a ˇsifra pˇrevedena na proudovou, a vyuˇz´ıv´a inkrementaˇcn´ıho ˇc´ıtaˇce. ECB (Electronic Codebook) M´od operace blokov´e ˇsifry, kde kaˇzd´ y block je ˇsifrov´an zvl´aˇst’. ECMA (European Computer Manufacturers Association) Organizace zab´ yvaj´ıc´ı se tvorbou standard˚ u informaˇcn´ıch a komunikaˇcn´ıch syst´em˚ u. FTP (File Transfer Protokol) Protokol pro pˇrenos soubor˚ u. GUI (Graphical User Interface) Grafick´e rozhran´ı pro interakci mezi uˇzivatelem a aplikac´ı. HTTP (Hypertext Transfer Protokol) Aplikaˇcn´ı protokol pro v´ ymˇenu hypertextov´ ych dokument˚ u. IaaS (Infrastructure as a Service) Model cloudov´e sluˇzby, kdy poskytovatel poskytuje infrastrukturu. IETF (Internet Engineering Task Force) Organizace zab´ yvaj´ıc´ı se tvorbou Internetov´ ych standard˚ u a v´ yvojem protokol˚ u.
70
Z´avˇer
IT (Informational Technology) Technick´e odvˇetv´ı zamˇeˇruj´ıc´ı se na poˇc´ıtaˇce a jejich fungov´an´ı po technick´e str´ance. ITU (International Telecommunication Union) Mezin´arodn´ı telekomunikaˇcn´ı unie, pˇripravuje specifikace pro telekomunikaˇcn´ı syst´emy, s´ıtˇe a sluˇzby. JSON (JavaScript Object Notation) Jednoduch´ y, textov´ y form´at pro v´ ymˇenu dat nez´avisl´ y na programovac´ım jazyce. LOC (Lines of Code) Metrika pro mˇeˇren´ı rozsahu zdrojov´eho k´odu programu zaloˇzen´a na poˇc´ıt´an´ı poˇctu ˇr´adk˚ u k´odu. MIME (Multipurpose Internet Mail Extensions) Identifik´ator form´atu pˇren´aˇsen´ ych dat. OFB (Output feedback mode) M´od operace blokov´e ˇsifry, u kter´eho je blokov´a ˇsifra pˇrevedena na proudovou, a vyuˇz´ıv´a pro ˇsifrov´an´ı i deˇsifrov´an´ı operace exkluzivn´ı disjunkce. PaaS (Platform as a Service) Model cloudov´e sluˇzby, kdy je poskytovatelem poskytnuta platforma s pˇredem pˇripraven´ ymi prostˇredky pro tvorbu aplikac´ı. PHP (Hypertext Preprocesor) Hypertextov´ y preprocesor je skriptovac´ım jazykem pouˇz´ıvan´ ym na webov´ ych serverech pro tvorbu dynamick´ ych str´anek. POJO (Plain Old Java Object) Jednoduch´e Java objekty pro uchov´av´an´ı dat, kter´e jsou mapovan´e JSON parserem. REST (Representational State Transfer) Architektura rozhran´ı pro pˇr´ıstup k datov´ ym zdroj˚ um. RFC (Request for Comments) Dokumety popisuj´ıc´ı Internetov´e protokoly, kter´e jsou vyd´av´any jako doporuˇcen´ı a podle kter´ ych se ˇr´ıd´ı vˇetˇsina Internetu.
71
Z´avˇer
SaaS (Software as a Service) Model cloudov´e sluˇzby, kdy je poskytovatelem poskytnut pˇr´ıstup k hotov´e aplikaci. SDK (Software Development Kit) Bal´ık n´astroj˚ u pro v´ yvoj aplikac´ı. URI (Uniform Resource Identifier) Jednotn´ y identifik´ator zdroje slouˇz´ıc´ı k pˇresn´emu urˇcen´ı zdroje informac´ı, pˇredevˇs´ım v r´amci s´ıtˇe Internet. XML (Extensible Markup Language) Znaˇckovac´ı jazyk uˇz´ıvan´ y pro v´ ymˇenu dat mezi aplikacemi.
72
Literatura [1] Sosinsky, B., Cloud Computing Bible. Wiley, 2010, 532 s. ISBN: 978-0470-90356-8. [2] Kulkarni, G.; Waghmare, R.; Palwe, R.; Waykule, V.; Bankar, H.; Koli, K., Cloud storage architecture, Telecommunication Systems, Services, and Applications (TSSA), 2012 7th International Conference on [online], pp. 76-81, 30-31.10.2012 [cit. 11.3.2014]. DOI: 10.1109/TSSA.2012.6366026 Dostupn´e z: http://ieeexplore.ieee. org/xpl/articleDetails.jsp?tp=&arnumber=6366026. [3] Telecommunication standardization sector of ITU, Focus Group on Cloud Computing Technical Report, Part 1: Introduction to the cloud ecosystem: definitions, taxonomies, use cases and high-level requirements [online], 69 s., 2012 [cit. 12.3.2014]. Dostupn´e z: http://www.itu.int/ITU-T/newslog/Cloud+Computing+ And+Standardization+Technical+Reports+Published.aspx. [4] Dropbox, Inc., Terms - Dropbox [online]. 2014 [cit. 20.4.2014]. Dostupn´e z: https://www.dropbox.com/privacy. [5] Google Inc., Smluvn´ı podm´ınky spoleˇcnosti Google – Ochrana soukrom´ı a smluvn´ı podm´ınky – Google [online]. 2014 [cit. 20.4.2014]. Dostupn´e z: http://windows.microsoft.com/cs-cz/ windows/microsoft-services-agreement. [6] Microsoft, Smlouva o poskytov´an´ı sluˇzeb spoleˇcnosti Microsoft - Microsoft Windows [online]. 2014 [cit. 20.4.2014]. Dostupn´e z: https://www. google.com/intl/cs/policies/terms/. [7] Dropbox, Inc., Will joining someone else’s shared folder use my quota? - Dropbox [online]. 2014 [cit. 20.6.2014]. Dostupn´e z: https://www. dropbox.com/help/59/en. [8] Google Inc., Your storage limit - Drive Help [online]. 2014 [cit. 26.4.2014]. Dostupn´e z: https://support.google.com/drive/answer/6558. [9] Dropbox, Inc., Is there a limit or maximum to how big my files can be? - Dropbox [online]. 2014 [cit. 16.5.2014]. Dostupn´e z: https://www. dropbox.com/help/5/en.
73
LITERATURA
LITERATURA
[10] Dropbox, Inc., Developer guide - Dropbox [online]. 2014 [cit. 21.4.2014]. Dostupn´e z: https://www.dropbox.com/developers/ reference/devguide. [11] Google Inc., Google Docs, Sheets, and Slides size limits - Drive Help [online]. 2014 [cit. 16.5.2014]. Dostupn´e z: https://support.google. com/drive/answer/37603. [12] Microsoft, OneDrive Maximum Individual File Size - Microsoft Community [online]. 2014 [cit. 16.5.2014]. Dostupn´e z: http://answers.microsoft.com/en-us/onedrive/forum/sdfilessdsync/onedrive-maximum-individual-file-size/2f8b752b-cf16481c-961e-42cfb57801cb. [13] D. Hardt, Ed., RFC 6749 - The OAuth 2.0 Authorization Framework [online]. Oct. 2012 [cit. 9.4.2014]. ISSN: 2070-1721. Dostupn´e z: http: //tools.ietf.org/html/rfc6749. [14] OAuth 2.0 - OAuth [online]. [cit. 9.4.2014]. Dostupn´e z: http://oauth. net/2/. [15] E. Hammer-Lahav, Ed. RFC 5849 - The OAuth 1.0 Protocol [online]. Apr. 2010 [cit. 9.4.2014]. ISSN: 2070-1721. Dostupn´e z: http://tools. ietf.org/html/rfc5849. [16] M. Jones, D. Hardt, RFC 6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage [online]. Oct. 2012 [cit. 9.4.2014]. ISSN: 2070-1721. Dostupn´e z: http://tools.ietf.org/html/rfc6750. [17] Ugo Cei, Piergiorgio Lucidi, Overview of REST Concepts and Developing your First Web Script using Alfresco | Packt Publishing [online]. 2010 [cit. 23.5.2014]. Dostupn´e z: http://www.packtpub.com/article/ overview-rest-concepts-developing-first-web-script-alfresco. [18] M. Mal´ y, REST: architektura pro webov´e API | Zdroj´ak [online]. 3.8.2009 [cit. 23.5.2014]. Dostupn´e z: http://www.zdrojak.cz/clanky/ rest-architektura-pro-webove-api/. [19] JSON [online]. 2012 [cit. 10.5.2014]. Dostupn´e z: http://json.org/. [20] T. Bray, Ed., RFC 7159 - The JavaScript Object Notation (JSON) Data Interchange Format [online]. Mar. 2014 [cit. 10.5.2014]. ISSN: 2070-1721. Dostupn´e z: http://tools.ietf.org/html/rfc7159.
74
LITERATURA
LITERATURA
[21] The JSON DataInterchange Format [online]. 2013 [cit. 10.5.2014]. Dostupn´e z: http://www.ecma-international.org/publications/ files/ECMA-ST/ECMA-404.pdf [22] Dropbox, Inc., Dropbox - Core API [online]. 2014 [cit. 22.4.2014]. Dostupn´e z: https://www.dropbox.com/developers/core. [23] Google Inc., Google Drive SDK – Google Developers [online]. 2014 [cit. 22.4.2014]. Dostupn´e z: https://developers.google.com/drive/web/ downloads. [24] Microsoft, OneDrive Developer Downloads - OneDrive Dev Center [online]. 2014 [cit. 22.4.2014]. Dostupn´e z: http://msdn.microsoft.com/ en-us/onedrive/dn630256.aspx. [25] Microsoft, Interaktivn´ı sada Live SDK [online]. 2014 [cit. 22.4.2014]. Dostupn´e z: http://isdk.dev.live.com/dev/isdk/Default.aspx. [26] Microsoft, OneDrive development - OneDrive Dev Center [online]. 2014 [cit. 22.4.2014]. Dostupn´e z: http://msdn.microsoft.com/enus/library/dn641952.aspx. [27] Dropbox, Inc., Dropbox - Core API - endpoint reference [online]. 2014 [cit. 22.4.2014]. Dostupn´e z: https://www.dropbox.com/developers/ core/docs. [28] Google Inc., API Reference - Google Drive SDK – Google Developers [online]. 2014 [cit. 22.4.2014]. Dostupn´e z: https://developers.google. com/drive/v2/reference/. [29] Microsoft, REST reference - OneDrive Dev Center [online]. 2014 [cit. 22.4.2014]. Dostupn´e z: http://msdn.microsoft.com/en-us/library/ dn631844.aspx. [30] Microsoft, OneDrive API (Live Connect) [online]. 2014 [cit. 22.4.2014]. Dostupn´e z: http://msdn.microsoft.com/en-us/library/hh826521. aspx. [31] Microsoft, Using the REST API - OneDrive Dev Center [online]. 2014 [cit. 22.4.2014]. Dostupn´e z: http://msdn.microsoft.com/enus/library/dn659752.aspx. [32] The Apache Software Foundation, Licenses [online]. 2012 [cit. 26.4.2014]. Dostupn´e z: http://www.apache.org/licenses/. 75
LITERATURA
LITERATURA
[33] The Apache Software Foundation, Apache HttpComponents - Apache HttpComponents [online]. 2014 [cit. 12.5.2014]. Dostupn´e z: http://hc. apache.org/. [34] Yidong Fang, json-simple - JSON.simple - A simple Java toolkit for JSON - Google Project Hosting [online]. 2012 [cit. 12.5.2014]. Dostupn´e z: https://code.google.com/p/json-simple/. [35] FasterXML, LLC, Jackson JSON Processor - Home [online]. 2014 [cit. 12.5.2014]. Dostupn´e z: http://jackson.codehaus.org/. [36] Hobara Rei, Rei’s Shed - WebDAV Client CarotDAV - [online]. 2014 [cit. 14.6.2014]. Dostupn´e z: http://rei.to/carotdav_en.html. [37] Vehera LTD, Storage Made Easy [online]. 2014 [cit. 14.6.2014]. Dostupn´e z: http://storagemadeeasy.com/. [38] CloudKaf´e, CloudKaf´e | Organizing your Cloud! [online]. 2013 [cit. 14.6.2014]. Dostupn´e z: https://www.cloudkafe.com/. [39] Jolicloud, Jolicloud [online]. 2014 [cit. 14.6.2014]. Dostupn´e z: http: //www.jolicloud.com/. [40] Primadesk Inc., Primadesk [online]. 2012 [cit. 14.6.2014]. Dostupn´e z: https://www.primadesk.com/. [41] MultCloud, Manage, Move, Copy, and Migrate Files Between Cloud Storage Services with MultCloud [online]. 2014 [cit. 14.6.2014]. Dostupn´e z: https://www.multcloud.com/. [42] cloudHQ, cloudHQ - Sync and Integrate Google Drive, Gmail, Dropbox, Box, OneDrive, Evernote, Basecamp [online]. 2014 [cit. 14.6.2014]. Dostupn´e z: https://www.cloudhq.net/dropbox. [43] IFTTT Inc., Welcome - IFTTT [online]. 2014 [cit. 14.6.2014]. Dostupn´e z: https://ifttt.com/. [44] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee, RFC 2616 - Hypertext Transfer Protocol – HTTP/1.1 [online]. Jun. 1999 [cit. 22.4.2014]. Dostupn´e z: http://tools.ietf. org/html/rfc2616. [45] R. Fielding, J. Gettys, J. Mogul, H. Frystyk, T. Berners-Lee, RFC 2068 - Hypertext Transfer Protocol – HTTP/1.1 [online]. Jan. 1997 [cit. 22.4.2014]. Dostupn´e z: http://tools.ietf.org/html/rfc2068. 76
LITERATURA
LITERATURA
[46] R. Fielding, Ed., Y. Lafon, Ed., J. Reschke, Ed. RFC 7233 - Hypertext Transfer Protocol (HTTP/1.1): Range Requests [online]. Mar. 2014 [cit. 14.6.2014]. ISSN: 2070-1721. Dostupn´e z: http://tools.ietf.org/ html/rfc7233. [47] Katz, Jonathan, Lindell, Yehuda, Introduction to modern cryptography. Boca Raton: Chapman & Hall/CRC, 2008, xviii, 534 s. ISBN 978-158488-551-1. [48] National Institute of Standards and Technology, ADVANCED ENCRYPTION STANDARD (AES) [online]. 26.11.2001 [cit. 1.5.2014]. Dostupn´e z: http://csrc.nist.gov/publications/fips/fips197/fips197.pdf. [49] Gary C. Kessler, An Overview of Cryptography [online]. 2014 [cit. 1.5.2014]. Dostupn´e z: http://www.garykessler.net/library/ crypto.html. [50] John J. G. Savard, Basic Block Cipher Modes [online]. 2003 [cit. 1.5.2014]. Dostupn´e z: http://www.quadibloc.com/crypto/co040601. htm. [51] Javamex UK, Block modes with Java ciphers [online]. 2012 [cit. 1.5.2014]. Dostupn´e z: http://www.javamex.com/tutorials/ cryptography/block_modes.shtml. [52] Google Inc., google-http-java-client - Google HTTP Client Library for Java - Google Project Hosting [online]. 2014 [cit. 26.5.2014]. Dostupn´e z: https://code.google.com/p/google-http-java-client/. [53] Google Inc., google-gson - A Java library to convert JSON to Java objects and vice-versa - Google Project Hosting [online]. 2014 [cit. 23.5.2014]. Dostupn´e z: https://code.google.com/p/google-gson/. [54] Json Java parsers / generators microbenchmark Myˇslenky dne otce Fura [online]. 18.3.2012 [cit. 22.5.2014]. Dostupn´e z: http://blog.novoj.net/ 2012/02/05/json-java-parsers-generators-microbenchmark/. [55] Adamek, M., JSON Parsers Performance on Android (With Warmup and Multiple Iterations) - Martin Adamek [online]. 2013 [cit. 22.5.2014]. Dostupn´e z: http://martinadamek.com/2011/02/04/json-parsersperformance-on-android-with-warmup-and-multiple-iterations/.
77
LITERATURA
LITERATURA
[56] Java JSON Libraries Comparison [online]. 21.1.2011 [cit. 22.5.2014]. Dostupn´e z: http://geokoder.com/java-json-libraries-comparison. [57] Open Source Web Servers in Java [online]. [cit. 5.5.2014]. Dostupn´e z: http://java-source.net/open-source/web-servers. [58] Simple 5.1.6 [online]. [cit. 5.5.2014]. simpleframework.org/index.php.
Dostupn´e z: http://www.
[59] Dropbox, Inc., App Console - Dropbox [online]. 2014 [cit. 27.4.2014]. Dostupn´e z: https://www.dropbox.com/developers/apps. [60] Google Inc., Google Developers Console [online]. 2014 [cit. 27.4.2014]. Dostupn´e z: https://console.developers.google.com/project. [61] Microsoft, Overview - Windows [online]. 2014 [cit. 27.4.2014]. Dostupn´e z: https://account.live.com/developers/applications/index. [62] Reif, J., Metody matematick´e statistiky. Fakulta aplikovan´ ych vˇed, Plzeˇ n, 2004, 288 s. ISBN: 80-7043-302-7. [63] What version of Apache HttpClient is used in Android 4.2.2 SDK? - Stack Overflow [online]. 2013 [cit. 12.6.2014]. Dostupn´e z: http://stackoverflow.com/questions/15658678/what-versionof-apache-httpclient-is-used-in-android-4-2-2-sdk. [64] The Apache Software Foundation, Apache HttpComponents - HttpClient for Android [online]. 2014 [cit. 12.6.2014]. Dostupn´e z: https://hc. apache.org/httpcomponents-client-4.3.x/android-port.html. [65] Google Inc., jarjar - Embedding Java libraries since 2004 - Google Project Hosting [online]. 2014 [cit. 12.6.2014]. Dostupn´e z: https: //code.google.com/p/jarjar/. [66] LocMetrics - Source Code Line Counting Tool [online]. 10.5.2014]. Dostupn´e z: http://www.locmetrics.com/.
2010 [cit.
[67] Oracle, Trail: Creating a GUI With JFC/Swing (The JavaTM Tutorials) [online]. 2014 [cit. 23.4.2014]. Dostupn´e z: http://docs.oracle.com/ javase/tutorial/uiswing/index.html.
78
Pˇ r´ılohy
79
Pˇ r´ıloha A A.1
Dokumentace knihovny
V t´eto pˇr´ıloze jsou dokumentov´any poskytovan´e metody knihovny. D´ale jsou zde pops´ana rozhran´ı, kter´a knihovna poskytuje, a zp˚ usob jejich vyuˇzit´ı. Ned´ılnou souˇca´st´ı knihovny je i popis konfiguraˇcn´ıho souboru pro pˇr´ıstup ku ´loˇziˇst´ım. Aktu´aln´ı verzi knihovny je moˇzno z´ıskat na adrese: https://github.com/stanek0j/MultiCloud
A.1.1
Metody knihovny
Z´akladem pro vyuˇzit´ı metod knihovny je vytvoˇren´ı instance tˇr´ıdy MultiCloud. Tato tˇr´ıda poskytuje dva konstruktory, kde prvn´ı je pr´azdn´ ya druh´emu je pˇred´av´an parametr s nastaven´ım knihovny. Nastaven´ı knihovny se prov´ad´ı pˇred´an´ım instance tˇr´ıdy MultiCloudSettings, jej´ımˇz obsahem jsou objekty pro spr´avu u ´ˇct˚ u, pro spr´avu token˚ u a pro spr´avu definic u ´loˇziˇst’ (viz sekce A.1.3). Metody knihovny je moˇzno rozdˇelit do nˇekolika kategori´ı podle jejich zamˇeˇren´ı. Jsou tak pˇr´ıtomny metody pro nastaven´ı knihovny, spr´avu uˇzivatelsk´ ych u ´ˇct˚ u nebo pˇr´ıstup k u ´loˇziˇsti. N´asleduje rozdˇelen´ı metod podle jejich kategorick´eho zamˇeˇren´ı. Po tomto rozdˇelen´ı n´asleduje v´ yˇcet vˇsech metod knihovny s pˇred´avan´ ymi parametry a n´avratov´ ymi hodnotami.
Nastaven´ı knihovny
Spr´ ava uˇ zivatelsk´ ych u ´ˇ ct˚ u
• getSettings
• • • • • • • 80
abortAuthorization authorizeAccount createAccount deleteAccount refreshAccount renameAccount validateAccounts
Pˇr´ıloha
Dokumentace knihovny
Pˇ r´ıstup k u ´ loˇ ziˇ sti • • • • • • • • • • •
• • • • • • • • • • • •
abortOperation accountInfo accountQuota addDownloadSource addUpdateSource addUploadSource copy createFolder delete downloadFile downloadMultiFile
getLastError getListener listFolder metadata move rename search setListener updateFile updateMultiFile uploadFile uploadMultiFile
Popis jednotliv´ ych metod • void abortAuthorization() Metoda pro pˇreruˇsen´ı bˇeˇz´ıc´ıho autorizaˇcn´ıho procesu. • void abortOperation() Metoda pro pˇreruˇsen´ı prob´ıhaj´ıc´ı operace. • AccountInfo accountInfo(String accountName) Metoda pro z´ısk´an´ı z´akladn´ıch informac´ı o uˇzivateli, mezi kter´e patˇr´ı jm´eno uˇzivatele a jeho identifik´ator. Parametrem je n´azev uˇzivatelsk´eho u ´ˇctu. N´avratovou hodnotou jsou z´akladn´ı informace o uˇzivateli. • AccountQuota accountQuota(String accountName) Metoda pro z´ısk´an´ı informac´ı o kapacitˇe prostoru v u ´loˇziˇsti. Parametrem je n´azev uˇzivatelsk´eho u ´ˇctu. N´avratovou hodnotou jsou informace o kapacitˇe prostoru v u ´loˇziˇsti. • void addDownloadSource(String accountName, FileInfo sourceFile) Tato metoda pˇrid´av´a zdrojov´ y soubor pro stahov´an´ı z v´ıce u ´loˇziˇst’ z´aroveˇ n. Parametry tvoˇr´ı n´azev uˇzivatelsk´eho u ´ˇctu, ze kter´eho m´a b´ yt stahov´ano, a metadata souboru, kter´ y m´a b´ yt staˇzen. • void addUpdateDestination(String accountName, FileInfo destination, FileInfo destinationFile, String destinationName) Tato metoda pˇrid´av´a c´ılov´ y soubor pro nahr´av´an´ı na v´ıce u ´loˇziˇst’ 81
Pˇr´ıloha
Dokumentace knihovny
z´aroveˇ n. Parametry tvoˇr´ı n´azev uˇzivatelsk´eho u ´ˇctu, na kter´ y m´a b´ yt nahr´av´ano, metadata c´ılov´e sloˇzky, metadata c´ılov´eho souboru a n´azev c´ılov´eho souboru. Pˇri vyuˇzit´ı t´eto metody je pˇreps´an obsah c´ılov´eho souboru. • void addUploadDestination(String accountName, FileInfo destination, String destinationName) Tato metoda pˇrid´av´a c´ılov´ y soubor pro nahr´av´an´ı na v´ıce u ´loˇziˇst’ z´aroveˇ n. Parametry tvoˇr´ı n´azev uˇzivatelsk´eho u ´ˇctu, na kter´ y m´a b´ yt nahr´av´ano, metadata c´ılov´e sloˇzky a n´azev c´ılov´eho souboru. Pˇri vyuˇzit´ı t´eto metody je na u ´loˇziˇstˇe nahr´an nov´ y soubor. • void authorizeAccount(String accountName, AuthorizationCallback callback) Pomoc´ı t´eto metody je vyvol´an proces autorizace uˇzivatelsk´eho u ´ˇctu. Parametry vol´an´ı jsou n´azev uˇzivatelsk´eho u ´ˇctu, kter´ y m´a b´ yt autorizov´an, a implementace rozhran´ı pro interakci s uˇzivatelem bˇehem procesu. • FileInfo copy(String accountName, FileInfo file, FileInfo destination, String destinationName) Metoda pro kop´ırov´an´ı soubor˚ u v r´amci u ´loˇziˇstˇe. Parametrem je n´azev uˇzivatelsk´eho u ´ˇctu, na kter´em m´a ke kop´ırov´an´ı doj´ıt, metadata zdrojov´eho souboru, metadata c´ılov´e sloˇzky a n´azev c´ılov´eho souboru. N´avratem jsou metadata souboru vytvoˇren´eho kop´ırov´an´ım. • void createAccount(String accountName, String cloudStorage) Metoda pro vytvoˇren´ı uˇzivatelsk´eho u ´ˇctu. Pˇred´avan´ ymi parametry jsou n´azev uˇzivatelsk´eho u ´ˇctu a n´azev u ´loˇziˇstˇe, ke kter´emu bude pomoc´ı vytvoˇren´eho uˇzivatelsk´eho u ´ˇctu pˇristupov´ano. • FileInfo createFolder(String accountName, String folderName, FileInfo parent) Metoda pro vytvoˇren´ı nov´e sloˇzky v u ´loˇziˇsti. Parametry tvoˇr´ı n´azev uˇzivatelsk´eho u ´ˇctu, n´azev sloˇzky a metadata c´ılov´e sloˇzky, ve kter´e m´a b´ yt nov´a sloˇzka vytvoˇrena. V´ ystupem metody jsou metadata novˇe vytvoˇren´e sloˇzky. • FileInfo delete(String accountName, FileInfo file) Metoda pro smaz´an´ı souboru nebo sloˇzky v u ´loˇziˇsti. Parametry tvoˇr´ı n´azev uˇzivatelsk´eho u ´ˇctu a metadata souboru ˇci sloˇzky. Po vykon´an´ı metody jsou navr´acena metadata smazan´eho souboru ˇci sloˇzky.
82
Pˇr´ıloha
Dokumentace knihovny
• void deleteAccount(String accountName) Metoda pro smaz´an´ı uˇzivatelsk´eho u ´ˇctu. Parametrem je pouze n´azev uˇzivatelsk´eho u ´ˇctu. • File downloadFile(String accountName, FileInfo sourceFile, File destination, boolean overwrite) Metoda pro staˇzen´ı souboru z jednoho u ´loˇziˇstˇe v jednom vl´aknˇe. Parametry vol´an´ı jsou n´azev uˇzivatelsk´eho u ´ˇctu, metadata stahovan´eho souboru, lok´aln´ı soubor, kter´ y bude vytvoˇren, a zda je povolen pˇrepis lok´aln´ıho souboru v pˇr´ıpadˇe jeho existence. N´avratem metody je lok´aln´ı soubor, kter´ y byl staˇzen. • File downloadFile(String accountName, FileInfo sourceFile, String destination, boolean overwrite) Stejn´a metoda jako pˇredeˇsl´a, akor´at s t´ım rozd´ılem, ˇze nam´ısto lok´aln´ıho souboru je dod´an pouze jeho n´azev. • File downloadMultiFile(File destination, boolean overwrite) Metoda pro staˇzen´ı souboru z v´ıce u ´loˇziˇst’ ve v´ıce vl´aknech. Tato metoda vyuˇz´ıv´a zdroje pˇripraven´e metodou addDownloadSource. Vstupem metody je c´ılov´ y lok´aln´ı soubor a zda m˚ uˇze doj´ıt k pˇrepisu existuj´ıc´ıho souboru. V´ ystupem je pak lok´aln´ı soubor. • File downloadMultiFile(String destination, boolean overwrite) Tato metoda je stejn´a jako pˇredeˇsl´a, akor´at nam´ısto lok´aln´ıho souboru m´a na vstupu n´azev lok´aln´ıho souboru. • OperationError getLastError() Metoda pro z´ısk´an´ı posledn´ı chyby, kter´a se vyskytla v knihovnˇe. • ProgressListener getListener() Metoda pro z´ısk´an´ı implementace rozhran´ı pro sledov´an´ı pr˚ ubˇehu stahov´an´ı a nahr´av´an´ı. • MultiCloudSettings getSettings() Metoda pro z´ısk´an´ı aktu´aln´ıho nastaven´ı knihovny. • FileInfo listFolder(String accountName, FileInfo folder, boolean showDeleted, boolean showShared) Metoda pro z´ısk´an´ı obsahu vzd´alen´ı sloˇzky. Parametry tvoˇr´ı n´azev uˇzivatelsk´eho u ´ˇctu, metadata sloˇzky, jej´ıˇz obsah m´a b´ yt z´ısk´an, a zda je povoleno zobrazen´ı smazan´eho a sd´ılen´eho obsahu. V´ ystupem z metody jsou metadata sloˇzky rozˇs´ıˇrena o jej´ı obsah. 83
Pˇr´ıloha
Dokumentace knihovny
• FileInfo listFolder(String accountName, FileInfo folder, boolean showDeleted) Stejn´a metoda jako pˇredeˇsl´a, pouze s menˇs´ım poˇctem parametr˚ u. • FileInfo listFolder(String accountName, FileInfo folder) Stejn´a metoda jako pˇredeˇsl´a, bez parametr˚ u ovlivˇ nuj´ıc´ıch v´ ypis obsahu. • FileInfo metadata(String accountName, FileInfo file) Metoda pro z´ısk´an´ı metadat o souboru nebo sloˇzce. Vstupn´ımi parametry jsou n´azev uˇzivatelsk´eho u ´ˇctu a metadata souboru ˇci sloˇzky. Metadata na vstupu mus´ı obsahovat pouze atributy pro jednoznaˇcn´e urˇcen´ı souboru ˇci sloˇzky, zbytek je vol´an´ım metody doplnˇen. V´ ystupem jsou tak kompletn´ı metadata. • FileInfo move(String accountName, FileInfo file, FileInfo destination, String destinationName) Metoda pro pˇresun souboru v r´amci u ´loˇziˇstˇe. Parametry jsou n´azev uˇzivatelsk´eho u ´ˇctu, metadata zdrojov´eho souboru, metadata c´ılov´e sloˇzky a n´azev c´ılov´ y souboru. V´ ystupem jsou nov´a metadata pˇresunut´eho souboru. • void refreshAccount(String accountName, AuthorizationCallback callback) Metoda pro z´ısk´an´ı nov´eho pˇr´ıstupov´eho tokenu vyuˇzit´ım obnovovac´ıho tokenu. Vstupem jsou n´azev uˇzivatelsk´eho u ´ˇctu a rozhran´ı pro interakci s uˇzivatelem bˇehem procesu. • FileInfo rename(String accountName, FileInfo file, String fileName) Metoda pro pˇrejmenov´an´ı souboru ˇci sloˇzky. Parametry vol´an´ı jsou n´azev uˇzivatelsk´eho u ´ˇctu, metadata souboru ˇci sloˇzky a nov´ y n´azev. N´avratovou hodnotou jsou nov´a metadata souboru ˇci sloˇzky po pˇrejmenov´an´ı. • void renameAccount(String accountName, String newName) Metoda pro zmˇenu n´azvu uˇzivatelsk´eho u ´ˇctu. Vstupem je n´azev uˇzivatelsk´eho u ´ˇctu a n´azev, na kter´ y m´a b´ yt uˇzivatelsk´ yu ´ˇcet pˇrejmenov´an. • List search(String accountName, String search, boolean showDeleted) Metoda pro vyhled´av´an´ı soubor˚ u a sloˇzek. Vstupem jsou n´azev uˇzivatelsk´eho u ´ˇctu, ˇretˇezec, kter´ y m´a b´ yt vyhled´an, a zda je povoleno
84
Pˇr´ıloha
Dokumentace knihovny
zobrazen´ı smazan´ ych soubor˚ u ˇci sloˇzek. N´avratem z metody je seznam s metadaty nalezen´ ych soubor˚ u a sloˇzek. • void setListener(ProgressListener listener) Metoda pro nastaven´ı implementace rozhran´ı pro naslouch´an´ı pr˚ ubˇehu operace nahr´av´an´ı a stahov´an´ı. • FileInfo updateFile(String accountName, FileInfo destination, FileInfo destinationFile, String destinationName, File data) Metoda pro pˇreps´an´ı obsahu souboru na jednom u ´loˇziˇsti. Vstupem metody jsou n´azev uˇzivatelsk´eho u ´ˇctu, metadata c´ılov´e sloˇzky, metadata c´ılov´eho souboru, n´azev c´ılov´eho souboru a lok´aln´ı zdrojov´ y soubor. V´ ystupem pak jsou nov´a metadata upraven´eho souboru. • FileInfo updateMultiFile(File data) Touto metodou je pˇreps´an obsah vˇsech vzd´alen´ ych soubor˚ u pˇripraven´ ych metodou addUpdateDestination. Vstupem je zde pouze lok´aln´ı zdrojov´ y soubor. V´ ystupem pak jsou metadata upraven´eho souboru. • FileInfo uploadFile(String accountName, FileInfo destination, String destinationName, boolean overwrite, File data) Metoda pro nahr´an´ı souboru na jedno u ´loˇziˇstˇe. Vstupem metody jsou n´azev uˇzivatelsk´eho u ´ˇctu, metadata c´ılov´e sloˇzky, c´ılov´ y n´azev souboru v u ´loˇziˇsti, zda m˚ uˇze b´ yt pˇreps´an existuj´ıc´ı soubor a lok´aln´ı zdrojov´ y soubor. V´ ystupem jsou metadata nov´e nahran´eho souboru. • FileInfo uploadMultiFile(boolean overwrite, File data) Metoda pro nahr´an´ı souboru na v´ıce u ´loˇziˇst’ z´aroveˇ n. Vyuˇz´ıv´any jsou c´ılov´e destinace pˇripraven´e metodou addUploadDestination. Vstupn´ımi parametry metody jsou nastaven´ı pˇrepisu existuj´ıc´ıch soubor˚ u a lok´aln´ı zdrojov´ y soubor. V´ ystupem pak jsou metadata nahran´eho souboru. • void validateAccounts() Tato metoda slouˇz´ı pro odstranˇen´ı nevalidn´ıch spojen´ı mezi uˇzivatelsk´ ymi u ´ˇcty a pˇr´ıstupov´ ymi tokeny a pro odstranˇen´ı nevyuˇz´ıvan´ ych token˚ u.
85
Pˇr´ıloha
A.1.2
Dokumentace knihovny
V´ yjimky
Souˇca´st´ı knihovny jsou i zde popsan´e v´ yjimky, kter´e jsou standardnˇe vyvol´av´any pˇri v´ yskytu probl´em˚ u uvnitˇr knihovny. • AbortedException – Tato v´ yjimka rozˇsiˇruje v´ yjimku MultiCloudException a jej´ı vyuˇzit´ı je pro signalizaci pˇreruˇsen´ı operace. • MultiCloudException – Hlavn´ım u ´ˇcelem t´eto v´ yjimky je signalizace probl´em˚ u, kter´e vznikly nespr´avn´ ym uˇz´ıv´an´ım knihovny. • OAuth2SettingsException – Tato v´ yjimka je vyvol´av´ana v pˇr´ıpadˇe v´ yskytu probl´em˚ u bˇehem autorizaˇcn´ıho procesu.
A.1.3
Rozhran´ı
Knihovna obsahuje nˇekolik rozhran´ı, kter´a jsou urˇcena pro implementaci pˇri jej´ım pouˇzit´ı. • AuthorizationCallback – Toto rozhran´ı je urˇceno pro vyvol´an´ı grafick´eho uˇzivatelsk´eho rozhran´ı bˇehem autorizaˇcn´ıho procesu. C´ılem tohoto rozhran´ı je tak poskytnout uˇzivateli platformˇe z´avislou metodu pro autorizaci pˇr´ıstupu k u ´loˇziˇsti. • AccountManager – Toto rozhran´ı specifikuje metody pro spr´avu uˇzivatelsk´ ych u ´ˇct˚ u. Souˇc´ast´ı knihovny je i jeho z´akladn´ı implementace pracuj´ıc´ı se soubory. • CloudManager – Toto rozhran´ı specifikuje metody pro spr´avu definic cloudov´ ych u ´loˇziˇst’. Souˇca´st´ı knihovny je implementace pracuj´ıc´ı se soubory. • CredentialStore – Toto rozhran´ı slouˇz´ı pro ukl´ad´an´ı a z´ısk´av´an´ı pˇr´ıstupov´ ych token˚ u. Souˇca´st´ı knihovny je implementace tohoto rozhran´ı pracuj´ıc´ı se soubory a jej´ı rozˇs´ıˇren´ı implementuj´ıc´ı ˇsifrov´an´ı dat.
86
Pˇr´ıloha
A.1.4
Dokumentace knihovny
Abstraktn´ı tˇ r´ıdy
D˚ uleˇzitou abstraktn´ı tˇr´ıdou knihovny je tˇr´ıda ProgressListener, kter´a tvoˇr´ı z´aklad pro implementaci sledov´an´ı pr˚ ubˇehu operac´ı nahr´av´an´ı a stahov´an´ı souboru. Abstraktn´ı metodou, kterou je tˇreba implementovat, je metoda onProgress. Tato metoda slouˇz´ı pro periodick´e zobrazen´ı pr˚ ubˇehu operace. Minim´aln´ı interval, po kter´em je metoda vyvol´ana, je pˇred´an tˇr´ıdˇe pomoc´ı konstruktoru. Metoda nem´a ˇza´dn´e vstupn´ı parametry a neobsahuje ˇza´dn´ y v´ ystup. Aby bylo moˇzn´e stahovat a nahr´avat soubory, mus´ı b´ yt knihovnˇe pˇred´ana instance tˇr´ıdy tuto tˇr´ıdu rozˇsiˇruj´ıc´ı.
A.1.5
Konfiguraˇ cn´ı soubor
Konfiguraˇcn´ı soubory pro knihovnu jsou naps´any ve form´atu JSON a maj´ı n´asleduj´ıc´ı podobu. Hodnoty typu {request_obj} symbolizuj´ı objekty pro specifikaci HTTP poˇzadavk˚ u, kter´e jsou pops´any d´ale. Kaˇzd´ y konfiguraˇcn´ı soubor m´a povinn´ y parametr name, kter´ y symbolizuje n´azev u ´loˇziˇstˇe. Popis u ´loˇziˇstˇe je pak hodnotou parametru description. N´asleduj´ı parametry authorize a token, kter´e definuj´ı HTTP poˇzadavky na autorizaˇcn´ı server v pr˚ ubˇehu autorizace. Parametr grant_type specifikuje typ pouˇzit´eho autorizaˇcn´ı grantu a grant_class pak tˇr´ıdu pro extension grant v pˇr´ıpadˇe jeho pouˇzit´ı. Parametry client_id, client_secret, username a password jsou pˇred´avan´ ymi parametry autorizaˇcn´ıch grant˚ u, pˇriˇcemˇz vyplnˇeny mus´ı b´ yt pouze ty parametry, kter´e autorizaˇcn´ı grant pouˇz´ıv´a. Pˇresmˇerov´an´ı po procesu autorizace je provedeno na redirect_uri. Posledn´ım autorizaˇcn´ım parametrem je scope, kter´ ym je specifikov´an poˇzadovan´ y rozsah pˇr´ıstupu k u ´loˇziˇsti. N´asleduje parametr pro specifikaci koˇrenov´e sloˇzky u ´loˇziˇstˇe root_folder. Tento parametr obsahuje objekt, kter´emu je moˇzno specifikovat identifik´ator nebo cestu ke koˇrenov´e sloˇzce. Zbyl´e parametry slouˇz´ı pro specifikaci jednotliv´ ych operac´ı prov´adˇen´ ych nad u ´loˇziˇstˇem. Hodnotou kaˇzd´eho z tˇechto parametr˚ u je objekt specifikuj´ıc´ı HTTP poˇzadavek na u ´loˇziˇstˇe.
87
Pˇr´ıloha
Dokumentace knihovny
{ "name":"", "description":"", "authorize":{request_obj}, "token":{request_obj}, "grant_type":"", "grant_class":"", "client_id":"", "client_secret":"", "username":"", "password":"", "redirect_uri":"", "scope":"", "root_folder": { "id":"" "path":"" }, "account_info_request":{request_obj}, "account_quota_request":{request_obj}, "download_file_request":{request_obj}, "upload_file_begin_request":{request_obj}, "upload_file_request":{request_obj}, "upload_file_finish_request":{request_obj}, "update_file_begin_request":{request_obj}, "update_file_request":{request_obj}, "update_file_finish_request":{request_obj}, "create_dir_request":{request_obj}, "list_dir_begin_request":{request_obj}, "list_dir_request":{request_obj}, "rename_request":{request_obj}, "copy_request":{request_obj}, "move_request":{request_obj}, "delete_request":{request_obj}, "search_request":{request_obj}, "metadata_request":{request_obj} }
88
Pˇr´ıloha
Dokumentace knihovny
Objekt pro specifikaci HTTP poˇzadavku je zachycen v n´asleduj´ıc´ı uk´azce. Povinnou souˇc´ast´ı tohoto objektu jsou parametry uri, kter´ y urˇcuje identifik´ator vzd´alen´eho zdroje, a method, kter´ y specifikuje pouˇzitou HTTP metodu. Mezi dalˇs´ı parametry patˇr´ı parametr params, kter´ y obsahuje mnoˇzinu parametr˚ u pouˇzit´ ych pˇri vol´an´ı poˇzadavku. D´ale je moˇzno specifikovat mapov´an´ı n´avratov´ ych parametr˚ u parametrem mapping. Mapov´an´ı se vztahuje i na parametry pˇred´avan´e uvnitˇr JSON odpovˇedi. Parametr body slouˇz´ı pro specifikaci ˇretˇezce, kter´ y m´a b´ yt v tˇele poˇzadavku. Parametr json_body je pak urˇcen pro specifikaci obsahu tˇela poˇzadavku ve form´atu JSON. Pokud je poˇzadavku potˇreba pˇred´avat nˇejakou promˇennou hodnotu, at’ uˇz do parametru uri, nebo kamkoliv jinam, je moˇzno ji vloˇzit pˇr´ımo do ˇretˇezce. Vloˇzen´a hodnota mus´ı b´ yt uzavˇrena mezi znaky < a >. Knihovnou jsou pak tyto hodnoty rozpozn´av´any a nahrazov´any za pˇr´ısluˇsn´e promˇenn´e. Pro kaˇzdou operaci jsou dostupn´e jin´e takto mapovan´e promˇenn´e. { "uri":"", "method":"", "params": { "parameter":"value" }, "mapping": { "property":"mapping" }, "body":null, "json_body": { "property":"value" } } N´asleduje seznam operac´ı a jejich mapovan´ ych promˇenn´ ych. Pro kaˇzdou promˇennou je pops´an i jej´ı v´ yznam. • account_info – ˇza´dn´e promˇenn´e • account_quota – ˇza´dn´e promˇenn´e 89
Pˇr´ıloha
Dokumentace knihovny
• download_file + download_url – URL pro staˇzen´ı souboru + id – identifik´ator stahovan´eho souboru + path – cesta ke stahovan´emu souboru • upload_file a update_file + overwrite – zda m´a b´ yt soubor pˇreps´an + size – velikost nahr´avan´eho souboru + id a destination_id – identifik´ator c´ılov´e sloˇzky + file_id – identifik´ator souboru pro pˇreps´an´ı obsahu + path a destination_path – cesta k c´ılov´emu souboru + name – n´azev c´ılov´eho souboru + offset – posun uvnitˇr c´ılov´eho souboru + session – identifik´ator relace + offsetbuffer – posun uvnitˇr c´ılov´eho souboru vˇcetnˇe aktu´alnˇe nahr´avan´ ych dat • create_dir + name – n´azev sloˇzky + id – identifik´ator rodiˇcovsk´e sloˇzky + path – cesta k nov´e sloˇzce • list_dir + id – identifik´ator sloˇzky + path – cesta ke sloˇzce + deleted – zda maj´ı b´ yt zobrazen smazan´ y obsah • rename + id a source_id – identifik´ator zdroje + path a source_path – cesta ke zdroji + destination_path – cesta k nov´emu souboru ˇci sloˇzce + name – nov´ y n´azev • copy a move + id a source_id – identifik´ator zdroje + path a source_path – cesta ke zdroji + destination_id – identifik´ator c´ılov´e sloˇzky + destination_path – cesta k c´ılov´e sloˇzce + name – nov´ y n´azev • delete a metadata + id – identifik´ator zdroje + path – cesta ke zdroji 90
Pˇr´ıloha
Dokumentace knihovny
• search + query – vyhled´avan´ y ˇretˇezec + deleted – zda maj´ı b´ yt zobrazen smazan´ y obsah
A.1.6
Nasazen´ı knihovny
Aby bylo moˇzn´e vyuˇz´ıvat knihovnu, je potˇreba kromˇe konfiguraˇcn´ıch soubor˚ u jeˇstˇe zaregistrovat vytv´aˇrenou aplikaci v r´amci cloudov´ ych u ´loˇziˇst’. Registrac´ı je z´ısk´an identifik´ator klienta a tajn´ y kl´ıˇc, kter´e jsou potˇreba pro autorizaci aplikace. Pro pohodlnˇejˇs´ı autorizaˇcn´ı proces je moˇzn´e nastavit v r´amci nastaven´ı aplikace na cloudov´ ych u ´loˇziˇst´ıch URI pro pˇresmˇerov´an´ı po skonˇcen´ı autorizaˇcn´ıho procesu. Nˇekter´a u ´loˇziˇstˇe k tomu vyˇzaduj´ı, aby k aplikaci byla pˇriˇrazena unik´atn´ı dom´ena. C´ılem pˇresmˇerov´an´ı by tak mˇel b´ yt skript, kter´ y by provedl n´asledn´e pˇresmˇerov´an´ı zpˇet na poˇc´ıtaˇc uˇzivatele. K tomuto u ´ˇcelu je pˇripraven jednoduch´ y PHP skript. Pro spr´avn´e fungov´an´ı tohoto skriptu je nutn´e jeho nasazen´ı na webov´ y server s podporou PHP. Jako webov´ y server je moˇzn´e vyuˇz´ıt napˇr´ıklad HTTP server od Apache dostupn´ y z https://httpd.apache.org/. Distribuce PHP je pak dostupn´a z http://www.php.net/. Pro instalaci webov´eho serveru od Apache je doporuˇceno postupovat podle uˇzivatelsk´e pˇr´ıruˇcky dostupn´e na https://httpd.apache.org/docs/ 2.4/getting-started.html. Obdobnˇe je tomu i pro PHP, kde uˇzivatelsk´a pˇr´ıruˇcka je um´ıstˇena na http://php.net/manual/en/install.php. Po u ´spˇeˇsn´e instalaci webov´eho serveru s podporou PHP je moˇzn´e um´ıstit skript na server. Lokace skriptu nehraje roli, podm´ınkou vˇsak je, ˇze tento skript mus´ı b´ yt pˇr´ıstupn´ y pro uˇzivatele, kter´ y proch´az´ı autorizaˇcn´ım procesem. Pokud je tedy v´ ysledn´a klientsk´a aplikace vyuˇz´ıvaj´ıc´ı knihovnu c´ılena na ˇsirokou veˇrejnost, je nutn´e m´ıt pˇripravenou veˇrejnou dom´enu v s´ıti Internet.
91
Pˇ r´ıloha B B.1 B.1.1
Uˇ zivatelsk´ a pˇ r´ıruˇ cka - MultiCloudDesktop Instalace a spuˇ stˇ en´ı
Aktu´aln´ı verzi klientsk´e aplikace je moˇzn´e st´ahnout na n´asleduj´ıc´ı webov´e adrese. Doporuˇcen´e je staˇzen´ı jiˇz pˇripraven´e aplikace v bal´ıku .jar ze sloˇzky /jar. Druhou moˇznost´ı je staˇzen´ı .exe souboru ze sloˇzky /exe. Tˇret´ı moˇznost´ı je staˇzen´ı zdrojov´ ych soubor˚ u aplikace a kompilace pomoc´ı ANT skriptu build.xml. https://github.com/stanek0j/MultiCloudDesktop Spolu s aplikac´ı je d˚ uleˇzit´e staˇzen´ı definic cloudov´ ych u ´loˇziˇst’. To se provede staˇzen´ım cel´e sloˇzky /definitions a jej´ım um´ıstˇen´ı do stejn´e sloˇzky, ve kter´e je staˇzena aplikace. Aplikace po spuˇstˇen´ı prohled´av´a sloˇzku /definitions a naˇc´ıt´a z n´ı definice cloudov´ ych u ´loˇziˇst’. Pro spuˇstˇen´ı programu je potˇreba m´ıt instalovan´e bˇehov´e prostˇred´ı Javy, tzv. Java Runtime Environment (JRE) ve verzi 1.7. Aktu´aln´ı verzi JRE je moˇzno z´ıskat z n´asleduj´ıc´ı adresy. http://www.oracle.com/technetwork/java/javase/downloads/ Spuˇstˇen´ı aplikace se provede v z´avislosti na staˇzen´e variantˇe. Spustiteln´ y soubor form´atu .exe je moˇzno spustit dvojklikem myˇsi. Pro .jar soubor je moˇzno pouˇz´ıt pˇr´ıkaz z pˇr´ıkazov´e ˇra´dky: java -jar MultiCloudDesktop.jar Po spuˇstˇen´ı si aplikace vytv´aˇr´ı soubory .multicloud, credentials.dat, accounts.json a preferences.json. Tyto soubory jsou potˇrebn´e pro spr´avn´e fungov´an´ı aplikace a nen´ı vhodn´e je mazat.
92
Pˇr´ıloha
B.1.2
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudDesktop
Ovl´ ad´ an´ı
Po spuˇstˇen´ı aplikace se zobraz´ı v´ ychoz´ı okno aplikace. V horn´ı ˇca´sti okna je liˇsta s nab´ıdkou ovl´ad´an´ı. V lev´e ˇca´sti okna je seznam uˇzivatelsk´ ych u ´ˇct˚ u a v prav´e ˇca´sti pak seznam soubor˚ u a sloˇzek. Po prvn´ım spuˇstˇen´ı aplikace je lev´ y i prav´ y panel pr´azdn´ y. Okno aplikace je zachyceno na obr´azku B.1.
Obr´azek B.1: Okno aplikace. Jako prvn´ı je zde zaˇrazen popis a funkce obou panel˚ u v oknˇe a doln´ı liˇsty. Pot´e n´asleduje popis jednotliv´ ych operac´ı z horn´ı nab´ıdky, vˇcetnˇe uk´azek dialogov´ ych oken, kter´a jsou zobrazov´ana. Lev´ y panel V tomto panelu se zobrazuj´ı vytvoˇren´e uˇzivatelsk´e u ´ˇcty. Ke kaˇzd´emu u ´ˇctu je zobrazen jeho n´azev, typ u ´loˇziˇstˇe, ke kter´emu pˇristupuje, a informace o kapacit´ach u ´loˇziˇstˇe. Dvojklikem lev´ ym tlaˇc´ıtkem na u ´ˇcet je provedeno zobrazen´ı jeho koˇrenov´e sloˇzky v prav´em panelu. Pokud vˇsak u ´ˇcet nebyl jeˇstˇe autorizov´an, je spuˇstˇen proces autorizace, kter´ y vyvol´a okno webov´eho prohl´ıˇzeˇce. Kliknut´ı prav´ ym tlaˇc´ıtkem vyvol´a kontextovou nab´ıdku, kter´a je shodn´a s horn´ı nab´ıdkou Account. 93
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudDesktop
Pro lev´ y panel jsou definov´any kl´avesov´e zkratky. Stiskem kl´avesy Enter nebo mezern´ıku je provedena stejn´a akce jako pˇri dvojkliku lev´ ym tlaˇc´ıtkem myˇsi. Kl´avesou Delete je moˇzno mazat u ´ˇcty. Prav´ y panel V prav´em panelu je zobrazov´an obsah sloˇzek cloudov´ ych u ´loˇziˇst’. V horn´ı ˇc´asti panelu se zobrazuje cesta k aktu´alnˇe prohl´ıˇzen´e sloˇzce. Dvojklikem lev´ ym tlaˇc´ıtkem na sloˇzku je moˇzno sloˇzku proch´azet. Proch´azen´ım sloˇzky s n´azvem .. se provede pˇresun o sloˇzku v´ yˇse (do pˇredchoz´ı sloˇzky). Kliknut´ım prav´ ym tlaˇc´ıtkem je vyvol´ana kontextov´a nab´ıdka, kter´a je shodn´a s horn´ı nab´ıdkou Operation. Stiskem kl´avesy Enter nebo mezern´ıku je rovnˇeˇz moˇzno proch´azet sloˇzky. Doln´ı liˇ sta V lev´e ˇca´sti doln´ı liˇsty jsou zobrazov´ana informaˇcn´ı a chybov´a hl´aˇsen´ı aplikace. V prav´e ˇc´asti je zobrazov´an indik´ator postupu operac´ı a tlaˇc´ıtku na jejich pˇreruˇsen´ı. Pokud zrovna nˇejak´a operace prob´ıh´a a nen´ı vyvol´ano zvl´aˇstn´ı dialogov´e okno, je t´eˇz moˇzno tuto operaci pˇreruˇsit stiskem kl´avesy Esc. N´a´ sleduje popis jednotliv´ ych u ´kon˚ u, kter´e je moˇzno v aplikaci prov´adˇet. Ukony jsou ˇrazeny podle nab´ıdky v horn´ı ˇc´asti okna.
Synchronizace – File -> Synchronize – Ctrl+S Tato nab´ıdka spouˇst´ı proces synchronizace. Pˇred spuˇstˇen´ım procesu je nutn´e vybrat v nastaven´ı synchronizaˇcn´ı sloˇzku a urˇcit, kter´e soubory se budou kam synchronizovat. V´ ybˇer soubor˚ u pro synchronizaci se prov´ad´ı prostˇrednictv´ım dialogov´eho okna, kter´e je pro n´azornost zachyceno v obr´azku B.2. Cel´ y proces synchronizace m˚ uˇze b´ yt ˇcasovˇe velmi n´aroˇcn´ y. Bˇehem synchronizace se m˚ uˇze st´at, ˇze nˇekter´ y ze soubor˚ u nebude v konzistentn´ım stavu a bude vyˇzadov´an z´asah uˇzivatele prostˇrednictv´ım dialogov´eho okna jak´e je zobrazeno v obr´azku B.3. Nastaven´ı – File -> Preferences – Ctrl+P Nastaven´ı aplikace je prov´adˇeno prostˇrednictv´ım dialogov´eho okna zobrazen´eho v obr´azku B.5. V tomto oknˇe je moˇzn´e nastavit typ zobrazen´ı soubor˚ u a sloˇzek, synchronizaˇcn´ı sloˇzku a vybrat soubory pro synchronizaci. D´ale je zde umoˇznˇeno nastavit poˇcet vl´aken pro stahov´an´ı a moˇznosti v´ ypisu obsahu sloˇzek. Nechyb´ı zde ani moˇznost vypnout vyskakov´an´ı chybov´ ych hl´aˇsen´ı pˇri chybˇe.
94
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudDesktop
Obr´azek B.2: Dialogov´e okno v´ ybˇeru soubor˚ u pro synchronizaci.
Obr´azek B.3: Dialogov´e okno chyby synchronizace.
Obr´azek B.4: Dialogov´e okno zobrazuj´ıc´ı pr˚ ubˇeh operace.
95
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudDesktop
Obr´azek B.5: Dialogov´e okno pro nastaven´ı aplikace.
Obr´azek B.6: Dialogov´e okno pro vytvoˇren´ı u ´ˇctu.
Obr´azek B.7: Dialogov´e okno pro vyhled´av´an´ı. 96
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudDesktop
Ukonˇ cen´ı aplikace – File -> Exit – Alt+F4 Aplikaci je moˇzn´e ukonˇcit bud’ z horn´ı nab´ıdky, kl´avesovou zkratkou, nebo kliknut´ım na kˇr´ıˇzek v prav´em horn´ım rohu okna. Vytvoˇ ren´ı u ´ˇ ctu – Account -> Add Pro vytvoˇren´ı uˇzivatelsk´eho u ´ˇctu je zobrazeno dialogov´e okno, do kter´eho je nutn´e zadat n´azev u ´ˇctu a zvolit typ u ´loˇziˇstˇe (viz obr. B.6). Po u ´spˇeˇsn´em vytvoˇren´ı u ´ˇctu je u ´ˇcet zobrazen v lev´em panelu. Autorizace – Account -> Authorize Spuˇstˇen´ım procesu autorizace je otevˇreno okno webov´eho prohl´ıˇzeˇce. Pro u ´spˇeˇsnou autorizaci aplikace pro pˇr´ıstup ke cloudov´emu u ´loˇziˇsti je potˇreba postupovat dle pokyn˚ u v oknˇe prohl´ıˇzeˇce. Po u ´spˇeˇsn´e autorizaci je skrz aplikaci moˇzno pˇristupovat k soubor˚ um v u ´loˇziˇsti. Informace o u ´ˇ ctu – Account -> Information Tato akce vyvol´a dialogov´e okno, ve kter´em je zobrazeno jm´eno uˇzivatele cloudov´eho u ´loˇziˇstˇe a jeho identifik´ator. Informace o kapacitˇ eu ´ loˇ ziˇ stˇ e – Account -> Quota Tato akce vyvol´a dialogov´e okno, ve kter´em je zobrazena celkov´a velikost u ´loˇziˇstˇe, obsazen´ y a voln´ y prostor. Pˇ rejmenov´ an´ı u ´ˇ ctu – Account -> Rename Tato akce slouˇz´ı pro pˇrejmenov´an´ı uˇzivatelsk´eho u ´ˇctu. Pro tento u ´ˇcel je zobrazeno stejn´e dialogov´e okno jako pˇri tvorbˇe u ´ˇctu, ovˇsem nen´ı moˇzno zmˇenit typ u ´loˇziˇstˇe (viz obr. B.6). Odstranˇ en´ı u ´ˇ ctu – Account -> Remove Tato akce provede smaz´an´ı vybran´eho uˇzivatelsk´eho u ´ˇctu. Pˇred smaz´an´ım u ´ˇctu je jeˇstˇe nutn´e smaz´an´ı potvrdit v dialogov´em oknˇe. Obnoven´ı – Operation -> Refresh – F5 Tato akce obnov´ı obsah pr´avˇe zobrazen´ı sloˇzky. Vyhled´ av´ an´ı – Operation -> Find – Ctrl+F Tato akce vyvol´av´a dialogov´e okno vyhled´av´an´ı (viz obr. B.7). V tomto oknˇe je moˇzn´e zvolit u ´ˇcet, ve kter´em bude vyhled´av´ano. Pod volbou u ´ˇctu je nutn´e zadat hledan´ y ˇretˇezec. Pod t´ımto zad´avac´ım prvkem je panel pro zobrazen´ı v´ ysledk˚ u. Tlaˇc´ıtkem Find se provede vyhled´an´ı a tlaˇc´ıtkem Abort je moˇzn´e vyhled´av´an´ı pˇreruˇsit. Tlaˇc´ıtka OK a Cancel zav´ıraj´ı dialogov´e okno.
97
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudDesktop
Obr´azek B.8: Dialogov´e okno pro v´ ybˇer cloudov´ ych u ´loˇziˇst’.
Obr´azek B.9: Dialogov´e okno pro v´ ybˇer sloˇzky v u ´loˇziˇsti.
Obr´azek B.10: Dialogov´e okno pro pˇrejmenov´an´ı souboru ˇci sloˇzky.
98
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudDesktop
Obr´azek B.11: Dialogov´e okno vyhled´av´an´ı v pˇr´ıpadˇe neshody soubor˚ u.
Obr´azek B.12: Upozornˇen´ı na moˇznost poˇskozen´ı souboru pˇri stahov´an´ı.
Obr´azek B.13: Dialogov´e okno zobrazuj´ıc´ı informace o souboru.
99
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudDesktop
Nahr´ av´ an´ı souboru – Operation -> Upload / Multi upload Soubory je moˇzn´e nahr´avat dvˇema zp˚ usoby. Prvn´ım zp˚ usobem je nahr´av´an´ı souboru na pouze jedno u ´loˇziˇstˇe. Pˇri tomto zp˚ usobu nahr´av´an´ı je zobrazeno dialogov´e okno pro v´ ybˇer souboru v poˇc´ıtaˇci. Po jeho vybr´an´ı je moˇzn´e sledovat pr˚ ubˇeh nahr´av´an´ı v oknu podobn´em tomu na obr´azku B.4. Druh´ ym zp˚ usobem je nahr´av´an´ı souboru na v´ıce u ´loˇziˇst’ z´aroveˇ n. Pro tuto volbu je opˇet zobrazeno nejprve okno pro v´ ybˇer lok´aln´ıho souboru. Po vybr´an´ı souboru n´asleduje dialogov´e okno pro v´ ybˇer c´ılov´ ych cloudov´ ych u ´loˇziˇst’ (viz obr. B.8). Tento v´ ybˇer je n´asledov´an dalˇs´ım dialogov´ ym oknem, kter´e je zachyceno na obr´azku B.9 a slouˇz´ı pro v´ ybˇer c´ılov´ ych sloˇzek pro soubor na u ´loˇziˇst´ıch. Pak jiˇz n´asleduje jen okno pro sledov´an´ı postupu operace z obr´azku B.4. Stahov´ an´ı souboru – Operation -> Download / Multi download Pro stahov´an´ı soubor˚ u je opˇet na v´ ybˇer ze dvou voleb. Prvn´ı volbou je staˇzen´ı vybran´eho souboru v prav´em panelu z jednoho u ´loˇziˇstˇe. Pro tuto volbu je zobrazeno dialogov´e okno pro v´ ybˇer lokace v poˇc´ıtaˇci, kam m´a b´ yt soubor uloˇzen. Po volbˇe lokace n´asleduje zobrazen´ı pr˚ ubˇehu stahov´an´ı (viz obr.B.4). Pˇri druh´e volbˇe je soubor stahov´an z v´ıce u ´loˇziˇst’ z´aroveˇ n. Prvn´ım dialogov´ ym oknem je v´ ybˇer cloudov´ ych u ´loˇziˇst’, ze kter´ ych se bude stahovat (viz obr. B.8). Po tomto v´ ybˇeru n´asleduje vyhled´an´ı souboru na vybran´ ych u ´loˇziˇst´ıch. K tomu slouˇz´ı dialogov´e okno pro vyhled´av´an´ı (viz obr. B.7). Pokud je vˇsak nalezen soubor, kter´ y by mohl odpov´ıdat vybran´emu souboru pro stahov´an´ı, ale nen´ı jasn´e, zda se jedn´a o stejn´ y soubor, je tento soubor v oknˇe vyhled´av´an´ı oznaˇcen vykˇriˇcn´ıkem. Tento stav je zobrazen na obr´azku B.11. Pokud je nˇejak´ y takov´ y soubor vybr´an pro staˇzen´ı, je v dalˇs´ım kroku zobrazeno upozornˇen´ı, ˇze by v´ ysledn´ y staˇzen´ y soubor mohl b´ yt poˇskozen (viz obr. B.12). Pˇredposledn´ım dialogov´ ym oknem je v´ ybˇer lok´aln´ı sloˇzky, do kter´e m´a b´ yt soubor uloˇzen. Pak jiˇz n´asleduje jen okno zobrazuj´ıc´ı pr˚ ubˇeh stahov´an´ı (viz obr. B.4). Vytvoˇ ren´ı sloˇ zky – Operation -> Create folder Pro vytvoˇren´ı sloˇzky je zobrazeno dialogov´e okno, do kter´eho je zad´an n´azev sloˇzky. Toto okno je shodn´e s oknem pro pˇrejmenov´an´ı, kter´e je zobrazeno na obr´azku B.10.
100
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudDesktop
Pˇ rejmenov´ an´ı – Operation -> Rename – F2 Tato akce vyvol´a dialogov´e okno pro pˇrejmenov´an´ı souboru ˇci sloˇzky (viz obr. B.10). Smaz´ an´ı – Operation -> Delete – Delete Pro smaz´an´ı souboru nebo sloˇzky je nejprve nutn´e soubor nebo sloˇzku vybrat v prav´em panelu. Smaz´an´ı je nutn´e potvrdit v dialogov´em oknˇe, kter´e je pˇri t´eto akci zobrazeno. Kop´ırov´ an´ı a pˇ resun – Operation -> Cut / Copy / Paste – Ctrl+X/C/V Tyto akce jsou povoleny pouze pro soubory. Cel´ y proces funguje tak, ˇze je nejprve zvolen nˇejak´ y soubor v u ´loˇziˇsti. Ten je n´aslednˇe oznaˇcen pro pˇresun nebo kop´ırov´an´ı. Pot´e je nutn´e se dostat v prav´em panelu do c´ılov´e sloˇzky. Pˇri vkl´ad´an´ı souboru je pak jeˇstˇe zobrazeno dialogov´e okno, ve kter´em je moˇzno soubor pˇrejmenovat (viz obr. B.10). Pokud se jedn´a o transfer souboru mezi dvˇema u ´loˇziˇsti, je po vloˇzen´ı zobrazeno dialogov´e okno sleduj´ıc´ı pr˚ ubˇeh pˇresunu nebo kop´ırov´an´ı (viz obr. B.4). V´ ypoˇ cet kontroln´ıho souˇ ctu – Operation -> Compute checksum Kontroln´ı souˇcet je moˇzn´e poˇc´ıtat pouze pro soubory. V´ ypoˇcet prob´ıh´a tak, ˇze je zobrazeno dialogov´e okno podobn´e tomu na obr´azku B.4, kter´e sleduje pr˚ ubˇeh stahov´an´ı vybran´eho souboru. Po staˇzen´ı souboru je vypoˇcten kontroln´ı souˇcet, kter´ y je n´aslednˇe pˇriˇrazen k souboru. Vlastnosti – Operation -> Properties Tato akce vyvol´a dialogov´e okno s informacemi o vybran´em souboru nebo sloˇzce. Podoba tohoto okna je vidˇet na obr´azku B.13. O programu – Help -> About Posledn´ı poloˇzkou horn´ı nab´ıdky je akce pro zobrazen´ı informac´ı o programu.
101
Pˇr´ıloha
B.2 B.2.1
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudAndroid
Uˇ zivatelsk´ a pˇ r´ıruˇ cka - MultiCloudAndroid Instalace a spuˇ stˇ en´ı
Aktu´aln´ı verzi mobiln´ı aplikace je moˇzn´e st´ahnout na n´asleduj´ıc´ı webov´e adrese. Ve sloˇzce /bin je um´ıstˇen soubor s aplikac´ı a pˇr´ıponou .apk. Jelikoˇz nen´ı aplikace um´ıstˇena na port´alu Google Play, je nutn´e pro jej´ı instalaci m´ıt povolenou instalaci aplikac´ı z jin´ ych zdroj˚ u. Toto nastaven´ı se provede zatrhnut´ım nab´ıdky Nastaven´ı -> Zabezpeˇcen´ı -> Nezn´am´e zdroje. Tento postup se m˚ uˇze liˇsit pro r˚ uzn´e verze syst´emu Android. https://github.com/stanek0j/MultiCloudAndroid Podm´ınkou pro u ´spˇeˇsnou instalaci aplikace je syst´em Android ve verzi alespoˇ n 3.0 nebo novˇejˇs´ı a pˇribliˇznˇe 4 MB voln´eho m´ısta. Instalaci je moˇzno spustit pˇrekop´ırov´an´ım bal´ıku do zaˇr´ızen´ı a jeho spuˇstˇen´ım pomoc´ı libovoln´eho spr´avce soubor˚ u. Druhou moˇznost´ı je vyuˇzit´ı aplikace adb, kter´ y je souˇc´ast´ı Android SDK. Instalace se pak spust´ı pˇr´ıkazem: adb install MultiCloudAndroid.apk Spuˇstˇen´ı aplikace se provede klepnut´ım na pˇr´ısluˇsnou poloˇzka v menu zaˇr´ızen´ı. Poloˇzka aplikace je pojmenov´ana MultiCloud a jako ikonu m´a modr´ y symbol oblaku.
B.2.2
Ovl´ ad´ an´ı
Po spuˇstˇen´ı aplikace je zobrazena v´ ychoz´ı obrazovka s uˇzivatelsk´ ymi u ´ˇcty. Podoba t´eto obrazovky je zachycena na obr´azku B.14(a). V doln´ı nab´ıdce jsou zobrazeny ikony pro operace t´eto nab´ıdky. Zleva je to pˇrid´an´ı u ´ˇctu, obnoven´ı informac´ı o u ´ˇctech, synchronizace a nastaven´ı. V kontextov´e nab´ıdce pro jednotliv´e poloˇzky seznamu pak jsou operace autorizace, z´ısk´an´ı informac´ı ou ´ˇctu, pˇrejmenov´an´ı a smaz´an´ı. Kontextov´a nab´ıdka je vyvol´ana dlouh´ ym stiskem poloˇzky v seznamu uˇzivatelsk´ ych u ´ˇct˚ u. Pˇ rid´ an´ı u ´ˇ ctu Po stisku ikony se zobraz´ı dialogov´e okno z obr´azku B.16(a). Povinn´ ymi u ´daji pro vytvoˇren´ı u ´ˇctu jsou uˇzivatelsk´e jm´eno a v´ ybˇer typu u ´loˇziˇstˇe. 102
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudAndroid
Obnoven´ı informac´ı o u ´ˇ ctech T´ımto tlaˇc´ıtkem se spust´ı operace, kter´a naˇc´ıt´a informace ke vˇsem uˇzivatelsk´ ym u ´ˇct˚ um. Po dokonˇcen´ı operace jsou obnoveny informace v seznamu uˇzivatelsk´ ych u ´ˇct˚ u. Synchronizace Pro spuˇstˇen´ı synchronizace je nejprve nutn´e m´ıt nastavenu synchronizaˇcn´ı sloˇzku. Po spuˇstˇen´ı t´eto operace se zobraz´ı dialog z obr´azku B.16(g). Po dokonˇcen´ı t´eto operace je zobrazen dialog podobn´ y tomu v obr´azku B.16(h) pouze v pˇr´ıpadˇe, ˇze nastal konflikt mezi synchronizovan´ ymi soubory. Vyˇreˇsen´ı tohoto konfliktu je potˇreba prov´est ruˇcnˇe staˇzen´ım souboru ze vzd´alen´eho u ´loˇziˇstˇe nebo nahr´an´ım lok´aln´ıho souboru na u ´loˇziˇstˇe. Nastaven´ı Stiskem t´eto ikony je vyvol´ano okno pro nastaven´ı. Toto okno je zachyceno v obr´azku B.14(c) a je pops´ano d´ale v t´eto sekci. Autorizace Spuˇstˇen´ım t´eto operace se otevˇre okno v´ ychoz´ıho webov´eho prohl´ıˇzeˇce a uˇzivateli je nab´ıdnuta webov´a str´anka u ´loˇziˇstˇe pro autorizaci aplikace. Po pr˚ uchodu procesem autorizace na webov´e str´ance je moˇzn´e prohl´ıˇzeˇc zavˇr´ıt. Po jeho zavˇren´ı je opˇet otevˇrena aplikace a dokonˇcen cel´ y proces autorizace. Informace o u ´ˇ ctu Pomoc´ı t´eto operace je moˇzn´e zjistit informace o uˇzivateli a dostupn´e prostoru v r´amci u ´loˇziˇstˇe. Po dokonˇcen´ı t´eto operace je zobrazeno dialogov´e okno zachycen´e na obr´azku B.16(b). Pˇ rejmenov´ an´ı u ´ˇ ctu Pˇrejmenov´an´ı u ´ˇctu vyvol´a stejn´ y dialog jako vytvoˇren´ı u ´ˇctu, s t´ım rozd´ılem, ˇze n´azev u ´ˇctu je jiˇz pˇredvyplnˇen a typ u ´loˇziˇstˇe nen´ı moˇzn´e zmˇenit. Smaz´ an´ı u ´ˇ ctu Smaz´an´ı uˇzivatelsk´eho u ´ˇctu prob´ıh´a bez zobrazen´ı dialogov´eho okna. V´ ysledkem je odebr´an´ı uˇzivatelsk´eho u ´ˇctu ze seznamu. Obrazovka adres´ aˇ rov´ e struktury Pˇri kliknut´ı na jiˇz autorizovan´ y uˇzivatelsk´ yu ´ˇcet je zobrazena obrazovka se soubory v u ´loˇziˇsti. Podoba t´eto obrazovky je vidˇet na obr´azku 8.2(b). Opˇet jsou zde dostupn´a tlaˇc´ıtka ve spodn´ı ˇca´sti obrazovky. Zleva to jsou vytvoˇren´ı nov´e sloˇzky, nahr´an´ı souboru, obnoven´ı obsahu sloˇzky synchronizace a skryt´e tlaˇc´ıtko nastaven´ı. Tlaˇc´ıtka synchronizace a nastaven´ı funguj´ı stejnˇe jako u 103
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudAndroid
pˇredchoz´ı obrazovky a nen´ı nutn´e je znovu popisovat. Kontextov´a nab´ıdka obsahuje moˇznosti staˇzen´ı souboru, pˇrejmenov´an´ı, smaz´an´ı, v´ ypoˇctu kontroln´ıho souˇctu a zobrazen´ı vlastnost´ı souboru. Proch´azen´ı sloˇzek se provede stisknut´ım vybran´e sloˇzky, kter´ ym se spust´ı naˇc´ıt´an´ı jej´ıho obsahu. Pro pˇrechod zpˇet do rodiˇcovsk´e sloˇzky je moˇzno stisknout ikonu aplikace s n´azvem aktu´aln´ı sloˇzky v lev´em horn´ım rohu. Tlaˇc´ıtkem zpˇet je pak moˇzn´ y pˇrechod k obrazovce s uˇzivatelsk´ ymi u ´ˇcty. Vytvoˇ ren´ı nov´ e sloˇ zky Toto tlaˇc´ıtko vyvol´a dialog pro vloˇzen´ı jm´ena nov´e sloˇzky. Podoba tohoto dialogu je zobrazena na obr´azku B.16(e). Po vytvoˇren´ı nov´e sloˇzky je obnoven zobrazen´ y obsah. Nahr´ an´ı souboru Pro nahr´an´ı souboru je zobrazeno dialogov´e okno s v´ ybˇerem lok´aln´ıho souboru pro nahr´an´ı (viz obr. B.16(i). V pˇr´ıpadˇe, ˇze v u ´loˇziˇsti jiˇz existuje soubor se stejn´ ym n´azvem, zobraz´ı se dialog vyˇzaduj´ıc´ı potvrzen´ı pˇripisu souboru. Po potvrzen´ı je zobrazen dialog s pr˚ ubˇehem nahr´av´an´ı souboru, kter´ y je podobn´ y tomu v obr´azku B.16(d). Obnoven´ı obsahu sloˇ zky Tato operace naˇcte znovu obsah aktu´aln´ı sloˇzky. Staˇ zen´ı souboru Spuˇstˇen´ım t´eto operace se zobraz´ı dialog podobn´ y tomu v obr´azku B.16(i). Pomoc´ı tohoto dialogu je moˇzno zvolit lok´aln´ı sloˇzku, do kter´e bude soubor staˇzen. Dalˇs´ım dialogem pak je moˇznost pˇrejmenov´an´ı souboru pˇred staˇzen´ım. Pokud je vybr´an jiˇz existuj´ıc´ı n´azev souboru v dan´e sloˇzce, je nab´ıdnuta moˇznost pˇreps´an´ı existuj´ıc´ıho souboru. Posledn´ım dialogem t´eto operace je ten na obr´azku B.16(d), kter´ y zobrazuje pr˚ ubˇeh stahov´an´ı. Po dokonˇcen´ı je moˇzn´e staˇzen´ y soubor otevˇr´ıt prostˇrednictv´ım libovoln´eho spr´avce soubor˚ u. Pˇ rejmenov´ an´ı Pro pˇrejmenov´an´ı slouˇz´ı jednoduch´ y dialog s polem pro vkl´ad´an´ı n´azvu souboru. Pˇrejmenovat je moˇzn´e soubory i sloˇzky. Smaz´ an´ı Pˇred smaz´an´ım souboru nebo sloˇzky je zobrazen dialog vyˇzaduj´ıc´ı potvrzen´ı operace uˇzivatelem. Smaz´an´ı je provedeno pouze po potvrzen´ı dialogov´eho okna vyobrazen´eho na obr´azku B.16(c).
104
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudAndroid
V´ ypoˇ cet kontroln´ıho souˇ ctu V´ ypoˇcet kontroln´ıho souˇctu spust´ı dialog zobrazuj´ıc´ı pr˚ ubˇeh stahov´an´ı souboru. Jedn´a se opˇet o dialog podobn´ y tomu na obr´azku B.16(d). Po staˇzen´ı je vypoˇcten kontroln´ı souˇcet a staˇzen´ y soubor je opˇet smaz´an. Vlastnosti Touto operac´ı je zobrazeno dialogov´e okno s informacemi o vybran´em souboru nebo sloˇzce. Podoba dialogov´eho okna je zachycena na obr´azku B.16(f). Obrazovka nastaven´ı Posledn´ı obrazovkou aplikace je obrazovka nastaven´ı. V t´eto obrazovce jsou tˇri kategorie nastaven´ı. Prvn´ı kategori´ı je nastaven´ı zobrazen´ı, do kter´eho patˇr´ı volby zobrazen´ı smazan´ ych a sd´ılen´ ych soubor˚ u, volba skryt´ı souboru s kontroln´ımi souˇcty a volba zobrazov´an´ı dialogov´ ych oken s chybami. Dalˇs´ı kategorii tvoˇr´ı volby pro stahov´an´ı, kde je jedinou poloˇzkou volba poˇctu vl´aken pro stahov´an´ı. Posledn´ı kategorie se t´ yk´a synchronizace a je zde moˇzn´e zvolit synchronizaˇcn´ı sloˇzku a nastavit selektivn´ı synchronizaci pro jednotliv´e soubory v synchronizaˇcn´ı sloˇzce. Poˇ cet vl´ aken stahov´ an´ı Touto volbou se zobraz´ı dialogov´e okno z obr´azku B.15(c), ve kter´em je moˇzn´e zvolit mezi jedn´ım aˇz pˇeti vl´akny. Doporuˇcen´ ym nastaven´ım jsou v tomto pˇr´ıpadˇe tˇri vl´akna. Synchronizaˇ cn´ı sloˇ zka V zobrazen´em dialogov´em oknˇe zachycen´em na obr´azku B.15(a) je moˇzn´e zvolit si sloˇzku, kter´a bude synchronizov´ana. V tomto dialogu nejsou zobrazov´any soubory obsaˇzen´e ve sloˇzk´ach. Tlaˇc´ıtkem Clear je moˇzn´e vymazat nastaven´ı sloˇzky a zak´azat t´ım moˇznost synchronizace. Selektivn´ı synchronizace Tato volba je dostupn´a pouze v pˇr´ıpadˇe zvolen´e synchronizaˇcn´ı sloˇzky. Po stisku t´eto volby se zobraz´ı dialogov´e okno zobrazen´ı v obr´azku B.15(b). Ve spodn´ı ˇca´sti okna je moˇzn´e proch´azet adres´aˇrovou strukturu, zat´ımco v horn´ı ˇca´sti je moˇzn´e pro jednotliv´e soubory zvolit u ´loˇziˇstˇe, na kter´a budou synchronizov´any. U kaˇzd´eho souboru ve spodn´ı ˇca´sti dialogu je pak zobrazen v´ yˇcet u ´loˇziˇst’, na kter´a bude soubor synchronizov´an.
105
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudAndroid
(a) Uˇzivatelsk´e u ´ˇcty.
(b) Prohl´ıˇzen´ı soubor˚ u.
(c) Nastaven´ı.
Obr´azek B.14: Obrazovky mobiln´ı aplikace.
(a) Volba sloˇzky.
synchronizaˇcn´ı (b) V´ ybˇer selektivn´ı synchronizace.
(c) Volba poˇctu vl´aken.
Obr´azek B.15: Dialogy nastaven´ı aplikace.
106
Pˇr´ıloha
Uˇzivatelsk´a pˇr´ıruˇcka - MultiCloudAndroid
(a) Vytvoˇren´ı u ´ˇctu.
(b) Informace o u ´ˇctu.
(c) Smaz´an´ı poloˇzky.
(d) Pr˚ ubˇeh stahov´ an´ı.
(e) Vytvoˇren´ı sloˇzky.
(f) Vlastnosti boru.
(g) Pr˚ ubˇeh synchronizace.
(h) V´ ysledek synchronizace.
(i) Nahr´an´ı souboru.
Obr´azek B.16: Dialogy mobiln´ı aplikace. 107
sou-
Pˇ r´ıloha C C.1
Obsah CD
Pˇriloˇzen´e m´edium obsahuje tento dokument a realizovan´e programy. Adres´aˇrov´a struktura je n´asleduj´ıc´ı: • dokument – sloˇzka s t´ımto dokumentem ve form´atu .pdf • program – sloˇzka obsahuj´ıc´ı realizovan´e programy – MultiCloud – sloˇzka s kompletn´ımi soubory implementovan´e knihovny, vˇcetnˇe zdrojov´ ych soubor˚ u, bin´arn´ıch v´ ystup˚ u a JavaDoc dokumentace. – MultiCloudAndroid – sloˇzka s kompletn´ımi soubory implementovan´e mobiln´ı aplikace, vˇcetnˇe zdrojov´ ych soubor˚ u, bin´arn´ıch v´ ystup˚ u a JavaDoc dokumentace. – MultiCloudDesktop – sloˇzka s kompletn´ımi soubory implementovan´e desktopov´e aplikace, vˇcetnˇe zdrojov´ ych soubor˚ u, bin´arn´ıch v´ ystup˚ u a JavaDoc dokumentace. – PHP – sloˇzka obsahuj´ıc´ı PHP skript pro automatickou autorizaci s vyuˇzit´ım webov´e sluˇzby.
108