MAD Model Aggregator eDitor (EMF)
-
Upload
sysord -
Category
Technology
-
view
102 -
download
1
description
Transcript of MAD Model Aggregator eDitor (EMF)
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 1
MADModel 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êtesQuery Chain {
"books->last()",language: ACCELEO call authorMultiBook(),"first()"
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 13
Requêtes (II)
Sous requêteseContainer().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 importimport "platform:/resource/mad.configuration/config.mad" //Tiny library Ecore metamodel importimport "platform:/plugin/com.sysord.mad.demo.tinylibrary/model/tinylibrary.ecore"
//Configuration for a Book elementConfiguration BOOK for tinylibrary.Book {template:
//Textbox widget for editing title property widget:Title //the widget idlabel:"Title" //widget labeltype:TEXT_WIDGET //display a text widgetvalue:"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 widgetwidget:Pages label:"Pages"type:NUMBER_WIDGETvalue:"pages"
//Date input widgetwidget:PublicationDate label:"Publication date"type:DATE_WIDGETvalue:"published"
//Checkbox widgetwidget:Damaged label:"Is damaged"type:BOOL_WIDGETvalue:"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 elementConfiguration BOOK for tinylibrary.Book {...//Combo widgetwidget:Categorylabel:"Category"type:SINGLE_SELECT_WIDGETvalue:"category":tinylibrary.BookCategory//OCL query for filling combocandidates:"BookCategory.allInstances()"
//Popup PickList widgetwidget:Authors//Dynamic label value label:"[authors->size()] authors" type:MULTI_SELECT_WIDGET:POPUP_PICKLISTvalue:"authors"//Populate the list with candidates query resultscandidates:"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 elementConfiguration LIBRARY for tinylibrary.Library {template://Navigation for accessing Book detailwidget:BooksNavigationlabel:"Books"type:NAVIGATION_WIDGETcandidates:"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 textwidget:avgPagelabel:"Pages by author"type:OUTPUTTEXT_WIDGET//conditional visibilityvisible 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:Bookslabel:"Books"type:FLEXIBLE_WIDGET//include Book template for each writen bookvalue:"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 elementConfiguration BOOK_SHORT for tinylibrary.Book {//Explicit extensionextends: BOOK //Reuse the BOOK template template://Display only those widgetslayout: Isbn Title
}
Configuration WRITER for tinylibrary.Writer {template:widget:Bookslabel:"Books"type:FLEXIBLE_WIDGET//Use the BOOK_SHORT template //for book detail.flexible template: BOOK_SHORTvalue:"books"
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 25
Commande//Icon declarationUse 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 itemaction: language:MAD "DELETE()"on success: Reload view
}
Configuration LIBRARY for tinylibrary.Library {template:widget:BooksNavigationlabel:"Books"type:NAVIGATION_WIDGETcandidates:"books"commands://Inner command for creating a new bookGLOBAL_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 overrideDELETE_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 declarationUI Tab {id:WRITEN_BOOKSlabel:"Writen books"
}
Configuration WRITER for tinylibrary.Writer {template:
widget:Books//the widget will be diplayed //on the WRITEN_BOOKS tabtab:WRITEN_BOOKSlabel:"Books"type:FLEXIBLE_WIDGET
flexible template: BOOK_SHORTvalue:"books"
//widgets display order definitionlayout: LastName FirstName Name Books
}
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 28
Validateurs
Validation à base de règlesConfiguration BOOK for tinylibrary.Book { …//Number input widgetwidget:Pages label:"Pages"type:NUMBER_WIDGETvalue:"pages"
validators://Validation: pages widget must be filled //and its value between 10 and 10000validation 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 configurationLayer 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 layerlayers: STATISTICS_LAYER.BOOKS...//Output textwidget:avgPage//available in the two layerslayers:STATISTICS_LAYER.BOOKS, STATISTICS_LAYER.AUTHORlabel:"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