Upload
sysord
View
102
Download
1
Embed Size (px)
DESCRIPTION
Slide présentation de MAD. Un plugin Eclipse pour l'édition des propriétés des modèles EMF. MAD est un outil réalisé pour se substituer à la vue standard des propriétés. il permet à partir d'une configuration de présenter une interface de saisie personalisée de type formulaire pour chaque type d'élément édité. Il ne nécessite aucune génération de code et toute modification de la configuration est prise en compte immédiatement.
Citation preview
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