SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 1
MAD
Model Aggregator eDitor
Fabien Vignal – Philippe Palau
Http://www.sysord.com
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 2
Qui sommes nous ?
Ingénieurs en développement
SYSORD
- Petite société (3 personnes) basée à Roquefort (12)
- Eclipse, RCP, Java, J2EE
- Création de progiciels pour l'Industrie agroalimentaire
Intérêt pour la MDA et l'automatisation
Approche empirique avant EMF
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 3
Motivations
Utilisation quotidienne de modeleurs EMF / UML
Vue des propriétés
- Pas très ergonomique
- Pas toujours adaptée au besoin
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 4
Ce qui serait Bien ...
Formulaire de saisie avec widgets adaptés
Choisir les propriétés en fonction de ses besoins
Organisation du formulaire adaptée
Navigation entre éléments
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 5
MAD :Model Aggregator
eDitor
Vidéo MAD avec UML (http://youtu.be/ACFS6ajAsV8)
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 6
Concepts de MAD (Configuration)
Utilisation des métamodèles
Description des vues
- Template par EClassifier
- Composées de widgets configurables
- Valeurs obtenues par des requêtes
Réutilisation des templates
- Héritage (implicite / explicite)
- Composition
Configuration appliquée immédiatement
- Pas de code
- Pas de génération
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 7
Concepts de MAD (Edition / Sauvegarde)
Edition de l'élément sélectionné
Modification des propriétés par des widgets
Validation des valeurs avant application
Deux catégories de modèles
- Modèle principal
- Modèle étranger
MAD n'enregistre que les modèles étrangers
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 8
Architecture
Architecture orientée service
Trois plugins principaux
- API : interfaces (services / objets)
- Core : implémentations
- UI : implémentation vue Eclipse
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 9
Core
Services principaux
- View Builder
- Configuration Manager
- Model Access Object
- Query Evaluation Service
Core fournit des Implémentations par défaut
Tout service peut être remplacé ou personnalisé
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 10
UI
Utilise le Core pour obtenir le modèle de la vue
Vue Eclipse (SWT)
Personnalisation
- Extension des services ViewBuilder et WidgetBuilder
- Nouveaux Widgets personnalisés
- Nouveau type de rendu : (JavaFx / HTML)
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 11
Technologies Utilisées
Eclipse
Xtext (éditeur de configuration + DSL)
SWT + FormToolKit / Vue Eclipse
Evaluateurs de requêtes
- OCL
- Acceleo
EMF Adapters (synchronisation des modèles)
Injection de dépendances avec Guice
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 12
Requêtes (I)
Requêtes
"authors" aucun langage n'est défini, OCL est utilisé par défaut.
language:ACCELEO call authorsOfSeveralBooks() appel d'un Query Acceleo
language:MAD "CREATE('books')" fonction MAD pour un créer un nouveau livre.
Chaînes de requêtes
Query Chain {
"books->last()",
language: ACCELEO call authorMultiBook(),
"first()"
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 13
Requêtes (II)
Sous requêtes
eContainer().oclAsType(Library).books->select(pages > [pages])->isEmpty()
Le premier 'pages' s'applique aux livres de l'itération, '[pages]' évalué avant l'itération
correspond au nombre de pages du livre du contexte.
Variables contextuelles
$CONTEXT, $VALUE, $UIVALUE, $MODEL … variables utilisables dans les requêtes.
$UIVALUE > 10 and $UIVALUE < 10000
Règle de validation utilisant la valeur saisie dans le widget.
Besoin d'espionner les évaluateurs
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 14
MAD en Action
Le modèle Tinylibrary
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 15
Configuration tinylibrary.mad
Import base de configuration MAD
Import métamodèle de Tinylibrary
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 16
Widgets
Palette de widgets configurables
 InputWidgets
- Texte, Nombre, Date, Booléen
- ComboBox, Liste, PickList (popup ou embarqué)
- Editeur Xtext embarqué
 OutputWidget
NavigationWidget
FlexibleWidget
Command
Extension possible par implémentation personnalisée
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 17
Une Première Configuration (I)
//------------------------------------------
// MAD configuration for Tiny library model
//------------------------------------------
//MAD base configuration import
import "platform:/resource/mad.configuration/config.mad"
//Tiny library Ecore metamodel import
import
"platform:/plugin/com.sysord.mad.demo.tinylibrary/model/tinylibrary.ecore"
//Configuration for a Book element
Configuration BOOK for tinylibrary.Book {
template:
//Textbox widget for editing title property
widget:Title //the widget id
label:"Title" //widget label
type:TEXT_WIDGET //display a text widget
value:"title" //Ocl query for getting the 'title' property from the book.
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 18
Une Première Configuration (II)
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 19
Widgets Simples
Configuration BOOK for tinylibrary.Book {
//Format expression for all Book elements Label computing
//queries between [] are evaluated parts.
label provider:"Book: [title]"
template:
...
//Number input widget
widget:Pages
label:"Pages"
type:NUMBER_WIDGET
value:"pages"
//Date input widget
widget:PublicationDate
label:"Publication date"
type:DATE_WIDGET
value:"published"
//Checkbox widget
widget:Damaged
label:"Is damaged"
type:BOOL_WIDGET
value:"damaged"
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 20
Widgets Listes
Le contenu des listes (les candidats) est fourni par des requêtes
//Configuration for a Book element
Configuration BOOK for tinylibrary.Book {
...
//Combo widget
widget:Category
label:"Category"
type:SINGLE_SELECT_WIDGET
value:"category":tinylibrary.BookCategory
//OCL query for filling combo
candidates:"BookCategory.allInstances()"
//Popup PickList widget
widget:Authors
//Dynamic label value
label:"[authors->size()] authors"
type:MULTI_SELECT_WIDGET:POPUP_PICKLIST
value:"authors"
//Populate the list with candidates query results
candidates:"eContainer().oclAsType(Library).writers"
item label:"[name]"
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 21
Widget de Navigation
Liste de liens vers la vue détaillée d'un élément
Accès au détail d'un élément par double-clic
Retour par utilisation de la flèche vers la gauche
//Configuration for the Library element
Configuration LIBRARY for tinylibrary.Library {
template:
//Navigation for accessing Book detail
widget:BooksNavigation
label:"Books"
type:NAVIGATION_WIDGET
candidates:"books"
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 22
Widget Pour l'Affichage
Affichage de valeurs en lecture seule
Propriétés élémentaires ou valeurs calculées
Configuration BOOK for tinylibrary.Book {
...
//Output text
widget:avgPage
label:"Pages by author"
type:OUTPUTTEXT_WIDGET
//conditional visibility
visible when:"not authors->isEmpty()"
//Compute pages average by authors.
value:"(pages / authors->size())"
//value converter from double to string.
valueConverter:DOUBLE
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 23
Le Widget Flexible (I)
//Configuration for a person element (abstract)
Configuration Abstract_PERSON for tinylibrary.Person {
label provider:"[name]"
template:
widget:Name
...
widget:FirstName
...
widget:LastName
...
}
//Configuration for a Writer element.
//(extends implicitly Person configuration)
Configuration WRITER for tinylibrary.Writer {
template:
widget:Books
label:"Books"
type:FLEXIBLE_WIDGET
//include Book template for each writen book
value:"books"
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 24
Le Widget Flexible (II)
Sélection du template à utiliser pour les éléments du flexible
//Alternative configuration for a Book element
Configuration BOOK_SHORT for tinylibrary.Book {
//Explicit extension
extends: BOOK //Reuse the BOOK template
template:
//Display only those widgets
layout: Isbn Title
}
Configuration WRITER for tinylibrary.Writer {
template:
widget:Books
label:"Books"
type:FLEXIBLE_WIDGET
//Use the BOOK_SHORT template
//for book detail.
flexible template: BOOK_SHORT
value:"books"
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 25
Commande
//Icon declaration
Use icon DELETE_ICON URI:"platform:/resource/mad.configuration/icons/delete-icon_16.png"
//Shared command declaration
Common Command DELETE_ELEMENT_COMMAND {
ITEM_COMMAND
"Delete item" //Command label
icon:DELETE_ICON //Image for the command button
//launch the DELETE MAD Macro for deleting selected item
action: language:MAD "DELETE()"
on success: Reload view
}
Configuration LIBRARY for tinylibrary.Library {
template:
widget:BooksNavigation
label:"Books"
type:NAVIGATION_WIDGET
candidates:"books"
commands:
//Inner command for creating a new book
GLOBAL_COMMAND "New Book"
action: language:MAD "CREATE([OCL:'books'])"
//after creation displays view
//for the created item: the command RESULT.
on success: Display view for "$RESULT",
//Use shared command with label override
DELETE_ELEMENT_COMMAND("Delete the selected book.")
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 26
Autres Widgets
- Xtext embedded editor
- Widgets personnalisés :
- HTML Link
- Google Map widget
Vidéos de démonstration de la première version de MAD:
MAD and Xtext (http://youtu.be/ShoLi5XoQOw)
MAD is customizable (http://youtu.be/2NTAP--Hi1I)
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 27
« Layout »
Répartition des widgets par onglet
Sélection de l'ordre d'affichage
//tab declaration
UI Tab {
id:WRITEN_BOOKS
label:"Writen books"
}
Configuration WRITER for tinylibrary.Writer {
template:
widget:Books
//the widget will be diplayed
//on the WRITEN_BOOKS tab
tab:WRITEN_BOOKS
label:"Books"
type:FLEXIBLE_WIDGET
flexible template: BOOK_SHORT
value:"books"
//widgets display order definition
layout: LastName FirstName Name Books
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 28
Validateurs
Validation à base de règles
Configuration BOOK for tinylibrary.Book {
…
//Number input widget
widget:Pages
label:"Pages"
type:NUMBER_WIDGET
value:"pages"
validators:
//Validation: pages widget must be filled
//and its value between 10 and 10000
validation rule:
"not $UIVALUE.oclIsUndefined()"
I18N Error message:"REQUIRED_VALUE"
validation rule:
"$UIVALUE > 10 and $UIVALUE < 10000"
I18N Error message:"VALUE_OUT_OF_RANGE[10][10000]"
…
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 29
Layers
Filtrer et rassembler les informations par domaine
Les « Layers » sont hiérarchiques et superposables
//Layers configuration
Layer INFO_LAYER {
label:"All Information"
Sub layers {
Layer BASIC {label:"Basic information"}
Layer DETAILED{label:"Additional information"}
}
}
Layer STATISTICS_LAYER {
label:"Statistics"
Sub layers {
Layer AUTHOR{label:"Authors statistics"}
Layer BOOKS{label:"Books statistics"}
}
}
Configuration BOOK_SHORT for tinylibrary.Book {
...
widget:Pages
//available only in books statistics layer
layers: STATISTICS_LAYER.BOOKS
...
//Output text
widget:avgPage
//available in the two layers
layers:STATISTICS_LAYER.BOOKS,
STATISTICS_LAYER.AUTHOR
label:"Pages by author"
...
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 30
Autres Fonctionnalités
I18N : pour tous les labels et messages
Référentiels : Requêtes, Commandes, Constantes
Edition multimodèles (décoration et extension)
- Extension manager
- Synchronisation entre modèles.
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 31
Cas d'Utilisation
Utilisation dans les approches MDE/MDA sous
Eclipse
Approche RAD : création d'un éditeur avec
l'utilisateur
Edition identique quel que soit le modeleur
Mise à disposition de commandes spécifiques
au domaine.
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 32
Conclusion
MAD est fonctionnel
Utilisé par Sysord pour toutes modélisations
(UML, autres …)
Evolutions en cours : compilateur de requêtes
(optimisation des performances)
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 33
Perspectives d'Evolution
Assistants pour la création de requêtes
CDO : support du mode multi-utilisateurs
Générateur de configuration
Générateur de plugin MAD
Edition d'éléments multimédia
son, images, vidéos, Charts et Graphs.
Eclipse4, JavaFX
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 34
Merci

Contenu connexe

En vedette

OpenTravel Model-Driven Schema at IATA
OpenTravel Model-Driven Schema at IATAOpenTravel Model-Driven Schema at IATA
OpenTravel Model-Driven Schema at IATAOpenTravel Alliance
 
Model Driven Architecture (MDA): Motivations, Status & Future
Model Driven Architecture (MDA): Motivations, Status & FutureModel Driven Architecture (MDA): Motivations, Status & Future
Model Driven Architecture (MDA): Motivations, Status & Futureelliando dias
 
Introduction au Domain Driven Design
Introduction au Domain Driven DesignIntroduction au Domain Driven Design
Introduction au Domain Driven DesignDNG Consulting
 
MDA for Cross-Platform Mobile Development
MDA for Cross-Platform Mobile DevelopmentMDA for Cross-Platform Mobile Development
MDA for Cross-Platform Mobile DevelopmentSalma ES-Salmani
 
Comparaison de outils mda
Comparaison de outils mdaComparaison de outils mda
Comparaison de outils mdaShili Mohamed
 
Paysage e-marketing et social media en Algérie
Paysage e-marketing et social media en AlgériePaysage e-marketing et social media en Algérie
Paysage e-marketing et social media en AlgérieHinane MEDOUNI
 
20100910 mda en-2010-jug_summer_camp
20100910 mda en-2010-jug_summer_camp20100910 mda en-2010-jug_summer_camp
20100910 mda en-2010-jug_summer_campBENOIS Jérôme
 

En vedette (10)

MDA
MDAMDA
MDA
 
Présentation stage G-SCOP
Présentation stage G-SCOPPrésentation stage G-SCOP
Présentation stage G-SCOP
 
OpenTravel Model-Driven Schema at IATA
OpenTravel Model-Driven Schema at IATAOpenTravel Model-Driven Schema at IATA
OpenTravel Model-Driven Schema at IATA
 
Model Driven Architecture (MDA): Motivations, Status & Future
Model Driven Architecture (MDA): Motivations, Status & FutureModel Driven Architecture (MDA): Motivations, Status & Future
Model Driven Architecture (MDA): Motivations, Status & Future
 
Introduction au Domain Driven Design
Introduction au Domain Driven DesignIntroduction au Domain Driven Design
Introduction au Domain Driven Design
 
MDA for Cross-Platform Mobile Development
MDA for Cross-Platform Mobile DevelopmentMDA for Cross-Platform Mobile Development
MDA for Cross-Platform Mobile Development
 
Comparaison de outils mda
Comparaison de outils mdaComparaison de outils mda
Comparaison de outils mda
 
Paysage e-marketing et social media en Algérie
Paysage e-marketing et social media en AlgériePaysage e-marketing et social media en Algérie
Paysage e-marketing et social media en Algérie
 
20100910 mda en-2010-jug_summer_camp
20100910 mda en-2010-jug_summer_camp20100910 mda en-2010-jug_summer_camp
20100910 mda en-2010-jug_summer_camp
 
Mda formance
Mda formanceMda formance
Mda formance
 

Similaire à MAD Model Aggregator eDitor (EMF)

ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSRenaud Dumont
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2dhugomallet
 
Sybase Connect Atelier Power Builderv2
Sybase Connect Atelier Power Builderv2Sybase Connect Atelier Power Builderv2
Sybase Connect Atelier Power Builderv2apratt72
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2Hugo Hamon
 
Le pattern View Model avec Symfony2
Le pattern View Model avec Symfony2Le pattern View Model avec Symfony2
Le pattern View Model avec Symfony2RomainKuzniak
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniterAtsé François-Xavier KOBON
 
Softfluent speig mdday2010
Softfluent speig mdday2010Softfluent speig mdday2010
Softfluent speig mdday2010MD DAY
 
Club utilisateur retour_expérience_simplicité_v4
Club utilisateur retour_expérience_simplicité_v4Club utilisateur retour_expérience_simplicité_v4
Club utilisateur retour_expérience_simplicité_v4Simplicité Software
 
Meetup - Construire des applications serverless avec Azure
Meetup - Construire des applications serverless avec AzureMeetup - Construire des applications serverless avec Azure
Meetup - Construire des applications serverless avec AzureSamir Arezki ☁
 
BreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureBreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureNicolas Georgeault
 
Le Developpement Web Aspnet2 Vb2005
Le Developpement Web Aspnet2   Vb2005Le Developpement Web Aspnet2   Vb2005
Le Developpement Web Aspnet2 Vb2005Gregory Renard
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
Introduction à TeamCity
Introduction à TeamCityIntroduction à TeamCity
Introduction à TeamCityUlrich VACHON
 
Annotations pour les Geeks
Annotations pour les GeeksAnnotations pour les Geeks
Annotations pour les Geeksjviet
 
vuejs.ppt
vuejs.pptvuejs.ppt
vuejs.pptlordeco
 

Similaire à MAD Model Aggregator eDitor (EMF) (20)

ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJS
 
Cours yeoman backbone box2d
Cours yeoman backbone box2dCours yeoman backbone box2d
Cours yeoman backbone box2d
 
Sybase Connect Atelier Power Builderv2
Sybase Connect Atelier Power Builderv2Sybase Connect Atelier Power Builderv2
Sybase Connect Atelier Power Builderv2
 
Introduction à Symfony2
Introduction à Symfony2Introduction à Symfony2
Introduction à Symfony2
 
Le pattern View Model avec Symfony2
Le pattern View Model avec Symfony2Le pattern View Model avec Symfony2
Le pattern View Model avec Symfony2
 
Silverlight 4
Silverlight 4Silverlight 4
Silverlight 4
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
Softfluent speig mdday2010
Softfluent speig mdday2010Softfluent speig mdday2010
Softfluent speig mdday2010
 
Club utilisateur retour_expérience_simplicité_v4
Club utilisateur retour_expérience_simplicité_v4Club utilisateur retour_expérience_simplicité_v4
Club utilisateur retour_expérience_simplicité_v4
 
Meetup - Construire des applications serverless avec Azure
Meetup - Construire des applications serverless avec AzureMeetup - Construire des applications serverless avec Azure
Meetup - Construire des applications serverless avec Azure
 
Starter Kits
Starter KitsStarter Kits
Starter Kits
 
BreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureBreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec Azure
 
Le langage VB.Net
Le langage VB.NetLe langage VB.Net
Le langage VB.Net
 
Le Developpement Web Aspnet2 Vb2005
Le Developpement Web Aspnet2   Vb2005Le Developpement Web Aspnet2   Vb2005
Le Developpement Web Aspnet2 Vb2005
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
MERAZKA Messaoud
MERAZKA MessaoudMERAZKA Messaoud
MERAZKA Messaoud
 
Introduction webextensions
Introduction webextensionsIntroduction webextensions
Introduction webextensions
 
Introduction à TeamCity
Introduction à TeamCityIntroduction à TeamCity
Introduction à TeamCity
 
Annotations pour les Geeks
Annotations pour les GeeksAnnotations pour les Geeks
Annotations pour les Geeks
 
vuejs.ppt
vuejs.pptvuejs.ppt
vuejs.ppt
 

MAD Model Aggregator eDitor (EMF)

  • 1. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 1 MAD Model Aggregator eDitor Fabien Vignal – Philippe Palau Http://www.sysord.com
  • 2. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 2 Qui sommes nous ? Ingénieurs en développement SYSORD - Petite société (3 personnes) basée à Roquefort (12) - Eclipse, RCP, Java, J2EE - Création de progiciels pour l'Industrie agroalimentaire Intérêt pour la MDA et l'automatisation Approche empirique avant EMF
  • 3. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 3 Motivations Utilisation quotidienne de modeleurs EMF / UML Vue des propriétés - Pas très ergonomique - Pas toujours adaptée au besoin
  • 4. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 4 Ce qui serait Bien ... Formulaire de saisie avec widgets adaptés Choisir les propriétés en fonction de ses besoins Organisation du formulaire adaptée Navigation entre éléments
  • 5. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 5 MAD :Model Aggregator eDitor Vidéo MAD avec UML (http://youtu.be/ACFS6ajAsV8)
  • 6. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 6 Concepts de MAD (Configuration) Utilisation des métamodèles Description des vues - Template par EClassifier - Composées de widgets configurables - Valeurs obtenues par des requêtes Réutilisation des templates - Héritage (implicite / explicite) - Composition Configuration appliquée immédiatement - Pas de code - Pas de génération
  • 7. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 7 Concepts de MAD (Edition / Sauvegarde) Edition de l'élément sélectionné Modification des propriétés par des widgets Validation des valeurs avant application Deux catégories de modèles - Modèle principal - Modèle étranger MAD n'enregistre que les modèles étrangers
  • 8. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 8 Architecture Architecture orientée service Trois plugins principaux - API : interfaces (services / objets) - Core : implémentations - UI : implémentation vue Eclipse
  • 9. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 9 Core Services principaux - View Builder - Configuration Manager - Model Access Object - Query Evaluation Service Core fournit des Implémentations par défaut Tout service peut être remplacé ou personnalisé
  • 10. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 10 UI Utilise le Core pour obtenir le modèle de la vue Vue Eclipse (SWT) Personnalisation - Extension des services ViewBuilder et WidgetBuilder - Nouveaux Widgets personnalisés - Nouveau type de rendu : (JavaFx / HTML)
  • 11. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 11 Technologies Utilisées Eclipse Xtext (éditeur de configuration + DSL) SWT + FormToolKit / Vue Eclipse Evaluateurs de requêtes - OCL - Acceleo EMF Adapters (synchronisation des modèles) Injection de dépendances avec Guice
  • 12. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 12 Requêtes (I) Requêtes "authors" aucun langage n'est défini, OCL est utilisé par défaut. language:ACCELEO call authorsOfSeveralBooks() appel d'un Query Acceleo language:MAD "CREATE('books')" fonction MAD pour un créer un nouveau livre. Chaînes de requêtes Query Chain { "books->last()", language: ACCELEO call authorMultiBook(), "first()" }
  • 13. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 13 Requêtes (II) Sous requêtes eContainer().oclAsType(Library).books->select(pages > [pages])->isEmpty() Le premier 'pages' s'applique aux livres de l'itération, '[pages]' évalué avant l'itération correspond au nombre de pages du livre du contexte. Variables contextuelles $CONTEXT, $VALUE, $UIVALUE, $MODEL … variables utilisables dans les requêtes. $UIVALUE > 10 and $UIVALUE < 10000 Règle de validation utilisant la valeur saisie dans le widget. Besoin d'espionner les évaluateurs
  • 14. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 14 MAD en Action Le modèle Tinylibrary
  • 15. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 15 Configuration tinylibrary.mad Import base de configuration MAD Import métamodèle de Tinylibrary
  • 16. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 16 Widgets Palette de widgets configurables  InputWidgets - Texte, Nombre, Date, Booléen - ComboBox, Liste, PickList (popup ou embarqué) - Editeur Xtext embarqué  OutputWidget NavigationWidget FlexibleWidget Command Extension possible par implémentation personnalisée
  • 17. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 17 Une Première Configuration (I) //------------------------------------------ // MAD configuration for Tiny library model //------------------------------------------ //MAD base configuration import import "platform:/resource/mad.configuration/config.mad" //Tiny library Ecore metamodel import import "platform:/plugin/com.sysord.mad.demo.tinylibrary/model/tinylibrary.ecore" //Configuration for a Book element Configuration BOOK for tinylibrary.Book { template: //Textbox widget for editing title property widget:Title //the widget id label:"Title" //widget label type:TEXT_WIDGET //display a text widget value:"title" //Ocl query for getting the 'title' property from the book. }
  • 18. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 18 Une Première Configuration (II)
  • 19. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 19 Widgets Simples Configuration BOOK for tinylibrary.Book { //Format expression for all Book elements Label computing //queries between [] are evaluated parts. label provider:"Book: [title]" template: ... //Number input widget widget:Pages label:"Pages" type:NUMBER_WIDGET value:"pages" //Date input widget widget:PublicationDate label:"Publication date" type:DATE_WIDGET value:"published" //Checkbox widget widget:Damaged label:"Is damaged" type:BOOL_WIDGET value:"damaged" }
  • 20. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 20 Widgets Listes Le contenu des listes (les candidats) est fourni par des requêtes //Configuration for a Book element Configuration BOOK for tinylibrary.Book { ... //Combo widget widget:Category label:"Category" type:SINGLE_SELECT_WIDGET value:"category":tinylibrary.BookCategory //OCL query for filling combo candidates:"BookCategory.allInstances()" //Popup PickList widget widget:Authors //Dynamic label value label:"[authors->size()] authors" type:MULTI_SELECT_WIDGET:POPUP_PICKLIST value:"authors" //Populate the list with candidates query results candidates:"eContainer().oclAsType(Library).writers" item label:"[name]" }
  • 21. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 21 Widget de Navigation Liste de liens vers la vue détaillée d'un élément Accès au détail d'un élément par double-clic Retour par utilisation de la flèche vers la gauche //Configuration for the Library element Configuration LIBRARY for tinylibrary.Library { template: //Navigation for accessing Book detail widget:BooksNavigation label:"Books" type:NAVIGATION_WIDGET candidates:"books" }
  • 22. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 22 Widget Pour l'Affichage Affichage de valeurs en lecture seule Propriétés élémentaires ou valeurs calculées Configuration BOOK for tinylibrary.Book { ... //Output text widget:avgPage label:"Pages by author" type:OUTPUTTEXT_WIDGET //conditional visibility visible when:"not authors->isEmpty()" //Compute pages average by authors. value:"(pages / authors->size())" //value converter from double to string. valueConverter:DOUBLE }
  • 23. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 23 Le Widget Flexible (I) //Configuration for a person element (abstract) Configuration Abstract_PERSON for tinylibrary.Person { label provider:"[name]" template: widget:Name ... widget:FirstName ... widget:LastName ... } //Configuration for a Writer element. //(extends implicitly Person configuration) Configuration WRITER for tinylibrary.Writer { template: widget:Books label:"Books" type:FLEXIBLE_WIDGET //include Book template for each writen book value:"books" }
  • 24. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 24 Le Widget Flexible (II) Sélection du template à utiliser pour les éléments du flexible //Alternative configuration for a Book element Configuration BOOK_SHORT for tinylibrary.Book { //Explicit extension extends: BOOK //Reuse the BOOK template template: //Display only those widgets layout: Isbn Title } Configuration WRITER for tinylibrary.Writer { template: widget:Books label:"Books" type:FLEXIBLE_WIDGET //Use the BOOK_SHORT template //for book detail. flexible template: BOOK_SHORT value:"books" }
  • 25. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 25 Commande //Icon declaration Use icon DELETE_ICON URI:"platform:/resource/mad.configuration/icons/delete-icon_16.png" //Shared command declaration Common Command DELETE_ELEMENT_COMMAND { ITEM_COMMAND "Delete item" //Command label icon:DELETE_ICON //Image for the command button //launch the DELETE MAD Macro for deleting selected item action: language:MAD "DELETE()" on success: Reload view } Configuration LIBRARY for tinylibrary.Library { template: widget:BooksNavigation label:"Books" type:NAVIGATION_WIDGET candidates:"books" commands: //Inner command for creating a new book GLOBAL_COMMAND "New Book" action: language:MAD "CREATE([OCL:'books'])" //after creation displays view //for the created item: the command RESULT. on success: Display view for "$RESULT", //Use shared command with label override DELETE_ELEMENT_COMMAND("Delete the selected book.") }
  • 26. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 26 Autres Widgets - Xtext embedded editor - Widgets personnalisés : - HTML Link - Google Map widget Vidéos de démonstration de la première version de MAD: MAD and Xtext (http://youtu.be/ShoLi5XoQOw) MAD is customizable (http://youtu.be/2NTAP--Hi1I)
  • 27. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 27 « Layout » Répartition des widgets par onglet Sélection de l'ordre d'affichage //tab declaration UI Tab { id:WRITEN_BOOKS label:"Writen books" } Configuration WRITER for tinylibrary.Writer { template: widget:Books //the widget will be diplayed //on the WRITEN_BOOKS tab tab:WRITEN_BOOKS label:"Books" type:FLEXIBLE_WIDGET flexible template: BOOK_SHORT value:"books" //widgets display order definition layout: LastName FirstName Name Books }
  • 28. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 28 Validateurs Validation à base de règles Configuration BOOK for tinylibrary.Book { … //Number input widget widget:Pages label:"Pages" type:NUMBER_WIDGET value:"pages" validators: //Validation: pages widget must be filled //and its value between 10 and 10000 validation rule: "not $UIVALUE.oclIsUndefined()" I18N Error message:"REQUIRED_VALUE" validation rule: "$UIVALUE > 10 and $UIVALUE < 10000" I18N Error message:"VALUE_OUT_OF_RANGE[10][10000]" … }
  • 29. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 29 Layers Filtrer et rassembler les informations par domaine Les « Layers » sont hiérarchiques et superposables //Layers configuration Layer INFO_LAYER { label:"All Information" Sub layers { Layer BASIC {label:"Basic information"} Layer DETAILED{label:"Additional information"} } } Layer STATISTICS_LAYER { label:"Statistics" Sub layers { Layer AUTHOR{label:"Authors statistics"} Layer BOOKS{label:"Books statistics"} } } Configuration BOOK_SHORT for tinylibrary.Book { ... widget:Pages //available only in books statistics layer layers: STATISTICS_LAYER.BOOKS ... //Output text widget:avgPage //available in the two layers layers:STATISTICS_LAYER.BOOKS, STATISTICS_LAYER.AUTHOR label:"Pages by author" ... }
  • 30. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 30 Autres Fonctionnalités I18N : pour tous les labels et messages Référentiels : Requêtes, Commandes, Constantes Edition multimodèles (décoration et extension) - Extension manager - Synchronisation entre modèles.
  • 31. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 31 Cas d'Utilisation Utilisation dans les approches MDE/MDA sous Eclipse Approche RAD : création d'un éditeur avec l'utilisateur Edition identique quel que soit le modeleur Mise à disposition de commandes spécifiques au domaine.
  • 32. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 32 Conclusion MAD est fonctionnel Utilisé par Sysord pour toutes modélisations (UML, autres …) Evolutions en cours : compilateur de requêtes (optimisation des performances)
  • 33. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 33 Perspectives d'Evolution Assistants pour la création de requêtes CDO : support du mode multi-utilisateurs Générateur de configuration Générateur de plugin MAD Edition d'éléments multimédia son, images, vidéos, Charts et Graphs. Eclipse4, JavaFX
  • 34. SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 34 Merci