Jump to: navigation, search

Difference between revisions of "Graphical Modeling Framework/Concepts/Labels"

(Pending Requests)
Line 63: Line 63:
This is a list of enhancements related to GMF labels; hopefully future versions of GMF will implement them:
This is a list of enhancements related to GMF labels; hopefully future versions of GMF will implement them:
*[https://bugs.eclipse.org/bugs/show_bug.cgi?id=161380 Refactor labels in GMF 2.0]
*[https://bugs.eclipse.org/bugs/show_bug.cgi?id=150816 Support "design" labels for nodes backed up with domain element]
*[https://bugs.eclipse.org/bugs/show_bug.cgi?id=150816 Support "design" labels for nodes backed up with domain element]
*[https://bugs.eclipse.org/bugs/show_bug.cgi?id=138179 Allow to define labels based on attributes of referenced objects]
*[https://bugs.eclipse.org/bugs/show_bug.cgi?id=138179 Allow to define labels based on attributes of referenced objects]

Revision as of 12:04, 20 October 2006

Labels represent pieces of text possibly associated with icons on diagram surface. Text may be edited using inplace facility. There are many possibilities to construct labels but all of them are grouped in four usecases:

1. "feature based label"

Label is always defined in context of a diagram node or a link. If it's based on EClass from domain model then label may be used to represent attribute(s) of this class. Tooling will generate code that constructs label text and converts user input to the new value for attribute(s).

2. "design label"

It may be desirable to have a label that is not stored in domain model. Tooling may generate code that will use notation style (DescriptionStyle for example) to store label text in notation model.

3. "default label"

This is a read-only label with fixed text.

4. "custom label"

GMF runtime defines IParser interface that is responsible to provide label text and editing support. In this usecase toolsmith is supposed to provide his own IParser implementation.

Graphical Definition

The only possible label figure is Label. In generated diagram editor the actual figure may be Label from Draw2D or WrapLabel from GMF runtime. Attribute "text" of the figure is a text shown on diagram when parser is not available.

Position of label figure within the model is important; it's used to determine whether label should be inner or external. Link labels are always external but node labels may be located whether inside node figure or "float" near it. If label figure is contained within parent node figure (directly or indirectly) it's inner label.

DiagramLabel element refers to the label figure and is being referenced by LabelMapping from mapping models. If "elementIcon" attribute is set then label uses icon from EMF item providers. The following visual facets are recognized by tooling in DiagramLabel:

  • AlignmentFacet - specifies link label position relative to the link figure; in generator model alignment is copied to "alignment" property of GenLinkLabel
  • LabelOffsetFacet - initial distance between the label and node / link figure; in generator model represented by LabelOffsetAttributes instance in label viewmap


LabelMapping and its subclasses define label within the mapping model.

Basic LabelMapping instance supports 3rd and 4th usecases. It has "diagramLabel" reference to graphical definition and "readOnly" flag.

FeatureLabelMapping extends LabelMapping to support 1st usecase by referencing domain attributes and providing format patterns:

  • "features" reference: at least one attribute from domain model; all attributes should be defined within EClass of parent node / link
  • "viewPattern" and "editPattern" attributes: MessageFormat patterns used to construct label text and parse user input

Generated parsers use java.text.MessageFormat class. This class requires a pattern string and a number of objects to produce label text; in our case pattern string is defined by "viewPattern" property and the objects are values of label features (order is important). When user types in some text using direct editing facility it is passed to the parser and it uses "editPattern" string to extract a set of objects that will be new label features values.

DesignLabelMapping is a LabelMapping flavour to handle 2nd usecase. Now it's empty but there should be a way to define view style used to store label text in notation model [1].

Generator Model

Two hierarchies describe labels in generator model: descendants of GenLabel used to express label presentation in context of parent node / link and descendants of LabelModelFacet that denote label semantic. GenLabel references LabelModelFacet by "modelFacet" reference thus linking them together.


Basic GenLabel has "elementIcon" flag copied from graphical definition and "readOnly" flag from the mapping model. GenNodeLabel and GenExternalNodeLabel are concrete classes that should be used to represent inner and external node labels respectively. GenLinkLabel is for the link labels and has "alignment" attribute derived from respective visual facet. GenChildLabelNode provides the same attributes as GenLabel but prefixed with "label" word; this class is used for nodes within list compartments.


Model facet reflects label usecase:

  • "feature label": FeatureLabelModelFacet instance; properties "features", "viewPattern" and "editPattern" are taken from FeatureLabelMapping
  • "design label": DesignLabelModelFacet instance
  • "default label" and "custom label": no model facet (null)

In fact during mapping model to generator model transformation the following rules are obeyed:

  • FeatureLabelMapping -> FeatureLabelModelFacet
  • DesignLabelMapping -> DesignLabelModelFacet
  • LabelMapping -> null

Pending Requests

This is a list of enhancements related to GMF labels; hopefully future versions of GMF will implement them: