Struts Wiki a Struts Catalog
Vývojáři Struts si před časem pořídili oficiální Strutsí Wiki web (nevíte-li, co to takové "wiki" vlastně je, dozvíte se to na Wikipedii nebo v češtině třeba na weblogu Mraveniště).
Z publikovaných informací si dovolím vypíchnout Struts catalog — přehled Strutsích Design Patterns a sem tam i vyslovených Best Practices. Pro každého vývojáře ve Strutsech nezbytný zdroj informací, samozřejmě až na ty, kteří si dané informace našli jinde či k nim dokonvergovali vlastními mentálními silami. A pro ty vlastně taky, protože Wiki je živý web a Strutsí Wiki rychlým tempem narůstá.
Java pro špunty
Jednou se za jedním Java-pedagogem přiřítil jeho 10-ti letý syn a oznámil mu, že se chce naučit programovat, aby mohl psát počítačové hry. A protože žádná literatura pro takovouto cílovou skupinu nebyla k mání, nezbylo mu, než napsat knihu vlastní — Java Programming for Kids, Parents and Grandparents.
Pár postřehů z výuky a ukázek z knihy najdete v článku Even Younger Kids Can Learn Java na www.sys-con.com.
DocBook a Java třída
DocBook je užitečný nástroj na psaní dokumentace. Jeho DTD pamatuje na všeliké zvláštnosti, kterými se vyznačují programátorské příručky a dokumentace — názvy tříd, metod, souborů, příklady, kusy kódu, atd. Tím se ale také dostáváme k hlavní nevýhodě DocBooku. Je hrozně složitý a psát ho jen tak v ruce (tedy ve vim, nebo jEditu) je pěkná fuška. Abych si to alespoň trochu usnadnil, napsal jsem si prográmek, který jako argument bere jméno třídy (interface), a pro všechny její metody vygeneruje její popis v DocBooku. Následuje ukázka popisu metody "containsAll" z interface "java.util.Collection".
<methodsynopsis>
<type>boolean</type>
<methodname>containsAll</methodname>
<methodparam><type>java.util.Collection</type></methodparam>
</methodsynopsis>
Nepochybuju o tom, že je podobná utilitka už někým napsaná. Verze, kterou vám níže předkládám je tak minimalistická jen jen bylo únosné, nějaké ostré nasazení a stovky ušetřených hodin se nedají očekávat. Navíc si neumí poradit s návratovou hodnotou nebo parametrem typu Array.
Berte ji tedy, prosím, jednak jako ukázku užití reflexe a jednak jako motivaci pro studium DocBooku.
import java.lang.reflect.*;
public class ClassToDocbook {
public static void main(String [] args) throws ClassNotFoundException {
if (args.length!=1) {
System.err.println("Usage: java ClassToDocbook classname");
}
Class toAnalyze = Class.forName(args[0]);
Method[] allMethods = toAnalyze.getMethods();
for (int a=0; a<allMethods.length; a++) {
printMethod(allMethods[a]);
System.out.println();
}
}
private static void printMethod(Method method) {
System.out.println("<methodsynopsis>");
Class returnType = method.getReturnType();
if (returnType.equals(Void.TYPE)) {
System.out.println("\t<void/>");
} else {
System.out.println("\t<type>"+returnType.getName()+"</type>");
}
System.out.println("t<methodname>"+method.getName()+"</methodname>");
Class[] parameters = method.getParameterTypes();
for (int a=0; a<parameters.length; a++) {
System.out.println("\t<methodparam><type>"+parameters[a].getName()+"</type></methodparam>");
}
System.out.println("</methodsynopsis>");
}
}
Updated: Zdá se, že jsem nesrozumitelný, tedy ještě drobné dovysvětlení. Uvedený postup samozřejmě nesupluje funkci javadocu, uplatnění najde především při psaní delších vysvětlujících textů a analýz, ve kterých právě budete (při použití DocBooku) potřebovat výše zmíněné XML konstrukce.