updated documentation for release 0.6.0
Signed-off-by: Lorenzo Bettini <lorenzo.bettini@gmail.com>
diff --git a/documentation.html b/documentation.html
index 18e31a2..aa58166 100644
--- a/documentation.html
+++ b/documentation.html
@@ -160,6 +160,7 @@
<li><a class="submenu" tabindex="-1" href="#par">Tree Component</a></li>
<li><a class="submenu" tabindex="-1" href="#par">Tree Form Component</a></li>
<li><a class="submenu" tabindex="-1" href="#par">Table Component</a></li>
+ <li><a class="submenu" tabindex="-1" href="#par">Tree With Columns Component</a></li>
<li class="divider"></li>
<li><a tabindex="-1" href="#par">Customizations</a></li>
<li><a class="submenu" tabindex="-1" href="#par">Dependency Injection With</br> Google Guice</a></li>
@@ -167,6 +168,7 @@
<li><a class="submenu" tabindex="-1" href="#par">Contextual Menu</a></li>
<li><a class="submenu" tabindex="-1" href="#par">Drag and Drop</a></li>
<li><a class="submenu" tabindex="-1" href="#par">Factories</a></li>
+ <li><a class="submenu" tabindex="-1" href="#par">Editing Domain</a></li>
<li><a class="submenu" tabindex="-1" href="#par">Resources</a></li>
<li><a class="submenu" tabindex="-1" href="#par">Configurator</a></li>
<li><a class="submenu" tabindex="-1" href="#par">Validation</a></li>
@@ -187,6 +189,7 @@
<li><a class="submenu" tabindex="-1" href="#par">Adding the dirty state</br> and Save command</a></li>
<li class="divider"></li>
<li><a tabindex="-1" href="#par">Migration Guide</a></li>
+ <li><a class="submenu" tabindex="-1" href="#par">From 0.5.0 to 0.6.0</a></li>
<li><a class="submenu" tabindex="-1" href="#par">From 0.4 to 0.5</a></li>
<li><a class="submenu" tabindex="-1" href="#par">From 0.3 to 0.4</a></li>
<li class="divider"></li>
@@ -392,9 +395,15 @@
<p>
The <strong>viewpart</strong> corresponds to the standard Eclipse view part extension point; the Parsley
DSL will generate a <strong>plugin.xml_emfparsley_gen</strong>
- into the root folder of your project. Just copy this file into <strong>"plugin.xml"</strong>. Parsley
- will never override your <strong>plugin.xml</strong> file; each time you modify the module file, the
- <strong>plugin.xml_emfparsley_gen</strong> will be generated: it is up to you to keep the generated file
+ into the root folder of your project.
+ The very first time, and only if it does not exist already, the DSL will also
+ generate a <strong>plugin.xml</strong> file.
+ Further generations will NOT overwrite the <strong>plugin.xml</strong>: they will overwrite
+ <strong>plugin.xml_emfparsley_gen</strong>.
+ If you make changes to the <strong>parts</strong> section in the DSL file, you will have
+ to manually merge the two files <strong>plugin.xml</strong> and
+ <strong>plugin.xml_emfparsley_gen</strong>.
+ It is up to you to keep the generated file
synchronized with your <strong>"plugin.xml"</strong>. The easiest way is to select to the files,
and use the context menu "Compare With" => "Each Other".
</p>
@@ -1017,7 +1026,7 @@
<div >
<h2 id="par" class="featurette-heading text-parsley1">Tree Component</h2>
<p>
- The <strong>Tree Component</strong> provides a tree rapresentation of data that can be fed with an EResource, a
+ The <strong>Tree Component</strong> provides a tree representation of data that can be fed with an EResource, a
Resource URI, and a simple EObject. This component uses the EMF Meta-Model information to display objects in the tree.
</p>
<p>
@@ -1026,8 +1035,7 @@
<p>
</p>
<p>
- <strong>EMF Parsley</strong> provides a factory that can be used to create such a component, like in the code below.
- Here you can see that can be configured only in 2 lines, the constructor phase and the build&fill phase.
+ <strong>EMF Parsley</strong> provides a factory that can be used to create such a component, like in the code below:
</p>
<p>
</p>
@@ -1058,7 +1066,7 @@
<h3 class="featurette-heading text-parsley2">LabelProvider<a id="Tree_LabelProvider"></a></h3>
<p>
The <a href="#ViewerLabelProvider">Viewer Label Provider</a> is the implementation of an ILabelProvider interface
- and is responsible to provide the text and image rapresentation for each EObject visualized.
+ and is responsible to provide the text and image representation for each EObject visualized.
</p>
</br>
<h3 class="featurette-heading text-parsley2">Adding Menu<a id="Tree_MenuBuilder"></a></h3>
@@ -1073,7 +1081,7 @@
<div >
<h2 id="par" class="featurette-heading text-parsley1">Tree Form Component</h2>
<p>
- The <strong>Tree Form Component</strong> contains a <a href="#addref" rel="Tree Component"></a> that provides a tree rapresentation of data that can be fed with
+ The <strong>Tree Form Component</strong> contains a <a href="#addref" rel="Tree Component"></a> that provides a tree representation of data that can be fed with
an EResource, a Resource URI, and a simple EObject. This component uses the EMF Meta-Model information to display objects in
the tree. The component also combines a <a href="#addref" rel="Form Component"></a> detail that display the current selected object.
</p>
@@ -1173,6 +1181,54 @@
The <a href="#MenuBuilder">Menu Builder</a> allows to fully customize the menus.
</p>
</div>
+ </br>
+ <div >
+ <h2 id="par" class="featurette-heading text-parsley1">Tree With Columns Component</h2>
+ <p>
+ The <strong>Tree With Columns Component</strong> provides a tree representation just like <a href="#addref" rel="Tree Component">Tree Component</a>,
+ but it also shows table columns representing the features of the specified <abbr title="org.eclipse.emf.ecore.EClass">EClass</abbr>
+ .
+ </p>
+ <p>
+ IMPORTANT: the <abbr title="org.eclipse.emf.ecore.EClass">EClass</abbr>
+ is used to retrieve the features to be shown, and
+ NOT to filter elements to be shown (as opposite to the <a href="#addref" rel="Table Component">Table Component</a>). If a given
+ row in the tree represents an object whose class does not have the feature for a given column, then the
+ corresponding table cell for that object will be empty.
+ </p>
+ <p>
+ For example, the following screenshot shows a tree with columns representing a library; the specified
+ <abbr title="org.eclipse.emf.ecore.EClass">EClass</abbr>
+ is the <strong>Writer</strong> so the columns show the features of the
+ <strong>Writer</strong>'s class. Some of these features, e.g., <strong>address</strong>, <strong>firstName</strong> and <strong>lastName</strong>, are defined
+ in the superclasses of <strong>Writer</strong>. The objects of class <strong>Employee</strong> have these features as well, while
+ they don't have features that are specific of <strong>Writer</strong>, e.g., <strong>name</strong> and <strong>books</strong>, thus the corresponding
+ cells for employees will be empty.
+ </p>
+ <p>
+ </p>
+ <img src="images/03-components-treecolumns.png" class="img-responsive centered" style="margin-top:10px;margin-bottom:10px;">
+ <p>
+ </p>
+ <p>
+ <strong>EMF Parsley</strong> provides a factory that can be used to create such a component, like in the code below:
+ </p>
+ <p>
+ </p>
+ <pre class="prettyprint" skin="desert">
+ @Inject ViewerFactory viewerFactory;
+
+ (...)
+
+ treeViewer = createTreeViewerWithColumns(parent, getEClass(), getContents());
+ </pre>
+ <p>
+ </p>
+ <p>
+ Since this component mixes the features of a tree and a table, the customizations are basically the
+ same shown in the subsections of <a href="#addref" rel="Tree Component"></a> and <a href="#addref" rel="Table Component"></a>.
+ </p>
+ </div>
</div>
</div>
<hr style="width:64.6%;margin-bottom:28px;margin-top:30px;" class="col-md-8 col-md-offset-3">
@@ -1432,21 +1488,30 @@
</br>
<h3 class="featurette-heading text-parsley2">Viewer Label Provider<a id="ViewerLabelProvider"></a></h3>
<p>
- The Jface Label Prorvider allows to specify the representation of a given Object. <strong>EMF Parsley</strong>
+ The Jface Label Provider allows to specify the representation of a given Object. <strong>EMF Parsley</strong>
provides an implementation that uses the information provided via the DSL, as you can see in the snippet
- below.
+ below. We allow customization for text, image, font, and foreground and background color.
</p>
<p>
</p>
<pre class="prettyprint lang-parsley" skin="desert">
labelProvider{
- text{
+ text {
Book -> "Book:"+title
Borrower -> "Borrower: "+firstName
}
- image{
+ image {
Book -> "book.png"
}
+ font {
+ Book -> // must return a org.eclipse.swt.graphics.Font
+ }
+ foreground {
+ Book -> // must return a org.eclipse.swt.graphics.Color
+ }
+ background {
+ Book -> // must return a org.eclipse.swt.graphics.Color
+ }
}
</pre>
<p>
@@ -1454,10 +1519,17 @@
<p>
However if you want to customize the label provider in Java, you need to provide an implementation of <abbr title="org.eclipse.jface.viewers.ILabelProvider">ILabelProvider</abbr>
- and injecting it in the spefic module <strong>(TODO)</strong>.
+ and injecting it in the spefic module by overriding <strong>bindILabelProvider</strong>.
+ </p>
+ <p>
<strong>EMF Parsley</strong> provides such a base implementation with the class <abbr title="org.eclipse.emf.parsley.ui.provider.ViewerLabelProvider">ViewerLabelProvider</abbr>
that is meant to be subclassed by the programmer to provide specific implementations like in the example below.
+ Our label provider also implements <abbr title="org.eclipse.jface.viewers.IFontProvider">IFontProvider</abbr>
+ and
+ <abbr title="org.eclipse.jface.viewers.IColorProvider">IColorProvider</abbr>
+ , so that you can customize also the font, the foreground
+ and the background color.
</p>
<p>
This class, like many others in our framework, relies on the <strong>polymorphic dispatcher</strong> idiom to declaratively
@@ -1485,6 +1557,18 @@
return "book.png";
}
+ public Font font(Book book) {
+ return // must return a org.eclipse.swt.graphics.Font
+ }
+
+ public Color foreground(Book book) {
+ return // must return a org.eclipse.swt.graphics.Color
+ }
+
+ public Color background(Book book) {
+ return // must return a org.eclipse.swt.graphics.Color
+ }
+
public String text(Borrower b) {
return "Borrower: " + b.getFirstName();
}
@@ -1537,9 +1621,9 @@
super(adapterFactory);
}
- public Object elements(Library library) {
- return library.getBooks();
- }
+ public Object elements(Library library) {
+ return library.getBooks();
+ }
public Object children(Library library) {
return library.getBooks();
@@ -1625,6 +1709,65 @@
.
</p>
</br>
+ <h3 class="featurette-heading text-parsley2">Table Label Provider<a id="TableLabelProvider"></a></h3>
+ <p>
+ The Jface Table Label Provider allows to specify the representation of a given cell in a table. <strong>EMF Parsley</strong>
+ provides an implementation that uses the information provided via the DSL, as you can see in the snippet
+ below. We allow customization for text, image, font, foreground and background color for a given object's feature
+ (which corresponds to a table cell), and also font, and foreground and background color for the entire row.
+ </p>
+ <p>
+ Concerning fonts and colors, a customization for a single cell has the precedence over the customization of an entire row.
+ </p>
+ <p>
+ Here's an example.
+ </p>
+ <p>
+ </p>
+ <pre class="prettyprint lang-parsley" skin="desert">
+ tableLabelProvider {
+ text {
+ Library:name -> 'Name' // constant
+ Library:books -> 'Books' // constant
+ Writer:lastName -> name.toFirstUpper // the implicit param is an EStructuralFeature
+ }
+
+ image {
+ Book: author ->
+ if (author.name.nullOrEmpty)
+ "noname.gif"
+ else
+ new ImageData("writer.jpeg")
+ }
+
+ font {
+ Library : name -> JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)
+ }
+
+ foreground {
+ Library : books -> Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)
+ }
+
+ background {
+ Library : address -> Display.getCurrent().getSystemColor(SWT.COLOR_GREEN)
+ }
+
+ rowFont {
+ Library -> JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)
+ }
+
+ rowForeground {
+ Library -> Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)
+ }
+
+ rowBackground {
+ Library -> Display.getCurrent().getSystemColor(SWT.COLOR_GREEN)
+ }
+ }
+ </pre>
+ <p>
+ </p>
+ </br>
<h3 class="featurette-heading text-parsley2">Features Provider<a id="FeaturesProvider"></a></h3>
<p>
<strong>EMF Parsley</strong> uses this kind of provider wherever a list of features is requested for a certain EClass.
@@ -2056,7 +2199,7 @@
book.title = "A new book"
book.author = w
]
- ),
+ )
]
}
</pre>
@@ -2218,6 +2361,131 @@
</div>
</br>
<div >
+ <h2 id="par" class="featurette-heading text-parsley1">Editing Domain</h2>
+ <p>
+ The concept of <abbr title="org.eclipse.emf.edit.domain.EditingDomain">EditingDomain</abbr>
+ is crucial for editing
+ EMF models; we refer to the <strong>EMF.Edit</strong> <a href="http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.emf.doc%2Freferences%2Foverview%2FEMF.Edit.html">documentation</a> for further details.
+ In particular, the editing domain keeps track of commands executed on an EMF model,
+ thus enabling undo/redo mechanisms and "dirty state" management for saveable parts.
+ </p>
+ <p>
+ EMF Parsley aims at hiding the management of the editing domain, so that
+ everything should work smoothly and as expected, in an automatic way. In particular,
+ it is rare that you need to perform customizations on this mechanisms.
+ However, there might be cases when you need to be aware of this concept, especially
+ if you need to use one of our customizations. Moreover, you need to be aware of some
+ of the assumptions that EMF Parsley automatic mechanisms rely on (we inherit these assumptions
+ from EMF.Edit itself).
+ </p>
+ <p>
+ First of all, all the EMF <abbr title="org.eclipse.emf.ecore.resource.Resource">Resource</abbr>
+ s that you want to edit with EMF Parsley must be
+ contained in a <abbr title="org.eclipse.emf.ecore.resource.ResourceSet">ResourceSet</abbr>
+ , which, in turn,
+ must be contained in an <abbr title="org.eclipse.emf.edit.domain.EditingDomain">EditingDomain</abbr>
+ .
+ This is achieved automatically when using our <strong>ResourceLoader</strong>, <a href="#ResourceLoader">Resource Loader</a>.
+ </p>
+ <p>
+ Two resources loaded with different resource loaders will be contained in two
+ different editing domains. Two resources loaded with the same resource loader will
+ be in the same resource set and use the same editing domain.
+ </p>
+ <p>
+ Our default implementation of editing domain uses the EMF <abbr title="org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain">AdapterFactoryEditingDomain</abbr>
+ ,
+ so that all the EMF.Edit default mechanisms will work correctly. In particular,
+ our customization uses Google Guice mechanisms (see <a href="#addref" rel="Dependency Injection With</br> Google Guice">Dependency Injection With Google
+ Guice</a>), thus if you need an editing domain in your own views all you have to do is
+ to inject it, e.g.,
+ </p>
+ <p>
+ </p>
+ <pre class="prettyprint" skin="desert">
+ @Inject
+ private EditingDomain editingDomain;
+ </pre>
+ <p>
+ </p>
+ </br>
+ <h3 class="featurette-heading text-parsley2">Editing Domain Provider<a id="EditingDomainProvider"></a></h3>
+ <p>
+ If you need to provide a custom implementation of the editing domain
+ (for example, because you want to use a transactional editing domain), you need
+ to implement a custom Google Guice <abbr title="com.google.inject.Provider">Provider</abbr>
+ and
+ in your Guice module override this method:
+ </p>
+ <p>
+ </p>
+ <pre class="prettyprint" skin="desert">
+ public Class<? extends Provider<EditingDomain>> provideEditingDomain() {
+ return DefaultEditingDomainProvider.class;
+ }
+ </pre>
+ <p>
+ </p>
+ <p>
+ Such custom provider will then have to create an editing domain and return it.
+ </p>
+ <p>
+ We have some custom editing domain providers that might be useful in some
+ situations:
+ </p>
+ <p>
+ </p>
+ <ul>
+ <li><strong>GlobalAdapterFactoryEditingDomainProvider</strong>: all the injected
+ editing domains will be the same in the same JVM, thus all your
+ components will share exactly the same editing domain instances, and
+ all the resources will be contained in the same resource set of the same
+ editing domain.</li>
+ <li><strong>SingletonAdapterFactoryEditingDomainModule</strong>: similar to the previous
+ one, but according to the semantics of Google Guice <abbr title="com.google.inject.Singleton">@Singleton</abbr>
+ ,
+ i.e., only those components injected with the same injector will share
+ the same editing domain. This basically means that all the components
+ created with the same Parsley Guice module will share the same editing domain.</li>
+ </ul>
+ <p>
+ </p>
+ </br>
+ <h3 class="featurette-heading text-parsley2">Editing Domain Finder<a id="EditingDomainFinder"></a></h3>
+ <p>
+ All the EMF Parsley saveable views and editors will have their own
+ editing domain (modulo what we explained in <a href="#EditingDomainProvider">Editing Domain Provider</a>).
+ </p>
+ <p>
+ The EMF Parsley views that react on selection do NOT have a preset
+ editing domain, since they will represent (and possibly edit) EMF objects
+ selected in some other views, i.e., such objects can be contained in resources
+ of different resource sets (and different editing domains).
+ Thus, the editing domain of the currently shown object is dynamically
+ retrieved through an injected <strong>EditingDomainFinder</strong>. This default
+ implementation basically delegates to the standard EMF.Edit mechanisms
+ for retrieving the editing domain. In cases where the editing domain cannot
+ be found (e.g., because the object is not contained in a resource, or its resource
+ is not contained in a resource set, or its resource set is not contained in an
+ editing domain), then editing will not be possible (i.e., context menus <a href="#addref" rel="Contextual Menu"></a> and drag
+ and drop <a href="#addref" rel="Drag and Drop">Drag and Drop</a> will not work).
+ </p>
+ <p>
+ You can provide and bind a custom implementation of the <strong>EditingDomainFinder</strong>
+ which is particularly useful if you manage a transactional editing domain.
+ </p>
+ <p>
+ This is required only in some specific and advanced scenarios.
+ </p>
+ <p>
+ In standard situations you will not have to worry about that, and
+ editing mechanisms will work out of the box, including dragging an
+ element from one view into another view, provided they are in the
+ same resource set and such drag and drop makes sense.
+ </p>
+ </div>
+ </br>
+ <div >
<h2 id="par" class="featurette-heading text-parsley1">Resources</h2>
<p>
</p>
@@ -3015,6 +3283,87 @@
<h1 id="par" class="featurette-heading text-parsley">Migration Guide</h1>
</br>
<div >
+ <h2 id="par" class="featurette-heading text-parsley1">From 0.5.0 to 0.6.0</h2>
+ <p>
+ </p>
+ <ul>
+ <li>The way we handle the <abbr title="org.eclipse.emf.edit.domain.EditingDomain">EditingDomain</abbr>
+ is
+ changed and improved to some extent. In standard scenarios this should not
+ require any modifications. In advanced scenarios this will provide complete
+ control on the editing domain. We refer to the new section in the documentation,
+ <a href="#addref" rel="Editing Domain">Editing Domain</a>.</li>
+ <li><strong>Tree With Columns</strong>: a new component has been added:The <strong>Tree With Columns Component</strong> provides a tree representation just like <a href="#addref" rel="Tree Component">Tree Component</a>,
+ but it also shows table columns representing the features of the specified <abbr title="org.eclipse.emf.ecore.EClass">EClass</abbr>
+ .IMPORTANT: the <abbr title="org.eclipse.emf.ecore.EClass">EClass</abbr>
+ is used to retrieve the features to be shown, and
+ NOT to filter elements to be shown (as opposite to the <a href="#addref" rel="Table Component">Table Component</a>). If a given
+ row in the tree represents an object whose class does not have the feature for a given column, then the
+ corresponding table cell for that object will be empty.For example, the following screenshot shows a tree with columns representing a library; the specified
+ <abbr title="org.eclipse.emf.ecore.EClass">EClass</abbr>
+ is the <strong>Writer</strong> so the columns show the features of the
+ <strong>Writer</strong>'s class. Some of these features, e.g., <strong>address</strong>, <strong>firstName</strong> and <strong>lastName</strong>, are defined
+ in the superclasses of <strong>Writer</strong>. The objects of class <strong>Employee</strong> have these features as well, while
+ they don't have features that are specific of <strong>Writer</strong>, e.g., <strong>name</strong> and <strong>books</strong>, thus the corresponding
+ cells for employees will be empty.<img src="images/03-components-treecolumns.png" class="img-responsive centered" style="margin-top:10px;margin-bottom:10px;"><strong>EMF Parsley</strong> provides a factory that can be used to create such a component, like in the code below:<pre class="prettyprint" skin="desert">
+ @Inject ViewerFactory viewerFactory;
+
+ (...)
+
+ treeViewer = createTreeViewerWithColumns(parent, getEClass(), getContents());
+ </pre>Since this component mixes the features of a tree and a table, the customizations are basically the
+ same shown in the subsections of <a href="#addref" rel="Tree Component"></a> and <a href="#addref" rel="Table Component"></a>.</li>
+ <li><strong>EmfSelectionHelper</strong> only deals with selection element; utility methods for events is now
+ delegated to <strong>EmfEventHelper</strong>.</li>
+ <li>label provider for trees and table label providers for tables can now specify declaratively custom
+ fonts, foreground and background colors.For tables, you can customize the font, foreground and background color for the entire row or for a single
+ cell.Here are some examples:<pre class="prettyprint lang-parsley" skin="desert">
+ labelProvider{
+ ...
+ font {
+ Book -> // must return a org.eclipse.swt.graphics.Font
+ }
+ foreground {
+ Book -> // must return a org.eclipse.swt.graphics.Color
+ }
+ background {
+ Book -> // must return a org.eclipse.swt.graphics.Color
+ }
+ }
+ </pre><pre class="prettyprint lang-parsley" skin="desert">
+ tableLabelProvider {
+ ...
+ font {
+ Library : name -> JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)
+ }
+
+ foreground {
+ Library : books -> Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)
+ }
+
+ background {
+ Library : address -> Display.getCurrent().getSystemColor(SWT.COLOR_GREEN)
+ }
+
+ rowFont {
+ Library -> JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT)
+ }
+
+ rowForeground {
+ Library -> Display.getCurrent().getSystemColor(SWT.COLOR_BLUE)
+ }
+
+ rowBackground {
+ Library -> Display.getCurrent().getSystemColor(SWT.COLOR_GREEN)
+ }
+ }
+ </pre></li>
+ </ul>
+ <p>
+ </p>
+ </div>
+ </br>
+ <div >
<h2 id="par" class="featurette-heading text-parsley1">From 0.4 to 0.5</h2>
<p>
</p>
@@ -3345,7 +3694,7 @@
});
</script>
<script type="text/javascript" src="google-code-prettify/lang-common.js"></script><script type="text/javascript">
- registerLanguage('import|module|parts|labelProvider|text|image|elements|label|featuresProvider|features|formControlFactory|control|target|viewerContentProvider|tableViewerContentProvider|children|viewpart|viewname|viewclass|viewcategory|for|new|switch|default|boolean|do|if|this|double|throw|null|true|false|it|as|byte|else|case|enum|instanceof|return|featureCaptionProvider|formFeatureCaptionProvider|dialogFeatureCaptionProvider|val|var|catch|extends|int|short|try|char|void|finally|long|float|super|while|proposals|dialogControlFactory|menuBuilder|menus|emfMenus|resourceManager|initializeResource|saveResource|configurator|resourceURI|eClass|bindings|type|provide|value', 'emfparsley');
+ registerLanguage('import|module|parts|labelProvider|text|image|elements|label|featuresProvider|features|formControlFactory|control|target|viewerContentProvider|tableViewerContentProvider|children|viewpart|viewname|viewclass|viewcategory|for|new|switch|default|boolean|do|if|this|double|throw|null|true|false|it|as|byte|else|case|enum|instanceof|return|featureCaptionProvider|formFeatureCaptionProvider|dialogFeatureCaptionProvider|val|var|catch|extends|int|short|try|char|void|finally|long|float|super|while|proposals|dialogControlFactory|menuBuilder|menus|emfMenus|resourceManager|initializeResource|saveResource|configurator|resourceURI|eClass|bindings|type|provide|value|font|foreground|background|tableLabelProvider|rowFont|rowForeground|rowBackground', 'emfparsley');
</script>
</body>
</html>
diff --git a/download.html b/download.html
index 8051135..e82fa14 100644
--- a/download.html
+++ b/download.html
@@ -157,6 +157,8 @@
<h2 class="featurette-heading text-parsley1">Update Sites</h2>
<ul>
<li>All Releases: <a href="http://download.eclipse.org/emf-parsley/updates">http://download.eclipse.org/emf-parsley/updates</a></li>
+ <li>0.6.x: <a href="http://download.eclipse.org/emf-parsley/updates/0.6">http://download.eclipse.org/emf-parsley/updates/0.6</a>
+ (EMF Parsley DSL requires Xtext 2.9.1, which has to be taken from http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/ so make sure you add this update site before installing the DSL feature - included in the SDK).</li>
<li>0.5.x: <a href="http://download.eclipse.org/emf-parsley/updates/0.5">http://download.eclipse.org/emf-parsley/updates/0.5</a>
(EMF Parsley DSL requires Xtext 2.8.4, which has to be taken from http://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/ so make sure you add this update site before installing the DSL feature - included in the SDK).</li>
<li>0.4.x: <a href="http://download.eclipse.org/emf-parsley/updates/0.4">http://download.eclipse.org/emf-parsley/updates/0.4</a>
diff --git a/images/03-components-treecolumns.png b/images/03-components-treecolumns.png
new file mode 100644
index 0000000..256a19a
--- /dev/null
+++ b/images/03-components-treecolumns.png
Binary files differ
diff --git a/sources.html b/sources.html
index 77ae27c..3bb99a6 100644
--- a/sources.html
+++ b/sources.html
@@ -154,7 +154,7 @@
<li>Download and start Oomph: <a href="https://wiki.eclipse.org/Eclipse_Oomph_Installer">https://wiki.eclipse.org/Eclipse_Oomph_Installer</a></li>
<li>On the initial page, click on the Switch to advanced mode button in the top right</li>
<li>On the Product page, select Eclipse IDE for Eclipse Committers.</li>
- <li>On the Projects page, example the "EMF Parsley" node.</li>
+ <li>On the Projects page, expand the "EMF Parsley" node.</li>
<li>either double-click on "RCP" or "RAP" for setting up the workspace for either the RCP version of
Parsley or the RAP version (it is likely that you choose the former).</li>
<li>Choose your preferred installation settings on the Variables page: