Eclipse Modeling Framework (EMF) und das Graphical Editing Framework (GEF)



Ähnliche Dokumente
Prof. Dr. Jan Jürjens

Prof. Dr. Jan Jürjens

Was ist EMF? Wie wird EMF eingesetzt? Was ist ecore? Das Generatormodell Fazit

Übungen zur Softwaretechnik

Motivation Grundlagen Technologien Manipulation Ecore Genmodell Demo Persistenz Notification Ausblick GMF Fazit / Quellen

SEW Übung EMFText. 1 Aufgabe. 2 Domänenbeschreibung. 3 Installation von Eclipse/EMFText. 4 Schritt-für-Schritt Anleitung. 4.

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Vortrag von: Ilias Agorakis & Robert Roginer

Konzeption und Realisierung eines logikbasierten Anfragewerkzeugs für UML-Modelle

Generisch entwickelte Software-Werkzeuge anpassbar wie ein Chamäleon

Software Engineering II

Design Patterns 2. Model-View-Controller in der Praxis

EMF-GMF-Tutorial: Petrinet

KURZANLEITUNG CYBERDUCK MIT CLOUD OBJECT STORAGE

WhiteStarUML Tutorial

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Kurzeinführung Excel2App. Version 1.0.0

Software Engineering in der Projektpraxis

Übung: Verwendung von Java-Threads

Anleitung zur Installation und Verwendung von eclipseuml 2.1.0

Current Workflow. formatted. Rules. Extensions. Rules. DOM processing with Meta API-calls. Code Generation (Smarty) XMLfile. Source code.

OP-LOG

Präsentation zur Vorstellung meiner Bachelor-Arbeit beim BSE- Seminar. Vortrag von Patrick Bitterling

Jochen Bauer

Die Beschreibung bezieht sich auf die Version Dreamweaver 4.0. In der Version MX ist die Sitedefinition leicht geändert worden.

Bedienungsanleitung. Stand: Copyright 2011 by GEVITAS GmbH

KURZANLEITUNG CLOUD OBJECT STORAGE

Model Driven Architecture (MDA)

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Was ist PDF? Portable Document Format, von Adobe Systems entwickelt Multiplattformfähigkeit,

Datenhaltung für Android Model First Christian Ingenhaag, Frederik Götz, Carl Steeg

Factory Method (Virtual Constructor)

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Erstellen eines Formulars

Arbeiten mit UMLed und Delphi

Suche schlecht beschriftete Bilder mit Eigenen Abfragen

In diesem Tutorial lernen Sie, wie Sie einen Termin erfassen und verschiedene Einstellungen zu einem Termin vornehmen können.

Programmierung für Mathematik (HS13)

Einleitung: Frontend Backend

Dr. Hanno Schauer Mons-Tabor-Gymnasium Montabaur. UML-Klassendiagramme als Werkzeug im Unterricht

RDF und RDF Schema. Einführung in die Problematik Von HTML über XML zu RDF

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Xcode/Cocoa/Objective-C Crashkurs Programmieren unter Mac OS X

ACDSee Pro 2. ACDSee Pro 2 Tutorials: Übertragung von Fotos (+ Datenbank) auf einen anderen Computer. Über Metadaten und die Datenbank

Eclipse Modeling Framework Modellgetriebene Softwareentwicklung Prof. Andreas Schmidt

eduvote Ein Umfragesystem für Lehrveranstaltungen - PowerPoint Add-In -

Design Pattern - Strukturmuster. CAS SWE - OOAD Marco Hunziker Klaus Imfeld Frédéric Bächler Marcel Lüthi

ActiveCharts. Verknüpfung von Modellen und Code bei der modellgetriebenen Softwareentwicklung mit UML 2.0

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Stapelverarbeitung Teil 1

Urlaubsregel in David

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

License Management SDK

Ihre Interessentendatensätze bei inobroker. 1. Interessentendatensätze

Kostenstellen verwalten. Tipps & Tricks

Gliederung. 1. That s Radiant 2. User Interface 3. Rollen 4. Installation 5. Extensions 6. Fazit

Proseminar: Website-Managment-System. NetObjects Fusion. von Christoph Feller

Integration mit. Wie AristaFlow Sie in Ihrem Unternehmen unterstützen kann, zeigen wir Ihnen am nachfolgenden Beispiel einer Support-Anfrage.

Java-Tutorium WS 09/10

Lernprogramm "Veröffentlichen von WMS- Services"

Tevalo Handbuch v 1.1 vom

Ein hierarchischer, modellgetriebener Ansatz zur Codegenerierung. R. Gitzel, M. Schwind

WPF Bindung. Dr. Beatrice Amrhein

WPF Steuerelemente Listbox, ComboBox, ListView,

Bedienungsanleitung. Matthias Haasler. Version 0.4. für die Arbeit mit der Gemeinde-Homepage der Paulus-Kirchengemeinde Tempelhof

Kurzanleitung ejax Online-Demo

Titel. SCSM ITIL - CMDB - neue CI Klasse erstellen und benutzen. Eine beispielhafte Installationsanleitung zur Verwendung im Testlab

Lehrer: Kurs wiederherstellen

FORUM HANDREICHUNG (STAND: AUGUST 2013)

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Struts 2 Das Imperium schlägt zurück?

Textgenerator Artex 1.0. Kurzanleitung

Einführung in die Informatik Tools

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

WordPress. Dokumentation

Installation des edu- sharing Plug- Ins für Moodle

Guido de Melo Fachvortrag, Uni Ulm UML 2.0. Für den Einsatz in der Praxis

Auto-Provisionierung tiptel 30x0 mit Yeastar MyPBX

MailUtilities: Remote Deployment - Einführung

Lastenheft. Inhaltsverzeichnis. Gruppe: swp09-5. Projektleiterin: Anne Vogler am: 28. April Zielbestimmungen 2. 2 Produkteinsatz 2

DAUERHAFTE ÄNDERUNG VON SCHRIFTART, SCHRIFTGRÖßE

Es wird das Struts <html:option> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht.

Kap. 35 Swing: Grundlagen Kap Swing: Hauptfenster

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten

Brainloop Dox Häufig gestellte Fragen

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

ZENITY - Die Software für Ihre Unternehmens-Releaseplanung

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Sybase Central Dokumentation Aktivierung der Monitoringfunktion

GUI Programmierung in Java

Bilder zum Upload verkleinern

Domänenspezifisch entwickeln mit UML (Vortrag mit Demo)

Kurzanleitung OOVS. Reseller Interface. Allgemein

Programmierkurs Java

Transkript:

Eclipse Modeling Framework (EMF) und das Graphical Editing Framework (GEF) Markus Bauer, Florian Lautenbacher, Stephan Roser Programmierung verteilter Systeme Lab Institut für Informatik Universität Augsburg Universitätsstraße 14, 86159 Augsburg Tel.: (+49) 821/598-2174, Fax: -2175 URL: http://www.informatik.uni-augsburg.de/vs

Agenda Motivation und Überblick Eclipse Modeling Framework (EMF) EMF-Modellimport EMOF und ECore EMF Edit & Codegen Graphical Editing Framework (GEF) Model-View-Controller (MVC)-Pattern MVC in GEF Weitere Konstrukte: EditPolicies und Commands Nutzung von EMF in GEF Einführung eines Beispiels Beispiel in EMF und GEF Zusammenfassung und Ausblick Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 2

Motivation Metamodelle: MOF, UML 2.0, CWM, und viele andere Wie können diese in MDA-Tools umgesetzt oder integriert werden? Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 3

Graphische Darstellung von Modellen basierend auf einem festgelegten Metamodell Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 4

Standards im Überblick OMG Standards Model-Driven Architecture (MDA) zur modellgetriebenen Software-Entwicklung. BPMN (Business Process Modeling Notation) zur Modellierung der Business-Sicht. SBVR (Semantics of Business Vocabulary and Business Rules) für Business- Regeln, etc. Spezifikation eines allgemeinen Ansatzes. Eclipse Modeling Framework (EMF) Spezifische Realisierung der OMG MOF-Konzepte mit Eclipse und Java. Integriert im Eclipse Tools Projekt. Graphical Editing Framework (GEF) Framework zur Darstellung von Modellen. kann auf Basis eines EMF-Metamodells geschehen, aber auch eigenständig. Graphical Modeling Framework (GMF) Versuch EMF und GEF zu integrieren. Projekt noch im frühen Entwicklungsstadium. sehr komplex. Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 5

Agenda Motivation und Überblick Eclipse Modeling Framework (EMF) EMF-Modellimport EMOF und ECore EMF Edit & Codegen Graphical Editing Framework (GEF) Model-View-Controller (MVC)-Pattern MVC in GEF Weitere Konstrukte: EditPolicies und Commands Nutzung von EMF in GEF Einführung eines Beispiels Beispiel in EMF und GEF Zusammenfassung und Ausblick Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 6

EMF Allgemeines EMF ist ein Modellierungsframework und Tool zur Code-Generierung basierend auf einem strukturierten Datenmodell Ausgehend von einer Modellspezifikation in XMI bietet EMF: Tools und Laufzeitunterstützung um eine Menge von Javaklassen aus dem Modell zu erstellen Adapterklassen, die eine einfache Sicht und ein kommando-basiertes Editieren des Modells ermöglichen einen grundlegenden Editor Modelle können auf unterschiedlichem Wege erstellt werden: aus annotierten Java-Klassen aus XML-Dokumenten aus Modellierungstools wie Rational Rose direkt mithilfe des EMF Ecore Baum-Editors Durch EMF wird die Grundlage für Interoperabilität zwischen verschiedenen EMF-basierten Tools und Anwendungen gelegt. Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 7

EMF - Modellimport EMF kann Metamodelle sowohl aus Java-Klassen, UML-Diagrammen als auch aus XML-Dateien importieren Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 8

EMF - Modellimport EMF (Meta-)Modelle können wie folgt erstellt werden: XMI-Datei direkt in einem Texteditor erstellen ( Ecore model) Verwendung eines Modellierungstools wie beispielsweise Rational Rose und export als XMI-Dokument ( Rose class model) Annotierte Java-Klassen und Interfaces einlesen ( Annotated Java) XML-Schema verwenden um die Serialisierung des Models zu beschreiben ( XML Schema) Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 9

EMF Überblick EMF.EMOF Teil der MOF 2.0-Spezifikation (Essential MOF) EMF.Ecore Das Core EMF-Framework beinhaltet ein Meta-Model um Modelle zu beschreiben Laufzeitunterstützung für die Modelle inkl. Benachrichtigung bei Änderungen, Persistenzunterstützung durch eine Standard XML-Serialisierung, Eine API um EMF-Modelle generisch zu verändern. EMF.Edit Generische und wiederverwendbare Klassen um Editoren für EMF-Modelle zu erstellen EMF.Codegen Generierung von allen notwendigen Klassen, um EMF-Modelle später in einem eigenen Editor zu erstellen und verändern Integriert eine GUI um Optionen einzugeben und Generatoren aufzurufen Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 10

Agenda Motivation und Überblick Eclipse Modeling Framework (EMF) EMF-Modellimport EMOF und ECore EMF Edit & Codegen Graphical Editing Framework (GEF) Model-View-Controller (MVC)-Pattern MVC in GEF Weitere Konstrukte: EditPolicies und Commands Nutzung von EMF in GEF Einführung eines Beispiels Beispiel in EMF und GEF Zusammenfassung und Ausblick Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 11

(Essential) MOF EMOF ist Teil der MOF 2 Spezifikation. verwendet um einfache Metamodelle mit simplen Konzepten zu definieren nutzt dabei objekt-orientierte Konzepte MOF 2.0 verwendet UML 2.0 Klassen Diagramme Metamodell können mit UML-Tools erstellt werden MOF 2.0 definiert ausserdem die Complete MOF (CMOF) mit zusätzlichen Eigenschaften Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 12

Ecore Das Kern-Metamodell für EMF EMF verwendet für Metamodellierung Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 13

Abhängigkeit Modell- und Generierungsdateien Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 14

EMF Genmodel Zusätzliche Informationen um die Java Klassen zu erstellen Allgemeine Informationen: Copyright Name des Modells ID des Plugins Einstellungen für EMF.Edit Unterstützung zur Erstellung von Kindelementen durch Commands Icons Plug-in Klassen Einstellungen für EMF Editor Template & Merge Automatische Formatierung des Codes Dynamische Templates: Java Klassen werden mithilfe von JET (Java Emitter Templates) erzeugt; diese können bei Bedarf angepasst werden Einstellungen zur Property View Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 15

Erzeugte Java Klassen - Modell Zu jeder Klasse im Ecore Metamodell: Java Interface. Implementierung im Unterpakage impl. Zu jedem Package: Eine Package Klasse. Informationen zu den Features und Metadaten des Modell. Factory Klasse: Bietet Methoden zum Erzeugen neuer Objekte. Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 16

Erzeugte Java Klassen - Edit Ein Edit Provider für jede Klasse im Ecore Metamodell Informationen zu Kindern und Eltern von einem Objekt Descriptoren zur Erzeugung von Kindern Commands zur Änderung des Objekts Informationen zur Erzeugung eines Baumes, der das Modell repräsentiert Text und Icon zu einem Objekt Informationen für Property Sheet Adapter Factory Liefert zu einem Objekt den richtigen Provider Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 17

Agenda Motivation und Überblick Eclipse Modeling Framework (EMF) EMF-Modellimport EMOF und ECore EMF Edit & Codegen Graphical Editing Framework (GEF) Model-View-Controller (MVC)-Pattern MVC in GEF Weitere Konstrukte: EditPolicies und Commands Nutzung von EMF in GEF Einführung eines Beispiels Beispiel in EMF und GEF Zusammenfassung und Ausblick Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 18

EMF Überblick über Edit und Codegen M3 (Metametamodel) OMG MOF EMF Ecore (Java classes) EMF M2 (Metamodel) UML, CWM,... EMF model EMF.Edit instanceof EMF codegen EMF.Codegen EMF Java code for manipulation and default serialization of EMF models M1 (Model) instanceof EMF model EMF.Edit Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 19

EMF.Edit EMF.Codegen EMF.Edit EMF.Codegen Modellierungseditor generate Content Provider, etc. Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 20

EMF Zusammenfassung UML: EMF Ecore beschäftigt sich nur mit den Klassenmodellierungsaspekten der UML Das UML 2.0 Metamodell ist allerdings in EMF Ecore implementiert. MOF: Die Meta-Object Facility definiert eine konkrete Untermenge von UML um Modellierungskonzepte innerhalb eines Repositories zu beschreiben. MOF ist vergleichbar mit Ecore. Ecore vermeidet einige der komplexen Elemente von MOF, da es den Fokus eher auf Tool-Integration denn auf Management von Metadaten-Repositories legt. XMI: XMI wird verwendet um Modelle zu serialisieren...... sowohl für jegliches EMF-Modell als auch für Ecore selbst. MDA: EMF unterstützt das Hauptkonzept der MDA indem es Erstellung von Modellen für die Entwicklung und Generierung ermöglicht und nicht nur zur Dokumentation. Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 21

Agenda Motivation und Überblick Eclipse Modeling Framework (EMF) EMF-Modellimport EMOF und ECore EMF Edit & Codegen Graphical Editing Framework (GEF) Model-View-Controller (MVC)-Pattern MVC in GEF Weitere Konstrukte: EditPolicies und Commands Nutzung von EMF in GEF Einführung eines Beispiels Beispiel in EMF und GEF Zusammenfassung und Ausblick Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 22

Was ist GEF? Interaction Layer Model-to-View mapping Workbench Integration Rendering Layout Scaling Native (SWT) Layer Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 23

Was ist GEF? Framework um Modelle graphisch darstellen. Erlaubt dem Benutzer mit dem Modell zu interagieren. Verarbeitung von Benutzereingaben durch Maus und Tastatur. Interpretation der Eingaben. Bietet Möglichkeiten das Modell zu verändern. Änderungen können rückgängig gemacht werden (undo/redo). Bietet nützliche Workbench Funktionen Aktionen und Menüs Toolbars Keybindings Plugin von Eclipse Baut auf dem Model-View-Controller Pattern auf Ziel: Immer wieder verwendete Funktionalitäten nicht jedesmal neu entwickeln zu müssen Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 24

Model View Controller Pattern 3 Schichten Modell strikte Trennung der Schichten Daten in der Modellschicht Visualisierung der Daten in der Viewschicht Kommunikation zwischen den 2 Schichten in der Controllerschicht Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 25

MVC Pattern: Modellschicht Alle persistenten und wichtigen Daten ausschließlich hier gespeichert Container für Daten Kennt keine anderen Teile des Programms Teilt Änderungen an sich mit über Listener Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 26

MVC Pattern: Viewschicht Keine Daten in der Viewschicht. Keine Modelllogik. Kennt keine anderen Teile des Programms. Abbildung der Daten der Modellschicht. Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 27

MVC Pattern: Controllerschicht Verbindung von Modell- und Viewschicht Leitet Kommunikation vom Modell an die View weiter In GEF: Unterklasse von EditPart Zu jedem EditPart genau ein Modell und genau eine View Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 28

Agenda Motivation und Überblick Eclipse Modeling Framework (EMF) EMF-Modellimport EMOF und ECore EMF Edit & Codegen Graphical Editing Framework (GEF) Model-View-Controller (MVC)-Pattern MVC in GEF Weitere Konstrukte: EditPolicies und Commands Nutzung von EMF in GEF Einführung eines Beispiels Beispiel in EMF und GEF Zusammenfassung und Ausblick Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 29

Die Viewschicht in GEF: Draw2D und Figures Darstellung der Modellobjekte in GEF mit Figures Figures in einer Baumstruktur Anzeige der Figures im lightweight system von Draw2D Figures zeichnen sich selbst und rekursiv ihre Kinder Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 30

Die Controllerschicht in GEF: EditParts und EditPartFactory EditParts wie Figures in einer Baumstruktur Drei wichtige Methoden in den EditParts: createfigure(): Erstellen der Figure zu dieser EditPart => Verbindung Controllerschicht Viewschicht refreshvisuals(): Aktualisieren der Daten der Viewschicht mit den Daten der Modellschicht. getmodelchildren(): Eine Liste von Modellklassen, die logisch Kinder von dem zum EditPart korrespondierenden Modellelement sind Verbindung Modellschicht Controller über EditPartFactory Neues Modellobjekt wird erzeugt In der Factory wird der dazu korrespondierende EditPart gesucht Verbindung wird geknüpft Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 31

EditPartFactory GraphicalViewer EditPart Factory Model EditParts Figures @#! Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 32

Kommunikation zwischen den Schichten Ausgangspunkt: Änderung findet im Modell statt. In EMF sendet ein Objekt bei Änderung eine Notification an alle registrierten Adapter. Adapter sind die EditParts. EditParts müssen sich bei ihren Modellklassen registrieren. Dafür zwei Methoden activate(): Wenn das EditPart erzeugt wird, registriert es sich bei dem entsprechenden Modellelement. deactivate(): Wenn das EditPart aus dem EditPartBaum ausgehängt wird, entfernt es den Adapter aus dem Modellelement. Notifications werden an die Methode notifychanged(notification notification) gesendet. Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 33

Agenda Motivation und Überblick Eclipse Modeling Framework (EMF) EMF-Modellimport EMOF und ECore EMF Edit & Codegen Graphical Editing Framework (GEF) Model-View-Controller (MVC)-Pattern MVC in GEF Weitere Konstrukte: EditPolicies und Commands Nutzung von EMF in GEF Einführung eines Beispiels Beispiel in EMF und GEF Zusammenfassung und Ausblick Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 34

Veränderungen im Modell während der Laufzeit: EditPolicies und Commands Festlegen der Aufgaben eines EditParts über EditPolicies. EditPolicies bekommen Requests. Requests sind Anfragen des Systems, um eine Aufgabe auszuführen. Mit den Informationen eines Requests wird ein Command erzeugt. Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 35

Von Requests zu Commands Tool EditPart EditPolicy SWT Events Requests Requests showfeedback() erasefeedback() getcommand() Commands Commands? Stack Commands Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 36

Ausführung von Commands Im Command werden Änderungen im Modell vorgenommen execute(): Bei 1. Ausführung des Commands. undo(): Rückgängigmachen der Aktionen von execute redo(): Wiederholen der Aktionen nach undo. Commands werden intern in einem CommandStack gehalten. Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 37

EditParts und EditPolicies EditPolicies werden in der Methode createeditpolicies() von EditPart erzeugt. Die EditPart ist dafür verantwortlich die View aktuell zu halten. EditPolicies behandelt Aufgaben die durch das Editieren entstehen Verhindern Einschränkung durch Einfachvererbung Übernehmen Aufgaben, die nicht zu den EditParts gehören. Erlauben es die Bearbeitung dynamisch zu halten. Werden mithilfe von Roles verwaltet. Behandeln Feedback, Commands, Targeting, etc. Tipp: UnexecutableCommand vs. null Verwendetes Pattern: Pool of Responsibility Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 38

The Big Picture EditDomain EditPartViewer EditPartViewer EditPartViewer 1. acts on Model 2. events 3. request 4. command Palette CommandStack Active Tool Tool1 Tool2 Tool3 5. execute Command Command Command Command 6. modifies Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 39

GEF Fazit Durchdachte und robuste Struktur Viele Funktionalitäten wie ein CommandStack bereits implementiert View kann durch andere ausgetauscht werden Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 40

Agenda Motivation und Überblick Eclipse Modeling Framework (EMF) EMF-Modellimport EMOF und ECore EMF Edit & Codegen Graphical Editing Framework (GEF) Model-View-Controller (MVC)-Pattern MVC in GEF Weitere Konstrukte: EditPolicies und Commands Nutzung von EMF in GEF Einführung eines Beispiels Beispiel in EMF und GEF Zusammenfassung und Ausblick Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 41

Beispiel - Editor Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 42

Beispiel - Features Erstellen eines neuen Diagramms mittels Wizard. Öffnen eines existierenden Diagramms. Speichern von Änderungen. auch als neues Dokument ( speichern als ). Palette mit Selektionstools und Elementen. Erstellen von Knoten (node). Erstellen von Verbindungen (connection) zwischen den Knoten. Löschen von Knoten und Verbindungen. Verschieben von Knoten. Ändern der Größe von Knoten. Alle Veränderungen können rückgängig gemacht werden (undo) und wiederhergestellt werden (redo). Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 43

Agenda Motivation und Überblick Eclipse Modeling Framework (EMF) EMF-Modellimport EMOF und ECore EMF Edit & Codegen Graphical Editing Framework (GEF) Model-View-Controller (MVC)-Pattern MVC in GEF Weitere Konstrukte: EditPolicies und Commands Nutzung von EMF in GEF Einführung eines Beispiels Beispiel in EMF und GEF Zusammenfassung und Ausblick Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 44

Beispiel Metamodell UML Erstellt mit ArgoUML (http://argouml.tigris.org/) Diagram ist Wurzelelement. Ein Diagramm enthält Knoten (node). Knoten besitzen Quell- und Zielverbindungen (source Connection / target Connection). Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 45

Metamodell UML Ecore Export von ArgoUML als XMI. Transformation von ArgoUML XMI nach Ecore XMI mithilfe des Tools argo2ecore (http://argo2ecore.sourceforge.net/) Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 46

Erstellen des Modells Erstellen des GenModels aus dem Ecore Modell. Erstellen des Modells aus dem GenModel. Wenn man den Editor generiert, dann hat man an dieser Stelle bereits einen Baumeditor mit dem man ein Modell bearbeiten kann. Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 47

Modell: Commands Jedes Objekt, das erstellt werden kann, benötigt ein CreateCommand public void execute() diagram.getelements().add(newnode); public void undo() diagram.getelements().remove(newnode); Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 48

Modell: Commands Jedes Objekt, das gelöscht werden kann, benötigt ein DeleteCommand public void execute() source = connection.getsource(); target = connection.gettarget(); connection.setsource(null); connection.settarget(null); public void undo() connection.setsource(source); connection.settarget(target); Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 49

Modell: Commands Jedes Objekt, das geändert werden kann, benötigt ein Command public void execute() oldbounds = new Rectangle(node.getX(), node.gety(), node.getwidth(), node.getheight()); redo(); public void redo() node.setx(newbounds.x); node.sety(newbounds.y); node.setwidth(newbounds.width); node.setheight(newbounds.height); public void undo() node.setx(oldbounds.x); node.sety(oldbounds.y); node.setwidth(oldbounds.width); node.setheight(oldbounds.height); Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 50

View: Figures Figures werden in den EditParts erzeugt. Komplexere Figures werden als eigene Unterklassen implementiert. Node: protected IFigure createfigure() IFigure f = new RectangleFigure(); f.setopaque(true); f.setbackgroundcolor(colorconstants.green); return f; Connection: protected IFigure createfigure() PolylineConnection connection = (PolylineConnection) super.createfigure(); connection.settargetdecoration( new PolygonDecoration()); return connection; Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 51

Controller: EditPartFactory EditParts werden in einer EditPartFactory erzeugt und mit dem Modellobjekt verbunden. public EditPart createeditpart(editpart context, Object model) EditPart editpart = null; if (model instanceof Diagram) editpart = new DiagramEditPart(); else if (model instanceof Node) editpart = new NodeEditPart(); else if (model instanceof Connection) editpart = new ConnectionEditPart(); editpart.setmodel(model); return editpart; Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 52

Controller: Adapter Um auf Änderungen aus dem EMF Modell reagieren zu können, müssen die EditParts org.eclipse.emf.common.notify.adapter implementieren. Registrierung als Adapter zum entsprechenden Modellobjekt: public void activate() super.activate(); gettarget().eadapters().add(this); public void deactivate() super.deactivate(); gettarget().eadapters().remove(this); Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 53

Controller: Reaktion auf Notifications public void notifychanged(notification notification) int featureid = notification.getfeatureid(node.class); switch (notification.geteventtype()) case Notification.SET: case Notification.UNSET: switch (featureid) case EmfGefExamplePackage.NODE X: case EmfGefExamplePackage.NODE Y: case EmfGefExamplePackage.NODE WIDTH: case EmfGefExamplePackage.NODE HEIGHT: refreshvisuals(); break; break; Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 54

Controller: Reaktion auf Notifications case Notification.ADD: case Notification.ADD_MANY: case Notification.REMOVE: case Notification.REMOVE_MANY: switch (featureid) case EmfGefExamplePackage.NODE IN: refreshtargetconnections(); break; case EmfGefExamplePackage.NODE OUT: refreshsourceconnections(); break; break; Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 55

Controller: Hierarchie Nodes als Kindelemente von Diagram: protected List getmodelchildren() return ((Diagram) getmodel()).getelements(); Connections zwischen Nodes: protected List getmodelsourceconnections() return ((Node) getmodel()).getout(); protected List getmodeltargetconnections() return ((Node) getmodel()).getin(); Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 56

Controller: EditPolicies - DiagramEditPart protected void createeditpolicies() // disallows the removal of this edit part // from its parent installeditpolicy(editpolicy.component_role, new RootComponentEditPolicy()); // handles constraint changes //(e.g. moving and/or resizing) of model // elements and creation of new model elements installeditpolicy(editpolicy.layout_role, new DiagramXYLayoutEditPolicy()); Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 57

Controller: EditPolicies - DiagramXYLayoutEditPolicy protected Command getcreatecommand(createrequest request) Object childclass = request.getnewobjecttype(); if (childclass == Node.class) Node newnode = (Node) request.getnewobject(); Command command = new NodeCreateCommand(newNode, (Diagram) gethost().getmodel()); return command.chain(new NodeSetConstraintCommand( newnode, (Rectangle) getconstraintfor(request))); return null; protected Command createchangeconstraintcommand( ChangeBoundsRequest request, EditPart child, Object constraint) if (child.getmodel() instanceof Node && constraint instanceof Rectangle) return new NodeSetConstraintCommand((Node) child.getmodel(), (Rectangle) constraint); return super.createchangeconstraintcommand(request, child, constraint); Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 58

Controller: EditPolicies - NodeEditPart protected void createeditpolicies() // allow removal of the associated model element installeditpolicy(editpolicy.component_role, new ComponentEditPolicy() protected Command getdeletecommand(grouprequest request) return new NodeDeleteCommand( (Node) gethost().getmodel()); ); // allow the creation of connections installeditpolicy(editpolicy.graphical_node_role, new NodeGraphicalNodeEditPolicy()); Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 59

Controller: EditPolicies - NodeGraphicalNodeEditPolicy protected Command getconnectioncreatecommand( CreateConnectionRequest request) Node node = (Node) gethost().getmodel(); ConnectionCreateCommand command = new ConnectionCreateCommand(request, node); request.setstartcommand(command); return command; protected Command getconnectioncompletecommand( CreateConnectionRequest request) ConnectionCreateCommand command = (ConnectionCreateCommand) request.getstartcommand(); command.settarget((node) gethost().getmodel()); return command; Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 60

Editor: Laden eines Modells String filename = ((IFileEditorInput) geteditorinput()). getfile().getfullpath().tostring(); URI resourceuri = URI.createPlatformResourceURI(fileName); // Create a resource set ResourceSet resourceset = new ResourceSetImpl(); // register plugin extension to XMI serialization resourceset.getresourcefactoryregistry(). getextensiontofactorymap().put( EmfGefExampleCreationWizard.DEFAULT_EXTENSION, new XMIResourceFactoryImpl()); // Create a resource for this file. modelresource = resourceset.createresource(resourceuri); // load model modelresource.load(collections.empty_map); Diagram diagram = modelresource.getcontents().get(0); Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 61

Editor: Speichern des Modells try modelresource.save(collections.empty_map); getcommandstack().marksavelocation(); catch (IOException e) //... Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 62

Editor: Erstellen eines neuen Modells im Wizard IFile newfile = createnewfile(); ResourceSet resourceset = new ResourceSetImpl(); resourceset.getresourcefactoryregistry(). getextensiontofactorymap().put(default_extension, new XMIResourceFactoryImpl()); URI fileuri = URI.createPlatformResourceURI( newfile.getfullpath().tostring()); Resource resource = resourceset.createresource(fileuri); Diagram rootobject = EmfGefExampleFactory.eINSTANCE.createDiagram(); resource.getcontents().add(rootobject); try resource.save(collections.empty_map); catch (IOException e) Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 63

Editor: Weitere Komponenten AbstractUIPlugin Instanz des Plugins ActionBarContributor Actions für ToolBar Actions für Menüs Im Beispiel: Undo, Redo, Delete ContextMenuProvider Kontextmenü im Editor Im Beispiel: Undo, Redo, Delete Plugin.xml Name, Version, ID des Plugins Durch Abhängigkeiten benötigte Plugins Registrierung des Wizards Registrierung des Editors Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 64

Agenda Motivation und Überblick Eclipse Modeling Framework (EMF) EMF-Modellimport EMOF und ECore EMF Edit & Codegen Graphical Editing Framework (GEF) Model-View-Controller (MVC)-Pattern MVC in GEF Weitere Konstrukte: EditPolicies und Commands Nutzung von EMF in GEF Einführung eines Beispiels Beispiel in EMF und GEF Zusammenfassung und Ausblick Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 65

Vor- und Nachteile für die Verwendung von EMF für GEF Vorteile: Kostengünstige Möglichkeit für modellbasierte Softwareentwicklung Effektivität durch automatische Konsistenzerhaltung der Modellrepräsentanten Mächtige Codegenerierung erspart viel stupiden Programmieraufwand Nachteile: Modellierungssprachschatz nicht so mächtig wie UML (von Hand nachprogrammieren) weiterhin manuelle Implementierung/Anpassung des graphischen Editors für das EMF-Modell notwendig Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 66

Wie geht s weiter? GEF Beispiele (im Plug-in enthalten) Shapes: Einfachstes Beispiel Logic: Sehr umfangreiches Beispiel GEF Dokumentation: http://www.eclipse.org/gef/reference/articles.html GefDescription: http://eclipsewiki.editme.com/gefdescription EMF Dokumentation: http://www.eclipse.org/emf/docs.php EMF Übersicht: http://www.eclipse.org/emf/docs.php?doc=references/overview/emf.html EMF.Edit Übersicht: http://www.eclipse.org/emf/docs.php?doc=references/overview/emf.edit.html EMF Book: Eclipse Modeling Framework (Overview and Developer's Guide): http://www.awprofessional.com/content/images/0131425420/ samplechapter/budinskych02.pdf Create an Eclipse-based application using the GEF: http://www- 128.ibm.com/developerworks/opensource/library/os-gef Using GEF with EMF http://www.eclipse.org/articles/article-gef-emf/gefemf.html IBM Redbook: Eclipse Development using the Graphical Editing Framework and the Eclipse Modeling Framework http://www.redbooks.ibm.com/abstracts/sg246302.html Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006 67

Quellen entnommen aus Seminarvorträge aus dem Sommersemester 2005: Model Driven Software Development & Software Generation Hudson, Randy; Shah, Pratik: Tutorial #23 / GEF In Depth; http://www.eclipse.org/gef/reference/gef%20tutorial%202005.ppt EclipseCon 2005 und 2006: Vorträge zu EMF und GEF Beispiele und Tutorials von Eclipse EMF und GEF 11.09.06 Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006

Vielen Dank für die Aufmerksamkeit! Fragen, Fragen, Fragen??? 11.09.06 Markus Bauer, Florian Lautenbacher, Stephan Roser; all rights reserved 2006