| <h3>Overview of Graphiti</h3> |
| <p>The Graphiti framework utilises Eclipse's GEF and Draw2D for |
| diagramming and supports EMF on the domain side. The diagrams are |
| described by a platform independent metamodel and the diagram data is |
| kept strictly separate from the domain data. This enables rendering an |
| existing diagram in various environments (besides Eclipse this could be |
| e.g. within a browser) even without having access to the underlying |
| domain data. This also enables displaying a diagram within other |
| environments (e.g. using flash inside a browser) simply by providing a |
| new rendering engine for the environment that can interpret the Graphiti |
| diagram. (Currently only a rendering engine for Eclipse GEF exists.)</p> |
| |
| <p>Graphiti is strictly API-centric: a user of the framework writes |
| plain Java coding and (besides Graphiti) only needs to know EMF to use |
| the framework and to build an editor -- no knowledge of Draw2D or GEF |
| (or any other used rendering framework) is required. Editors built with |
| the framework are equipped with a standardised Look&Feel (designed |
| together with usability experts) which leads to a more coherent UI in |
| Eclipse-based tools; nevertheless tools can easily define a somewhat |
| different Look&Feel according to their special needs by simply |
| overriding and changing the default behaviour of the framework. Rapid |
| prototyping is supported by simple APIs and base classes which can be |
| used to refine an editor in an evolutionary way. The user of the |
| framework writes so-called features to add functionality to the editor. |
| For instance, one would write features for creating new model objects |
| and their graphical representation (Create Features), or for creating a |
| graphical representation for an already existing model object (Add |
| Features). The complete life cycle (creating, editing, renaming, moving, |
| deleting...) of model objects and their graphical representations can be |
| defined and controlled by implementing such features. The standard |
| behaviour for the different operations is covered by so-called default |
| features, if the user of the framework does not declare any special |
| behaviour. Step by step, these default features can be replaced or |
| extended with further functionality. Additionally, the framework comes |
| with a hook for so-called custom features to implement non-standard |
| behaviour and further operations inside the tool.</p> |
| |
| <h3>Architecture</h3> |
| <p>The following diagram visualises the framework as perceived by a |
| tool developer.</p> |
| <img src="/graphiti/images/GraphitiArchitecture.png"> |
| <p>The Interaction Component is provided by Graphiti, whereas the |
| Diagram Type Agent (DTA) is implemented by the user of the framework and |
| defines the new diagram type that is contributed by the tool. It |
| provides one or more Tool Behaviour Providers that define how the tool |
| behaves in specific situations; the tool can influence, e.g., what will |
| be displayed in the palette of the editor, how selection and double |
| clicking is handled, that some special rendering is necessary for |
| certain objects, how zooming is handled and so on. It is also the |
| responsibility of the Tool Behaviour Provider to define which context |
| menu and context buttons are available in a certain scenario. The |
| context buttons appear around the currently hovered shape and can be |
| used by the user in a very convenient way to trigger object specific |
| operations; they are completely rendered by Graphiti. The tool only |
| provides the operation, a name, and potentially an icon for it. Of |
| course, operations can also be triggered via context menu entries.</p> |
| <p>These operations are defined by the tool by implementing features |
| or by using the default features provided by the framework. Besides, |
| there is a so called Feature Provider for a diagram type which is |
| responsible to define the features that are available and are to be used |
| in the tool in a specific scenario.</p> |