Author: DavidK Date: 2010-03-01 04:20:18 +0100 (Mon, 01 Mar 2010) New Revision: 1965 Modified: others/dokumentace/technicalGuide/architecture/4webapp.tex others/dokumentace/technicalGuide/architecture/7communication.tex others/dokumentace/technicalGuide/architecture/9z10appendix.tex Log: architecture updated Modified: others/dokumentace/technicalGuide/architecture/4webapp.tex =================================================================== --- others/dokumentace/technicalGuide/architecture/4webapp.tex 2010-02-28 23:44:52 UTC (rev 1964) +++ others/dokumentace/technicalGuide/architecture/4webapp.tex 2010-03-01 03:20:18 UTC (rev 1965) @@ -9,7 +9,9 @@ %%%%%%%%%%%%%%%%%%%%%%%%%% \section{Architektura webové části} -Webová část řešení sestává ze 2 hlavních projektů, které obsahují, či využívají další části.\textit{Obrázek \ref{webapp_img_components}} ukazuje vztah projektů vyvíjených v rámci řešení Elvys. +Webová část řešení sestává ze 2 hlavních modulů a jednoho modulu obsahujícího sdílený kód aplikační logiky, +modulu obsahujícího aplikaci pro návrh rozvržení a pomocných utilit.\textit{Obrázek \ref{webapp_img_components}} +zachycuje vztah těchto modulů. \begin{figure} \label{webapp_img_components} @@ -18,81 +20,107 @@ \end{center} \caption{Schéma projektů řešení Elvys} \end{figure} - - \subsection{Projekt webServer2}\label{webapp_architecture_webServer2} + + + \subsection{Modul webServer2}\label{webapp_architecture_webServer2} WebServer2 je stěžejní částí webové strany řešení. Je to webová aplikace umožňující uživatelům provádět veškeré činnosti spojené s agendou plánování dokumentů, správy společností, uživatelů, zobrazování reportů a všech dalších věcí, které by měl systém Elvys umět podle \textit{dokumentu analýzy}. \\ Ke své práci využívá i - - \subsubsection{rychlost} - Ukládání session\-state na serveru - \subsection{Projekt dispatcher}\label{webapp_architecture_dispatcher} - Tato aplikace umožňuje kioskům získávat od serveru informace o plánování. - \subsubsection{XML, XSD, HTTP, JAXB} - - Tělo většiny zpráv posílaných přes internet je tvořeno XML dokumentem nesoucím určitá data. - Všechny komplexnější XML\footnote{Extensible Markup Language (XML), \url{http://www.w3.org/XML/}} dokumenty (např. jakýkoliv XXXConfig přenášený ze serveru na kiosek) mají - definován formát pomocí jazyka XML Schema\footnote{XML Schema language, \url{http://www.w3.org/XML/Schema}} - - \subparagraph{JAXB} - JAXB generuje \\ - - Při změně XSD souboru je nutné znovu vygenerovat třídy pomocí ANT skriptu [DOPLNIT] - - \subsubsection{Technologie Java Servlet} - K vytváření bodů vzdáleně přístupných přes HTTP protokol je v systému Elvys použita technologie Java Servlet. Tato technologie - umožňuje namapování java třídy implementující určité rozhraní na nějaké URL. Java třída poté na daném URL poslouchá a zpracovává HTTP požadavky.\\ - Pomocí této technologie jsou vytvořeny všechny přístupové body do aplikace \textbf{dispatcher}. + \subsection{Modul dispatcher}\label{webapp_architecture_dispatcher} + Tento modul umožňuje kioskům a modulu LayoutDesigner komunikaci s webovou částí. + - \subsection{Projekt elvysCommons}\label{webapp_architecture_elvysCommons} + \subsection{Modul elvysCommons}\label{webapp_architecture_elvysCommons} V tomto modulu se nachází sdílený kód a sdílené zdroje, které používá jak projekt webServer2, tak projekt dispatcher. - \subsection{Projekt LayoutDesigner}\label{webapp_architecture_LayoutDesigner} + \subsection{Modul LayoutDesigner}\label{webapp_architecture_LayoutDesigner} Jedná se o java applet, grafický editor, který je součástí webové aplikace (konkrétně tedy aplikace webServer2) a umožňuje uživateli navrhovat rozvržení obrazovek pro kiosky. Podobněji se architekturou tohoto editoru zabývá \textit{kapitola \ref{LD} (str. \pageref{LD})}. Komunikaci mezi webovým serverem a editorem LayoutDesigner potom popisuje \textit{kapitola \ref{interface_web_and_LD} (str. \pageref{interface_web_and_LD})}. + \subsection{Podpůrné utility}\label{4webapp_utilities} + Webové rozhaní systému Elvys využívá ke své činnosti také menší jednoúčelové utility vytvořené v rámci projektu. + V této sekci následují informace o těchto utilitách, způsob volání je popsán v \textit{kapitole \ref{interface_web_and_apps}}. + \subsubsection{pageCounter}\label{4webapp_pageCounter} + Utilita sloužící pro rychlé počítání stránek PDF dokumentu. Napsána v jazyce C++/Qt, použita knihovna XpdfRasterizer a běží pouze v Linuxu.\\ + Alternativou k tomuto nástroji je použití java knihovny iText. Použitelnost této knihovny je však omezena velikostí vstupního PDF souboru. Pokud + se jeho velikost vyšplhá nad 50MB, knihovna iText začne spotřebovávat enormní množství paměti a výpočetního výkonu (na spočítání stránek v pdf souboru + velkém 150MB spotřebovala knihovna odhadem přes 500MB paměti). Implementace počítání stránek pomocí knihovny iText je v současné době využita, + avšak použije se pouze v případě selhání metody výpočtu pomocí utility \textbf{pageCounter} a to jenom pokud velikost vstupního pdf je menší než 40MB.\\ + + \subsubsection{videoMeter}\label{4webapp_videoMeter} + Utilita sloužící pro rychlé počítání délky video souborů. Knihovna pro svou práci používá knihovnu Phonon, stejně + jako klientská aplikace. Je tedy zaručeno, že spočítáný údaj bude na server ui na klientovi stejný. + Tato verze utility funguje pouze v prostředí Linuxu, ačkoliv by vzhledem k použití multiplatformní knihovny neměl být + větší problém ji upravit pro OS Windows. + + \subsubsection{textMeter}\label{4webapp_textMeter} + Utilita počítající potřebnou velikost fontu, aby se text mající daný font + vešel "na šířku" do určité pozice. Napsána v jazyce C++. Běží na Linuxu i na Windows.\\ + Utilita \textit{textMeter} v současné době v projektu Elvys není použita, je připravena na možné budoucí využití při + plánování textu. %%%%%%%%%%%%%%%%%%%%%%%%%% %% DB, ORM %%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Databázový model a databáze} +\section{Databáze, datový model, připojení k DB} +Webová část systému elvys používá ke své činnosti služby databázového stroje. Tato kapitola popisuje webovou část projektu +Elvys po stránce dat. \subsection{Databáze} - Při diskuzi, který databázový stroj pro serverovou část řešení Elvys zvolit, rozhodovali se autoři mezi následujícími: + Při diskuzi, který databázový stroj pro serverovou část řešení Elvys zvolit, se autoři rozhodovali mezi následujícími: \begin{itemize} - \item textbf{Oracle Database 10g či 11g} \footnote{Oracle Database 11g, } TODO - \item textbf{Microsoft SQL Server 2008}\footnote{Microsoft SQL Server 2008, \url{http://www.microsoft.com/sqlserver/2008/}} TODO - \item textbf{PostgreSQL}\footnote{PostgreSQL, \url{http://www.postgresql.org/}} TODO - \item textbf{MySQL 5.1, community edition}\footnote{MySQL, \url{http://dev.mysql.com/doc/refman/5.1/en/}} TODO + \item textbf{Oracle Database 10g či 11g} \footnote{Oracle Database 11g, } Databáze Oracle v nejnovější verzi 11g je + špičkou ve svém oboru po stánce výkonu, škálovatelnosti, správy i podpory. Zkušenosti autorů s tímto databázovým + systémem jsou nemalé, avšak žádný z nich nemá praktické zkušenosti s hlubší administrací. Hlavní překážkou použití této + databáze pro projekt byla však licence, která je velmi nákladná a vzhledem k povaze projetku neakceptovatelná. + \item textbf{Microsoft SQL Server 2008}\footnote{Microsoft SQL Server 2008, \url{http://www.microsoft.com/sqlserver/2008/}} + Databáze \textit{Microsoft SQL Server 2008} má velmi podobné klady i zápory jako databáze \textit{Oracle 11g} a i + v případě této databáze se autoři rozhodli ji nevyužít. Hlavním důvodem byla příliš vysoká cena licence. + \item textbf{PostgreSQL}\footnote{PostgreSQL, \url{http://www.postgresql.org/}} + PostgreSQL je jednou z nejpoužívanějších open-source databází na světě. Její výkon i škálovatelnost je na výtečné úrovni, + stejnětak nástroje pro správu. Databáze \textbf{PostgreSQL} se tak stala zařadila mezi kandidáty na zvolení. + \item textbf{MySQL 5.1, community edition}\footnote{MySQL, \url{http://dev.mysql.com/doc/refman/5.1/en/}} + Databáze MySQL verze 5.1 je co do výkonu a škálovatelnosti jednou z nejleších open-source databází dneška. V její prospěch + také hrálo to, že s ní měli autoři projektu velké zkušenosti, jak po \end{itemize} - Jako databázový stroj byl pro serverovou část řešení Elvys zvolen MySQL server a to z důvodu, že s ním mají autoři bohaté - zkušenosti, je relativně výkonná a spolehlivá. Pro vývoj je tato databáze plně postačující a díky použití Hibernate ORM nástroje - (viz. dále) je možné s relativně malým úsilím přejít na jinou databázovou technologii v případě potřeby. + Po zvážení všech pro a proti se autoři rozhodli zvolit jako databázový stroj \textbf{MySQL 5.1}. Hlavně z důvodu kladných + zkušeností a ceně licence(je zadarmo). Autoři si navíc neuzavřeli cestu ke změně databázového stroje v případě potřeby. Díky použití Hibernate ORM nástroje + (viz. dále) je možné s relativně malým úsilím přejít na používání jiného databázového stroje. - \subsection{Popis datového modelu} - Detailní datový model je k nalezení v \textit{příloze \ref{appendix_DB_model} (str. \pageref{appendix_DB_model})}. - Následuje seznam tabulek s vysvětlením jejich smyslu. - \begin{description} - \item \textbf{TODO} - \end{description} + \subsection{Datový model aplikace} + Databázové tabulky, jejich sloupečky i vztahy mezi tabulkami byly od začátku projektu navrhovány pomocí grafického + nástroje \textit{Power designer 12}. Jakákoliv změna databáze v průběhu projektu se řídila podle MDA\footnote{Model + Driven Architecture - způsob vývoje SW, kdy modelu hraje důležitou roli ve vývoji SW a z něj se odvozují další části systému}, + tedy vždy došlo k zanesení požadované změny do datového modelu a na základě tohoto modelu byl získán sql skript, z nějž bylo + ve výsledku odvozeno Hibernate mapování a upraveny hlavní entity systému. (více viz \textit{kapitola \ref{hibernate_get_class}}). + + Detailní datový model spolu s popisem jednotlivých tabulek je k nalezení v \textit{příloze \ref{appendix_DB_model}}. + Na přiloženém disku je potom v adresáři [TODO PATH] umístěn vygenerovaný diagram tříd popisující hlavní entity + systému odvozené na základě datového modelu. - \subsection{Popis 'ORM' frameworku Hibernate}\label{hibernate_popis} + Hibernate je knihovna zajišťující objektově-relační mapování mezi třídami jazyka Java a tabulkami různými relačními + databázemi. Každému řádku tabulky v databázi potom odpovídá instance třídy v jazyce Java a naopak (platí pro entity + spadající do mapování). Toto mapování je popsáno v XML mapovacích souborech. + + Proces získání tříd jazyka Java odpovídajících tabulkám v databázi je popsáno v \textit{kapitole \ref{hibernate_get_class}}. - \subsection{Konfigurace hibernate} + [TODO dopsat] Konfigurace hibernate se provádí v hibernate + Více o konfiguraci v \textit{sekci \ref{configuration_hibernate}}. \subsubsection{C3P0 connection pool} - \subsection{Získání hibernate tříd} + + \subsection{Získání hibernate tříd z databáze } \label{hibernate_get_class} \begin{itemize} \item vygenerování .hbm.xml mapování z DB modelu \item ruční úprava(přidání dědičnosti, doplnění vlastního kódu) @@ -115,6 +143,20 @@ =popsat tady postup \subsection{Používání Hibernate Session v kódu} + tady nějakým způsobem obhájit, proč používám volání tak jak používám + + popsat, jak se chova hibernate v tom modu, co pouzivam- tedy vazani session na thread + + obrazky + + Bean zavola komplexni metodu -smazX()- ta rekurzivne zavola mazani obsazenych typu- smazY() a smazZ(), pak smaze X. Otazka je + jak se maji chovat metody smazY() a smazZ() + + + + zanorene komitovani, nezanorene komitovan + + 2 aktivity diagramy \subsection{Archivace starých dat na serveru} @@ -131,82 +173,116 @@ \end{itemize} + %%%%%%%%%%%%%%%%%%%%%%%%%% -%% libraries +%% MODUL ELVYSCOMMONS %%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Použité JAR knihovny} -Tato sekce obsahuje seznam knihoven (JAR souborů), které jsou použity pro vytvoření řešení Elvys.\\ - \subsection{JAR knihovny sdílené knihovny elvysCommons } - projekt elvysCommons používá pouze knihovny pro - \subsection{JAR knihovny aplikace webServer2} - \begin{description} - \item[DB] - \begin{itemize} - \item \textbf{c3pO} - \end{itemize} - - \end{description} - \subsection{JAR knihovny aplikace dispatcher} +\section{Modul elvysCommons} + + \subsection{Balíčky v projektu} + \subsection{Testování aplikační logiky} - \subsection{JAR knihovny aplikace LayoutDesigner} - - + \subsection{Použité knihovny} + %%%%%%%%%%%%%%%%%%%%%%%%%% -%% packages +%% MODUL DISPATCHER %%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Rozdělení do balíčků a složek} - \subsection{Rozdělení do projektů, sdílená aplikační logika} - Odkaz na sekci, kde je popsáno, jak tu aplikacni logiku mame vlastne oddelenou...\\ - Build je prováděn pomocí ANT-skriptů, které jsou popsány v \ref{build_ant}\\ - \subsection{Balíčky v projektech} - Nezrušit tuhle sekci a nedat balicky do 4.1 do odpovidajicich podsekci? +\section{Modul dispatcher} -%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Security -%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{WebServer2 - bezpečnost} - Nemá tohle být v kapitole 7.5? - \subsection{Autentizace uživatelů} - - - \subsection{Automatická expirace session} - - - \subsection{Ukládání session na serveru} - \subsubsection{WebServer2} - ten SSL zatim nema - \subsubsection{Dispatcher} - tenhle taky ne - \subsection{Podpora SSL} - \subsection{Popis komunikace serveru} - \subsubsection{webServer2} - FF, IE8, nutnost JRE pro applet - \subsubsection{webAPI??} - viz. dale - \subsubsection{dispatcher} - komunikace mezi kiosky a serverem + \subsubsection{XML, XSD, HTTP, JAXB} + + Tělo většiny zpráv posílaných přes internet je tvořeno XML dokumentem nesoucím určitá data. + Všechny komplexnější XML\footnote{Extensible Markup Language (XML), \url{http://www.w3.org/XML/}} dokumenty (např. jakýkoliv XXXConfig přenášený ze serveru na kiosek) mají + definován formát pomocí jazyka XML Schema\footnote{XML Schema language, \url{http://www.w3.org/XML/Schema}} + + \subparagraph{JAXB} + JAXB generuje \\ + + Při změně XSD souboru je nutné znovu vygenerovat třídy pomocí ANT skriptu [DOPLNIT] + + \subsubsection{Technologie Java Servlet} + K vytváření bodů vzdáleně přístupných přes HTTP protokol je v systému Elvys použita technologie Java Servlet. Tato technologie + umožňuje namapování java třídy implementující určité rozhraní na nějaké URL. Java třída poté na daném URL poslouchá a zpracovává HTTP požadavky.\\ + Pomocí této technologie jsou vytvořeny všechny přístupové body do aplikace \textbf{dispatcher}. -%%%%%%%%%%%%%%%%%%%%%%%%%% -%% GUI -%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{WebServer2 - GUI} - \subsection{JSF} - \subsection{Richfaces} - \subsection{Vlastní zobrazovací komponenty} - \subsection{Lokalizace} - Aplikace webServer2 podporuje lokalizaci popisků na webu do mnoha jazyků. Tato lokalizace může být užitečná, pokud se systémem pracují lidé mluvící jinou řečí. - Každý uživatel (ať už o tom ví, či ne), má ve svém internetovém prohlížeči nastaven světový jazyk, pomocí kterého se prohlížeč identifikuje webovému serveru. - Server tak může nabídnout anglické popisky člověku, který má v prohlížeči nastaven anglický jazyk komunikace a na druhé straně české popisky člověku, který má nastaveno české prostředí prohlížeče. + + \subsection{} + \subsection{Zabezpečení, podpora SSL} + S modulem dispatcher je možno komunikovat pomocí zabezpečeného HTTPS spojení. Tento mód je však vyhraze pouze pro + komunikaci s modulem LayoutDesigner. + + Na druhé straně, komunikace kiosků s webovým serverem je zabezpečena jiným způsobem. Kiosky a webový server spolu + komunikují pře zabezpečenou virtuální privátní síť (VPN). Více informací je k nalezení v kapitole \ref{}[TODO ref] - Modul webServer2 podporuje vícejazyčnou komunikaci založenou na výše zmíněném principu, nicméně lokalizace webové aplikace byla zatím napsána jenom pro český jazyk. - Použití se zatím předpokládá v česky hovořícím prostředí, v případě požadavku je možné lokalizaci pro jiný jazyk vytvořit. - - \subsubsection{Lokalizace popisků} - Lokalizované popisky jsou umístěny v souboru {\em labels\_xx.properties}, kde {\it xx} značí zkratku jazyka, kterým se identifikuje webový prohlížeč serveru (cs pro češtinu, en pro angličtinu,..). - Systém potom vyhledá požadovaný soubor labels\_xx.properties a použije ho pro vypisování popisek. - \subsubsection{Lokalizace chybových hlášek} - Systém je velice podobný, ... TODO + + \subsection{Balíčky v projektu} + + Více informací o rozdělení do balíčků je k nalezení v přiložené programátorské dokumentaci. + + \subsection{Použité knihovny} + Modul dispatcher používá navíc JAXB + + %%%%%%%%%%%%%%%%%%%%%%%%%% +%% MODUL WEBSERVER2 +%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Modul webServer2} + + \subsection{GUI} + \subsubsection{JSF} + \subsubsection{Richfaces} + \subsubsection{Vlastní zobrazovací komponenty} + \subsubsection{Lokalizace} + Aplikace webServer2 podporuje lokalizaci popisků na webu do mnoha jazyků. Tato lokalizace může být užitečná, pokud se systémem pracují lidé mluvící jinou řečí. + Každý uživatel (ať už o tom ví, či ne), má ve svém internetovém prohlížeči nastaven světový jazyk, pomocí kterého se prohlížeč identifikuje webovému serveru. + Server tak může nabídnout anglické popisky člověku, který má v prohlížeči nastaven anglický jazyk komunikace a na druhé straně české popisky člověku, který má nastaveno české prostředí prohlížeče. + + Modul webServer2 podporuje vícejazyčnou komunikaci založenou na výše zmíněném principu, nicméně lokalizace webové aplikace byla zatím napsána jenom pro český jazyk. + Použití se zatím předpokládá v česky hovořícím prostředí, v případě požadavku je možné lokalizaci pro jiný jazyk vytvořit. + + \paragraph{Lokalizace popisků} + Lokalizované popisky jsou umístěny v souboru {\em labels\_xx.properties}, kde {\it xx} značí zkratku jazyka, kterým se identifikuje webový prohlížeč serveru (cs pro češtinu, en pro angličtinu,..). + Systém potom vyhledá požadovaný soubor labels\_xx.properties a použije ho pro vypisování popisek. + \paragraph{Lokalizace chybových hlášek} + Systém je velice podobný, ... TODO + + \subsubsection{Stylování, skinovatelnost} + napsat tady informace o moznostech skinovani + -css, xcss, skin.properties, upravene .jar soubory (jestli tohle bude pravda, tak to urcite take zminit v sekci o knihovnach + + + + \subsection{Upload dokumentů - povolené typy} + Vzhledem k naimplementování + + \subsection{Bezpečnost projektu webServer2} + + \subsection{Ukládání session na serveru} + + \subsection{Podpora SSL} + \subsubsection{WebServer2} - ten SSL zatim nema + + \subsubsection{Autentizace uživatelů} + Uživatelé systému jsou autentizováni pro práci v systému na základě úspěšného přihlášení. + + TODO - doplnit, jak se bude heslo zasílat emailem. + Hesla uživatelů jsou uložena v databázi a proti nežádoucímu přečtení jsou zabezpečena pomocí + metody používající MD5 šifrování v + + + \subsection{Automatická expirace session} + + \subsection{Balíčky v projektu} + Více informací o rozdělení do balíčků je k nalezení v přiložené programátorské dokumentaci. + + \subsection{Použité knihovny} + Tato sekce obsahuje seznam knihoven (JAR souborů), které jsou použity v modulu webServer2.\\ + + + +%%%%%%%%%%%%%%%%%%%%%%%%%% %% Statistiky %%%%%%%%%%%%%%%%%%%%%%%%%% \section{WebServer2 - Statistiky} @@ -325,78 +401,190 @@ umístěna v projektu ElvysCommons, tudíž ji lze převzít a vytvořit nástroj pro hromadné nahrávání souborů na server. Více info o této myšlence \textit{viz. kapitola \ref{communication_future_FTP} (str. \pageref{communication_future_FTP})} +%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Popis komponent ????? +%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Popis komponent} + \subsection{Komponenta seznamu souborů} + + \subsection{Komponenta seznamu kategorií} + + \subsection{Komponenta náhledu rozvržení obrazovky} + %%%%%%%%%%%%%%%%%%%%%%%%%% %% Novy typ souboru %%%%%%%%%%%%%%%%%%%%%%%%%% \section{Rozšiřitelnost systému o nový typ souboru} \subsection{Nový záznam v DB} + Související sekce databáze je znázorněna na \textit{obrázku \ref{img.deployment_plug}} + do tabulky dat elvys.server.bl.file.FileStorageManagerVideo napriklad + potomek elvys.server.bl.file.FileStorageManager \subsection{Nová třída pro správu nového typu souboru} + \subsubsection{metoda} \subsubsection{metoda} + \subsection{Definice lokalizačního popisku pro nový typ souboru} %%%%%%%%%%%%%%%%%%%%%%%%%% -%% Plugovatelnost typů +%% Typy plánování a jejich rozšiřitelnost, Plugovatelnost typů %%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Rozšiřitelnost systému o nový typ plánovaných dat} -POZNÁMKA - tato kapitola se bude přepisovat, nobsahuje aktuální informace +\section{Typy plánování} +Systém elvys umožňuje plánovat....... nejenom souborové plánování, ale také plánování bez souborů +V současné době systém podporuje následující typy plánování (uvedeny jména, které figurují v databázi a v logice systému): +\begin{itemize} + \item \textbf{document} pdf dokument + \item \textbf{url} webová stránka + \item \textbf{static} statický text + \item \textbf{dynamic} dynamický text + \item \textbf{video} + avi, mov, mpeg, mpg, wmv, flv + \item \textbf{presentation} prezentace +\end{itemize} + + + Při práci s plánovací komponentou uživatel zvolí, která pozice obrazovky ho zajímá a v jakém čase a systém uživateli nabídne modální okno, + ve kterém bude probíhat konkrétní plánování. + -pred touto kapitolou urcite popsat: planovaci komponenta +\section{Rozšiřitelnost systému o nový typ plánovaných dat} - Jelikož bude systém umožňovat plánovat na obrazovku kiosku různé typy dat, je kladen důraz na navržení systému tak, aby - mohla být podpora pro další typ zobrazovaných dat (např. videa) jednoduchou cestou doprogramována. - \subsection{Nový typ plánovaných dat v databázi} + Jelikož bude systém umožňovat plánovat na obrazovku kiosku různé typy dat, je systém navržen tak, aby + mohla být podpora pro další typ zobrazovaných dat (např. videa, prezentací, atd.) relativně jednoduchou cestou doprogramována. + Stále je ovšem zapotřebí znát webový framework JSF, komponenty Richfaces. + \subsection{Nový typ plánovaných dat v databázi} + Nejprve je potřeba vytvořit podporu pro nový typ plánování v databázi + Související sekce databáze je znázorněna na \textit{obrázku \ref{img.deployment_plug}} + \begin{figure} + \begin{center} + \includegraphics[width=0.95\textwidth]{imgs/dbschema_plug} + \end{center} + \caption{Část datového modelu související s typem souborů v systému a typem plánovaných dat} + \label{img.deployment_plug} + \end{figure} + + + Úprava databáze je shrnuta v následujících krocích: \begin{itemize} - \item{} \textbf{content\_type} - Přidání nového typu do tabulky \textit{content\_type}. - \item{nový potomek frame\_content} - Je také potřeba vytvořit tabulku, která bude uchovávat data plánování specifická pro nový typ. - Tabulka bude 'potomkem' (důvod popsán v kapitole věnované ORM frameworku Hibernate - \ref{hibernate}). - \item{přidání nového typu společnostem - comp\_permitted\_type} - - toto je buď možno udělat ručně, nebo z UC + \item \textbf{Nová tabulka obsahující data plánování} + První úpravou databáze je vytvoření tabulky, která bude uchovávat data plánování specifická pro nový typ. + Tuto tabulku je vhodné nazvat <jméno\_typu>\_content a musí být potomkem tabulky \textit{frame\_content} respektive + tabulky \textit{file\_frame\_content} (to pokud bude instance plánování obsahovat nějaký soubor). Být \uv{potomkem} v tomto + případě znamená, že dané tabulky jsou svázány stejným id řádku. Tuto vlastnost dále využívá v aplikaci ORM knihovna Hibernate (viz. dále). + \item \textbf{type\_plug} + uprava teto tabulky + \item \textbf{content\_type} + Přidání záznamu o novém typu plánování do tabulky \textit{content\_type}. + \begin{description} + \item[type] obsahuje textový řetězec reprezentující typ plánování. + Pro existující typy plánování je tedy například: \textit{pdf} pro pdf dokument, + \textit{static} pro statický text, \textit{dynamic} pro dynamický text,... + \item[plug] fsaf + \item[file\_type] fsda + \end{description} \end{itemize} - \subsection{Nový typ dat k uploadu} - tohle zpusobuje problemy, nemuze byt asi reseno automaticky - Kdyz se pridavalo video, tak muselo byt: - \begin{itemize} - \item{NEAUTOMATIZOVATELNE-nové tabulky v DB}vytvoren novy typ dokumentu v databazi (tabulka Video, VideoContent). Tabulka Video 'podedena' od tabulky File, tudiz ma definovane zakladni atributy - \item{NEAUTOMATIZOVATELNE-načítání dat z tabulky video v UC, které to vyžadují} (zobrazení plánování na plánovací komponentě, generování XML zprávy pro JH). Tohle načítání je snad řešeno jenom na jednom místě (PlanningBl asi) - - elvys.server.bl.planning.PlanningBLImpl: getTimelinesGeneric takhle načítá video a soubory - - načítá jednak v projektu webServer2 pro plánování - - také v projektu dispatcher pro posílání dat kiosku - \item{AUTOMATIZOVATELNE-nahrávání souborů nového typu na server} - pokud nemá společnost povoleno plánování daného typu dokumentu, tak např. ani nemůže na server nahrávat soubory, které s tímto typem dat souvisí (.avi,.mpg,..) - \item{mozna AUTOMATIZOVATELNE-vybírání souborů daného typu na serveru} - planovani, statistiky, reporty,... + \subsection{Nový typ plánovaní a Hibernate} + Nově přidaný typ plánování je taky nutné přidat do konfigurace objektového mapování mezi aplikací a databází. + V předchozí sekci bylo zmíněno, že mezi tabulkou obsahující data nového typu plánování a mezi tabulkou \textit{frame\_content} + je vztah podobný dědičnosti. Tento vztah ovšem není definován v databázi, ale v hibernate mapování. Konkrétně je potřeba upravit soubor - \end{itemize} + ....... + \subsubsection{Vygenerování mapování podle DB} + + \subsubsection{Začlenění mapování nového typu do hierarchie dědičnosti frame\_content} + + + Soubor \textit{frame\_content.hbm.xml} je k nalezení v \textit{příloze \ref{appendix.framecontent.hbm.xml}}. - - \subsection{Nový typ dat při plánováni rozvržení obrazovky} - V aplikaci LayoutDesigner není potřeba nic měnit, možnost vytváření pozic, na kterých bude povoleno plánování - nového typu je dáno pouze informací v datovém modelu webové aplikace (comp\_permitted\_type) + Více informací o použití hibernate ORM knihovny lze nalézt v sekci \ref{webapp_hibernate}. + + + + \subsection{Nový typ plánování v LayoutDesigneru} + V appletu \textit{LayoutDesigner} není potřeba nic měnit, typy plánování + jsou získávány z databáze webového serveru (tabulka \textit{comp\_permitted\_type}) - \subsection{Nový typ dat v plánovací komponentě} - - - Základními typy plánování, které bude možno provádět budou: \textit{statický text}, \textit{dynamický text}, \textit{pdf dokument}, \textit{webová stránka}. - - Při práci s plánovací komponentou uživatel zvolí, která pozice obrazovky ho zajímá a v jakém čase a systém uživateli nabídne modální okno, - ve kterém bude probíhat konkrétní plánování. + + \subsection{Nový typ plánování při plánování} + Aby mohly být data nového typu plánování zadávány, musí být vytvořen formulář, který tyto data bude obsahovat, + JSF Bean třída použitá pro sběr dat zadaných na formuláři a vlastní implementace třídy, provádějící validace + zadaných hodnot plánování. + \subsubsection \textbf{Bean třída} + Aby mohly být data formuláře Vytvoření a registrace JSF bean třídy pro práci se specifickými daty plánování + např.: PlanningModalVideoBean.java + dědí od: \textit{cz.elvys.webServer.beans.planningrel.plug.PlanningModalSpecBean} + musí implementovat: + \begin{itemize} + \item{getFormData()} + \item{initPlanningModalSpecBean(String formName, ContentType type)} + ContentType představuje obsah formuláře plánování - obecný předek pro každý typ + \item{initPlanningModalSpecBean(String formName, FrameContent frc)} + \item{validate()} + \end{itemize} + + Registrace se provádí úpravou souboru po vzoru bean-tříd ostatních typů v následujícím souboru: + \textit{webServer2/WebContent/WEB-INF/faces-beans-planplug.xml} + \begin{verbatim} + <managed-bean> + <managed-bean-name>planningModalUrlBean</managed-bean-name> + <managed-bean-class>cz.elvys.webServer.beans.planningrel.plug.PlanningModalVideoBean</managed-bean-class> + <managed-bean-scope>session</managed-bean-scope> + </managed-bean> + \end{verbatim} + Omezení: managed-bean-name musí být ve formátu: planningModal<Type>Bean, kde <Type> je jméno typu plánovaných dat, + které má velké první písmeno - tedy např. planningModalDocumentBean, planningModalVideoBean, .. + + \subsubsection{Formulář pro modální okno plánování} + Modální okno plánování je okno, které se uživateli ukáže jako reakce na zvolení určité pozice na plánovacím okně. + Více popsat v plánování + \begin{verbatim} + /secured/plug/planningModalDocument.xhtml + \end{verbatim} + + \subsubsection{Formulář pro druhou úroveň okna plánování} + Druhou úrovní okna plánování je zde myšleno další okno, které se ukáže uživateli jako reakce na + akci provedenou v modálním okně plánování. Může to být například seznam souborů, který systém + uživateli nabídne jako reakci na stisktnutí tlačítka \uv{Zvolit soubor} umístěného na modálním okně plánování. + \begin{verbatim} + /secured/plug/planningModalDocumentInnerModal.xhtml + \end{verbatim} + + \subsection{Nový typ plánování v tooltipu plánovací komponenty} + \begin{verbatim} + /secured/plug/planningModalDocumentTooltip.xhtml + \end{verbatim} + + \subsection{Vytvoření třídy obsahující logiku specifickou pro daný typ} + cz.elvys.webServer.toSpring.planning.api.PlanningModalBL + + \subsection{Registrace vytvořených souborů} + Soubory vytvořené výše je potřeba zaregistrovat, aby je aplikace mohla použít. + + + + + + + + \subsection{Dispatcher - úprava XSD, vygenerování nových tříd pro JAXB} + + \subsection{Dispatcher - úprava generování documentConfig} + generovani mam natvrdo v kodu, presunout do type-spec-BL + + \subsection{Definice lokalizačního popisku pro nový typ} - Peklo je krok 2 - tam se musi zobrazit spravne gui a zvolit spravna aplikacni logika na zaklade volby jednoho stringu v kroku1. - Postup pridani videa: - \begin{itemize} - \item{Registrace jména nového typu v databázi} - \item{Vytvoření view prvku pro modální okno} - \item{Vytvoření obsahu 2. modálního okna} - \item{Vytvoření třídy obsahující logiku specifickou pro daný typ} - *BLImpl + \subsection{starsi info- vyuzit ci smazat} + + + + \begin{itemize} \item{Registrace view částí a třídy s logikou} Pro zaregistrování částí systému souvisejících s nově přidaným typem je potřeba upravit konfigurační soubor:\\ \textit{cz.elvys.webServer.utils.plug.}\textbf{plugins.properties} @@ -408,29 +596,7 @@ planning.business.logic.video=cz.elvys.webServer.toSpring.planning.impl.PlanningModalVideoBLImpl\\ view.path.video=/secured/plug/planningModalVideo.xhtml\\ view.path.video.innermodal=/secured/plug/planningModalVideoInnerModal.xhtml - \item{Vytvoření a registrace backing beany pro práci se specifickými daty plánování} - např.: PlanningModalVideoBean.java - dědí od: \textit{cz.elvys.webServer.beans.planningrel.plug.PlanningModalSpecBean} - musí implementovat: - \begin{itemize} - \item{getFormData()} - \item{initPlanningModalSpecBean(String formName, ContentType type)} - ContentType představuje obsah formuláře plánování - obecný předek pro každý typ - \item{initPlanningModalSpecBean(String formName, FrameContent frc)} - \item{validate()} - \end{itemize} - - Registrace se provádí úpravou souboru po vzoru bean-tříd ostatních typů v následujícím souboru: - \textit{webServer2/WebContent/WEB-INF/faces-beans-planplug.xml} - \begin{verbatim} - <managed-bean> - <managed-bean-name>planningModalUrlBean</managed-bean-name> - <managed-bean-class>cz.elvys.webServer.beans.planningrel.plug.PlanningModalUrlBean</managed-bean-class> - <managed-bean-scope>session</managed-bean-scope> - </managed-bean> - \end{verbatim} - Omezení: managed-bean-name musí být ve formátu: planningModal<Type>Bean, kde <Type> je jméno typu plánovaných dat, - které má velké první písmeno - tedy např. planningModalDocumentBean, planningModalVideoBean, .. + \item{tooltipy na planovaci komponente} -tooltip je potreba taky upravit @@ -446,9 +612,16 @@ - -%%%%%%%%%%%%%%%%%%%%%%%%%% -%% spatne zkusenosti -%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Špatné zkušenosti z vývoje} - \subsubsection{varchar foreign key} + \subsection{Nový typ dat k uploadu} + tohle zpusobuje problemy, nemuze byt asi reseno automaticky + Kdyz se pridavalo video, tak muselo byt: + \begin{itemize} + \item{NEAUTOMATIZOVATELNE-nové tabulky v DB}vytvoren novy typ dokumentu v databazi (tabulka Video, VideoContent). Tabulka Video 'podedena' od tabulky File, tudiz ma definovane zakladni atributy + \item{NEAUTOMATIZOVATELNE-načítání dat z tabulky video v UC, které to vyžadují} (zobrazení plánování na plánovací komponentě, generování XML zprávy pro JH). Tohle načítání je snad řešeno jenom na jednom místě (PlanningBl asi) + - elvys.server.bl.planning.PlanningBLImpl: getTimelinesGeneric takhle načítá video a soubory + - načítá jednak v projektu webServer2 pro plánování + - také v projektu dispatcher pro posílání dat kiosku + \item{AUTOMATIZOVATELNE-nahrávání souborů nového typu na server} - pokud nemá společnost povoleno plánování daného typu dokumentu, tak např. ani nemůže na server nahrávat soubory, které s tímto typem dat souvisí (.avi,.mpg,..) + \item{mozna AUTOMATIZOVATELNE-vybírání souborů daného typu na serveru} - planovani, statistiky, reporty,... + + \end{itemize} Modified: others/dokumentace/technicalGuide/architecture/7communication.tex =================================================================== --- others/dokumentace/technicalGuide/architecture/7communication.tex 2010-02-28 23:44:52 UTC (rev 1964) +++ others/dokumentace/technicalGuide/architecture/7communication.tex 2010-03-01 03:20:18 UTC (rev 1965) @@ -220,30 +220,105 @@ \section{Rozhraní mezi webovou aplikací a pomocnými aplikacemi}\label{interface_web_and_apps} - \subsection{pageCounter} - \subsection{textMeter} - \subsection{videoMeter} +Obecné informace o těchto utilitách je možné získat v \textit{kapitole \ref{4webapp_utilities}}. + \begin{description} + \item[] \textbf{pageCounter} + + \begin{description} + \item[volání] pageCounter $<$path$>$ + \begin{itemize} + \item \textbf{path}: cesta k dokumentu + \end{itemize} + \item[] \textbf{odpověď} + \begin{itemize} + \item kladné číslo znamená počet stránek, pokud bylo počítání stránek úspěšné + \item cokoliv jiného než kladné číslo - chyba zpracování + \end{itemize} + \item[] \textbf{příklad} +\begin{verbatim} + vstup: + pdfCounter /home/elvys/11.pdf + výstup: + 62 +\end{verbatim} + \end{description} + + + \item[] \textbf{videoMeter} + + \begin{description} + \item[volání] videoMeter $<$path$>$ + \begin{itemize} + \item \textbf{path}: cesta k dokumentu + \end{itemize} + \item[] \textbf{odpověď} + \begin{itemize} + \item kladné číslo znamená délku videa v milisekundách, pokud bylo počítání délky úspěšné + \item cokoliv jiného než kladné číslo - chyba zpracování + \end{itemize} + \item[] \textbf{příklad} +\begin{verbatim} + vstup: + videoMeter /home/elvys/85.avi + výstup: + 132535 +\end{verbatim} + \end{description} + + + + + \item[] \textbf{textMeter} + + \begin{description} + \item[volání] textMeter $<$font-name$>$ $<$position-width$>$ $<$position-height$>$ $<$aspect-ratio$>$ $<$text$>$ + \begin{itemize} + \item \textbf{font-name}: Nazev fontu + \item \textbf{position-width}: šířka pozice + \item \textbf{position-height}: výška pozice + \item \textbf{aspect-ratio}: aspect-ratio layoutu + \item \textbf{text}: text, pro který má výpočet proběhnout + \end{itemize} + \item[] \textbf{odpověď} + \begin{itemize} + \item kladné číslo: určuje maximální velikost fontu v procentech, pro kterou se text mající tento font vejde do pozice. + \item cokoliv jiného: chyba + \end{itemize} + \item[] \textbf{příklad} +\begin{verbatim} + vstup: + textMeter Arial 0.8 0.1 1.77778 "TEST HHHHH AAAAA TEST" + výstup: + 62 +\end{verbatim} + \end{description} + \end{description} + + + + \section{Rozhraní pro ovládání webové aplikace webServer2}\label{interface_web} - \subsection{SSL?} + \subsection{SSL} + S modulem webServer2 je možné komunikovat buď přes nezabezpečený HTTP protokol, nebo přes zabezpečený HTTPS protokol. \section{Rozhraní pro práci s informačními kiosky}\label{interface_kiosk} popsána v \textit{kapitole \ref{client_interface} (str. \pageref{client_interface})} \section{Rozhraní v budoucnosti}\label{interface_kiosk} Vzhledem k tomu, že aplikační logika serverové části řešení Elvys je znovupoužitelná (obsažena v projektu \textbf{elvysCommons}, který je vložen do projektů \textbf{dispatcher} a \textbf{webServer2}), -je na snadě +je na snadě rozšíření systému Elvys o nové funkčnosti. Více informací o projektu \textbf{elvysCommons} je možno získat v \textit{kapitole \ref{webapp_architecture_elvysCommons} (str. \pageref{webapp_architecture_elvysCommons})} -\subsection{WS-API} -Možnost do budoucnosti, která se přímo nabízí je vytvoření aplikačního rozhraní pro přístup k částem aplikace pomocí -Web Services (zkráceně WS-API). Toto API by mohlo být použito pro spolupráci systému Elvys s jinými systémy. -Takovýmito systémy by mohly být například internetové stránky městských úřadů obsahující zveřejněné dokumenty. Takováto spolupráce -by mohla jistě umožnit i jednoduché automatické plánování dokumentů. - -Realizace tohoto rozhraní by byla jistě časově náročnou operací a nebyla zamýšlena jako součást základní implementace řešení Elvys. - -\subsection{FTP nahrávání dokumentů} \label{communication_future_FTP} -Další možností, kde lze využít znovupoužitelnou aplikační logiku je nahrávání dokumentů pomocí FTP serveru. Tyto soubory by -na straně serveru mohla automaticky zpracovávat obslužná aplikace. Tím by se urychlilo a zpříjemnilo nahrávání většího množství -dokumentů na server. - -Ani toto zlepšení nebylo plánováno do základní verze řešení Elvys. \ No newline at end of file + \subsection{WS-API} + Možnost do budoucnosti, která se přímo nabízí je vytvoření aplikačního rozhraní pro přístup k částem aplikace pomocí + Web Services (zkráceně WS-API). Toto API by mohlo být použito pro spolupráci systému ELVYS s jinými systémy. + Takovýmito systémy by mohly být například internetové stránky městských úřadů obsahující zveřejněné dokumenty. Takováto spolupráce + by mohla jistě umožnit i jednoduché automatické plánování dokumentů. + + Realizace tohoto rozhraní by byla jistě časově náročnou operací a nebyla zamýšlena jako součást základní implementace řešení ELVYS. + + \subsection{FTP nahrávání dokumentů} \label{communication_future_FTP} + Další možností, kde lze využít znovupoužitelnou aplikační logiku je nahrávání dokumentů pomocí FTP serveru. Tyto soubory by + na straně serveru mohla automaticky zpracovávat obslužná aplikace. Tím by se urychlilo a zpříjemnilo nahrávání většího množství + dokumentů na server. + + Ani toto zlepšení nebylo plánováno do základní verze řešení ELVYS. \ No newline at end of file Modified: others/dokumentace/technicalGuide/architecture/9z10appendix.tex =================================================================== --- others/dokumentace/technicalGuide/architecture/9z10appendix.tex 2010-02-28 23:44:52 UTC (rev 1964) +++ others/dokumentace/technicalGuide/architecture/9z10appendix.tex 2010-03-01 03:20:18 UTC (rev 1965) @@ -1,9 +1,54 @@ \appendix \chapter{Databázový model}\label{appendix_DB_model} +[TATO PRILOHA PUJDE NA OBOUSTRANNOU A3] \begin{center} \includegraphics[width=1\textwidth]{imgs/dbschema.png} \end{center} + \begin{itemize} + \item \textbf{aspect\_ratio} + \item \textbf{category} + \item \textbf{category\_definition} + \item \textbf{category\_planning} + \item \textbf{comp\_permitted\_type} + \item \textbf{comp\_setting} + \item \textbf{company} + \item \textbf{content\_type} + \item \textbf{db\_info} + \item \textbf{document} + \item \textbf{document\_content} + \item \textbf{dynamic\_content} + \item \textbf{elvys} + \item \textbf{elvys\_group} + \item \textbf{elvys\_setting} + \item \textbf{file} + \item \textbf{file\_frame\_content} + \item \textbf{file\_type} + \item \textbf{frame\_content} + \item \textbf{label} + \item \textbf{label\_ref} + \item \textbf{layout} + \item \textbf{layout\_position} + \item \textbf{panel} + \item \textbf{pdf\_pres\_content} + \item \textbf{permitted\_scheduling} + \item \textbf{resolution} + \item \textbf{role} + \item \textbf{statistics} + \item \textbf{text\_content} + \item \textbf{timeline} + \item \textbf{type\_plug} + \item \textbf{url\_content} + \item \textbf{user} + \item \textbf{video} + \item \textbf{video\_content} + \end{itemize} + + + + + + \chapter{XSD pro komunikaci \label{xsd}} \section{appConfig.xsd}\label{appendix_appConfig} \lstinputlisting[caption=Ukázka souboru appConfig.xml]{../../../../others/xsd/version2/appConfig.xsd}