Tutorial: GEF (Graphical Editing Framework) [Part 1]
Par Jean Charles MAMMANA, lundi 21 mai 2007 à 20:08 :: Programmation :: #6 :: rss
GEF (Graphical Editing Framework) fournit aux développeurs une solution complète (et simple?) de modélisation graphique d'un modèle objet en java...
Ayant eu moi même d'énormes difficultés à prendre en main GEF pour les besoins d'une application sous Eclipse, J'ai décidé de rassembler mes connaissances sur le sujet ICI afin que cela puisse servir à d'autres...
Ayant eu moi même d'énormes difficultés à prendre en main GEF pour les besoins d'une application sous Eclipse, J'ai décidé de rassembler mes connaissances sur le sujet ICI afin que cela puisse servir à d'autres...
Vous devez au préalable avoir installé GEF : http://download.eclipse.org/tools/gef/downloads/
Nous allons partir sur la base d'un plugin RCP (Rich Client Platform) d'Eclipse pour réaliser une application utilisant GEF.
On lance eclipse, puis : File - new - Project

On sélectionne "Plug-in Project".

On lui donne un nom.

On souhaite créer une "Rich Client Application".

Il faut choisir un template, on va partir sur "Hello RCP" qui est le template le plus basique.
Un popup peut vous demander si vous souhaitez ouvrir la perspective associé à ce type de projet. On répond oui. Une perspective est la manière dont les éléments graphiques sont affiché sous eclipse.
Il faut ajouter les plug-in GEF dans la liste des dépendances de notre projet. Editez le fichier plugin.xml, dans l'onglet "Dependencies" en cliquant sur Add.
Maintenant on crée une nouvelle class dans dans le package qui hérite de org.eclipse.gef.ui.parts.GraphicalEditor. Cette class va définir notre Editeur Graphique. C'est en quelque sorte le point de départ de notre travail. Mais avant il faut intégrer notre EditorPart au plugin...
On ajoute un ID pour dire à eclipse qu'on souhaite utiliser cette class en tant qu'extension. On crée par la même occasion un constructeur dans lequel on défini l'EditDomain qu'on souhaite utilise.
Il faut créer une autre class qui implémente l'interface org.eclipse.ui.IEditorInput. c'est cette class qui décrit l'EditorPart.
On édite plugin.xml, dans l'onglet "Extensions", on ajoute une extension en cliquant sur Add, on choisi "org.eclipse.ui.editor".
On set certaines propriétés comme sur le screenshot ci dessous.
Maintenant il ne reste plus qu'a lancer notre Editor au démarrage de l'application.
Pour cela on va surcharger la méthode postStartup() dans ApplicationWorkbenchAdvisor :
Vous avez maintenant un plugin RCP fonctionnel disposant d'un Editor prêt à accueillir GEF :)

Vous pouvez télécharger le projet de ce tutorial ICI
Nous allons partir sur la base d'un plugin RCP (Rich Client Platform) d'Eclipse pour réaliser une application utilisant GEF.
On lance eclipse, puis : File - new - Project

On sélectionne "Plug-in Project".

On lui donne un nom.

On souhaite créer une "Rich Client Application".

Il faut choisir un template, on va partir sur "Hello RCP" qui est le template le plus basique.
Il faut ajouter les plug-in GEF dans la liste des dépendances de notre projet. Editez le fichier plugin.xml, dans l'onglet "Dependencies" en cliquant sur Add.
Maintenant on crée une nouvelle class dans dans le package qui hérite de org.eclipse.gef.ui.parts.GraphicalEditor. Cette class va définir notre Editeur Graphique. C'est en quelque sorte le point de départ de notre travail. Mais avant il faut intégrer notre EditorPart au plugin...
On ajoute un ID pour dire à eclipse qu'on souhaite utiliser cette class en tant qu'extension. On crée par la même occasion un constructeur dans lequel on défini l'EditDomain qu'on souhaite utilise.
public class MyGraphicalEditor extends GraphicalEditor {
public static final String ID = "tutogef.mygraphicaleditor";
public MyGraphicalEditor() {
setEditDomain(new DefaultEditDomain(this));
}
(...)
}
public static final String ID = "tutogef.mygraphicaleditor";
public MyGraphicalEditor() {
setEditDomain(new DefaultEditDomain(this));
}
(...)
}
Il faut créer une autre class qui implémente l'interface org.eclipse.ui.IEditorInput. c'est cette class qui décrit l'EditorPart.
package tutogef;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;
public class MyEditorInput implements IEditorInput {
public String name = null;
public MyEditorInput(String name) {
this.name = name;
}
@Override
public boolean exists() {
return (this.name != null);
}
public boolean equals(Object o) {
if (!(o instanceof MyEditorInput))
return false;
return ((MyEditorInput)o).getName().equals(getName());
}
@Override
public ImageDescriptor getImageDescriptor() {
return ImageDescriptor.getMissingImageDescriptor();
}
@Override
public String getName() {
return this.name;
}
@Override
public IPersistableElement getPersistable() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getToolTipText() {
return this.name;
}
@Override
public Object getAdapter(Class adapter) {
// TODO Auto-generated method stub
return null;
}
}
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;
public class MyEditorInput implements IEditorInput {
public String name = null;
public MyEditorInput(String name) {
this.name = name;
}
@Override
public boolean exists() {
return (this.name != null);
}
public boolean equals(Object o) {
if (!(o instanceof MyEditorInput))
return false;
return ((MyEditorInput)o).getName().equals(getName());
}
@Override
public ImageDescriptor getImageDescriptor() {
return ImageDescriptor.getMissingImageDescriptor();
}
@Override
public String getName() {
return this.name;
}
@Override
public IPersistableElement getPersistable() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getToolTipText() {
return this.name;
}
@Override
public Object getAdapter(Class adapter) {
// TODO Auto-generated method stub
return null;
}
}
On édite plugin.xml, dans l'onglet "Extensions", on ajoute une extension en cliquant sur Add, on choisi "org.eclipse.ui.editor".
On set certaines propriétés comme sur le screenshot ci dessous.

Maintenant il ne reste plus qu'a lancer notre Editor au démarrage de l'application.
Pour cela on va surcharger la méthode postStartup() dans ApplicationWorkbenchAdvisor :
public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
(...)
@Override
public void postStartup() {
try {
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
page.openEditor(new MyEditorInput("TutoGEF"), MyGraphicalEditor.ID, false);
} catch (Exception e) {
e.printStackTrace();
}
}
}
(...)
@Override
public void postStartup() {
try {
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
page.openEditor(new MyEditorInput("TutoGEF"), MyGraphicalEditor.ID, false);
} catch (Exception e) {
e.printStackTrace();
}
}
}

Vous pouvez télécharger le projet de ce tutorial ICI

Commentaires
1. Le mercredi 13 juin 2007 à 14:40, par hebus
2. Le mercredi 13 juin 2007 à 17:00, par hebus
3. Le mercredi 13 juin 2007 à 19:27, par Psykokwak
4. Le jeudi 20 septembre 2007 à 23:30, par pierro
5. Le jeudi 20 septembre 2007 à 23:35, par pierro
6. Le vendredi 07 décembre 2007 à 11:24, par triton4
7. Le mardi 08 janvier 2008 à 10:07, par Stephanie
8. Le vendredi 03 octobre 2008 à 17:09, par Nico
9. Le jeudi 14 mai 2009 à 09:57, par Ziad
10. Le jeudi 14 mai 2009 à 11:48, par Ziad
11. Le jeudi 04 juin 2009 à 16:35, par imen
12. Le lundi 31 mai 2010 à 15:23, par darkmoon
13. Le jeudi 17 juin 2010 à 19:04, par nabil
Ajouter un commentaire