Hello les gens,

Je poste ici car j'ai une grosse interrogation sur comment gérer proprement la navigation aux travers des différents écrans d'une application orientée IHM (Swing, SWT…).

Au début du monde, j'ai (comme tout le monde) commencé par les tutos standards Swing, avec quelques écrans qui s'enchaînent, et le gros code ad-hoc qui va avec.

En environnement pro, j'ai vite été amené à gérer des cas plus tordus, avec des dizaines voire des centaines d'écrans différents, gérer les cas de saisie erronées qui ramènent en arrière avec les données pré-saisies, de l'assistance à l'utilisateur qui shunte des étapes si les données saisies le permettent ou qui alerte l'utilisateur en cas de danger, etc.
Le code spaghetti précédent est vite devenu imbouffable et inmaintenable, et j'ai très vite mis en place une machine à états simpliste pour gérer tout ça.
J'ai ainsi pu mettre en route une grosse appli avec plus de 180 écrans et plusieurs milliers de transitions possibles sans trop de prise de tête et de manière assez flexible et évolutive.

Aujourd'hui, je me retrouve à monter encore d'un niveau, avec une application multi-profil / multi-projet / multi-utilisateur, avec du comportement différent sur chaque bouton fonction de l'utilisateur connecté, des fonctionnalités plus ou moins disponibles fonction du profil…
J'ai voulu améliorer ma machine à états précédente, mais j'ai vite déchanté devant l'ampleur de la tâche… Machines à états imbriquées, changements d'états contextuels, gestion de l'historique de navigation, passage de paramètres / contextes entre états et entre machines à états…
Bref, une véritable horreur et d'une complexité / généricité extrème.

D'habitude en Java, le code non-métier, on a tendance à ne pas avoir à le coder, les bibliothèques tierces font déjà tout le travail à notre place, et généralement bien mieux que ce qu'on serait capable de coder nous-même.
Naturellement, je me dirige donc vers le web, et là… le drame !
On est à poil sur la gestion de la navigation dans les IHM ou j'ai raté un truc ???

Pas une seule librairie de gestion d'IHM digne de ce nom.
En particulier pas de bibliothèque de gestion de machines à états.
Ou pas assez avancée pour de l'IHM un minimum couillue (pas d'états imbriqués, pas de transfert de contexte…).
Ou extrèmement trop intrusive dans le code pour être utilisable dans un contexte IHM (génération de code, interface / classe abstraite obligatoire…).
Ou ne tenant pas compte d'impératifs techniques tierces (gestion / propagation des transactions hibernate…).
Quand ce n'est pas tout simplement un truc totalement pas maintenu ou avec 1 seul commit « Init SCM »…

Au niveau web, pas mal de design pattern (MVC, REST…) ou de framework (Spring webflow) disponibles pour gérer tout ça assez proprement.
Idem au niveau pur SI (BPEL, BPM…) sans intéraction temps réelle avec l'utilisateur
Mais au niveau IHM intéractive en général et Swing en particulier, rien, nada, keutchi*!

D'où mes grandes questions :
— Mais comment qu'elles font, les grosses IHM type Eclipse ou les bonnes vielles applis de gestion IHM d'avant l'avènement du web ?
— Est-ce que je rate un design pattern ou un framework ? Qu'est-ce que vous utilisez pour gérer une IHM un poil tordue ?

Voilà, si vous pouviez m'aider sur le sujet, je vous suis toute ouïe.
Merci d'avance !