MAD Model Aggregator eDitor (EMF)

Post on 12-Jan-2015

102 views 1 download

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.

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