Lorsqu'il s'agit de construire des IHM, la problématique de binding (uni ou bi directionnel) avec les objets à présenter, voire la génération automatique de leur représentation, est rapidement au centre du débat.
Selon la techno utilisée pour construire l'IHM des solutions existent souvent et remplissent tout ou partiellement cette tâche. Cependant s'il existe un domaine dans lequel GWT n'excelle pas (encore), c'est bien celui-là. La faute à plusieurs facteurs : - Google ne fournit pas (encore?) de moyens simples dans l'API pour y arriver - L'API Reflection fait cruellement défaut pour remplir cette tâche de façon aisée - C'est une problématique assez complexe qui nécessite de trouver un savant équilibre entre personalisation possible (par exemple laisser un controle possible sur la façon de transtyper des données via des "type converters" ) et simplicité de mise en oeuvre (car à la base c'est le but de simplifier les choses).
Cependant le gain apporté par ces solutions est tellement évident qu'inévitablement des personnes se sont penchées sur ce manque pour le combler.
Parmi les solutions commençant à apparaitre pour GWT, je voulais en mettre une en avant aujourd'hui. Il s'agit de Metawidget (http://www.metawidget.org). Elle a été présentée recemment sur TSS et méritait un écho ici.

Metawidget se définit comme un outil de mapping objets <-> IHM. L'atout majeur d'un tel outil est sa capacité à introspecter des objets et en construire une représentation graphique. Sa particularité est de pouvoir générer des IHM selon différentes technologies comme : Swing, JSF, Struts, Android et tout recemment GWT. Cela en fait un outil interessant car polyvalent.
Metawidget utilise une approche assez intelligente, et surtout très pragmatique, pour introspecter les objets pour GWT. Ce dernier ne rend pas possible la reflection coté client ? Qu'à cela ne tienne : le serveur va s'en charger ! L'idée sous-jacente est de proposer - de façon transparente - un service dédié à l'introspection en "remote" des objets du modele ; objets dont la particularité avec GWT est d'exister tant coté client (en équivalent Javascript) que coté serveur... (en Java donc). C'était une idée toute simple et efficace, conforme au principe bien connu et éprouvé : "keep it simple, stupid" ! ;-)
Pour détailler un peu le fonctionnement de Metawidget, voici quelques éléments important caractérisant cet outil : - Metawidget s'articule autour de 2 concepts majeurs : les Metawidgets et les Inspectors. Les premiers auront la responsabilité de générer la représentation dans la techno retenue (des MetaWidgets existent pour chacune), tandis que les Inspectors sont chargés d'extraire les informations des objets du modele à présenter (et ce selon différentes stratégies représentées par différentes implémentations comme les *AnnotationInspectors, le PropertyTypeInspector, l'HibernateValidatorInspector, l'XMLInspector...). - les Inspectors peuvent se completer les uns avec les autres pour obtenir une description la plus détaillée possible de l'objet. Ils peuvent aussi etre totalement personnalisés : il est possible d'écrire sa propre implémentation. - la personalisation du rendu par surcharge ou ecriture de MetaWidgets est aussi rendue possible. Vive le design par interface ! ;-) - le support des "datatypes converters" est présent et il est très simple d'ecrire ses propres convertisseurs.
A plus d'un titre cet outil mérite d'être considéré, même si encore jeune (les premières versions remontent à début 2008) et pas encore assez connu.
Si vous souhaitez aller plus loin, voici le lien : (http://www.metawidget.org)
