Transcript
Page 1: 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

Page 2: MAD Model Aggregator eDitor (EMF)

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

Page 3: MAD Model Aggregator eDitor (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

Page 4: MAD Model Aggregator eDitor (EMF)

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

Page 5: MAD Model Aggregator eDitor (EMF)

SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 5

MAD :Model Aggregator eDitor

Vidéo MAD avec UML (http://youtu.be/ACFS6ajAsV8)

Page 6: MAD Model Aggregator eDitor (EMF)

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

Page 7: MAD Model Aggregator eDitor (EMF)

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

Page 8: MAD Model Aggregator eDitor (EMF)

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

Page 9: MAD Model Aggregator eDitor (EMF)

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é

Page 10: MAD Model Aggregator eDitor (EMF)

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)

Page 11: MAD Model Aggregator eDitor (EMF)

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

Page 12: MAD Model Aggregator eDitor (EMF)

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()"

}

Page 13: MAD Model Aggregator eDitor (EMF)

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

Page 14: MAD Model Aggregator eDitor (EMF)

SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 14

MAD en Action

Le modèle Tinylibrary

Page 15: MAD Model Aggregator eDitor (EMF)

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

Page 16: MAD Model Aggregator eDitor (EMF)

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

Page 17: MAD Model Aggregator eDitor (EMF)

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.

}

Page 18: MAD Model Aggregator eDitor (EMF)

SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 18

Une Première Configuration (II)

Page 19: MAD Model Aggregator eDitor (EMF)

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"

}

Page 20: MAD Model Aggregator eDitor (EMF)

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]"

}

Page 21: MAD Model Aggregator eDitor (EMF)

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"

}

Page 22: MAD Model Aggregator eDitor (EMF)

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

}

Page 23: MAD Model Aggregator eDitor (EMF)

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"

}

Page 24: MAD Model Aggregator eDitor (EMF)

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"

}

Page 25: MAD Model Aggregator eDitor (EMF)

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.")

}

Page 26: MAD Model Aggregator eDitor (EMF)

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)

Page 27: MAD Model Aggregator eDitor (EMF)

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

}

Page 28: MAD Model Aggregator eDitor (EMF)

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]"

…}

Page 29: MAD Model Aggregator eDitor (EMF)

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"...}

Page 30: MAD Model Aggregator eDitor (EMF)

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.

Page 31: MAD Model Aggregator eDitor (EMF)

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.

Page 32: MAD Model Aggregator eDitor (EMF)

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)

Page 33: MAD Model Aggregator eDitor (EMF)

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

Page 34: MAD Model Aggregator eDitor (EMF)

SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 34

Merci


Recommended