Insert links to to Architecture and basic concepts
diff --git a/examples/org.eclipse.graphiti.doc/resources/docu/gfw/add-feature.htm b/examples/org.eclipse.graphiti.doc/resources/docu/gfw/add-feature.htm
index 2f628d9..3160361 100644
--- a/examples/org.eclipse.graphiti.doc/resources/docu/gfw/add-feature.htm
+++ b/examples/org.eclipse.graphiti.doc/resources/docu/gfw/add-feature.htm
@@ -1,190 +1,192 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-
-<head>
-<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
-<title>Providing add functionality</title>
-<link href="../book.css" rel="Stylesheet" type="text/css">
-<link href="../code.css" rel="Stylesheet" type="text/css">
-</head>
-
-<body>
-
-<h1>Providing Add Functionality</h1>
-<h2>Architecture: Pictogram Model Linked With Domain Model</h2>
-<p>In the terms of Graphiti “add” means to add a graphical representation
-of an existing domain model object (= business object) to the diagram. What kinds
-of business objects can be added to a diagram of a specific type is decided by the
-add features delivered by the feature provider.</p>
-<p>For our example the graphical representation of a EClass is illustrated in the
-Figure. We want to see a rounded rectangle containing a separator like horizontal
-line and above that line the name of the corresponding EClass.</p>
-<p> </p>
-<p>
-<img alt="Graphical representation of a
-EClass" height="117" src="visio/package-shape.gif" width="155"></p>
-<p><strong>Figure: Graphical representation of a EClass</strong></p>
-<p> </p>
-<p>Graphiti supports a kind of linkage between elements of the domain model and
-elements of the model defining the graphical representation – the so called <em>
-Pictograms Model.</em> These links are called <em>pictogram links</em>. Each diagram
-contains one container for all pictogram links – called <em>diagram link</em>.</p>
-<p>You can see the linkage structure of the example in the Figure: Column one shows
-the entity model of the graphical representation of exactly one EClass. A container
-shape aggregates two child shapes (a container shape itself can be aggregated in
-another container shape or in a diagram). All three shapes themselves aggregate
-specific graphics algorithms, providing the complete information to allow the rendering
-on a screen. Examples for this information are background color, foreground color,
-size, position, visibility and line width. In our example we have a rounded rectangle
-providing an additional corner radius, a polyline having defined end- and bendpoints
-and a text label containing a text value.</p>
-<p> </p>
-<p><img alt="" height="350" src="visio/pictogram-model.png" width="557"></p>
-<p><strong>Figure: Linkage structure example</strong></p>
-<p> </p>
-<p>The container shape and likewise the shape containing the text label are related
-to a corresponding EClass. This relationship is realized through special link objects
-(pictogram link) holding references to both sides: to the pictograms side and to
-the business side.</p>
-<h2>Creating an add feature</h2>
-<p>In this example we want to enable the editor’s users to add EClasses to the diagram.
-As a result it should be possible to drag an EClass from the tree and drop it on
-the diagram. Therefore we have to create an add feature and make it available in
-the feature provider.</p>
-<p>An add feature has to implement the interface
-<a href="../../../javadoc/org/eclipse/graphiti/features/IAddFeature.html">IAddFeature</a>.
-Instead of implementing it directly it should extend one of the available base classes.
-In this example we extend the base class
-<a href="../../../javadoc/org/eclipse/graphiti/features/impl/AbstractAddShapeFeature.html">
-AbstractAddShapeFeature</a>.</p>
-<p>In this case we have to implement/overwrite two methods:</p>
-<ul>
- <li>The method
- <a href="../../../javadoc/org/eclipse/graphiti/func/IAdd.html#canAdd(org.eclipse.graphiti.features.context.IAddContext)">
- canAdd</a> has to check the given context and therefore it decides if a business
- object can be added.</li>
- <li>The method
- <a href="../../../javadoc/org/eclipse/graphiti/func/IAdd.html#add(org.eclipse.graphiti.features.context.IAddContext)">
- add</a> finally has to create the pictogram structure described above and has
- to establish the linkage to the business object. Additionally we have to create
- graphics algorithms and place them at the appropriate location (get location
- from given context). Additionally, the name of the EClass has to be set as the
- text label’s value. </li>
-</ul>
-<p>You can see the complete implementation of the add feature here:</p>
-<!-- Begin code ------------------------------------------------------------------------------- -->
-<p> </p>
-<div class="literallayout">
- <div class="incode">
- <p class="code"><span class="keyword">package </span>org.eclipse.graphiti.examples.tutorial.features;<br> <br>
- <span class="keyword">public class</span> TutorialAddEClassFeature
- <span class="keyword">extends </span>AbstractAddShapeFeature {<br> <br>
- <span class="keyword">private static final</span> IColorConstant
- <span class="string"><em>CLASS_TEXT_FOREGROUND</em></span> =<br>
- <span class="keyword">new </span>ColorConstant(51, 51, 153);<br> <br>
- <span class="keyword">private static final</span> IColorConstant
- <span class="string"><em>CLASS_FOREGROUND</em></span> =<br>
- <span class="keyword">new </span>ColorConstant(255, 102, 0);<br> <br>
- <span class="keyword">private static final</span> IColorConstant
- <span class="string"><em>CLASS_BACKGROUND</em></span> =<br>
- <span class="keyword">new </span>ColorConstant(255, 204, 153);<br> <br>
- <span class="keyword">public </span>TutorialAddEClassFeature(IFeatureProvider
- fp) {<br>
- <span class="keyword">super</span>(fp);<br> }<br> <br>
- <span class="keyword">public </span>boolean canAdd(IAddContext context)
- {<br> <span class="comment">//
- check if user wants to add a EClass</span><br>
- <span class="keyword">if </span>(context.getNewObject()
- <span class="keyword">instanceof </span>EClass) {<br>
- <span class="comment">// check if user wants to add to a diagram</span><br>
- <span class="keyword">if (</span>context.getTargetContainer()
- <span class="keyword">instanceof </span>Diagram) {<br>
- <span class="keyword"> return true</span>;<br>
- }<br> }<br>
- <span class="keyword"> return false</span>;<br> }<br> <br>
- <span class="keyword">public </span>PictogramElement add(IAddContext context)
- {<br> EClass addedClass = (EClass)
- context.getNewObject();<br> Diagram
- targetDiagram = (Diagram) context.getTargetContainer();<br> <br>
- <span class="comment">// CONTAINER SHAPE WITH ROUNDED RECTANGLE</span><br>
- IPeCreateService peCreateService = Graphiti.getPeCreateService();<br>
- ContainerShape containerShape =<br>
- peCreateService.createContainerShape(targetDiagram,
- <span class="keyword">true</span>);<br> <br>
- <span class="comment">// define a default size for the shape</span><br>
- <span class="keyword">int </span>width = 100;<br>
- <span class="keyword">int </span>height = 50; <br>
- IGaService gaService = Graphiti.getGaService();<br> <br>
- {<br>
- <span class="comment">// create and set graphics algorithm</span><br>
- RoundedRectangle roundedRectangle =<br>
- gaService.createRoundedRectangle(containerShape, 5, 5);<br>
- roundedRectangle.setForeground(manageColor(<em class="string">CLASS_FOREGROUND</em>));<br>
- roundedRectangle.setBackground(manageColor(<span class="string"><em>CLASS_BACKGROUND</em></span>));<br>
- roundedRectangle.setLineWidth(2);<br>
- gaService.setLocationAndSize(roundedRectangle,<br>
- context.getX(), context.getY(), width, height);<br> <br>
- <span class="comment">// if added Class has no resource we add it to the
- resource <br>
- // of the diagram<br>
- // in a real scenario the business model would have its own resource</span><br>
- <span class="keyword"> if</span> (addedClass.eResource() ==
- <span class="keyword">null</span>) {<br>
- getDiagram().eResource().getContents().add(addedClass);<br>
- }<br>
- <span class="comment">// create link and wire it</span><br>
- link(containerShape, addedClass);<br>
- }<br> <br>
- <span class="comment">// SHAPE WITH LINE</span><br>
- {<br>
- <span class="comment">// create shape for line</span><br>
- Shape shape = peCreateService.createShape(containerShape,
- <span class="keyword">false</span>);<br> <br>
- <span class="comment">// create and set graphics algorithm</span><br>
- Polyline polyline =<br>
- gaService.createPolyline(shape, <span class="keyword">new int</span>[] {
- 0, 20, width, 20 });<br>
- polyline.setForeground(manageColor(<span class="string"><em>CLASS_FOREGROUND</em></span>));<br>
- polyline.setLineWidth(2);<br>
- }<br> <br>
- <span class="comment">// SHAPE WITH TEXT</span><br>
- {<br>
- <span class="comment">// create shape for text</span><br>
- Shape shape = peCreateService.createShape(containerShape,
- <span class="keyword">false</span>);<br> <br>
- <span class="comment">// create and set text graphics algorithm</span><br>
- Text text = gaService.createDefaultText(getDiagram(), shape,<br>
- addedClass.getName());<br>
- text.setForeground(manageColor(<span class="string"><em>CLASS_TEXT_FOREGROUND</em></span>));<br>
- text.setHorizontalAlignment(Orientation.<span class="string"><em>ALIGNMENT_CENTER</em></span>);<br>
- text.setVerticalAlignment(Orientation.<span class="string"><em>ALIGNMENT_CENTER</em></span>);<br>
- text.getFont().setBold(<span class="keyword">true</span>);<br>
- gaService.setLocationAndSize(text, 0, 0, width, 20);<br> <br>
- <span class="comment">// create link and wire it</span><br>
- link(shape, addedClass);<br> }<br> <br>
- <span class="keyword">return </span>containerShape;<br>
- }<br>}<br> </p>
- </div>
-</div>
-<p> </p>
-<!-- End code ------------------------------------------------------------------------------- -->
-<h2>Test: Add a EClass</h2>
-<p class="Note">Note: if the project wizard for a "<a href="example-projects.htm">New
-Graphiti Sample Project</a>" does not work correctly and you can not test the add
-feature as described below, please continue with the next chapter and
-<a href="create-feature.htm">provide create functionality</a>. That will allow to
-test the add feature directly in the diagram.</p>
-<p>Now we can start the editor again. It should be possible to drop an EClass from
-the tree of the Graphiti "Test" project into the diagram Test-1. </p>
-<p> </p>
-<p><img alt="" height="302" src="visio/predefined-eclass.png" width="788"></p>
-<p> </p>
-<p><strong>Figure: Add PredefinedEClass to the editor</strong></p>
-<p> </p>
-<p>Without any further implementations it should be possible to move the EClass
-shapes around, resize them, remove them (context menu) and even delete them.</p>
-<p> </p>
-
-</body>
-
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+
+<head>
+<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+<title>Providing add functionality</title>
+<link href="../book.css" rel="Stylesheet" type="text/css">
+<link href="../code.css" rel="Stylesheet" type="text/css">
+</head>
+
+<body>
+
+<h1>Providing Add Functionality</h1>
+<p>A detailed description of the architecture and basic concepts of Graphiti can
+be found <a href="graphiti-introduction.htm#Architecture_and_Basic_Concepts">here</a>.</p>
+<h2>Architecture: Pictogram Model Linked With Domain Model</h2>
+<p>In the terms of Graphiti “add” means to add a graphical representation
+of an existing domain model object (= business object) to the diagram. What kinds
+of business objects can be added to a diagram of a specific type is decided by the
+add features delivered by the feature provider.</p>
+<p>For our example the graphical representation of a EClass is illustrated in the
+Figure. We want to see a rounded rectangle containing a separator like horizontal
+line and above that line the name of the corresponding EClass.</p>
+<p> </p>
+<p>
+<img alt="Graphical representation of a
+EClass" height="117" src="visio/package-shape.gif" width="155"></p>
+<p><strong>Figure: Graphical representation of a EClass</strong></p>
+<p> </p>
+<p>Graphiti supports a kind of linkage between elements of the domain model and
+elements of the model defining the graphical representation – the so called <em>
+Pictograms Model.</em> These links are called <em>pictogram links</em>. Each diagram
+contains one container for all pictogram links – called <em>diagram link</em>.</p>
+<p>You can see the linkage structure of the example in the Figure: Column one shows
+the entity model of the graphical representation of exactly one EClass. A container
+shape aggregates two child shapes (a container shape itself can be aggregated in
+another container shape or in a diagram). All three shapes themselves aggregate
+specific graphics algorithms, providing the complete information to allow the rendering
+on a screen. Examples for this information are background color, foreground color,
+size, position, visibility and line width. In our example we have a rounded rectangle
+providing an additional corner radius, a polyline having defined end- and bendpoints
+and a text label containing a text value.</p>
+<p> </p>
+<p><img alt="" height="350" src="visio/pictogram-model.png" width="557"></p>
+<p><strong>Figure: Linkage structure example</strong></p>
+<p> </p>
+<p>The container shape and likewise the shape containing the text label are related
+to a corresponding EClass. This relationship is realized through special link objects
+(pictogram link) holding references to both sides: to the pictograms side and to
+the business side.</p>
+<h2>Creating an add feature</h2>
+<p>In this example we want to enable the editor’s users to add EClasses to the diagram.
+As a result it should be possible to drag an EClass from the tree and drop it on
+the diagram. Therefore we have to create an add feature and make it available in
+the feature provider.</p>
+<p>An add feature has to implement the interface
+<a href="../../../javadoc/org/eclipse/graphiti/features/IAddFeature.html">IAddFeature</a>.
+Instead of implementing it directly it should extend one of the available base classes.
+In this example we extend the base class
+<a href="../../../javadoc/org/eclipse/graphiti/features/impl/AbstractAddShapeFeature.html">
+AbstractAddShapeFeature</a>.</p>
+<p>In this case we have to implement/overwrite two methods:</p>
+<ul>
+ <li>The method
+ <a href="../../../javadoc/org/eclipse/graphiti/func/IAdd.html#canAdd(org.eclipse.graphiti.features.context.IAddContext)">
+ canAdd</a> has to check the given context and therefore it decides if a business
+ object can be added.</li>
+ <li>The method
+ <a href="../../../javadoc/org/eclipse/graphiti/func/IAdd.html#add(org.eclipse.graphiti.features.context.IAddContext)">
+ add</a> finally has to create the pictogram structure described above and has
+ to establish the linkage to the business object. Additionally we have to create
+ graphics algorithms and place them at the appropriate location (get location
+ from given context). Additionally, the name of the EClass has to be set as the
+ text label’s value. </li>
+</ul>
+<p>You can see the complete implementation of the add feature here:</p>
+<!-- Begin code ------------------------------------------------------------------------------- -->
+<p> </p>
+<div class="literallayout">
+ <div class="incode">
+ <p class="code"><span class="keyword">package </span>org.eclipse.graphiti.examples.tutorial.features;<br> <br>
+ <span class="keyword">public class</span> TutorialAddEClassFeature
+ <span class="keyword">extends </span>AbstractAddShapeFeature {<br> <br>
+ <span class="keyword">private static final</span> IColorConstant
+ <span class="string"><em>CLASS_TEXT_FOREGROUND</em></span> =<br>
+ <span class="keyword">new </span>ColorConstant(51, 51, 153);<br> <br>
+ <span class="keyword">private static final</span> IColorConstant
+ <span class="string"><em>CLASS_FOREGROUND</em></span> =<br>
+ <span class="keyword">new </span>ColorConstant(255, 102, 0);<br> <br>
+ <span class="keyword">private static final</span> IColorConstant
+ <span class="string"><em>CLASS_BACKGROUND</em></span> =<br>
+ <span class="keyword">new </span>ColorConstant(255, 204, 153);<br> <br>
+ <span class="keyword">public </span>TutorialAddEClassFeature(IFeatureProvider
+ fp) {<br>
+ <span class="keyword">super</span>(fp);<br> }<br> <br>
+ <span class="keyword">public </span>boolean canAdd(IAddContext context)
+ {<br> <span class="comment">//
+ check if user wants to add a EClass</span><br>
+ <span class="keyword">if </span>(context.getNewObject()
+ <span class="keyword">instanceof </span>EClass) {<br>
+ <span class="comment">// check if user wants to add to a diagram</span><br>
+ <span class="keyword">if (</span>context.getTargetContainer()
+ <span class="keyword">instanceof </span>Diagram) {<br>
+ <span class="keyword"> return true</span>;<br>
+ }<br> }<br>
+ <span class="keyword"> return false</span>;<br> }<br> <br>
+ <span class="keyword">public </span>PictogramElement add(IAddContext context)
+ {<br> EClass addedClass = (EClass)
+ context.getNewObject();<br> Diagram
+ targetDiagram = (Diagram) context.getTargetContainer();<br> <br>
+ <span class="comment">// CONTAINER SHAPE WITH ROUNDED RECTANGLE</span><br>
+ IPeCreateService peCreateService = Graphiti.getPeCreateService();<br>
+ ContainerShape containerShape =<br>
+ peCreateService.createContainerShape(targetDiagram,
+ <span class="keyword">true</span>);<br> <br>
+ <span class="comment">// define a default size for the shape</span><br>
+ <span class="keyword">int </span>width = 100;<br>
+ <span class="keyword">int </span>height = 50; <br>
+ IGaService gaService = Graphiti.getGaService();<br> <br>
+ {<br>
+ <span class="comment">// create and set graphics algorithm</span><br>
+ RoundedRectangle roundedRectangle =<br>
+ gaService.createRoundedRectangle(containerShape, 5, 5);<br>
+ roundedRectangle.setForeground(manageColor(<em class="string">CLASS_FOREGROUND</em>));<br>
+ roundedRectangle.setBackground(manageColor(<span class="string"><em>CLASS_BACKGROUND</em></span>));<br>
+ roundedRectangle.setLineWidth(2);<br>
+ gaService.setLocationAndSize(roundedRectangle,<br>
+ context.getX(), context.getY(), width, height);<br> <br>
+ <span class="comment">// if added Class has no resource we add it to the
+ resource <br>
+ // of the diagram<br>
+ // in a real scenario the business model would have its own resource</span><br>
+ <span class="keyword"> if</span> (addedClass.eResource() ==
+ <span class="keyword">null</span>) {<br>
+ getDiagram().eResource().getContents().add(addedClass);<br>
+ }<br>
+ <span class="comment">// create link and wire it</span><br>
+ link(containerShape, addedClass);<br>
+ }<br> <br>
+ <span class="comment">// SHAPE WITH LINE</span><br>
+ {<br>
+ <span class="comment">// create shape for line</span><br>
+ Shape shape = peCreateService.createShape(containerShape,
+ <span class="keyword">false</span>);<br> <br>
+ <span class="comment">// create and set graphics algorithm</span><br>
+ Polyline polyline =<br>
+ gaService.createPolyline(shape, <span class="keyword">new int</span>[] {
+ 0, 20, width, 20 });<br>
+ polyline.setForeground(manageColor(<span class="string"><em>CLASS_FOREGROUND</em></span>));<br>
+ polyline.setLineWidth(2);<br>
+ }<br> <br>
+ <span class="comment">// SHAPE WITH TEXT</span><br>
+ {<br>
+ <span class="comment">// create shape for text</span><br>
+ Shape shape = peCreateService.createShape(containerShape,
+ <span class="keyword">false</span>);<br> <br>
+ <span class="comment">// create and set text graphics algorithm</span><br>
+ Text text = gaService.createDefaultText(getDiagram(), shape,<br>
+ addedClass.getName());<br>
+ text.setForeground(manageColor(<span class="string"><em>CLASS_TEXT_FOREGROUND</em></span>));<br>
+ text.setHorizontalAlignment(Orientation.<span class="string"><em>ALIGNMENT_CENTER</em></span>);<br>
+ text.setVerticalAlignment(Orientation.<span class="string"><em>ALIGNMENT_CENTER</em></span>);<br>
+ text.getFont().setBold(<span class="keyword">true</span>);<br>
+ gaService.setLocationAndSize(text, 0, 0, width, 20);<br> <br>
+ <span class="comment">// create link and wire it</span><br>
+ link(shape, addedClass);<br> }<br> <br>
+ <span class="keyword">return </span>containerShape;<br>
+ }<br>}<br> </p>
+ </div>
+</div>
+<p> </p>
+<!-- End code ------------------------------------------------------------------------------- -->
+<h2>Test: Add a EClass</h2>
+<p class="Note">Note: if the project wizard for a "<a href="example-projects.htm">New
+Graphiti Sample Project</a>" does not work correctly and you can not test the add
+feature as described below, please continue with the next chapter and
+<a href="create-feature.htm">provide create functionality</a>. That will allow to
+test the add feature directly in the diagram.</p>
+<p>Now we can start the editor again. It should be possible to drop an EClass from
+the tree of the Graphiti "Test" project into the diagram Test-1. </p>
+<p> </p>
+<p><img alt="" height="302" src="visio/predefined-eclass.png" width="788"></p>
+<p> </p>
+<p><strong>Figure: Add PredefinedEClass to the editor</strong></p>
+<p> </p>
+<p>Without any further implementations it should be possible to move the EClass
+shapes around, resize them, remove them (context menu) and even delete them.</p>
+<p> </p>
+
+</body>
+
+</html>
diff --git a/examples/org.eclipse.graphiti.doc/resources/docu/gfw/features.htm b/examples/org.eclipse.graphiti.doc/resources/docu/gfw/features.htm
index b8a4754..ff02c85 100644
--- a/examples/org.eclipse.graphiti.doc/resources/docu/gfw/features.htm
+++ b/examples/org.eclipse.graphiti.doc/resources/docu/gfw/features.htm
@@ -1,73 +1,73 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-
-<head>
-<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
-<title>Features</title>
-<link href="../book.css" rel="Stylesheet" type="text/css">
-<link href="../code.css" rel="Stylesheet" type="text/css">
-</head>
-
-<body>
-
-<h1>Features</h1>
-<h2>Architecture: Diagram Type Agent and Interaction Component</h2>
-<p>In the graphics framework's architecture a UI platform dependent and a diagram
-type independent interaction component communicates with a platform independent
-diagram type agent (see Figure). A diagram type agent consists mainly of a diagram
-type provider, a feature provider and its provided features.</p>
-<p> </p>
-<p style="page-break-after: avoid">
-<img alt="" height="276" src="visio\diagram-type-agent.gif" width="375"> </p>
-<p><strong>Figure: Interaction Component talks to Diagram Type Agent</strong></p>
-<p> </p>
-<p>In this chapter we want to implement a feature provider and wire it with the
-diagram type provider.</p>
-<h2>Create a Feature Provider</h2>
-<p>A feature provider has to implement interface
-<a href="../../../javadoc/org/eclipse/graphiti/features/IFeatureProvider.html">IFeatureProvider.
-Instead of implementing it directly you should extend one of the available base
-classes. In this example we extend class </a>
-<a href="../../../javadoc/org/eclipse/graphiti/ui/features/DefaultFeatureProvider.html">
-DefaultFeatureProvider</a> and do not have to implement or overwrite any methods
-initially.</p>
-<p>You can see the complete implementation of the feature provider here:</p>
-<!-- Begin code ------------------------------------------------------------------------------- -->
-<p> </p>
-<div class="literallayout">
- <div class="incode">
- <p class="code"><span class="keyword">package </span>org.eclipse.graphiti.examples.tutorial.diagram;<br>
- <br><span class="keyword">public class</span> TutorialFeatureProvider
- <span class="keyword">extends </span>DefaultFeatureProvider {<br> <br>
- <span class="keyword">public </span>TutorialFeatureProvider(IDiagramTypeProvider
- dtp) {<br>
- <span class="keyword">super</span>(dtp);<br> }<br>}
- </p>
- </div>
-</div>
-<p> </p>
-<!-- End code ------------------------------------------------------------------------------- -->
-<p>To create and set our feature provider in the diagram type provider we just have
-to add one line in the diagram type provider’s constructor:</p>
-<!-- Begin code ------------------------------------------------------------------------------- -->
-<p> </p>
-<div class="literallayout">
- <div class="incode">
- <p class="code"> <span class="keyword">public </span>MyTutorialDiagramTypeProvider()
- {<br> <span class="keyword">super</span>();<br>
- setFeatureProvider(new TutorialFeatureProvider(this));<br>
- }</p>
- </div>
-</div>
-<p> </p>
-<!-- End code ------------------------------------------------------------------------------- -->
-<h2>Test: Open the Empty Diagram Editor</h2>
-<p>Since the basic steps are done you can run the first version of this tutorial
-editor. It should be possible to create and open a diagram.</p>
-<p>For this follow the steps described in the <a href="example-projects.htm">example
-project</a> to open the empty diagram editor.</p>
-<p> </p>
-
-</body>
-
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+
+<head>
+<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
+<title>Features</title>
+<link href="../book.css" rel="Stylesheet" type="text/css">
+<link href="../code.css" rel="Stylesheet" type="text/css">
+</head>
+
+<body>
+
+<h1>Features</h1>
+<h2>Architecture: Diagram Type Agent and Interaction Component</h2>
+<p>In the graphics framework's <a href="graphiti-introduction.htm#Architecture_and_Basic_Concepts">architecture</a> a UI platform dependent and a diagram
+type independent interaction component communicates with a platform independent
+diagram type agent (see Figure). A diagram type agent consists mainly of a diagram
+type provider, a feature provider and its provided features.</p>
+<p> </p>
+<p style="page-break-after: avoid">
+<img alt="" height="276" src="visio\diagram-type-agent.gif" width="375"> </p>
+<p><strong>Figure: Interaction Component talks to Diagram Type Agent</strong></p>
+<p> </p>
+<p>In this chapter we want to implement a feature provider and wire it with the
+diagram type provider.</p>
+<h2>Create a Feature Provider</h2>
+<p>A feature provider has to implement interface
+<a href="../../../javadoc/org/eclipse/graphiti/features/IFeatureProvider.html">IFeatureProvider</a>.
+Instead of implementing it directly you should extend one of the available base
+classes. In this example we extend class
+<a href="../../../javadoc/org/eclipse/graphiti/ui/features/DefaultFeatureProvider.html">
+DefaultFeatureProvider</a> and do not have to implement or overwrite any methods
+initially.</p>
+<p>You can see the complete implementation of the feature provider here:</p>
+<!-- Begin code ------------------------------------------------------------------------------- -->
+<p> </p>
+<div class="literallayout">
+ <div class="incode">
+ <p class="code"><span class="keyword">package </span>org.eclipse.graphiti.examples.tutorial.diagram;<br>
+ <br><span class="keyword">public class</span> TutorialFeatureProvider
+ <span class="keyword">extends </span>DefaultFeatureProvider {<br> <br>
+ <span class="keyword">public </span>TutorialFeatureProvider(IDiagramTypeProvider
+ dtp) {<br>
+ <span class="keyword">super</span>(dtp);<br> }<br>}
+ </p>
+ </div>
+</div>
+<p> </p>
+<!-- End code ------------------------------------------------------------------------------- -->
+<p>To create and set our feature provider in the diagram type provider we just have
+to add one line in the diagram type provider’s constructor:</p>
+<!-- Begin code ------------------------------------------------------------------------------- -->
+<p> </p>
+<div class="literallayout">
+ <div class="incode">
+ <p class="code"> <span class="keyword">public </span>MyTutorialDiagramTypeProvider()
+ {<br> <span class="keyword">super</span>();<br>
+ setFeatureProvider(new TutorialFeatureProvider(this));<br>
+ }</p>
+ </div>
+</div>
+<p> </p>
+<!-- End code ------------------------------------------------------------------------------- -->
+<h2>Test: Open the Empty Diagram Editor</h2>
+<p>Since the basic steps are done you can run the first version of this tutorial
+editor. It should be possible to create and open a diagram.</p>
+<p>For this follow the steps described in the <a href="example-projects.htm">example
+project</a> to open the empty diagram editor.</p>
+<p> </p>
+
+</body>
+
+</html>