blob: 82a15ac46ccf84693355e724a6cb57b18aab2050 [file] [log] [blame]
<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>