Eclipse Modeling Tools



Documents pareils
Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Création d un service web avec NetBeans 5.5 et SJAS 9

La base de données XML exist. A. Belaïd

IFT287 Exploitation de base de données relationnelles et orientées objet. Laboratoire Mon premier programme Java en Eclipse

TechSoftware Présentations

Programmer en JAVA. par Tama

Ingénierie Dirigée par les Modèles. Editeurs de modèles. (Eclipse Modeling Tools) Jean-Philippe Babau

Construire des plug-ins pour SAS Management Console SAS 9.1

BIRT (Business Intelligence and Reporting Tools)

Alfstore workflow framework Spécification technique

Introduction à Eclipse

D E S C R I P T I O N D E S É L É M E N T S C L E F S D ' U I M A

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Supervision et infrastructure - Accès aux applications JAVA. Document FAQ. Page: 1 / 9 Dernière mise à jour: 15/04/12 16:14

Once the installation is complete, you can delete the temporary Zip files..

TP au menu «UI ANDROID»

Tutoriel d installation de Hibernate avec Eclipse

Eclipse atelier Java

Rapport de Mini-Projet en ArcGIS Engine

TP1 : Initiation à Java et Eclipse

Warren PAULUS. Android SDK et Android x86

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Votre premier projet Android

Bases Java - Eclipse / Netbeans

Apprendre Java et C++ avec NetBeans

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Interfaces graphiques avec l API Swing

Ingénierie des Modèles. Méta-modélisation

Plan du cours. Historique du langage Nouveautés de Java 7

Création d une application JEE

Projet de développement

Générer du code à partir d une description de haut niveau

Guide d installation logicielle

Maîtriser le menu contextuel dans un OfficeBean

Architecture Orientée Service, JSON et API REST

OpenPaaS Le réseau social d'entreprise

Tutoriel de formation SurveyMonkey

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

Auto-évaluation Programmation en Java

TD/TP 1 Introduction au SDK d Android

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Le langage C. Séance n 4

Installation Eclipse Galileo. Groupe Entreprenant et Innovateur. France. Tutoriel. Programmation Mobile. Cours. Arón HERRERA PONTE. Coach.

Cours 8 Not Only SQL

FreeAnalysis. Schema Designer. Cubes

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Gestion des certificats en Internet Explorer

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Affichage de la date d'exigibilité sur les documents FAQ INV 011

Connexions à un projet CVS via Eclipse en accès local et distant. 15 Mai 2007

ECLIPSE ET PDT (Php development tools)

Introduction à JDBC. Accès aux bases de données en Java

lundi 3 août 2009 Choose your language What is Document Connection for Mac? Communautés Numériques L informatique à la portée du Grand Public

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

openarchitectureware & transformation de modèle Yannick Lizzi Architecte Logiciel itemis France Mail: lizzi@itemis.de

Programmation Par Objets

Utilisation de GCM (Google Cloud Messaging) pour Android. Partie préliminaire éventuelle : Création d'un AVD lisant GCM

Comment créer un diagramme de Gantt avec OpenOffice.org

Micro-ordinateurs, informations, idées, trucs et astuces utiliser le Bureau à distance

CSI351 Systèmes d exploitation Instructions pour rouler Linux avec Virtual PC dans la salle de labo 2052

Installation et prise en main

ENDNOTE X2 SOMMAIRE. 1. La bibliothèque EndNote 1.1. Créer une nouvelle bibliothèque 1.2. Ouvrir une bibliothèque EndNote 1.3. Fermer une bibliothèque

Samsung Auto Backup Guide de démarrage rapide

1 ) INSTALLATION DE LA CONSOLE 2 2 ) PREMIER DÉMARRAGE DE LA CONSOLE 3 3 ) LES JOBS 4 4 ) LES ORDINATEURS 6

- TP Programmation Android - NFA024 Conservatoire National des Arts et Métiers

Editing and managing Systems engineering processes at Snecma

Business Sharepoint Contenu

SYNC FRAMEWORK AVEC SQLITE POUR APPLICATIONS WINDOWS STORE (WINRT) ET WINDOWS PHONE 8

Corrigé des exercices sur les références

LOG4430 : Architecture logicielle et conception avancée

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Serveur d'archivage 2007 Installation et utilisation de la BD exist

CARPE. Documentation Informatique S E T R A. Version Août CARPE (Documentation Informatique) 1

Création d objet imbriqué sous PowerShell.

Tutorial pour une application simple

Installer Enterprise Miner 5.1 en SAS environnement Windows

Cours Plugin Eclipse. Université Paris VI / Parcours STL / Master I Pierre-Arnaud Marcelot - Iktek - pamarcelot@iktek.com

Guide d'installation rapide TFM-560X YO.13

Guide de prise en mains du User Center

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Etude de cas : PGE JEE V2

Installation et compilation de gnurbs sous Windows

Remote Method Invocation en Java (RMI)

Introduction à MapReduce/Hadoop et Spark

HAUTE DISPONIBILITÉ DE MACHINE VIRTUELLE AVEC HYPER-V 2012 R2 PARTIE CONFIGURATION OPENVPN SUR PFSENSE

Procédure d installation d AMESim 4.3.0

wxwidgets dans un environnement Microsoft Windows

Procédure d import des bases de données GestCab vers Médicab version 10.

TP Programmation Java / JDBC / Oracle

MANUEL D INSTALLATION DES PRE REQUIS TECHNIQUES SALLE DES MARCHES V.7

Présentation Windows Azure Hadoop Big Data - BI

Environnements de développement (intégrés)

GIGABIT PCI DESKTOP ADAPTER DGE-530T. Quick Installation Guide+ Guide d installation+

ScTools Outil de personnalisation de carte

Composants Logiciels. Le modèle de composant de CORBA. Plan

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

physicien diplômé EPFZ originaire de France présentée acceptée sur proposition Thèse no. 7178

Education Delivery Intelligent Tool

RAPID Prenez le contrôle sur vos données

Transcription:

Eclipse Modeling Tools - Requête sur le modèle édité Laboratoire d'analyse et d'architecture des Systèmes Eclipse Modeling Tools Requête sur le modèle édité Select Noeuds Cout>=5 Résumé: Le méta-modèle utilisé dans les exemples précédents est enrichi: un coût (entier) est associé à chaque nœud. Un éditeur de modèle arborescent est généré à partir de ce méta-modèle. La requête porte sur le coût associé aux nœuds du graphe édités. Mots clés: Eclipse, INDIGO, Eclipse Modeling Tools, EMF, EMP Serge Bachmann CNRS LAAS 2I Serge Bachmann Page 1/41

Eclipse Modeling Tools - Requête sur le modèle édité Sommaire 1 Introduction...4 1.1 Spécification...4 1.2 Lancement de la plate-forme Eclipse...4 1.3 Passage en perspective «Ecore»...5 2 Création projet «EMF»...6 2.1 Création projet «Empty EMF Project»...6 3 Édition du méta modèle «Ecore»...8 3.1 Édition du diagramme...9 4 Générations du code...10 4.1 Création du fichier de génération...10 5 Création d'une requête...15 5.1 Création du projet «exemple.graphe.emf.statement»...15 6 Requête dans le «menubar»...18 6.1 Création package destiné à recevoir le code...18 6.2 Dependencies...19 6.3 Définition des Extensions...21 6.3.1 Création du point d'extension «org.eclipse.ui.editoractions»...21 6.3.2 Ajouter un menu...22 6.3.3 Ajouter un «separator»...23 6.3.4 Ajouter une action:...24 6.3.5 Définition «enablement»...26 6.3.6 Définition «objectclass»...26 6.4 Le fichier «plugin.xml»...27 6.5 Le Code...27 6.5.1 La classe «AbstractQueryDelegate»...28 6.5.2 La classe «SelectBigCostNodesDelegate»...32 7 Test query dans «Menu Bar»...35 7.1 Exécution «Query»...37 8 Requête dans le «popup» menu de l'éditeur...38 9 Test requête dans le «popup» menu...40 10 Conclusions...41 11 Licence...41 CNRS LAAS 2I Serge Bachmann Page 2/41

Eclipse Modeling Tools - Requête sur le modèle édité Informations Générale Fichier source document: E:\FORMATION_Eclipse\modeling-indigo- SR1\EMT\DOCUMENTATION\EMFModelQuery.odt Version Eclipse: INDIGO version 3.7.1 This package contains framework and tools to leverage models : an Ecore graphical modeler (class-like diagram), Java code generation utility for RCP applications and the EMF Framework, model comparison support, support for XSD schemas, OCL and graphical modeler runtimes. It includes a complete SDK, developer tools and source code. Download: eclipse-modeling-indigo-sr1-win32.zip Date de création: 17 novembre 2011 Date d'impression: 6 décembre 2011 Plate forme Windows 32 CNRS LAAS 2I Serge Bachmann Page 3/41

Eclipse Modeling Tools - Requête sur le modèle édité Introduction 1 Introduction 1.1 Spécification Le modèle défini dans les autres exemples est modifié: un coût sous la forme d'un entier est ajouté à chaque nœud. On désire implémenter la requête suivante: Tout nœud dont le coût est supérieur à 5 est sélectionné. 1.2 Lancement de la plate-forme Eclipse Double cliquer : ou le raccourci vers cet exécutable si vous l'avez créé dans le répertoire destiné à recevoir les «workspaces». La plate-forme «Eclipse» est lancée: Choisir le workspace: Cliquer «OK», Fermer la fenêtre «Welcome». CNRS LAAS 2I Serge Bachmann Page 4/41

Eclipse Modeling Tools - Requête sur le modèle édité Introduction 1.3 Passage en perspective «Ecore» Faire: Choisir «Ecore» Cliquer «OK» On efface quelques vues: CNRS LAAS 2I Serge Bachmann Page 5/41

Eclipse Modeling Tools - Requête sur le modèle édité Création projet «EMF» 2 Création projet «EMF» 2.1 Création projet «Empty EMF Project» Faire: Sélectionner: Cliquer «Next >». Nommer le projet: Cliquer «Finish». CNRS LAAS 2I Serge Bachmann Page 6/41

Eclipse Modeling Tools - Requête sur le modèle édité Création projet «EMF» Le projet est créé: CNRS LAAS 2I Serge Bachmann Page 7/41

Eclipse Modeling Tools - Requête sur le modèle édité Édition du méta modèle «Ecore» 3 Édition du méta modèle «Ecore» Faire un clic droit sur «model» et sélectionner la commande: Nommer le diagramme: Cliquer «Finish» CNRS LAAS 2I Serge Bachmann Page 8/41

Eclipse Modeling Tools - Requête sur le modèle édité Édition du méta modèle «Ecore» 3.1 Édition du diagramme Éditer le diagramme, déjà édité dans le document: Édition graphique d'un méta-modèle «Ecore». Pour les besoins de notre exemple, un «EAttribute» «cout» de type «EInt» est ajouté à chaque nœud. Faire un sauvegarde du diagramme. Afficher «Graphe.ecore», on obtient: Vérifier que le méta modèle est valide (menu contextuel de l'éditeur de «Graphe.ecore»). CNRS LAAS 2I Serge Bachmann Page 9/41

Eclipse Modeling Tools - Requête sur le modèle édité Générations du code 4 Générations du code 4.1 Création du fichier de génération Faire un clic droit sur «exemple.graphe.emf» et sélectionner: Sélectionner: Cliquer «Next >». CNRS LAAS 2I Serge Bachmann Page 10/41

Eclipse Modeling Tools - Requête sur le modèle édité Générations du code On sélectionne le répertoire «model» comme «parent folder», on nomme le fichier de génération: Cliquer «Next >». La génération ce fait à partir d'un modèle «Ecore»: Cliquer «Next >». CNRS LAAS 2I Serge Bachmann Page 11/41

Eclipse Modeling Tools - Requête sur le modèle édité Générations du code On utilise «Browse Workspace...» dans la fenêtre «New EMF Generator Model Ecore Import» pour sélectionner notre modèle «ecore»: Cliquer «OK», on obtient: Cliquer «Next >» CNRS LAAS 2I Serge Bachmann Page 12/41

Eclipse Modeling Tools - Requête sur le modèle édité Générations du code Ne rien modifier: Cliquer «Finish». Le fichier «Graphe.genmodel» de génération est créé: Faire un clic droit dans l'éditeur de «Graphe.genmodel» et sélectionner la commande: «Generate Model Code» : Faire de même avec «Generate Edit Code», «Generate Editor Code» : CNRS LAAS 2I Serge Bachmann Page 13/41

Eclipse Modeling Tools - Requête sur le modèle édité Générations du code On obtient: CNRS LAAS 2I Serge Bachmann Page 14/41

Eclipse Modeling Tools - Requête sur le modèle édité Création d'une requête 5 Création d'une requête Nous allons créer un projet réalisant une requête simple sur le modèle édité. La requête porte sur l'attribut coût des nœuds: «Sélectionner tous les nœuds dont le coût est supérieur à 5» Nous allons créer un nouveaux projet pour traiter la requête. 5.1 Création du projet «exemple.graphe.emf.statement» Faire: sélectionner: Cliquer «Next >» CNRS LAAS 2I Serge Bachmann Page 15/41

Eclipse Modeling Tools - Requête sur le modèle édité Création d'une requête Nommer le projet: Cliquer «Next >» CNRS LAAS 2I Serge Bachmann Page 16/41

Eclipse Modeling Tools - Requête sur le modèle édité Création d'une requête Renommer l'«activator»: Cliquer «Finish», accepter de changer de perspective. Cliquer «Yes» CNRS LAAS 2I Serge Bachmann Page 17/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» 6 Requête dans le «menubar» La commande qui activera la requête est placée dans la barre des menus. 6.1 Création «package» destiné à recevoir le code Dans le répertoire «src» on crée le package: Nommer le «pakage»: Cliquer «Finish», ce qui donne: CNRS LAAS 2I Serge Bachmann Page 18/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» 6.2 Dependencies Le «plug-in» «exemple.graphe.emf.statement» fait référence à d'autres plug-ins. Dans le «Plugin Manifest Editor» du projet sélectionner l'onglet: «Dependencies». Dans la zone «Required Plugins», cliquer le bouton «Add...» Sélectionner: Cliquer «OK». Cliquer «Add...» et sélectionner : Cliquer «OK» CNRS LAAS 2I Serge Bachmann Page 19/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» Cliquer «Add...» et sélectionner : Au final on à: Faire une sauvegarde. CNRS LAAS 2I Serge Bachmann Page 20/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» 6.3 Définition des Extensions 6.3.1 Création du point d'extension «org.eclipse.ui.editoractions» Dans le «Plugin Manifest Editor», sélectionner l'onglet «Extensions». Dans la zone «All Extensions» cliquer «Add...» Dans le «Wizard» «New Extension Extension Point Selection» sélectionner: Cliquer «Finish» CNRS LAAS 2I Serge Bachmann Page 21/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» Le point d'extension est créé avec un sous élément (editor Contribution): Sélectionner le sous élément et initialiser ses «Extension Element Details»: Remarque : Utiliser le bouton «Browse...» pour sélectionner le «targetid*» : faire une sauvegarde pour mettre à jour la zone «All Extensions», on obtient: 6.3.2 Ajouter un menu Faire un clic droit sur «exemple.graphe.editor...» et sélectionner «New > menu» : Le menu est créé: CNRS LAAS 2I Serge Bachmann Page 22/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» l'initialiser: faire une sauvegarde, on obtient: 6.3.3 Ajouter un «separator» Faire: Le séparateur est créé: L'initialiser: Faire une sauvegarde, on obtient: CNRS LAAS 2I Serge Bachmann Page 23/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» 6.3.4 Ajouter une action: Faire: on obtient: L'initialiser: Faire une sauvegarde, on obtient: CNRS LAAS 2I Serge Bachmann Page 24/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» Sélectionner «Select Big Nodes (action)», dans «Extension Element Details» cliquer: «class*:». Définir la classe: Sélectionner l'interface proposée, faire un «remove» pour la supprimer. Cliquer «Finish», la classe est créée : Nous l'éditerons par la suite. On revient à la construction des extensions. CNRS LAAS 2I Serge Bachmann Page 25/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» 6.3.5 Définition «enablement» Retour dans le «Plugin Manifest Editor» onglet «Extensions» : Faire: 6.3.6 Définition «objectclass» Faire; ce qui donne: Utiliser le bouton «Browse...» dans «Extension Element Details» pour initialiser «name*:» Cliquer «OK». CNRS LAAS 2I Serge Bachmann Page 26/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» On obtient après sauvegarde: 6.4 Le fichier «plugin.xml» Sélectionner l'onglet «plugin.xml». On retrouve la définition complète de l'extension «org.eclipse.ui.editoractions» dans le fichier «plugin.xml» : <?xml version="1.0" encoding="utf-8"?> <?eclipse version="3.4"?> <plugin> <extension point="org.eclipse.ui.editoractions"> <editorcontribution id="exemple.graphe.editorcontribution" targetid="graphe.presentation.grapheeditorid"> <menu id="exemple.graphe.querymenuid" label="query" path="graphemenuid/additions"> <separator name="additions"> </separator> </menu> <action class="moncode.selectbigcostnodesdelegate" id="exemple.graphe.selectbigcostnode" label="select Big Cost Nodes" menubarpath="graphemenuid/exemple.graphe.querymenuid/additions" style="push"> <enablement> <objectclass name="org.eclipse.emf.ecore.eobject"> </objectclass> </enablement> </action> </editorcontribution> </extension> </plugin> 6.5 Le Code L'action définie dans l'extension «org.eclipse.ui.editoraction» fait référence à la classe: c'est à dire: CNRS LAAS 2I Serge Bachmann Page 27/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» Cette classe sera définie comme sous classe de la classe «AbstactQueryDelegate», classe qui est définie dans le paragraphe ci-dessous. 6.5.1 La classe «AbstractQueryDelegate» Faire : CNRS LAAS 2I Serge Bachmann Page 28/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» Définir la classe: Remarque : Utiliser le bouton «Browse...» pour définir les interfaces : CNRS LAAS 2I Serge Bachmann Page 29/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» Cliquer «Finish» la classe est créée: package moncode; import org.eclipse.jface.action.iaction; import org.eclipse.jface.viewers.iselection; import org.eclipse.swt.widgets.event; import org.eclipse.ui.iactiondelegate2; import org.eclipse.ui.ieditoractiondelegate; import org.eclipse.ui.ieditorpart; public class AbstractQueryDelegate implements IEditorActionDelegate, IActionDelegate2 { @Override public void run(iaction action) { // TODO Auto-generated method stub @Override public void selectionchanged(iaction action, ISelection selection) { // TODO Auto-generated method stub @Override public void init(iaction action) { // TODO Auto-generated method stub @Override public void dispose() { // TODO Auto-generated method stub @Override public void runwithevent(iaction action, Event event) { // TODO Auto-generated method stub @Override public void setactiveeditor(iaction action, IEditorPart targeteditor) { // TODO Auto-generated method stub L'éditer: package moncode; import graphe.presentation.grapheeditor; import java.util.collection; import org.eclipse.emf.ecore.eobject; import org.eclipse.jface.action.iaction; import org.eclipse.jface.dialogs.messagedialog; import org.eclipse.jface.viewers.iselection; import org.eclipse.jface.viewers.istructuredselection; import org.eclipse.swt.widgets.event; import org.eclipse.swt.widgets.shell; import org.eclipse.ui.iactiondelegate2; import org.eclipse.ui.ieditoractiondelegate; import org.eclipse.ui.ieditorpart; /** * This action delegate queries the user for the name of a class. Then it uses * the query APIs to find the class and selects it in the editor. * * @see IEditorActionDelegate */ public abstract class AbstractQueryDelegate CNRS LAAS 2I Serge Bachmann Page 30/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» implements IEditorActionDelegate, IActionDelegate2 { /** * Error message to display when an exception occurred */ protected static final String MESSAGE_EXCEPTION = "QueryStatementsMessages.message_exception"; /** * The shell this action is hosted in */ protected Shell shell = null; /** * The active editor */ protected GrapheEditor editor = null; /** * Selected EObjects */ protected Collection<EObject> selectedeobjects = null; /** * The InputDialog title */ protected String title; /** * The InputDialog message */ protected String message; /** * The message to output when query result set is empty */ protected String notfoundmessage; /** * Constructor */ public AbstractQueryDelegate(String titlein, String messagein, String notfoundmessagein) { title = titlein; message = messagein; notfoundmessage = notfoundmessagein; /** * Perform a query that returns a set of objects. * * @param value * The value used to drive the query * @return The set of objects returned by the query */ protected abstract Collection<EObject> performquery(object value) throws Exception; /* * @see org.eclipse.ui.iactiondelegate#selectionchanged(org.eclipse.jface.action.iaction, * org.eclipse.jface.viewers.iselection) */ public void selectionchanged(iaction action, final ISelection selection) { this.selectedeobjects = null; try { if (selection instanceof IStructuredSelection) { IStructuredSelection structuredselection = (IStructuredSelection) selection; this.selectedeobjects = new java.util.arraylist<eobject>(); for (Object next : structuredselection.tolist()) { if (next instanceof EObject) { selectedeobjects.add((eobject) next); catch (Exception e) { // Exceptions are not expected MessageDialog.openInformation(shell, title, MESSAGE_EXCEPTION); throw new RuntimeException(e); finally { CNRS LAAS 2I Serge Bachmann Page 31/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» action.setenabled((null!= selectedeobjects)); /* * @see org.eclipse.ui.iactiondelegate2#dispose() */ public void dispose() { //No-op /* * @see org.eclipse.ui.ieditoractiondelegate#setactiveeditor(org.eclipse.jface.action.iaction, * org.eclipse.ui.ieditorpart) */ public void setactiveeditor(iaction action, IEditorPart targeteditor) { this.editor = (GrapheEditor) targeteditor; if ( targeteditor!= null ) { this.shell = targeteditor.getsite().getshell(); /* * @see org.eclipse.ui.iactiondelegate2#init(org.eclipse.jface.action.iaction) */ public void init(iaction action) { // No-op /* * @see org.eclipse.ui.iactiondelegate2#runwithevent(org.eclipse.jface.action.iaction, * org.eclipse.swt.widgets.event) */ public void runwithevent(iaction action, Event event) { run(action); Faire une sauvegarde. Structure de la classe: CNRS LAAS 2I Serge Bachmann Page 32/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» 6.5.2 La classe «SelectBigCostNodesDelegate» Dans le «Package Explorer» double cliquer «SelectBigCostNodesDelegate» Éditer la classe: package moncode; import graphe.graphepackage; import java.util.collection; import org.eclipse.emf.ecore.eobject; import org.eclipse.emf.query.conditions.eobjects.eobjectcondition; import org.eclipse.emf.query.conditions.eobjects.structuralfeatures.eobjectattributevaluecondition; import org.eclipse.emf.query.conditions.numbers.numbercondition; import org.eclipse.emf.query.statements.from; import org.eclipse.emf.query.statements.select; import org.eclipse.emf.query.statements.where; import org.eclipse.jface.action.iaction; import org.eclipse.jface.dialogs.messagedialog; public class SelectBigCostNodesDelegate extends AbstractQueryDelegate { public SelectBigCostNodesDelegate() { super("selection Noeuds de Cout supérieur ou égal à 5", null, "Pas de noeud de cout supérieur ou égal à 5"); @Override public void run(iaction action) { try { Collection<EObject> result = performquery(null); if (result.isempty()) { MessageDialog.openInformation(shell, title, notfoundmessage); else { this.editor.setselectiontoviewer(result); catch (Exception e) { // Exceptions are not expected MessageDialog.openInformation(shell, title, MESSAGE_EXCEPTION); throw new RuntimeException(e); @Override protected Collection<EObject> performquery(object value) throws Exception { /* * Looking for nodes whose "cout" > 5 */ EObjectCondition condition = new EObjectAttributeValueCondition( GraphePackage.eINSTANCE.getNoeuds_Cout(), CNRS LAAS 2I Serge Bachmann Page 33/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «menubar» NumberCondition.between(5,Integer.MAX_VALUE)); // Build the select query statement SELECT select = new SELECT( new FROM(selectedEObjects), new WHERE(condition)); // Execute query return select.execute(); Faire une sauvegarde. Structure de la classe: CNRS LAAS 2I Serge Bachmann Page 34/41

Eclipse Modeling Tools - Requête sur le modèle édité Test query dans «Menu Bar» 7 Test query dans «Menu Bar» Exécuter le plug-in sur une nouvelle plate-forme: Dans «Run Configurations» double cliquer «Eclipse Application». Mettre à jour le nom de la configuration. Cliquer «Apply»: CNRS LAAS 2I Serge Bachmann Page 35/41

Eclipse Modeling Tools - Requête sur le modèle édité Test query dans «Menu Bar» Faire «Run», fermer la fenêtre «Welcome», quelques vues. Ouvrir un projet «General > Project», le nommer «testquery». Faire un clic droit sur le projet et sélectionner la commande : «New > Other...». Sélectionner «Example EMF Model Creation Wizards > Graphe Model». Nommer le Fichier «G1.graphe» Selectionner l'objet du modèle à créer : «Graphe». Ouvrir la vue «Properties», éditer le modèle : Faire une sauvegarde. En ouvrant le modèle en mode textuel: CNRS LAAS 2I Serge Bachmann Page 36/41

Eclipse Modeling Tools - Requête sur le modèle édité Test query dans «Menu Bar» on visualise tous les attributs «Cout» associé aux nœuds: 7.1 Exécution «Query» Dans l'éditeur de «G1.graphe» sélectionner «Graphe» puis faire: ce qui donne: les Nœuds N5 et N6 qui ont un coût supérieur ou égal à 5 sont sélectionés. CNRS LAAS 2I Serge Bachmann Page 37/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «popup» menu de l'éditeur 8 Requête dans le «popup» menu de l'éditeur Pour créer rapidement cette requête on sélectionne l'onglet «plugin.xml» du «plug-in Manifest Editor», on l'édite, pour ajouter l'extension «org.eclipse.ui.popupmenus»: <?xml version="1.0" encoding="utf-8"?> <?eclipse version="3.4"?> <plugin> <extension point="org.eclipse.ui.editoractions"> <editorcontribution id="exemple.graphe.editorcontribution" targetid="graphe.presentation.grapheeditorid"> <menu id="exemple.graphe.querymenuid" label="query" path="graphemenuid/additions"> <separator name="additions"> </separator> </menu> <action class="moncode.selectbigcostnodesdelegate" id="exemple.graphe.selectbigcostnode" label="select Big Cost Nodes" menubarpath="graphemenuid/exemple.graphe.querymenuid/additions" style="push"> <enablement> <objectclass name="org.eclipse.emf.ecore.eobject"> </objectclass> </enablement> </action> </editorcontribution> </extension> <extension point="org.eclipse.ui.popupmenus"> <viewercontribution id="exemple.graphe.viewercontribution" targetid="graphe.presentation.grapheeditorid"> <menu id="exemple.graphe.querymenuid" label="query" path="additions"> <separator name="separator"> </separator> </menu> <action class="moncode.selectbigcostnodesdelegate" id="exemple.graphe.selectbigcostnodes" label="select Big Cost Nodes" menubarpath="exemple.graphe.querymenuid/additions"> <enablement> <objectclass name="org.eclipse.emf.ecore.eobject"> </objectclass> </enablement> </action> </viewercontribution> </extension> </plugin> Faire une sauvegarde. CNRS LAAS 2I Serge Bachmann Page 38/41

Eclipse Modeling Tools - Requête sur le modèle édité Requête dans le «popup» menu de l'éditeur Ce qui donne si l'on sélectionne l'onglet «Extension» CNRS LAAS 2I Serge Bachmann Page 39/41

Eclipse Modeling Tools - Requête sur le modèle édité Test requête dans le «popup» menu 9 Test requête dans le «popup» menu On relance le test avec dans la barre des outils. Une nouvelle plateforme Eclipse est lancée, on retrouve le graphe précédemment édité. Sélectionner «Graphe», faire un clic droit dans la zone d'édition et dans le menu popup menu on sélectionne «Query > Select Big Cost Nodes» ce qui donne: CNRS LAAS 2I Serge Bachmann Page 40/41

Eclipse Modeling Tools - Requête sur le modèle édité Conclusions 10 Conclusions La programmation des «Query» peut paraître complexe. Le lecteur se reportera utilement au «help» grâce à la commande «Help > Help Contents»: 11 Licence La licence «créative commons» : http://creativecommons.org/licenses/by-nc-nd/2.0/fr/ s'applique à ce document. CNRS LAAS 2I Serge Bachmann Page 41/41