gmf_tutorial8 [GMF Samples And Tutorials]
 

Overview

In this tutorial we will see how to add a label to a diagram edge.

The diagram editor will allow to add Objects linked to other Objects. Each link will have an identifier displayed through a dedicated label.

This tutorial has been built with :

  • Eclipse 3.5.1
  • Graphical Modeling Framework SDK 2.2.1
  • Eclipse Modeling Framework 2.5.0

Model creation

  • Create a new GMF project named LinkedObjects
  • Create a new java package named jfb.examples.gmf.linkedobjects
  • Create theses java interfaces :
    • Our diagram contains objects :
package jfb.examples.gmf.linkedobjects;
 
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
 
/**
 * @model
 */
public interface Diagram extends EObject {
 
	/**
	 * @model containment="true"
	 */
	public EList<Object> getObjects();
 
}
  • Each object has a name an contains object links :
package jfb.examples.gmf.linkedobjects;
 
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EObject;
 
/**
 * @model
 */
public interface Object extends EObject {
 
	/**
	 * @model
	 */
	public String getName();
 
	/**
	 * @model containment="true"
	 */
	public EList<Link> getLinks();
 
}
  • Each link has an id and a reference to the target object :
package jfb.examples.gmf.linkedobjects;
 
import org.eclipse.emf.ecore.EObject;
 
/**
 * @model
 */
public interface Link extends EObject {
 
	/**
	 * @model
	 */
	public String getId();
 
	/**
	 * @model
	 */
	public Object getTargetObject();
 
}
  • Create a new EMF Generator Model named linkedobjects.genmodel in the model folder (right click on the LinkedObjects project, select New, choose EMF Generator Model)
  • Select Annotated Java and click next
  • Select the package that you have just created above and click finish
  • Optionnaly, you can generate a visual representation of the model by right clicking on the linkedobjects.ecore file that has been generated above and by selecting Initialize ecore_diagram diagram file
  • You should get this :

  • In the Dashboard view :
    • select the Domain Gen Model file (linkedobjects.genmodel)
    • select the Domain Model file (linkedobjects.ecore)
  • Open the linkedobjects.genmodel file
  • Right click on the root element of the diagram and select Generate Model Code
  • Right click on the root element of the diagram and select Generate Edit Code
  • Right click on the root element of the diagram and select Generate Editor Code

Tooling definition (diagram palette)

  • Click on the derive label on the left of the Tooling Def Model rectangle of the Dashboard view
  • Choose linkedobjects.gmftool as file name and click Next
  • Select the Diagram class as Diagram Element and click Next
  • In the Node column, check only Object
  • In the Links column, check only Link
  • You should have :

Graphical definition

  • Click on the derive label on the left of the Graphical Def Model rectangle of the Dashboard view
  • Choose linkedobjects.gmfgraph as file name and click Next
  • Select the Diagram class as Diagram Element and click Next
  • In the Node column, check only Object
  • In the Links column, check only Link
  • In the Label column, check : Object.name and Link.id
  • You should have :

  • Click Finish

Mapping model

  • Click on the combine label on the left of the Mapping Model rectangle of the Dashboard view
  • Choose linkedobjects.gmfmap as file name and click Next
  • Select the Diagram class as Diagram Element and click Next
  • In the Select Diagram Palette wizard page, just click next
  • In the Select Diagram Canvas wizard page, just click next
  • In the Mapping wizard page you should have :

  • Click Finish
  • Open the linkedobjects.gmfmap file generated above
  • Select the Node Mapping <Object/Object> and correct the Tool in the property view (select Creation Tool Object instead of Creation Tool Link)
  • Select the Link Mapping <Link{Link.targetObject:Object}/Link> and :
    • correct the Tool in the property view (select Creation Tool Link instead of Creation Tool Object)
    • select the Diagram Label LinkId for the Diagram Label property in the properties view
  • Save the file

Diagram Editor generation

  • Click on the transform label above the Diagram Editor Gen model rectangle of the Dashboard view
  • Click on the Generate diagram editor label in the Diagram Editor Gen model rectangle of the Dashboard view

At this point, when running the diagram editor, you should be able to get something like this :

Link label position

If you want to change the position of your label, you may add an Alignment Facet under the Diagram Label LinkId of the linkedobjects.gmfgraph file and select BEGINNING, END or CENTER.

For example, with an END value, we get this (after having re-transformed the Mapping model into the Diagram Editor Gen Model and having re-generated the diagram editor :

You may also need to change the default offset of the diagram. In the example above, the labels are far from the edge. To correct it, add an Label Offset Facet under the Diagram Label LinkId of the linkedobjects.gmfgraph file and change the x and y values if required.

For example, by leaving x and y to 0, we get this result (do not forget to re-generate the Diagram Editor Gen Model and the diagram editor) :

Thank you

I hope that this material will be helpful for you. If you want to support it, your help is welcome :

Discussion

Jihane, 2010/08/17 15:53

bonjour je tiens tout d'abord à vous remercier pour votre excellent tutoriel, en fait je veux bien créer un lien sous forme de flèche ( comme l'association des méta-modèl) avec un rôle, un nom et une cardinalité, mais je sais pas comment faire ??

Merci d'avance pour votre aide

Jean-François Brazeau, 2010/09/18 13:16

Hmmm…. Voulez-vous parler d'une relation dans un modèle ecore ? ou dans un éditeur de diagramme GMF. Pour le premier cas, l'éditeur graphique ecore inclus dans eclipse avec EMF permet de le faire plutôt facilement et intuitivement. Pour le second cas, je pense que c'est l'objet de ce tutoriel…..

Bobster, 2011/03/30 10:47

No source code to download? :P

Jean-François Brazeau, 2011/04/17 20:06

Hi, This tutorial is short, so I choose not to make it available under svn… Sorry !…. Regards, JFB

Joseph, 2011/04/25 04:35

Bonjour, Je tiens tout d'abord à vous remercier pour ce très bon tuto! En fait, je voulais réaliser un éditeur wysiwyg qui se base sur les composants graphiques(boutons, inputText, chekbox…) et j'ai quelques questions là dessus: 1.Comment insérer les images des composants graphiques dans l'éditeur? 2.Peut on agir sur la “propertySheet” de chaque composant afin d'introduire de nouvelles propriétés et comment récupérer les valeurs saisies dans des variables car j'en ai besoin pour les insérer dans une base de données? 3.Peut on définir sa propre action sur les composants et ajouter un menu contextuel pour ces actions? Vos réponses vont m'aider énormément car je dois choisir entre GMF et GEF afin de remplir ces besoins. Merci d'avance!

Jean-François Brazeau, 2011/04/28 20:21

Bonjour,

Merci pour ce retour à propos des tutoriaux.

1. Qu'entendez-vous par composants graphiques : voulez vous dire des images ou des dessins tracés algorithmiquement ? Dans les 2 cas, le dessin du ”+” dans le tutorial 5 peut peut être vous aider ?

2. Le moyen le plus simple d'introduire de nouvelles propriétés dans la vue des propriétés reste d'enrichir les entités de votre modèle an y ajoutant des attributs. Ces derniers apparaitront automatiquement sous forme de propriété modifiable. ⇒ Pourriez-vous préciser ce que vous entendez par “variable” ?

3. Je n'ai pas eu l'occasion d'ajouter des action “custom” dans le menu mais cela est à mon avis tout à fait possible ⇒ je regarderai du coté de la classe générée nommée DiagramEditorContextMenuProvider

JFB

Joseph, 2011/04/28 23:25

Je vous remercie pour l'intérêt que vous avez porté à mes questions! Je m'explique:

1. Je veux insérer juste les images des composants graphiques de base( bouton, inputText, comboBox…)dont j'ai leurs URL ssans les composer ou les tracer.

2. En fait, je veux récupérer les valeurs des attributs ou encore propriétés saisies dans la vue de propriétés pour d'autres traitements (pas seulement la modification du diagramme), de plus peut on par exemple ajouter un comboBox dans la vue de propriété permettant à l'utilisateur de choisir par exemple une couleur parmi plusieurs proposées?

3. Pour réussir à ajouter de nouvelles actions et des menus contextuels, on exploite les classes des packages du plug-in RCP dans GEF (en effet, on crée un projet plug-in RCP et on ajoute à sa liste de dépendances les plug-in GEF. Comment faire ceci avec GMF? Autrement est ce que le plug-in GMF généré est RCP? Suffit il d'ajouter des packages définissants les modifications au plug-in généré?

J'espère que j'ai éclairé davantage mes questions et merci infiniment!

Jean-François Brazeau, 2011/04/29 20:41

Bonjour,

Je crois que nous risquons d'avoir de nombreux échanges pour que je puisse répondre au mieux à vos questions. Peut être serait-il plus adapté d'échanger par mail. Pouvez-vous me contacter à cette adresse : jfbraz (at) yahoo.fr ?

A bientot,

JFB

Blue, 2011/12/09 02:40

Touchwodn! That's a really cool way of putting it!

mahdi, 2014/04/28 13:54

salut, j'ai crée un éditeur graphique (GMF) de graphe contient une palette(nœud et arc) et j'ai réalisé une interface graphique sous Eclipse ( le plugin window builder pour la création des interface graphique ) je sais pas comment lancer l’éditeur graphique lors d'un clic sur une bouton dans l'interface graphique pour dessiner le graphique quelqu'un peut il m'aider? merci :)

 
gmf_tutorial8.txt · Last modified: 2011/08/08 20:07 by jfbraz
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki