Aktuelles

Forum

Meta

Tutorial: Statechart Editor mit GMF erstellen

Dieses kurze Tutorial basiert auf dem original GMF Tutorial unter: wiki.eclipse.org/index.php/GMF_Tutorial.

Site map

In diesem Beispiel wird der Zustandsautomat, der auch in Teilen des Forschungsprojektes verwendet wird, verwendet. Es beginnt mit einem SysML-basierten Metamodell für Zustandsautomaten und beleuchtet den gesamten Prozess, um einen funktionierenden Editor mit dem Graphical Modeling Framework zu erstellen. Dabei werden folgende Punkte betrachtet:

  1. Definition eines Metamodels
  2. Festlegen von grafischen und Werkzeugkomponenten und Abbildung dieser auf das Metamodell
  3. Generieren eines angepassten grafischen Editors
Zustandsautomat im eigenen GMF-Editor

Zustandsautomat im eigenen GMF-Editor

Die Technischen Voraussetzungen zur Benutzung von GMF sind:

Das Metamodel für den Zustandsautomaten

Das verwendete Metamodell in diesem Projekt basiert auf SysML (Systems Modeling Language) einer Modellierungssprache für Engineering-Anforderungen. Um die Größe des Metamodels klein zu halten werden nur jene Elemente verwendet, welche das Verhalten von Zustandsautmaten beschreiben Eine genaue Beschreibung dieser Elemente findet sich in der UML 2.0 Superstructure Spezifikation.

Metamodel

Metamodel

Der Start mit GMF

Die ersten Schritte zu einem GMF-Editor bestehen in der Erzeugung eines einfachen EMF-Editors. Auf diesen baut der grafische Editor auf:

  1. GMF-Projekt erzeugen. Die Metamodelldatei (.ecore) wird ins model-Verzeichns des Projektes gelegt.
  2. Aus diesem wird in Eclipse ein neues EMF-Model (mit der Endung .genmodel) erzeugt. Im Ordner model das Kontextmenu öffnen und NEW – other… – Eclipse Modeling Framework – EMF Model wählen.
  3. Aus dem EMF-Model wird Model-, Edit- und Editor-Code generiert. Hierzu wird auf dem .genmodel das Kontextmenu und Generate All, bzw. Generate Model-, Edit-, und Editor-Code gewählt.

Standardmäßig entstehen zwei neue Projekte statemachine.edit und statemachine.editor. Der Modelcode besteht aus Javaklassen, welche den Zugriff und das Arbeiten mit dem Metamodell erlauben. Sie werden im Source-Verzeichnis des GMF-Projektes abgelegt.

Model-, Edit- und Editorcodeerzeugung im Kontextmenu wählen
Nach der Generierung gibt es neue Projekte

Modellieren des grafischen Editors

Um den grafischen Editor generieren zu lassen werden weitere Modelle erstellt:

Grafische Definition

Für den ersten Schritt zum grafischen Editor wird ein GMFGraphSimpleModel erzeugt. Um das grafische Modell zu erstellen wird der Benutzer durch einen Wizard geleitet. Als erstes muss das Wurzelelement ausgewählt werden. In diesem Fall ist das Statechart. Dieses Modellelement erscheint meist nicht auf der Editoroberfläche.

Im nächsten Dialog sind alle Modellelemente aufgelistet. Daneben gibt es die Spalten Knoten, Kanten, Attribut. Teilweise sind für die Modellelemente mehrere Darstellungen möglich. Für die meisten Modellelemente wurden bereits plausible Vorauswahlen getroffen. Im Statechart erscheint beispielsweise eine Region als Knoten und eine Transition als Kante. Das Ergebnis ist ein Modellbaum, der um weitere grafische Elemente ergänzt oder verändert werden kann. Standardmäßig werden die Modelelemente als Nodes dargestellt. Es gibt auch eine Reihe weiterer Figuren. Eigene Draw2D Grafiken können auch verwendet werden.

Die grafische Modellinformation wird als Modell abgelegt in der Modelldatei name.gmfgraph.

Für die graphische Präsentation muss das Wurzelmodellelement gewählt werden.

Für die graphische Präsentation muss das Wurzelmodellelement gewählt werden.

Darstellung der Modellelemente als Knoten oder Kanten.

Darstellung der Modellelemente als Knoten oder Kanten.

Tool Definition

Die Definition der Werkzeuge funktioniert analog. Hier wird ein GMFToolSimpleModel erzeugt. Die Formulare des Wizards sehen genauso aus, wie die des grafischen Modells. Der Modellbaum kann beliebig erweitert werden. So können z. B. zusätzliche Tool Groups für unterschiedliche Arten von Werkzeugen erstellt werden. Jedes Werkzeug besteht aus einer Beschriftung und einem Tooltip, sowie zweier Icons in unterschiedlichen Größen. Diese erscheinen als Symbole in der Toolbar.

Die Tool Definition wird als .gmftool-Datei abgelegt.

Wahl des Wurzelelements für die Werkzeugdefinition

Wahl des Wurzelelements für die Werkzeugdefinition

Darstellung der Modellelemente als Knoten und Kanten

Darstellung der Modellelemente als Knoten und Kanten

Resultierendes Werkzeug-Modell für den Editor

Resultierendes Werkzeug-Modell für den Editor

Mapping

Im folgenden Schritt müssen die grafische Repräsentation, die Modellelemente sowie die Werkzeugdefinitionen aufeinander abgebildet werden. Dazu müssen diese drei Modelle ins Mapping Modell geladen werden. Dabei werden gleich lautende Modellelemente automatisch aufeinander gemappt. Am Ende entsteht ein Mapping-Modell, was nachträglich editiert werden kann.

Auch für das Mapping muss das Wurzelelement gewählt werden

Auch für das Mapping muss das Wurzelelement gewählt werden

Mapping-Dialog

Mapping-Dialog

Das Mapping-Modell

Das Mapping-Modell

Die vormals verwendeten Wizards erstellen Standardverhalten für den Editor. Jedoch werden an den Editor für diesen Zustandsautomaten zusätzliche Anforderungen gestellt, die angepasst werden müssen:

Hierzu werden die einzelnen Modelle angepasst und erweitert. Nennenswert ist hierbei die Definition von Compartments. Das sind Knoten, die in anderen Knoten liegen können. Bei Klassendiagrammen wären die Attribute bzw. Methoden einer Klasse Compartments.

Compartments

In dem Modell für die grafische Darstellung können Compartmens angelegt werden. Im folgenden Beispiel wird ein Compartment für Zustandsautomaten und Regions erstellt. Regions können Zustände enthalten. Als erstes wird in der grafischen Repräsentation ein StateCompartment und ein RegionCompartment erstellt. Anschließend, werden diese beiden Elemente aufeinander gemappt.