package elte.java2_utikalauz5.programok; /** Forrásfájlok megtekintését, valamint egyéb fájlok letöltését biztosító taglet. Forrásfájl megadása a {@code @link.forrásfájl}, letöltendő fájl megadása pedig a {@code @link.letöltés} új dokumentációs blokkleíró elemekkel történik, melyek feldolgozását ez a {@code javadoc} taglet végzi.

Az elemek szintaxisa a következő:

{@code @link.forrásfájl} URL  forrásfájlnév
további opcionális magyarázó szöveg.

{@code @link.letöltés} URL  fájlnév
további opcionális magyarázó szöveg. @link.forrásfájl {@docRoot}/../data/programok/src TagletTeszt.java @link.letöltés {@docRoot}/../data/programok TagletTeszt.jar @since Java 2 Útikalauz programozóknak 5.0 */ public class TagletTeszt implements com.sun.tools.doclets.Taglet, //hagyományos com.sun.tools.doclets.internal.toolkit.taglets.Taglet{//és direkt taglet /** A feldolgozandó dokumentációs blokkleíró elem neve. */ private final String elemnév; /** A hivatkozás megjelenítéséhez használt cél neve. */ private final String cél; /** Taglet konstruktor. @param elemnév A feldolgozandó dokumentációs blokkleíró elem neve. @param cél A hivatkozás megjelenítéséhez használt cél neve. */ public TagletTeszt(String elemnév, String cél) { this.elemnév=elemnév; this.cél=cél; } /** Megadja a kezelt dokumentációs elem nevét. @return A kezelt dokumentációs elem neve. */ public String getName() { return elemnév; } /** Megadja, hogy a kezelt elem használható-e mezők dokumentációs leírásában. @return Hamisat ad vissza, mert nem használható mezők leírásában. */ public boolean inField() { return false; } /** Megadja, hogy a kezelt elem használható-e konstruktorok leírásában. @return Hamisat ad vissza, mert nem használható konstruktorok leírásában. */ public boolean inConstructor() { return false; } /** Megadja, hogy a kezelt elem használható-e metódusok leírásában. @return Hamisat ad vissza, mert nem használható metódusok leírásában. */ public boolean inMethod() { return false; } /** Megadja, hogy a kezelt elem használható-e az áttekintő leírásban. @return Hamisat ad vissza, mert nem használható az áttekintő leírásban. */ public boolean inOverview() { return false; } /** Megadja, hogy a kezelt elem használható-e csomagok dokumentációs leírásában. @return Igazat ad vissza, mert használható csomagok leírásában. */ public boolean inPackage() { return true; } /** Megadja, hogy a kezelt elem használható-e típusok dokumentációs leírásában. @return Igazat ad vissza, mert használható interfészek leírásában. */ public boolean inType() { return true; } /** Megadja, hogy a kezelt elem beágyazható dokumentációs elem-e. @return Hamisat ad vissza, mert blokkleíró elemeket kezelünk. */ public boolean isInlineTag() { return false; } /** Adott blokkleíró elemet kezelő taglet regisztrálása. @param elemnév A feldolgozandó dokumentációs blokkleíró elem neve. @param cél A hivatkozás megjelenítéséhez használt cél neve. @param tagletek A tagletek bejegyzéseinek regisztrációja. */ private static void regisztrálás(String elemnév, String cél, java.util.Map tagletek) { TagletTeszt teszt = new TagletTeszt(elemnév, cél); //taglet létrehozása com.sun.tools.doclets.internal.toolkit.taglets.Taglet taglet = teszt instanceof com.sun.tools.doclets.internal.toolkit.taglets.Taglet ? //direkt taglet megvalósítás vizsgálata (com.sun.tools.doclets.internal.toolkit.taglets.Taglet)teszt : //be kell csomagolni new com.sun.tools.doclets.internal.toolkit.taglets.LegacyTaglet(teszt); tagletek.put(elemnév, taglet); //új taglet regisztrálása } /** Saját tagletek regisztrálása. @param tagletek A tagletek bejegyzéseinek regisztrációja. */ public static void register(java.util.Map tagletek) { regisztrálás("link.forrásfájl", "_blank", tagletek); regisztrálás("link.letöltés", null, tagletek); } /** Hagyományos taglet dokumentációs elemet kezelő metódusa. @param elem Az aktuális dokumentációs elem tartalma. @return A kapott dokumentációs elem feldolgozásának eredménye HTML formában. */ public String toString(com.sun.javadoc.Tag elem) { return toHTML(elem.text()); //HTML létrehozása az elem szövege alapján } /** Hagyományos taglet dokumentációs elemeket kezelő metódusa. @param elemek Az aktuális dokumentációs elemek tartalma. @return A kapott elemek feldolgozásának eredménye HTML formában. */ public String toString(com.sun.javadoc.Tag[] elemek) { String html = ""; //visszaadott HTML for (com.sun.javadoc.Tag elem:elemek) html+=toString(elem); //eredmények return html; //összefűzése és visszaadása } /** Direkt taglet dokumentációs elemet kezelő metódusa. @param elem Az aktuális dokumentációs elem tartalma. @param kimenet A taglet kimeneti kapcsolata. @return A kapott dokumentációs elem feldolgozásának eredménye HTML formában. */ public com.sun.tools.doclets.internal.toolkit.taglets.TagletOutput getTagletOutput(com.sun.javadoc.Tag elem, com.sun.tools.doclets.internal.toolkit.taglets.TagletWriter kimenet){ com.sun.tools.doclets.internal.toolkit.taglets.TagletOutput html = kimenet.commentTagsToOutput(elem, elem.inlineTags()); //az eredeti tartalomban a beágyazott dokumentációs elemek kiértékelése html.setOutput(toHTML(html.toString())); //majd HTML létrehozása return html; //és visszaadása } /** Direkt taglet dokumentációs elemeket kezelő metódusa. @param elemek Az aktuális dokumentációs elemek tartalma. @param kimenet A taglet kimeneti kapcsolata. @return A kapott elemek feldolgozásának eredménye HTML formában. */ public com.sun.tools.doclets.internal.toolkit.taglets.TagletOutput getTagletOutput(com.sun.javadoc.Doc elemek, com.sun.tools.doclets.internal.toolkit.taglets.TagletWriter kimenet){ com.sun.tools.doclets.internal.toolkit.taglets.TagletOutput html = null; StringBuilder sb = new StringBuilder(); //eredmények tárolója for (com.sun.javadoc.Tag elem : elemek.tags(getName())) { html = getTagletOutput(elem, kimenet); sb.append(html.toString()); //eredmények összefűzése } if (html!=null) html.setOutput(sb.toString()); //eredmény visszaadása return html; } /** Dokumentációs elem szövegének alapján HTML generálása. @param elem Az aktuális dokumentációs elem szövegtartalma. @return A tartalom feldolgozásának eredménye HTML formában. */ private String toHTML(String elem) { int pozíció = elem.indexOf('\n'); //első sor megkeresése String részletek = ""; if (pozíció > 0) { részletek = elem.substring(pozíció); //magyarázó szövegrész elem = elem.substring(0, pozíció); //első sor leválasztása } pozíció=elem.lastIndexOf(' ');//fájlnév és URL kiolvasása az első sorból String url = elem.substring(0, pozíció); String fájlnév = elem.substring(pozíció+1); StringBuilder html = new StringBuilder(); //visszaadott HTML felépítése html.append("

"); html.append( //Nagykezdőbetűs listafejléc generálása az elemnévből Character.toUpperCase(elemnév.charAt(elemnév.indexOf('.')+1))); html.append(elemnév.substring(elemnév.indexOf('.')+2)); html.append(":
"); html.append(""); html.append(részletek); //utána esetleges magyarázó szöveg megjelenítése html.append("
\n"); return html.toString(); //generált HTML visszaadása } }