Rss Feed

Génération d’objets et interfaces Flex avec Freemarker

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.

Partager :
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • Blogplay
  • LinkedIn
  • Technorati
  • Twitter

Articles sur le même sujet :

  1. SOAP Rails+Flex et objets typés
  2. Exposer ses services avec BlazeDS et Axis2 grâce à Spring

Laisser un commentaire

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word