• Aucun résultat trouvé

8.4 Description de l’architecture de GyTUNe

8.4.1 Common

C’est dans cette partie que nous implantons toutes les fonctionnalités qui seront com- munes aux différents environnements de méta-modélisation (gestions des projets, sauve- garde, sélection d’un élément dans un éditeur, déplacement d’un élément . . . ). Ces fonc- tionnalités sont implantées dans les composants ProjectManager et DrawingArea. Com- mon contient également la définition de tous les types de composants que l’utilisateur utilisera dans la partie spécifique, l’implémentation de toutes les interfaces de contrôle ainsi que des interfaces métiers que devront implémenter les composants définis dans la partie spécifiques.

ProjectManager

Le composant ProjectManager est le composant directement lié au composant princi- pal GyTUNe qui permettra de démarrer l’application GyTUNe (Cf. Figure8.5). C’est un

8.4. DESCRIPTION DE L’ARCHITECTURE DE GYTUNE 92 composant primitif de type ProjectManagerType (Figure8.6) qui fournit une interface r de type runnable permettant de démarrer l’application. Le projectManager est chargé de tout ce qui est lié à la gestion des projets dans un environnement de méta-modélisation ainsi que de la création de tout l’environnement graphique (fenêtres, menus . . . ) autre que les zones d’édition des DSLs ou des modèles. Le projectManager va notamment im- planter les fonctions de gestions de projets telles que la création d’un nouveau projet, sauvegarde/ouverture d’un projet, suppression de projets . . .

FIGURE8.6 – ProjectManagerType

DrawingArea

Le DrawingArea fait le lien entre la partie générique et la partie spécifique. Il implante toutes les fonctionnalités génériques des éditeurs de méta-modèles (niveau M2) et de mo- dèles (niveau M1), et il requiert des services de la partie GyTUNe specific pour mettre en œuvre tout ce qui doit être spécialisé dans l’environnement de méta-modélisation. C’est un composant de type DrawingAreaType (Figure8.7) qui permet de gérer les éditeurs de méta-modèles et de modèles. Un éditeur est la partie de l’environnement où l’on peut ef- fectivement créer un DSL (éditeur de DSLs) ou créer un modèle (éditeur de modèles). Le DrawingAreafournit une interface EditorItf qui définit toutes les méthodes nécessaires à la gestion des éditeurs. Cette interface qui est représentée à la Figure 8.8 définit par exemple les méthodes getEditor, findEditor et removeEditor qui sont implantées dans le DrawingArea pour la création, la recherche et la suppression d’un éditeur. Le Drawin- gAreaimplante également plusieurs fonctionnalités graphiques nécessaires à un environ- nement d’édition de méta-modèles ou de modèles. Notamment la sélection d’un élément lorsqu’un l’utilisateur clique sur cet élément, le déplacement d’un élément dans la zone de dessin, la création d’une table de propriétés pour chaque élément . . . Enfin, le Drawin- gArea implante dans chaque éditeur de méta-modèle, un éditeur de dessins permettant d’assigner une représentation graphique à un élément d’un méta-modèle. Représentation qui sera utilisée au niveau modèle si aucune représentation par défaut n’a pas été fournie (au niveau M3) par l’expert en développement pour le niveau M1.

FIGURE8.8 – editor-itf

Nous pouvons résumer le rôle du ProjectManager et celui du DrawingArea ainsi : le ProjectManager construit un environnement permettant de gérer des projets qui font intervenir des éditeurs, ces éditeurs sont implantés par le composant DrawingArea, et le contenu de ces éditeurs ou encore l’ensemble des opérations spécifiques qu’il est possible d’effectuer dans ces éditeurs est défini par l’utilisateur dans la partie spécifique.

Définition des types de composants

Dans la partie Common, nous définissons les types des composants que l’expert en dé- veloppement qui intervient au niveau M3 pourra créer. Concrètement un type correspond à un ensemble d’interfaces métiers que chaque composant de ce type doit posséder. Cela permet de savoir exactement quels sont les services fournis et requis par un composant. Les types de composants et les interfaces métiers qu’ils définissent sont liés à une partie précise d’un langage dédié.

Le type AbstractSyntaxType représenté à la Figure8.9.

– Rôle : permet de définir des composants qui représentent les concepts du langage de méta-modélisation. L’ensemble de ces concepts constitue la syntaxe abstraite ; – Principale interface : chaque composant de type AbstractSyntaxType fournit une

interface serveur appelée Concept qui permet de le connecter au composant Dra- wingArea. C’est par cette interface que le DrawingArea accède aux différents concepts du langage et construit la palette de l’éditeur de méta-modélisation dédié correspon- dant.

8.4. DESCRIPTION DE L’ARCHITECTURE DE GYTUNE 94

FIGURE8.9 – AbstractSyntaxType

Le type ConcreteSyntaxType

– Rôle : permet de définir les composants qui implantent la syntaxe concrète du lan- gage ;

– Principale interface : tous les composants de ce type fournissent une interface appelée ConcreteItf ;

– Quelques méthodes : l’interface ConcreItf est représentée à la Figure 8.10. Les méthodes définies dans cette interface permettent d’implanter une représentation et un comportement graphiques pour un concept. Premièrement, un concept peut être un objet ou une liaison (au sens UML). La méthode isLink() qui renvoie un booléen permet de savoir si un concept est une classe ou une liaison. Dans le cas où c’est une classe, c’est la méthode getRepresentation() qui sera appelée par le DrawingAreapour obtenir la représentation de ce concept au niveau méta-modèle. Cette méthode ne prend pas de paramètres et renvoi un JPanel que le DrawingA- reapourra afficher et manipuler dans sa zone dessin. Dans le cas où le concept est une liaison, c’est la méthode getLinkRepresentation qui sera appelée par le Dra- wingAreapour obtenir la représentation du concept au niveau méta-modèle. Cette méthode prend en paramètre les coordonnées du point de départ de la liaison à des- siner, les coordonnées du point d’arrivée ainsi qu’une référence à l’objet Graphics utilisé par le DrawingArea. Référence que l’utilisateur peut alors utiliser pour des- siner sa liaison comme il le souhaite. Les méthodes isModelLink(), getModelRepre- sentation(), getModelLinkRepresentation font respectivement la même chose que isLink(), getRepresentation() et getLinkRepresentation mais pour le niveau M1. Si la méthode getModelRepresentation() n’est pas implantée dans la partie GyTUNe specific, l’utilisateur qui définit un méta-modèle pourra se servir de l’éditeur de des- sins fourni par le DrawingArea pour assigner une représentation graphique pour le niveau M1. On voit ainsi que la syntaxe concrète d’un concept définit les représen- tations graphiques aux niveaux M2 et M1.

Le type SemanticType

– Rôle : permet de définir les composants qui implantent la sémantique du langage ; – Principale interface : Ces composants fournissent une interface appelée Semanti-

cItf qui définit toutes les méthodes permettant de valider la création, la modification ou la suppression d’un élément dans un éditeur ;

– Quelques méthodes : l’interface SemanticItf est représentée à la Figure8.11. Cette interface définit par exemple une méthode isConnectable(Element from, Element to) qui est appelée par le DrawingArea dans le cas où le concept qu’il manipule est une

FIGURE 8.10 – ConcreteItf

liaison. Cette méthode permet d’autoriser ou non cette liaison entre deux éléments from et to. L’interface SemanticItf définit également les méthodes validateCrea- tion, validateModification, validateRemove qui sont appelées par le DrawingArea lorsqu’un concept est créé, modifié ou supprimé. Elles permettent de vérifier les contraintes liées à ce concept.

FIGURE 8.11 – SemanticItf

Toutes les interfaces métiers (EditorItf, Concept, ConcreteItf, SemanticItf ) sont définies dans la partie Common de GyTUNe. Elles définissent un panel de méthodes qui repré- sentent autant de possibilités d’adaptation de l’environnement de méta-modélisation. Le cas échéant, l’utilisateur peut rajouter des méthodes dans une interface et utiliser ces mé- thodes au niveau du DrawingArea.

Gestion des propriétés

Dans un modèle comme dans un méta-modèle, on a besoin de gérer les propriétés des concepts qu’on manipule. Ce sont des attributs à qui on peut attribuer des valeurs et qui

8.4. DESCRIPTION DE L’ARCHITECTURE DE GYTUNE 96 correspondent à des caractéristiques spécifiques. Le DrawingArea fournit un support pour éditer ces propriétés, mais également pour en rajouter. Ces propriétés peuvent être définies au niveau M3. Mais elles peuvent également être définies au niveau M2 pour les éléments des méta-modèles.