Exemple : Définition de templates pour extraire les descriptions de message

Nous allons générer des descriptions sous forme de texte pour les messages dans le diagramme, en fournissant pour chaque message le nom de l'émetteur, du message et du destinataire. Pour ce faire, nous allons devoir définir un template en utilisant le GTL (Generation Template Language, langage de génération par template) de PowerAMC afin d'extraire les informations et un fichier généré pour contenir et afficher les informations extraites.

Pour pouvoir générer ce texte de description, nous allons devoir extraire des informations de la métaclasse Message (pour extraire le numéro d'ordre du message, son nom, l'émetteur et le récepteur) et de la métaclasse CommunicationDiagram (pour rassembler tous les messages de chaque diagramme et les trier)

  1. Pointez sur la catégorie Profile, cliquez le bouton droit de la souris, puis sélectionnez Ajouter des métaclasses pour afficher la boîte de dialogue Sélection de métaclasses, sélectionnez CommunicationDiagram et Message sur l'onglet PdOOM et cliquez sur OK pour les ajouter au fichier d'extension.
  2. Pointez sur la catégorie Message, cliquez le bouton droit de la souris, puis sélectionnez Nouveau > Template pour créer un template sous la métaclasse.
  3. Saisissez description dans la zone Nom, puis saisissez le code de langage de génération par template suivant dans la zone de texte :
    .set_value(_tabs, "", new)
    .foreach_part(%SequenceNumber%, '.')
       .set_value(_tabs, "   %_tabs%")
    .next
    %_tabs%%SequenceNumber%) %Sender.ShortDescription% envoie le message "%Name%" à %Receiver.ShortDescription%

    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 d'ordre, et en ajoutant 3 espaces chaque fois qu'il trouve un point. La dernière ligne utilise cette variable afin de réaliser l'indentation, de mettre en forme et d'afficher des informations extraites pour chaque message.

  4. Pointez sur la catégorie CommunicationDiagram, cliquez le bouton droit de la souris puis sélectionnez Nouveau > Template pour créer un template sous la métaclasse.
  5. Saisissez compareCbMsgSymbols dans la zone Nom, puis saisissez le code de langage de génération par template suivant dans la zone de texte :
    .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 un second template.

  6. Pointez sur la catégorie CommunicationDiagram, cliquez le bouton droit de la souris puis sélectionnez Nouveau > Template pour créer un second template, et saisissez description dans la zone Nom, puis saisissez le code de langage de génération par template suivant dans la zone de texte :
    Scénario de collabotation de %Name% :
    \n
    .foreach_item(Symbols,,, %ObjectType% == CollaborationMessageSymbol, %compareCbMsgSymbols%)
      %Object.description%
    .next(\n)

    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 afin de mettre en forme et générer les informations relatives au message.



  7. Cliquez sur Appliquer pour enregistrer vos modifications avant de continuer.
    Pour obtenir des informations détaillées sur les templates et le GTL, voir Templates (Profile) et Personnalisation de la génération à l'aide du langage de génération par template.