34
SYSORD - Model Agregator eDitor – Fabien Vignal – Stephan Montagnes – Philippe Palau 1 MAD Model Aggregator eDitor Fabien Vignal – Philippe Palau Http://www.sysord.com

MAD Model Aggregator eDitor (EMF)

  • 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

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