urbanisation-si.com

urbanisation-si.com

Tutorial Obeo Designer Community : comment concevoir son propre outil de modélisation DMN ? [3/4]

Avec la plate forme Obeo Designer Community ( open source ), nous avions intégré le métamodèle Ecore de DMN ( Domain Model and Notation ), puis à partir de celui-ci, nous avions instancié un modèle DMN ( Demande de prêt ). Nous avions le son mais pas encore l'image. Voici qui est chose faite, avec cet article qui montre comment construire un outil pouvant représenter visuellement un modèle DMN et tant qu'à faire en respectant la norme.

 

DMN-tutorial-obeo-designer-decisions-inputdata-relation-information-requirement.PNG

  

Le premier article rappelait les notions de métamétamodèle Ecore :

 

 

Le précédent article décrivait l'intégration du métamodèle DMN avec Ecore en utilisant Obeo Designer Community et l'utilisation de l'outil pour créer un modèle Ecore DMN non visuel. Vous y trouverez à la fin en annexe le fichier source DMN Ecore de référence. 

 

 

Le fichier source du modèle DMN de la demande de prêt se trouve en annexe à la fin de cet article.

 

Le plus compliqué dans cette histoire, ce n'est pas de comprendre ces histoires de métamétamodèle, ni d'assimiler la sémantique des concepts de DMN, non, le plus difficile c'est d'avoir les images des éléments de la notation au bon endroit et de gérer correctement leur affichage et d'éviter l'affichage d'autres icônes parasites qui seraient contraire à la norme.

 

Comme son nom l'indique, DMN est une notation, pour construire un outil de modélisation il faut se fabriquer les artefacts de modélisation.

Pour faire simple, répérer les 2 images ci-dessous, puis avec Paint, découper les éléments de notation en effaçant les libéllés à l'intérieur et sauvegarder chaque élément dans un fichier ( de type jpeg par ex. ) dans un répertoire icons.

 

Images pour récupérer les éléments de modélisation DMN

dmn-elements-modelisation-11_1.PNG

dmn-elements-modelisation-11_2.PNG

 

Voici l'aspect du contenu des fichiers images représentant les principaux éléments de modélisation DMN :

 

DMN-fichiers-elements-de-modelisation.PNG

 

Pour lier ces fichiers aux différents éléments de modélisation DMN dans Obeo Designer, il faut les inclure dans un jar ( une blibliothèque Java archive ) accesible de l'Ouil. 

Par exemple dans le répertoire d'installation :

  • ObeoDesigner-Community\plugins

 

Ouvrir avec WinZip ou WinRAR ou ... le fichier :

  • org.eclipse.sirius.samples.family_4.1.1.201610251427.jar

 

Une fois l'archive ouverte, aller dans le répertoire :

  • samples\org.eclipse.sirius.sample.basicfamily.edit\icons\full\obj16

 

Ajouter à cet endroit le contenu du répertoire icons avec vos fichiers représentant les éléments DMN.

 

DMN-archive-images-obeo-designer-community.PNG

 

Reprendre l'article précédent, exécuter Obeo Designer, ouvrit le projet Ecore Modeling, nommé com.urbanisationSI.dmn.dmnEcore.

Dans model - double clic sur dmnEcore.genmodel - dans la vue Properties, mettre Creation Icons à false

 

Double cliquer sur le diagramme dmnEcore situé sous le package DMN du fichier dmnEcore.ecore

Clic droit - Generate All

 

Mauvaise nouvelle, le plugin com.urbanisationSI.dmn.dmnEcore.edit généré et qui est l'éditeur pour générer des objets DMN ( des décisions, ... ), contient des icônes par défaut représentant les classes DMN et qui vont s'afficher en plus de nos images personnalisées.

 

DMN-icones-editeur-ecore.PNG

 

La bonne nouvelle, c'est qu'on peut les neutraliser en reprenant les fichiers gif avec Paint ( qui se révèle ici être l'outil primordial ) et en remplaçant le contenu par un petit rectangle blanc ( sinon mettre une texture transparente mais on s'égare du sujet ).

 

DMN-apercus-icones-editeur-ecore.PNG

 

Dans le répertoire ...\com.urbanisationSI.dmn.dmnEcore.edit\icons\full\obj16, modifier les icônes, voici le résultat :

 

DMN-apercus-apres-icones-editeur-ecore.PNG

 

Exécuter le plugin : sélectionner com.urbanisationSI.dmn.dmnEcore.edit - clic droit - Run As - Run Configuration - Eclipse Application - clic droit - New - nommer la configuration par ex. DMN Ecore edit et à condition d'être en Java 8, laisser toutes les options par défaut - Apply - Run

 

Nous avions traité le mode opératoire d'Obeo Designer dans les 3 articles suivants ( repris du reste sur le site d'Obeo ) :

 

  1. Ingénierie Dirigée par les Modèles : fini Eclipse GMF, vive Eclipse Sirius ( didacticiel / tutoriel Sirius)
     
     
  2. Didacticiel ( tutoriel ) Eclipse Sirius ( Obeo Designer Community ) : le digne successeur de GMF le framework le plus complexe du monde !
     
  3. Didacticiel ( tutoriel ) Eclipse Sirius ( Obeo Designer Community ) : on peaufine l'éditeur de diagramme
     

Un nouveau runtime d'Obeo Designer se lance.

Nous allons créer un nouveau modeling project et utiliser le wizard pour créer des objets DMN. 

  • Dans la nouvelle fenêtre "runtime-DMNEcoreedit - Modeling - Obeo Designer Community", fermer l'onglet "Welcome"
  • File - New - Modeling Project - Name =  com.urbanisationSI.dmn.dmnEcore.demandeDePret - Finish
  • Cliquer sur le projet créé - clic droit - New - Other - dans la fenêtre Wizard, ouvrir "Example EMF Model Creation Wizards" - cliquer "DmnEcore Model" - Next - File Name = demandeDePret.dmnecore - Next - Model Object = sélectionner dans la liste "Definitions" qui correspond à un conteneur de haut niveau dans le métamodèle DMN et qui permet de créer à l'intérieur des "Decision", "BusinessKnowledgeModel", "InputDate", "KnowledgeSource", ... - Finish

 

Et c'est où les athéniens atteignirent, sous le fichier demandeDePret.dmnecore, la racine Definitions ne doit pas avoir d'icône :

 

DMN-runtime-ecore-edit.PNG

 

Après ces longues et fastidieuses tâches pas très passionnantes, nous arrivons enfin au véritable objectif de cet article, nous allons utiliser le plugin Sirius pour créer des outils graphiques. 

Pour cela il faut passer en perspective Sirius ( le plugin opensource intégré dans Obeo Designer ).

  • File - New - Viewpoint Specification Project - name = DMN.project.design - Next - Viewpoint Specification Model name = DMN.odesign - Finish
  • Dans le projet DMN.project.design - description - double clic DMN.odesign - onglet DMN.odesign - MyViewpoint - Properties - Id = DMNViewpoint

 

Créer un diagramme : clic droit sur DMNViewpoint - New Represantation - Diagram Description - Properties :

  • Onglet General - Id = DMNDiagram
  • Onglet Metamodels - Add from filesystem - sélectionner le répertoire ou vous avez mis bien au chaud le fichier contenant le métamodèle Ecore ( par ex. DMN.ecore ) 
  • Onglet General - Domain Class = saisir le package du métamodèle DMN c'est à dire DMN, taper le point, puis CTRL espace pour avoir l'auto completion, sélectionner dans la liste Definitions
  • Penser à sauvegarder de temps en temps.

 

Aouter le premier élément de modélisation dans le diagramme :

  • Clic droit sur Default - New Diagram Element - Node
  • Properties - Onglet General - Id = DecisionNode - Domain Class = DMN.Decision

 

Affecter l'icône fruit de votre harassant labeur précédent :

  • Clic droit sur DecisionNode - New Styme - Workspace Image
  • Properties - Image Path - clic sur  ... - Dans Plugins ( souvenez-vous, on a mis les fichiers images des éléments DMN dans l'archive du plugin org.eclipse.sirius.sample.family ), sélectionner :

 

DMN-obeo-designer-liste-images-icones.PNG

 

Pour utiliser ce début de diagramme dans notre projet com.urbanisationSI.dmn.dmnEcore.demandeDePret :

  • Clic droit sur le projet - Viewpoints Selection - sélectionner DMNViewpoint
  • Dans demandeDePret.dmnecore - Sélectionner Definitions - clic droit - New Representation - New DMNDiagram - demandeDePretDMNDiagram
  • Pour ouvrir le diagramme - double clic sur demandeDePretDMNDiagram sous Definitions
  • Un nouvel onglet s'ouvre vide. Eh oui, dans notre monde proche il n'y pas de génération spontanée d'objets.
  • Mais on se décarcasse, on a mis en annexe à la fin de cette article le fichier XMI correspondant au modéle Ecore de notre demande de prêt et en copiant son contenu dans demandeDePret.dmnecore on aura nos objets et leurs relations.
  • Sélectionner demandeDePret.dmnecore - clic droit - Open With - Test Editor - remplacer le contenu par celui de l'annexe.
  • Miracle revenez dans l'onglet du diagramme demandeDePretDMNDiagram, les objets de type  Decision sont bien la, ils sont juste tous superposés, vous pouvez les réarranger en les déplaçant à la souris.

 

Et voilà le boulot, c'est propre et de bon goût :

 

DMN-tutorial-obeo-designer-decisions.PNG

 

De la même manière, créer les autres node :

  • BusinessKnowledgeModelNode de type DMN.BusinessKnowledgeModel, n'oubliez pas d'affecter l'image. Vous devez voir apparaître les objets : BureauCallType et EligibilityRules
  • InputDataNode de type DMN.InputData, n'oubliez pas d'affecter l'image. Attention, quelque fois les images apparraissent petites, il faut les chercher dans le coin supérieur gauche et les agrandir ( cela peut se régler dans les propriétés ). Vous devez voir apparaître les objets : ApplicantData et RequestedProduct 
  • KnowledgeSourceNode de type DMN.KnowledgeSource, n'oubliez pas d'affecter l'image. Vous devez voir apparaître les objets : RiskManager et ProductSpecification

 

Voici le résultat :

 

DMN-tutorial-obeo-designer-objets-demande-de-pret.PNG

   

Juste pour terminer, ajoutons les InformationRequirement, relations entre des décisions ou entre des InputDate et des décisions :

Comme précédemment :

  • InformationRequirementNode de type DMN.InformationRequirement, n'oubliez pas d'affecter l'image.
  • Cliquer sur la flèche, vérifier dans Properties les objets liés et déplacer la flèche de manière à relier les objets correspondant. Bon je sais ce n'est pas très optimisé, mais cela ira pour un début.

Par exemple : 

 

DMN-tutorial-obeo-designer-relation-information-requirement.PNG

  

Voici donc une première partie de notre modèle DMN de demande de prêt :

 

DMN-tutorial-obeo-designer-decisions-inputdata-relation-information-requirement.PNG

 

 

Evidemment, le résultat est assez rudimentaire, il souffre de pas mal de lacunes, mais il nous a permis de comprendre le fonctionnement du plugin Sirius embarqué dans Obeo Designer Community.

La documentation est très bien faite, il vous reste encore à faire un petit effort pour la parcourir et étudier notamment le plugin Acceleo avec son langage AQL ( Acceleo Query Language ). 

 

Dans cet article, on a, pour simplifier et à des fins pédagogiques, implémenté les relations par des objets avec leurs images associées représentant des flèches.

C'est un bon début mais pas viable, la bonne solution se trouve dans l'article complet suivant :

 

Améliorations et notions avancées Eclipse Sirius, suite et fin de notre saga : comment concevoir son propre outil de modélisation DMN ? [4/4]

  

Rhona Maxwel

@rhona_helena

 

"La meilleure manière d'atteindre le bonheur est de le donner aux autres."

Robert Baden-Powell

  

 

Articles conseillés :

  

Didacticiel ( tutoriel ) Eclipse Sirius ( Obeo Designer Community ) : le digne successeur de GMF le framework le plus complexe du monde ! 

 

Didacticiel ( tutoriel ) Eclipse Sirius ( Obeo Designer Community ) : on peaufine l'éditeur de diagramme 

 

 

Annexe
Fichier source du modèle DMN de la demande de prêt

 

<?xml version="1.0" encoding="UTF-8"?>
<DMN:Definitions xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:DMN="http://www.omg.org/spec/DMN/20130901">
<drgElement xsi:type="DMN:Decision" name="Strategy">
<informationRequirement requiredDecision="//@drgElement.1"/>
<informationRequirement requiredDecision="//@drgElement.2"/>
</drgElement>
<drgElement xsi:type="DMN:Decision" name="BureauCallType" requiresInformation="//@drgElement.0/@informationRequirement.0">
<knowledgeRequirement requiredKnowledge="//@drgElement.3"/>
</drgElement>
<drgElement xsi:type="DMN:Decision" name="Eligibility" requiresInformation="//@drgElement.0/@informationRequirement.1">
<informationRequirement requiredDecision="//@drgElement.9"/>
<knowledgeRequirement requiredKnowledge="//@drgElement.4"/>
</drgElement>
<drgElement xsi:type="DMN:BusinessKnowledgeModel" name="BureauCallTypeTable" requiresKnowledge="//@drgElement.1/@knowledgeRequirement.0">
<authorityRequirement requiredAuthority="//@drgElement.5"/>
</drgElement>
<drgElement xsi:type="DMN:BusinessKnowledgeModel" name="EligibilityRules" requiresKnowledge="//@drgElement.2/@knowledgeRequirement.0">
<authorityRequirement requiredAuthority="//@drgElement.6"/>
</drgElement>
<drgElement xsi:type="DMN:KnowledgeSource" name="RiskManager" requiresAuthority="//@drgElement.3/@authorityRequirement.0"/>
<drgElement xsi:type="DMN:KnowledgeSource" name="ProductSpecification" requiresAuthority="//@drgElement.4/@authorityRequirement.0"/>
<drgElement xsi:type="DMN:InputData" name="ApplicantData" requiresInformation="//@drgElement.9/@informationRequirement.0"/>
<drgElement xsi:type="DMN:InputData" name="RequestedProduct" requiresInformation="//@drgElement.10/@informationRequirement.0"/>
<drgElement xsi:type="DMN:Decision" name="PreBureauAffordability" requiresInformation="//@drgElement.2/@informationRequirement.0">
<informationRequirement requiredInput="//@drgElement.7"/>
<informationRequirement requiredDecision="//@drgElement.10"/>
</drgElement>
<drgElement xsi:type="DMN:Decision" name="RequiredMonthlyInstallment" requiresInformation="//@drgElement.9/@informationRequirement.1">
<informationRequirement requiredInput="//@drgElement.8"/>
</drgElement>
</DMN:Definitions>

 



06/07/2017
0 Poster un commentaire

A découvrir aussi


Inscrivez-vous au site

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 705 autres membres