Laboratoire d'analyse et d'architecture des Systèmes Application Client Riche Première Application client riche Résumé: Cet exemple introduit la notion d'application client Riche. Une application client riche trés simple est développée, testée puis déployée. Comme pour un plug-in la construction de l'application utilise le "Plug-in Manifest Editor". Contrairement à un plug-in qui ne peut s'exécuter que sur une plateforme Eclipse, une application client riche s'exécute seule. En fait, elle "embarque" tout ce qui est nécessaire à son exécution. Mots clés: Eclipse, INDIGO, RCP Serge Bachmann CNRS LAAS 2I Serge Bachmann Page 1/39
Sommaire 1 Introduction...4 1.1 Spécification de l'application...4 1.2 Lancement de la plate-forme Eclipse...4 1.3 Passage en perspective «Plug-in Development»...5 2 Initialisation de l'application...6 2.1 Génération de l'application à partir d'un template...6 2.2 Test de l'application générée...10 2.2.1 Test de l'application générée...11 3 Construction de l'application...12 3.1 Création du menu «Salut»...13 3.1.1 L'extension «org.eclipse.ui.commands»...13 3.1.1.1 Création des commandes...14 3.1.2 L'extension «org.eclipse.ui.handlers»...15 3.1.2.1 Création d'un «package» pour recevoir les handlers...15 3.1.2.2 Création des handlers...17 3.1.3 L'extension «org.eclipse.ui.menus»...23 3.2 Test application...26 3.3 Modification de la barre des menus...27 4 Création «Product»...28 4.1 Création des dépendances...31 4.2 Lancement du «product»...32 4.2.1 Le menu «Help»...33 4.2.2 Le menu «Salut»...34 4.2.3 Le menu «File»...34 4.3 «Branding»...34 5 Déploiement de l'application...35 5.1 Définition du contenu...35 5.2 Génération...36 5.3 Test de l'application...37 5.4 Version archivée...38 6 Conclusions...39 7 Licence...39 CNRS LAAS 2I Serge Bachmann Page 2/39
Informations Générale Mon fichier source du document: E:\FORMATION_Eclipse\modeling-indigo- SR1\RCP\DOCUMENTATION\PremiereApplication.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: 26 octobre 2011 Date d'impression: 7 décembre 2011 Plate forme Windows 32 CNRS LAAS 2I Serge Bachmann Page 3/39
Introduction 1 Introduction 1.1 Spécification de l'application Un menu «Salut» est ajouté à la barre des menus. A ce menu on associe deux commandes «Bonjour» et «Hello». La commande «Bonjour» affiche le message «Bonjour». La commande «Hello» affiche le message «Hello». La barre des menu est complétée par un menu «File» et «Help». 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: On sélectionne le «workspace»: Cliquer «OK», Fermer la fenêtre «Welcome» CNRS LAAS 2I Serge Bachmann Page 4/39
Introduction 1.3 Passage en perspective «Plug-in Development» Faire : «Window - Open Perspective > Other...» : Dans «Open Perspective» sélectionner «Plug-in Development»: Cliquer «OK» Pour simplifier le «Workbench» on ferme les vues: Outline, Task List, Error Log, Problems, Tasks, Plug-ins). On obtient: CNRS LAAS 2I Serge Bachmann Page 5/39
Initialisation de l'application 2 Initialisation de l'application 2.1 Génération de l'application à partir d'un template Sélectionner «File > New > Plug-in Project» Dans «New Plug-in Project Plug-in Project» nommer le projet : Cliquer «Next >». CNRS LAAS 2I Serge Bachmann Page 6/39
Initialisation de l'application Dans «New Plug-in Project - Content» donner le nom du «provider»et indiquez que vous souhaiter créer une Application Client Riche : Cliquer «Next>». CNRS LAAS 2I Serge Bachmann Page 7/39
Initialisation de l'application Dans «New Plug-in Project - Templates» sélectionner l'application «RCP» la plus simple «Hello RCP»: Cliquer «Finish». CNRS LAAS 2I Serge Bachmann Page 8/39
Initialisation de l'application On obtient: Le «Workbench» est constitué de deux parties: Une vue «Package Explorer» qui permet de sélectionner différents objets pour éventuellement les éditer. Une zone d'édition qui contient actuellement le «Plug-in Manifest Editeur» qui joue un rôle central dans la création de l'application. CNRS LAAS 2I Serge Bachmann Page 9/39
Initialisation de l'application 2.2 Test de l'application générée Avant d'exécuter l'application on édite dans la classe: «ApplicationWorkbenchWindowAdvisor» : la méthode «prewindowopen( )» pour modifier le titre: Faire une sauvegarde. CNRS LAAS 2I Serge Bachmann Page 10/39
Initialisation de l'application 2.2.1 Test de l'application générée Dans le «Plug-in Manifest Editor» sélectionner l'onglet «Overview». Dans cette page dans la zone «Testing» cliquer «Launch an Eclipse application», on obtient: Fermer l'application. CNRS LAAS 2I Serge Bachmann Page 11/39
Construction de l'application 3 Construction de l'application Pour développer l'application on procède de la même façon que pour les «plug-ins» Ouvrir ci nécessaire le «Plug-in Manifest Editor» et sélectionner l'onglet «Extensions». On obtient l'arbre des extensions créés par la génération : CNRS LAAS 2I Serge Bachmann Page 12/39
Construction de l'application 3.1 Création du menu «Salut» Nous allons construire la forme la plus simple d'une commande. 3.1.1 L'extension «org.eclipse.ui.commands» Cette extension permet de créer un ensemble de commandes. Il est possible d'organiser les commandes en catégories, nous n'utiliserons pas cette possibilité, afin de simplifier la construction. Dans le «Plug-in Manifest Editor» cliquer «Add...»: Dans «New Extension Extension Point Selection» taper «commands» dans «Extension Point filter» sélectionner la commande: CNRS LAAS 2I Serge Bachmann Page 13/39
Construction de l'application Ne pas sélectionner de «Template», cliquer «Finish», faire une sauvegarde, on obtient: 3.1.1.1 Création des commandes Faire un clic droit sur «org.eclipse.ui.commands» puis sélectionner «New > Command» Initialiser les «Extension Element Details» de la commande que l'on vient de créer et faire une sauvegarde: CNRS LAAS 2I Serge Bachmann Page 14/39
Construction de l'application Créer de même une seconde commande, Faire une sauvegarde: 3.1.2 L'extension «org.eclipse.ui.handlers» 3.1.2.1 Création d'un «package» pour recevoir les handlers Avant de créer cette extension nous allons définir un «package» pour recevoir les «handlers» Dans le «Package Explorer», faire un clic droit sur «src» et sélectionner «New > Package» : CNRS LAAS 2I Serge Bachmann Page 15/39
Construction de l'application Nommer le «package» : Cliquer «Finish», le «package» est créé: CNRS LAAS 2I Serge Bachmann Page 16/39
Construction de l'application 3.1.2.2 Création des handlers Nous allons créer les «handler»s associés aux commandes. Pour cela revenons dans le «Plug-in Manifest Editor» onglet «Extensions». Cliquer «Add...». Dans «New Extension - Extension Point Selection». Sélectionner «org.eclipse.ui.handlers» : Cliquer «Finish», ce qui donne: Sous «org.eclipse.ui.handlers» un premier «handler» est automatiquement crée. CNRS LAAS 2I Serge Bachmann Page 17/39
Construction de l'application Sélectionner cet «handler» pour initialise ses «Extension Element Details», faire une sauvegarde: La liaison handler commande se fait par le «commandid». Pour créer le code du handler cliquer «class:» Dans «New Java Class Java Class» utiliser le bouton «Browse» pour saisir le nom du «Package» qui recevra la classe. Dans «Package Selection» sélectionner le package «moncode» : Cliquer «OK» le nom du «package» est mis à jour: CNRS LAAS 2I Serge Bachmann Page 18/39
Construction de l'application Saisir le nom du «handler», finalement la fenêtre «New Java Class Java Class» devient: Cliquer «Finish». L'«handler» devra remplir le contrat fixé par l'interface «org.eclipse.core.commands.ihandler» d'où la description de la classe créée: CNRS LAAS 2I Serge Bachmann Page 19/39
Construction de l'application et le code correspondant: package moncode; import org.eclipse.core.commands.executionevent; import org.eclipse.core.commands.executionexception; import org.eclipse.core.commands.ihandler; import org.eclipse.core.commands.ihandlerlistener; public class BonjourHandler implements IHandler { @Override public void addhandlerlistener(ihandlerlistener handlerlistener) { // TODO Auto-generated method stub @Override public void dispose() { // TODO Auto-generated method stub @Override public Object execute(executionevent event) throws ExecutionException { // TODO Auto-generated method stub return null; @Override public boolean isenabled() { // TODO Auto-generated method stub return false; @Override public boolean ishandled() { // TODO Auto-generated method stub return false; @Override public void removehandlerlistener(ihandlerlistener handlerlistener) { // TODO Auto-generated method stub Nous allons éditer ce code afin que: les méthodes «isenabled( )» et «ishandled( )» retourne «true» la méthode «execute( )» affiche le message «Bonjour» Le nouveau code: package moncode; import org.eclipse.core.commands.executionevent; import org.eclipse.core.commands.executionexception; import org.eclipse.core.commands.ihandler; import org.eclipse.core.commands.ihandlerlistener; import org.eclipse.jface.dialogs.messagedialog; import org.eclipse.swt.widgets.shell; import org.eclipse.ui.handlers.handlerutil; public class BonjourHandler implements IHandler { @Override public void addhandlerlistener(ihandlerlistener handlerlistener) { // non utilisée @Override public void dispose() { // non utilisée CNRS LAAS 2I Serge Bachmann Page 20/39
Construction de l'application @Override public Object execute(executionevent event) throws ExecutionException { Shell shell = HandlerUtil.getActiveShell(event); MessageDialog.openInformation(shell, "Ma première application", "Bonjour"); return null; @Override public boolean isenabled() { return true; @Override public boolean ishandled() { return true; @Override public void removehandlerlistener(ihandlerlistener handlerlistener) { // non utilisée Faire une sauvegarde et revenir au «Plug-in Manifest Editor» onglet «Extensions» on à: De la même manière on crée un deuxième «handlers» dans «moncode» de nom «HelloHandler» CNRS LAAS 2I Serge Bachmann Page 21/39
Construction de l'application ayant pour code: package moncode; import org.eclipse.core.commands.executionevent; import org.eclipse.core.commands.executionexception; import org.eclipse.core.commands.ihandler; import org.eclipse.core.commands.ihandlerlistener; import org.eclipse.jface.dialogs.messagedialog; import org.eclipse.swt.widgets.shell; import org.eclipse.ui.handlers.handlerutil; public class HelloHandler implements IHandler { @Override public void addhandlerlistener(ihandlerlistener handlerlistener) { // non utilisé @Override public void dispose() { // non utilisé @Override public Object execute(executionevent event) throws ExecutionException { Shell shell = HandlerUtil.getActiveShell(event); MessageDialog.openInformation(shell, "Ma première application", "Hello"); return null; @Override public boolean isenabled() { return true; @Override public boolean ishandled() { return true; @Override public void removehandlerlistener(ihandlerlistener handlerlistener) { // non utilisé Faire une sauvegarde générale. CNRS LAAS 2I Serge Bachmann Page 22/39
Construction de l'application 3.1.3 L'extension «org.eclipse.ui.menus» Revenir au «Plug-in Manifest Editor» onglet «Extensions». Cliquer «Add...». Dans «New Extension Extension Point Selection» sélectionner «org.eclipse.ui.menus» : Cliquer «Finish». Pour positionner le menu faire un clic droit sur «org.eclipse.ui.menus» et sélectionner «New > menucontribution»: Dans «Extension Element Detail» de «menucontribution» initialiser «locationuri*:» avec: CNRS LAAS 2I Serge Bachmann Page 23/39
Construction de l'application «menu:org.eclipse.ui.main.menu?after=additions» Ce qui donne : Pour créer le menu. Faire un clic droit sur «(menucontribution) et sélectionner «New > menu»: Dans les «Extension Element Details» de (menu) initialiser «label*:» et faire une sauvegarde: CNRS LAAS 2I Serge Bachmann Page 24/39
Construction de l'application Il nous reste à placer les commandes dans le menu. Faire un clic droit sur «Salut(menu) et sélectionner «New > command» Dans les «Extension Element Details» de (command) initialiser «commandid*:» Faire de même pour la commande «Hello», faire une sauvegarde: CNRS LAAS 2I Serge Bachmann Page 25/39
Construction de l'application 3.2 Test application Dans le «Plug-in Manifest Editor» sélectionner l'onglet «Overview». Dans cette page dans la zone «Testing» cliquer «Launch an Eclipse application», on obtient: commande qui affiche le message: CNRS LAAS 2I Serge Bachmann Page 26/39
Construction de l'application 3.3 Modification de la barre des menus Considérons la classe «ApplicationActionBarAdvisor»: nous allons l'éditer: package org.eclipse.applisalut; import org.eclipse.jface.action.imenumanager; import org.eclipse.jface.action.menumanager; import org.eclipse.ui.iworkbenchwindow; import org.eclipse.ui.actions.actionfactory; import org.eclipse.ui.actions.actionfactory.iworkbenchaction; import org.eclipse.ui.application.actionbaradvisor; import org.eclipse.ui.application.iactionbarconfigurer; public class ApplicationActionBarAdvisor extends ActionBarAdvisor { private IWorkbenchAction exitaction; private IWorkbenchAction aboutaction; public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) { super(configurer); protected void makeactions(iworkbenchwindow window) { exitaction = ActionFactory.QUIT.create(window); register(exitaction); aboutaction = ActionFactory.ABOUT.create(window); protected void fillmenubar(imenumanager menubar) { MenuManager monapplimenu = new MenuManager("&File", "File"); monapplimenu.add(exitaction); MenuManager helpmenu = new MenuManager("&Help", "help"); helpmenu.add(aboutaction); menubar.add(monapplimenu); menubar.add(helpmenu); Faire une sauvegarde. Notre application est terminée, nous allons en faire un «product». CNRS LAAS 2I Serge Bachmann Page 27/39
Création «Product» 4 Création «Product» Création de la configuration du «product» Faire un clic droit sur «org.eclise.applisalut» dans le menu contextuel sélectionner «New > Product Configuration»: Mettre à jour «New Product Configuration Product Configuration» : Faire «Finish» CNRS LAAS 2I Serge Bachmann Page 28/39
Création «Product» Le «product» est créé: L'éditeur multi-pages «Product Configuration Editor» est ouvert à l'onglet «Overview». On initialise la zone «General Information»: CNRS LAAS 2I Serge Bachmann Page 29/39
Création «Product» Dans la zone «Product Definition» cliquer «New...», mettre à jour «New Product Definition Product Definition»: Cliquer «Finish», on obtient: Faire une sauvegarde. CNRS LAAS 2I Serge Bachmann Page 30/39
Création «Product» 4.1 Création des dépendances Dans le «Product Configuration Editor» onglet «Dependencies» cliquer «Add...». Dans «Plugin Selection Select a Plug-in:» sélectionner «org.eclipse.applisalut»: Cliquer «OK». L'application apparaît dans les dépendances: CNRS LAAS 2I Serge Bachmann Page 31/39
Création «Product» Mais notre application nécessite d'autres «plug-ins». Cliquer «Add Required Plug-ins» ce qui donne: Faire une sauvegarde. 4.2 Lancement du «product» Revenir dans le «Product Configuration Editor» onglet «Overview». Dans la zone «Testing» cliquer «Synchronize» puis «Launch an Eclipse application» on obtient (après avoir redimensionné la fenêtre de l'application): CNRS LAAS 2I Serge Bachmann Page 32/39
Création «Product» 4.2.1 Le menu «Help» La commande «Help > About Application Salut»: fait apparaître la fenêtre: Le bouton «Installation Details» permet de visualiser les plug-ins embarqués par l'application : CNRS LAAS 2I Serge Bachmann Page 33/39
Création «Product» 4.2.2 Le menu «Salut» Notre menu pour afficher les messages «Bonjour» et «Hello» 4.2.3 Le menu «File» La commande: «monmenu > Exit» permet de quitter l'application. 4.3 «Branding» Ci dessus, la fenêtre «About Application Salut» est vide. Dans le «Product Configuration Editor» onglet «Branding» initialiser la zone «About dialog». Saisir le texte et pour l'image utiliser «Browse...» Faire une sauvegarde générale. Relancer l'application (onglet «Overview», Synchronize, Launch an Eclipse application). Si on teste la commande «About Application Salut» on obtient maintenant: CNRS LAAS 2I Serge Bachmann Page 34/39
Déploiement de l'application 5 Déploiement de l'application Nous considérons que les répertoires: /SALUT /SALUT_ARCHIVE existent. Nous allons créer l'application dans ces répertoires respectivement sous la forme de répertoie et sous la forme d'un fichier zip. 5.1 Définition du contenu Dans le «Package Explorer» double cliquer «META-INF > MANIFEST.MF» pour ouvrir le «Plug-in Manifest Editor» sélectionner l'onglet «Build». Initialiser la zone «Binary Build»: On inclut les «icons», faire une sauvegarde. CNRS LAAS 2I Serge Bachmann Page 35/39
Déploiement de l'application 5.2 Génération Pour ouvrir le «Produit Configuration Editor» double cliquer «org.eclipse.applisalut.product» dans la vue «Package Explorer». Sélectionner l'onglet «Overview». Dans la zone «Exporting» sélectionner «Eclipse Produit export wizard» Dans «Export Eclipse product» donner le répertoire de destination. On suppose qu'il existe sinon le créer: Faire «Finish» CNRS LAAS 2I Serge Bachmann Page 36/39
Déploiement de l'application Le produit est exporté: 5.3 Test de l'application Le produit exporté: On ouvre «eclipse»: CNRS LAAS 2I Serge Bachmann Page 37/39
Déploiement de l'application On double clique «eclipse.exe» l'application apparaît: et le répertoire «eclipse» contient après le lancement de l'application : 5.4 Version archivée Lors de l'exportation on change de destinataire: L'application est fournie sous la forme d'un fichier «AppliSalut.zip» CNRS LAAS 2I Serge Bachmann Page 38/39
Conclusions 6 Conclusions Dans ce document on reprend le plug-in décrit dans le document «Premier Plug-in» pour en faire une application indépendante. On retrouve les concepts utilisés pour les plug-in en particulier l'utilisation du «Plug-in Manifest Editor». Le «Product Configuration Editor» permet de «customiser» notre application. Nous n'avons abordé que quelques points d'eclipse RCP. Le lecteur pourra se reporter au livre: Eclipse Rich Client Platform. Second Edition. Auteurs: Jeff McAffer, Jean-Michel Lemieux, Chris Aniszczyk ISBN-13: 978-0-321-60378-4 7 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 39/39