Freemarker est un outil formidablement puissant qui permet de générer des fichiers à l’aide de templates (.ftl). Dans le cas d’une application s’appuyant sur des services en J2EE il devient alors aisé avec un peu de connaissance en intropsection JAVA de générer les classes Flex (interfaces CRUD et objets métier).
Comment procéder ?
Je préconise l’utilisation d’une target Ant qui va parcourir un package (celui où se trouve les POJOs JAVA), récupérer les getter/setter de chaque class et générer les objets Flex. Les templates Flex peuvent être réalisées directement sous Flash Builder.
Quelques lignes de code utiles :
La class de génération de vo :
public class FlexGenerator { private static Configuration cfg; static { cfg = new Configuration(); try { cfg.setClassForTemplateLoading(PdfGenerator.class, "/templates/flex"); cfg.setEncoding(Locale.FRENCH, "UTF-8"); } catch (Exception e) { e.printStackTrace(); } cfg.setObjectWrapper(new DefaultObjectWrapper()); } public FlexGenerator() { // ... } public void process(OutputStream os, Map params, String path) { try { Template temp = cfg.getTemplate("vo.ftl"); temp.process(params, new FileWriter(new File(path))); } catch (Exception e) { e.printStackTrace(); } } }
On peut récupérer l’ensemble des class d’un package grâce au class loader, on trouve des snippets sur le net.
Exemple de code pour récupérer les getters d’un POJO :
public static Method getGetters(Object object) { try { Method[] methods = object.getClass().getMethods(); Object result = object.getClass().newInstance(); for (Method method : methods) { if (isGetter(method)) //on ajoute cette variable à notre template params.put(unCapitalize(method.getName().substring(3)), method.getReturnType().toString()); } } catch (Exception e) { e.printStackTrace(); } return null; } public static boolean isGetter(Method method) { return (method.getName().startsWith("get") && !(method.getParameterTypes().length != 0) && !(void.class.equals(method.getReturnType())) ); } private static String unCapitalize(String s) { if (s != null && s.length() != 0) return s.substring(0, 1).toLowerCase() + s.substring(1); else return ""; }
On trouve sur internet beaucoup d’exemples pour le langage de templetage de freemarker. S’inspirer des templates utilisées par hbm2java peut être un bon point de départ pour ceux qui ne connaissent pas. L’exemple n’est volontairement pas complet mais grâce à ces quelques bouts de code on peut monter son propre générateur de code en moins d’une heure.
Articles sur le même sujet :

Commentaires