Graphical Editing Framework: Difference between revisions

Content deleted Content added
Anyssen (talk | contribs)
Polishing of introduction.
Tags: Mobile edit Mobile web edit
Anyssen (talk | contribs)
Added history section.
Line 1:
The '''Graphical Editing Framework''' '''(GEF)''' is an [[Eclipse (software)|Eclipse]] project that provides framework and end-user components related to graphical applications.
 
== History ==
The project was initially contributed to Eclipse by IBM in 2002, consisting of two components: Draw2d, a 2D-visualization component based on the Standard Widget Toolkit (SWT), as well as GEF (MVC), a related model-view-controller component that can be used to realize graphical editors as part of an Eclipse Rich Client Product (RCP) application. GEF (MVC) is inter alia used by the [[Graphical Modeling Framework|Graphical Modeling Framework (GMF)]], which combines the [[Eclipse Modeling Framework|Eclipse Modeling Framework (EMF)]] and GEF to create the code for both the data model and the graphical editor. Zest, a graph-based visualization toolkit, was added as a third project component in 2007. It can be used to realize views for visualization of graph-like data structures inside Eclipse applications.
GEF was initially developed as part of IBM's etools (com.ibm.etools.gef) and was contributed to [[Eclipse (software)|Eclipse]] in 2002 in version 2.0.0, consisting then of two components: Draw2d, a 2D visualization component based on the Standard Widget Toolkit (SWT) and GEF (MVC), a related model-view-controller framework that can be used to realized graphical editors as part of Eclipse Rich Client Platform (RCP) applications. The first release at Eclipse was GEF 2.1.0 in March 2003. The next major version, GEF 3.0.0, was released in June 2004, providing many new features like support for rules and guides. Zest was added as a third project component in 2007 in version 1.0.0 as part of the GEF 3.4.0 release. Since 2004, when GEF 3.0.0 was released, only compatible changes have been applied to the framework's application programming interface (API).
 
Since 2004, when GEF 3.0 was released, only compatible changes have been applied to the framework's application programming interface (API). A new major revision of the framework, GEF 4.0, has been developed in parallel to the maintenance of the GEF 3.x code basecomponents by the project team since 2010. It is a complete redesign that is much more modular (consisting of 9 components), uses JavaFX instead of SWT as underlying rendering framework, and can be used also independentindependently of the Eclipse RCP platformapplications. Commonly referred to as GEF4, itits wascomponents were initially released in version 0.1.0 (with still provisional API) in June 2015 withas part of the EclipseGEF 3.10.0 (Mars) release. The GEF4 components are to be published in version 1.0.0 as part of the GEF 4.0.0 (Neon) release in June 2016.
 
== Architecture of GEF 3.x ==
 
GEF 3.x provides framework technology to realize graphical editors and views as part of Eclipse RCP applications. It is internally decomposed into three components:
 
* Draw2d - A 2D visualization component based on the Standard Widget Toolkit (SWT)
* GEF (MVC) - A model-view-controller component that can be used to realize graphical editors as part of Eclipse Rich Client Product (RCP) applications
* Zest - A graph-based visualization toolkit that can be used to realize views for visualization of graph-like data structures as part of Eclipse RCP applications
 
While graphical applications can be build on top of the GEF 3.x components directly, Draw2d and GEF (MVC) are also used by the [[Graphical Modeling Framework|Graphical Modeling Framework (GMF)]], which combines them with the [[Eclipse Modeling Framework|Eclipse Modeling Framework (EMF)]] to create the code for both the data model and the graphical editor.
 
=== Architecture ===
Editors created with GEF (MVC) consist of the following components:
* The diagram editor including tool palette
Line 14 ⟶ 25:
* Command objects that edit the model and provide [[undo]]-redo
 
==== Design Pattern Usage in GEF (MVC) ====
GEF makes heavy use of [[design pattern|Design Patterns]]. These patterns are often mandatory under GEF and developers are required to understand them.
 
* [[Model-View-Controller]] is an architectural design pattern which divides an application into separate parts which communicate with each other in a specific way. The goal is to separate data model (model), graphical user interface (view) and business logic (controller). GEF uses the MVC pattern extensively.
==== Model-View-Controller Pattern ====
** Model: The data model can either be generated using EMF, self-implemented by the user or it may already exist in case of a legacy software.
[[Model-View-Controller]] is an architectural design pattern which divides an application into separate parts which communicate with each other in a specific way. The goal is to separate data model (model), graphical user interface (view) and business logic (controller). GEF uses the MVC pattern extensively.
** Controller: The EditParts act as controllers. Typically, each model element has its matching EditPart. EditParts may contain other EditParts thereby matching model elements containing other model elements. EditParts also have a reference to the figure which graphically represents the model element. Finally, EditParts evaluate requests and create the appropriate command to edit the underlying model.
* Model: The data model can either be generated using EMF, self-implemented by the user or it may already exist in case of a legacy software.
** View: For each element within the model, including connections, a figure has to be implemented using the Draw2d framework. Oftentimes the figure is some geometrical drawing.
* Controller: The EditParts act as controllers. Typically, each model element has its matching EditPart. EditParts may contain other EditParts thereby matching model elements containing other model elements. EditParts also have a reference to the figure which graphically represents the model element. Finally, EditParts evaluate requests and create the appropriate command to edit the underlying model.
* View: For each element within the model, including connections, a figure has to be implemented using the Draw2d framework. Oftentimes the figure is some geometrical drawing.
 
==== Other Featured Design Patterns ====
 
* [[Factory pattern|Factory]]: Creating models from palette, creating EditParts and creating Figures
* [[Observer pattern|Observer]]: Typically a controller (EditPart) listening on Model and View
Line 31 ⟶ 38:
* [[Chain-of-responsibility pattern|Chain of responsibility]]: To decide which EditPolicy should handle a Request
 
==== Request and Response Mechanism ====
 
Any user action with the editor can generate a request. The nature of the request is understood by the context of invocation. The context is determined by the EditPart the user interacts with and the active tool. The tool can be any selected entry in a tool palette. The request is handed over to the selected EditPart, which in turn returns a Command.