MASARYKOVA UNIVERZITA V BRNĚ FAKULTA INFORMATIKY
Evidence filmových nahrávek
Bakalářská práce
Richard Karmazín 2005
Prohlášení Prohlašuji, že tato práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj.
Brno, 2005
___________________ Richard Karmazín
i
Shrnutí Tato bakalářská práce se zabývá problémem uchovávání a správy informací týkajících se filmů distribuovaných na standardních nosičích (DVD, CD, VHS). Součástí práce je i praktická realizace programu vytvořeného v programovacím jazyce Java. Tento program svému uživateli umožňuje evidenci jeho nahrávek, získávání informací o filmových nahrávkách z Internetu a tisk obalů standardních nosičů. Klíčová slova: evidence filmových nahrávek, Java, XML, DVD, obaly
ii
Obsah 1 2 3 4 5
Úvod................................................................................................................................................ 1 Datový model.................................................................................................................................. 2 Vývojové prostředí.......................................................................................................................... 5 Uživatelské rozhraní aplikace ......................................................................................................... 6 Ukládání.......................................................................................................................................... 9 5.1 Ukládání dat ............................................................................................................................. 9 5.2 Zálohování................................................................................................................................ 9 5.3 Nastavení ................................................................................................................................ 10 6 Možnosti rozšíření ........................................................................................................................ 11 6.1 WWW Moduly ....................................................................................................................... 11 6.2 Moduly pro tisk ...................................................................................................................... 12 6.3 Lokalizace aplikace ................................................................................................................ 13 7 Sdílené komponenty...................................................................................................................... 15 7.1 CenterableDialog.................................................................................................................... 15 7.2 KTable .................................................................................................................................... 15 7.3 FilterListDialog ...................................................................................................................... 15 7.4 BindPanel ............................................................................................................................... 16 7.5 XMLElement.......................................................................................................................... 17 7.6 Launcher................................................................................................................................. 18 8 Závěr ............................................................................................................................................. 19 Literatura .......................................................................................................................................... 20 Přílohy .............................................................................................................................................. 21 Spuštění aplikace .......................................................................................................................... 21 Obsah kompaktního disku............................................................................................................. 21
Seznam obrázků a tabulek Obr. 1: Datový model......................................................................................................................... 4 Obr. 2: Hlavní okno aplikace ............................................................................................................. 7 Obr. 3: Ukázka výstupu modulu pro tisk DVD obalů ...................................................................... 14 Obr. 4: Příklad instance třídy FilterListDialog................................................................................. 15 Obr. 5: Příklad použití třídy BindPanel............................................................................................ 16 Tabulka 1: Význam položky standardisedName ............................................................................... 3
iii
Úvod
1 Úvod Cílem této práce je analýza a návrh aplikace umožňující evidenci informací o filmových nahrávkách. Tato aplikace se jmenuje Movietheque. Aplikací zabývajících se evidencí filmových nahrávek je spousta, existují jak nekomerční (Ant Movie Catalog, MeD's Movie Manager), tak i komerční (eXtreme Movie Manager, Collectorz.com Movie Collector). Všechny jsou si v poskytovaných vlastnostech velice podobné, umožňují synchronizaci informací o filmech pomocí Internetu, umožňují tisk obalů a sestav. Žádná z těchto aplikací bohužel neposkytuje možnost spravovat více filmů na jednom médiu. Program Movietheque je navržen tak, aby umožňoval: • Ukládat právě takové informace, které splňují alespoň jedno z následujících kritérií: o Informace by měla být na obalu média. o Informace může být použita pro vyhledávání, řazení, nebo filtrování. • Nabídnout co nejvíce možností u řazení, filtrování, tisku a synchronizace. • Zůstat pro uživatele co nejjednodušší. Hlavní vlastnosti aplikace Movietheque: • Relace M:N Relaci mezi médii a filmy reprezentuje vztah M:N, tzn. aplikace umožňuje správu více filmů na jednom médiu, a naopak jednoho filmu na více médiích (v různých jazycích, kvalitách). • Zásuvné moduly Vývoj zásuvných modulů je možný bez rekompilace aplikace. Pro Movietheque je možný jednoduchý vývoj následujících dvou typů zásuvných modulů: o WWW Moduly Podpora pro tento typ modulů je primárně určená k získávání informací o filmech. Podpora je navržena dostatečně volně, umožňuje získávání informací nejenom z Internetu, ale i z jiných zdrojů. o Tiskové Moduly Rozhraní pro tiskové moduly je navrženo zejména pro tisk obalů. I toto rozhraní poskytuje dostatečnou flexibilitu (tisk sestav). • Jazyková nezávislost Aplikaci je možné snadno přeložit do dalších jazyků. • Zálohování Aplikace automaticky zálohuje data, aby co nejvíce předcházela jejich ztrátě. • Srozumitelnost zdrojových kódů Při implementaci byl brán ohled na srozumitelnost zdrojových kódů pro ostatní vývojáře, proto jsou zdrojové kódy napsané kompletně v angličtině (názvy proměnných, komentáře, datový model). • Volný zdrojový kód Movietheque je uvolněna i se zdrojovými kódy pod licencí GPL.
1
Datový model
2 Datový model Datový model obsahuje 3 hlavní entitní množiny: Média (Medium), Filmy (Track) a Nahrávky (Instance). Kompletní datový model je zobrazen na obr. 1. Entitní množina Medium Prvkem entitní množiny Medium je každé médium přítomné v databázi médií. O každém médiu se ukládají informace jako: typ média, datum vytvoření, výrobce, ... Entitní množina Track Tato entitní množina obsahuje seznam filmů. Každý film obsahuje informace o názvu, originálním názvu, délce, roku výroby, žánrech, ... Entitní množina Instance Entitní množina Instance obsahuje informace o nahrávkách jednotlivých filmů na jednotlivých nosičích. U každé nahrávky je mimo jiné uchován poměr stran a formát, ve kterém je nahrávka pořízena. Entitní množina Manufacturer Prvky entitní množiny Manufacturer reprezentují výrobce médií. Entitní množina Type Entitní množina Type obsahuje používané typy médií, např.: CD, DVD, VHS. Entitní množina Quality Prvky této entitní množiny reprezentují možné kvality nahrávek. Entitní množina Format Tato entitní množina obsahuje reprezentace formátů nahrávek, například: DivX, DVD-Video. Entitní množina Ratio Prvkem entitní množiny Ratio je každý poměr stran, ve kterém mohou být zhotoveny nahrávky (16/9, 4/3). Entitní množina Language Entitní množina Language obsahuje reprezentace jazyků použitelných ve filmech. Entitní množina Person Prvky entitní množiny Person reprezentují osoby podílející se na výrobě filmů (herci, režiséři). Entitní množina Country Tato entitní množina obsahuje státy, ve kterých mohou být vyrobeny filmy (ČR, USA). Entitní množina Rate Prvkem této entitní množiny jsou možné přístupnosti filmů, například PG-13.
2
Datový model Entitní množina Genre Entitní množina Genre obsahuje reprezentace žánrů filmů. Základní vlastnosti datového modelu Jedno médium může obsahovat žádný, jeden, nebo více filmů. Jeden film může být na žádném, jednom, nebo na více médiích. Každá entitní množina obsahuje speciální nultý prvek, který je prezentován jako prázdný. Vybráním tohoto prvku uživatel sděluje, že daný atribut je neznámý. Každá nahrávka může být v nula (němý film), nebo ve více jazycích. V jednom filmu může být nula (animovaný film), nebo více herců. Položka standardisedName Každá entitní množina obsahuje kromě položky name (jméno) také položku standardisedName (standardizované jméno). Tato položka obsahuje univerzální název společný pro všechny jazykové mutace, což umožní zásuvným modulům nezávislost na jazykovém prostředí. Toto dovoluje, aby si do pole name uživatel uložil libovolný text; důležité je, aby bylo správně nastaveno pole standardisedName.
Entita Medium
name Filmy5 Červený Track trpaslík Instance - nevyužito Verbatim Manufacturer Corporation Type DVD Quality Perfektní Format DivX 3.11 Ratio 16:9 Language Čeština
standardisedName Popis - nevyužito -
Person
zdenek sverak
Country Rate Genre
Zdeněk Svěrák
Red Dwarf
Originální název filmu
- nevyužito verbatim
Zkrácené jméno
dvd A divx 16:9 cs
Zkrácené jméno Známka A-F (včetně B-, …) Zkrácené jméno Zkrácené jméno 2-písmenná zkratka jazyku podle ISO 639 Jméno malými písmeny bez háčků a čárek (kvůli některým zahr. webům, např. IMDB.com)
Spojené státy usa 3-písmenná zkratka státu podle ISO 3166 americké PG-13 pg-13 Zkratka podle MPAA Komedie Comedy Anglický název žánru Tabulka 1: Význam položky standardisedName
3
Datový model
Obr. 1: Datový model 4
Vývojové prostředí
3 Vývojové prostředí Dnes je pro vývoj aplikací dostupná řada programovacích prostředí. Volba byla prováděna mezi těmi nejpoužívanějšími. Hlavní prioritou bylo, aby aplikace Movietheque fungovala na operačních systémech Windows. Delphi Tento program vyvinula firma Borland. Aplikace naprogramované v Delphi běží velmi rychle. Pro Delphi existuje obrovské množství přídavných komponent. Navíc je Delphi plně objektově orientované. Bohužel existují pouze verze pro Windows a Linux. Win32 API Toto rozhraní navrhla firma Microsoft přímo na míru pro své operační systémy. Aplikace naprogramované ve Win32 API mají dvě výhody: maximální rychlost a maximální možnosti. Bohužel toto rozhraní není objektově orientované, i proto je programování ve Win32 API poměrně komplikované. Navíc je Win32 API určené pouze pro platformu Windows. Java Programovací jazyk Java vytvořila firma Sun původně pro mobilní zařízení. Základní vlastnost Javy je multiplatformnost, proto existují verze pro Windows, Linux, MacOS atd. Nadto je Java plně objektově orientovaná. Naneštěstí jsou programy v Javě znatelně pomalejší ve srovnání s programy vytvořenými v jazycích závislých na platformě. Navíc je pro spouštění aplikací napsaných v Javě potřeba, aby měl uživatel nainstalovaný tzv. virtuální stroj Javy. .Net Prostředí .Net navrhla firma Microsoft a velmi se podobá Javě. Narozdíl od Javy ale není dosaženo takové multiplatformnosti. Tato platforma se spíš než na podporu alternativních operačních systémů zaměřuje na podporu alternativních programovacích jazyků. Také .Net je čistě objektově orientované. Navíc toto prostředí podporuje hned několik programovacích jazyků (C++, C#, Visual Basic). Dále .Net umožňuje programování webových služeb (ASP.NET). Bohužel i toto prostředí je pomalejší ve srovnání s platformně závislými prostředími a i .Net vyžaduje nainstalovaný virtuální stroj. Shrnutí Movietheque pro svou funkci nevyžaduje nadměrné množství výpočetního výkonu, proto rychlost vývojového prostředí nepatřila mezi priority. Ani to, že uživatel pro funkci programu potřebuje mít nainstalovaný virtuální stroj nepatří mezi závažné nevýhody. Proto je Movietheque hlavně z důvodu multiplatformnosti naprogramovaná v Javě. Při vývoji programu byl použit program Eclipse. Eclipse podporuje téměř všechny běžné vlastnosti a nadto nabízí řadu funkcí, které nenabízejí ani takové aplikace jako Visual Studio. Navíc je aplikace Eclipse i se zdrojovými kódy volně šiřitelná a není závislá na platformě.
5
Uživatelské rozhraní aplikace
4 Uživatelské rozhraní aplikace Aplikace se vizuálně skládá z jednoho hlavního a několika dalších méně významných oken. Při návrhu byla upřednostněna kompaktnost před standardizovaným rozhraním, proto se aplikace může zdát lehce nepřehledná. Z tohoto důvodu je zde uveden stručný popis hlavního okna (viz obr. 2). Popis běžné práce s Movietheque: Editace médií Pomocí seznamu 1 si uživatel může vybírat aktuálně editované médium. Informace o právě vybraném médiu se zobrazí v panelu 3. Uživatel může změnit uspořádání médií stisknutím jednoho z tlačítek určených pro řazení médií (např. 6). Editace filmů Analogické funkce jako u médií jsou nabízeny i pro filmy. Zde uživatel vybere film ze seznamu 2, informace o tomto filmu může prohlížet a editovat v panelu 4. Navíc může uživatel změnit řazení filmů stiskem tlačítka s vybraným kritériem pro řazení (např. 7 pro řazení dle názvů filmů). Editace nahrávek Podle toho, zda se aktuálně vybraný film nachází na aktuálně vybraném médiu, se v oblasti ohraničené rámečkem 5 zobrazí buď tlačítko pro vytvoření nové nahrávky vybraného filmu na vybraném médiu, nebo v případě, že tato nahrávka již existuje, se zde zobrazí informace o dané nahrávce s možností její editace. Filtrování médií a filmů Jak filmy, tak média je možné filtrovat podle různých kritérií. Pro editaci aktuálního filtru slouží tlačítka 8 a 9. Pokud je některé z těchto tlačítek stisknuté, pak odpovídající panel (3 nebo 4) neslouží pro zobrazování informací o aktuálně vybraném médiu/filmu, ale pro určení filtru, pomocí kterého budou média/filmy filtrovány. Použití filtru se provede opětovným klepnutím na tlačítko pro filtrování (8 popř. 9). Synchronizace informací o filmu Pro synchronizaci informací o filmu stačí vyplnit potřebné informace (dle požadavků zásuvného modulu, např. jméno filmu) a stisknout tlačítko Synchronizovat. Nakonec je třeba vybrat, který modul se má použít pro synchronizaci. Tisk obalů pro média Pro tisk obalů je třeba nejdříve vybrat média, pro která se mají obaly tisknout. To se provede pomocí tlačítek O(d)značit, Invertovat a Odznačit všechny. Jakmile jsou potřebná média vybrána, stačí zvolit modul, který se má pro tisk použít (např. CD Cover), a stisknout tlačítko Tisk. Přiřazení herce k filmu Přidání herce k filmu není nijak komplikované. Stačí pod seznamem herců na panelu 4 stisknout tlačítko Přidat, poté ze zobrazeného seznamu vybrat daného herce a klepnout na tlačítko Ok. V dialogu pro výběr herce můžeme využít dolního editačního pole pro filtrování.
6
Uživatelské rozhraní aplikace
Obr. 2: Hlavní okno aplikace 7
Uživatelské rozhraní aplikace Popis hlavního okna aplikace (viz obr 2): 1 Tento seznam se používá pro: a. Vypsání všech médií. b. Vypsání médií, které prošly filtrem (pokud je aktivováno filtrování médií). 2 Tento seznam se používá pro: a. Vypsání všech filmů. b. Vypsání filmů, které prošly filtrem (když je aktivováno filtrování filmů). 3 Tento panel umožňuje: a. Editaci média aktuálně vybraného v seznamu médií (viz 1). b. Editaci filtru médií, v případě že je zapnutý mod editace filtru (viz 8). 4 Tento panel umožňuje: a. Editaci filmu aktuálně vybraného v seznamu filmů (viz 2). b. Editaci filtru filmů (jestliže je zapnutý mod editace filtru (viz 9)). 5 Podle toho, zda je film, vybraný v seznamu 2, přítomný na médiu, vybraném v seznamu 1, se zde zobrazí: a. Panel umožňující editaci informací o nahrávce vybraného filmu na vybraném médiu. b. Tlačítko umožňující vytvoření nové nahrávky vybraného filmu na vybraném médiu. 6 Jestliže je aktivováno toto tlačítko, pak jsou média seřazena dle názvu. I ostatní popisky jako Výrobce nebo Poznámka jsou ve skutečnosti tlačítky sloužícími pro řazení. 7 Toto je jedno z tlačítek, které umožňuje řazení filmů. V případě že je aktivováno toto tlačítko, jsou filmy seřazeny podle názvu. Podobně jako u médií, i zde ostatní popisky (Stát, Délka, ...) ve skutečnosti fungují jako tlačítka umožňující řazení. 8 Pomocí tohoto tlačítka se přepíná, zda panel pro editaci médií (viz 3) umožňuje editaci média vybraného v seznamu médií (viz 1), nebo editaci filtru médií. V případě, že je nějaký filtr aplikován, má toto tlačítko obarvené pozadí. 9 Analogicky jako tlačítko 8 slouží toto tlačítko pro přepínaní mezi editací filtru, seznamu filmů a editací aktuálně vybraného filmu.
8
Ukládání
5 Ukládání Pro implementaci ukládání dat existují tři nejpoužívanější alternativy: využití databází, zapisování do XML souborů a ukládání do binárních souborů. RDBS (Databáze) Mezi hlavní výhody využití databází patří jednoznačně zjednodušení implementace. Není třeba ručně spravovat indexy, vytvářet transakce, ani není potřeba se zabývat integritou dat. Bohužel je nezbytné, aby měl uživatel nainstalovaný databázový server. XML Jazyk XML je založený na jazyku SGML a je podobný jazyku HTML. Nejvýznamnější výhodou XML je jednoduché zpracování ostatními aplikacemi. Oproti binárním souborům mají XML soubory nevýhodu poněkud větší velikosti. Navíc je XML mírně náročnější na implementaci než binární soubory. Binární soubory Mezi nejvýznamnější výhody binárních souborů patří jednoduchost implementace a rychlost zpracování. Mezi nevýhody patří nepřehlednost a obtížná použitelnost v ostatních aplikacích. Shrnutí S ohledem na rozšiřitelnost byl nakonec zvolen formát XML. Jeden XML soubor obsahuje jednu entitní množinu (jeden soubor pro média, další soubor pro filmy, ...). Všechny tyto soubory jsou poté zkomprimovány do ZIP souboru. Toto umožní, aby každé uložení bylo v jednom souboru, a také zajistí znatelnou úsporu místa.
5.1 Ukládání dat Standardní ukládání dat se provádí do podadresáře data v adresáři s aplikací. Názvy souborů jsou zvoleny tak, aby obsahovaly datum, hodinu a pořadí, ve kterém bylo uložení vytvořeno. Movietheque automaticky ukládá data každých 5 minut a při ukončení programu. Aplikace uchovává 10 nejnovějších uložení, ostatní maže. Kromě práce s hlavními daty má uživatel možnost dočasně načíst i jiné uložení. V tomto případě se veškeré ukládání provádí pouze do souboru zadaného uživatelem; adresář data není modifikován, stejně tak nejsou prováděny zálohy. Pro trvalé načtení dat je připraven příkaz Import v nabídce Soubor.
5.2 Zálohování U aplikace tohoto typu je zálohování velice důležitá vlastnost, proto je zde nastíněn způsob, jakým je zálohování implementováno. Zálohy jsou ve stejném formátu jako uložení, z toho vyplývá, že načtení zálohy je velice jednoduché.
9
Ukládání Zálohování funguje podle následujících pravidel: • Aplikace uchovává jedno uložení za každou hodinu, ve které byla spuštěna za posledních 24 hodin. • Aplikace uchovává jedno uložení za každý den, ve kterém byla spuštěna za posledních 31 dní. • Aplikace uchovává jedno uložení za každý měsíc, ve kterém byla spuštěna za posledních 12 měsíců. • Aplikace uchovává jedno uložení za každý rok, ve kterém byla spuštěna. • Aplikace automaticky odstraňuje všechny zastaralé soubory, nesplňující kritéria popsaná výše. Uložení spravující okolo 100 medií a 250 filmů s odpovídající velikostí ostatních entitních množin zabírá okolo 50 KB, takže maximální velikost celé zálohy (67 souborů + jeden soubor za rok) by neměla být nad 10 MB.
5.3 Nastavení Veškeré nastavení aplikace je uloženo v souboru settings.xml v adresáři s aplikací. Příklad souboru settings.xml: <Settings SystemLook="true" Version="1.0.0.0" Language="default"> <WindowBounds State="0" Width="1000" Height="680" Y="3" X="14">
./Data ./Backup ./Garbage ./Plugins Popis značek: • SystemLook: Určuje, zda má aplikace použít zobrazení implicitní pro aktuální operační systém, nebo univerzální zobrazení Javy. • Version: Určuje verzi tohoto souboru s nastavením. • Language: Obsahuje zkratku jazyka (dle ISO 639), ve kterém má aplikace komunikovat s uživatelem. Pokud je tato položka nastavena na default, pak aplikace použije standardní jazyk podle nastavení operačního systému (pokud program tento jazyk obsahuje). • WindowBounds: Uchovává poslední stav a pozici hlavního okna aplikace. • DataPath: Určuje adresář, do kterého se provádí standardní ukládání. • BackupPath: Určuje adresář, do kterého se provádí zálohování. • GarbagePath: Aplikace používá adresář zadaný pomocí této položky jako koš. Ukládá do něj soubory, které se např. nepodařilo načíst nebo u nich hrozilo poškození. Aplikace už dále s tímto adresářem nepracuje. Tento adresář je zde pouze pro uživatele, aby mu umožnil záchranu dat. • PluginPath: Určuje adresář, ve kterém aplikace vyhledává přídavné zásuvné moduly. 10
Možnosti rozšíření
6 Možnosti rozšíření Pro vyvinutí zásuvného modulu není třeba znovu kompilovat aplikaci. Movietheque umožňuje jednoduchý vývoj dvou typů zásuvných modulů (www moduly a moduly pro tisk). Implementace zásuvných modulů je následující: zásuvný modul je třída v jazyce Java. Tato třída musí být zděděná od třídy poskytnuté v rozhraní pro vývoj modulů a musí také definovat jednu abstraktní metodu z této třídy. Toto řešení poskytuje programátorovi maximální volnost. Přeložený kód třídy je třeba zkomprimovat do souboru JAR a ten pak umístit do adresáře Plugins v adresáři s aplikací.
6.1 WWW Moduly Pro korektní implementaci tohoto typu modulu je potřeba pouze vytvořit třídu pojmenovanou cz.muni.fi.xkarmaz.movietheque.plugin.www.WWWPlugin, která dědí od poskytnuté třídy nazvané cz.muni.fi.xkarmaz.movietheque.plugin.www.AbstractWWWPlugin. Vytvořená třída musí definovat metodu update, tato metoda dostane jako parametr mimo jiné film, který je třeba upravit. Upravený film by měl být předaný jako návratová hodnota funkce. Ukázka třídy WWW modulu: package cz.muni.fi.xkarmaz.movietheque.plugin.www; import cz.muni.fi.xkarmaz.movietheque.plugin.PTrack; public class WWWPlugin extends AbstractWWWPlugin { public PTrack update(java.awt.Frame parent, PTrack track) { track.note += "Upravil testovaci plugin"; return track; } } Přiložené moduly K aplikaci jsou standardně dodávány dva WWW moduly, jeden pro načtení informací z http://www.imdb.com/ a druhý pro získávání informací z http://www.csfd.cz/. Popis funkce modulů Oba dodávané WWW moduly využívají principu syntaktické analýzy www stránek. Nejdřív z webového serveru načtou určenou stránku, kterou pak pomocí regulárních výrazů analyzují a získávají z ní potřebná data. Modul pro http://www.imdb.com/: Tento modul umí vyhledávat filmy podle jména. Podporuje také přímé zadání www stránky s podrobnostmi o filmu. Popis funkce modulu: Modul po své aktivaci nejdříve zkontroluje, zda pole WWW u předaného filmu neobsahuje adresu stránky na serveru http://imdb.com/. Pokud ano, pak provede synchronizaci z této stránky 11
Možnosti rozšíření způsobem popsaným níže. V opačném případě modul pošle na www server vyhledávací dotaz se jménem filmu podle položky Originální jméno. V případě, že je tato položka prázdná, tak použije hodnotu pole Jméno. Jakmile modul zpracuje výsledky vyhledávacího dotazu, zobrazí uživateli seznam nalezených filmů. Poté, kdy uživatel některý film vybere, pošle modul URL adresu stránky s vybraným filmem pro další zpracování. Jakmile modul získá URL adresu stránky s informacemi o filmu, vyžádá si tuto stránku od www serveru. Po získání stránky následuje její zpracování. Získané informace o filmu modul vrátí aplikaci. Modul pro http://www.csfd.cz/: Tento modul byl vyvinutý pouze pro získání (a vyhledání podle) názvu filmu přeloženého do češtiny. Popis funkce modulu: Modul po svém spuštění zkontroluje, zda pole WWW předaného filmu neobsahuje adresu stránky na serveru http://csfd.cz/. V případě, že neobsahuje, pokusí se tuto stránku vyhledat pomocí jména zadaného v poli Jméno předaného filmu analogicky jako předchozí modul. Jakmile modul získá náležitou adresu, vyžádá si příslušnou stránku od www serveru. Poté získanou stránku analyzuje a získá z ní pouze dvě informace: český název filmu a stránku s popisem filmu na serveru http://imdb.com/. Získaný název filmu uloží do pole Jméno a poté provede synchronizaci ostatních informací ze získané adresy na serveru http://imdb.com/.
6.2 Moduly pro tisk Podobně jako u WWW modulů je zde pro implementování modulu pro tisk potřeba vytvořit třídu cz.muni.fi.xkarmaz.movietheque.plugin.print.PrintPlugin, která dědí od poskytnuté třídy cz.muni.fi.xkarmaz.movietheque.plugin.print.AbstractPrintPlugin. Vytvořená třída musí definovat metodu print. Tato metoda dostane jako parametr mimo jiné média, která uživatel vybral pro tisk. Ukázka třídy tiskového modulu: package cz.muni.fi.xkarmaz.movietheque.plugin.print; public class PrintPlugin extends AbstractPrintPlugin { public void print(java.awt.Frame parent, ArrayList
mediums) { // Tady by mel plugin tisknout predana media } } Přiložené moduly K aplikaci jsou standardně přidány následující moduly: • Modul pro tisk DVD obalů. • Modul pro tisk CD obalů. • Modul pro tisk VHS obalů. Tyto moduly jsou založeny na stejném jádře, proto je zde pouze popis modulu pro tisk DVD obalů, moduly pro tisk CD a VHS obalů pracují analogicky. 12
Možnosti rozšíření Modul pro tisk DVD obalů umožňuje tisk obalů s jedním, popřípadě dvěma DVD nosiči. DVD nosič může obsahovat od jednoho do šesti filmů. Modul volí různý vzhled obalu, podle toho, zda DVD nosič obsahuje jeden nebo více filmů. Zmenšený příklad výstupu tohoto modulu pro obal obsahující informace o dvou DVD nosičích je zobrazen na obr. 3. První médium, které je na obrázku vpravo, obsahuje pouze jeden film (Superman), proto je popis nahrávky zobrazen na celé straně DVD obalu. Druhé médium obsahuje šest filmů. Vzdálenost mezi tabulkami se určuje dynamicky podle počtu filmů.
6.3 Lokalizace aplikace Aplikaci je velice jednoduché přeložit do dalších jazyků. Postačuje vytvoření souboru pojmenovaného movietheque_XX.properties v adresáři res/languages, kde XX je kód jazyka (dle ISO 639) do kterého soubor aplikaci překládá. Při vytváření souborů může být problém s diakritikou, v JDK (J2SE Development Kit) však existuje utilita native2ascii, která tento problém řeší. Ukázka souboru movietheque_en.properties: Global.0=Loading of settings failed. Global.1=Sorry bad version of data settings file Global.2=Sorry loading of settings failed. Global.3=Saving of settings failed. Global.4=Settings file not found
13
Možnosti rozšíření
Obr. 3: Ukázka výstupu modulu pro tisk DVD obalů 14
Sdílené komponenty
7 Sdílené komponenty Standardní třídy v Javě jsou navrženy velice univerzálně, avšak bez konkrétnějších (efektivněji využitelných) tříd. Proto bylo potřeba některé z těchto tříd naprogramovat.
7.1 CenterableDialog Tato třída dědí od třídy JDialog. Jediná metoda, kterou implementuje, je showCentered. Tato metoda zobrazí dialog uprostřed rodičovského rámce (což standardní implementace třídy JDialog neumí).
7.2 KTable Tato třída poskytuje podobné funkce jako JTable, ovšem je o něco jednodušší pro použití. Některé výhody: • Umí automaticky zobrazit posuvníky. • Jednoduše použitelná jako seznam položek (ListBox). K třídě KTable dále existují další třídy s dalšími funkcemi: • KFilterTableModel – umožňuje filtrování. • KSelectableTableModel – umožňuje další úroveň označování položek (např. označování médií pro tisk v aplikaci).
7.3 FilterListDialog Tato třída implementuje dialogové okno pro výběr jedné z několika položek. Obsažený seznam je implementovaný pomocí třídy KTable. Dolní editační pole umožňuje filtrování seznamu a eventuelně vytvoření nové položky.
Obr. 4: Příklad instance třídy FilterListDialog 15
Sdílené komponenty 7.4 BindPanel BindPanel je třída odvozená od třídy JPanel a není určena pro přímé použití. BindPanel je určen pro propojení informací, zadaných v panelu, s atributy instance jiné třídy. Třída která dědí od třídy BindPanel musí implementovat následující dvě metody: Metoda void setBind(T object) Tato metoda musí zapsat předaný objekt do panelu (např. upravit text v editačních polích). Příklad metody: public void setBind(Track track) { nameText.setText(track.name); originalNameText.setText(track.standardisedName); } Metoda void getBind(T object) Tato metoda musí načíst objekt z panelu (např. z editačního políčka, tak jak ho upravil uživatel). Příklad metody: public void getBind(Track track) { track.name = nameText.getText(); track.standardisedName = originalNameText.getText(); }
Obr. 5: Příklad použití třídy BindPanel
16
Sdílené komponenty 7.5 XMLElement Nedostatkem Javy je, že nepodporuje metodu pro zpracovávání XML souborů, nazvanou Xml Pull. Existuje však projekt XmlPull (http://www.xmlpull.org/), který tuto metodu implementuje. Třída XMLElement tohoto projektu využívá, a tak dále zjednodušuje zpracovávání XML souborů. Třída XMLElement umožňuje zapouzdřovat libovolný element v XML, např.: Seznam nejdůležitějších vlastností a metod třídy XMLElement: Vlastnost ArrayList<XMLElement> elements; Seznam podelementů v aktuálním elementu (v předchozím příkladu: Name, StandardisedName, IDLong, ...) Vlastnost String text; Text mezi počáteční a koncovou značkou (tagem) elementu. Vlastnost String name; Název aktuálního elementu (v předchozím příkladu: Track). Metoda XMLElement getElement(String name) Tato metoda vrátí první podelement, jehož název se shoduje s řetězcem zadaným jako parametr. Metoda void addElement(XMLElement element) Přidá do aktuálního elementu podelement zadaný jako parametr. Metoda void serialize(XmlSerializer serializer) Vygeneruje XML kód odpovídající zapouzdřenému elementu. Konstruktor XMLElement(XmlPullParser parser) Tento konstruktor načte z XML kódu následující element a zapouzdří jej v nově vytvořeném objektu. 17
Sdílené komponenty 7.6 Launcher Aplikace, která je předmětem této práce, je přeložena v Javě verze 5. Java obsahuje jeden nedostatek: při spuštění aplikace na nějakém starším virtuálním stroji bez podpory Javy 5 virtuální stroj vrátí místo zprávy o nekompatibilitě verzí jednu ze zavádějících zpráv, jako např. „Main class not found“. Proto byla vytvořena spouštěcí třída zkompilovaná s podporou pro starší Javu. Tato třída zkontroluje, zda aktuálně nainstalovaný virtuální stroj splňuje minimální požadavky. Poté buď spustí samotnou aplikaci, nebo napíše odpovídající chybovou zprávu. Tato třída je napsána univerzálně, proto je snadno použitelná i do jiných programů. Některé důležité vlastnosti třídy Launcher: Vlastnost String mainClass; Řetězec s názvem třídy, kterou má Launcher spustit, pokud virtuální stroj splňuje minimální požadavky. Vlastnost String requiredJavaVersion; Minimální verze virtuálního stroje (např. 1.5). Vlastnost String buildJavaVersion Verze Javy, kterou je zkompilován daný program. Program sice může fungovat na starších virtuálních strojích, přesto je doporučeno nainstalovat nejnovější verzi (např. 1.5.0_03).
18
Závěr
8 Závěr Cílem této práce bylo vytvořit program umožňující správu informací o datových nosičích obsahujících filmové nahrávky. Hlavní výhodou aplikace je možnost správy více filmů na jednom médiu. Mezi další výhody patří možnost synchronizace informací o filmech pomocí Internetu a možnost tisku obalů. Obojí pomocí zásuvných modulů. Navíc je možno aplikaci překládat do jiných jazyků. V neposlední řadě je výhodou, že jak program, tak zdrojové kódy jsou volně šiřitelné. Pro program Movietheque byly nad rámec zadání této práce vytvořeny internetové stránky, které jsou dostupné na adrese http://movietheque.sourceforge.net/; stránky nabízejí kromě stáhnutí aplikace i základní nápovědu. Do budoucna je počítáno s údržbou aplikace a průběžnou úpravou www modulů v případě, že se změní formát vracených www stránek.
19
Literatura
Literatura [1]
Spell, Brett. Java : programujeme profesionálně. Computer Press, 2002.
[2]
Young, Michael J. XML krok za krokem. Mobil Media, 2002.
[3]
Nápověda pro Javu – http://java.sun.com/j2se/1.5.0/docs/api/index.html
[4]
Server Builder.cz – http://builder.cz/
[5]
Projekt XML Pull – http://xmlpull.org/
[6]
Databáze IMDB.com – http://imdb.com/
[7]
Projekt CSFD.cz – http://csfd.cz/
[8]
Program Eclipse – http://www.eclipse.org/
20
Přílohy
Přílohy Spuštění aplikace Aplikace Movietheque je přítomna na přiloženém CD i se zdrojovými kódy. Pro spuštění aplikace je potřeba zkopírovat adresář movietheque z CD na pevný disk a spustit soubor Movietheque.bat (platí pro platformu Windows). Aplikace vyžaduje nainstalovaný virtuální stroj jazyka Java, ten je taktéž přiložen na CD v adresáři tools (pro platformy Windows a Linux). Součástí adresáře movietheque jsou mimo jiné i ukázková data, která jsou umístěna v adresáři SampleData. Aplikace tyto data umožňuje načíst přes volbu Soubor>Otevřít soubor ....
Obsah kompaktního disku Struktura přiloženého kompaktního disku: • Adresář tools obsahuje programy užitečné pro spuštění a úpravu aplikace. • Adresář movietheque obsahuje samotnou aplikaci. • Soubor Movietheque-1.1.0.2.zip obsahuje nejnovější verzi aplikace, obsah archivu odpovídá adresáři movietheque. • Soubory bp.doc a bp.pdf obsahují text bakalářské práce.
21