Table of contents
Définition des templates pour extraire les descriptions de message
Afin de générer des descriptions sous forme de texte pour les messages du diagramme nous avons définit un template en utilisant le GTL (Generation Template Language, langage de génération par template).
Le code suivant permet d’extraire les informations des métaclasses :
- Message – permet d’extraire le numéro d’ordre du message, son nom, l’émetteur et le destinataire
- Diagramme de communication – pour rassembler tous les messages de chaque diagramme et les trier en ordre croissant
Résultat :
Scénario de collaboration => Diagramme de communication: 1) L'objet Acteur 'Client' envoie le message "Demande de cotation" à l'objet Interactif 'Navigateur Internet' 2) L'objet Interactif 'Navigateur Internet' envoie le message "Requête demande de cotation" à l'objet Contrôle 'Serveur applicatifs' 3) L'objet Contrôle 'Serveur applicatifs' envoie le message "Requête de lecture de la cotation" à l'objet Entité 'Serveur de base de données' 4) L'objet Entité 'Serveur de base de données' envoie le message "Valeur de la cotation" à l'objet Contrôle 'Serveur applicatifs' 5) L'objet Contrôle 'Serveur applicatifs' envoie le message "Valeur de la cotation" à l'objet Interactif 'Navigateur Internet' 6) L'objet Interactif 'Navigateur Internet' envoie le message "Affiche la cotation" à l'objet Acteur 'Client'
Voici le code des templates de messages afin d’obtenir le résultat ci-dessus.
CommunicationDiagram=>Templates=>description
Scénario de collaboration => %Name%: .foreach_item(Symbols,,, %ObjectType% == CollaborationMessageSymbol, %compareCbMsgSymbols%) %Object.description% .next( )
La première ligne de ce template est utilisée pour générer le titre du scénario à l’aide du nom du diagramme de communication. Puis la macro .foreach_item boucle sur chaque symbole de message, et appelle les autres templates (Message=>Templates=>description et CommunicationDiagram=>Templates=>compareCbMsgSymbols) afin de mettre en forme et générer les informations relatives au message
Message=>Templates=>description
.set_value(_tabs, "", new) .foreach_part(%SequenceNumber%, '.') .set_value(_tabs, " %_tabs%") .next %_tabs%%SequenceNumber%) L'objet %Sender.ShortDescription% envoie le message "%Name%" à l'objet %Receiver.ShortDescription%
Note : La première ligne du template initialise la variable « _tabs », et la macro « foreach_part » calcule le montant d’indentation approprié en bouclant sur chaque numéro de séquence, et ajoute 3 espaces (tab) chaque fois qu’il trouve un point. La dernière ligne utilise cette variable afin de réaliser l’indentation, la mise en forme et l’affichage des informations extraites pour chaque message.
CommunicationDiagram=>Templates=>compareCbMsgSymbols
.bool (%Item1.Object.SequenceNumber% >= %Item2.Object.SequenceNumber%)
Ce template renvoie une valeur booléenne pour déterminer si un numéro de message est supérieur à un autre, et le résultat est utilisé dans le template « CommunicationDiagram=>Templates=>description »