Analyza dekompozice pluginu

Z FI WIKI
Přejít na: navigace, hledání

Analýza dekompozice pluginů

Doposud třída implementující plugin pro určitý zdroj v sobě zahrnovala veškerý kód potřebný pro svůj běh. Některé části kódu se u jednotlivých plugnů opakovaly, a proto vyvstala potřeba pluginy dekomponovat do menších, znovupoužitelných částí.


Navrhl jsem interface CorePlugin, který musí nový plugin implementovat. Dále plugin musí implementovat rozhraní WebservicesPlugin (v současnosti ServerWSI), které umožňuje komukaci pomocí webových služeb. Třída PluginHelper obsahuje metody, které mohou urychlit tvorbu nového pluginu.


Pokud lze při tvorbě pluginu využít XSLT transformaci (pomocí jTidy lze převést na XHTML), je práce velmi zjednodušená. Nejprve je nutné naprogramovat metodu makeURL a vytvořit XSLT styl, který transformuje dokument do vhodného XML. Dále tento XSLT styl zkompilovat jako translet do jar archivu. Pro vytvoření metody extractInfo bude pravděpodobně stačit zavolat

queryToMetadata(makeURL(query), TransletName, TransletPackageName)


Při nemožnosti použití XSLT se musí použít nějaký parsovací balík, doporučuji HTMLParser ze stránek http://htmlparser.sourceforge.net/. Ze třídy PluginHelper balíku lze maximálně vyuří metodu removeBlankSpace. Veškerá práce se musí udělat ručně.


Grafické znázornění vztahů pomocí class diagramu:

Soubor:SearchPluginImpl.gif

Rozhraní WebservicesPlugin

Toto rozhraní obsahuje dvě metody, které volá server V.E.Z.M.U.:

public Vector<cz.muni.fi.vezmu.Metadata> processQuery(cz.muni.fi.vezmu.Query query) throws RemoteException, cz.muni.fi.vezmu.SearchException;
public Vector<cz.muni.fi.vezmu.Metadata> processQuery(String query) throws RemoteException, cz.muni.fi.vezmu.SearchException;

Slouží pro získání odpovědi od zdroje dat, jako konstruktor se jim předává buďto objekt Query nebo fulltextový dotaz jako objekt String.

Rozhraní CorePlugin

Toto rozhraní obsahuje dvě metody, které se musí být unikátní pro každý plugin. Každý zdroj elektronických dat se liší v tom, jak je tvořen dotaz a v jakém formátování je zaslána odpověď.

public String makeURL(Query query);
public Vector<Metadata> extractInfo(String URL) throws SearchException;  

Metoda makeURL má vracet adresu, ze které je možné stáhnout výsledek hledání. Metoda extractInfo má ze zadané adresy získat relevantní data a uložit je do objektu Vector<Metadata>, která posléze metoda processQuery odešle serveru V.E.Z.M.U. jako výsledek hledání.

Třída PluginHelper

Obsahuje pomocné metody pro tvorbu pluginu.

public BufferedInputStream getInputStream(String URL) throws SearchException
public String getData(String URL) throws SearchException
public String removeBlankSpace(String inputString)
public OutputStream transformDataToXHTML(InputStream input) throws SearchException
public OutputStream transformXHTMLToXML(InputStream input, String TransletName, String PackageName) throws SearchException
public OutputStream transformDataToXML(InputStream input, String TransletName, String PackageName) throws SearchException
public Vector<Metadata> transformXML2Metadata(InputStream input) throws SearchException
public Vector<Metadata> queryToMetadata(String URL, String TransletName, String PackageName) throws SearchException


  • public BufferedInputStream getInputStream(String URL) -- vrací BufferedInputStream pro zadanou URL
  • public String getData(String URL) -- vrací obsah zadané URL jako objekt String
  • public String removeBlankSpace(String inputString) -- metoda vhodná při ručním parsování vraceného HTML, odstraňuje přebytečné mezery a volné řádky
  • public OutputStream transformDataToXHTML(InputStream input) -- transformuje InputStream s HTML do XHTML jako OutputStream, používá balík jTidy ze stránek http://jtidy.sourceforge.net/
  • public OutputStream transformXHTMLToXML(InputStream input, String TransletName, String PackageName) -- transformuje InputStream s XHTML do zjednodušeného XML jako OutputStream, musí se zatad jméno a balík transletu, který bude provádět XSLT transformaci, využívá se balík XalanJ, domovská stránka na http://xml.apache.org/xalan-j/
  • public OutputStream transformDataToXML(InputStream input, String TransletName, String PackageName) -- transformuje InputStream s HTML do zjednodušeného XML jako OutputStream, musí se zatad jméno a balík transletu, který bude provádět XSLT transformaci, využívají se metody transformDataToXHTML a transformXHTMLToXML
  • public Vector<Metadata> transformXML2Metadata(InputStream input) -- získává informace ze zjednodušeného XML (jako InputStream) a ukládá je do objektu Vector<Metadata>, pro získání dat ze zjednodušené XML se používá balím dom4j, adresa projektu je http://dom4j.org/
  • public Vector<Metadata> queryToMetadata(String URL, String TransletName, String PackageName) -- provede celou transformaci informací z InputStream s HTML do objektu Vector<Metadata>, volají se metody transformDataToXML a transformXML2Metadata