Un peu de philosophie... Dans les sources de JSesh, on trouve actuellement un petit framework applicatif (org.qenherkhopeshef.guiFramework). Celui-ci a été créé avec dans l'idée de disposer d'un système simple, indépendant de tout IDE, pour créer des applications multilingues.

Dans ce framework, l'exécution des actions est déléguée à un objet de type façade. Je me base sur une classe proposée dans un article de Hans Muller sur java.net. Cette classe, BundledAction, représente une action

  • dont les propriétés (label, raccourci, icônes...) sont initialisées à partir d'un objet de type AppDefault (qui récupère des propriétés multilingues)
  • dont l'exécution est déléguée à un objet façade, la méthode à appeler étant décrite dans les propriétés.

Le tout ne fonctionne pas trop mal. Vous pouvez jeter un œil à une petite application de démo dans org.qenherkhopeshef.guiFramework.demo.simple. Le système permet de configurer assez simplement les actions, et gère leur activation.

Cependant, j'étais bloqué pour le passage à l'échelle... dans mon application réelle (JSesh, quoi), j'avais plusieurs actions déjà écrites (et de plus, le système de délégation multiplie le nombre de méthodes de la façade au delà du raisonnable). Ces action préexistantes me posaient bien évidemment un problème.

Le framework de JHotdraw, quant à lui, gère différemment l'initialisation des actions. Il met en place une classe ResourceBundleUtil, et un simple appel

  DoSomethingAction myAction= new DoSomethingAction();
  ResourceBundleUtil.getBundle("jsesh.jhotdraw.labels").configureAction(myAction, "edit.doSomething");

permet d'initialiser les propriétés de l'action à partir du fichier de propriétés (ici jsesh.jhotdraw.labels.properties).

Cette approche est bien meilleure du point de vue de la modélisation. En effet, la BundledAction de tout à l'heure a deux caractéristiques orthogonales : la manière dont elle s'exécute d'une part, et la manière dont elle est initialisée d'autre part.

Le ResourceBundleUtil permet d'initialiser n'importe quelle action, sans demander qu'elle implémente un type particulier.

Next Post Previous Post