Suite a une petite question de Paul : comment bien visiter les différents éléments d'un modèle, avoir des actions (optionnelles) suivant le type des objets visités, mais de manière propre, sans aller faire du instanceof dans tous les coins. La réponse propre est le pattern visiteur présenté dans le GOF, mais cela demande a avoir une méthode accept sur les objets de modèle, et on ne va pas s'amuser a modifier la génération EMF quand même.
EMF propose donc un autre objet généré en parallèle : le Switch. Il s'agit d'une classe parametrée générée par EMF dans le modèle, et permettant d'associer un traitement a chaque type du modèle. Pour l'utiliser, c'est simple : on la dérive et on surcharge les méthode caseXXXXX qui correspondent aux classes pour lesquelles on a un traitement a réaliser.
Le paramétrage permet d'associer un type de retour unifié au traitement, typiquement pour utiliser le switch comme une factory unifiée, avec un type de classe a instancier par classe du modèle. C'est même utilisé par EMF pour créer les différents adapters pour chaque type d'objet.
Pour un exemple, je propose un compteur pour l'ExtLibrary livrée avec Eclipse modelling. Je dérive donc l'EXTLibrarySwitch en surchargeant les cas que je veux compter : les livres, les cassettes, et tous les objets louables.

Enfin, il ne reste plus qu'a l'appeler dans le contexte d'une commande, avec un gros vrac d'objets :

C'est ainsi que l'on visite des objets de manière propre avec EMF, en laissant EMF gérer la quicaillerie qu'il adore générer tout seul.
Je vous ai mis le projet d'exemple dans un petit coin : TestEmfSwitch.zip