Publish documentation for 6.0
Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
diff --git a/doc/5.1.x/Glossary.html b/doc/5.1.x/Glossary.html
new file mode 100644
index 0000000..b4927d2
--- /dev/null
+++ b/doc/5.1.x/Glossary.html
@@ -0,0 +1,84 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Glossary</title>
+ <link type="text/css" rel="stylesheet" href="resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="Glossary" class="page-header">Glossary</h1>
+
+ <p>This document provides definitions for the technical terms and concepts used in
+ Sirius, and in particular in the rest of this documentation.</p><p>For concepts
+ which concern end-users, it assumes some basic knowledge of Eclipse terminology. If
+ you are not familiar with it, please refer to the Eclipse documentation itself. For
+ concepts targeted to specifier (and developers), it also assumes knowledge of EMF
+ and relegated technologies (including Java for developers). Again, refer to the
+ documentation of these frameworks or tools as needed.</p>
+
+ <dl>
+ <dt id="Dialect">Dialect</dt>
+ <dd>A kind of representation supported by Sirius. Out of the box, Sirius
+ supports three dialects: diagrams, tables, and trees. Sequence diagrams and
+ cross-tables, which are special kinds of diagrams (resp. tables) can also be though
+ of as dialects, although technically they are not.</dd>
+
+ <dt id="ModelingProject">Modeling Project</dt>
+ <dd>A special kind of project in your workspace which makes it easy to manipulate
+ representation files and semantic models in a consistent way.</dd>
+
+ <dt id="Representation">Representation</dt>
+ <dd>A particular diagram, table, or tree which you created on your semantic model. It
+ is simply a more general term than «diagram» which is also usable for
+ other dialects.</dd>
+
+ <dt id="RepresentationFile">Representation File</dt>
+ <dd>A file in which Sirius stores all informations related to which representations you created,
+ what appears on them, the positions and colors of the elements, etc. This files have a
+ <code>.aird</code> extension (typically <code>representations.aird</code>).
+ Representation files reference the semantic model(s) they contain representations
+ for, but you semantic models are kept unaware (and unpolluted) of any
+ Sirius-specific data.</dd>
+
+ <dt id="Resource">Resource</dt>
+ <dd>A generic term for a file (in your workspace or inside a plug-in) which contains a
+ model. The file extension (e.g. <code>.uml</code>) indicates what kind of semantic
+ model it contains.</dd>
+
+ <dt id="SemanticModel">Semantic Model</dt>
+ <dd>The model (or models) which contains your business data. It can be stored in one
+ of several resources (files) which can reference each other. The type of semantic
+ model can be different for each user. It can be based on a standard (for
+ example <code>.uml</code> files for UML models) or based on a <em>Domain Specific Model</em>
+ (sometimes called <em>Domain Specific Language</em>) which was specially
+ created for your needs.</dd>
+
+ <dt id="Viewpoint">Viewpoint</dt>
+ <dd>A set of consistent representation descriptions which provide a specific point of
+ view on some kind of semantic model. For example we could have a <em>UML Structural</em>
+ viewpoint, which describes the sub-set of all the standard UML
+ diagrams which deal only with structural aspects of UML models (as opposed to
+ behavioral or requirements aspects). Viewpoints are defined in
+ <em>Viewpoint Specification Models</em> and packaged as Eclipse plug-ins. Once you install such a
+ plug-in, the viewpoints it defines will be available to you (with all the representations
+ they define) on all compatible semantic models.</dd>
+
+ <dt id="VSM_">VSM</dt>
+ <dd>See <a href="#VSM">Viewpoint Specification Model</a>.</dd>
+
+ <dt id="VSM">Viewpoint Specification Model</dt>
+ <dd>The model, stored in resources with the <code>.odesign</code> extension, in which an architect
+ defines and configures viewpoints and their associated representations.</dd>
+
+ <dt id="VSP_">VSP</dt>
+ <dd>See <a href="#VSP">Viewpoint Specification Project</a>.</dd>
+
+ <dt id="VSP">Viewpoint Specification Project</dt>
+ <dd>An Eclipse plug-in project which contains a <a href="#VSM">VSM</a> and registers it using the
+ proper extension point so that it can be deployed correctly.</dd>
+ </dl>
+
+ </body>
+</html>
diff --git a/doc/5.1.x/Release_Notes.html b/doc/5.1.x/Release_Notes.html
new file mode 100644
index 0000000..8ab17e1
--- /dev/null
+++ b/doc/5.1.x/Release_Notes.html
@@ -0,0 +1,2179 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Release_Notes</title>
+ <link type="text/css" rel="stylesheet" href="resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="ReleaseNotesforSirius">Release Notes for Sirius</h1>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#ReleaseNotesforSirius">Release Notes for Sirius</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#sirius5.1.1">Changes in Sirius 5.1.1</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#DeveloperVisibleChanges">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius5.1.0">Changes in Sirius 5.1.0</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges2">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#DeveloperVisibleChanges2">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius5.0.1">Changes in Sirius 5.0.1</a>
+ </li>
+ <li>
+ <a href="#sirius5.0.0">Changes in Sirius 5.0.0</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges3">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#SpecifierVisibleChanges2">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#DeveloperVisibleChanges3">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius4.1.2">Changes in Sirius 4.1.2</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges4">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#DeveloperVisibleChanges4">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius4.1.1">Changes in Sirius 4.1.1</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges5">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#DeveloperVisibleChanges5">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius4.1.0">Changes in Sirius 4.1.0</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges6">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#DeveloperVisibleChanges6">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius4.0.0">Changes in Sirius 4.0.0</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges7">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#DeveloperVisibleChanges7">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <p>This document contains the release notes for recent major releases of Sirius. See also
+ <a href="Release_Notes_Previous.html">the release notes from previous versions</a> for details about older releases.
+ </p>
+ <h2 id="sirius5.1.1">Changes in Sirius 5.1.1</h2>
+ <h3 id="UserVisibleChanges">User-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-info">Modified</span> When exporting a diagram as an image, it is now possible to choose an image size level. Before this, a preference called
+ <em>AutoScale</em> was available and when it was enable, the diagram was scaled to the maximum size safely allowed by the system. Now, a new preference named
+ <em>Size of exported images</em> is available in the
+ <em>Sirius > Sirius Diagram</em> preference page and offer this possibility. Setting size to
+ <em>Max</em> generates same diagrams as by using the previous preference
+ <em>AutoScale</em>. This can produce image with big size in long generation time. If
+ <em>Size of exported images</em> is set to level
+ <em>Nominal</em>, diagram will be exported with nominal size (quality will be lower but export time will be shorter). This new preference allows you to choose the tradeoff you want. The
+ <a href="user/diagrams/Diagrams.html#Exportingimages">user documentation </a> details this change with an example.
+ </li>
+ <li><span class="label label-info">Modified</span> The "
+ <em>Auto Size</em>" action can now be applied on region container. Before that, the action was available only for regions.
+ </li>
+ <li><span class="label label-info">Modified</span> The "
+ <em>Make Same Size</em>" action can now be applied on region container. If selected region containers have the same number of regions, the regions will have the same size. If the region container used for reference has more regions than the other(s), the last region of others will have the size of all remaining regions in the one used for reference.
+ </li>
+ <li><span class="label label-info">Modified</span> In diagrams, the selection by drawing a rectangle on container (using ALT key) now has the same behaviors than selection by drawing a rectangle on the diagram’s background. You can refer to
+ <em>Selection</em> section of the
+ <a href="user/diagrams/Diagrams.html#standardToolId">Standard Tools</a> chapter for more details on this tool.
+ </li>
+ </ul>
+ <h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-danger">Removed</span> Since Sirius 5.0.0,
+ <code>org.eclipse.sirius.ext.jface.viewers.IToolTipProvider</code> is not used anymore to provide a tooltip on diagram element decorations defined in the VSM. The tooltip is defined directly with an interpreted expression on
+ <code>GenericDecorationDescription</code>,
+ <code>MappingBasedDecoration</code> and
+ <code>SemanticBasedDecoration</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder.of(EObject)</code> has been added to provide an easy way to get the
+ <code>SiriusReferenceFinder</code> from an
+ <code>EObject</code> in the Sirius
+ <code>Session</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> (experimental) The method
+ <code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder.getReferencingSiriusElements(Collection<EObject>, SearchScope)</code>. The SearchScope.LOADED_REPRESENTATIONS_SCOPE scope covers the search and result scope. Then, no additional resource will be loaded using this scope.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-warning">Deprecated</span> Preference
+ <code>PREF_SCALE_DIAGRAMS_ON_EXPORT</code> from
+ <code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code> is now deprecated. User should use new preference
+ <code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys</code>:
+ <code>PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT</code>.
+ </li>
+ <li><span class="label label-success">Added</span> A new attribute
+ <code>margin</code> has been added in
+ <code>org.eclipse.sirius.diagram.ui.business.api.DiagramExportResult</code>. This attribute indicates what margin has been used to produce a white frame during diagram export. This attribute is available from the getter
+ <code>getMargin()</code>. A new constructor is also available to pass on the margin
+ <code>org.eclipse.sirius.diagram.ui.business.api.DiagramExportResult.DiagramExportResult(DDiagram, double, int, Collection<IPath>)</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> If you previously override the default Sirius value for
+ <code>SiriusDiagramUiPreferencesKeys.PREF_SCALE_DIAGRAMS_ON_EXPORT</code>, you must replace this override by an override of the new preference
+ <code>SiriusUIPreferencesKeys.PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT</code>. Example:
+ </li>
+ </ul>
+ <pre>SiriusEditPlugin.getPlugin().getPreferenceStore().setDefault(SiriusUIPreferencesKeys.PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT.name(),0);
+
+</pre>
+ <h4 id="Changesinorg.eclipse.sirius.ui">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> A new preference has been added to
+ <code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys</code>:
+ <code>PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT</code>. It is used to control the scaling level behavior when exporting diagrams. Refer to the JavaDoc for the details.
+ </li>
+ <li><span class="label label-success">Added</span> The type
+ <code>org.eclipse.sirius.ui.business.api.dialect.ExportFormat</code> has a new attribute representing the scaling level to use for diagram export. It is defined by an integer type. Refer to the JavaDoc for details on its meaning.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in
+ <code>org.eclipse.sirius.tests.junit.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>SiriusTestCase.loadModeler(URI, EditingDomain)</code> allows to load the VSM at the specified URI and register all its Viewpoints in the current testcase. There is a new method,
+ <code>org.eclipse.sirius.tests.support.api.SiriusTestCase.loadModeler(URI, EditingDomain, boolean)</code>, to allow to load the VSM at the specified URI without registering its viewpoints. It can be useful to load a VSM for an editing domain of another session than the current session of the
+ </li>
+ </ul>
+ <p>testcase.</p>
+ <h2 id="sirius5.1.0">Changes in Sirius 5.1.0</h2>
+ <h3 id="UserVisibleChanges2">User-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> When exporting a diagram as an image, it is now possible to choose whether or not the diagram should be scaled. If disabled, the diagram will be exported with its normal size (equivalent to a 100% zoom level). If auto-scaling is enabled, the diagram will be scaled to the maximum size safely allowed by the system (this can be different on different OSes). Note that when auto-scaling is enabled, the image files produced may be larger than without. When exporting very large diagrams it is also possible that the diagram will be scaled
+ <em>down</em> (i.e. with a zoom level smaller than 100%). Enabling auto-scaling can be chosen on a case by case basis from the export dialog; the initial value in the dialog can be controlled by a new preference available in the
+ <em>Sirius > Sirius Diagram</em> preference page.
+ </li>
+ <li><span class="label label-success">Added</span> The end user can now
+ <a href="user/diagrams/Diagrams.html#RemoveBendpoints">remove all bend-points</a> on rectilinear edges. It was only possible on oblique edges before. This action is available on edge context menu “Remove Bend-points” or by using the shortcut “Ctrl” + “Shift” + “-”. If number of bend-points can not be reduced, remove action will be inefficient.
+ </li>
+ <li><span class="label label-success">Added</span> The status Synchronized/Unsynchronized of the diagram is now displayed in the status bar when the diagram editor has the focus or can be directly displayed
+ <a href="user/diagrams/Diagrams.html#synchronized_diagram">in the diagram</a> with a decorator.
+ </li>
+ <li><span class="label label-success">Added</span> The user now have a drop down menu in the tabbar with all available straighten to edge actions. </li>
+ <li><span class="label label-success">Added</span> Straighten to actions on edge are now available even if the selection contains incompatible elements (edge labels for example). Their execution affects only compatible edges.</li>
+ <li><span class="label label-success">Added</span> Four new straighten actions are available (with top pinned, with bottom pinned, with left pinned, with right pinned) and allow to straighten edges from the opposed straightening axis point of view.</li>
+ <li><span class="label label-info">Modified</span> In a diagram, when selecting an edge or a node that are not fully displayed in the editor, now, the reveal is not done anymore, that is, the displayed content of the editor is not moved anymore. If the user want to fully see the selected element, he may drag the editor content using center mouse button. </li>
+ <li><span class="label label-info">Modified</span> In a diagram with
+ <em>snapToGrid</em> enabled:
+ <ul>
+ <li>When performing a drag and drop from the model explorer or a palette tool to the diagram, the new created element is now snapped to the grid.</li>
+ <li>When performing an
+ <em>Arrange all</em> or an
+ <em>Arrange Linked Border Node</em> action, all diagram elements are now snapped to the grid.
+ </li>
+ <li>When performing a drag and drop or a tool that will create multiple elements, all created elements are still visible but now snapped to the grid. </li>
+ <li>When creating an edge with a tool that also create the associated border nodes, the border nodes are now snapped near the click location. Before, they were created to respect a shortest path.</li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="./images/borderNodesWithSnapToGrid.png"/>
+ </p>
+ <ul>
+ <li><span class="label label-info">Modified</span> In a sequence diagram, it is now possible to resize the combined fragment when the first or the last operand is selected (increase the size of the first operand to the top, or increase the size of the last operand to the bottom). Before, it was necessary to select the combined fragment itself to resize it. </li>
+ <li><span class="label label-info">Modified</span> In a sequence diagram, it is now possible to resize an
+ <em>Execution</em> contained in an
+ <em>Operand</em> without previously resize its
+ <em>Operand</em> if more space is needed. The
+ <em>Operand</em>, and if necessary the
+ <em>Combined Fragment</em>, is resized too.
+ </li>
+ <li><span class="label label-info">Modified</span> In a diagram, the action
+ <em>Show/Hide label</em> is now visible even if the selection contains invalid elements (ie elements without label). The action is applied only on valid elements of the selection.
+ </li>
+ <li><span class="label label-info">Modified</span> In a diagram, the Line Style actions (Tree, Oblique or Rectilinear Routing Style) is now visible in the contextual menu even if the selection contains invalid elements (other elements than edges). The action is applied only on valid elements of the selection.</li>
+ <li><span class="label label-info">Modified</span> When an user defines a custom bundled image shape for a figure (
+ <a href="developer/extensions-provide_custom_bundled_image_shape.html#bundleImageShape">bundleImageShape</a> ), opening or refreshing a diagram will not display exception anymore when the bundleImageShape extension is not valid. A warning is now displayed in the Error Log view to inform user of which attribute of the extension is not correct.
+ </li>
+ </ul>
+ <h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> An
+ <a href="./user/general/Modeling%20Project.html#Migration">automatic migration</a> has been added in this version to fix diagram with edge labels corrupted (see
+ <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=518870">bugzilla #518870</a> for more details). Contrary to all previous migrations, this one logs an information in the
+ <em>Error Log</em> view to inform how many labels have been fixed in concerned diagrams. If detected as “corrupted label”, the label is reset to its default location (as if you launch the “Snap Back” action of it). If at least one label is detected as “corrupted label”, the layout is also potentially corrupted (nodes, children of the diagram, with x or y coordinate very big). In this case, the concerned nodes are moved near 5000 (or -5000) as new coordinate. A message is added in this case:
+ <em>Some nodes have also been moved as the layout of this diagram is corrupted. A Reset Origin and/or manual layout is probably needed for this diagram.</em> The rules applied to detect a corrupted label are the following:
+ <ul>
+ <li>If the label is less than 250 pixels away from the reference point on its corresponding edge, the label is not considered as distant.</li>
+ <li>If the label is more than 1000 pixels away from the reference point on its corresponding edge, the label is considered as distant.</li>
+ <li>Between these 2 limits, the label is considered as distant if the distance between the center of the label and the edge is higher than “four times the size of the nearest segment”.</li>
+ </ul>
+ </li>
+ <li><span class="label label-info">Modified</span> In manual refresh mode (
+ <em>Automatic Refresh</em> Sirius preference disabled), when the
+ <em>Force Refresh</em> option of a tool is enabled in your VSM, only the current representation is refreshed when the tool is applied. Before this version, all open representations were refreshed.
+ </li>
+ <li><span class="label label-info">Modified</span> The filtering expression variables available in the properties view definition in the ‘Extends’ tab were renamed to match the following pattern: featureName+‘Description’.</li>
+ <li><span class="label label-info">Modified</span> The
+ <em>Reference Name</em> field of
+ <em>Create instance</em> completion will display only features with a consistent type with the one specified in
+ <em>Type Name</em> field (if a type has been specified).
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <em>Type Name</em> field of
+ <em>Create instance</em> completion will display only types consistent with the feature type specified in
+ <em>Reference Name</em> field (if a valid feature has been specified).
+ </li>
+ </ul>
+ <h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
+ <h4 id="Migrations">Migrations</h4>
+ <ul>
+ <li><span class="label label-success">Added</span> A migration has been added to fix diagram with edge labels corrupted (see
+ <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=518870">bugzilla #518870</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is
+ <em>12.1.0.201706291600</em>.
+ </li>
+ <li><span class="label label-success">Added</span> A new class
+ <code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures.SiriusDefaultSizeNodeFigure</code> has been added in plugin
+ <code>org.eclipse.sirius.ext.gmf.runtime</code>. The goal of the class is to workaround a
+ <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=519250">GMF bug</a>. So if you have created class which inherits from
+ <code>org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure</code>, you must now use the new
+ <code>SiriusDefaultSizeNodeFigure</code> instead.
+ </li>
+ <li><span class="label label-success">Added</span> A migration has been added to add an
+ <code>uid</code> to all instances of type DRepresentation. This
+ <code>uid</code> is used to reference the DRepresentation from the DRepresentationDescriptor.
+ <code>DRepresentationDescriptor.repPath</code> has been changed to have
+ <code>uid</code> as fragment. The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is
+ <em>12.1.0.201707281200</em>.
+ </li>
+ <li><span class="label label-success">Added</span> A migration has been added to fix diagram with edge bend-points corrupted (see
+ <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=519044">bugzilla #519044</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is
+ <em>12.1.0.201708031200</em>.
+ </li>
+ </ul>
+ <h4 id="TranslationKeysChanges">Translation Keys Changes</h4>
+ <p>See
+ <a href="i18n_changes.html#sirius51">this document</a> for the complete list of message keys added or removed in Sirius 5.0.
+ </p>
+ <h4 id="replazyloading">Representations lazy loading (experimental).</h4>
+ <p>A new mode (currently experimental) is available to load representations on demand and not during session opening. This feature implies to serialize Sirius representations in separate resources. This mode can be activated by setting the system property
+ <code>createLocalRepresentationInSeparateResource</code> at true. For more detail, see the developer documentation:
+ <a href="./developer/representations_lazy_loading.html">Representations lazy loading (experimental)</a>.
+ </p>
+ <h4 id="Changesinorg.eclipse.sirius2">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> A new convenience static method has been added on the
+ <code>org.eclipse.sirius.business.api.session.Session</code> interface to retrieve the session an arbitrary
+ <code>EObject</code> is part of:
+ <code>Optional<Session> s = Session.of(myObject);</code>. It returns a
+ <code>java.util.Optional<Session></code> so all the usual patterns apply, e.g.
+ <code>Session.of(obj).ifPresent(s -> doSomething(s));</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor.isLoadedRepresentation()</code> has been added to know if the representation linked with this {@link DRepresentationDescriptor} is loaded. By default, all representations are held in the same resource than the DRepresentationDescriptor, in that case the method will always return true.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSession.allAnalyses()</code> has been added in the interface to reflect the already existing
+ <code>org.eclipse.sirius.business.internal.session.danalysis.DAnalysisSessionImpl.allAnalyses()</code> implementation.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.dialect.DialectManager.getLoadedRepresentations(EObject, Session)</code> has been added to get all loaded representations in the given session with the given EObject as target.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.getAllLoadedRepresentations(Session)</code> has been added to get all loaded representations in the given session.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.helper.SiriusUtil.REPRESENTATIONS_FOLDER_NAME</code> constant has been added. This is the default folder where representations file (*.srm) are located if the system property “createLocalRepresentationInSeparateResource” is set at true.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tools.api.command.ui.UICallBack.shouldDeleteRepresentation(Set<DRepresentationDescriptor>)</code> has been added to be called when the user interface should prompt for a choice about the representation deletion.
+ </li>
+ <li><span class="label label-success">Added</span> (experimental) The new API
+ <code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder</code> and
+ <code>org.eclipse.sirius.business.api.query.EObjectQuery.getSiriusReferenceFinder()</code> method to get it have been added. This API allows getting the DRepresentations or DRepresentationElements that reference the provided semantic object. It also allows getting the DRepresentationDescriptor which associated DRepresentation is or contains elements that reference the provided semantic object. This API will be useful for
+ <a href="#replazyloading">representation lazy loading</a> as it may, in the future, not need to load all not yet loaded representations. For now, the use of this API will load all not loaded representations.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.getRepresentationDescriptors(EObject, Session)</code> has been moved to
+ <code>org.eclipse.sirius.business.api.dialect.DialectManager</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.getAllRepresentationDescriptors(Session)</code> has been moved to
+ <code>org.eclipse.sirius.business.api.dialect.DialectManager</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.getRepresentationDescriptors(RepresentationDescription, Session)</code> has been moved to
+ <code>org.eclipse.sirius.business.api.dialect.DialectManager</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span> The implementations of
+ <code>getRepresentationDescriptors(EObject, Session)</code>,
+ <code>getAllRepresentationDescriptors(Session)</code> and
+ <code>getRepresentationDescriptors(RepresentationDescription, Session)</code> have been removed from
+ <code>AbstractRepresentationDialectServices</code>. They are implemented in
+ <code>DialectManagerImpl</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.getRepresentations(EObject, Session)</code> has been moved to
+ <code>org.eclipse.sirius.business.api.dialect.DialectManager</code>
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.getAllRepresentations(Session)</code> has been moved to
+ <code>org.eclipse.sirius.business.api.dialect.DialectManager</code>
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.getRepresentations(RepresentationDescription, Session)</code> has been moved to
+ <code>org.eclipse.sirius.business.api.dialect.DialectManager</code>
+ </li>
+ <li><span class="label label-danger">Removed</span> The implementations of
+ <code>getRepresentations(EObject, Session)</code>,
+ <code>getAllRepresentations(Session)</code> and
+ <code>getRepresentations(RepresentationDescription, Session)</code> have been removed from
+ <code>AbstractRepresentationDialectServices</code>. They are implemented in
+ <code>DialectManagerImpl</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common">Changes in
+ <code>org.eclipse.sirius.common</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.common.tools.api.util.LazyCrossReferencer.setEObjectToBeIgnored(Predicate<EObject>)</code> has been added to filter inverse references to prevent some references resolution.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.common.tools.api.util.WorkspaceUtil.getFilesFromWorkspace(Collection<IProject>, String)</code> signature has been modified in
+ <code>getFilesFromWorkspace(Collection<IContainer>, String)</code> to be more generic.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram">Changes in
+ <code>org.eclipse.sirius.diagram</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> A new query has been added in
+ <code>org.eclipse.sirius.diagram.business.api.query.DDiagramQuery</code>. This query,
+ <code>getAllActivatedLayers</code>, returns all the activated layers (transient or not) of the given diagram. It should replace
+ <code>DDiagram.getActivatedLayers</code> in several cases if you directly use it.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> Three new preferences have been added to
+ <code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>:
+ <code>PREF_SCALE_DIAGRAMS_ON_EXPORT</code>,
+ <code>PREF_MAXIMUM_EXPORT_BUFFER_SIZE</code>,
+ <code>PREF_MAXIMUM_EXPORT_BUFFER_SIZE_WINDOWS</code>. They are used to control the auto-scaling behavior when exporting diagrams. Refer to the JavaDoc for the details.
+ </li>
+ <li><span class="label label-success">Added</span> In
+ <code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService</code>, two new methods have been added:
+ <ul>
+ <li>
+ <code>setAllowDownScaling(boolean)</code>: when auto-scaling is enabled (which is controlled by the already existing
+ <code>setAutoScalingEnabled()</code>), this is used to control if down-scaling is allowed or not.
+ </li>
+ <li>
+ <code>getScalingFactor()</code>: after the export has been performed, this can be used to obtain the scaling factor that was effectively used.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.diagram.ui.business.api.DiagramExportResult</code> has been added, which inherits from
+ <code>ExportResult</code>. It is returned by the
+ <code>DialectManager.exportWithResult()</code> methods when the representation exported is a diagram, and in addition to the information provided by
+ <code>ExportResult</code> gives access to the scaling factor that was used when exporting the diagram.
+ </li>
+ <li><span class="label label-success">Added</span> The new preference
+ <code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys.PREF_SHOW_SYNCHRONIZE_STATUS_DECORATOR</code> has been added to say if the
+ <a href="user/diagrams/Diagrams.html#synchronized_diagram">synchronize status</a> decorator must be shown or not.
+ </li>
+ <li><span class="label label-success">Added</span> A new method
+ <code>checkShapesIntersect()</code> has been added in
+ <code>org.eclipse.sirius.diagram.ui.business.api.query.ConnectionEditPartQuery</code> to check if source and target of the connection intersect (only intersect – not one contained in another).
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.emf.edit">Changes in
+ <code>org.eclipse.sirius.ext.emf.edit</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices</code> does not use
+ <code>Collection</code> anymore as return type or parameter type in its services.
+ <code>java.util.Collection</code> has been replaced by
+ <code>java.util.List</code>. As mentioned in the
+ <a href="./specifier/general/Writing_Queries.html#service_methods">specifier documentation</a>, it is recommended to use List or Set instead of Collection in java services signature.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui2">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> In
+ <code>org.eclipse.sirius.ui.tools.api.dialogs.AbstractExportRepresentationsAsImagesDialog</code> a new method
+ <code>isAutoScaleDiagram()</code> has been added to indicate (once the dialog has been closed) if the user has requested to enable auto-scaling on diagram export.
+ </li>
+ <li><span class="label label-success">Added</span> In
+ <code>org.eclipse.sirius.ui.tools.api.actions.export.ExportAction</code>, a new method
+ <code>setAutoScaleDiagram(boolean)</code> to ask for automatic scaling of diagrams on export.
+ </li>
+ <li><span class="label label-success">Added</span> In
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices</code>, two new methods
+ <code>exportWithResult()</code> have been added. They are equivalent to the existing
+ <code>export()</code> methods (which return
+ <code>void</code>) except that they return an instance of the new type
+ <code>org.eclipse.sirius.ui.business.api.dialect.ExportResult</code>. This gives access to the list of all the actual files produced by the export operation. Note that in the case of the diagram dialect,
+ <code>exportWithResult()</code> actually returns a more specific
+ <code>DiagramExportResult</code> with additional diagram-specific information.
+ </li>
+ <li><span class="label label-success">Added</span> The type
+ <code>org.eclipse.sirius.ui.business.api.dialect.ExportFormat</code> has a new attribute representing the scaling policy to use for diagram. It is defined by a new enumerated type
+ <code>ExportFormat.ScalingPolicy</code> which can have four different values:
+ <code>WORKSPACE_DEFAULT</code>,
+ <code>AUTO_SCALING</code>,
+ <code>NO_SCALING</code>,
+ <code>AUTO_SCALING_IF_LARGER</code>. Refer to the JavaDoc for details on their meanings.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.tools.api.wizards.CreateEMFModelWizard</code> is a new wizard that can be invoked to create instances of any metamodel. It will ask the end-user for a metamodel (
+ <code>EPackage</code>), a concrete type to instanciate as root element, and finally the local path of the file to create. See the class Javadoc for sample usage. Note that the first two pages of the wizard (EPackage and root type selection) can be customized through the
+ <code>org.eclipse.sirius.common.package_meta_data</code> extension point to provide user-oriented name and documentation for an EPackage, and to suggest specific EClasses as good root candidates.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback.shouldDeleteRepresentation(Set<DRepresentationDescriptor>)</code> default implementation has been added to prompt the confirm dialog.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.SessionEditorInput(URI, URI, String, Session)</code> has been added to provide the
+ <code>DRepresentationDescriptor</code> URI to retrieve the
+ <code>DRepresentation</code> from the
+ <code>DRepresentationDescriptor.getRepresentation()</code> method instead of performing a direct load.
+ </li>
+ <li><span class="label label-info">Modified</span> The org.eclipse.sirius.ui.tools.api.assist.TextContentProposalProvider.getSelectedElement() method is now protected instead of private to let sub-classes retrieving the selected element.</li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui.editor">Changes in
+ <code>org.eclipse.sirius.ui.editor</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> New classes have been added in package
+ <code>org.eclipse.sirius.ui.editor.api.pages</code>. They are the following:
+ <code>AbstractSessionEditorPage</code>,
+ <code>PageProvider</code>,
+ <code>PageUpdateCOmmand</code>,
+ <code>PositioningKind</code>,
+ <code>PageUpdateCommandFactory</code>. These classes allow to provide custom pages to session editor instances.
+ </li>
+ <li><span class="label label-success">Added</span> An extension point
+ <code>org.eclipse.sirius.ui.editor.sessionEditorPageProvider</code> has been added to allow custom page providing for session editor instances.
+ </li>
+ </ul>
+ <h2 id="sirius5.0.1">Changes in Sirius 5.0.1</h2>
+ <p>Sirius 5.0.1 is a maintenance release with only bugfixes and small tweaks to the UI of
+ <a href="user/general/Aird_Editor.html">the aird editor</a>.
+ </p>
+ <h2 id="sirius5.0.0">Changes in Sirius 5.0.0</h2>
+ <h3 id="UserVisibleChanges3">User-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> An new
+ <em>aird editor</em> is available on
+ <em>.aird</em> files. It provides an alternative, form-based GUI to visualize and manipulate sirius sessions which is not tied to the Modeling perspective or Model Explorer view. See
+ <a href="user/general/Aird_Editor.html">the editor’s documentation</a> for more details.
+ </li>
+ <li><span class="label label-info">Modified</span> The label alignment of Notes from the Palette has been modified from Juno to Luna or newer versions of Eclipse. The label alignment had changed from
+ <em>TOP</em> &
+ <em>CENTER</em> to
+ <em>MIDDLE</em> &
+ <em>LEFT</em> (respectively). The initial alignment (
+ <em>TOP</em> &
+ <em>CENTER</em>) has been restored. This is done with an
+ <a href="./user/general/Modeling%20Project.html#Migration">automatic migration</a> of the aird file.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <em>Export diagram as images</em> action now adatps the output resolution based on the diagram size. This leads to better resolution for small to medium diagrams (and also bigger file) and to an operation which is no longer failing with out of memory errors in case of very big diagrams.
+ </li>
+ <li><span class="label label-info">Modified</span> The “straighten to” actions previously had a limitation concerning overlap detection. This is no longer the case. The previous known limitation has been removed from the documentation (
+ <i>In case of multi-selection, the overlap check is done in the current context of existing border nodes and not in the context of location of border nodes after each straighten edges.</i>).
+ </li>
+ <li><span class="label label-info">Modified</span> Decorators on diagram elements are drawn on top of other figures. If there is an overlap between a decorator of a figure A and another figure B that is over figure A, when user clicks on the decorator, the figure B is now selected (before it was the parent figure A).</li>
+ </ul>
+ <h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> It is now possible to automatically create one or several pre-configured widget(s) in a group if its domain class and if the meta-models of the properties view containing it have been specified. The widget(s) created will be infered from the features in the domain class (e.g. a properly configured
+ <em>Checkbox</em> widget will be created for boolean attributes).
+ </li>
+ <li><span class="label label-success">Added</span> Property Views definitions now support extending and overriding Properties View Descriptions without modifying the original. See
+ <a href="specifier/properties/Properties_View_Description.html#extensibility_features">the documentation</a> for details.
+ </li>
+ <li><span class="label label-success">Added</span> New model operations are available. You can now open a
+ <a href="specifier/general/Model_Operations.html#dialog">dialog</a> or a
+ <a href="specifier/general/Model_Operations.html#wizard">wizard</a> thanks to new dedicated model operations leveraging the Properties View language. You can also create new variable with the new
+ <em>Let</em> model operation, see its
+ <a href="specifier/general/Model_Operations.html#let">documentation</a> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> In Property Views definitions, you can now create
+ <em>Toolbar Actions</em> on pages and groups in order to define small buttons in their toolbars.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <em>Buttons</em> and
+ <em>Widget Actions</em> can now use an image along with a label thanks to the new
+ <em>Image expression</em>.
+ </li>
+ <li><span class="label label-success">Added</span> It is now possible to execute some behavior when the end users will click on the
+ <em>Reference Widget</em> thanks to the addition of an
+ <em>Initial Operation</em>.
+ </li>
+ <li><span class="label label-success">Added</span> You can indicate that a
+ <em>Dynamic Mapping For</em> should force the refresh of the user interface with the
+ <em>Force Refresh</em> property.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <em>Categories</em> have been added in order to organize the pages and groups of the
+ <em>Properties</em> DSL.
+ </li>
+ <li><span class="label label-info">Modified</span> The notion of transient layer has been introduced in Sirius 5.0. (Refer to
+ <a href="specifier/diagrams/Diagrams.html#Transientlayer">Sirius Specifier</a> and
+ <a href="user/diagrams/Diagrams.html#transientLayer">Sirius User</a> documentation in Diagram chapter). A transient layer is an additional layer containing only decorations or tools. If you have such layer in your VSM, users may encounter some unexpected behaviors. If the layer is not
+ <em>active by default</em>, its activation state will not be persisted at session close. In other words, if a transient layer is enabled in a diagram and then the session is closed, at the next diagram opening, the layer will be disabled. If users have existing representations file, made with previous version, with such kind of layers activated, they will no longer enabled at the next opening in Sirius 5.0.0. If the layer is
+ <em>active by default</em> then it will be automatically applied when opening your diagram. We consider this behavior as a known limitation and an enhancement may be done in a further release. In the meantime, there is a workaround which consists to add a fake mapping (that is any mapping with its fields empty) so that the layer will not be considered as transient.
+ </li>
+ <li><span class="label label-info">Modified</span> The tab used to configure the metamodels used by the Properties view description is now using the same interface as the metamodels tab used to configure the representations.</li>
+ <li><span class="label label-info">Modified</span> The
+ <code>package::Class</code> syntax for domain classes and type names in the VSM is now fully supported and the new default. It means this syntax is interpreted by Sirius and completion is provided for it when the first
+ <code>:</code> character is entered. The legacy syntax
+ <code>package.Class</code> is still supported for compatibility.
+ </li>
+ <li><span class="label label-info">Modified</span> The organization of the contextual actions in the odesign for the
+ <em>Properties</em> DSL has been improved.
+ </li>
+ <li><span class="label label-info">Modified</span> Most of the concepts of the
+ <em>Properties</em> DSL can now have an identifier, a label and some documentation.
+ </li>
+ </ul>
+ <h3 id="DeveloperVisibleChanges3">Developer-Visible Changes</h3>
+ <h4 id="Migrations2">Migrations</h4>
+ <ul>
+ <li><span class="label label-success">Added</span> A migration is added in this version to fix the alignment of the text in notes (as explained in user visible changes). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is
+ <em>12.0.0.201704070000</em>.
+ </li>
+ </ul>
+ <h4 id="TranslationKeysChanges2">Translation Keys Changes</h4>
+ <p>See
+ <a href="i18n_changes.html#sirius50">this document</a> for the complete list of message keys added or removed in Sirius 5.0.
+ </p>
+ <h4 id="Changesinorg.eclipse.sirius.common2">Changes in
+ <code>org.eclipse.sirius.common</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapterImpl.setFeatureToBeCrossReferencedWhiteList(Collection<EReference>)</code> to set a white list of references that must be referenced even if the reference is derived.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapterImpl.isIncluded(EReference)</code> has been overridden to consider features in the white list.
+ </li>
+ <li><span class="label label-success">Added</span> A new extension point,
+ <code>org.eclipse.sirius.common.package_meta_data</code> has been added. It can be used to associate user-oriented meta-data to Ecore metamodels, identified by their
+ <code>nsURI</code>: a user-oriented name/label (as opposed to the technical nsURI), a (short) description/documentation, and a list of suggested EClasses defined in the EPackage that are good candidates as root model elements. These meta-data are currently used only in the generic model creation wizard integrated in the aird editor.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common.ui">Changes in
+ <code>org.eclipse.sirius.common.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-danger">Removed</span> The
+ <code>org.eclipse.sirius.common.ui.tools.api.dialog.FeatureEditorDialog</code> class has been removed; use the
+ <code>org.eclipse.emf.edit.ui.celleditor.FeatureEditorDialog</code> equivalent provided by EMF directly instead.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius3">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> An experimental mode to serialize representations in a different file is available with system property
+ <code>createRepresentationInSeparateResource=true</code>. That means all new representations will be saved, when this property is enabled, in a separate file with
+ <code>*.srm</code> extension.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.canCreate(EObject, RepresentationDescription, boolean)</code> has been added to better control the checks done by already existing
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.canCreate(EObject, RepresentationDescription)</code> method. The new boolean allow to deactivate the check verifying that the viewpoint of the given description must be activated so the method can return true.
+ </li>
+ <li><span class="label label-success">Added</span> The
+ <code>org.eclipse.sirius.viewpoint.description.DAnnotation.references</code> feature has been added. It allows to have some information without having to search them into the entire model of the Sirius session. Ideally only elements from semantic resources of the session should be referenced or else it may broke the session behavior either because resolving too soon EObject in the session or because adding a resource that is not known by Sirius session.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.query.EObjectQuery.getImpactedRepDescriptorFromDAnnotationData()</code> method has been added to help retrieve the
+ <code>DRepresentationDescriptors</code> which owned
+ <code>DAnnotation</code> are referencing a given
+ <code>EObject</code> with
+ <code>DAnnotation.references</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor#repPath</code> attribute has been added to hold the representation path since the
+ <code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor#representation</code> feature is derived. This attribute is not intended to be modified by client. You should use
+ <code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor.setRepresentation(DRepresentation)</code> or
+ <code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor.updateRepresentation(DRepresentation)</code> instead.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor.updateRepresentation(DRepresentation)</code> has been added to update the repPath attribute according to the given representation. This method is intended to be called if the representation instance is still the same but requires to recompute the repPath.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.query.FileQuery.isSrmFile()</code> has been added to indicate if the file extension is dedicated to a file containing representations.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.dRepresentationLocationRule</code> extension point has been added to customize the resource location of new representations. See
+ <a href="extensions-provide_representation_location_rule.html">Provide representation location rule (experimental)</a> for more details.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.session.danalysis.DRepresentationLocationRule</code> interface has been added to provide a customized rule to the
+ <code>org.eclipse.sirius.dRepresentationLocationRule</code> extension point.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.helper.SiriusUtil.REPRESENTATION_FILE_EXTENSION</code> constant has been added to reference the new *.srm extension.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.session.Session.getSrmResources()</code> has been added to provide the list of representation resources (serialized as *.srm files by default).
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.query.ResourceQuery.isAirdOrSrmResource()</code> has been added to know whether the resource is a srm resource (
+ <code>org.eclipse.sirius.business.api.query.ResourceQuery.isSrmResource()</code>) or an aird resource.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.query.ResourceQuery.isSrmResource()</code> has been added to know whether the resource contains a
+ <code>DRepresentation</code> as root element.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.migration.DiagramCrossReferencer.DiagramCrossReferencer(Collection<Resource>)</code> constructor has been added to compute the cross references on a list of resources.
+ </li>
+ <li><span class="label label-success">Added</span> A new
+ <code>org.eclipse.sirius.modelOperationManager</code> extension point has been addded. It allows the contribution of new types of
+ <em>Model Operations</em> which are then usable in modeler definitions (
+ <code>*.odesign</code>).
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor#representation</code> feature is now derived, transient and volatile. The representation is compute by using the
+ <code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor#repPath</code> attribute.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>org.eclipse.sirius.business.api.query.DViewQuery.getAllContentInRepresentations(Predicate<? super EObject>)</code> now takes a
+ <code>java.util.Predicate</code> (from Java 8) as argument instead of a
+ <code>com.google.common.base.Predicate</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The extension point
+ <code>org.eclipse.sirius.ui.modelingprojectresourcelistener</code> is no longer expected to be used. It is an internal extension point. Clients using this extension point to ignore some files as potential semantic models must now use the extension point
+ <code>org.eclipse.sirius.resourceStrategy</code>. This extension point existed before Sirius 5.0.0 but was not API. It becomes API with Sirius 5.0.0, see the
+ <a href="developer/extensions-provide_resource_strategy.html">developer documentation</a> for more details.
+ <ul>
+ <li>If you used to override protected methods
+ <code>boolean isPotentialSemanticResource(IFile)</code> and
+ <code>boolean isLoadableModel(IFile, Session)</code> of class
+ <code>org.eclipse.sirius.ui.tools.api.views.modelexplorerview.resourcelistener.DefaultModelingProjectResourceListener</code>, you can now create a
+ <code>resourceStrategy</code> of type
+ <code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategy.ResourceStrategyType.SEMANTIC_RESOURCE</code> and respectively override
+ <code>boolean isPotentialSemanticResource(URI)</code> and
+ <code>boolean isLoadableModel(URI,Session)</code>. As a reminder, to get an URI from an IFile, you can use:
+ <code>URI.createPlatformResourceURI(iFile.getFullPath().toString(), true)</code>. And to get an IFile from an URI, you can use:
+ <code>ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(uri.toPlatformString(true)))</code>.
+ </li>
+ <li>If you used to override protected methods
+ <code>boolean isRepresentationsModel(IFile)</code> and
+ <code>boolean isVsmModel(IFile)</code> of class
+ <code>org.eclipse.sirius.ui.tools.api.views.modelexplorerview.resourcelistener.DefaultModelingProjectResourceListener</code>, they no longer exist. They correspond to core API and is not supposed to be overridden. They are accessible through API
+ <code>org.eclipse.sirius.business.api.query.FileQuery.FileQuery(IFile)</code>.
+ </li>
+ <li>All necessary classes for extension point
+ <code>org.eclipse.sirius.resourceStrategy</code> are now APIs:
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategyRegistry</code>: Registry to have access to all overridable services through a
+ <code>ResourceStrategy</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategy</code>: Interface implemented by all resource strategies
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.resource.strategy.AbstractResourceStrategyImpl</code>: Default implementation of above interface. All resource strategies contributed with the extension need to extend it.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.resource.strategy.LegacyReleaseResourceStrategyImpl</code> (previously named
+ <code>DefaultResourceStrategyImpl</code>): A resource strategy with the code used before the optimization concerning the
+ <code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategy.ResourceStrategyType.RELEASE_RESOURCE_AT_RESOURCESET_DISPOSE</code>. It is not used but can be quickly contributed by someone that want the previous behavior (before Sirius 4.0.0 M6).
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-danger">Removed</span> The already deprecated constructor of
+ <code>org.eclipse.sirius.business.api.control.SiriusUncontrolCommand</code> with signature
+ <code>SiriusUncontrolCommand(EObject, boolean, IProgressMonitor)</code> has been removed; instead, use the alternate constructor with an additional explicit
+ <code>boolean shouldEndBySaving</code> parameter (set it to
+ <code>true</code> to obtain the same behavior as the removed constructor).
+ </li>
+ <li><span class="label label-danger">Removed</span> In
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices</code>, methods
+ <code>canCreateIdentifier</code> and
+ <code>createIdentifier</code> have been removed.
+ </li>
+ <li><span class="label label-danger">Removed</span> The
+ <code>org.eclipse.sirius.business.api.dialect.identifier</code> package and all its content (
+ <code>AbstractRepresentationElementIdentifier</code> and
+ <code>RepresentationElementIdentifier</code>) have been removed.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui3">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> Two new methods have been added to the interface
+ <code>org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelection.Callback</code>:
+ <code>selectViewpoint(Viewpoint, Session, boolean, Set<Viewpoint>, IProgressMonitor)</code> and
+ <code>deselectViewpoint(Viewpoint, Session, Set<Viewpoint>, IProgressMonitor)</code>. These methods add a new parameter that is a set of viewpoints compared to the same methods without these parameters. These set contains all viewpoints that will be deactivated/activated in addition of the one that is asked to be deactivated/activated. It allows the callback implementation to better handle viewpoint dependencies interaction by being able to know if missing dependencies will be activated or deactivated.
+ </li>
+ <li><span class="label label-success">Added</span> An interface
+ <code>org.eclipse.sirius.ui.business.api.editor.ISiriusEditor</code> has been added to gather
+ <code>org.eclipse.sirius.ui.editor.SessionEditor</code> and
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectEditor</code> under the same abstraction. It allows to provide
+ <code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code> saving functionalities for session editor or any new editor that is not a dialect editor.
+ </li>
+ <li><span class="label label-success">Added</span> A method
+ <code>getSiriusEditors()</code> has been added to interface
+ <code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code>. It allows to retrieve all
+ <code>org.eclipse.sirius.ui.business.api.editor.ISiriusEditor</code> that are registered in the session.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.refreshEditor(DialectEditor, IProgressMonitor)</code> has been added to allow specifiers to do a full refresh of its dialect editor easily.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getDefaultFontWithRuntimeSizeAndFromLabelFormat(List<FontFormat>)</code> has been added to allow to retrieve a font using the given format and the default Sirius font (arial) and the runtime height.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getFontFromNameAndLabelFormatAndWithDefaultSize(List<FontFormat>, String)</code> has been added to allow to retrieve a font using the given format and the given font name and the runtime height.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.wizards.page.ViewpointsSelectionWizardPage.setBrowserMinWidth(int)</code> has been added to allow modification of the minimum width (with default value “0”) of the browser part of the viewpoint selection wizard.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.wizards.page.ViewpointsSelectionWizardPage.setColumnWidthEquality(boolean)</code> has been added to allow modification of column width equality (with default value “false”) of the root composite of the viewpoint selection wizard.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getDefaultFontWithRuntimeSizeAndFromLabelFormat(List<FontFormat>)</code> has been added to allow to retrieve a font using the given format and the default Sirius font (arial) and the runtime height.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getFontFromNameAndLabelFormatAndWithDefaultSize(List<FontFormat>, String)</code> has been added to allow to retrieve a font using the given format and the given font name and the runtime height.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.dialogs.AbstractExportRepresentationsAsImagesDialog.isExportDecorations()</code> has been added to know if decorations are displayed in the exported image.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.export(DRepresentation, Session, IPath, ExportFormat, IProgressMonitor, boolean)</code> method has been added. Compared to the previous method signature, the boolean parameter
+ <code>exportDecorations</code> has been added to allow to choose if the diagram element decorations will be exported or not.
+ </li>
+ <li><span class="label label-info">Modified</span> The boolean parameter
+ <code>exportDecorations</code> has been added to
+ <code>org.eclipse.sirius.ui.tools.api.actions.export.ExportAction.ExportAction(Session, Collection<DRepresentation>, IPath, ImageFileFormat, boolean, boolean)</code> constructor. It allows to choose if the diagram element decorations will be exported or not.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>attachEditor(DialectEditor)</code> from the interface
+ <code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code> has its parameter type modified from
+ <code>DialectEditor</code> to the new abstraction
+ <code>ISiriusEditor</code> to provide saving capabilities with other editors than the dialect ones.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>detachEditor(DialectEditor)</code> from the interface
+ <code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code> has its parameter type modified from
+ <code>DialectEditor</code> to the new abstraction
+ <code>ISiriusEditor</code> to provide saving capabilities with other editors than the dialect ones.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>detachEditor(DialectEditor, boolean)</code> from the interface
+ <code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code> has its first parameter type modified from
+ <code>DialectEditor</code> to the new abstraction
+ <code>ISiriusEditor</code> to provide saving capabilities with other editors than the dialect ones.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.assist.TextContentProposalProvider.getContentContext(String, int)</code> has been made protected instead of private to allow to use it for sub types.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.assist.TextContentProposalProvider.removeDuplicatedProposals(List<ContentProposal>)</code> has been made protected instead of private to allow to use it in sub types.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.createLocalRepresentationsFile(IProject, IProgressMonitor)</code> has its return type changed from
+ <code>void</code> to
+ <code>Session</code> to allow callers to have access to the newly created session directly.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.views.ViewHelper.getContentProvider()</code> has been renamed into
+ <code>createContentProvider()</code> and now returns a new instance on each invocation.
+ </li>
+ <li><span class="label label-danger">Removed</span> The old
+ <em>Model Request Interpreter</em> view is not available anymore. It is superseded by the
+ <em>Interpreter</em> view, which comes from the Acceleo project but does not actually depend on Acceleo or AQL and can be installed separately (using the feature
+ <code>org.eclipse.acceleo.ui.interpreter</code>, which is available directly from the Sirius update-sites). The corresponding interface
+ <code>org.eclipse.sirius.ui.tools.api.views.interpreterview.InterpreterView</code> has been removed. Technically, the implementation code for the old
+ <em>Model Request Interpreter</em> view is still present if needed during the transition, but not exposed or used anywhere. It will be removed in a future version.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in
+ <code>org.eclipse.sirius.diagram</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The utility class
+ <code>org.eclipse.sirius.diagram.business.api.helper.decoration.DecorationHelper</code> has been added. It provides
+ <code>updateDecorations(List<Layer>)</code> and
+ <code>updateAllDecorations</code> methods that allow to update only decorations in a diagram.
+ </li>
+ <li><span class="label label-info">Moved</span> The method
+ <code>org.eclipse.sirius.diagram.business.api.refresh.IRefreshOverride.aroundRefresh(DDiagram)</code> has been moved to
+ <code>org.eclipse.sirius.diagram.business.api.refresh.IRefreshExtension</code> to unify methods handling refresh extension under one interface.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.diagram.business.api.refresh.IRefreshExtension.aroundRefresh(DDiagram)</code> has been modified with a default behavior that is the one before introduction of the method to avoid breaking compatibility.
+ </li>
+ <li><span class="label label-danger">Removed</span> The interface
+ <code>org.eclipse.sirius.diagram.business.api.refresh.IRefreshOverride</code> has been removed because its only method has been moved into
+ <code>org.eclipse.sirius.diagram.business.api.refresh.IRefreshExtension</code> interface
+ </li>
+ <li><span class="label label-danger">Removed</span> The
+ <code>org.eclipse.sirius.diagram.business.internal.dialect.identifier</code> package and all its content (
+ <code>DiagramIdenttifier</code>,
+ <code>NodeIdentifier</code>,
+ <code>EdgeIdentifier</code>,
+ <code>NodeContainerIdentifier</code>, and
+ <code>NodeStyleIdentifier</code>) have been removed.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> Constants
+ <code>org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery.SPECIFIC_STYLES</code> &
+ <code>org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery.VERTICAL_ALIGNMENT</code> have been added to retrieve the initial label alignment of Notes from the Palette (see
+ <a href="Release_Notes.html#UserVisibleChanges">user-visible changes</a> ). Currently the vertical alignment can not be changed (potential new feature later).
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.diagram.ui.graphical.edit.policies.SiriusDecoratorEditPolicy</code> has been added to improve the behavior of decorator selection.
+ </li>
+ <li><span class="label label-success">Added</span> A new decoration mechanism has been implemented. Now, Sirius uses a single
+ <code>IDecorator</code> to decorate EditPart in diagram. That allows Sirius to manage the relative positioning between decorations.
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.decoration.SiriusDecorationDescriptorProvider</code> represents a provider able to give the decoration descriptors.
+ <code>org.eclipse.sirius.diagram.ui.tools.api.decoration.AbstractSiriusDecorationDescriptorProvider</code> is an abstract class that can be inherited to implement
+ <code>SiriusDecorationDescriptorProvider</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.decoration.DecorationDescriptor</code> is a simple POJO that contains information needed to display decoration.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.decoration.SiriusDecorationProviderRegistry</code> allows to register and get
+ <code>SiriusDecorationDescriptorProvider</code>.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span> The preference
+ <code>SiriusDiagramUiPreferencesKeys.PREF_AUTHORIZE_DECORATION_OVERLAP</code> has been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>. If true, the overlap is authorized between decoration group on diagram element.
+ <ul>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin.Implementation.DynamicDiagramUIPreferences</code> and the method
+ <code>org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin.Implementation.getDynamicPreferences()</code> have been added to have good performances in getting the preference value.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-info">Modified</span> The preference
+ <code>SiriusDiagramUiPreferencesKeys.PREF_PRINT_DECORATION</code> has been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>. If true, the decorations of the diagram elements of a diagram will be printed, when printing a diagram.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService.DiagramEditPartService</code> class which can be used to export diagrams as images is now automatically adapting the output resolution for raster image based on maximum buffer size specified through the
+ <code>plugin.propeties</code> file of the
+ <code>org.eclipse.sirius.diagram.ui</code> plugin. This leads to a noticeable increase of the export image size (you can expect a 10 factor on small diagrams) and the method will no longer fail with OutOfMemory errors as bigger diagrams will lead to a lower output resolution. Implementers using this class can override the
+ <code>DiagramEditPartService.getMaximumTotalSize()</code> method to return their own limit or
+ <code>DiagramEditPartService.getExportResolutionFactor(DiagramEditPart, SiriusDiagramImageGenerator)</code> and return
+ <code>1.0</code> to get back to the previous behavior.
+ </li>
+ <li><span class="label label-info">Moved</span> The methods of interface
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> that are
+ <code>getFormatData(FormatDataKey, RepresentationElementMapping)</code> and
+ <code>addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> have been moved into the interface
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> to reduce interface numbers for less complexity.
+ </li>
+ <li><span class="label label-info">Moved</span> The methods of interface
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> that are
+ <code>getFormatData(FormatDataKey, RepresentationElementMapping)</code> and
+ <code>addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> have been moved into the interface
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> to reduce interface numbers for less complexity.
+ </li>
+ <li><span class="label label-danger">Removed</span> The methods
+ <code>getFormatData(FormatDataKey key)</code> and
+ <code>addFormatData(FormatDataKey key, AbstractFormatData formatData)</code> have been removed from interface
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> because they were deprecated.
+ </li>
+ <li><span class="label label-danger">Removed</span> The interface
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> has been removed because all its methods have been moved into interface
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code>
+ <ul>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.decoration.AbstractSiriusDecorator</code> is removed because now useless.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-danger">Removed</span> The methods
+ <code>getFormatData(FormatDataKey key)</code> and
+ <code>addFormatData(FormatDataKey key, AbstractFormatData formatData)</code> have been removed from interface
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> because they were deprecated.
+ </li>
+ <li><span class="label label-danger">Removed</span> The interface
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> has been removed because all its methods have been moved into interface
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code>
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.table">Changes in
+ <code>org.eclipse.sirius.table</code>
+ </h4>
+ <ul>
+ <li><span class="label label-danger">Removed</span> The
+ <code>DTableElementSynchronizer</code>
+ <em>EClass</em> has been removed from the table meta-model. It only defined
+ <em>EOperations</em> and has been replaced with an equivalent (internal) plain Java class.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tree.ui">Changes in
+ <code>org.eclipse.sirius.tree.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The enum class for Sirius tree preferences
+ <code>org.eclipse.sirius.tree.ui.tools.api.preferences.SiriusTreeUiPreferencesKeys</code> has been added with the enum value
+ <code>SiriusTreeUiPreferencesKeys.PREF_ALWAYS_USE_STANDARD_FONT_SIZE</code>. This enum value is the preference when true allowing to use runtime font height when displaying Sirius tree editor’s items instead of the one specified in the VSM.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui.editor2">Changes in
+ <code>org.eclipse.sirius.ui.editor</code>
+ </h4>
+ <p>This plugin is new in Sirius 5.0. It provides a session editor showing loaded models, representations and viewpoint activation status of the session. It has functionalities allowing to change the viewpoint activation status, to create/remove representations or to load unload external models. The graphical block showing loaded models is integrated with CNF. You can provide content extension to its viewer by using an id matching the pattern
+ <code>org.eclipse.sirius.ui.editor.graphicalcomponents.semanticModelsViewer.contentExtension.*</code>. You also can provide action extension by using an id matching the pattern
+ <code>org.eclipse.sirius.ui.editor.graphicalcomponents.semanticModelsViewer.actionExtension.*</code>. The extension will be selectable/unselectable by using a
+ <code>Customize View</code> button on the models block header.
+ </p>
+ <h4 id="Changesinorg.eclipse.sirius.properties.core">Changes in
+ <code>org.eclipse.sirius.properties.core</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.properties.core.internal.converter.ViewDescriptionConverter</code> has been moved as an API to
+ <code>org.eclipse.sirius.properties.core.api.ViewDescriptionConverter</code>.
+ </li>
+ <li><span class="label label-success">Added</span> The classes necessary to support the preprocessing of the odesign for the inheritance in its Properties parts are available in the API package
+ <code>org.eclipse.sirius.properties.core.api</code>.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.properties.core.internal.SiriusInterpreter</code> has been moved as an API to
+ <code>org.eclipse.sirius.properties.core.api.SiriusInterpreter</code>. This class could be used by those who want to create custom model operations using the Properties framework.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.properties.core.api.SiriusDomainClassTester</code> has been added as an API for those who want to create custom model operations using the Properties framework.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices.createInstance(EClass)</code> has been added to allow the creation of a new instance from an EClass in the interpreters.
+ </li>
+ <li><span class="label label-info">Modified</span> The default rules have been transfered to a new dedicated plugin named
+ <code>org.eclipse.sirius.properties.defaultrules</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui.properties">Changes in
+ <code>org.eclipse.sirius.ui.properties</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span> All the content related to the IDescriptionConverter and ILinkResolver has been moved from the plugin
+ <code>org.eclipse.sirius.ui.properties</code> to the newly created plugin
+ <code>org.eclipse.sirius.properties.core</code>. It includes all the APIs and both extension points.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.editor.properties">Changes in
+ <code>org.eclipse.sirius.editor.properties</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span> In the package
+ <code>org.eclipse.sirius.editor.properties.sections.description.representationdescription</code> the class
+ <code>RepresentationDescriptionMetamodelsUpdater</code> has been replaced by
+ <code>DescriptionMetamodelsUpdater</code> which can now be used with any EObject with a many-valued EReference to EPackages. The behavior of the class
+ <code>RepresentationDescriptionMetamodelPropertySectionSpec</code> has been transfered to an abstract class independent of
+ <code>RepresentationDescription</code> named
+ <code>AbstractMetamodelPropertySectionSpec</code>. Those classes are now used for the edition of the metamodels of both the Properties view description and the various representations.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in
+ <code>org.eclipse.sirius.tests.junit.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The utility method
+ <code>org.eclipse.sirius.tests.support.api.TestsUtil.setTargetPlatform()</code> has been added to allow to load a PDE target platform according to all known OSGi bundles. It is useful to compile a plug-in in the execution runtime of the tests.
+ </li>
+ <li><span class="label label-success">Added</span> The utility class
+ <code>org.eclipse.sirius.tests.support.api.OpenedSessionsCondition</code> has been extracted from a junit test to be used by multiple junit tests. It allows to wait until a session is in opened state.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support">Changes in
+ <code>org.eclipse.sirius.tests.swtbot.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>getTreeItem(SWTBotTreeItem[], String, boolean, boolean)</code> has been added in
+ <code>org.eclipse.sirius.tests.swtbot.support.utils</code> to retrieve recursively a
+ <code>SWTBotTreeItem</code> in a
+ <code>SWTBotTreeItem</code> array. Compared to
+ <code>getTreeItem(SWTBotTreeItem[], String)</code>, it adds the capability to control if the search must be done on enabled items or enabled and disabled items and if the tree must be expanded during the search to check non displayed items.
+ </li>
+ <li><span class="label label-success">Added</span> A new utility method
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.dragCentered(String, Class<? extends EditPart>, int, int)</code> improving the dragCentered method by adding the aimed Class in parameter.
+ </li>
+ <li><span class="label label-info">Modified</span> A new AtomicBoolean parameter has been added to the utility method
+ <code>mouseDragWithKey(int, int, int, int, int)</code> in classes
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor</code>,
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer</code> and
+ <code>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas</code>. This allows to correctly wait the end of the drag’n’drop.
+ <ul>
+ <li>Sample of code to use:</li>
+ </ul>
+ </li>
+ </ul>
+ <pre>final AtomicBoolean dragFinished = new AtomicBoolean(false);
+editor.dragWithKey(start.x, start.y, endpoint.x, endpoint.y, SWT.F3, dragFinished);
+// Wait that the drag is done (the async Runnable simulating the
+// drag)
+bot.waitUntil(new ICondition() {
+ @Override
+ public boolean test() throws Exception {
+ return dragFinished.get();
+ }
+
+ @Override
+ public void init(SWTBot bot) {
+ }
+
+ @Override
+ public String getFailureMessage() {
+ return "The drag'n'drop operation has not finished.";
+ }
+});
+// Wait that the figures are redrawn. In a fast environment, figures
+// are not really redrawn and the rest of the test is not reliable.
+SWTBotUtils.waitAllUiEvents();
+
+
+</pre>
+ <h2 id="sirius4.1.2">Changes in Sirius 4.1.2</h2>
+ <h3 id="UserVisibleChanges4">User-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> A new preference named
+ <em>Maximum size of tabs name</em> is available in the Sirius Properties View preference page. This preference is used to shorten the tabs names when the default rules are used to render the properties view.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="./images/PreferencePageMaxTabName.png"/>
+ </p>
+ <h3 id="DeveloperVisibleChanges4">Developer-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> class has been added to handle copy/paste format with mapping information when an element target of a format pasting has many source diagram format corresponding to its key. In this case, we use the mapping information to get the more precise data format. And if no result matched, then we return the first found by using the key.
+ </li>
+ </ul>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.getFormatData(FormatDataKey, RepresentationElementMapping)</code> method has been added to retrieve during format pasting the data format corresponding to the given key and mapping when more than one result correspond to the key. If no result matches the mapping, then the first result found by using the key is returned.
+ </li>
+ </ul>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> method has been added to allow data format manager to register data format with mapping information when copying format.
+ </li>
+ </ul>
+ <ul>
+ <li><span class="label label-success">Deprecated</span></li>
+ </ul>
+ <p>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager.getFormatData(FormatDataKey)</code> It is replaced by
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.getFormatData(FormatDataKey, RepresentationElementMapping)</code> to better handle copy/paste format cases.
+ </p>
+ <ul>
+ <li><span class="label label-success">Deprecated</span></li>
+ </ul>
+ <p>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager.addFormatData(FormatDataKey, AbstractFormatData)</code> It is replaced by
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> to better handle copy/paste format cases.
+ </p>
+ <h2 id="sirius4.1.1">Changes in Sirius 4.1.1</h2>
+ <h3 id="UserVisibleChanges5">User-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-info">Modified</span>The “straighten to” actions were previously disabled when an edge is connected to border nodes that have several edges. It is now allowed.</li>
+ </ul>
+ <h3 id="DeveloperVisibleChanges5">Developer-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.table.business.api.helper.TableHelper.getEStructuralFeature(DLine, DColumn)</code> method has been added to retrieve the EStructuralFeature associated to a table column.
+ </li>
+ </ul>
+ <h2 id="sirius4.1.0">Changes in Sirius 4.1.0</h2>
+ <h3 id="UserVisibleChanges6">User-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> Copy/Paste Layout has been completed with Copy/Paste Style and Copy/Paste Format.
+ <em>Paste Format</em> is equivalent to paste
+ <em>Layout</em> and
+ <em>Style</em> action. See chapter
+ <a href="./user/diagrams/Diagrams.html#copy_paste_format">
+ <em>Copy/paste of format</em>
+ </a> in
+ <em>User Manual</em> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> The
+ <a href="./user/diagrams/Diagrams.html#snap_to_shapes">snap to shape</a> feature is now available on border nodes.
+ </li>
+ <li><span class="label label-success">Added</span> It is now possible to display an attachment link between an edge and its labels when label or edge is selected. This is not the default behavior but it can be activated by a preference in
+ <em>Sirius/Sirius Diagram/Connections</em> preference page. See chapter
+ <a href="./user/diagrams/Diagrams.html#edge_label_attachment">
+ <em>Display attachment link between edge and its labels</em>
+ </a> in
+ <em>User Manual</em> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> It is now possible to straighten an edge to top, bottom, left or right. These actions are available on edge contextual menu
+ <em>Layout/Straighten</em>. See chapter
+ <a href="./user/diagrams/Diagrams.html#straighten_an_edge">
+ <em>Straighten an edge</em>
+ </a> in
+ <em>User Manual</em> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> It is now possible to disable the
+ <em>Default</em> and
+ <em>Semantic</em> properties tabs (visible when selecting and element from the
+ <em>Model Explorer</em> or from a Sirius editor, respectively) when using modelers which provide fully-functional replacements defined directly with Sirius. This is controled in the new
+ <em>Sirius > Sirius Properties View</em> preference page.
+ </li>
+ <li><span class="label label-success">Added</span> Sirius-defined properties view are now enabled for semantic elements selected directly from inside the
+ <em>Model Explorer</em> (as long as the selected element is from inside an open Sirius session/project). Previously only elements selected from inside a Sirius editor were supported.
+ </li>
+ <li><span class="label label-info">Modified</span> In the Sirius-provided
+ <em>Properties View</em>, the edition of a text field is only taken into account when pressing
+ <em>Enter</em> or leaving the field. Previously it was triggered asynchronously after a small delay without activity, which could be confusing.
+ </li>
+ <li><span class="label label-info">Modified</span> When trying to open a session which holds a representation resource or a VSP which was saved using a more recent version of Sirius than the one you are using, the session will be automatically closed displaying an error message. You can overload this behavior by providing you own implementation of
+ <code>UICallBack</code> in which you can have an UI feedback letting you choose if you want to open the session anyway. Warning: if you choose to proceed, there is no guarantee that the resulting session will be usable. It may even lead to data loss or corruption; use at your own risk.
+ </li>
+ </ul>
+ <p>If a viewpoint has been defined with a more recent version of Sirius than the one you are using, the
+ <code>ViewpointRegistry</code> will not register it and a warning is logged in the error log view to inform the user.
+ </p>
+ <ul>
+ <li><span class="label label-info">Modified</span> The
+ <a href="./user/diagrams/Diagrams.html#move_edge_group">move edge group</a> feature now also work for a selection of edge group.
+ </li>
+ <li><span class="label label-info">Modified</span> In a diagram editor, the zoom with mouse wheel is now zooming on mouse location instead of center of the editor. See
+ <a href="./user/diagrams/Diagrams.html#zooming_diagram_id">user documentation</a> .
+ </li>
+ <li><span class="label label-info">Modified</span> The direct edit on a Note or Text is now accessible by a slow double click like any other diagram element.</li>
+ <li><span class="label label-info">Modified</span> The shortcut
+ <em>Ctrl+&</em>, for
+ <a href="./user/diagrams/Diagrams.html#reset_origin">
+ <em>Reset Origin</em>
+ </a> action, has been replaced by
+ <em>Ctrl+HOME</em>.
+ </li>
+ </ul>
+ <h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> It is now possible to inline a copy of the default Properties Views model inside the VSM. This is a copy of the model Sirius would use if no
+ <em>Properties View Description</em> was specified. It can be used as a starting point for manual customization, or as a complement for elements for which you do not provide any custom rules.
+ </li>
+ <li><span class="label label-success">Added</span> In the definition of the Properties view, hyperlink and label widgets can now have widget actions.</li>
+ <li><span class="label label-success">Added</span> Hyperlink and label widgets now have a
+ <code>displayExpression</code>, if blank the result of the value expression will be used after a call to the method
+ <code>java.lang.Object#toString()</code>.
+ </li>
+ <li><span class="label label-success">Added</span> Hyperlink and label widgets now support optional associated actions (visible as buttons on the right of the widget).</li>
+ <li><span class="label label-success">Added</span> A new widget named List with the same behavior as the multiple reference widget.</li>
+ <li><span class="label label-success">Added</span>
+ <em>Page</em> and
+ <em>Group</em> descriptions in
+ <em>Properties View</em> models now support a
+ <code>preconditionExpression</code>, which behaves in the same way as preconditions for mappings on representation descriptions.
+ </li>
+ <li><span class="label label-info">Modified</span> The rules concerning the layout of compartments have been changed/completed. You can have a look at the
+ <a href="specifier/diagrams/Diagrams.html#compartments_layout">dedicated chapter</a> in the specifier documentation for more details.
+ </li>
+ <li><span class="label label-info">Modified</span> In the VSM editor, all dialogs which ask for selecting elements from the VSM will now show the fully qualified path of each element, instead of just their name, to allow distinguishing elements with the same name appearing in different places.</li>
+ <li><span class="label label-info">Modified</span> The properties
+ <code>fontSize</code> and
+ <code>labelFontSize</code> have been renamed into
+ <code>fontSizeExpression</code> and
+ <code>labelFontSizeExpression</code> since both of them were already treated as expression.
+ </li>
+ <li><span class="label label-info">Modified</span> In the VSM editor, the
+ <em>Identifier</em> attribute of many
+ <em>Prroperties View</em> related elements has been moved into the
+ <em>Advanced</em> tab and renamed
+ <em>Extension Id</em>, as it is not actually required on common use cases but only for extensibility purposes.
+ </li>
+ <li><span class="label label-info">Modified</span> The property
+ <code>Domain Class Expression</code> in
+ <code>DynamicMappingFor</code> elements (in properties views definitions) has been renamed into
+ <code>Iterable Expression</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <em>Properties View</em> widget which was named
+ <em>Reference</em> in Sirius 4.0 has been renamed as
+ <em>List</em>, as it corresponds to an arbitrary list of elements with customizable buttons for acting on them. A new
+ <em>Reference</em> widget was added for handling plain
+ <em>EReference</em> edition with minimal configuration needed.
+ </li>
+ <li><span class="label label-info">Modified</span> When opening a VSM, the editor now automatically expands the first few levels to immediatly reveal the interesting elements (representation descriptions).</li>
+ <li><span class="label label-warning">Deprecated</span> The extension point
+ <code>org.eclipse.sirius.diagram.ui.layoutDataManager</code> is deprecated. It is replaced by the new extension point
+ <code>org.eclipse.sirius.diagram.ui.formatDataManager</code>. The deprecated extension point will be removed in the next 5.0 Sirius major release. Several classes associated with this deprecated extension point are also deprecated (see Developer-Visible Changes for details).
+ </li>
+ </ul>
+ <h3 id="DeveloperVisibleChanges6">Developer-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> As the first step to save the DRepresentation in its own resource,
+ <code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()</code> has been added as a wrapper of the
+ <code>DRepresentation</code>. The
+ <code>DRepresentationDescriptor</code> is contained by the
+ <code>DView</code> and the
+ <code>DRepresentationDescriptor</code> have a reference to the
+ <code>DRepresentation</code>. In this step, the main impact is that the Sirius common navigator does not display the
+ <code>DRepresentation</code> anymore but the
+ <code>DRepresentationDescriptor</code> instead. All the actions and commands are then based on
+ <code>DRepresentationDescriptor</code>.
+ </li>
+ <li><span class="label label-success">Added</span> As the second step to save the DRepresentation in its own resource,
+ <code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentations()</code> has been removed. The
+ <code>DRepresentation</code> is now created as root element of the representations resource. The main impact is on the core of Sirius but also potentially on client Sirius customization. Each peace of code that makes the supposition that the
+ <code>DView</code> is the container of the
+ <code>DRepresentation</code> must be reworked. The code using methods in the following list may be concerned by the rework:
+ <ul>
+ <li>
+ <code>EObject.eContainer()</code>. If the object is a
+ <code>DRepresentation</code>, its container is now null.
+ </li>
+ <li>
+ <code>EcoreUtil.getRootContainer(xxx)</code>. The root container of a DDiagramElement is the
+ <code>DRepresentation</code> and not the
+ <code>DAnalysis</code> any more.
+ </li>
+ <li>
+ <code>EcoreUtil.isAncestor(xxx)</code>. the
+ <code>DView</code> is not an ancestor of a
+ <code>DRepresentation</code> (or its content) anymore.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span> As a developer, the followings utility methods will help you to migrate your code following the second step described above:
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.business.api.query.DViewQuery.getLoadedRepresentations()</code> replaces the removed
+ <code>DView.getOwnedRepresentations()</code> method. It provides all the loaded representations holds by a
+ <code>DView</code>. In this step, all that representations are always loaded as they are into the .aird resource.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.query.DViewQuery.getAllContentInRepresentations(final Predicate<? super EObject>)</code> provides the content of a
+ <code>DView</code> according to a predicate.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()</code> provides the
+ <code>DRepresentationDescriptor</code> which references the
+ <code>DRepresentation</code>.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()</code> allows to retrieve a DAnalysis from a
+ <code>DRepresentationElement</code>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius4">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> A new extension point named
+ <code>org.eclipse.sirius.interpretedExpressionQueryProvider</code> (with the associated new interface
+ <code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionQueryProvider</code>) allows external contribution of
+ <code>IInterpretedExpressionQuery</code> specific to some particular expression occurrences in the VSM. This is used in particular for VSM extensions which do not fit well into the hard-coded assumptions about
+ <code>IInterpretedExpressionQuery</code>. In Sirius 4.1, this is used to add completion and validation support for expressions used in properties views descriptions.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.migration.AirdResourceVersionMismatchException</code> exception has been added to cancel Sirius session opening due to an .aird version mismatch, i.e. when one the of the loaded Representation resources is coming from a newer Sirius release.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()</code> has been added as the first step to save the DRepresentation in its own resource. In this step, the DRepresentationDescriptor life cycle is the same as the associated DRepresentation.
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.business.api.dialect.command.RenameRepresentationCommand</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.dialect.command.DeleteRepresentationCommand</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.dialect.command.CopyRepresentationCommand</code>
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>getAvailableRepresentationDescriptions(Collection<Viewpoint>, EObject)</code>,
+ <code>getAllRepresentationDescriptors(Session )</code>,
+ <code>getRepresentationDescriptors(EObject, Session)</code> and
+ <code>getRepresentationDescriptors(RepresentationDescription, Session )</code> have been added in
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices</code> and implemented in
+ <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices</code>. These methods are used, instead of their equivalent with DRepresentation, for every functionality which relies on
+ <code>DRepresentationDescriptor</code> instead of
+ <code>DRepresentation</code> such as actions, wizards or views.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isSupported(DRepresentationDescriptor)</code> has been added because actions, wizards or views that were related to
+ <code>DRepresentation</code> are now related to
+ <code>DRepresentationDescriptor</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.canHandle(DRepresentationDescriptor)</code> has been added because actions, wizards or views that were related to
+ <code>DRepresentation</code> are now related to
+ <code>DRepresentationDescriptor</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIManager.canExport(DRepresentationDescriptor, ExportFormat)</code> has been added because actions, wizards or views that were related to
+ <code>DRepresentation</code> are now related to
+ <code>DRepresentationDescriptor</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()</code> has been added to retrieve the
+ <code>DRepresentationDescriptor</code> that references the
+ <code>DRepresentation</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR_FROM_DESCRIPTION</code> and
+ <code>org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR</code> have been added. They are used to get or put
+ <code>DRepresentationDescriptor</code> in the model managed by the
+ <code>Session</code> through the
+ <code>org.eclipse.sirius.business.api.session.SessionService.putCustomData(String, EObject, EObject)</code> and
+ <code>SessionService.getCustomData(String, EObject)</code> methods.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()</code> has been added to retrieve a DAnalysis from a
+ <code>DRepresentationElement</code>
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code> has been changed to
+ <code>findDViewForRepresentationDescription(DAnalysis , final RepresentationDescription)</code> because that API was previously badly defined.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.deleteRepresentation(DRepresentation, Session)</code> has been changed to
+ <code>deleteRepresentation(DRepresentationDescriptor, Session)</code> because now the
+ <code>DRepresentationDescriptor</code> is the entry point to delete the
+ <code>DRepresentation</code> and itself.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>DRepresentationDescriptor</code> is now the entry point to move, control or uncontrol a
+ <code>DRepresentation</code> instead of the
+ <code>DRepresentation</code> itself. Accordingly, the return type or parameter of the followings have changed to switch from
+ <code>DRepresentation</code> to
+ <code>DRepresentationDescriptor</code>
+ <ul>
+ <li>constructors of
+ <code>org.eclipse.sirius.business.api.control.SiriusControlCommand</code>
+ </li>
+ <li>the constructor
+ <code>org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand.MoveRepresentationCommand(Session, DAnalysis, Collection<DRepresentationDescriptor>)</code>
+ </li>
+ <li>the method
+ <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSession.moveRepresentation(DAnalysis, DRepresentationDescriptor)</code>
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.updateModelsReferences(DView)</code> has replaced
+ <code>updateModelsReferences(DAnalysis, Iterator<DSemanticDecorator>)</code> because it is more suited to the client needs.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui4">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.ui.business.api.dialect.HierarchyLabelProvider</code> has been added to provide a generic label provider for VSM model element giving hierarchical label. This label provider replaces the one returned by deprecated method
+ <code>DialectUIServices.getHierarchyLabelProvider()</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>AbstractSWTCallback</code> provides a default implementation of
+ <code>UICallBack.askSessionReopeningWithResourceVersionMismatch()</code> method to give feedback about version mismatch and give the choice to reopen session despite a potential corruption.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.control.SiriusControlHandler.getRepresentationsToMove(Shell, Session, EObject)</code> and
+ <code>SiriusControlHandler.collectExistingRepresentations</code> have been renamed to
+ <code>getRepresentationDescriptorsToMove(Shell, Session, EObject)</code> and
+ <code>SiriusControlHandler.collectExistingRepresentationDescriptors</code>. The return type of both that methods and
+ <code>SiriusControlHandler.askUserWhichRepresentationToSplit</code> has been changed to
+ <code>DRepresentationDescriptor</code> as
+ <code>DRepresentationDescriptor</code> is the entry point to work with a
+ <code>DRepresentation</code> instead of DRepresentation itself.
+ </li>
+ <li><span class="label label-warning">Deprecated</span> The method
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.getHierarchyLabelProvider()</code> has been deprecated in favor of generic label provider
+ <code>HierarchyLabelProvider</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in
+ <code>org.eclipse.sirius.diagram</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.allowsCopyPasteFormat(DSemanticDecorator)</code> has been added in replacement of
+ <code>allowsCopyPasteLayout(DSemanticDecorator)</code> that is now deprecated. This 2 methods must return the same result.
+ <code>allowsCopyPasteLayout(DSemanticDecorator)</code> will be removed in the new major version.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The constant
+ <code>EDGE_SNAP_BACK</code> has been added in class
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>. It corresponds to the new snap back label action id that is present on edges.
+ </li>
+ <li><span class="label label-success">Added</span> 2 methods are added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager</code> (and also in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager</code>):
+ <ul>
+ <li>
+ <code>applyFormat(IGraphicalEditPart)</code>: Apply the current format data (layout data and style data) to the given edit part.
+ </li>
+ <li>
+ <code>applyStyle(IGraphicalEditPart)</code>: Apply the current style data to the give edit part.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span> 2 methods are added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code>:
+ <ul>
+ <li>
+ <code>createCopyFormatContribution(IDiagramWorkbenchPart)</code>: In replacement of
+ <code>createCopyLayoutContribution(IDiagramWorkbenchPart)</code> that is now deprecated.
+ </li>
+ <li>
+ <code>createPasteFormatContribution(IDiagramWorkbenchPart)</code>: In replacement of
+ <code>createPasteLayoutContribution(IDiagramWorkbenchPart)</code> that is now deprecated.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span> New action ids have been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>:
+ <ul>
+ <li>
+ <code>COPY_FORMAT</code>: Action contribution id for the copy format. It replaces the old
+ <code>COPY_LAYOUT</code>.
+ </li>
+ <li>
+ <code>PASTE_FORMAT</code>: Action contribution id for the paste format. It does not replace the old
+ <code>PASTE_LAYOUT</code>. The paste format paste the layout and the style. The paste layout only paste layout.
+ </li>
+ <li>
+ <code>PASTE_STYLE</code>: Action contribution id for the paste style.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.business.api.query.NodeQuery.isDescendantOf(View)</code> has been added to know if a view is a descendant of another view.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery.getAncestor(int...)</code> has been added to retrieve the first ancestor of the view, or itself, that has at least one of the visualID passed as parameter.
+ </li>
+ <li><span class="label label-success">Added</span> The new preference key
+ <code>PREF_SHOW_LINK_EDGE_LABEL_ON_SELECTION</code> has been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>. It corresponds to the preference shown in
+ <em>Sirius/Sirius Diagram/Connections</em> Eclipse preferences.
+ </li>
+ <li><span class="label label-success">Added</span> The new figure
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SiriusWrapLabelWithAttachment</code> is a specific
+ <code>SiriusWrapLabel</code> that allows to show an attachment between the label and its edge.
+ </li>
+ <li><span class="label label-success">Added</span> A new kind of request,
+ <code>org.eclipse.sirius.diagram.ui.tools.api.requests.StraightenToRequest</code>, has been added to handle the new
+ <em>Straighten to</em> actions. The corresponding id has also been added:
+ <code>org.eclipse.sirius.diagram.ui.tools.api.requests.RequestConstants.REQ_STRAIGHTEN</code>.
+ </li>
+ <li><span class="label label-success">Added</span> 4 action ids have been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>:
+ <ul>
+ <li>
+ <code>STRAIGHTEN_TO_TOP</code>: For
+ <em>Straighten to top</em> action,
+ </li>
+ <li>
+ <code>STRAIGHTEN_TO_BOTTOM</code>: For
+ <em>Straighten to bottom</em> action,
+ </li>
+ <li>
+ <code>STRAIGHTEN_TO_LEFT</code>: For
+ <em>Straighten to left</em> action,
+ </li>
+ <li>
+ <code>STRAIGHTEN_TO_RIGHT</code>: For
+ <em>Straighten to right</em> action.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span> Constants have been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath</code> for the icon path of the four new straighten actions.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager</code> is deprecated, use
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.AbstractSiriusFormatDataManager</code> instead.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.ILayoutDataManagerProvider</code> is deprecated, use
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.IFormatDataManagerProvider</code> instead.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataHelper</code> is deprecated, use
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataHelper</code> instead.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataKey</code> is deprecated, use
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataKey</code> instead.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager</code> is deprecated, use
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> instead.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManagerForSemanticElementsFactory</code> is deprecated, use
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerForSemanticElementsFactory</code> instead.
+ </li>
+ <li><span class="label label-info">Moved</span> The translation key
+ <code>HierarchyLabelProvider_elementWihtoutNameLabel</code> has been removed from the
+ <code>org.eclipse.sirius.diagram.ui</code> plug-in’s
+ <code>Messages</code> class, and moved into the
+ <code>org.eclipse.sirius.ui</code>'s
+ <code>Messages</code> class.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime">Changes in
+ <code>org.eclipse.sirius.ext.gmf.runtime</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The class
+ <code>SiriusSnapFeedbackPolicy</code> has been copied from
+ <code>org.eclipse.sirius.ext.gef.editpolicies</code> to
+ <code>org.eclipse.sirius.ext.gmf.runtime.editpolicies</code>. The old class in plug-in
+ <code>org.eclipse.sirius.ext.gef</code> is deprecated and will be removed in the next version.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support3">Changes in
+ <code>org.eclipse.sirius.tests.junit.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The utility methods
+ <code>getRepresentationDescriptors(final String)</code>,
+ <code>getRepresentationDescriptors(final String , final Session )</code> and
+ <code>getRepresentationDescriptorFromRepresentation(DRepresentation)</code> have been added in class
+ <code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> to adapt tests considering the
+ <code>DView.ownedRepresentationDescriptors</code> addition.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support2">Changes in
+ <code>org.eclipse.sirius.tests.swtbot.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The utility method
+ <code>mouseScrollWithKey(int, int, int, int)</code>, has been added in classes
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor</code>,
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer</code> and
+ <code>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas</code> to allow testing events occurring after a mouse scroll combined to a keyboard key pressed at a given absolute position.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.properties">Changes in
+ <code>org.eclipse.sirius.properties</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span> The property
+ <code>domainClassExpression</code> has been renamed into
+ <code>iterableExpression</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The properties
+ <code>fontSize</code> and
+ <code>labelFontSize</code> have been renamed into
+ <code>fontSizeExpression</code> and
+ <code>labelFontSizeExpression</code> since both of them were already treated as expression.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui.properties2">Changes in
+ <code>org.eclipse.sirius.ui.properties</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> Four utility classes have been added as API in the package
+ <code>org.eclipse.sirius.ui.properties.api</code> in order to help with the transformation of the description of custom widgets. The class
+ <code>AbstractDescriptionConverter</code> can now be used as superclass for all the converters. The classes
+ <code>DefautDescriptionConverter</code>,
+ <code>DefautStyleDescriptionConverter</code> and
+ <code>DefautDescriptionWithInitialOperationConverter</code>, now accessible, should handle most of the use cases.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ecore.extender">Changes in
+ <code>org.eclipse.sirius.ecore.extender</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span> The message
+ <code>org.eclipse.sirius.ecore.extender.business.api.permission.exception.LockedInstanceException.PERMISSION_ISSUE_MESSAGE</code> has been modified. You should now use the
+ <code>MessageFormat</code>. Example:
+ <code>LockedInstanceException.PERMISSION_ISSUE_MESSAGE + getText(lockedElements)</code> must be replaced by
+ <code>MessageFormat.format(LockedInstanceException.PERMISSION_ISSUE_MESSAGE, getText(lockedElements))</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessorsRegistry</code> has been refactored to avoid problem with
+ <code>ModelAccessor</code> lifecycle. The constructor has no longer a parameter.
+ </li>
+ </ul>
+ <h2 id="sirius4.0.0">Changes in Sirius 4.0.0</h2>
+ <h3 id="UserVisibleChanges7">User-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> The user can now filter elements according to a Typed variable (String, Integer, EEnum or any EDataType). If a user applies a filter containing Typed Variables, a dialog is displayed to allow user entering the Typed Variable values. That values can be used as variables in the Condition Expression of the Variable Filter.</li>
+ <li><span class="label label-success">Added</span> When the diagram is larger than the editor, you can move it in all directions pressing the middle-button and dragging the mouse (keeping the button pressed).</li>
+ <li><span class="label label-info">Modified</span> Now if an object is locked and cannot be modified according to
+ <code>IPermissionAuthority</code>, the properties view will not be editable if this locked object is selected from the Model Explorer view.
+ </li>
+ <li><span class="label label-info">Modified</span> When trying to reconnect an edge end on another edge, the edge is now highlighted only if a reconnect tool is found (the precondition of the tool is not tested here).</li>
+ <li><span class="label label-info">Modified</span> List items now have the same margin whichever their parent is a simple list or a compartmentalized list. The margin in compartmentalized list was incorrectly set to 0 pixel.</li>
+ <li><span class="label label-info">Modified</span> The wizard to ask the new representation name has been changed. These concerns the title of the wizard and the input label. Example with a new Entities diagram for EcoreTools:</li>
+ </ul>
+ <p>
+ <img border="0" src="images/representationNameWizardChange.png"/>
+ </p>
+ <ul>
+ <li><span class="label label-info">Modified</span> The export of diagram as image handles the gradient color for container background for BMP, JPG, PNG and SVG formats. Before, it only works for JPG format.</li>
+ <li><span class="label label-info">Modified</span> The <img src="images/ApplyAppearanceProperties.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>
+ <code>Apply Appearance Properties</code> action has been modified to use the last selected element as base style instead of the first one.
+ </li>
+ </ul>
+ <h3 id="SpecifierVisibleChanges4">Specifier-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> Sirius 4.0 introduces
+ <strong>experimental</strong> support for specifying the properties views of your modelers directly from inside the VSM. This feature uses the same dynamic approach as for specifying diagrams, tables and trees, with a very flexible configuration language and no code generation involved (including live preview of any change). As of Sirius 4.0, this feature should be considered in an experimental state with details subject to changes until Sirius 4.1, and is not installed by default. To install it, make sure either
+ <a href="http://download.eclipse.org/releases/neon">the Eclipse Neon repositry</a> or the
+ <a href="http://download.eclipse.org/sirius/updates/releases/4.0.0/neon">Sirius 4.0</a> and
+ <a href="http://download.eclipse.org/modeling/emft/eef/updates/releases/1.6.0">EEF 1.6</a> repositories are available, and then to install the following features (from in the
+ <em>Modeling</em> category of Neon, or
+ <em>Sirius Experimental Features</em> of the Sirius repository ):
+ <ul>
+ <li>
+ <em>Sirius Properties Views – Runtime Support</em> (
+ <code>org.eclipse.sirius.properties.feature.feature.group</code>): needed at runtime for deployed modelers which have properties views defined in their specification.
+ </li>
+ <li>
+ <em>Sirius Properties Views – Specifier Support</em> (
+ <code>org.eclipse.sirius.specifier.properties.feature.feature.group</code>): provides support for editing the configuration model directly inside the VSM editor and the specifier documentation.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>Once this is done, you can find the actual documentation in the
+ <em>Sirius Specifier Manual</em>, under the
+ <a href="specifier/properties/Properties_View_Description.html">
+ <em>Properties View</em>
+ </a> section.
+ </p>
+ <ul>
+ <li><span class="label label-success">Added</span> All static strings defined in the VSMs which are visible to the end-user of the modeler, like viewpoint and tools names, can now be internationalized. Simply replace the name with a translation key reference of the form
+ <code>%myUniqueKey</code> in the VSM, and define the value in the
+ <em>Viewpoint Specification Project</em>'s
+ <code>plugin.properties</code> (for the default value), or
+ <code>plugin_XX.properties</code> for locale
+ <code>XX</code>. The underlying mechanism is the same as for Eclipse/OSGi plug-ins, so translations can even be contributed by physically separate plug-in fragments. See
+ <a href="specifier/general/Specifying_Viewpoints.html#translatable_messages">the corresponding section</a> in the documentation for more details.
+ </li>
+ <li><span class="label label-success">Added</span> It is possible to create
+ <a href="specifier/diagrams/Diagrams.html#filter_with_typed_variable">Typed Variable</a> under Variable Filter.
+ </li>
+ <li><span class="label label-success">Added</span> A new class
+ <code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices</code> (from plug-in
+ <code>org.eclipse.sirius.ext.emf.edit</code>) has been added with a complete set of service methods to leverage most of the features of the “EMF Edit” framework, for example the various
+ <em>Item Providers</em> associated to semantic elements. See
+ <a href="specifier/general/Writing_Queries.html#editing_domain_services">the documentation</a> for details.
+ </li>
+ <li><span class="label label-success">Added</span> The specifier can now restrict the border node authorized sides. This new option is available in the advanced tab of the border node style. See the
+ <a href="specifier/diagrams/Diagrams.html#authorizedsides">specifier documentation</a> for more details.
+ </li>
+ <li><span class="label label-info">Modified</span> The use of type literals in operations like
+ <code>filter()</code> or
+ <code>oclIsKindOf()</code> requires to explicitly add the domain meta-models plug-ins to the dependencies of the
+ <em>Viewpoint Specification Project</em>. The documentation has been modified to recommend this.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <strong>Warning</strong>: Before this version, a style customization of an
+ <code>EEnum</code> attribute, like
+ <code>labelFormat</code>, worked with a value expression using a Java service returning a
+ <code>EEnumLiteral</code>. It is now forbidden. You must return an
+ <code>Enumerator</code>. The documentation about
+ <a href="specifier/diagrams/Diagrams.html#enum_customization">Styles Customization</a> now details this case.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>BorderSizeComputationExpression</code> migration has been corrected to recursively handle the sub container mappings. VSM created or migrated with Sirius 3.1.0, 3.1.1 or 3.1.2 might require a manual modification for the style descriptions of sub container mappings with border size computation equals to 0 as we cannot determine if they were added (or updated) after or before the migration: starting with Sirius 3.1.0, no border will be displayed for a 0 pixel value whereas with older version container always had at least a 1 pixel border.
+ </li>
+ <li><span class="label label-info">Modified</span> The variable under VariableFilter, previously named “Variable”, is renamed to “Select Model Element Variable”. It is functionally equivalent.</li>
+ </ul>
+ <h3 id="DeveloperVisibleChanges7">Developer-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> It is now possible to provide a full customized tab-bar by implementing the
+ <code>ITabbarContributor</code> through the
+ <code>org.eclipse.sirius.diagram.ui.tabbarContributor</code> extension-point. See the
+ <a href="developer/extensions-provide_tabbar_extensions.html#contributeFullTabbar">developer documentation</a> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> It is now possible to provide new shapes for basic shape styles through the
+ <code>org.eclipse.sirius.diagram.bundledImageShape</code> extension-point. See the
+ <a href="developer/extensions-provide_custom_bundled_image_shape.html">developer documentation</a> for more details.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius5">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getStatus()</code> has been added to have the status about session opening, i.e. if it has been correctly opened, cancelled or an exception has occurred.
+ </li>
+ <li><span class="label label-success">Added</span> A new variant of
+ <code>org.eclipse.sirius.business.api.helper.task.TaskHelper.buildTaskFromModelOperation(EObject, ModelOperation)</code> has been added, which does not require to specify a
+ <code>DRepresentation</code> in the context. It allows the creation of a task which executes a behavior specified by
+ <code>ModelOperations</code> outside of the context of a specific representation, provided the
+ <code>ModelOperations</code> work in that context.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.viewpoint.description.TypedVariable</code> has been created.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code> has been created as tag interface for variables that require user interaction to be valued.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForTypedVariable(List<TypedVariable>, List<String>)</code> has been created.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tools.api.command.ui.NoUICallback.askForTypedVariable(List<TypedVariable>, List<String>)</code> has been created.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.getRequiredViewpoints(DRepresentation)</code> has been added to have mean to get required viewpoints to use a representation.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.getRequiredViewpoints(DRepresentation)</code> has been added to have a default implementation of
+ <code>DialectServices.getRequiredViewpoints(DRepresentation)</code> method.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isRelatedViewpointSelected(Session, RepresentationDescription)</code> protected method has been added to check if a
+ <code>RepresentationDescription</code> is usable in the context of the specified session.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String, String)</code> method has been added to replace the deprecated
+ <code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String)</code>. This method now uses the description name as title for the wizard. This new method has been implemented by
+ <code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback</code> and
+ <code>org.eclipse.sirius.tools.api.command.ui.NoUICallback</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.loadAndOpenRepresentationsFile(URI, boolean)</code> has been added to specify if job used to open a session must be considered as launched by the user or not, because by default with
+ <code>ModelingProjectManager.loadAndOpenRepresentationsFile(URI)</code> the job was not considered as launched by the user.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable</code> now implements
+ <code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.viewpoint.description.tool.AbstractVariable</code> has been moved to
+ <code>org.eclipse.sirius.viewpoint.description.AbstractVariable</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.viewpoint.description.tool.SubVariable</code> has been moved to
+ <code>org.eclipse.sirius.viewpoint.description.SubVariable</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.getMainRepresentationsFileURI()</code> methods no more update workspace resource about markers, now this must be done in caller on IllegalArgumentException catch in a workspace aware operation.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand.canExecute()</code> now returns false if a
+ <code>DRepresentation</code> cannot be refreshed, by calling
+ <code>DialectManager.canRefresh(DRepresentation)</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> Several methods of
+ <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper</code> now return a
+ <code>fr.obeo.dsl.viewpoint.DView</code> instead of a
+ <code>fr.obeo.dsl.viewpoint.DRepresentationContainer</code>: *
+ <code>findContainer(EObject, Viewpoint, Collection<DAnalysis>, DAnalysisSelector)</code>,
+ <ul>
+ <li>
+ <code>findContainerForAddedRepresentation(EObject, Viewpoint, Collection<DAnalysis>, DAnalysisSelector, DRepresentation)</code>,
+ </li>
+ <li>
+ <code>findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code>,
+ <code>findFreeContainer(Viewpoint, Collection<DAnalysis>, DAnalysisSelector)</code>
+ </li>
+ <li>
+ <code>findFreeContainer(Viewpoint, Collection<DAnalysis>, DAnalysisSelector)</code>.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-danger">Removed</span> The
+ <code>org.eclipse.sirius.viewpoint.DRepresentationContainer</code> EClass have been removed. It used to be the only implementation of
+ <code>org.eclipse.sirius.viewpoint.DView</code>, the
+ <code>models</code> derived transient reference has been moved to
+ <code>DView</code>. An automatic migration has been added during the loading of the representation to handle this change.
+ </li>
+ <li><span class="label label-danger">Removed</span> The class
+ <code>org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2</code> has been deleted and is now
+ <code>MetamodelDescriptorProvider</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common3">Changes in
+ <code>org.eclipse.sirius.common</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> A method
+ <code>getInferredVariableTypes(Boolean value)</code> in
+ <code>org.eclipse.sirius.common.tools.api.interpreter.ValidationResult</code> so that
+ <code>IInterpreter</code> implementations able to infer more specific types based on predicates result provides this information to Sirius which will then use it for validating other expressions. You might want to look at
+ <code>org.eclipse.sirius.common.acceleo.aql.business.internal.AQLSiriusInterpreter</code> which is an implementation providing this type inference.
+ </li>
+ <li><span class="label label-success">Added</span> A helper
+ <code>org.eclipse.sirius.common.tools.api.util.MessageTranslator</code> providing
+ <code>getMessage(EObject, String)</code> and
+ <code>getMessage(Bundle, String)</code> service dedicated into processing a translatable message to return the translation in the active language when available. This service returns the String without modification if not translatable or no translation is available.
+ </li>
+ <li><span class="label label-success">Added</span> The “INFO” severity has been added to
+ <code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterStatus</code> to reflect all kind of language validation severity (of AQL for example).
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram4">Changes in
+ <code>org.eclipse.sirius.diagram</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.VariableValue</code>,
+ <code>org.eclipse.sirius.diagram.TypedVariableValue</code> and
+ <code>org.eclipse.sirius.diagram.EObjectVariableValue</code> has been created.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()</code> has been created to indicate that variables have to be computed again.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.description.style.Side</code> EEnum has been added to define a border node side on the parent.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.description.style.NodeStyleDescription#forbiddenSides</code> attribute has been added to set the border node forbidden sides on the parent.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.business.api.query.DNodeQuery.getForbiddenSide()</code> has been added to retrieve the forbidden sides of a DNode (make sense only for Border Nodes).
+ </li>
+ <li><span class="label label-info">Modified</span> The type of
+ <code>org.eclipse.sirius.diagram.description.filter.VariableFilter.ownedVariable</code> has been changed to
+ <code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The type of
+ <code>org.eclipse.sirius.diagram.FilterVariableHistory.ownedValues</code> has been changed to
+ <code>org.eclipse.sirius.diagram.VariableValue</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The return type of
+ <code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil.findRepresentationContainer(DDiagram)</code> has been changed from
+ <code>org.eclipse.sirius.viewpoint.DRepresentationContainer</code> to
+ <code>org.eclipse.sirius.viewpoint.DView</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.diagram.description.filter.FilterVariable</code> has been removed. It is replaced by
+ <code>org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.setFilterContext()</code> has been removed. This method was, in part, useless and is replaced by
+ <code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui5">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback.askForTypedVariable(List<TypedVariable>, List<String>)</code> has been created.
+ </li>
+ <li><span class="label label-success">Added</span> The new internationalizable label
+ <code>Messages_createRepresentationInputDialog_DefaultRepresentationDescName</code> has been added (available through
+ <code>org.eclipse.sirius.ui.tools.api.Messages.createRepresentationInputDialog_DefaultRepresentationDescName</code>. Its value is “Representation”.
+ </li>
+ <li><span class="label label-info">Modified</span> The internationalizable label
+ <code>Messages_createRepresentationInputDialog_NewRepresentationNameLabel</code> has been replaced by “Name:” (previous value was “Representation name:”).
+ </li>
+ <li><span class="label label-info">Modified</span> The internationalizable label
+ <code>Messages_createRepresentationInputDialog_RepresentationDescriptionLabel</code> has been replaced by “Representation description: {0}” (previous value was “Representation description: ”).
+ </li>
+ <li><span class="label label-info">Modified</span> The internationalizable label
+ <code>Messages_createRepresentationInputDialog_Title</code> has been replaced by “New {0}” (previous value was “New Representation”).
+ </li>
+ <li><span class="label label-danger">Removed</span> The internationalizable label
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.OpenRepresentationsFileJob_initModelingProjectsTask</code> has been removed as this message is no more used.
+ </li>
+ <li><span class="label label-danger">Removed</span> The class
+ <code>org.eclipse.sirius.ui.business.api.editor.SpecificSessionManager</code> has been removed.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui5">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> A new system property named
+ <code>org.eclipse.sirius.diagram.ui.svg.maxCacheSizeMB</code> has been added. It can be used to tweak the maximum size (in megabytes) of pre-rendered SVG images to keep in cache. The default is 50, corresponding to 50MB of bitmaps of 4 8-bit channels. Increasing the limit can improve performance when using diagrams with a lot of SVG images, at the cost of increased memory usage.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.ITabbarContributor</code> interface has been added to provide a customized tab-bar for a specific selection.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code> is an abstract implementation of
+ <code>ITabbarContributor</code> that allows reusing one or several of the default Sirius contribution items.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.editor.properties.sections.style.bundledimagedescription.BundledImageDescriptionShapePropertySectionSpec</code> has been added to have a custom display in the VSM for provided basic shape.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramBorderNodeEditPart.createNodeFigure()</code> has been created to factorize the
+ <code>DNode2EditPart</code> and
+ <code>DNode4EditPart</code> constructors.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.setForbiddenSides(int...)</code> has been added to set the figure forbidden sides on its parent.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.getAuthorizedSides()</code> has been added to retrieve the figure authorized side (by default all sides).
+ </li>
+ <li><span class="label label-success">Added</span> The following protected methods have been added to
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code> :
+ <code>String getKey(Graphics)</code>,
+ <code>Image getImage(Rectangle, Graphics)</code>,
+ <code>static boolean doRemoveFromCache(String)</code>.
+ </li>
+ <li><span class="label label-success">Added</span> 2 methods are added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService</code> to manage gradient color in export to PNG or SVG formats:
+ <code>DiagramEditPartService.saveSVGToFile(IPath, SiriusDiagramSVGGenerator, IProgressMonitor)</code> and
+ <code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService.saveToFile(IPath, SiriusDiagramSVGGenerator, ImageFileFormat, IProgressMonitor)</code>. These 2 methods are copy of parent methods with
+ <code>SiriusDiagramSVGGenerator</code> as parameter instead of a
+ <code>DiagramSVGGenerator</code>.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getGradientPaintFromValue(int, int, int, int, Color, Color)</code> has been added to handle a cache for
+ <code>java.awt.GradientPaint</code> as it is the case for
+ <code>org.eclipse.swt.graphics.Pattern</code> with
+ <code>getPatternFromValue()</code>.
+ </li>
+ <li><span class="label label-success">Added</span> Methods have been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.GradientHelper</code> to handle
+ <code>java.awt.GradientPaint</code> as
+ <code>org.eclipse.swt.graphics.Pattern</code>:
+ <code>getGradientPaintDiag(Rectangle, Color, Color)</code>,
+ <code>getGradientPaintLeftToRight(Rectangle, Color, Color)</code>,
+ <code>getGradientPaintTopToBottom(Rectangle, Color, Color)</code> and
+ <code>getGradientPaint(int, Rectangle, Color, Color)</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ACTION_SIRIUS_COPY_APPEARANCE_PROPERTIES</code> has been added to identify the new
+ <em>Sirius Copy Appearence Properties</em> action.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.BundleImageFigure</code> now overrides the method
+ <code>setBorder(Border border)</code>. It also provides the accessors for the new field
+ <code>mainBorderSize</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.BundledImageFigure</code> now inherits directly from
+ <code>SVGFigure</code> instead of
+ <code>AbstractCachedSVGFigure</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure</code> now inherits directly from
+ <code>SVGFigure</code> instead of
+ <code>AbstractCachedSVGFigure</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code> now implements interfaces
+ <code>StyledFigure</code>,
+ <code>ITransparentFigure</code> and
+ <code>ImageFigureWithAlpha</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span> The following mehtods have been removed from
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code>:
+ <code>NodeList getNodes(String)</code>,
+ <code>Color getColor(Element, String)</code>,
+ <code>void updateRenderingHints(Graphics)</code>,
+ <code>staticImage toSWT(Device, BufferedImage)</code>,
+ <code>boolean checkContentAvailable()</code>,
+ <code>Rectangle2D getAreaOfInterest()</code>,
+ <code>void setAreaOfInterest(Rectangle2D)</code>,
+ <code>boolean isSpecifyCanvasWidth()</code>,
+ <code>void setSpecifyCanvasWidth(boolean)</code>,
+ <code>boolean isSpecifyCanvasHeight()</code>,
+ <code>void setSpecifyCanvasHeight(boolean)</code>,
+ <code>boolean getSpecifyCanvasWidth()</code>,
+ <code>boolean getSpecifyCanvasHeight()</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span> The class
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractCachedSVGFigure</code> has been removed. Its functionality was merged directly into
+ <code>SVGFigure</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span> The static
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure.createImageFigure(ContainerStyle)</code> method has been removed; it was broken and not called anywhere.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.emf.ui">Changes in
+ <code>org.eclipse.sirius.ext.emf.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.ext.emf.ui.properties.ExtensiblePropertySource.collector</code> field is now in protected visibility to be modifiable and accessible by subclass.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime2">Changes in
+ <code>org.eclipse.sirius.ext.gmf.runtime</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The interface
+ <code>org.eclipse.sirius.ext.gmf.runtime.diagram.ui.tools.MoveInDiagramDragTracker</code> has been added to declare states used by all DragTrackers which manage move in diagram using mouse middle click.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui6">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertyDescriptor</code> has been added to provide a specific
+ <code>ExtensiblePropertyDescriptor</code> which test
+ <code>IPermissionAuthority</code> to make properties view editable or not.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource</code> has been modified to use
+ <code>SiriusExtensiblePropertyDescriptor</code> to provide not editable properties view when the object, selected from the Model Explorer view, cannot be modified.
+ </li>
+ <li><span class="label label-danger">Removed</span> The
+ <code>org.eclipse.sirius.ui</code>, and thus the whole
+ <code>org.eclipse.sirius.runtime</code> feature no longer depends on the JDT (technically the dependency towards
+ <code>org.eclipse.jdt.core</code> has been removed). If you need the JDT Core in your environment, you will need to add the dependency explicitly. The Sirius specification environment (
+ <code>org.eclipse.sirius.editor</code>) still depends on PDE (and thus indirectly the JDT too).
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support4">Changes in
+ <code>org.eclipse.sirius.tests.junit.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.tests.support.api.DefaultTestMemento</code> has been created. It help to simulate a real
+ <code>IMemento</code> for editor restoration.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>SiriusTestCase.initViewpoint(String, Session, boolean)</code> has been added to allow viewpoint activation without creating representations.
+ </li>
+ <li><span class="label label-success">Added</span> The methods
+ <code>initLoggers()</code> and
+ <code>disposeLoggers()</code> of class
+ <code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> have now a protected visibility (instead of private) to allow subclasses to use this logger without all the
+ <code>genericSetUp</code> behavior.
+ </li>
+ <li><span class="label label-warning">Deprecated</span> The method
+ <code>SiriusTestCase.initViewpoint(String, Session, EObject)</code> has been deprecated because the last parameter is useless to activate a viewpoint.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support3">Changes in
+ <code>org.eclipse.sirius.tests.swtbot.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>getTreeItem(final SWTBotTreeItem[], final String)</code> has been added in
+ <code>org.eclipse.sirius.tests.swtbot.support.utils</code> to retrieve recursively a
+ <code>SWTBotTreeItem</code> in a
+ <code>SWTBotTreeItem</code> array.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.tests.swtbot.support.api.condition.ShellChangedCondition</code> has been added to wait until the current active shell has changed.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.tests.swtbot.support.api.condition.TreeItemWithImageCondition</code> has been added to wait until the given treeItem has the expected image.
+ </li>
+ <li><span class="label label-info">Modified</span> A second
+ <code>String</code> parameter has been added to the method
+ <code>org.eclipse.sirius.tests.swtbot.support.api.business.UILocalSession.newDiagramRepresentation(String, String)</code>. This parameter is the label of the representation description. It is necessary since the change of the wizard to ask the new representation name (see User-Visible Changes for detail).
+ </li>
+ <li><span class="label label-info">Modified</span> A third
+ <code>String</code> parameter has been added to the constructor of
+ <code>org.eclipse.sirius.tests.swtbot.support.api.business.UINewRepresentationBuilder</code> for the same above reasons.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common.xtext">Changes in
+ <code>org.eclipse.sirius.common.xtext</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span> The dependency from
+ <code>org.eclipse.sirius.common.xtext</code> to the JDT plug-in
+ <code>org.eclipse.jdt.core</code> is now optional. If you need the JDT Core in your environment, you will need to add the dependency explicitly. The Sirius specification environment (
+ <code>org.eclipse.sirius.editor</code>) still depends on PDE (and thus indirectly the JDT too).
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.editor">Changes in
+ <code>org.eclipse.sirius.editor</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>bindCompletionProcessor(AbstractPropertySection, IAssistContentProvider, Text)</code> has been added to the class
+ <code>org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider</code> to allow to bind a specific IAssistContentProvider to the text.
+ </li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/Release_Notes_Previous.html b/doc/5.1.x/Release_Notes_Previous.html
new file mode 100644
index 0000000..915b8a2
--- /dev/null
+++ b/doc/5.1.x/Release_Notes_Previous.html
@@ -0,0 +1,3564 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Release_Notes_Previous</title>
+ <link type="text/css" rel="stylesheet" href="resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="ReleaseNotesforOlderVersionofSirius">Release Notes for Older Version of Sirius</h1>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#ReleaseNotesforOlderVersionofSirius">Release Notes for Older Version of Sirius</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#sirius3.1.0">Changes in Sirius 3.1.0</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#DeveloperVisibleChanges">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius3.0.0">Changes in Sirius 3.0.0</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges2">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#SpecifierVisibleChanges2">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#DeveloperVisibleChanges2">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius2.0.0">Changes in Sirius 2.0.0</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges3">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#APIChanges">API Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius1.0.0">Changes in Sirius 1.0.0 (from Sirius 1.0.0M7)</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges4">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#APIChanges2">API Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius1.0M7">Changes in Sirius 1.0.0M7 (from Sirius 1.0M6)</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#SpecifierVisibleChanges5">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#APIChanges3">API Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius1.0M6">Changes in Sirius 1.0.0M6 (from Sirius 1.0M5)</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#APIChanges4">API Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius1.0M5">Changes in Sirius 1.0.0M5 (from Sirius 1.0M4)</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges5">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#APIChanges5">API Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius1.0M4">Changes in Sirius 1.0.0M4 (from Sirius 0.9)</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges6">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#APIChanges6">API Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius0.9">Changes in Sirius 0.9.0</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#MigratingfromObeoDesignerorViewpointtoSirius">Migrating from Obeo Designer or Viewpoint to Sirius</a>
+ </li>
+ <li>
+ <a href="#Pluginsversionnumbers.">Plug-ins version numbers.</a>
+ </li>
+ <li>
+ <a href="#Majornamespacechanges">Major namespace changes</a>
+ </li>
+ <li>
+ <a href="#NatureID">Nature ID</a>
+ </li>
+ <li>
+ <a href="#OtherAPIChanges">Other API Changes</a>
+ </li>
+ <li>
+ <a href="#SpecifierVisibleChanges6">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#UserVisibleChanges7">User-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <p>This document contains the release notes for older versions of of Sirius.</p>
+ <h2 id="sirius3.1.0">Changes in Sirius 3.1.0</h2>
+ <h3 id="UserVisibleChanges">User-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> A new feature allows to snap to all shapes (instead of just to snap to sibling shapes). The <kdb>F4</kdb> shortcut key activates this mode when you resize a node, move a node or move a bendpoint of an edge, see
+ <a href="./user/diagrams/Diagrams.html#snap_to_shapes">the documentation</a> for details.
+ </li>
+ <li><span class="label label-success">Added</span> A new feature allows to move the edge group (Edge, Label, Border Nodes) if the <kdb>F3</kdb> shortcut is pressed during the edge moving/dragging. This feature is only available for the case of edges with border node as source and target. See
+ <a href="./user/diagrams/Diagrams.html#move_edge_group">documentation</a> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> The label of edges now stays as much as possible near the edge when it is moved.</li>
+ </ul>
+ <p>Sample before Sirius 3.1:
+ <br/>
+ <img border="0" src="images/edgeLabelMoveBeforeSirius3.1.gif"/>
+ <br/>Same sample since Sirius 3.1:
+ <br/>
+ <img border="0" src="images/edgeLabelMoveAfterSirius3.1.gif"/>
+ </p>
+ <ul>
+ <li><span class="label label-success">Added</span> It is now possible to collapse compartments using the handle visible on the following illustrations. The handle’s position varies depending on the label alignment to avoid overlapping (depending on the list elements alignment for a list with an hidden label).</li>
+ </ul>
+ <p>
+ <img border="0" src="images/compartments_collapse.png"/>
+ <br/>
+ <img border="0" src="images/compartments_collapse2.png"/>
+ </p>
+ <ul>
+ <li><span class="label label-info">Modified</span> The
+ <em>Snap to Grid</em> and
+ <em>Snap to Shapes</em> features are now automatically disabled on Sequence diagrams. As indicated
+ <a href="./user/sequences/Sequence%20Diagrams.html#introduction">in the user documentation</a>, to work correctly, Sirius sequence diagrams must have a tight control on where the graphical elements are placed on the diagram and on their synchronization with the underlying semantic model. Previously, the user had to explicitely disable the snap features.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <em>Link with Editor</em> behavior has changed. The link with editor was previously unidirectional from the Common Navigator (Model Explorer view or Project view) toward the active representation. Now, when selecting one or several elements in the representation, the corresponding semantic elements are selected in the Common Navigator.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <em>Arrange Linked Bordered Nodes</em> tabbar action has been renamed to
+ <em>Arrange Linked Border Nodes</em> as it is border nodes which are layouted and not bordered nodes.
+ </li>
+ </ul>
+ <h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-info">Modified</span> The
+ <em>Acceleo Query Language</em> (AQL) interpreter has been improved. AQL, and its support in Sirius, is no longer considered experimental, and instead is now the recommended query language to use for new VSMs. Improvements mostly concern better completion and validation, and more precise error reporting. In particular AQL expressions will now be able to display warnings and errors in the Interpreter view. The message displayed in the Interpreter view after an evaluation has also been improved to display the qualified name of the type of the value computed (
+ <code>ePackageName::eClassName</code>). The improvements realized can be viewed by clicking on the image below (click to zoom).
+ </li>
+ </ul>
+ <p>
+ <a href="images/improvedsiriusinterpreter.png">
+ <img border="0" src="images/improvedsiriusinterpreter_thumbnail.png"/>
+ </a>
+ </p>
+ <ul>
+ <li><span class="label label-info">Modified</span> Related to the previous point, the projects created by the
+ <em>Viewpoint Specification Project</em> wizard are now configured to use AQL by default (instead of Acceleo 3/MTL before). They depend on
+ <code>org.eclipse.sirius.common.acceleo.aql</code> instead of
+ <code>org.eclipse.sirius.common.acceleo.mtl</code>, and do not have the Acceleo nature anymore (it is not needed by AQL). If you want to use another language in your queries, make sure you set the appropriate dependencies so that the Sirius support for that language will be present at runtime to interpret the queries.
+ </li>
+ <li><span class="label label-info">Modified</span> The support for containers with vertical or horizontal
+ <em>compartments</em> on diagrams was introduced in Sirius 3.0.0 as an experimental feature. Several improvements and corrections have been done around the behaviors of this feature which is no longer considered experimental. Validation rules and tooltips in the VSM editor are here to help the specifier create a consistent mapping structure.
+ </li>
+ <li><span class="label label-info">Modified</span> <span class="label label-info">Experimental</span> New, experimental support for recursive
+ <em>compartments</em> on diagrams: the
+ <em>children presentation</em> property of a
+ <em>Container Mapping</em>, which is defined as a
+ <em>compartment</em> (its parent
+ <em>ContainerMapping</em> has a
+ <em>VerticalStack</em> or
+ <em>HorizontalStack</em>
+ <em>children presentation</em>), can now also be set to
+ <em>Vertical Stack</em> and
+ <em>Horizontal Stack</em>. It allows to define complex stacks of
+ <em>compartments</em> mixing both stack directions. While working reliably, this support is marked experimental in Sirius 3.1.0 as there are still some behaviors which do not behave as expected. If you make use of this feature, be aware that some details may still change in future releases, including 3.1.x maintenance releases.
+ </li>
+ <li><span class="label label-info">Modified</span> You now really have the capability to set the
+ <code>BorderSizeComputationExpression</code> as 0 for style of
+ <code>ContainerMapping</code>. Before Sirius 3.1.0, a size of 0 was interpreted as 1 at runtime. For compatibility reason, all existing
+ <code>BorderSizeComputationExpression</code> equals to 0 for style of
+ <code>ContainerMapping</code> are automatically set to 1 (ditto for results of this expression in representations file for container elements). For
+ <code>ContainerMapping</code>, the default value of
+ <code>BorderSizeComputationExpression</code> for new style is now 1, except for
+ <em>Worskpace Image</em> where the value is 0.
+ </li>
+ <li><span class="label label-info">Modified</span> The delete command availability computation has been changed. In case of a delete tool, the availability is now computed considering first the precondition of the tool and then the delete authorisation (using
+ <code>IPermissionAuthority</code>) of the potential to delete objects. This is the reverse order of what was done before, and can have performance impacts if the precondition is slow. The specifier will to take care to ensure a good performance for the precondition expression of the delete tool.
+ </li>
+ </ul>
+ <h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
+ <h4 id="Partialsupportforinternationalization">Partial support for internationalization</h4>
+ <p>Sirius 3.1 introduces partial support for internationalization: all literal strings from the runtime part of Sirius are now externalized and can be localized by third parties by providing the appropriate “language packs” as OSGi fragments. Note that this does not concern the VSM editor’s UI, the VSMs themselves, or the parts of the UI inherited from Eclipse/EMF/GEF/GMF and other libraries and frameworks used by Sirius.</p>
+ <p>Some API changes were required to enable this. While technically breaking changes if interpreting strictly the OSGi versioning rules, the major version number of the impacted bundles was not incremented as the changes only concern classes that should not impact the vast majority of users. Most breaking changes concern the plug-in/activator classes from each bundle. They are:</p>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.layoutdata.LayoutDataPlugin</code>, a subclass of
+ <code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class
+ <code>LayoutDataPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.sequence.SequenceDiagramPlugin</code>, a subclass of
+ <code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class
+ <code>SequenceDiagramPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.common.xtext.internal.XtextIntegrationPlugin</code>, a subclass of
+ <code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class
+ <code>XtextIntegrationPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ext.base.BasePlugin</code>, a subclass of
+ <code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class
+ <code>BasePlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ext.draw2d.Draw2DExtPlugin</code>, a subclass of
+ <code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class
+ <code>Draw2DExtPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ext.e3.ui.Eclipse3UIExtPlugin</code>, a subclass of
+ <code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class
+ <code>Eclipse3UIExtPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ext.emf.EMFExtPlugin</code>, a subclass of
+ <code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class
+ <code>EMFExtPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.synchronizer.internal.SynchronizerPlugin</code>, a subclass of
+ <code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class
+ <code>SynchronizerPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tree.tools.internal.TreePlugin</code>, a subclass of
+ <code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class
+ <code>TreePlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.common.acceleo.mtl.ide.AcceleoMTLInterpreterIDEPlugin</code> is no longer an OSGi
+ <code>BundleActivator</code>, and instead extends
+ <code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class
+ <code>AcceleoMTLInterpreterIDEPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.common.acceleo.mtl.ide.AcceleoMTLInterpreterPlugin</code> is no longer an OSGi
+ <code>BundleActivator</code>, and instead extends
+ <code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class
+ <code>AcceleoMTLInterpreterPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.common.ocl.DslOclPlugin</code> is no longer a
+ <code>org.eclipse.core.runtime.Plugin</code> (nor an OSGi
+ <code>BundleActivator</code>), and instead extends
+ <code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class
+ <code>DslOclPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.common.tools.DslCommonPlugin</code> is no longer a
+ <code>org.eclipse.core.runtime.Plugin</code> (nor an OSGi
+ <code>BundleActivator</code>), and instead extends
+ <code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class
+ <code>DslCommonPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.DiagramPlugin</code> is no longer a
+ <code>org.eclipse.core.runtime.Plugin</code> (nor an OSGi
+ <code>BundleActivator</code>), and instead extends
+ <code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class
+ <code>DiagramPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.ecore.extender.business.internal.ExtenderPlugin</code> is no longer a
+ <code>org.eclipse.core.runtime.Plugin</code> (nor an OSGi
+ <code>BundleActivator</code>), and instead extends
+ <code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class
+ <code>ExtenderPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.table.tools.internal.TablePlugin</code> is no longer a
+ <code>org.eclipse.core.runtime.Plugin</code> (nor an OSGi
+ <code>BundleActivator</code>), and instead extends
+ <code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class
+ <code>TablePlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Renamed, Modified</span>
+ <code>org.eclipse.sirius.eef.adapters.Activator</code> has been renamed into
+ <code>org.eclipse.sirius.eef.adapters.EEFAdapterPlugin</code> and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends
+ <code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class
+ <code>EEFAdapterPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Renamed, Modified</span>
+ <code>org.eclipse.sirius.common.acceleo.interpreter.Activator</code> has been renamed into
+ <code>org.eclipse.sirius.common.acceleo.interpreter.InterpreterViewPlugin</code> and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends
+ <code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class
+ <code>InterpreterViewPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Renamed, Modified</span>
+ <code>org.eclipse.sirius.table.ui.ext.Activator</code> has been renamed into
+ <code>org.eclipse.sirius.table.ui.ext.TableUIExtPlugin</code> and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends
+ <code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class
+ <code>TableUIExtPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Renamed, Modified</span>
+ <code>org.eclipse.sirius.ui.ext.Activator</code> has been renamed into
+ <code>org.eclipse.sirius.ui.ext.SiriusUIExtPlugin</code> and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends
+ <code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class
+ <code>SiriusUIExtPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Renamed, Modified</span>
+ <code>org.eclipse.sirius.tree.ui.ext.Activator</code> has been renamed into
+ <code>org.eclipse.sirius.tree.ui.ext.TreeUIExtPlugin</code> and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends
+ <code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class
+ <code>TreeUIExtPlugin.Implementation</code>.
+ </li>
+ <li><span class="label label-info">Renamed</span>
+ <code>org.eclipse.sirius.diagram.sequence.ui.SequenceDiagramPlugin</code> has been renamed into
+ <code>org.eclipse.sirius.diagram.sequence.ui.SequenceDiagramUIPlugin</code> for consistency and to avoid potential name clashes with the new
+ <code>org.eclipse.sirius.diagram.sequence.SequenceDiagramPlugin</code>.
+ </li>
+ </ul>
+ <p>Additional non-breaking changes:</p>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ext.base.I18N</code> has been added. It provides common utility code to support internationalization.
+ </li>
+ <li><span class="label label-success">Added</span> The translation keys (and default values) have been added to all the concerned bundles, in their
+ <code>plugin.properties</code> file. These (translated) messages are available at runtime as static fields of new
+ <code>Messages</code> classes, added to all concerned bundles (always in the same package as their plug-in/activator class). The concerned bundles are:
+ <ul>
+ <li>
+ <code>org.eclipse.sirius</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ext.base</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ecore.extender</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.synchronizer</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.common</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.common.acceleo.aql</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.common.acceleo.aql.ide</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.common.acceleo.mtl</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.common.acceleo.mtl.ide</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.common.ui</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.layoutdata</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.sequence</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.sequence.ui</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.eef.adapters</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.interpreter</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table.ui</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree.ui</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui</code>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common">Changes in
+ <code>org.eclipse.sirius.common</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>invokeMethod</code> has been added in class
+ <code>org.eclipse.sirius.common.tools.api.util.ReflectionHelper</code> to call a private method. Warning: This method must be used carefully.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>invokeMethodWithoutException</code> has been added in class
+ <code>org.eclipse.sirius.common.tools.api.util.ReflectionHelper</code> to call a private method. This method returns true (and not the result of the method) if it is called without exception. It returns false otherwise. Warning: This method must be used carefully.
+ </li>
+ </ul>
+ <ul>
+ <li><span class="label label-success">Added</span> The new interface
+ <code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterWithDiagnostic</code> has been added. It allows an interpreter to evaluate an expression and return not only the result of the evaluation but also a diagnostic.
+ </li>
+ <li><span class="label label-success">Added</span> The new class
+ <code>org.eclipse.sirius.common.tools.api.contentassist.ContentProposalWithReplacement</code> has been added. It allows interpreters to provide proposals for the code completion which can replace an existing part of the expression used. This behavior can be used if the user has started to type a value that would be returned by the code completion. For example, if the user types
+ <code>aql:self.na</code> and if he selects the content proposal
+ <code>name</code>, it can replace the existing part of the expression
+ <code>na</code> to write
+ <code>aql:self.name</code> instead of just appending
+ <code>name</code> to create
+ <code>aql:self.naname</code>.
+ </li>
+ <li><span class="label label-success">Added</span> The new class
+ <code>org.eclipse.sirius.common.tools.api.contentassist.ContentProposalBuilder</code> used to build the content proposals with their various parameters more easily.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>addEvaluateSelectionExpressionTask</code> has been added in class
+ <code>org.eclipse.sirius.tools.api.command.AbstractCommandFactory</code> to allow selection after tool execution.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.common.tools.api.interpreter.StandardServices</code> has been added. This class owns methods used for
+ <code>service:</code> interpreter.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2</code> has been added and should be preferred instead of implementing
+ <code>MetamodelDescriptorProvider</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryImpl.addViewpointFileCollector()</code> method has been added to replace deprecated
+ <code>ViewpointRegistryImpl.addSiriusFileCollector()</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority.canDeleteInstance(EObject)</code> when called for an object will not be called for children of this object as we know it will return true because if we can delete a parent object we can delete its children.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.tools.api.command.DCommand</code> no longer inherits from
+ <code>IUndoableCommand</code> since undo/redo is managed by EMF Transaction.
+ </li>
+ <li><span class="label label-warning">Deprecated</span>
+ <code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryImpl.addSiriusFileCollector()</code> method has been deprecated as it is about
+ <code>ViewpointFileCollector</code> and not
+ <code>SiriusFileCollector</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.business.api.helper.task.ICommandTask.undo()/redo()</code> methods removed because they are useless since undo/redo is managed by EMF Transaction.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.tools.api.command.IUndoableCommand</code> interface removed because it is useless since undo/redo is managed by EMF Transaction.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getInput()</code> method has been added to get the real input for a
+ <code>DRepresentation</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getSession(boolean)</code> method has been added to let the caller choose to create and open a new
+ <code>Session</code> or not when the known session is closed or does not exist. The
+ <code>getSession</code> method calls getSession(true).
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.selectAndReveal(DialectEditor, List<DRepresentationElement>)</code> method has been added to explicitly indicate to reveal elements out of the screen (hidden because of the scrollbars location) when selecting them.
+ </li>
+ <li><span class="label label-warning">Deprecated</span>
+ <code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.dispose()</code> method has been deprecated as an
+ <code>IEditorInput</code> can be reused by several instances of
+ <code>IEditorPart</code> through the navigation history view.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.diagram.ui.graphical.edit.policies.RegionRegionContainerResizableEditPolicy</code> has been added to handle
+ <code>DNodeContainer</code> which are both
+ <code>Region</code> and
+ <code>RegionContainer</code>: during resize they might have to propagate the resize to their children and/or parents.
+ </li>
+ <li><span class="label label-success">Added</span> The constant
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutUtils.COLLAPSED_VERTICAL_REGION_HEIGHT</code> has been added to centralize the minimum height of a collapsed Region from a Region Container with a vertical stack children presentation.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramNodeEditPart/IDiagramBorderNodeEditPart.getNodeLabel()</code> methods has been moved up to
+ <code>org.eclipse.sirius.diagram.ui.edit.api.part.IAbstractDiagramNodeEditPart.getNodeLabel()</code> as both
+ <code>IDiagramNodeEditPart</code> and
+ <code>IDiagramBorderNodeEditPart</code> inherits of
+ <code>IAbstractDiagramNodeEditPart</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDER_NODES</code> added to replace
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDERED_NODES_TOOLBAR</code> which is deprecated.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDER_NODES_TOOLBAR</code> added to replace
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDERED_NODES</code> which is deprecated
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.graphical.edit.policies.SetConnectionBendpointsAndLabelCommmand</code> is a new class that allows to update edge label when updating bendpoints. Several existing Sirius commands now extends this new class.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.decorators.AbstractSiriusDecorator.shouldBeVisibleAtPrint()</code> method added to leave
+ <code>AbstractSiriusDecorator</code> extenders indicate if decoration should be visible at diagram export/print.
+ </li>
+ <li><span class="label label-warning">Deprecated</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDERED_NODES</code> deprecated in favor
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDER_NODES</code> as it is an action id about border nodes layout.
+ </li>
+ <li><span class="label label-warning">Deprecated</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDERED_NODES_TOOLBAR</code> deprecated in favor
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDER_NODES_TOOLBAR</code> as it is an action id about border nodes layout.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.diagram.ui.graphical.edit.policies.EdgeCreationEditPolicy</code> has been removed as it should not be in API and has been replaced by internal
+ <code>org.eclipse.sirius.diagram.ui.internal.edit.policies.SiriusConnectionEditPolicy</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span> The method
+ <code>setUseLocalCoordinates(boolean)</code> has been removed from
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.GradientRoundedRectangle</code>,
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerParallelogram</code>,
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerRectangleFigureDesc</code> as it was generated by GMF tooling and never used in Sirius whose edit parts and edit policies expect
+ <code>org.eclipse.draw2d.IFigure.useLocalCoordinates()</code> to always return false for its figures.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.synchronizer">Changes in
+ <code>org.eclipse.sirius.synchronizer</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.synchronizer.CreatedOutput.synchronizeChildren()</code> method takes now a
+ <code>RefreshPlan</code> in parameter to have more informations to say if children must be synchronized.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in
+ <code>org.eclipse.sirius.tests.junit.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.tests.support.api.AbstractToolDescriptionTestCase</code> has been created. It contains utility methods about tools.
+ </li>
+ <li><span class="label label-info">Modified</span> The class
+ <code>org.eclipse.sirius.tests.support.api.SiriusDiagramTestCase</code> has been modified
+ <ul>
+ <li><span class="label label-info">Modified</span> It now inherits from
+ <code>AbstractToolDescriptionTestCase</code>
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>applyContainerCreationTool(String,DDiagram,EObject)</code> has been added.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>applyGenericTool(String,DDiagram,EObject)</code> has been added.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support">Changes in
+ <code>org.eclipse.sirius.tests.swtbot.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The methods
+ <code>closePerspective(String)</code>,
+ <code>closeSiriusPerspective()</code> and
+ <code>closeModelingPerspective()</code> have been added in class
+ <code>org.eclipse.sirius.tests.swtbot.support.api.perspective.DesignerPerspectives</code> to allow the closing of perspectives.
+ </li>
+ <li><span class="label label-success">Added</span> The
+ <code>org.eclipse.sirius.tests.swtbot.support.api.condition.PerspectiveActivatedCondition</code> new offers the capability to inverse the test. This condition becomes a DeactivatedCondition instead of an ActivatedCondition by using the new constructor with inverse parameter.
+ </li>
+ <li><span class="label label-success">Added</span> The methods
+ <code>isSnapToShape</code> and
+ <code>isSnapToGrid()</code> have been added in class
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor</code>. They allow to know the state of the corresponding properties.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.dragWithKey(int, int, int, int, int)</code> (and also
+ <code>SWTBotSiriusGefViewer.dragWithKey</code> and
+ <code>SWTBotSiriusFigureCanvas.mouseDragWithKey</code>), has an additional fifth parameter compared to
+ <code>drag(int, int, int, int)</code> method, to indicate the key code to press during the drag’n’drop. It is possible to call this method with
+ <code>SWT.None</code> to obtain the standard behavior of
+ <code>drag</code> method. This method also has a correct behavior for the move of bendpoints of edges.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tests.swtbot.support.api.condition.TopCondition</code>: New condition to wait that top of the edit part is on the expected location.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tests.swtbot.support.api.condition.BendpointLocationCondition</code>: New condition to wait that a bendpoint is on the expected x or y location.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tests.swtbot.support.api.condition.TreeChildrenNumberCondition</code>: New condition to wait that a tree has the expected number of children.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tests.swtbot.support.utils.SWTBotCommonHelper.saveCurrentEditor(Session)</code>: This new method is preferable to
+ <code>saveCurrentEditor()</code> because there is a wait condition to ensure that the save is finished.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.tests.swtbot.support.api.condition.CheckBoundsCondition</code>: This condition now also checks the bounds location if the checkWidth or checkHeight (or both) is false.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.gef">Changes in
+ <code>org.eclipse.sirius.ext.gef</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The new class
+ <code>org.eclipse.sirius.ext.gef.query.EditPartQuery</code> has been added. It allows to retrieve all children of the current part.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.jface">Changes in
+ <code>org.eclipse.sirius.ext.jface</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The new class
+ <code>org.eclipse.sirius.ext.jface.viewers.IToolTipProvider</code> has been copied from JFace 3.10 from Luna, so that we can use it with Juno and Kepler too.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime">Changes in
+ <code>org.eclipse.sirius.ext.gmf.runtime</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> Two new
+ <code>getIntersection</code> methods have been added in
+ <code>org.eclipse.sirius.ext.gmf.runtime.editparts.GraphicalHelper</code>. They are similar to the existing
+ <code>getIntersection</code> methods, but they consider the nearest point on the figure if there is no intersection.
+ </li>
+ </ul>
+ <h2 id="sirius3.0.0">Changes in Sirius 3.0.0</h2>
+ <h3 id="UserVisibleChanges2">User-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> The ability to print table representations has been re-introduced.</li>
+ <li><span class="label label-success">Added</span> The quick outline feature has been added for tree and table editors, see documentation for details.</li>
+ <li><span class="label label-success">Added</span> The label of a list or container can now be hidden by the user from the outline, the tabbar or the contextual menu.</li>
+ <li><span class="label label-success">Added</span> In the
+ <em>Appearance</em> tab, in addition to
+ <em>Bold</em> and
+ <em>Italic</em>, it is now possible to set the font formatting style to
+ <em>Underline</em> and
+ <em>Strike through</em> (or any combination of these).
+ </li>
+ <li><span class="label label-success">Added</span> Container elements on diagrams now support vertical and horizontal compartments layout (this is only visible if the modeler configuration makes use of this new feature). </li>
+ <li><span class="label label-success">Added</span> In table and tree editors, a
+ <em>Refresh</em> can now be launched by hitting <kbd>F5</kbd> like in diagrams (previously the only way was to click on the
+ <em>Refresh</em> icon or menu item).
+ </li>
+ <li><span class="label label-success">Added</span> In table editors, hitting the <kdb>Del</kdb> key is now equivalent to selecting
+ <em>Delete Line</em> in the context menu.
+ </li>
+ <li><span class="label label-success">Added</span> On diagrams, it is now possible to set a custom background image on list containers.</li>
+ <li><span class="label label-info">Modified</span> In the
+ <em>Viewpoint Selection</em> dialog and wizard page, the “plug-in” decorator for viewpoints loaded from plug-ins is removed, and a “Folder” decorator for viewpoints loaded from the current workspace has been added. This makes the icons more visible in the most common where viewpoints come from installed plug-ins.
+ </li>
+ </ul>
+ <h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> <span class="label label-info">Experimental</span> Optional support for the experimental
+ <em>Acceleo Query Language</em> (AQL) has been added to write interpreted expressions. It is provided by the
+ <code>org.eclipse.sirius.common.acceleo.aql</code> (required for evaluating the expressions) and
+ <code>org.eclipse.sirius.common.acceleo.aql.ide</code> (optional, only needed to provide specification-time features like expression completion) plug-ins. AQL is similar to Acceleo 3/MTL, but simpler and provides much better performance in the Sirius context. If you make use of this feature, be aware that some details may still change in future releases, including 3.0.x maintenance releases. See <a href="https://www.eclipse.org/acceleo/documentation/aql.html" target="_blank">the AQL documentation</a> for more details on the language itself.
+ </li>
+ <li><span class="label label-success">Added</span> <span class="label label-info">Experimental</span> New, experimental support for containers with vertical or horizontal
+ <em>compartments</em> on diagrams: the
+ <em>children presentation</em> property of a
+ <em>Container Mapping</em> has two new values:
+ <em>Vertical Stack</em> and
+ <em>Horizontal Stack</em>. They indicate that a container will present its children containers as a vertical/horizontal stack of compartments. While working reliably, this support is marked experimental in Sirius 3.0.0 as there are still some combinations of mappings, styles and behaviors which do not behave as expected. If you make use of this feature, be aware that some details may still change in future releases, including 3.0.x maintenance releases.
+ </li>
+ <li><span class="label label-success">Added</span> Everywhere an image path can be configured in the VSM, a new button is present on the right of the text field. It opens a dialog to select an image, either from the workspace or from an installed plug-in.</li>
+ <li><span class="label label-success">Added</span> Everywhere an interpreted expression can be configured in the VSM, a new button is present on the right of the text field. It opens a multi-line dialog to edit long expression more easily. Auto-completion is supported inside the multi-line dialog.</li>
+ <li><span class="label label-success">Added</span> Compressed SVG images (
+ <code>*.svgz</code>) are now supported everywhere normal SVG images were supported.
+ </li>
+ <li><span class="label label-success">Added</span> When developing a modeler in “live mode”, with the VSM in the same workspace as the sample session(s) which use it, VSM expressions which use
+ <code>service:</code> or
+ <code>aql:</code> can now invoke Java services which are defined in the workspace (with no need to launch a separate runtime).
+ </li>
+ <li><span class="label label-success">Added</span> A quick outline is now accessible in the VSM editor by using the shortcut <kbd>Ctrl+o</kbd>. It supports filtering on both an element’s name and properties for quick, keyboard-only navigation in complex VSMs.</li>
+ <li><span class="label label-success">Added</span> The “hide label by default capability” has been added to the container styles.</li>
+ <li><span class="label label-success">Added</span> In addition to
+ <em>Bold</em> and
+ <em>Italic</em>,
+ <em>Underline</em> and
+ <em>Strike Through</em> styles have been added on the label font format.
+ </li>
+ <li><span class="label label-success">Improved</span> Many VSM elements which are required are now created automatically. For example the default layer of a
+ <em>Diagram Description</em> is automatically added to new
+ <em>Diagram Descriptions</em>.
+ </li>
+ <li><span class="label label-success">Improved</span> Some default values have been modified to better reflect actual usage. This does not impact existing VSM and only applies to newly created elements.
+ <ul>
+ <li>The label position on a
+ <em>Node</em> mapping is now
+ <em>node</em> by default (instead of
+ <em>border</em> before).
+ </li>
+ <li>The
+ <em>Arc Width</em> and
+ <em>Arc Height</em> are now 10 by default (instead of 1 before).
+ </li>
+ <li>The
+ <em>Enable popup bars</em> is now set by default on new diagrams.
+ </li>
+ <li>No default value for interpreted expressions use the Acceleo 3 / MTL syntax anymore, but only use the core
+ <code>var:</code> and
+ <code>feature:</code> interpreters, which are always present.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Improved</span> The precision of the VSM validation, especially regarding the typing of computed expressions, has been greatly improved. Other validation rules like static image paths have also been added or improved.</li>
+ <li><span class="label label-info">Modified</span> In the VSM editor, the context menu entries (categories and items) have been reorganized to put most common actions/items first.</li>
+ <li><span class="label label-info">Modified</span> In diagrams, the style previously named “Lozenge” is now called “Diamond”.</li>
+ <li><span class="label label-info">Modified</span> In the
+ <em>Open</em> menu on a representation, the menu is computed from the navigation tool’s label instead of its name/id.
+ </li>
+ <li><span class="label label-info">Modified</span> All Acceleo 3 references have been removed from the Sirius metamodels to avoid a dependency to Acceleo 3. An automatic migration has been added during the loading of the VSM to avoid a change of behavior. This migration adds explicitly the old default value (
+ <code>[eContents()->size()/]</code>) in the VSM, that was implicit before. Customers who want to completely remove this dependency must remove the Acceleo 3 expressions from there VSM after the migration.
+ </li>
+ <li><span class="label label-info">Modified</span> The default icons paths of
+ <em>Selection Wizard</em> and
+ <em>Pane-Based Selection Wizard</em> used to reference invalid icons, so the corresponding tools had no icon per default in the palette. The default icons paths have been corrected to reference the icons displayed for those elements in the VSM editor.
+ </li>
+ <li><span class="label label-info">Modified</span> "
+ <code>*</code>" can now be used as feature name of a table’s
+ <em>Feature Column</em> to skip the feature name validation during the cell creation. This allow to compute the label of cells for lines whose semantic element types have no common
+ <em>EStructuralFeature</em> (inherited or with same name).
+ </li>
+ </ul>
+ <h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
+ <p>The most important and impacting changes in this release are (details below in plug-in specific sections):</p>
+ <ul>
+ <li><span class="label label-success">Added</span> The new extension point
+ <code>org.eclipse.sirius.ui.siriuspropertiescelleditor</code>, defined in
+ <code>org.eclipse.sirius.ui</code>, can be used to provide customized cell editors for semantic element’s properties as shown in the properties view on a Sirius representation.
+ </li>
+ <li><span class="label label-success">Added</span> The new class
+ <code>org.eclipse.sirius.eef.components.SiriusAwarePropertiesEditingComponent</code> can be used as root class of the generated EEF components to greatly improve performances when using both EEF properties views with Sirius representations.
+ </li>
+ <li><span class="label label-info">Modified</span> The minimum version of EEF required for using
+ <code>org.eclipse.sirius.eef.adapters</code> is now 1.5.0 (from 1.2 before). EEF 1.5 is source and binary-compatible with EEF 1.2 to 1.4, and no re-generation of the EEF views should be needed to switch to 1.5.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>org.eclipse.sirius.business.internal.session.IsModifiedSavingPolicy</code> saving policy, introduced in Sirius 2.0.0 but not enabled at that time is now the default. The previous implementation,
+ <code>org.eclipse.sirius.business.api.session.SavingPolicyImpl</code> is still available if needed.
+ </li>
+ <li><span class="label label-info">Modified</span> All metamodels defined by Sirius have been modified to use EMF’s
+ <code>MinimalEObjectImpl.Container</code> as base class, which reduces memory consumption compared to previous versions.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>RGBValues</code> type used in Sirius to represent colors has been converted into an immutable EMF EDataType, which also reduces memory consumption compared to previous versions.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>AirdResourceImpl</code> type, use for the
+ <code>*.aird</code> resources, no longer inherits from GMF’s
+ <code>GMFResource</code> or depend on GMF in any way. This makes the
+ <code>org.eclipse.sirius</code> now completely independent on GMF.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>DAnalsysis.models</code> reference has been replaced by the
+ <code>DAnalsysis.semanticModels</code> attribute, in conjunction with the new
+ <code>ResourceDescriptor</code> data-type. The
+ <code>DAnalysis.getModels()</code> Java method is still present for compatibility and returns the same values, but the returned list can not be modified. All changes must be made directly on
+ <code>DAnalsysis.semanticModels</code> and will be reflected in the value returned by
+ <code>DAnalysis.getModels()</code>. While not technically deprecated yet,
+ <code>DAnalysis.getModels()</code> should be avoided and may be removed in a future release.
+ </li>
+ <li><span class="label label-info">Moved</span> Extensions in
+ <code>plugin.xml</code> that provide UI functionalities have been moved to new
+ <code>org.eclipse.sirius.*.ext</code> plug-ins, to make the contributions to the UI optional. If your product consumed directly the Sirius plug-ins instead of the high-level features, you may need to add the new plug-ins if you want the Sirius UI contributions to stay available.
+ </li>
+ <li><span class="label label-danger">Removed</span> Many unused types defined in the metamodels have been removed. This should not impact normal client code. Existing models will be automatically migrated on loading if needed.</li>
+ <li><span class="label label-danger">Removed</span> Sirius no longer installs the
+ <code>AirDCrossReferenceAdapterImpl</code>, which was a subclass of GMF’s
+ <code>CrossReferenceAdapter</code> on session resources (
+ <code>*.aird</code>). If your code relied on GMF’s implementation to find inverse references, it can use the Sirius session’s
+ <code>Session.getSemanticCrossReferencer()</code> instead, which provides the same service (and more) and avoids the redundant installation of GMF’s version.
+ </li>
+ </ul>
+ <p>Packaging changes:</p>
+ <ul>
+ <li><span class="label label-success">Added</span> Two new feature have been added concerning the new support for the AQL language:
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.runtime.aql</code> includes the minimum required to execute AQL queries at runtime. It must be present on end-users' systems for modelers which use AQL expressions to work.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.aql</code> includes both the runtime requirements and the development-time features like support for auto-completion of AQL expressions in the VSM editor.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span> The new feature
+ <code>org.eclipse.sirius.specifier</code> includes everything needed to have a complete Sirius specification environment, with support for all dialects. It includes support for Acceleo 3/MTL queries, but not for AQL (provided by
+ <code>org.eclipse.sirius.aql</code>) or OCL (provided by
+ <code>org.eclipse.sirius.runtime.ocl</code>). Future Sirius releases will probably swap AQL and Acceleo 3, making AQL the defaut and part of the main feature, and Acceleo 3/MTL optional in a separate feature.
+ </li>
+ <li><span class="label label-success">Added</span> All Sirius releases and milestones are available as zipped archives in addition to a normal p2 repository/update-site. For each version and platform (e.g. 3.0.0 on Eclipse Mars), two archives are available: one with the Sirius core, and one with the Sirius automated test suites and the sample modelers they rely on. See the
+ <a href="https://wiki.eclipse.org/Sirius/Update_Sites">Sirius wiki</a> and release pages for more details and links to these archives, for example
+ <code>http://download.eclipse.org/sirius/updates/releases/2.0.5/</code>. This is retro-active on all previously released versions of Sirius, but not on milestones before 3.0.0.
+ </li>
+ </ul>
+ <p>Other changes:</p>
+ <ul>
+ <li><span class="label label-success">Added</span> Sirius now provides an <a href="http://www.eclipse.org/oomph" target="_blank">Oomph</a> setup file to automatically create a fully configured Eclipse installation ready for contributing patches to Sirius. The latest version can be obtained <a href="http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/plain/releng/org.eclipse.sirius.settings/Sirius.setup" target="_blank">here</a>.</li>
+ <li><span class="label label-success">Added</span> New patches proposed by contributors on the <a href="https://git.eclipse.org/r/#/admin/projects/sirius/org.eclipse.sirius" target="_blank">Sirius Gerrit</a> now automatically trigger a sub-set of the Sirius automated test suites, which give a good feedback on the absence of regressions introduced by the proposed patch.</li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common2">Changes in
+ <code>org.eclipse.sirius.common</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The
+ <code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapter</code> interface and the
+ <code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapterImpl</code> have been added to have the capability to disable the proxy resolution. This feature is typically used to prevent loading a resource during its unloading.
+ <strong>Warning</strong> :
+ <em>Every additional custom CrossReferenceAdapter</em> should extend
+ <code>SiriusCrossReferenceAdapterImpl</code> or at least implement
+ <code>SiriusCrossReferenceAdapter</code> with the same implementation as
+ <code>SiriusCrossReferenceAdapterImpl</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.common.tools.api.util.ECrossReferenceAdapterWithUnproxyCapability</code> is a specific kind of
+ <code>SiriusCrossReferenceAdapter</code>. It provides the capability to resolve all proxy cross references to a given resource. It is now used by the Session as semantic cross referencer. This type is exposed as API but it is not intended to be used/referenced/extended by user code (as the below
+ <code>LazyCrossReferencer</code> type).
+ </li>
+ <li><span class="label label-success">Added</span> The static method
+ <code>org.eclipse.sirius.common.tools.api.util.ReflectionHelper.getFieldValueWithoutException(Class<?>, String)</code> has been added to return an internal static value of a class.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.common.tools.api.resource.ResourceSetSync</code> has a new state
+ <code>CHANGES_CANCELED</code> used to define the state where the user canceled its changes.
+ </li>
+ <li><span class="label label-success">Added</span> The
+ <code>org.eclipse.sirius.common.tools.api.resource.ImageFileFormat</code> class has been added (it was in
+ <code>org.eclipse.sirius.ext.swt</code> before).
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.common.tools.api.util.EclipseUtil.getConfigurationElementsFor()</code> has been added: it calls
+ <code>org.eclipse.core.runtime.Platform.getExtensionRegistry().getConfigurationElementsFor()</code> only if
+ <code>Platform.isRunning()</code>.
+ </li>
+ <li><span class="label label-success">Added</span> The interface
+ <code>org.eclipse.sirius.business.api.migration.IMigrationParticipant</code> exposes a new method
+ <code>postXMLEndElement([..])</code> which is called during a migration operation. This method should be overridden by participants which have to hook the loading process after each end of XML tag. The corresponding abstract class
+ <code>org.eclipse.sirius.business.api.migration.AbstractMigrationParticipant</code> provides a default empty implementation.
+ </li>
+ <li><span class="label label-success">Added</span> A new class
+ <code>org.eclipse.sirius.common.tools.api.interpreter.JavaExtensionsManager</code> can now be used by langages interpreters to benefit from a consistent handling of Java extensions and support for loading Java services from the workspace.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.common.tools.api.interpreter.TypeName</code> has been introduced to represent in the codebase any type which was previously represented as a plain String.
+ </li>
+ <li><span class="label label-success">Added</span> A new interface
+ <code>org.eclipse.sirius.common.tools.api.interpreter.TypedValidation</code> has been introduced for
+ <code>IInterpreter</code> implementations able to provide richer information when validating an expression. This information is captured through a
+ <code>org.eclipse.sirius.common.tools.api.interpreter.ValidationResult</code> instance.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.common.tools.api.interpreter.VariableType</code> has been introduced to represent the possible types a variable can have in a Viewpoint specification model.
+ </li>
+ <li><span class="label label-success">Added</span> The utility class
+ <code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterContextUtils</code> has been introduced to factorize code related to managing
+ <code>IInterpreterContext</code> instances.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.business.api.dialect.description.MultiLanguagesValidator</code> has been introduced to provide a safe and more efficient way to switch to the proper
+ <code>IInterpreter</code> instance when validating expressions.
+ </li>
+ <li><span class="label label-success">Added</span> <span class="label label-danger">Removed</span> The class
+ <code>org.eclipse.sirius.common.tools.api.util.RefreshIdFactory</code> has been replaced with
+ <code>org.eclipse.sirius.common.tools.api.util.RefreshIdsHolder</code> which no longer rely on a global singleton but attach information to an EObject representing the current scope. This impacts
+ <code>org.eclipse.sirius.diagram.business.api.query.AbstractDNodeQuery</code> ,
+ <code>org.eclipse.sirius.common.tools.api.util.CartesianProduct</code> and
+ <code>org.eclipse.sirius.common.tools.api.util.EObjectCouple</code> which are now requiring now a
+ <code>RefreshIdsHolder</code> instance.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.common.tools.api.util.LazyCrossReferencer</code> now extends
+ <code>ECrossReferenceAdapterWithUnproxyCapability</code> and implements
+ <code>resolveProxyCrossReferences(Resource)</code>.
+ </li>
+ <li><span class="label label-info">Moved</span> The
+ <code>org.eclipse.sirius.common.tools.api.util.LazyCrossReferencer.enableResolve()</code> and
+ <code>disableResolve()</code> methods has been moved to
+ <code>SiriusCrossReferenceAdapter.enableResolveProxy()</code> and
+ <code>disableResolveProxy()</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The static method
+ <code>org.eclipse.sirius.common.tools.api.interpreter.DefaultInterpreterContextFactory.createInterpreterContext(...)</code> now requires a
+ <code>Map<String, VariableType></code> for the accessible variables instead of a
+ <code>Map<String, String></code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The methods
+ <code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterContext.getVariables()</code> and
+ <code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionQuery.getAvailableVariables()</code> are now returning a map containing
+ <code>VariableType</code> instances instead of encoded Strings.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterStatus.getTargetTypes()</code> no longer returns a list of encoded Strings but a
+ <code>VariableType</code> instance instead.
+ </li>
+ <li><span class="label label-warning">Deprecated</span> The method
+ <code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterContext.getTargetTypes()</code> has been deprecated in favor of
+ <code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterContext.getTargetType()</code> which returns a
+ <code>VariableType</code> instance instead of encoded Strings.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common.ui">Changes in
+ <code>org.eclipse.sirius.common.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> Classes from
+ <code>org.eclipse.sirius.common.ui.tools.api.dialog.quickoutline</code> packages are available in API to allow editor to provide quick outline feature easily.
+ </li>
+ <li><span class="label label-success">Added</span> The methods
+ <code>displaySyncExec(Runnable)</code> ,
+ <code>displayAsyncExec(Runnable)</code> and
+ <code>synchronizeWithUIThread()</code> have been added in class
+ <code>org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil</code> to encapsulate accesses to the current
+ <code>Display</code> instance.
+ </li>
+ <li><span class="label label-info">Moved</span> Extensions in
+ <code>plugin.xml</code> that provide UI functionalities have been moved to
+ <code>org.eclipse.sirius.common.ui.ext</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius2">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code> has been added to return a
+ <code>DRepresentationContainer</code> from the
+ <code>DAnalysis</code> parameter and the added
+ <code>DRepresentation</code>.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.business.api.migration.IMigrationParticipant.updateCreatedObject(EObject newObject, String loadedVersion)</code> has been added to update object values in VSM before loading this objects from XML file.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.tools.api.ui.RefreshEditorsPrecommitListener.disable()</code> has been added to disable the next refresh attempt in the current precommit loop iteration.
+ </li>
+ <li><span class="label label-success">Added</span> The new constant
+ <code>org.eclipse.sirius.business.api.helper.SiriusUtil.ENVIRONMENT_URI_SCHEME</code> declares environment URI scheme.
+ </li>
+ <li><span class="label label-success">Added</span> The new constant
+ <code>org.eclipse.sirius.business.api.helper.SiriusUtil.VIEWPOINT_ENVIRONMENT_RESOURCE_URI</code> declares
+ <code>environment:/viewpoint</code> resource URI.
+ </li>
+ <li><span class="label label-success">Added</span> The new constant
+ <code>org.eclipse.sirius.viewpoint.description.util.DescriptionResourceImpl.OPTION_SIRIUS_USE_URI_FRAGMENT_AS_ID</code> added to define a option to enable the use of a id map for odesign resource, id being uri’s fragment.
+ </li>
+ <li><span class="label label-success">Added</span> The query
+ <code>org.eclipse.sirius.business.api.query.EObjectQuery</code> has now a new constructor with an additional parameter, ECrossReferenceAdapter. This can be usefull if there is many calls to inverse references methods for the same Session. This avoids to get the semantic cross referencer from the EObject each time. This query also proposes a new method
+ <code>getInverseReferences(Set<EReference>)</code>.
+ </li>
+ <li><span class="label label-success">Added</span> There is a new capability on Dialect. This capability is to refresh only impacted elements concerned by a list of notifications. It is used, for example, to refresh the opened representations when the user chooses manual refresh mode. Each dialect that want to offer this capability must implement
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.refreshImpactedElements(DRepresentation, Collection<Notification>, IProgressMonitor)</code>. A default implementation that does nothing is done in
+ <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices</code>.
+ </li>
+ <li><span class="label label-success">Added</span> A new method has been added in the query
+ <code>org.eclipse.sirius.business.api.query.DAnalysisQuery</code> named
+ <code>getMainModels()</code>. This method returns a Set of the main model and the other non controlled models.
+ </li>
+ <li><span class="label label-success">Added</span> A new method has been added in
+ <code>org.eclipse.sirius.viewpoint.DAnalysis</code> named
+ <code>getSemanticResources()</code>. This method returns a list of
+ <code>org.eclipse.sirius.business.api.resource.ResourceDescriptor</code> which is a descriptor of the semantic resource.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.viewpoint.RGBValues</code> has been changed from an
+ <code>EClass</code> to an
+ <code>EDataType</code>, it is not an
+ <code>EObject</code> anymore.
+ </li>
+ <li><span class="label label-success">Added</span> The API
+ <code>org.eclipse.sirius.business.api.metamodel.helper.FontFormatHelper</code> has been added. It helps to update label format multi valued features.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.business.api.session.SessionListener.SEMANTIC_CHANGE</code> is no more send to
+ <code>SessionListener</code> and
+ <code>SessionManagerListener</code> listeners on save when a semantic resource is saved. Use a
+ <code>ResourceSyncClient</code> listener on
+ <code>ResourceSetSync</code> to have know if a semantic resource is saved.
+ </li>
+ <li><span class="label label-info">Modified</span> The default constructor has been changed in
+ <code>org.eclipse.sirius.tools.api.command.semantic.RemoveSemanticResourceCommand</code>.
+ <ul>
+ <li>The boolean value
+ <code>removeReferencingResources</code> has been added to indicate if the referencing resources are also to remove.
+ </li>
+ <li>The boolean value
+ <code>removeFromControlledResources</code> has been removed because controlled resources are managed internally.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-info">Modified</span> The boolean value
+ <code>removeReferencingResources</code> has been added in
+ <code>org.eclipse.sirius.business.api.session.Session.removeSemanticResource</code> method to indicate if the referencing resources are also to remove.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>getModels()</code> method in
+ <code>org.eclipse.sirius.viewpoint.DAnalysis</code> returns a non-modifiable list. Use
+ <code>getSemanticResources()</code> instead.
+ </li>
+ <li><span class="label label-info">Moved</span> The
+ <code>isBbocked()</code> and
+ <code>setBlocked()</code> methods on the
+ <code>org.eclipse.sirius.viewpoint.DAnalysisSessionEObject</code> EClass have been removed, as they were not actually used in the internal code.
+ </li>
+ <li><span class="label label-warning">Deprecated</span>
+ <code>org.eclipse.sirius.business.api.helper.task.ICommandTask.undo()/redo()</code> methods are deprecated because they are useless since undo/redo is managed by EMF Transaction.
+ </li>
+ <li><span class="label label-warning">Deprecated</span>
+ <code>org.eclipse.sirius.tools.api.command.IUndoableCommand</code> interface are deprecated because it is useless since undo/redo is managed by EMF Transaction.
+ </li>
+ <li><span class="label label-warning">Deprecated</span>
+ <code>org.eclipse.sirius.business.api.helper.task.TaskExecutor.undo()/redo()</code> methods are deprecated because they are useless since undo/redo is managed by EMF Transaction.
+ </li>
+ <li><span class="label label-danger">Removed</span> The
+ <code>org.eclipse.sirius.business.api.session.Session.createSemanticResource()</code> method has been removed. Use
+ <code>Session.addSemanticResource()</code> instead.
+ </li>
+ <li><span class="label label-danger">Removed</span> The
+ <code>ExtendedPackage</code>
+ <code>EDataType</code> which was defined in the
+ <code>http://www.eclipse.org/sirius/1.1.0</code> package was not actually used anywhere and has been removed.
+ </li>
+ <li><span class="label label-danger">Removed</span> The
+ <code>DView</code> methods
+ <code>getAllRepresentations()</code>,
+ <code>getReferencedRepresentations()</code> and
+ <code>getHiddenRepresentations()</code> have been removed:
+ <code>getReferencedRepresentations()</code> and
+ <code>getHiddenRepresentations()</code> were never actually used, making
+ <code>getAllRepresentations()</code> strictly equivalent to
+ <code>getOwnedRepresentations()</code>. Code that used
+ <code>getAllRepresentations()</code> can simply use
+ <code>getOwnedRepresentations()</code> instead.
+ </li>
+ <li><span class="label label-danger">Removed</span> The API
+ <code>org.eclipse.sirius.viewpoint.DSourceFileLink</code> has been removed.
+ </li>
+ <li><span class="label label-danger">Removed</span> The API
+ <code>org.eclipse.sirius.viewpoint.DNavigable</code> has been removed.
+ </li>
+ <li><span class="label label-danger">Removed</span> The API
+ <code>org.eclipse.sirius.viewpoint.DNavigationLink</code> has been removed.
+ </li>
+ <li><span class="label label-danger">Removed</span> The API
+ <code>org.eclipse.sirius.viewpoint.DValidable</code> has been removed.
+ </li>
+ <li><span class="label label-danger">Removed</span> The enum
+ <code>org.eclipse.sirius.viewpoint.NavigationTargetType</code> has been removed.
+ </li>
+ <li><span class="label label-danger">Removed</span> The API
+ <code>org.eclipse.sirius.viewpoint.DLabelled</code> has been removed.
+ </li>
+ <li><span class="label label-danger">Removed</span> The API
+ <code>org.eclipse.sirius.viewpoint.DContainer</code> has been removed.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui2">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.completeToolTipText(String, EObject, EStructuralFeature)</code> has been added to customize the tooltip displayed in the VSM editor by using the feature of the current object. The old method
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.completeToolTipText(String, EObject)</code> has been deprecated.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource</code> has been added. It allows developers to make their properties views CellEditor customizable by using the new extension point
+ <code>org.eclipse.sirius.ui.siriuspropertiescelleditor</code>
+ </li>
+ <li><span class="label label-success">Added</span> The interface
+ <code>org.eclipse.sirius.ext.emf.ui.ICellEditorProvider</code> has been added to allow clients to provide their own
+ <code>CellEditor</code> - in the Sirius semantic properties views – through the new extension point
+ <code>org.eclipse.sirius.ui.siriuspropertiescelleditor</code>.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.business.api.session.IEditingSession.detachEditor(DialectEditor, boolean)</code> has been added to choose whether we should revert the user changes when detaching the editor.
+ </li>
+ <li><span class="label label-success">Added</span> A
+ <code>org.eclipse.sirius.ui.tools.api.views.LockDecorationUpdater</code> is now available to add it on a
+ <code>org.eclipse.ui.navigator.CommonNavigator</code> to be refreshed when notifications are send to
+ <code>org.eclipse.sirius.ecore.extender.business.api.permission.IAuthorityListener</code>.
+ </li>
+ <li><span class="label label-success">Added</span> A new job
+ <code>org.eclipse.sirius.ui.tools.api.views.RefreshLabelImageJob</code> has been added to refresh the icon of specified elements on a
+ <code>org.eclipse.ui.navigator.CommonNavigator</code>.
+ </li>
+ <li><span class="label label-info">Moved</span> Extensions in
+ <code>plugin.xml</code> that provide UI functionalities have been moved to
+ <code>org.eclipse.sirius.ui.ext</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ecore.extender">Changes in
+ <code>org.eclipse.sirius.ecore.extender</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor.eRemoveInverseCrossReferences()</code> has been changed to return the list of changed objects by the inverse cross references removal.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.ecore.extender.business.api.accessor.IMetamodelExtender.eRemoveInverseCrossReferences()</code> has been changed to return the list of changed objects by the inverse cross references removal.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.ecore.extender.business.api.accessor.CompositeMetamodelExtender.eRemoveInverseCrossReferences()</code> has been changed to return the list of changed objects by the inverse cross references removal.
+ </li>
+ <li><span class="label label-danger">Removed</span> The exception
+ <code>org.eclipse.sirius.ecore.extender.IllegalURIException</code> has been removed. It was not actually thrown anywhere in the code.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.editor">Changes in
+ <code>org.eclipse.sirius.editor</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The static method
+ <code>org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider.bindPluginsCompletionProcessors(AbstractPropertySection, Text)</code> has been added. This method is very similar to
+ <code>org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider.bindCompletionProcessor(AbstractPropertySection, Text)</code>, the difference is that it binds the completion processors available in plugins to the text.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram">Changes in
+ <code>org.eclipse.sirius.diagram</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The
+ <code>org.eclipse.sirius.diagram.tools.api.command.ChangeLayerActivationCommand</code> has been added. This command was previously internal.
+ </li>
+ <li><span class="label label-success">Added</span> The new constant
+ <code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil.DIAGRAM_ENVIRONMENT_RESOURCE_URI</code> declares the
+ <code>environment:/diagram</code> resource URI.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.completeToolTipText(String, EObject, EStructuralFeature)</code> has been added to customize the tooltip displayed in the VSM editor by using the feature of the current object. The old method
+ <code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.completeToolTipText(String, EObject)</code> has been deprecated.
+ </li>
+ <li><span class="label label-success">Added</span> New methods have been added to
+ <code>org.eclipse.sirius.diagram.business.api.query.ContainerMappingQuery</code> to test the children presentation mode of the current
+ <code>ContainerMapping</code>:
+ <code>isVerticalStackContainer()</code>,
+ <code>isHorizontalStackContainer()</code>,
+ <code>isRegionContainer()</code> and
+ <code>isRegion()</code>.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.business.api.query.AbstractDNodeQuery</code> now requires a
+ <code>org.eclipse.sirius.common.tools.api.util.RefreshIdsHolder</code> to check for equality in the context of a refresh operation.
+ </li>
+ <li><span class="label label-danger">Removed</span> The
+ <code>DNodeList.lineWidth</code> attribute has been removed from the metamodel, the corresponding generated elements do not exist anymore:
+ <code>org.eclipse.sirius.diagram.DNodeList.getLineWidth()</code>,
+ <code>org.eclipse.sirius.diagram.DNodeList.setLineWidth()</code>,
+ <code>org.eclipse.sirius.diagram.DiagramPackage.DNODE_LIST__LINE_WIDTH</code>,
+ <code>org.eclipse.sirius.diagram.DiagramPackage.getDNodeList_LineWidth()</code>,
+ <code>org.eclipse.sirius.diagram.DiagramPackage.Literals.DNODE_LIST__LINE_WIDTH()</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.diagram.ComputedStyleDescriptionRegistry.cache</code> reference has been removed from the metamodel as it is no more useful, to limit memory consumed by computed
+ <code>StyleDescription</code> we directly look for them in the
+ <code>ComputedStyleDescriptionRegistry.computedStyleDescriptions</code> list.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> <span class="label label-info">Modified</span> The
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.ImageFigureWithAlpha</code> interface has been added to identify Figures having the capability to return an alpha value from a coordinate.
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractCachedSVGFigure</code> and
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractTransparentImage</code> now implement this new interface.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.locator.DBorderItemLocator.resetBorderItemMovedState()</code> has been added to allow to reset the state of
+ <code>borderItemHasMoved</code>. This method must be used carefully only in case where
+ <code>setConstraint(Rectangle)</code> is called to compute temporary a
+ <code>getValidLocation(Rectangle, IFigure, Collection, List)</code>, one time with a new value and just after with the old value.
+ </li>
+ <li><span class="label label-success">Added</span> The constant
+ <code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath.HIDDEN_LABEL_DECORATOR</code> has been added to represent the path of hidden label decorator used in the outline.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.diagram.ui.business.api.provider.DDiagramElementContainerLabelItemProvider</code> has been added to represent container and list labels as virtual nodes in the Show/Hide wizards.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.locator.DBorderItemLocator</code> did not take into account the rectangle size passed to
+ <code>getValidLocation</code>. To resolve that limitation, several protected methods that took a Point as location now take a Rectangle:
+ <ul>
+ <li>
+ <code>locateOnBorder(Point, int, int, IFigure, Collection<IFigure>, List<IFigure>)</code> now takes a
+ <code>Rectangle</code> instead a
+ <code>Point</code>:
+ <code>locateOnBorder(Rectangle, int, int, IFigure, Collection<IFigure>, List<IFigure>)</code>;
+ </li>
+ <li>
+ <code>locateOnSouthBorder</code>,
+ <code>locateOnNorthBorder</code>,
+ <code>locateOnWestBorder</code> and
+ <code>locateOnEastBorder</code> signatures is now
+ <code>(Rectangle, int, IFigure, Collection<IFigure>, List<IFigure>)</code>;
+ </li>
+ <li>
+ <code>locateOnParent</code> signature is now
+ <code>locateOnParent(Rectangle, int, IFigure)</code>;
+ </li>
+ <li>
+ <code>conflicts</code> signature is now
+ <code>conflicts(Rectangle, IFigure, Collection<IFigure>, List<IFigure>)</code>.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-info">Moved</span> The constant
+ <code>DiagramImagesPath.LINK_TO_VIEWPOINT_IMG</code> has been moved to
+ <code>org.eclipse.sirius.ui.tools.api.image.ImagesPath.LINK_TO_VIEWPOINT_IMG</code>. This is more coherent because the corresponding image is in core
+ <code>org.eclipse.sirius.common.ui</code> plugin.
+ </li>
+ <li><span class="label label-info">Moved</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.PinHelper</code> moved from
+ <code>org.eclipse.sirius.diagram.ui</code> plugin to
+ <code>org.eclipse.sirius.diagram</code> plugin, i.e.
+ <code>org.eclipse.sirius.diagram.tools.api.layout.PinHelper</code> with
+ <code>PinHelper.IsPinned(IDiagramElementEditPart)</code> removed in favor of
+ <code>PinHelper.IsPinned(DDiagramElement)</code>.
+ </li>
+ <li><span class="label label-info">Moved</span> External java actions declared as
+ <code>org.eclipse.sirius.diagram.ui.tools.internal.actions.pinning.pinElementsActionId</code> and
+ <code>org.eclipse.sirius.diagram.ui.tools.internal.actions.pinning.unpinElementsActionId</code> are now declared as
+ <code>org.eclipse.sirius.diagram.tools.internal.actions.pinning.pinElementsActionId</code> and
+ <code>org.eclipse.sirius.diagram.tools.internal.actions.pinning.unpinElementsActionId</code> in
+ <code>org.eclipse.sirius.diagram</code> plugin.
+ </li>
+ <li><span class="label label-info">Moved</span> Extensions in
+ <code>plugin.xml</code> that provides UI functionalities have been moved to
+ <code>org.eclipse.sirius.diagram.ui.ext</code>.
+ </li>
+ <li><span class="label label-warning">Deprecated</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.util.GMFNotationHelper.findGMFDiagram()</code> became deprecated in favor of
+ <code>DiagramCreationUtil.findAssociatedGMFDiagram()/getAssociatedGMFDiagram()</code>
+ </li>
+ <li><span class="label label-danger">Removed</span> The
+ <code>org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramEdgeEditPart.getEAdapterStrokeColor</code> method has been removed as the corresponding adapter was uneffective and is no more used and installed on the edge edit parts.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.InvisibleResizableCompartmentFigure</code> class has been removed, use a
+ <code>org.eclipse.gmf.runtime.diagram.ui.figures.ShapeCompartmentFigure</code> with a
+ <code>org.eclipse.draw2d.MarginBorder</code> or a null border instead.
+ </li>
+ <li><span class="label label-danger">Removed</span> The method
+ <code>org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramElementEditPart.getEAdapterSemanticElements()</code> has been removed (and all its implementations). For manual refresh, this adapter has been replaced with the
+ <code>RefreshEditorsPrecommitListener</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span> The method
+ <code>org.eclipse.sirius.diagram.ui.part.SiriusDiagramEditorUtil.findView()</code> has been deleted in flavor of
+ <code>SiriusGMFHelper.getGmfView()</code>. If you was using
+ <code>SiriusDiagramEditorUtil.findView()</code> with a semantic element in parameter, retrieve before the corresponding
+ <code>DDiagram</code> or
+ <code>DDiagramElement</code> and use
+ <code>SiriusGMFHelper.getGmfView(DSemanticDecorator)</code> from this last to get the corresponding GMF View. To get a
+ <code>DDiagram</code> or
+ <code>DDiagramElement</code> from a semantic element, you can use
+ <code>EObjectQuery.getInverseReferences(EReference)</code> API, see
+ <code>org.eclipse.sirius.diagram.ui.business.api.view.ValidateAction.getDSemanticDecorator()</code> for an example.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.table">Changes in
+ <code>org.eclipse.sirius.table</code>
+ </h4>
+ <ul>
+ <li><span class="label label-danger">Removed</span> The methods
+ <code>org.eclipse.sirius.table.business.api.helper.TableHelper.getColumn()</code> have been removed because they are not useful,
+ <code>TableHelper.getColumn(DLine, int)</code> can be replaced by
+ <code>DTable.getColumns().get(int)</code> and
+ <code>TableHelper.getColumn(DTable, String)</code> should not be used as we can have several columns with a same featureName.
+ </li>
+ <li><span class="label label-danger">Removed</span> The method
+ <code>org.eclipse.sirius.table.business.api.helper.TableHelper.getEClassifier(DLine, int)</code> has been removed because it is not useful, use
+ <code>TableHelper.getEClassifier(line, column)</code> instead.
+ </li>
+ <li><span class="label label-danger">Removed</span> The method
+ <code>org.eclipse.sirius.table.business.api.helper.TableHelper.getTableElement(DTableElementStyle)</code> has been removed because it is not useful,
+ <code>DTableElementStyle.eContainer()</code> can be used instead.
+ </li>
+ <li><span class="label label-danger">Removed</span> The methods
+ <code>org.eclipse.sirius.table.business.api.helper.TableHelper.getCell(DCellStyle)</code> has been removed because they are not useful, use
+ <code>DCellStyle.eContainer</code> instead.
+ </li>
+ <li><span class="label label-danger">Removed</span> The methods
+ <code>org.eclipse.sirius.table.business.api.helper.TableHelper.getCell(RGBValues)</code> has been removed,
+ <code>RGBValues</code> is not an
+ <code>EObject</code> anymore. The method was looking in the eContainer hierarchy of a an instance of
+ <code>RGBValues</code> to find the parent
+ <code>DCell</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span> The method
+ <code>org.eclipse.sirius.table.business.api.helper.TableHelper.getCreateCellTool(DCell)</code> has been removed because it is not useful, use
+ <code>TableHelper.getCreateCellTool(line, column)</code> instead.
+ </li>
+ <li><span class="label label-danger">Removed</span> The method
+ <code>org.eclipse.sirius.table.business.api.helper.TableHelper.getCellDefaultForegroundColor()</code> has been removed because it is not useful, use
+ <code>EnvironmentSystemColorFactory.getDefault().getSystemColorDescription("gray")</code> instead.
+ </li>
+ <li><span class="label label-danger">Removed</span> The interface
+ <code>DTableElementUpdater</code> has been removed from metamodel. It is now unnecessary. This interface was here to provide operations to activate and deactivate the listeners, that have been replaced by the
+ <code>RefreshImpactedElementsCommand</code> launched from
+ <code>RefreshEditorsPrecommitListener</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.table.ui">Changes in
+ <code>org.eclipse.sirius.table.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Moved</span> Extensions in
+ <code>plugin.xml</code> that provide UI functionalities have been moved to
+ <code>org.eclipse.sirius.table.ui.ext</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tree">Changes in
+ <code>org.eclipse.sirius.tree</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.refreshContent(boolean fullRefresh)</code> has been added to allow full refresh from a specified
+ <code>DTreeItem</code>.
+ </li>
+ <li><span class="label label-success">Added</span> The EMF Command
+ <code>org.eclipse.sirius.tree.business.api.command.DTreeItemLocalRefreshCommand</code> has been added to call
+ <code>DTreeItemUserInteraction.refreshContent(boolean fullRefresh)</code> in an EMF Command.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.expand(IProgressMonitor)</code> has been added similar to
+ <code>DTreeItemUserInteraction.expand()</code> but taking a
+ <code>IProgressMonitor</code> in parameter to have progression on
+ <code>DTreeItem</code> expanding.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.collapse(IProgressMonitor)</code> has been added similar to
+ <code>DTreeItemUserInteraction.collapse()</code> but taking a
+ <code>IProgressMonitor</code> in parameter to have progression on
+ <code>DTreeItem</code> collapsing.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.expandAll(IProgressMonitor)</code> has been added similar to
+ <code>DTreeItemUserInteraction.expandAll()</code> but taking a
+ <code>IProgressMonitor</code> in parameter to have progression on
+ <code>DTreeItem</code> expanding.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.refreshContent(boolean, IProgressMonitor)</code> has been added similar to
+ <code>DTreeItemUserInteraction.refreshContent(boolean)</code> but taking a
+ <code>IProgressMonitor</code> in parameter to have progression on
+ <code>DTreeItem</code> expanding.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>DTreeUserInteraction.expand(IProgressMonitor)</code> has been added similar to
+ <code>org.eclipse.sirius.tree.business.api.interaction.DTreeUserInteraction.expand()</code> but taking a
+ <code>IProgressMonitor</code> in parameter to have progression on
+ <code>DTreeItem</code> expanding.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>DTreeUserInteraction.expandAll(IProgressMonitor)</code> has been added similar to
+ <code>org.eclipse.sirius.tree.business.api.interaction.DTreeUserInteraction.expandAll()</code> but taking a
+ <code>IProgressMonitor</code> in parameter to have progression on
+ <code>DTreeItem</code> expanding.
+ </li>
+ <li><span class="label label-info">Modified</span> The constructor
+ <code>org.eclipse.sirius.tree.business.api.command.DTreeItemExpansionChangeCommand.DTreeItemExpansionChangeCommand(GlobalContext, TransactionalEditingDomain, DTreeItem, IProgressMonitor, boolean)</code> has an additional
+ <code>IProgressMonitor</code> parameter.
+ </li>
+ <li><span class="label label-danger">Removed</span> The interface
+ <code>DTreeElementUpdater</code> has been removed from metamodel. It is now unnecessary. This interface was here to provide operations to activate and deactivate the listeners, that have been replaced by the
+ <code>RefreshImpactedElementsCommand</code> launched from
+ <code>RefreshEditorsPrecommitListener</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tree.ui">Changes in
+ <code>org.eclipse.sirius.tree.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.tree.ui.properties.section.common.AbstractDTreePropertySection.update(final TransactionalEditingDomain domain, final Notification notification)</code> has been replaced by
+ <code>org.eclipse.sirius.tree.ui.properties.section.common.AbstractDTreePropertySection.update(ResourceSetChangeEvent)</code> to allow to update only once per ResourceSetChangeEvent and let subclasses make additional filtering on the notifications.
+ </li>
+ <li><span class="label label-info">Modified</span> The return type of the method
+ <code>org.eclipse.sirius.tree.ui.properties.section.common.AbstractDTreePropertySection.getEventListener()</code> has been changed from
+ <code>DemultiplexingListener</code> to
+ <code>ResourceSetListener</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The type of
+ <code>org.eclipse.sirius.tree.ui.properties.section.common.AbstractDTreePropertySection.eventListener</code> has been changed from
+ <code>DemultiplexingListener</code> to
+ <code>ResourceSetListener</code>.
+ </li>
+ <li><span class="label label-info">Moved</span> Extensions in
+ <code>plugin.xml</code> that provide UI functionalities have been moved to
+ <code>org.eclipse.sirius.tree.ui.ext</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.synchronizer2">Changes in
+ <code>org.eclipse.sirius.synchronizer</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.synchronizer.ModelToModelSynchronizer.update(CreatedOutput, boolean, IProgressMonitor)</code> has been added similar to
+ <code>org.eclipse.sirius.synchronizer.ModelToModelSynchronizer.update(CreatedOutput, boolean)</code> but taking a
+ <code>IProgressMonitor</code> in parameter to have progression on synchronization.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.synchronizer.SemanticPartitionInvalidator.hasFastResult(EObject, SemanticPartition, CreatedOutput)</code> now takes a
+ <code>CreatedOutput</code> as additional parameter element to allow to have the parent output element.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.synchronizer.SemanticPartition.evaluate(EObject, CreatedOutput)</code> now takes a
+ <code>CreatedOutput</code> as additional parameter. This
+ <code>CreatedOutput</code> represents the output model element which will become the parent of the elements created from the evaluation result.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.swt">Changes in
+ <code>org.eclipse.sirius.ext.swt</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Moved</span> The
+ <code>org.eclipse.sirius.ext.swt.ImageFileFormat</code> class has been moved in
+ <code>org.eclipse.sirius.common.tools.api.resource</code> (in the
+ <code>org.eclipse.sirius.common</code> plugin).
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.e3.ui">Changes in
+ <code>org.eclipse.sirius.ext.e3.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The classes
+ <code>org.eclipse.sirius.ext.e3.ui.dialogs.FilteredTree</code> and
+ <code>org.eclipse.sirius.ext.e3.ui.dialogs.PatternFilter</code> have been added in order to have the latest functionalites of
+ <code>org.eclipse.ui.dialogs.FilteredTree</code> with Eclipse Juno.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.emf.tx">Changes in
+ <code>org.eclipse.sirius.ext.emf.tx</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.ext.emf.tx.DelegatingValidateEditSupport</code> has been added to be able to have a
+ <code>ValidateEditSupport</code> which delegate to an existing
+ <code>ValidateEditSupport</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.eef.adapters">Changes in
+ <code>org.eclipse.sirius.eef.adapters</code>
+ </h4>
+ <p>This plug-in now requires the version 1.5.0 of
+ <code>org.eclipse.emf.eef.runtime</code> bundle.
+ </p>
+ <ul>
+ <li><span class="label label-success">Added</span> The new class
+ <code>org.eclipse.sirius.eef.components.SiriusAwarePropertiesEditingComponent</code> can be used as root class of the generated EEF components to greatly improve performances when using both EEF properties views with Sirius representations. Refer to
+ <em>Using the Extended Editing Framework with Sirius</em> documentation for details.
+ </li>
+ <li><span class="label label-info">Modified</span>The following packages are set to
+ <code>x-internal:=true</code>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.eef.actions</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.eef.adapters</code>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in
+ <code>org.eclipse.sirius.tests.junit.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper.setReadOnlyStatus(boolean, IResource...)</code> has been added to change the read only status of the given resources.
+ </li>
+ <li><span class="label label-success">Added</span> The
+ <code>warnings</code> member variable has been added to
+ <code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> to allow the recording of warning logs. Methods
+ <code>doesAWarningOccurs()</code>,
+ <code>clearWarnings()</code>,
+ <code>setWarningCatchActive(boolean)</code>,
+ <code>isWarningCatchActive()</code> and
+ <code>getWarningLoggersMessage()</code> have also been added to manage the
+ <code>warnings</code> member variable in the same way as the existing
+ <code>errors</code> member variable.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.tests.support.api.SiriusTestCase.loadModeler(URI, EditingDomain)</code> has been added to load a VSM resource and make the
+ <code>Viewpoints</code> it defines accessible via the
+ <code>SiriusTestsCase.viewpoints</code> field.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.tests.support.api.ImageComposer</code> has been added to the test API to do assertions on image decorators.
+ </li>
+ <li><span class="label label-success">Added</span> The enum
+ <code>SiriusTestCase.ResourceURIType</code> and the method
+ <code>SiriusTestCase.toURI(final String, ResourceURIType)</code> have been added to allow choosing the type of URI created (
+ <code>platform:</code> or
+ <code>plugin:</code>).
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>SiriusTestCase.genericSetUp(List<URI>, List<URI>, boolean, URI)</code> method has been set to protected so that it can be called from concrete test cases. This method allows initializing session.
+ </li>
+ <li><span class="label label-info">Moved</span> The class
+ <code>TreeItemLabelFontFormatQuery</code> was moved into
+ <code>org.eclipse.sirius.tests.support.api</code> (from
+ <code>org.eclipse.sirius.tests.swtbot.support.api.widget</code>), as it can be used in non-SWTBot tests..
+ </li>
+ <li><span class="label label-warning">Deprecated</span> The method
+ <code>org.eclipse.sirius.tests.support.api.SiriusDiagramTestCase.setReadOnly(IFile)</code> has been deprecated,
+ <code>org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper.setReadOnlyStatus(boolean, IResource...)</code> can be used instead.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support2">Changes in
+ <code>org.eclipse.sirius.tests.swtbot.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The
+ <code>warnings</code> member variable has been added to
+ <code>org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase</code> to allow the recording of warning logs. Methods
+ <code>doesAWarningOccurs()</code>,
+ <code>setWarningCatchActive(boolean)</code>,
+ <code>isWarningCatchActive()</code> and
+ <code>getWarningLoggersMessage()</code> have also been added to manage the
+ <code>warnings</code> member variable in the same way as the existing
+ <code>errors</code> member variable.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.getDRepresentation()</code> has been added to return the
+ <code>org.eclipse.sirius.viewpoint.DRepresentation</code> instance available in the diagram editor.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase.getSectionButton()</code> now only takes the button’s tooltip instead of a numerical position index and the tooltip.
+ </li>
+ <li><span class="label label-info">Modified</span> The methods
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusHelper.selectPropertyTabItem(String)</code> now returns a
+ <code>boolean</code> that is true when the property tab item is found, false otherwise.
+ </li>
+ <li><span class="label label-info">Moved</span> The class
+ <code>TreeItemLabelFontFormatQuery</code> was moved into
+ <code>org.eclipse.sirius.tests.support.api</code> (from
+ <code>org.eclipse.sirius.tests.swtbot.support.api.widget</code>), as it can be used in non-SWTBot tests..
+ </li>
+ <li><span class="label label-warning">Deprecated</span> The methods
+ <code>org.eclipse.sirius.tests.swtbot.support.api.business.UIPerspective.deleteProject(UIProject)</code> and
+ <code>org.eclipse.sirius.tests.swtbot.support.api.business.UIPerspective.deleteProject(String)</code> have been deprecated,
+ <code>org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper.setReadOnlyStatus(boolean, IResource...)</code> can be used instead.
+ </li>
+ </ul>
+ <h4 id="Newplugins">New plug-ins</h4>
+ <p>The following UI plug-ins has been added:</p>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.ext</code>
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.common.ui.ext</code>
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.ext</code>
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.table.ui.ext</code>
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tree.ui.ext</code>
+ </li>
+ </ul>
+ <p>These plug-ins own the extension definitions related to perspective, views, newWizard, menus, contextual menus, editors and preference pages that were previously in
+ <code>org.eclipse.sirius.xxx.ui</code> plug-ins.
+ <br/>Now, downstream projects can define features that do not contain
+ <code>org.eclipse.sirius.xxx.ui.ext</code>, allowing them not have all that functionalities they may not want.
+ </p>
+ <h2 id="sirius2.0.0">Changes in Sirius 2.0.0</h2>
+ <h3 id="UserVisibleChanges3">User-Visible Changes</h3>
+ <ul>
+ <li>It is now possible to select element that intersects the selection rectangle and not that is completely contained by the selection rectangle. This new behavior is enabled when user selects elements from right to left. The normal mode (previous mode) remains when the user selects elements from left to right.</li>
+ <li>The edges appearance is now kept, as much as possible, when one of its extremity is moved. A move of an extremity should move only the closest segment of the edge.</li>
+ <li>The edges appearance is kept as much as possible when a node (container or not) is moved. A move of a node now impacts only the closest segment of the linked edges.</li>
+ </ul>
+ <p>
+ <img border="0" src="images/moveNode-edgeImpact-changedBehavior.gif"/>
+ </p>
+ <ul>
+ <li>When a node, container or not, is resized to the left, upwards, or both, the location of its children (elements inside a container and border nodes) is not changed. It is possible to retrieve the previous behavior by pressing the F3 function key during the resize.</li>
+ </ul>
+ <p>
+ <img border="0" src="images/containerResize-changedBehavior.gif"/>
+ </p>
+ <ul>
+ <li>The “snap to shapes” is now enabled by default (see
+ <em>Sirius > Sirius Diagram > Rulers and Grid</em> preference page). This is true only for new diagrams. The existing diagrams are not impacted.
+ </li>
+ <li>The “Navigate” top-level contextual menu entry with mixed actions for creating new representations and opening existing ones has been changed by two top-level menus:
+ <ul>
+ <li>One named “New”, which lists only the available actions to create new representations on the selected element.</li>
+ <li>One named “Open”, which lists only the existing representations on the selected element. </li>
+ </ul>
+ </li>
+ <li>When a shape is resized (no matter the direction), the edge(s) connection location (toward or from this one) is kept. Before that, edges connections moved according to the ratio of the resizing.</li>
+ </ul>
+ <p>Example with this initial state before resizing:
+ <br/>
+ <img border="0" src="images/shapeResize1.png"/>
+ <br/>Result after resizing without this feature (the edges have moved):
+ <br/>
+ <img border="0" src="images/shapeResize2.png"/>
+ <br/>Result after resizing with this feature (the edges keep the same location):
+ <br/>
+ <img border="0" src="images/shapeResize3.png"/>
+ </p>
+ <ul>
+ <li>There is now the possibility to distribute the selected shapes (see
+ <a href="user/diagrams/Diagrams.html#distribute">Sirius User Manual/Diagrams/Features Overview/Distribute elements</a> for more details):
+ <ul>
+ <li>Distribute gaps horizontally</li>
+ <li>Distribute centers horizontally</li>
+ <li>Distribute gaps vertically</li>
+ <li>Distribute centers vertically</li>
+ </ul>
+ </li>
+ <li>The end user can now remove all bend-points between the two edge ends. This action is available on edge context menu “Remove Bend-points” or by using the shortcut “Ctrl” + “Shift” + “-”.</li>
+ <li>Reconnection of an edge will only now move the minimum necessary bendpoints instead of reseting it to default.</li>
+ <li>A new action has been added to reset the diagram (or container) origin: the diagram (or container) bounds (the rectangle formed by the highest, the leftmost, the lowest and the rightmost children elements) can have a negative origin or can be shifted toward the bottom-right with a blank zone at the top-left. This action aims to move all diagram (or container) elements so that the it retrieves its origin while keeping elements layout.</li>
+ </ul>
+ <h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
+ <ul>
+ <li>The specifier can now choose to hold the edge ends toward the center of the source, target or both. New fields within the “advance” tab of EdgeStyle description have been added to choose for which source or target mappings an edge should be centered. See
+ <a href="specifier/diagrams/Diagrams.html#edges_styles">Edges Styles > Edge Centering</a> in the specifier manual for more details.
+ </li>
+ <li>When creating a new Viewpoint Specification Project using the supplied wizard:
+ <em>New > Viewpoint Specification Project</em>, the VSM name is now given according to the project name. If the project name is suffixed with “design”, the VSM name is provided by the last word before this suffix. Otherwise, the VSM name is given by the last word of the project name.
+ </li>
+ <li>“Lozenge” is replaced by “Diamond” in diagram style.</li>
+ </ul>
+ <h3 id="APIChanges">API Changes</h3>
+ <h4 id="Changesinorg.eclipse.sirius3">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.business.api.session.ViewpointSelector</code> class has been added, with easy-to-use methods to select/deselect viewpoint in a given session.
+ </li>
+ <li>The
+ <code>VIEWPOINT_REGISTRY_INITIAL_SIZE</code> preference and
+ <code>VIEWPOINT_REGISTRY_INITIAL_SIZE_DEFAULT_VALUE</code> default value has been removed from
+ <code>org.eclipse.sirius.tools.api.preferences.DCorePreferences</code>.
+ </li>
+ <li>The method
+ <code>org.eclipse.sirius.business.api.query.DRepresentationQuery.isDanglingRepresentation()</code> has been added to introduce the possibility to check if a representation is a dangling representation, ie. if its a DSemanticDecorator, its target is null or does not belong to a session.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ecore.extender.business.api.permission.exception.LockedInstanceException</code> now can take several EObjects in constructor and a method
+ <code>LockedInstanceException.getLockedElements()</code> has been added to get all EObjects put in constructor.
+ </li>
+ </ul>
+ <p>
+ <code>org.eclipse.sirius.tools.api.command.InvalidPermissionCommand</code> now can take several EObjects in constructor to throw a
+ <code>LockedInstanceException</code> with several EObjects.
+ </p>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.business.api.helper.task.AbstractDeleteDRepresentationElementTask</code> class has been renamed into
+ <code>DeleteEObjectTask</code>.
+ </li>
+ <li>The interface
+ <code>org.eclipse.sirius.tools.api.command.listener.IChangeListener</code> and all classes related to this mechanism (
+ <code>ChangeListenerFactory</code>,
+ <code>TriggerOperation</code>) have been removed as this mechanism proves to be inefficient. It can be replaced by a pre/post commit listener or a
+ <code>org.eclipse.sirius.business.api.session.ModelChangeTrigger</code>
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.tools.api.ui.IExternalAction2</code> interface has been removed. It was created to disable some
+ <code>IChangeListener</code> when the action indicates it will not delete elements.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.refresh(DRepresentation, boolean, IProgressMonitor</code> has been added to specify if we want partial refresh or not. By default partial refresh is done. full refresh is only implements for tree dialect.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.refresh(DRepresentation, IProgressMonitor)</code> has been added to call by default
+ <code>DialectServices.refresh(DRepresentation, false, IProgressMonitor)</code> to do a partial refresh.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand.RefreshRepresentationsCommand(TransactionalEditingDomain, boolean, IProgressMonitor, DRepresentation...)</code> and
+ <code>RefreshRepresentationsCommand(TransactionalEditingDomain, boolean, IProgressMonitor, Collection<DRepresentation>)</code> constructors has been added to specify a partial refresh or a full refresh.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.dialect.DRepresentationNotificationFilter</code> has been added to have
+ </li>
+ </ul>a common precommit/postcommit notifications filter to tree/table dialect.
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.tools.api.profiler.SiriusTasksKey.CHANGE_SWT_LINE_COLAPSE_STATE_KEY</code> constant has been deprecated in favor of
+ <code>SiriusTasksKey.CHANGE_SWT_LINE_COLLAPSE_STATE_KEY</code> to fix a typo.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.color.AbstractColorUpdater.DEFAULT_RED_VALUE/DEFAULT_GREEN_VALUE/DEFAULT_BLUE_VALUE</code> constants have been added to have access to default
+ <code>RGBValues</code>'s values. This is used during refresh when there isn’t any
+ <code>ColorDescription</code>, for example in tree dialect where background color definition is optional.
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.business.api.tool.ToolFilterDescriptionListener.ToolFilterDescriptionListener()</code> constructor now takes an
+ <code>IInterpreter</code> as additional parameter to capture the current interpreter and avoid calls to the
+ <code>IInterpreterRegistry</code> for each evaluation of the tool filter expressions.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.query.AirdResourceQuery.getAirDCrossReferenceAdapter()</code> and
+ <code>org.eclipse.sirius.business.internal.resource.AirdCrossReferencerAdapter</code> have been removed. The adapter was here to customize GMF’s own
+ <code>org.eclipse.gmf.runtime.emf.core.util.CrossReferenceAdapter</code>. However considering the way Sirius uses GMF, this adapter is not needed.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui3">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li>In
+ <code>org.eclipse.sirius.ui.business.api.session.UserSession</code>, the methods
+ <code>selectSirius()</code>,
+ <code>selectOnlySirius()</code> and
+ <code>findSiriusByName()</code> have been renamed into
+ <code>selectViewpoint()</code>,
+ <code>selectOnlyViewpoint()</code> and
+ <code>findViewpointByName()</code> to correct a wrong rebranding.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common3">Changes in
+ <code>org.eclipse.sirius.common</code>
+ </h4>
+ <ul>
+ <li>The method
+ <code>org.eclipse.sirius.common.tools.api.resource.ResourceSetSync.getResourceSetSync(TransactionalEditingDomain)</code> has been added to look for a
+ <code>ResourceSetSync</code> without creating a new one if no synchronizer currently exists.
+ </li>
+ <li>The class
+ <code>org.eclipse.sirius.common.tools.api.util.SmartAdapter</code> has been removed as this mechanism proves to be inefficient. The only user of this mechanism was the
+ <code>org.eclipse.sirius.tools.api.command.listener.IChangeListener</code> which has also been removed.
+ </li>
+ <li>The class
+ <code>org.eclipse.sirius.common.tools.api.ecore.WorkspaceEPackageRegistry</code> has been moved to the
+ <code>org.eclipse.sirius.editor</code> plugin.
+ <code>org.eclipse.sirius.common.tools.DslCommonPlugin.getWorkspaceEPackageRegistry</code> has been removed. The same method has been added in
+ <code>org.eclipse.sirius.editor.editorPlugin.SiriusEditorPlugin</code>.
+ </li>
+ <li>A new class
+ <code>org.eclipse.sirius.common.tools.api.resource.ResourceMigrationMarker</code> has been introduced for adopters. This marker can be attached to a Resource in order to indicate that some automatic migration
+ <strong>might</strong> have change the structure of the model during the loading (with no isModified flag). Sirius will then use this information to consider saving the file even if there is no logical change.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common.ui2">Changes in
+ <code>org.eclipse.sirius.common.ui</code>
+ </h4>
+ <ul>
+ <li>The method
+ <code>org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil.addSelectionListener(IWorkbenchPart, ISelectionListener)</code> has been added to register a new selection listener to the site for the workbench part. This method looks for a
+ <code>ISelectionService</code> by calling
+ <code>IServiceLocator.getService()</code> on the site.
+ </li>
+ <li>The method
+ <code>org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil.removeSelectionListener(IWorkbenchPart, ISelectionListener)</code> has been added to unregister an existing selection listener from site for the workbench part. This method looks for a
+ <code>ISelectionService</code> by calling
+ <code>IServiceLocator.getService()</code> on the site.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in
+ <code>org.eclipse.sirius.diagram</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.diagram.ui.business.api.view.refresh</code> package and all its content has been move into the
+ <code>org.eclipse.sirius.diagram</code> plug-in, under the name
+ <code>org.eclipse.sirius.diagram.business.api.view.refresh</code>.
+ </li>
+ <li>A new extension point
+ <code>org.eclipse.sirius.diagram.canonicalSynchronizerFactoryOverride</code> has been defined. Its only intended implementer is the
+ <code>org.eclipse.sirius.diagram.ui</code> plug-in. It is used by the diagram dialect’s core to delegate to the UI plug-in the canonical synchronizer logic, which depends on the UI.
+ </li>
+ <li>In
+ <code>org.eclipse.sirius.diagram.business.api.refresh.CanonicalSynchronizer</code>, a new method
+ <code>postCreation()</code> has been added. It is called exactly once, right after a diagram has been created and synchronized the first time.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.description.style.EdgeStyleDescription</code> metamodel class has three more features:
+ <code>centeredSourceMappings</code>,
+ <code>centeredTargetMappings</code> and
+ <code>AlwaysCenter</code>. Those features let the specifier determine for which mappings the edge source/target should be centered or whether the source/target should be systematically centered. The
+ <code>endsCentering</code> values are restricted by the new
+ <code>org.eclipse.sirius.diagram.description.CenteringStyle</code> enumeration.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.EdgeStyle</code> metamodel class has now an attribute
+ <code>centered</code> of type
+ <code>org.eclipse.sirius.diagram.description.CenteringStyle</code>, to determine whether the edge target or source ends should be centered.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.diagram.ui.business.api.view.refresh</code> package and all its content has been move into the
+ <code>org.eclipse.sirius.diagram</code> plug-in, under the name
+ <code>org.eclipse.sirius.diagram.business.api.view.refresh</code>.
+ </li>
+ <li>The method
+ <code>org.eclipse.sirius.diagram.ui.business.internal.query.DNodeContainerQuery.getDefaultDimension()</code> has been added to compute the default size of a DNodeContainer.
+ </li>
+ <li>The parameter
+ <code>additionalFiguresForConflictDetection</code> has been added to several methods of
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.locator.DBorderItemLocator</code>. This parameter is used in case of simultaneous border nodes moves. This list corresponds to the already known border nodes feedbacks. They are used to detect conflicts with other moved nodes.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.business.api.query.ConnectionEditPartQuery</code> now provides two new methods
+ <code>isEdgeWithRectilinearRoutingStyle()</code> and
+ <code>isEdgeWithObliqueRoutingStyle()</code> that respectively checks if an edge has a rectilinear routing style or an oblique routing style.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.business.api.query.ConnectionQuery</code> now provides two new methods
+ <code>getAbsoluteBendpointsConstraint()</code> and
+ <code>getRelativeBendpointsConstraint()</code> that returns an option of list of
+ <code>Bendpoint</code> of a connection whether they are respectively
+ <code>AbsoluteBendpoint</code> or
+ <code>RelatveBendpoint</code>.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.business.api.query.EdgeQuery</code> also provides two new methods
+ <code>isEdgeWithRectilinearRoutingStyle()</code> and
+ <code>isEdgeWithObliqueRoutingStyle()</code> that respectively checks if an edge has a rectilinear routing style or an oblique routing style.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.requests.DistributeRequest</code>: A new
+ <code>ChangeBoundsRequest</code> to manage distribution of shapes.
+ </li>
+ <li>A constant
+ <code>REQ_DISTRIBUTE</code> has been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.requests.RequestConstants</code> to identify the new type of request,
+ <code>DistributeRequest</code>.
+ </li>
+ <li>Constants have been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code> for the new drop down menu in tabbar and for the four new distribute actions.
+ </li>
+ <li>Constants have been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath</code> for the icon path of the four new distribute actions.
+ </li>
+ <li>A new method has been added in
+ <code>org.eclipse.sirius.diagram.ui.business.api.view.SiriusLayoutDataManager</code> to retrieve the opposite edge layout data of another edge layout data. An edge layout data stored in the incomingEdgeLayoutDatas ref of its parent data can have an opposite edge layout data in the outgoingEdgeLayoutDatas of the other ends.
+ </li>
+ <li>A Constant
+ <code>org.eclipse.sirius.diagram.ui.tools.api.requests.RequestConstants.REQ_RESET_ORIGIN</code> has been added to identify requests to get the ResetOrigin command.
+ </li>
+ <li>A new method
+ <code>org.eclipse.sirius.diagram.ui.business.api.query.NodeQuery.isContainer()</code> has been added to test whether the GMF node visualID corresponds to a ContainerEditPart.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tree.ui2">Changes in
+ <code>org.eclipse.sirius.tree.ui</code>
+ </h4>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.tree.ui.business.api.helper.TreeUIHelper.toContentHTMl()</code> has changed of behavior: refresh of
+ <code>DTree</code> is now partial, i.e. not done for children of collapsed
+ <code>DTreeItemContainer</code>. Consequently code calling
+ <code>TreeUIHelper.toContentHTMl()</code> must do a full refresh if children of collapsed
+ <code>DTreeItemContainer</code> must be displayed in returned HTML.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree.ui.business.api.helper.TreeUIHelper.toTreeDescriptor()</code> same as for
+ <code>TreeUIHelper.toContentHTMl()</code>
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tree2">Changes in
+ <code>org.eclipse.sirius.tree</code>
+ </h4>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.tree.business.api.interaction.DTreeUserInteraction.refreshContent(boolean, IProgressMonitor)</code> has been added to specify if we want partial refresh or not.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree.business.api.command.DTreeItemExpansionChangeCommand</code> has been added to execute an expansion/collapse of
+ <code>DTreeItem</code>. On expansion a refresh of children is done.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.synchronizer3">Changes in
+ <code>org.eclipse.sirius.synchronizer</code>
+ </h4>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.synchronizer.CreatedOutput.synchronizeChildren()</code> has been added to allow doing a partial refresh of tree, i.e. to not refresh children of collapsed tree item.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.synchronizer.ModelToModelSynchronizer.update(CreatedOutput, boolean)</code> has been added to specify if we want partial refresh or not.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ecore.extender2">Changes in
+ <code>org.eclipse.sirius.ecore.extender</code>
+ </h4>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.ecore.extender.business.api.accessor.IMetamodelExtender.eRemoveInverseCrossReferences(EObject, ECrossReferenceAdapter, EReferencePredicate)</code> has been added as a way to remove the inverse cross references without removing an
+ <code>EObject</code> from its container. For example it can be used to avoid the dangling references to an indirectly detached object without removing it from its already detached container and avoid additional REMOVE notifications. The method has been extracted from and is now used by
+ <code>IMetamodelExtender.eDelete()</code>.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor.eRemoveCrossReferences(EObject, ECrossReferenceAdapter, EReferencePredicate)</code> has been added as a way to remove the inverse cross references without removing an
+ <code>EObject</code> from its container after a check by the permission authority that all changeable feature to modify can be edited.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime2">Changes in
+ <code>org.eclipse.sirius.ext.gmf.runtime</code>
+ </h4>
+ <ul>
+ <li>Several utilities have been added in
+ <code>org.eclipse.sirius.ext.gmf.runtime.editparts.GraphicalHelper</code>:
+ <ul>
+ <li>
+ <code>applyZoomOnPoint(IGraphicalEditPart, Point)</code>: Apply the current zoom (of
+ <code>IGraphicalEditPart</code>'s diagram) on the
+ <code>Point</code> and return the
+ <code>Point</code> for convenience.
+ </li>
+ <li>
+ <code>applyInverseZoomOnPoint(IGraphicalEditPart, Point)</code>: Apply the inverse of the current zoom (of
+ <code>IGraphicalEditPart</code>'s diagram) on the
+ <code>Point</code> and return the
+ <code>Point</code> for convenience.
+ </li>
+ <li>
+ <code>appliedZoomOnRelativePoint(IGraphicalEditPart, Point)</code> is now deprecated. Use
+ <code>applyZoomOnPoint(IGraphicalEditPart, Point)</code> instead.
+ </li>
+ <li>
+ <code>getAnchorPoint(IGraphicalEditPart parent, Anchor anchor)</code>: Get the
+ <code>Point</code> (absolute draw2d coordinates) corresponding to this
+ <code>Anchor</code>.
+ </li>
+ <li>
+ <code>getAnchorPoint(IGraphicalEditPart parent, IdentityAnchor anchor)</code>: Get the
+ <code>Point</code> (absolute draw2d coordinates) corresponding to this
+ <code>IdentityAnchor</code>.
+ </li>
+ <li>
+ <code>getIntersection(Point, Point, IGraphicalEditPart, boolean)</code>: Get intersection between a line between lineOrigin and lineTerminus, and the rectangle bounds of the
+ <code>IGraphicalEditPart</code>. If there are several intersections, the shortest is returned.
+ </li>
+ <li>
+ <code>getAbsoluteBounds(IGraphicalEditPart)</code>: Get the absolute bounds of this
+ <code>IGraphicalEditPart</code>.
+ </li>
+ <li>
+ <code>getAbsoluteBoundsIn100Percent(IGraphicalEditPart)</code>: Get the absolute bounds of this
+ <code>IGraphicalEditPart</code> but adapted according to the current zoom level.
+ </li>
+ <li>
+ <code>isSnapToGridEnabled(EditPart)</code>: Return true if the snapToGrid is enabled for the diagram containing this edit part, false otherwise.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support3">Changes in
+ <code>org.eclipse.sirius.tests.swtbot.support</code>
+ </h4>
+ <ul>
+ <li>The method
+ <code>SWTBotSiriusDiagramEditor.setSnapToGrid(boolean)</code> has been added. It allows to disable or enable the snapToGrid option for this editor.
+ </li>
+ <li>The method
+ <code>SWTBotSiriusDiagramEditor.setSnapToGrid(boolean, double, int)</code> has been added. It allows to disable or enable the snapToGrid option for this editor. In case of activation, you can also set the grid spacing and the ruler units.
+ </li>
+ <li>The method
+ <code>SWTBotSiriusDiagramEditor.disableSnapToGrid()</code> has been deprecated, use
+ <code>SWTBotSiriusDiagramEditor.setSnapToGrid(false)</code> instead.
+ </li>
+ <li>The method
+ <code>SWTBotSiriusDiagramEditor.adaptLocationToSnap(Point)</code> has been added. It allows to adapt location according to SnapToHelper of the current editor.
+ </li>
+ <li>The method
+ <code>SWTBotSiriusDiagramEditor.getDiagramEditPart()</code> has been added. It allows to retrieve the diagram edit part of the current editor.
+ </li>
+ <li>In
+ <code>ViewpointSelectionDialog</code>, the methods
+ <code>selectViewpoints(String...)</code> and
+ <code>deselectViewpoints(String...)</code> have been added to allow viewpoints selection and deselection from an array of
+ <code>String</code>. These methods are shortcuts to the
+ <code>selectViewpoints(Set<String>, Set<String>)</code> method.
+ </li>
+ <li>Add method
+ <code>changeLayerActivation(String)</code> on
+ <code>SWTBotSiriusDiagramEditor</code> to offer the same service as similar method on
+ <code>UIDiagramRepresentation</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.support">Changes in
+ <code>org.eclipse.sirius.tests.support</code>
+ </h4>
+ <ul>
+ <li>In
+ <code>org.eclipse.sirius.test.support.SiriusTestCase</code>, the methods deactivateSirius(), initSirius() and findSirius() have been renamed into deactivateViewpoint(), initViewpoint() and findViewppoint() to correct a wrong rebranding.
+ </li>
+ </ul>
+ <h2 id="sirius1.0.0">Changes in Sirius 1.0.0 (from Sirius 1.0.0M7)</h2>
+ <h3 id="UserVisibleChanges4">User-Visible Changes</h3>
+ <ul>
+ <li>The ability to print table representations has been disabled for the 1.0.0 release due to an external dependency issue (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=435204" target="_blank">bug #435204</a> for the details).</li>
+ </ul>
+ <h3 id="SpecifierVisibleChanges4">Specifier-Visible Changes</h3>
+ <ul>
+ <li>
+ <em>Node</em>,
+ <em>Container</em> and
+ <em>Edge</em> mappings can not be created as direct children of a
+ <em>Diagram Description</em> anymore, the first level mappings must be created as direct children of a
+ <em>Layer</em>.
+ </li>
+ <li>Mapping (resp. tools) can not be added as reused mapping (resp. tools) of a
+ <em>Diagram Description</em>, they must be added to the reused mappings (resp. tools) of a
+ <em>Layer</em>. The corresponding property sections will be shown only for old VSM with reused elements.
+ </li>
+ </ul>
+ <h3 id="APIChanges2">API Changes</h3>
+ <h4 id="Changesinorg.eclipse.sirius4">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li>In package
+ <code>org.eclipse.sirius.business.api.control</code>, the constructors of
+ <code>SiriusControlCommand</code> and
+ <code>SiriusUncontrolCommand</code> which assume implicitly that the session should be saved as part of the command are now deprecated. Use the alternative constructors (a new one has been added to
+ <code>SiriusUncontrolCommand</code>) to say explicitly if the command should save the session. Most code should do the save themselves outside of the command, and thus pass
+ <code>false</code> to the
+ <code>shouldEndBySaving</code> argument of these constructors.
+ </li>
+ <li>In package
+ <code>org.eclipse.sirius.business.api.session</code>, class
+ <code>SavingPolicyImpl</code> (the default session saving policy) now inherits from the new
+ <code>AbstractSavingPolicy</code> class. The new abstract class can be used as a base to implement different policies by simply overriding the
+ <code>computeResourcesToSave()</code> method.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li>To enable the resize of border nodes whose parent is a list, the
+ <code>createLayoutEditPolicy</code> and
+ <code>getResizeBorderItemCommand</code> methods have been extracted from
+ <code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramContainerPart</code> and placed into
+ <code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart</code>. The
+ <code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramListEditPart.createLayoutEditPolicy</code> implementation has been removed.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui5">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.editor.tools.api.menu.AbstractMenuBuilder.getLabel()</code> visibility has been changed from protected to public.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.tools.api.menu.CompositeMenuBuilder</code> has been introduced to avoid duplicated menu. A
+ <code>CompositeMenuBuilder</code> is created to encapsulate
+ <code>AbstractMenuBuilder</code> with the same label.
+ </li>
+ </ul>
+ <h2 id="sirius1.0M7">Changes in Sirius 1.0.0M7 (from Sirius 1.0M6)</h2>
+ <h3 id="SpecifierVisibleChanges5">Specifier-Visible Changes</h3>
+ <ul>
+ <li>The default value of the
+ <em>Semantic Candidates Expression</em> for Tree Items has changed from an empty string (meaning “any compatible element in the session”) to
+ <code>feature:eAllContents</code> which only looks for compatible candidates inside the current element (recursively). The new behavior is more efficient on large models and consistent with what happens for diagrams. The change does not affect existing VSMs which continue to work as before whatever was the expression they used. Users who want the old behavior on specific mappings can simply remove the expression in the properties view.
+ </li>
+ <li>In the
+ <em>Time Profiler</em> view, the
+ <em>Time (hh:mm:ss,ms)</em> has been removed. It was redundant with the existing
+ <em>Time (ms)</em> column, harder to read/sort, and showed wrongly formatted results.
+ </li>
+ </ul>
+ <h3 id="APIChanges3">API Changes</h3>
+ <h4 id="separationOfDiagramSpecificConcept-step3">Move diagram.ecore in its own plugin</h4>
+ <p>This milestone (Sirius 1.0M7) includes the third, and final, step towards a full separation of the diagram-specific stuff out of the core of Sirius (see
+ <a href="#separationOfDiagramSpecificConcept-step1">Step1</a> and
+ <a href="#separationOfDiagramSpecificConcept-step2">Step2</a> for more details).
+ </p>
+ <p>All classes related to diagrams in
+ <code>org.eclipse.sirius</code> have been moved to
+ <code>org.eclipse.sirius.diagram</code>.
+ <br/>All classes related to diagrams in
+ <code>org.eclipse.sirius.ui</code> have been moved to
+ <code>org.eclipse.sirius.diagram.ui</code>.
+ <br/>All classes related to diagrams in
+ <code>org.eclipse.sirius.editor</code> have been moved to
+ <code>org.eclipse.sirius.editor.diagram</code>.
+ <br/>In the same way, all classes related to UI in
+ <code>org.eclipse.diagram</code> have been moved to
+ <code>org.eclipse.sirius.diagram.ui</code>. To simplify this step almost all classes of
+ <code>org.eclipse.diagram</code> have been moved in
+ <code>org.eclipse.sirius.diagram.ui</code> (and probably not only UI classes). These classes have been moved in
+ <code>src-diag</code> source folder to facilitate future work about moving some of these classes in
+ <code>org.eclipse.diagram</code> again.
+ </p>
+ <p>Unlike, the
+ <a href="#separationOfDiagramSpecificConcept-step1">Step1</a>, a simple “Organize Imports” operation is not enough. First, you will probably need to add dependencies to
+ <code>org.eclipse.sirius.diagram</code>,
+ <code>org.eclipse.sirius.diagram.ui</code> or
+ <code>org.eclipse.sirius.editor.diagram</code> in the MANIFEST.MF of your projects that depend on Sirius diagram classes. The dependencies to add depend on what you really use.
+ </p>
+ <ul>
+ <li>
+ <code>ViewpointRegistry.getDiagramDescriptionMappingsRegistry()</code> has been removed. You can now directly call
+ <code>org.eclipse.sirius.diagram.business.api.componentization.DiagramDescriptionMappingsRegistry.INSTANCE.DialectServices</code>.
+ </li>
+ <li>New methods have been added to
+ <code>IRepairParticipant</code> to isolate specific diagram repair steps.
+ <ul>
+ <li>
+ <code>removeElements(DView, TransactionalEditingDomain, IProgressMonitor)</code>: Removes elements from the
+ <code>DView</code> that will be recreated by the refresh (called later).
+ </li>
+ <li>
+ <code>cleanRepresentations(EList<DRepresentation>)</code>: Cleans representations (specific representation states like filters) and eventually returns some of them if they need to be removed.
+ </li>
+ <li>
+ <code>refreshRepresentations(DAnalysis, DView)</code>: This method is only implemented by the diagram participant. To simplify work for this step, this method manages core and diagram elements. It should be clean up once the split will be done.
+ </li>
+ </ul>
+ </li>
+ <li>To break the dependencies from Core to Diagram, several services have been added to:
+ <ul>
+ <li>
+ <code>DialectServices</code>, with default implementations in
+ <code>AbstractRepresentationDialectServices</code>:
+ <ul>
+ <li>
+ <code>createTask(CommandContext, ModelAccessor, ModelOperation, Session, UICallBack)</code>: Creates a new task corresponding to the ModelOperation. Only needed for ModelOperation specific to one dialect.
+ </li>
+ <li>
+ <code>handles(RepresentationExtensionDescription)</code>: Tells if the current dialect handles the given
+ <code>RepresentationExtensionDescription</code>.
+ </li>
+ <li>
+ <code>invalidateMappingCache()</code>: Allows each dialect to clean and compute again its proper mapping cache.
+ </li>
+ <li>
+ <code>allowsEStructuralFeatureCustomization(EObject)</code>: allows dialects to indicate if they allow EStrucuralFeaturesCustomization for the given VSM element. It is currently supported for style descriptions in diagrams only.
+ </li>
+ </ul>
+ </li>
+ <li>
+ <code>DialectUIServices</code>
+ <ul>
+ <li>
+ <code>canHandle(RepresentationDescription)</code> and
+ <code>canHandle(RepresentationExtensionDescription)</code>: tell whether the dialect is able to handle the given representation description or extension description.
+ </li>
+ <li>
+ <code>completeToolTipText(String, EObject)</code> allows the dialect to customize the tooltip displayed in a property section of a given VSM element.
+ </li>
+ </ul>
+ </li>
+ <li>
+ <code>DialectUIManager</code>
+ <ul>
+ <li>
+ <code>canExport(DRepresentation, ExportFormat)</code>: New method returning true if at least one dialect is able to export this representation to this format, false otherwise.
+ </li>
+ </ul>
+ </li>
+ <li>
+ <code>IDiagramDescriptionProvider</code>
+ <ul>
+ <li>
+ <code>completeToolTipText(String, EObject)</code> allows the diagram type to customize the tooltip displayed in a property section of a given VSM element.
+ <code>SequenceDiagramTypeProvider</code> implements this method to mention some Sequence specific variable available in core and diagram tool preconditions in the context of a Sequence diagram.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li>All methods of
+ <code>SiriusHelper</code> concerning diagrams have been moved to
+ <code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramHelper</code>.
+ </li>
+ <li>All methods of
+ <code>SiriusUtil</code> concerning diagrams have been moved to
+ <code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil</code>.
+ </li>
+ <li>All methods of
+ <code>org.eclipse.sirius.business.api.query.EObjectQuery</code> concerning diagrams have been moved to
+ <code>org.eclipse.sirius.diagram.business.api.query.EObjectQuery</code>.
+ </li>
+ <li><a href="https://wiki.eclipse.org/Sirius/Modularization#Library_Extensions" target="_blank">Library Extensions</a>:
+ <ul>
+ <li>All methods depending only on draw2d of
+ <code>org.eclipse.sirius.diagram.ui.tools.api.draw2d.ui.figures.FigureUtilities</code> have been moved in
+ <code>org.eclipse.sirius.ext.draw2d.figure.FigureUtilities</code>
+ </li>
+ <li>
+ <code>fr.obeo.dsl.viewpoint.diagram.ui.tools.api.layout.GraphicalHelper</code> has been moved to
+ <code>org.eclipse.sirius.ext.gmf.runtime.editparts.GraphicalHelper</code>.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.part.SiriusDiagramEditorPlugin</code> has been renamed into
+ <code>org.eclipse.sirius.diagram.DiagramPlugin</code>. This plugin is not a UI plugin any more,
+ <code>org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin.getPlugin()</code> should be used instead for UI related aspects. For example
+ <code>DiagramUIPlugin.getPlugin().getPreferenceStore()</code> should be used instead of
+ <code>DiagramPlugin.getDefault().getPreferenceStore()</code> or
+ <code>SiriusDiagramEditorPlugin.getInstance().getPreferenceStore()</code>.
+ </li>
+ </ul>
+ </li>
+ <li>
+ <code>DeleteFromDiagramContributionItem</code> and
+ <code>SetStyleToWorkspaceImageContributionItem</code> have been merged into
+ <code>SiriusActionBarActionContributionItem</code>
+ </li>
+ <li>Images
+ <ul>
+ <li>Images of
+ <code>org.eclipse.sirius.diagram</code> have been moved to
+ <code>org.eclipse.sirius.diagram.ui</code>. In your code, you should replace
+ <code>SiriusDiagramEditorPlugin.getInstance().getImage()</code> and
+ <code>DiagramPlugin.getInstance().getImage()</code> by
+ <code>DiagramUIPlugin.getPlugin().getImage()</code>. That is the case for all methods concerning images in
+ <code>DiagramPlugin</code> (previously named
+ <code>SiriusDiagramEditorPlugin</code>).
+ </li>
+ <li>Some images of
+ <code>org.eclipse.sirius.ui</code> have been moved to
+ <code>org.eclipse.sirius.diagram.ui</code>, the corresponding constants in
+ <code>org.eclipse.sirius.ui.tools.api.image.ImagesPath</code> have been moved in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath</code>.
+ </li>
+ </ul>
+ </li>
+ <li>The method
+ <code>static void refreshSelection(DiagramElementMapping)</code> from
+ <code>org.eclipse.sirius.editor.tools.api.menu.AbstractEObjectRefactoringAction</code> is not available anymore.
+ </li>
+ <li>Preferences
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.business.api.preferences.SiriusPreferencesKeys.PREF_AUTO_PIN_ON_CREATE</code> has been moved to
+ <code>org.eclipse.sirius.diagram.tools.api.preferences.SiriusDiagramPreferencesKeys</code>.
+ </li>
+ </ul>
+ </li>
+ <li>Ids
+ <ul>
+ <li>The Sirius diagram editor id is now
+ <code>org.eclipse.sirius.diagram.ui.part.SiriusDiagramEditorID</code>
+ </li>
+ <li>Its property contributor is now
+ <code>org.eclipse.sirius.diagram.ui</code>. This id has to be changed in plugins providing additional property sections to the Sirius diagram editor (created with EEF for example).
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h5 id="Movedextensionpoints">Moved extension points</h5>
+ <p>Several extension points have been moved:</p>
+ <ul>
+ <li>from
+ <code>org.eclipse.sirius</code> to
+ <code>org.eclipse.sirius.diagram</code>. You should change the id of the following extension point in your plugin.xml (
+ <code>org.eclipse.sirius.xxxx</code> replaced by
+ <code>org.eclipse.sirius.diagram.xxxx</code>):
+ <ul>
+ <li>diagramTypeProvider</li>
+ </ul>
+ </li>
+ <li>from
+ <code>org.eclipse.sirius.diagram</code> to
+ <code>org.eclipse.sirius.diagram.ui</code>. You should change the id of the following extension points in your plugin.xml (
+ <code>org.eclipse.sirius.diagram.xxxx</code> replaced by
+ <code>org.eclipse.sirius.diagram.ui.xxxx</code>):
+ <ul>
+ <li>diagramIdentifierProvider</li>
+ <li>imageSelector</li>
+ <li>layoutDataManager</li>
+ <li>layoutProvider</li>
+ <li>styleConfigurationProvider</li>
+ <li>viewOrderingProvider</li>
+ </ul>
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common4">Changes in
+ <code>org.eclipse.sirius.common</code>
+ </h4>
+ <ul>
+ <li>In class
+ <code>org.eclipse.sirius.common.tools.api.util.EclipseUtil</code>, the method
+ <code>getExtensionPlugins(Class<T>, String, String, String, Predicate<String>)</code> has been removed from API to avoid exposing a Guava-specific
+ <code>Predicate</code>. Instead, use the new method
+ <code>getExtensionPluginsByKey()</code> which returns all the extensions organized by the specified key, and filter the result according to whatever critera the
+ <code>Predicate</code> tested on the key.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius5">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.business.api.query.URIQuery.isSiriusEnvironmentURI</code> has been replaced by
+ <ul>
+ <li>
+ <code>isSiriusCoreEnvironmentURI</code> which checks that the given resource is the Sirius core Environment.xmi file.
+ </li>
+ <li>and
+ <code>isEnvironmentURI</code> which checks that the given resource has an
+ <code>environment</code> uri scheme.
+ </li>
+ </ul>
+ </li>
+ <li>In
+ <code>org.eclipse.sirius.business.api.dialect.DialectManager</code>
+ <ul>
+ <li>the setter
+ <code>setRefreshActivatedOnRepresentationOpening(boolean)</code> has been removed as the refresh on opening should be managed from the corresponding preference
+ <code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys.PREF_REFRESH_ON_REPRESENTATION_OPENING</code>.
+ </li>
+ <li>
+ <code>isRefreshActivatedOnRepresentationOpening()</code> has been moved into
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIManager</code> as it refers to an UI behavior.
+ </li>
+ </ul>
+ </li>
+ <li>The
+ <code>DRepresentation.createContents()</code> (both variants) and
+ <code>DRepresentation.updateContents()</code> EOperations have been removed. They were not used anywhere.
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.MODELING_PROJECT_PREDICATE</code> constant has been removed to reduce Sirius’s exposure of Guava’specific types. Use the equivalent
+ <code>ModelingProject.hasModelingProjectNature()</code> method instead.
+ </li>
+ <li>The method
+ <code>org.eclipse.sirius.business.api.query.EObjectQuery.getInverseReferences(Predicate<Setting>)</code> has been removed from API to avoid exposing a the Guava-specific
+ <code>Predicate</code> type.
+ </li>
+ <li>In class
+ <code>org.eclipse.sirius.business.api.dialect.description.AbstractInterpretedExpressionQuery</code>, the protected methods
+ <code>appendAllLocalVariableDefinitions()</code> and
+ <code>appendEditMaskVariables()</code> now take a
+ <code>Map<String, Collection<String>></code> instead of a Guava-specific
+ <code>Multimap</code>. The new protected method
+ <code>addDefinition()</code> can be used to make it easier to add entries to the map. Subclasses in Sirius have been updated to match the new signature.
+ </li>
+ <li>The message
+ <code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.ZERO_REPRESENTATIONS_FILE_FOUND_IN</code> has been removed without replacement. It was not really an API constant.
+ </li>
+ <li>The behavior of method
+ <code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.getMainRepresentationsFileURI()</code> has changed. It now marks this project as invalid and adds a marker on it, if it is considered as invalid (no or many representations files).
+ </li>
+ <li>A new query
+ <code>org.eclipse.sirius.business.api.query.IFileQuery</code> has been added with a method to check if file is handled by an opened session, ie:
+ <ul>
+ <li>a semantic resource of this session,</li>
+ <li>a referenced sub representations file,</li>
+ <li>a controlled resource.</li>
+ </ul>
+ </li>
+ <li>The
+ <code>EObjectLink</code> class has been removed from the metamodel. It was not used anywhere.
+ </li>
+ <li>In interface
+ <code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionTargetSwitch</code>, the
+ <code>getFirstRelevantContainerFinder()</code> method which returned a Guava
+ <code>Function<EObject, EObject></code> has been replaced with the new method
+ <code>getFirstRelevantContainer(EObject)</code> which directly returns the result of applying the previously returned function. All implementers in Sirius itself have been updated.
+ </li>
+ <li>The constructor
+ <code>org.eclipse.sirius.business.api.dialect.description.DefaultInterpretedExpressionTargetSwitch(EStructuralFeature, IInterpretedExpressionTargetSwitch, Function<EObject, EObject>)</code> has been removed to avoid exposing a the Guava-specific
+ <code>Predicate</code> type. Sub-classes which used it with a non-null
+ <code>Function</code> should override the
+ <code>getFirstRelevantContainer(EObject)</code> method to return the result of that function instead.
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.business.api.helper.task.AbstractDeleteDRepresentationElementTask</code> constructor which took a Guava
+ <code>Predicate<EReference></code> now takes an equivalent
+ <code>EReferencePredicate</code> (from
+ <code>org.eclipse.sirius.ext.emf</code>).
+ </li>
+ <li>The constants
+ <code>DSEMANTICDECORATOR_REFERENCE_TO_IGNORE_PREDICATE</code> and
+ <code>NOTATION_VIEW_ELEMENT_REFERENCE_TO_IGNORE_PREDICATE</code> from
+ <code>org.eclipse.sirius.business.internal.session.danalysis.DanglingRefRemovalTrigger</code> are now instances of
+ <code>EReferencePredicate</code> instead of Guava’s
+ <code>Predicate<EReference></code>.
+ </li>
+ <li>In class
+ <code>org.eclipse.sirius.business.api.session.SessionEventBroker</code>, the method
+ <code>addlLocalTrigger()</code> now takes a
+ <code>org.eclipse.emf.transaction.NotificationFilter</code> instead of a Guava-specific
+ <code>Predicate<Notification></code> as first argument.
+ </li>
+ <li>The constant
+ <code>org.eclipse.sirius.tools.api.ui.RefreshEditorsPrecommitListener.IS_IMPACTING</code> is now a
+ <code>NotificationFilter</code> instead of a
+ <code>Predicate</code>, to match the API change in
+ <code>SessionEventBroker.addLocalTrigger()</code>.
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.business.api.session.Session</code> interface has a new
+ <code>getSavingPolicy()</code> method which gives access to the currently configured saving policy.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in
+ <code>org.eclipse.sirius.diagram</code>
+ </h4>
+ <ul>
+ <li>The references
+ <code>DNode.ownedDetails</code> and
+ <code>DDiagramElementContainerImpl.ownedDetails</code> have been removed from the metamodel, along with the corresponding implementation methods. They were not used in practice.
+ </li>
+ <li>The
+ <code>DDiagramLink</code> EClass has been removed from the meta-model, along with the corresponding generated Java code. It was not used in practice.
+ </li>
+ <li>The
+ <code>DDiagram.clean()</code> EOperation has been removed. It was deprecated and not used anymore. All the Java code which existed only to help in the implementation of that operation has also been removed. This includes:
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.diagram.tools.api.validation.constraint.AbstractDDiagramConstraint.activate()</code> and
+ <code>deactivate()</code> methods.
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.business.api.helper.SiriusHelper.unSetHarmlessDanglingReferences()</code> method.
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.tools.api.profiler.SiriusTasksKey.CLEANING_NODES_KEY</code> constant.
+ </li>
+ </ul>
+ </li>
+ <li>The
+ <code>DSemanticDiagram.getRootContents()</code> method (which was deprecated) has been removed.
+ </li>
+ <li>The
+ <code>DDiagram.findDiagramElements()</code> EOperation has been removed. It was deprecated and always returned an empty list if called.
+ </li>
+ <li>The
+ <code>DDiagram.info</code> attribute has been removed. It was not used anywhere.
+ </li>
+ <li>The
+ <code>DDiagram.subDiagram</code> reference has been removed. It was not used anywhere.
+ </li>
+ <li>The
+ <code>DDiagramElement.isFold()</code> EOperation has been removed. It was deprecated and edge folding has long been implemented using different mechanisms.
+ </li>
+ <li>In the
+ <code>ContainerMapping</code> type, the following EOperations have been removed:
+ <code>createContainer()</code>,
+ <code>updateContainer()</code>, and
+ <code>getNodesCandidate()</code>. Although their usage is highly discouraged, if you really need to you can currently use the corresponding methods in the internal
+ <code>ContainerMappingHelper</code> instead (use
+ <code>SiriusPlugin.getDefault().getInterpreterRegistry().getInterpreter(semanticElement)</code> to obtain the
+ <code>IInterpreter</code> those methods need). As with all internal code, there is no guarantee these methods will still exist in future versions.
+ </li>
+ <li>The
+ <code>AbstractNodeMapping.getDNodesDone()</code> EOperation has been removed. It was not used anywhere.
+ </li>
+ <li>In the
+ <code>NodeMapping</code> type, the
+ <code>getBestStyle()</code> and
+ <code>createListElement()</code> EOperations have been removed. Although their usage is highly discouraged, if you really need to you can currently use the corresponding methods in the internal
+ <code>MappingHelper</code> instead (use
+ <code>SiriusPlugin.getDefault().getInterpreterRegistry().getInterpreter(semanticElement)</code> to obtain the
+ <code>IInterpreter</code> these methods need). As with all internal code, there is no guarantee these methods will still exist in future versions.
+ </li>
+ <li>In interface
+ <code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider</code>, the methods
+ <code>allowsPinUnpin()</code>,
+ <code>allowsHideReveal</code>, and
+ <code>allowsCopyPasteLayout()</code> have been modified to take directly the
+ <code>DDiagramElement</code> to test (and return a
+ <code>boolean</code>) instead of returning a Guava-specific
+ <code>Predicate</code> which then had to be invoked.
+ </li>
+ <li>In class
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.PinHelper</code>, .the method
+ <code>allowsPinUnpin()</code> has been modified to take a
+ <code>DDiagramElement</code> directly and return a
+ <code>boolean</code>, instead of taking a
+ <code>DDiagram</code> and return a Guava-specific
+ <code>Predicate</code> which then had to be invoked on actual
+ <code>DDiagramElements</code>..
+ </li>
+ <li>The interface
+ <code>org.eclipse.sirius.diagram.ui.edit.api.part.ISiriusEditPart</code> has been added and is now part of all the type hierarchy of any EditPart provided by Sirius. This allows a simple
+ <code>instanceof ISiriusEditPart</code> to discriminate the edit part instances coming from Sirius.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.sequence">Changes in
+ <code>org.eclipse.sirius.diagram.sequence</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.diagram.sequence.util.SiriusFunctions</code> class has been removed. It was not used anywhere.
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.diagram.sequence.util.NotificationQuery</code> class has been removed. It had been exposed by mistake.
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.diagram.sequence.business.internal.util.NotationPredicate</code> class has been removed from API, to reduce Sirius’s exposure of Guava’specific types.
+ </li>
+ <li>All the static methods in
+ <code>org.eclipse.sirius.diagram.sequence.util.Range</code> which returned Guava-specific types (
+ <code>Function</code> or
+ <code>Ordering</code>) have been removed from API.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.sequence.template.AbstractRule</code> no longer inherits from Guava’s
+ <code>Function</code> interface, but from the news ad-hoc
+ <code>org.eclipse.sirius.diagram.sequence.template.Transformer</code> interface instead, which is functionally equivalent.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui4">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.ui.business.api.preferences.DesignerUIPreferencesKeys</code> has been renamed into
+ <code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys</code>
+ </li>
+ <li>Methods
+ <code>getMissingDependencies()</code> and
+ <code>getMissingDependenciesErrorMessage()</code> from
+ <code>org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelection</code> now use
+ <code>Map<String, Collection<String>></code> instead of Guava’s
+ <code>Multimap</code>.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.initializeAfterLoad()</code> method has been removed. There is no replacement for this method documented as “Not intended to be used by client”.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ecore.extender3">Changes in
+ <code>org.eclipse.sirius.ecore.extender</code>
+ </h4>
+ <ul>
+ <li>All variants of
+ <code>eDelete()</code> methods which took a
+ <code>Predicate<EReference></code> in types
+ <code>ModelAccessore</code>,
+ <code>IMetamodelExtender</code> and
+ <code>CompositeMetamodelExtender</code> now take an equivalent
+ <code>EReferencePredicate</code> (from
+ <code>org.eclipse.sirius.ext.emf</code>).
+ </li>
+ <li>The
+ <code>ModelUtils.resolveAll(ResourceSet set, EReferencePredicate)</code> now takes an
+ <code>EReferencePredicate</code> instead of a Guava-specific
+ <code>Predicate<EReference></code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.base">Changes in
+ <code>org.eclipse.sirius.ext.base</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.ext.base.Options.isSome()</code> method has been removed to reduce Sirius’s exposure of Guava’specific types. Use
+ <code>Option.some()</code> directly instead.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ext.base.relations.Relation</code> no longer inherits from
+ <code>com.google.common.base.Function</code>, but keeps the same API otherwise.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.synchronizer4">Changes in
+ <code>org.eclipse.sirius.synchronizer</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.synchronizer.Mapping.IS_CHECK_ONLY</code> constant has been removed to reduce Sirius’s exposure of Guava’specific types. Use
+ <code>!Mapping.getCreator().some()</code> instead.
+ </li>
+ <li>The
+ <code>Maybe</code> and
+ <code>MaybeFactory</code> types have been removed, and all their uses in
+ <code>org.eclipse.sirius.synchronizer</code> converted to the equivalent
+ <code>Option</code> and
+ <code>Options</code> types from
+ <code>org.eclipse.sirius.ext.base</code>.
+ </li>
+ <li>The internal class
+ <code>MappingHiearchy.HiearchyIterator</code> has been removed from API.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.support2">Changes in
+ <code>org.eclipse.sirius.tests.support</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>shouldReloadSession</code> boolean parameter has been removed from
+ <code>org.eclipse.sirius.tests.support.api.SiriusTestCase.disableUICallBackOnDialectEditor(DialectEditor)</code>, it was not used and could let the tester think he can change the reload behavior from the dialog factory.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase.refreshDiagram()</code> has been removed. This method did not handle the non dynamic tabbar and was a duplicate of manualRefresh(). Callers must select the diagram before the call,the click(0,0) instruction was not sufficient in several cases (for example if there is a node/container in (0,0)).
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotDesignerEditor</code> has been renamed into
+ <code>SWTBotSiriusDiagramEditor</code>.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotDesignerGefViewer</code> has been renamed into
+ <code>SWTBotSiriusGefViewer</code>.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotDesignerHelper</code> has been renamed into
+ <code>SWTBotSiriusHelper</code>.
+ </li>
+ <li>Methods
+ <code>AbstractSiriusSwtBotGefTestCase.openRepresentation</code> with
+ <code>SWTBotDesignerEditor</code> as returned type have been renamed into
+ <code>openDiagram</code>, marked as deprecated and replaced with methods returning a
+ <code>SWTBotEditor</code>. You can now use methods
+ <code>openRepresentation</code> for DTree or DTable. If the
+ <code>expectedRepresentationClass</code> is
+ <code>DDiagram.class</code>, the returned type will be a
+ <code>SWTBotSiriusDiagramEditor</code>.
+ </li>
+ <li>Method
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusHelper.getDesignerEditor(String)</code> has been renamed into
+ <code>getSiriusDiagramEditor</code>.
+ </li>
+ <li>Add
+ <code>SWTBotSiriusHelper.getSiriusEditor(String)</code> to return the
+ <code>SWTBotEditor</code> (diagram, tree or table editor) with the given name. The name is the name as displayed on the editor’s tab in Eclipse. In case of multiple editors with the same fileName, the same method with an additional parameter, the index, has been added
+ <code>SWTBotSiriusHelper.getSiriusEditor(String, int)</code>.
+ </li>
+ <li>Change the behavior of
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.zoom(ZoomLevel)</code> to directly change the zoom level of the current diagram editor without trying to change it from the zoom combo in the tabbar.
+ </li>
+ <li>Add
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.zoomFromToolbar(ZoomLevel)</code> to add possibility to explicitly change the zoom level from the tabbar.
+ </li>
+ </ul>
+ <h2 id="sirius1.0M6">Changes in Sirius 1.0.0M6 (from Sirius 1.0M5)</h2>
+ <h3 id="APIChanges4">API Changes</h3>
+ <h4 id="tests">High-level API for Automated Tests Using JUnit and SWTBot</h4>
+ <p>Starting from version 1.0.0M6, Sirius includes high-level APIs to help creating automated tests using JUnit and/or SWTBot. These can be used either to test Sirius itself or to test Sirius-based modelers. These APIs are provided by two plug-ins:</p>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.tests.support</code>: support code for JUnit (plug-in) tests using Sirius.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tests.swtbot.support</code>: support code for SWTBot tests using Sirius.
+ </li>
+ </ul>
+ <p>Both plug-ins are only available if you install the new
+ <code>org.eclipse.sirius.tests</code> feature.
+ </p>
+ <h4 id="separationOfDiagramSpecificConcept-step2">Move diagram-specific EPackages into their own diagram.ecore model</h4>
+ <p>This milestone (Sirius 1.0M6) includes the second step towards a full separation of the diagram-specific stuff out of the core of Sirius (see
+ <a href="#separationOfDiagramSpecificConcept-step1">Step1</a> for more details).
+ </p>
+ <p>This step is less impactful on your code than the first step. Nevertheless, some missed classes during first step have moved during this step:</p>
+ <ul>
+ <li>Remove
+ <code>DDiagramSet</code> and its corresponding reference from
+ <code>DRepresentationContainer</code>: No longer needed
+ </li>
+ <li>
+ <code>DragAndDropTarget</code>,
+ <code>DragAndDropTargetDescription</code> and
+ <code>ContainerDropDescription</code> have been moved to diagram EPackage.
+ </li>
+ <li>
+ <code>viewpoint/diagram/description/validation</code> EPackage has been moved to
+ <code>viewpoint/description/validation</code>: revert what was done in step 1 by mistake.
+ </li>
+ </ul>
+ <p>The existing VSM (
+ <code>*.odesign</code>) and representations file (
+ <code>*.aird</code>) are automatically migrated.
+ </p>
+ <p>Warning: If you have some code based on the root EPackage of an EClass, it may be necessary to adapt it. Example:</p>
+ <pre>EPackage rootPackage = (EPackage) EcoreUtil.getRootContainer(element.eClass());
+if (rootPackage != null && rootPackage.getNsURI().equals(ViewpointPackage.eINSTANCE.getNsURI())) {
+</pre>
+ <p>should be adapted in</p>
+ <pre>EPackage rootPackage = (EPackage) EcoreUtil.getRootContainer(element.eClass());
+if (rootPackage != null && rootPackage.getNsURI().equals(DiagramPackage.eINSTANCE.getNsURI())) {
+</pre>
+ <p>if
+ <code>element</code> is a Diagram concept.
+ </p>
+ <h4 id="Changesinorg.eclipse.sirius6">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.tools.api.command.IDiagramCommandFactory.setAutoRefreshDView()</code> method was removed. It had no effect, any code which called it can simply be removed.
+ </li>
+ <li>The deprecated interface
+ <code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryListener</code> has been removed. Use
+ <code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryListener2</code> instead.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.session.SessionManagerListener2</code> and
+ <code>org.eclipse.sirius.business.api.session.SessionManagerListener</code> have been merged into
+ <code>org.eclipse.sirius.business.api.session.SessionManagerListener</code> which is not deprecated any more.
+ </li>
+ <li>The deprecated method
+ <code>org.eclipse.sirius.business.api.session.SessionManagerListener.notifyUpdatedSession(Session)</code> has been removed. Use
+ <code>org.eclipse.sirius.business.api.session.SessionManagerListener.notify(Session, int)</code> instead.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.helper.task.RemoveDanglingReferencesTask</code> and
+ <code>org.eclipse.sirius.business.api.helper.task.RemoveSemanticDanglingReferenceTask</code> and
+ <code>org.eclipse.sirius.tools.api.command.AbstractCommandFactory.addRemoveDanglingReferencesTask()</code> have been removed. These tasks were added to in several commands to remove dangling references at the end. They are now replaced by a specific
+ <code>ModelChangeTrigger</code> to detect the detachment of
+ <code>EObject</code> and remove the dangling references. It is added to the
+ <code>SessionEventBroker</code> during the session opening.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tools.api.ui.RefreshEditorsPrecommitListener</code> was a precommit
+ <code>ResourceSetListener</code>, it became a
+ <code>ModelChangeTrigger</code> and is now added to the SessionEventBroker during the session opening. This modification allows to correctly manage the order of our different precommit commands. It is triggered after the dangling reference remover.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tools.api.command.semantic.RemoveDanglingReferences</code> is no more used in Sirius commands. It can still be used to clean a resourceSet or a resource (repair tool, import/export, ..). It also has a new static method
+ <code>removeDanglingReferences(Resource)</code> to remove dangling references as an entry point.
+ </li>
+ <li>The protected predicate
+ <code>org.eclipse.sirius.business.api.helper.task.AbstractDeleteDRepresentationElementTask.DSEMANTICDECORATOR_REFERENCE_T0_IGNORE_PREDICATE</code> has been removed, the internal predicate
+ <code>DanglingRefRemovalTrigger.DSEMANTICDECORATOR_REFERENCE_T0_IGNORE_PREDICATE</code> is used instead.
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.business.api.helper.SiriusUtil.findDiagram(EObject)</code> method has been removed. Use the equivalent
+ <code>new org.eclipse.sirius.business.api.query.EObjectQuery(element).getParentDiagram()</code> instead.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui5">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.ui.tools.api.perspectives.DesignPerspective</code> interface has been moved to
+ <code>org.eclipse.sirius.editor.tools.api.perspectives</code> package in
+ <code>org.eclipse.sirius.editor</code> plugin. This perspective is now provided through the
+ <code>org.eclipse.sirius.editor</code> plugin. The perspective ID is kept unchanged for a compatibility reason.
+ </li>
+ <li>The deprecated class
+ <code>org.eclipse.sirius.ui.tools.api.dialogs.ExportRepresentationsAsImagesDialog</code> has been removed. Use
+ <code>org.eclipse.sirius.ui.tools.api.dialogs.ExportSeveralRepresentationsAsImagesDialog</code> instead.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram4">Changes in
+ <code>org.eclipse.sirius.diagram</code>
+ </h4>
+ <ul>
+ <li>
+ <code>org.sirius.diagram.graphical.edit.policies.AirNoteAttachmentEditPolicy</code> has been removed, with the new dangling reference management, it became identical to its superclass, use
+ <code>org.eclipse.gmf.runtime.diagram.ui.internal.editpolicies.ConnectionEditPolicy</code> instead. Its provider
+ <code>org.sirius.diagram.graphicalou .edit.policies.AirNoteAttachmentEditPolicyProvider</code> and declaration in plugin.xml have been removed too.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.table2">Changes in
+ <code>org.eclipse.sirius.table</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.table.tools.api.command.ITableCommandFactory.setAutoRefreshDTable()</code> method was removed. It had no effect, any code which called it can simply be removed.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tree3">Changes in
+ <code>org.eclipse.sirius.tree</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.tree.business.api.command.ITreeCommandFactory.setAutoRefreshDTree()</code> method was removed. It had no effect, any code which called it can simply be removed.
+ </li>
+ </ul>
+ <h2 id="sirius1.0M5">Changes in Sirius 1.0.0M5 (from Sirius 1.0M4)</h2>
+ <h3 id="UserVisibleChanges5">User-Visible Changes</h3>
+ <ul>
+ <li>The table csv export has been improved to handle cropped label. In some specific cases, the cell label is automatically cropped and ‘...’ is concatenated to the resulting value. This cropped displayed label was previously exported, now the complete semantic value is exported.</li>
+ </ul>
+ <h3 id="APIChanges5">API Changes</h3>
+ <h4 id="LibraryExtensions">Library Extensions</h4>
+ <p>This milestone (Sirius 1.0M5) introduces several new plug-ins, collectively called “library extensions”. They are all named
+ <code>org.eclipse.sirius.ext.LIB</code>, where
+ <code>LIB</code> is the name of a library or component Sirius depends on. These plug-ins are used to isolate generic code which extends existing libraries with features and helpers needed for Sirius, but which do not depend on Sirius themselves. A relatively large part of the code in Sirius is of this kind: things that could/should be in EMF, GMF, Eclipse itself, etc. and which are not Sirius-specific but which make it easier to build Sirius itself. Sirius 1.0M5 introduces several of these library extensions and starts to fill them with existing classes which were “hidden” inside Sirius and are now exposed in library extensions. Most of the time, existing code which used the Sirius API will only need to:
+ </p>
+ <ol>
+ <li>Add the necessary
+ <code>Import-Package</code> (recommended) or
+ <code>Require-Bundle</code> to depend on the library extension(s) where the code they use now lives;
+ </li>
+ <li>Perform a simple “Organize Imports” operation, which should find the classes and interfaces in their new locations.</li>
+ </ol>
+ <h4 id="separationOfDiagramSpecificConcept-step1">Move diagram-specific EClasses into a separate EPackage</h4>
+ <p>For historical reasons, the core Sirius metamodels defined in viewpoint.ecore contain both generic (dialect-independant like Viewpoint, RepresentationDescription, DAnalysis...) concepts and diagram-specific ones (e.g. DNode, EdgeStyle, ContainerCreationDescription...). The table and tree metamodels are more cleanly separated.
+ <br/>This milestone (Sirius 1.0M5) includes the first step towards a full separation of the diagram-specific stuff out of the core of Sirius. So many EClasses have been moved.
+ </p>
+ <p>Most of the time, existing code which used these Sirius EClasses will only need to perform a simple “Organize Imports” operation, which should find the classes and interfaces in their new locations.
+ <br/>The “Organize imports” is not sufficient in case of imported classes existing several time in different packages (
+ <code>EFactory</code> classes for example with
+ <code>DescriptionFactory</code>, or
+ <code>EPackage</code> classes for example with
+ <code>DescriptionPackage</code>). And in some cases
+ <code>ViewpointFactory</code> (and
+ <code>ViewpointPackage</code>) will have to be replaced by
+ <code>DiagramFactory</code> (and
+ <code>DiagramPackage</code>).
+ </p>
+ <p>The
+ <code>Switch</code> classes if overridden also require a particular attention.
+ </p>
+ <p>The existing VSM (
+ <code>*.odesign</code>) and representations file (
+ <code>*.aird</code>) are automatically migrated.
+ <br/>Warning: Nevertheless, if you reference these Sirius concepts with the EPackage qualifier in your VSM (
+ <code>*.odesign</code>), in interpreted expressions for example, you must change
+ <code>viewpoint</code> in
+ <code>diagram</code>. For example
+ <code>viewpoint::DDiagramElement</code> becomes
+ <code>diagram::DDiagramElement</code>.
+ </p>
+ <p>The impacted EPackages are :</p>
+ <ul>
+ <li>
+ <code>viewpoint</code> : some of its EClasses have been moved to
+ <code>viewpoint/diagram</code>
+ </li>
+ <li>
+ <code>viewpoint/description</code> : some of its EClasses have been moved to
+ <code>viewpoint/diagram/description</code>
+ </li>
+ <li>
+ <code>viewpoint/description/style</code> : some of its EClasses have been moved to
+ <code>viewpoint/diagram/description/style</code>
+ </li>
+ <li>
+ <code>viewpoint/description/tool</code> : some of its EClasses have been moved to
+ <code>viewpoint/diagram/description/tool</code>
+ </li>
+ <li>
+ <code>viewpoint/description/filter</code> : this EPackage has been moved to
+ <code>viewpoint/diagram/description/filter</code>
+ </li>
+ <li>
+ <code>viewpoint/description/validation</code> : this EPackage has been moved to
+ <code>viewpoint/diagram/description/validation</code>
+ </li>
+ <li>
+ <code>viewpoint/description/concern</code> : this EPackage has been moved to
+ <code>viewpoint/diagram/description/concern</code>
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius7">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.business.api.migration.resource.StringCouple</code> class has been removed.
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionTargetSwitch.getFirstRelevantContainerFinder</code> method has been added to let each dialect use its own
+ <code>Function</code> to retrieve the first relevant container of a given
+ <code>EObject</code>, i.e. the first container from which a domain class can be determined.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common.ui3">Changes in
+ <code>org.eclipse.sirius.common.ui</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.common.ui.business.api.interpreter.VariableContentProvider</code> class has been removed.
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.common.ui.tools.api.util.ISimpleAction</code> interface has been removed.
+ </li>
+ <li>The method
+ <code>org.eclipse.sirius.common.ui.tools.api.dialog.RenameDialog.setText()</code> has been removed. You can now directly call
+ <code>org.eclipse.sirius.common.ui.tools.api.dialog.RenameDialog.setDefaultNewName()</code> which has been added to set the default new name to display. Note that this method must be called before Dialog.create().
+ </li>
+ <li>The overriden method
+ <code>org.eclipse.sirius.common.ui.tools.api.dialog.RenameDialog.setTitle()</code> has been removed. Note that the inherited
+ <code>setTile()</code> method is still available but must be called before Dialog.create().
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.table3">Changes in
+ <code>org.eclipse.sirius.table</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.table.business.api.query.DCellQuery.getExportableLabel()</code> method has been added to compute the label to export when the label is cropped by the
+ <code>org.eclipse.emf.edit.provider.ItemPropertyDescriptor.ItemDelegator</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.table.ui2">Changes in
+ <code>org.eclipse.sirius.table.ui</code>
+ </h4>
+ <ul>
+ <li>The
+ <code>org.eclipse.sirius.table.ui.business.api.helper.TableUIHelper</code> now uses
+ <code>DCellQuery.getExportableLabel()</code> to compute the cell labels used in HTML export.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui6">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li>The long-deprecated
+ <code>org.eclipse.sirius.ui.business.api.session.DeprecatedIEditingSession</code> interface has been removed. Use the corresponding methods from
+ <code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code> instead.
+ </li>
+ </ul>
+ <h2 id="sirius1.0M4">Changes in Sirius 1.0.0M4 (from Sirius 0.9)</h2>
+ <h3 id="UserVisibleChanges6">User-Visible Changes</h3>
+ <ul>
+ <li>The ability to print table representations, which had been disabled for the 0.9 release, has been re-enabled.</li>
+ </ul>
+ <h3 id="APIChanges6">API Changes</h3>
+ <p>Sirius 1.0.0M4 includes a lots of API-breaking changes, as part of a global effort to improve the quality of the Sirius internals. In this milestone in particular, most of the APIs which were marked as deprecated in previous versions of Sirius (and before that of Viewpoint) have been either removed (if a replacement exists) or marked as non-deprecated (if no replacement exists yet).</p>
+ <h4 id="Changesinorg.eclipse.sirius.common5">Changes in
+ <code>org.eclipse.sirius.common</code>
+ </h4>
+ <ul>
+ <li>Two deprecated constructors have been removed in
+ <code>FeatureEditorDialog</code>. Use the remaining constructor instead, which provides proper behavior for both unique and non-unique features.
+ </li>
+ <li>The deprecated method
+ <code>IEditingDomainFactory.createEditingDomain()</code> has been removed. Use the (inherited)
+ <code>createEditingDomain(ResourceSet)</code> instead, which ensures correct behavior for all kinds of models (Xtext for example).
+ </li>
+ <li>The deprecated field
+ <code>org.eclipse.sirius.common.tools.api.listener.Notification.FOLD</code> has been removed. It was never used by Sirius itself, so if your code tried to listen to this kind of notification it was never actually called and can be safely removed.
+ </li>
+ <li>The deprecated methods
+ <code>getExtensionPlugins()</code> and
+ <code>getElementsProvidedByPlugin</code> from
+ <code>EcliseUtil</code> have been removed. If you need this kind of functionality, use the Eclipse APIs directly instead.
+ </li>
+ <li>The deprecated fields
+ <code>COLUMN_SEMANTIC</code> and
+ <code>LINE_SEMANTIC</code> of
+ <code>IInterpreterSiriusVariables</code> have been removed. Use the constants of
+ <code>org.eclipse.sirius.table.tools.api.interpreter.IInterpreterSiriusTableVariables</code> instead.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius8">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li>The deprecated method
+ <code>DialectServices.initRepresentations(Viewpoint, EObject)</code> has been removed. Use the version which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated constructor in
+ <code>CreateRepresentationCommand</code> has been removed. Use the alternative constructor which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The two deprecated constructors in
+ <code>RefreshRepresentationCommand</code> have been removed. Use the alternative constructors which take an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated method
+ <code>DisplayService.computeVisibility(Session, DDiagram, DDiagramElement)</code> has been removed. Use the variant
+ <code>computeVisibility()</code> which takes a
+ <code>DiagramMappingsManager</code> instead of a
+ <code>Session</code>.
+ </li>
+ <li>The following deprecated methods in
+ <code>FilterService</code> have been removed:
+ <ul>
+ <li>
+ <code>activateCache()</code>: use
+ <code>DisplayService.activateCache()</code> instead.
+ </li>
+ <li>
+ <code>deactivateCache()</code>: use
+ <code>DisplayService.deactivateCache()</code> instead.
+ </li>
+ <li>
+ <code>activate()</code>: use
+ <code>DisplayService.activate()</code> instead.
+ </li>
+ <li>
+ <code>deactivate()</code>: use
+ <code>DisplayService.deactivate()</code> instead.
+ </li>
+ <li>
+ <code>isActivated()</code>: use
+ <code>DisplayServiceManager.INSTANCE.getMode() == DisplayMode.NORMAL</code> instead.
+ </li>
+ <li>
+ <code>isCollapse()</code>: use
+ <code>isCollapsed()</code> instead.
+ </li>
+ <li>
+ <code>isVisibleForFilters()</code>: use
+ <code>getAppliedFilters()</code> instead.
+ </li>
+ <li>
+ <code>isVisible()</code>: use
+ <code>DisplayService.isDisplayed()</code> instead.
+ </li>
+ <li>
+ <code>isFiltered()</code>,
+ <code>isNotFiltered()</code>,
+ <code>isVisibleForActivatedFilters(), @checkFilters()</code>: use
+ <code>getAppliedFilters()</code> and
+ <code>DDiagram.getActivatedFilters()</code> instead.
+ </li>
+ </ul>
+ </li>
+ <li>The deprecated methods
+ <code>isDirectlyHidden()</code> and
+ <code>isIndirectlyHidden()</code> in
+ <code>HideFilterHelper</code> have been removed. Use the corresponding methods in
+ <code>DDiagramElementQuery</code> instead.
+ </li>
+ <li>The deprecated method
+ <code>SavingPolicy.save(Iterable, Map)</code> has been removed. Use the variant which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated constructor
+ <code>AbstractCommandFactory(TransactionalEditingDomain, ModelAccessor)</code> has been removed. Use the variant without the
+ <code>ModelAccessor</code> argument instead.
+ </li>
+ <li>The deprecated constructor
+ <code>CommandContext(EObject)</code> has been removed. Use the variant which takes an additional
+ <code>DRepresentation</code> instead.
+ </li>
+ <li>The deprecated methods
+ <code>activate(TransactionalEditingDomain)</code> and
+ <code>deactivate(TransactionalEditingDomain)</code> in
+ <code>IChangeListener</code> have been removed. Use the variants with no argument instead.
+ </li>
+ <li>The deprecated constructor
+ <code>AddSemanticResourceCommand(Session, URI)</code> has been removed. Use the variant which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated constructors of
+ <code>RemoveSemanticResourceCommand</code> have been removed. Use the variants which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated constructor in
+ <code>CreateDiagramWithInitialOperation</code> has been removed. Use the variant which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated method
+ <code>SessionManager.addResource(Session, Resource)</code> has been removed. Use the
+ <code>Session.addSemanticResource(URI, IProgressMonitor)</code> instead. In code,
+ <code>mySessionManager.addResource(mySession, myResource)</code> should be replaced by
+ <code>mySession.addSemanticResource(myResource.getURI(), new NullProgressMonitor())</code>. Notice that this replacement has not the exact same behavior. The notifications
+ <code>SessionListener.ABOUT_TO_BE_REPLACED</code> and
+ <code>SessionListener.REPLACED</code> are not thrown with
+ <code>addSemanticResource</code> contrary to
+ <code>addResource</code>. But this kind of notifications is more for reloading of resource.
+ </li>
+ <li>The deprecated constructor of
+ <code>DefaultLocalSessionCreationOperation</code> have been removed. Use the variant which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated method
+ <code>SessionManager.getSession(URI)</code> has been removed. Use the variant which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated method
+ <code>SessionFactory.createSession(URI)</code> has been removed. Use the variant which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>Deprecated class
+ <code>RefreshRepresentationCommand</code> has been removed. Use the class
+ <code>RefreshRepresentationsCommand</code> instead.
+ </li>
+ <li>Deprecated classes
+ <code>RevealSiriusElement</code> and
+ <code>RevealDDiagramElement</code> have been removed. Use the class
+ <code>RevealDDiagramElements</code> instead.
+ </li>
+ <li>The deprecated method
+ <code>DAnalysisSession.save(Map<?, ?>)</code> has been removed. Use the variant which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated method
+ <code>MappingTableEntry.getImporter()</code> has been updated. It now returns an optional (
+ <code>org.eclipse.sirius.common.tools.api.util.Option</code>) of
+ <code>MappingTableEntry</code>.
+ </li>
+ <li>The deprecated class
+ <code>IEMFCommandFactory</code> has been removed. It is not used in Sirius code anymore.
+ </li>
+ <li>The deprecated method
+ <code>IDiagramCommandFactory.buildCreateDiagramFromDescription(DiagramDescription, EObject)</code> has been removed. Use the variant which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated methods
+ <code>dispose()</code> and
+ <code>disposeInterpreterRegistry(EObject)</code> have been removed from
+ <code>InterpreterRegistry</code>. They corresponded to dead code.
+ </li>
+ <li>The deprecated method
+ <code>InterpreterRegistry.prepareImportsFromModelElement(IInterpreter, EObject)</code> has been removed. Use
+ <code>InterpreterRegistry.prepareImportsFromSession(IInterpreter, Session)</code> instead. To get
+ <code>Session</code> from
+ <code>EObject</code>, you can use
+ <code>SessionManager.INSTANCE.getSession(EObject)</code>.
+ </li>
+ <li>The deprecated method
+ <code>SiriusHelper.createDAnalysis()</code> has been removed. Use
+ <code>ViewpointFactory.eINSTANCE.createDAnalysis()</code> instead.
+ </li>
+ <li>The deprecated method
+ <code>SessionFactory.createSession(DAnalysis)</code> has been removed. It is not intended to be used, but it can be replaced by
+ <code>SessionFactory.INSTANCE.createSession(analysis.eResource().getURI(), new NullProgressMonitor())</code>.
+ </li>
+ <li>The method
+ <code>buildDoExecuteDetailsOperation(DSemanticDecorator, RepresentationCreationDescription, String) has been pull up from @ITableCommandFactory</code>,
+ <code>ITreeCommandFactory</code> and
+ <code>IDiagramCommandFactory</code> to
+ <code>ICommandFactory</code>.
+ </li>
+ <li>The method
+ <code>getUserInterfaceCallBack()</code> has been pull up from
+ <code>ITableCommandFactory</code> and
+ <code>ITreeCommandFactory</code> to
+ <code>ICommandFactory</code>. And
+ <code>AbstractCommandFactory</code> now implements this method.
+ </li>
+ <li>The unused reference
+ <code>allActivatedEdgeMappings</code> from
+ <code>Layer</code> and
+ <code>DiagramDescription</code> has been removed from the viewpoint.ecore meta-model. This reference always returns empty list.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram5">Changes in
+ <code>org.eclipse.sirius.diagram</code>
+ </h4>
+ <ul>
+ <li>The deprecated methods
+ <code>IDiagramEdgeEditPart.refreshPath()</code> and
+ <code>AbstractDiagramEdgeEditPart.refreshPath()</code> have been removed. It is not called in Sirius code anymore
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ecore.extender4">Changes in
+ <code>org.eclipse.sirius.ecore.extender</code>
+ </h4>
+ <ul>
+ <li>The deprecated methods
+ <code>IMetamodelExtender.eDelete(EObject)</code>,
+ <code>CompositeMetamodelExtender.eDelete(EObject)</code> and
+ <code>ModelAccessor.eDelete(EObject)</code> have been removed. Use the variants which takes an additional
+ <code>ECrossReferenceAdapter</code> instead. This
+ <code>ECrossReferenceAdapter</code> can be null.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui7">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li>All deprecated methods in
+ <code>ModelingProjectManager</code> have been removed. Use the corresponding versions which take an additional
+ <code>IProgressMonitor</code> parameter instead.
+ </li>
+ <li>All deprecated methods in
+ <code>ViewpointSelection</code> have been removed. Use the corresponding versions which take an additional
+ <code>IProgressMonitor</code> parameter instead.
+ </li>
+ <li>Deprecated class
+ <code>org.eclipse.sirius.ui.business.api.control.SiriusControlCommand</code> has been removed. Use the class
+ <code>org.eclipse.sirius.business.api.control.SiriusControlCommand</code> instead (same constructor but with an additional
+ <code>IProgressMonitor</code> parameter).
+ <ul>
+ <li>Ditto for
+ <code>SiriusUnControlCommand</code>
+ </li>
+ </ul>
+ </li>
+ <li>The deprecated method
+ <code>DialectUIServices.openEditor(Session, DRepresentation)</code> has been removed. Use the variant which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated method
+ <code>SessionHelper.openStartupRepresentations(Session)</code> has been removed. Use the variant which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated method
+ <code>SiriusControlHandler.performControl(Shell, EObject)</code> has been removed. Use the variant which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>The deprecated method
+ <code>SiriusUncontrolHandler.performUncontrol(Shell, EObject)</code> has been removed. Use the variant which takes an additional
+ <code>IProgressMonitor</code> instead.
+ </li>
+ <li>New class
+ <code>AbstractCreateRepresentationFromRepresentationCreationDescription</code>: Generalization of all
+ <code>CreateRepresentationFromRepresentationCreationDescription</code> classes (iof plug-ins sirius.diagram, sirius.table.ui, sirius.tree.ui).
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.table4">Changes in
+ <code>org.eclipse.sirius.table</code>
+ </h4>
+ <ul>
+ <li>The deprecated method
+ <code>TableHelper.getCell(DLine, String)</code> has been removed. Use the variant which take a DLine and a DColumn as parameters.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tree4">Changes in
+ <code>org.eclipse.sirius.tree</code>
+ </h4>
+ <ul>
+ <li>The deprecated method
+ <code>DTreeUserInteraction.refreshContent()</code> has been removed. Use the variant which take an additional
+ <code>IProgressMonitor</code> parameter instead.
+ </li>
+ </ul>
+ <h2 id="sirius0.9">Changes in Sirius 0.9.0</h2>
+ <p>Version 0.9.0 is the first release under the Sirius name and under the Eclipse Foundation umbrella. Except for the few cases mentioned below (in the “Other API Changes”, “Specifier-Visible Changes” and “User-Visible Changes” sections), Sirius 0.9.0 is functionally equivalent to the latest version of Viewpoint (version 6.10), which was the name of the project before it was open sourced at Eclipse. See the rest of the documentation for the complete list of feature of the Sirius platform.</p>
+ <h3 id="MigratingfromObeoDesignerorViewpointtoSirius">Migrating from Obeo Designer or Viewpoint to Sirius</h3>
+ <p>If you have existing projects which used this technology before it became Eclipse Sirius and want to migrate to Sirius, you must:</p>
+ <ol>
+ <li>first migrate your projects and models to the latest pre-Sirius version of Viewpoint or Obeo Designer available to you (Viewpoint is the previous name of Sirius);</li>
+ <li>then migrate those to Sirius 0.9.</li>
+ </ol>
+ <p>The latest version of Viewpoint which was available in an Obeo Designer release is Viewpoint 6.8, released in Obeo Designer 6.2. Sirius 0.9 is based on Viewpoint 6.10, which was not released publicly.</p>
+ <p>If you were using Obeo Designer, you must thus first migrate your projects and models to Obeo Designer 6.2, and then consult the
+ <a href="release_notes_vp.html">release notes for Viewpoint 6.9 and 6.10</a>, which lists the API changes from Viewpoint 6.8 to 6.10.
+ </p>
+ <p>Once your projects are compatible with the latest Viewpoint available to you, you can migrate to Sirius, first by updating your Viewpoint Specification Projects and plug-ins which use the Viewpoint APIs, then by updating any Modeling Project and representation files (
+ <code>*.aird</code>).
+ </p>
+ <h4 id="MigratingViewpointSpecificationProjects">Migrating Viewpoint Specification Projects</h4>
+ <ul>
+ <li>Any plug-in dependencies towards Viewpoint plug-ins must be updated to the corresponding Sirius plug-in and version number. See the correspondence table below for the plug-in names to use.</li>
+ <li>If your plug-ins used any of the extension points defined in Viewpoint, you will need to update your
+ <code>plugin.xml</code> files to reference the correct extension points identifiers. In particular, all Viewpoint Specification Projects created using Viewpoint use the
+ <code>fr.obeo.dsl.viewpoint.componentization</code> in their
+ <code>plugin.xml</code> to register the VSMs they define. This should be changed to use the equivalent
+ <code>org.eclipse.sirius.componentization</code> extension point id. The identifier changes for the other extension points follow the same rules as the name changes of the plug-ins they are defined in.
+ </li>
+ <li>The migration of your VSMs (
+ <code>*.odesign</code> files) is automatic: simply open your files once in the VSM editor, perform some no-op change to make the editor “dirty” and save it. The saved version will have been migrated to Sirius.
+ </li>
+ <li>If you had Java code which used the Viewpoint APIs, you will need to update it to use the Sirius APIs. A simple “Source > Organize Imports” on your source folders should find most classes you used in their new namespace. The Viewpoint code base and APIs used the term “Viewpoint” both for the name of the product and for the name of the concept. When it refered to the name of the product, the names were changed to use “Sirius” instead, so you may need to adjust some names in your code beyond just updating the imports (for example,
+ <code>ViewpointControlCommand</code> is now
+ <code>SiriusControlCommand</code>).
+ </li>
+ </ul>
+ <p>Note that if you used Obeo Designer, you may have used the legacy Acceleo 2.x language for the computed expressions inside the
+ <code>*.odesign</code> files (if your expressions are of the form
+ <code><%something%></code> then you used the legacy language). That language is not supported anymore in Sirius 0.9, so you must migrate your expressions to use Acceleo 3 and/or the specialized interpreters (
+ <code>var:</code>,
+ <code>feature:</code> and
+ <code>service:</code>, see the documentation).
+ </p>
+ <h4 id="MigratingModelingProjectsandRepresentationFiles">Migrating Modeling Projects and Representation Files</h4>
+ <ul>
+ <li>First migrate any modeler definitions used by your modeling projects and representation files (see the section above).</li>
+ <li>Modeling projects created using Viewpoint will not be recognized directly by Sirius, because the nature identfier has changed. You must use the “Configure/Convert to Modeling Project” action in the project’s context menu to make it a Sirius-compatible modeling project (see the section below for the technical details of the change).</li>
+ <li>The migration of you representation files (
+ <code>*.aird</code>) is performed automatically when they are loaded in memory. It will become permanent the first time you save it (you can force this by opening a representation, making some arbitrary change and saving the session).
+ </li>
+ </ul>
+ <h3 id="Pluginsversionnumbers.">Plug-ins version numbers.</h3>
+ <p>As of Sirius 0.9, and probably at least until Sirius 1.0 when the APIs will be more stable, all the bundles share the same version, which is also the version for the feature. If you used versioned dependencies to the old Viewpoint code (e.g. dependencies towards Viewpoint 6.8), you need to adjust the versions in your
+ <code>MANIFEST.MF</code> files in addition to the namespaces.
+ </p>
+ <h3 id="Majornamespacechanges">Major namespace changes</h3>
+ <p>In the context of the move as an official Eclipse project named Sirius, all the namespaces used in the code have changed.</p>
+ <h4 id="Pluginandfeaturesidentifiers">Plug-in and features identifiers</h4>
+ <p>All identifiers have changed to start with the
+ <code>org.eclipse.sirius</code> namespace prefix. The tables below give the mapping between the Viewpoint plug-in and features identifiers and their Sirius equivalent.
+ </p>
+ <table>
+ <tr>
+ <th>Viewpoint 6.x plug-in</th>
+ <th>Sirius 0.9 plug-in</th>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.common</td>
+ <td>org.eclipse.sirius.common</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.common.acceleo.mtl</td>
+ <td>org.eclipse.sirius.common.acceleo.mtl</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.common.acceleo.mtl.ide</td>
+ <td>org.eclipse.sirius.common.acceleo.mtl.ide</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.common.ocl</td>
+ <td>org.eclipse.sirius.common.ocl</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.common.ui</td>
+ <td>org.eclipse.sirius.common.ui</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.common.xtext</td>
+ <td>org.eclipse.sirius.common.xtext</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint</td>
+ <td>org.eclipse.sirius</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.diagram</td>
+ <td>org.eclipse.sirius.diagram</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.diagram.layoutdata</td>
+ <td>org.eclipse.sirius.layoutdata</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.diagram.sequence</td>
+ <td>org.eclipse.sirius.sequence</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.diagram.sequence.edit</td>
+ <td>org.eclipse.sirius.sequence.edit</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.diagram.sequence.ui</td>
+ <td>org.eclipse.sirius.sequence.edit.ui</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.doc</td>
+ <td>org.eclipse.sirius.doc</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.editor</td>
+ <td>org.eclipse.sirius.editor</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.editor.sequence</td>
+ <td>org.eclipse.sirius.editor.sequence</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.editor.table</td>
+ <td>org.eclipse.sirius.editor.table</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.editor.tree</td>
+ <td>org.eclipse.sirius.editor.tree</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.eef.adapters</td>
+ <td>org.eclipse.sirius.eef.adapters</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.interpreter</td>
+ <td>org.eclipse.sirius.interpreter</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.table</td>
+ <td>org.eclipse.sirius.table</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.table.ui</td>
+ <td>org.eclipse.sirius.table.ui</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.tree</td>
+ <td>org.eclipse.sirius.tree</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.tree.ui</td>
+ <td>org.eclipse.sirius.tree.ui</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.ui</td>
+ <td>org.eclipse.sirius.ui</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.mda.ecore.extender</td>
+ <td>org.eclipse.sirius.ecore.extender</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.mda.pim.ecore.design</td>
+ <td>org.eclipse.sirius.sample.ecore.design</td>
+ </tr>
+ <tr>
+ <td>org.eclipselab.emf.synchronizer</td>
+ <td>org.eclipse.sirius.synchronizer</td>
+ </tr>
+ </table>
+ <table>
+ <tr>
+ <th>Viewpoint 6.x feature</th>
+ <th>Sirius 0.9 feature</th>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.runtime</td>
+ <td>org.eclipse.sirius.runtime</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.runtime.acceleo</td>
+ <td>org.eclipse.sirius.runtime.acceleo</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.runtime.ide.eef</td>
+ <td>org.eclipse.sirius.runtime.ide.eef</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.runtime.ide.ui</td>
+ <td>org.eclipse.sirius.runtime.ide.ui</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.runtime.ide.ui.acceleo</td>
+ <td>org.eclipse.sirius.runtime.ide.ui.acceleo</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.runtime.ide.xtext</td>
+ <td>org.eclipse.sirius.runtime.ide.xtext</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.runtime.ocl</td>
+ <td>org.eclipse.sirius.runtime.ocl</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.specifier.ide.ui</td>
+ <td>org.eclipse.sirius.specifier.ide.ui</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.specifier.ide.ui.acceleo</td>
+ <td>org.eclipse.sirius.specifier.ide.ui.acceleo</td>
+ </tr>
+ <tr>
+ <td>fr.obeo.dsl.viewpoint.doc.feature</td>
+ <td>org.eclipse.sirius.doc.feature</td>
+ </tr>
+ </table>
+ <h4 id="JavaPackagesandClassesNames">Java Packages and Classes Names</h4>
+ <p>The Java package names have changed to start with the identifier of the plug-in they are defined in (which has changed). A simple “Source > Organize Imports” on your source folders should find most classes you used in their new namespace.</p>
+ <p>The Viewpoint code base and APIs used the term “Viewpoint” both for the name of the product and for the name of the concept. When it refered to the name of the product, the names where changed to use “Sirius” instead (for example,
+ <code>ViewpointControlCommand</code> is now
+ <code>SiriusControlCommand</code>).
+ </p>
+ <h4 id="ModelsnamespaceURIs">Models namespace URIs</h4>
+ <p>All namespace URIs have also been changed from “http://www.obeo.fr/dsl/viewpoint*” to “http://www.eclipse.org/sirius/”.</p>
+ <p>If you have created VSM file (.odesign) or representations file (.aird) with Viewpoint, the changes of the namespace URIs will be automatically migrated during the loading of your VSM or your representations file. These new nsURIs will be stored physically in the file during the first save. If the file is not saved, the automatic migration will be replayed at the next opening.</p>
+ <h3 id="NatureID">Nature ID</h3>
+ <p>The modeling project has a specific nature (
+ <code>org.eclipse.sirius.nature.modelingproject</code>).
+ <br/>If you have modeling project created with Viewpoint, you must launch the action “Configure/Convert to Modeling Project” to replace old nature id (
+ <code>fr.obeo.dsl.viewpoint.nature.modelingproject</code>) by the new one.
+ <br/>If you have many modeling projects to “migrate”, you can easily make a script to replace
+ <code>fr.obeo.dsl.viewpoint.nature.modelingproject</code> by
+ <code>org.eclipse.sirius.nature.modelingproject</code> in all
+ <code>.project</code> file of each modeling projects.
+ </p>
+ <h3 id="OtherAPIChanges">Other API Changes</h3>
+ <p>This section only lists API changes in Sirius 0.9.0 compared to the latest version of Viewpoint it is based on, i.e. Viewpoint 6.10.</p>
+ <h4 id="APIAdded">API Added</h4>
+ <ul>
+ <li>Add
+ <code>IMigrationParticipant.getPackage()</code> to return the EPackage to use for the given namespace. This change concerns our internal migration framework. This is useful to handle our namespace changes (from Viewpoint to Sirius).
+ </li>
+ </ul>
+ <h4 id="APIRemoval">API Removal</h4>
+ <ul>
+ <li>Removed
+ <code>org.eclipse.sirius.common.tools.api.interpreter.IAcceleoInterpreterVariables</code>: This interface only defined a single constant, which refered to the syntax of an obsolete version of the Acceleo language.
+ </li>
+ <li>Removed
+ <code>org.eclipse.sirius.common.tools.api.resource.IFileContributorExtension</code>: This interface only defined a few constants relative to an extension point which does not exist anymore.
+ </li>
+ <li>Removed the
+ <code>org.eclipse.sirius.reconciler</code> extension point definition (which used to be defined in the
+ <code>org.eclipse.sirius</code> plug-in): This extension point is not supported anymore (and has not been for a long time).
+ </li>
+ <li>Removed all the deprecated methods from
+ <code>Session</code> and replaced the internal calls with the equivalent versions with
+ <code>IProgressMonitors</code>. The removed methods are:
+ </li>
+ </ul>
+ <pre>void open();
+void addSemanticResource(Resource newResource, boolean addCrossReferencedResources);
+void addSemanticResource(URI semanticModelURI, boolean addCrossReferencedResources);
+void addSemanticResource(URI semanticModelURI, boolean addCrossReferencedResources, IProgressMonitor monitor);
+void removeSemanticResource(Resource resource, boolean removeCrossReferencedResources);
+void removeSemanticResource(Resource semanticResource);
+void save();
+void close();
+Collection<Viewpoint> getSelectedViewpoints();
+void createView(Viewpoint viewpoint, Collection<EObject> semantics);
+void createView(Viewpoint viewpoint, Collection<EObject> semantics, boolean createNewRepresentations);
+void addSelectedView(DView view) throws IllegalArgumentException;
+void removeSelectedView(DView view);
+
+</pre>
+ <h3 id="SpecifierVisibleChanges6">Specifier-Visible Changes</h3>
+ <p>New variables are available for
+ <code>sizeComputationExpression</code> to compute the size of edges on
+ <code>EdgeStyleDescription</code> and
+ <code>BracketEdgeStyleDescription</code>:
+ </p>
+ <ul>
+ <li>
+ <em>diagram</em>: the current
+ <code>DDiagram</code>
+ </li>
+ <li>
+ <em>view</em>: the current
+ <code>DEdge</code>
+ </li>
+ <li>
+ <em>sourceView</em>: the source view of the current edge.
+ </li>
+ <li>
+ <em>targetView</em>: the target view of the current edge.
+ </li>
+ </ul>
+ <h3 id="UserVisibleChanges7">User-Visible Changes</h3>
+ <ul>
+ <li>The ability to print table representations has been disabled for the 0.9 release due to an external dependency issue (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=422223" target="_blank">bug #422223</a>: for the details). It should be re-introduced in 1.0.</li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/Architecture.html b/doc/5.1.x/developer/Architecture.html
new file mode 100644
index 0000000..6b714a5
--- /dev/null
+++ b/doc/5.1.x/developer/Architecture.html
@@ -0,0 +1,225 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Architecture</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusArchitectureandConcepts">Sirius Architecture and Concepts</h1>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#SiriusArchitectureandConcepts">Sirius Architecture and Concepts</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#session">Sessions</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#ted">Transactional Editing Domain</a>
+ </li>
+ <li>
+ <a href="#vp_selection">Changing the Viewpoint Selection</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#uisession">Editing Sessions</a>
+ </li>
+ <li>
+ <a href="#model_accessor">The Model Accessor</a>
+ </li>
+ <li>
+ <a href="#dialects">Dialects</a>
+ </li>
+ <li>
+ <a href="#viewpoint_registry">The Viewpoint Registry</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="introduction">Introduction</h2>
+ <p>This document presents an overview of the internal architecture of Sirius, and the main concepts and APIs.</p>
+ <p>Sirius relies heavily on the Eclipse platform, and reuses (and extends) many of the standard Eclipse frameworks, in particular the Eclipse Modeling Platform. This document assumes that you are already familiar with these frameworks and libraries, in particular EMF and EMF Transaction, GEF and GMF for diagrams. Refer to these frameworks' own documentation for more details about them.</p>
+ <h2 id="session">Sessions</h2>
+ <p>The central concept of Sirius’s API is the
+ <code>Session</code>. In Sirius, all data is stored in EMF models: the semantic models themselves obviously, but also the representations (diagrams, tables) and the viewpoint configuration (the
+ <em>Viewpoint Specification Models</em>). A session is a wrapper around a
+ <em>Transactional Editing Domain</em> and its
+ <em>Resource Set</em>. It ensures the consistency of the models inside the editing domain, from the platform’s point of view; for example it makes sure the representation files correctly reference all the semantic models they need to in order to handle the representations in the session. The session also provides high-level, Sirius-specific services through its own APIs and support classes and interfaces.
+ </p>
+ <p>In the standard UI, each
+ <em>Modeling Project</em> corresponds to exactly one
+ <code>Session</code>, and each session contains its own
+ <em>Editing Domain</em> and
+ <em>Resource Set</em>. This means that sessions (and thus modeling projects) are isolated from each other.
+ </p>
+ <p>The
+ <em>representation files</em> (
+ <code>*.aird</code> files) can be though as the serialized form of a
+ <code>Session</code>, and symmetrically a session is the runtime incarnation of a representation file (or more precisely of the unique top-level representation file in a modeling project).
+ </p>
+ <p>A session, inside its resource set, contains three kinds of resources:</p>
+ <ul>
+ <li>the
+ <em>semantic resources</em>, which contain the user’s semantic model;
+ </li>
+ <li>the
+ <em>representation resources</em>, which correspond to the
+ <code>aird</code> file(s), and contain representation data (e.g. diagrams);
+ </li>
+ <li>the
+ <em>Viewpoint Specification Models</em> which contain all the viewpoints used by the representations inside the session. These are the
+ <code>*.odesign</code> files, and are typically loaded from installed plug-in instead of from the workspace (except when using the
+ <em>dynamic mode</em> to develop viewpoints).
+ </li>
+ </ul>
+ <p>The
+ <code>SessionManager</code> is a global object which references all the sessions currently opened in the system. It can also be used to find which session is responsible for a given semantic element. This is very important because many Sirius APIs require that you provide a
+ <code>Session</code> parameter. If what you have is an element from a user semantic model, you can use
+ <code>SessionManager.INSTANCE.getSession(theSemanticElement)</code> to find in which of the opened session, if any, this object is loaded. Note that this method can be relatively costly, so do not call it in tight loops to avoid hurting performance.
+ </p>
+ <p>To create a Session programmatically:</p>
+ <pre><code>URI sessionResourceURI = URI.createPlatformResourceURI("/Project/archi.aird", true);
+Session createdSession = SessionManager.INSTANCE.getSession(sessionResourceURI);
+createdSession.open();
+</code></pre>
+ <p>The
+ <code>Session</code> API provides several methods to manage the different kind of resources it contains: finding all the
+ <em>semantic resources</em> and adding new ones, finding about all the referenced session resources (all the secondary
+ <code>*.aird</code> files which are part of the same session), etc. Refer to the
+ <code>Session</code> interface’s JavaDoc for details.
+ </p>
+ <p>The
+ <code>Session.getInterpreter()</code> method can be used to obtain an
+ <code>IInterpreter</code> properly configured to query the models in that session. The interpreter it returns will handle expression from any of the supported query languages, and you can use it to run your own queries (see the
+ <code>IInterpreter</code> API).
+ </p>
+ <p>Another interesting method in
+ <code>Session</code> is
+ <code>Session.getEventBroker()</code>. It returns a
+ <code>SessionEventBroker</code> object, which can be used to add trigger actions that will be performed whenever a change in the session’s model occurs. See
+ <code>SessionEventBroker</code> and
+ <code>ModelChangeTrigger</code> for details.
+ </p>
+ <p>When you are finished working with a session, you must
+ <code>close()</code> it. This will unload all the models in its resource set and free the corresponding memory. After a session has been close it can not be reopened, but you can open a new one on the same files if needed.
+ </p>
+ <h3 id="ted">Transactional Editing Domain</h3>
+ <p>The editing domain associated to each session is an EMFT
+ <em>Transactional Editing Domain</em>. In addition to basic undo/redo, it supports advanced features like atomicity and pre- and post-commit listeners, which are triggered after a command has been executed, and can be used to perform additional work (for pre-commit listeners) or to update external application data like UI state for post-commit listeners.
+ </p>
+ <p>The
+ <code>Session.getTransactionalEditingDomain()</code> will return the
+ <code>TransactionlEditingDomain</code> for a session.
+ </p>
+ <p>To modify a model element with a transactional editing domain, you must use a
+ <code>RecordingCommand</code>. If you try to modify the models inside a session (semantic model or representations) outside the context of a recording command, you will get an exception. The proper usage pattern is:
+ </p>
+ <pre><code>TransactionalEditingDomain ted = ...;
+ted.getCommandStack().execute(myCommand);
+</code></pre>
+ <p>where
+ <code>myCommand</code> is a
+ <code>RecordingCommand</code>.
+ </p>
+ <h3 id="vp_selection">Changing the Viewpoint Selection</h3>
+ <p>Each session has its own set of Viewpoints enabled, which determine which representations and extension are available. Users can change that selection using the
+ <em>Viewpoint Selection</em> action (for example on a
+ <em>Modeling Project</em>). You can also change this selection programmatically.
+ </p>
+ <p>The simplest way to do this is to use the
+ <code>UserSession</code> API; for example:
+ </p>
+ <pre><code>Session userSession = UserSession.from(createdSession);
+userSession.selectViewpoint("Design");
+</code></pre>
+ <h2 id="uisession">Editing Sessions</h2>
+ <p>An
+ <em>editing session</em>, represented by an instance of
+ <code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code>, manages the graphical editors associated to a session. A session can exist without an associated editing session, but some operations require that an editing session is explicitly opened. At most one editing session can exist for a given session.
+ </p>
+ <p>To retrieve the editing session associated to a session or create a new one, use the
+ <code>org.eclipse.sirius.ui.business.api.session.SessionUIManager</code> API. The manager serves both as a factory for editing sessions and as a registry of all the ones which are opened at a given time and which session they correspond to.
+ </p>
+ <p>The main services offered by an editing session are to open, close, save, and generally manage the lifecycle of the Eclipse editors associated with a session. Every time a representation (e.g. a diagram) is opened on a model, it happens through the corresponding editing session.</p>
+ <p>You can use the editing session’s APIs yourself to open representations, check their dirty states, save them, etc. Refer to the
+ <code>EditingSession</code>'s JavaDoc for details.
+ </p>
+ <p>You can also register
+ <code>IEditingSessionListeners</code> on an editing session, to be notified of state changes in the session, in particular when it becomes
+ <em>dirty</em>, meaning that it contains unsaved changes.
+ </p>
+ <h2 id="model_accessor">The Model Accessor</h2>
+ <p>The semantic models inside a session are never manipulated directly by Sirius. All access to these models is mediated through the session’s
+ <code>ModelAccessor</code> instead of directly through the normal EMF reflective APIs. This accessor serves two purposes:
+ </p>
+ <ul>
+ <li>It enables seamless extension (or restriction) of how the session views the semantic model. For example a model accessor could give access to virtual elements or properties, which do not exist “physically” inside the semantic model; it could also decide to hide some parts of the semantic model to viewpoint.</li>
+ <li>It allows the verification of any access or modification using the associated
+ <code>IPermissionAuthorithy</code>. The permission authority is used to lock model elements (both diagram and semantic elements), and to check if you have read and/or write access to each element and feature before access or modification.
+ </li>
+ </ul>
+ <p>You can obtain the model accessor associated to a session using the
+ <code>Session.getModelAccessor()</code> method, and the permission authority using
+ <code>ModelAccessor.getPermissionAuthority()</code>. If you extend Sirius, you should make sure to use the model accessor API to read and write the semantic model, and to use the permission authority to check any change you want to perform beforehand.
+ </p>
+ <h2 id="dialects">Dialects</h2>
+ <p>Sirius supports different kinds of representations: diagrams, tables and trees. These are all
+ <strong>dialects</strong>, which are supported by default by the platform. The core of the platform only deals with the abstract notion of a dialect, and each one is simply an extension.
+ </p>
+ <p>The
+ <code>DialectManager</code> (
+ <code>org.eclipse.sirius.business.api.dialect.DialectManager</code>) offers some general APIs which can be used to manipulate representations in a uniform way, independently of which concrete dialect provides them. The
+ <code>DialectManager</code> can be used to:
+ </p>
+ <ul>
+ <li>create new representations;</li>
+ <li>synchronize representations;</li>
+ <li>delete representations;</li>
+ <li>find existing representations.</li>
+ </ul>
+ <p>The
+ <code>DialectManager</code> is a global object but the services it offers work on representations inside sessions, so all the methods it provides require a
+ <code>Session</code> object as argument.
+ </p>
+ <p>In the same way as sessions are split in a core
+ <code>Session</code> API and an
+ <code>EditingSession</code> API to handle UI-specific services, the
+ <code>DialectManager</code> is complemented with the
+ <code>DialectUIManager</code> (
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIManager</code>), which offers generic APIs to representations services which depend on the UI. The main ones are:
+ </p>
+ <ul>
+ <li>opening and closing editors;</li>
+ <li>exporting representations into external files (e.g. images).</li>
+ </ul>
+ <h2 id="viewpoint_registry">The Viewpoint Registry</h2>
+ <p>The
+ <code>ViewpointRegistry</code> is a global object which knows about all the Viewpoint definitions available in the system at every time.
+ </p>
+ <p>When a plug-in containing properly packaged
+ <em>VSMs</em> is deployed, the registry will be notified (through the
+ <code>org.eclipse.sirius.componentization</code> extension point) and register all the viewpoints defined in any of these
+ <em>VSMs</em>. The registry also listens to changes in the Eclipse workspace to detect the creation, modification and deletion of any
+ <code>*.odesign</code> files; this is (part of) what enables dynamic development of VSMs, with no need for a costly deployment of plug-ins to test your changes: the latest version of a Viewpoint definition from the workspace is always known from the registry.
+ </p>
+ <p>You can use the registry to discover about all the viewpoint definitions which are available, and introspect the corresponding models. However be aware that the Viewpoint registry maintains its own editing domain and EMF
+ <code>ResourceSet</code> in which the viewpoints are loaded. The model loaded in the registry are
+ <strong>not</strong> the same as the ones loaded in a session that uses a given viewpoint. It is a different instance of the same model. This means you must be careful when comparing or passing around elements from a viewpoint definition. For example if you have defined a viewpoint named
+ <em>A</em>, and have two different sessions where
+ <em>A</em> is enabled, you will have three equivalent but different instances of
+ <em>A</em>: one in each of the sessions'
+ <code>ResourceSet</code>, and one in the
+ <code>ViewpointRegistry</code>'s private
+ <code>ResourceSet</code>.
+ </p>
+ <p>You can register listeners on the
+ <code>ViewpointRegistry</code> to be notified when Viewpoints are registered, unregistered, or when the definition of a viewpoint changes (for example because it was defined from an
+ <code>*.odesign</code> file in the workspace that you have just modified, and the registry detected it and reloaded the new definition);
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/Architecture_Overview.html b/doc/5.1.x/developer/Architecture_Overview.html
new file mode 100644
index 0000000..efa27fb
--- /dev/null
+++ b/doc/5.1.x/developer/Architecture_Overview.html
@@ -0,0 +1,74 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Architecture_Overview</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusArchitectureOverview">Sirius Architecture Overview</h1>
+ <p>Sirius is a platform for developing and using graphical model editors for any domain. It is based on the Eclipse Platform, and in particular the Eclipse Modeling stack based on EMF. The Sirius platform itself is domain-agnostic, in that it can be used to create modelers for any business domain as long as they can described using EMF.
+ <br/>There are two categories of users of Sirius:
+ </p>
+ <ol>
+ <li>
+ <strong>Architects</strong> use Sirius to develop modelers for their specific business domains, provided they have defined their domain using EMF’s Ecore.
+ </li>
+ <li>
+ <strong>End Users</strong> use the resulting modelers to create, view, edit, and in general manipulate actual business models of their domain.
+ </li>
+ </ol>
+ <p>The general architecture of Sirius is illustrated in the figure below and reflects this split:</p>
+ <img style="box-shadow: 0 0 0 0" border="0" src="images/Sirius - High-Level Architecture Overview.png"/>
+ <p>On top of Eclipse and EMF, Sirius is made of two main parts.</p>
+ <p>The Sirius
+ <strong>tooling</strong> (on the right hand of the figure), is the part used by architects. It provides an environment in which they can specify the modeler(s) they want to give to their end-users. This specification is done in a declarative way, by configuring a
+ <em>description model</em> . For each modeler, the architect must specify in the description model:
+ </p>
+ <ol>
+ <li>
+ <em>what</em> is to be represented in the modeler, i.e. which elements of the domain model should be visible;
+ </li>
+ <li>how these elements should
+ <em>look</em> , i.e. visual styling information;
+ </li>
+ <li>how these elements should
+ <em>behave</em> , i.e. which tools and interaction modes are available to the end-users to modify the business models, and how each tool behaves.
+ </li>
+ </ol>
+ <p>The Sirius Tooling provides a complete, easy to use environment for architects to create these specifications. The result is a (set of)
+ <em>description model(s)</em> , optionally with some accompanying Java code, that can be deployed as a normal Eclipse plug-in.
+ </p>
+ <p>The Sirius
+ <strong>runtime</strong> (on the left hand of the figure), is the part used by end-users, along with the modeler definition(s) produced by the architects. End-users do not need the Sirius Tooling in order to use Sirius-based modelers. The runtime is responsible for
+ <em>interpreting</em> the modeler description models and presenting to the user actual modeler(s) which look and behave as specified in the description.
+ <br/>To do this, the runtime uses a
+ <em>representation model</em> (and the corresponding meta-model), which describes the concrete representation(s) of end-users business models according to what is configured in the modelers’ specifications (i.e. which concrete business elements are represented, and how they look). These representation models are produced by the Sirius runtime using a refresh algorithm which produces a “projection” of the business data onto the representation domain using the rules defined in the modeler’s definitions.
+ <br/>The representation model is then shown to the end-user in a
+ <em>graphical editor</em> , integrated into the Eclipse workbench. Through the editor, the end-user can visualize his business model according to the rules defined by the architect in the modeler’s specification. The end-user can also
+ <em>interact</em> with his models as represented, but only in the ways configured by the architect. When the user interacts with the representation in the editor, some interactions (e.g. dragging and dropping and element on a diagram) can trigger behaviors defined by the architect, which will modify the underlying business model in ways that are consistent with the business rules. Whenever the business model is modified, Sirius re-launches the refresh algorithm, which is incremental: instead of creating a new representation model for the updated business model’s state, it updates the existing model and only changes the parts that need it. The ends-user can then see the effect of his changes immediately in the editor.
+ </p>
+ <p>
+ <img style="box-shadow: 0 0 0 0" border="0" src="images/Sirius - Representation Refresh-Sync.png"/>
+ </p>
+ <p>An important property of the refresh algorithm(s) is that they are not only incremental in terms of changes in the business model, but also in terms of changes in the modeler description model itself. This gives rise to one of the most important and distinctive features of Sirius: support for dynamic and incremental development of modelers by architects, with real-time feedback. In practice, this means that when an architect is developing a new modeler definition (or changing an existing one), he can have both the modeler’s definition open (using the Sirius Tooling) and an example representation also open alongside, and whenever he changes the modeler’s definition and saves it, the updated definition is automatically picked-up by the runtime and taken into account instantaneously by issuing a refresh.</p>
+ <p>In addition to the
+ <em>runtime</em> vs
+ <em>tooling</em> split, the Sirius architecture also separates the core part of the platform, which is independent on any specific kind of representation, and the
+ <em>dialect-specific extensions</em> . Each dialect, which handles a specific kind of representation, is built on top of the core architecture. For example by default Sirius supports three different dialects: diagrams, tables, and trees. More dialects can be implemented by other parties using the public APIs exposed by the Sirius core parts.
+ <br/>Each dialect provides its own specific extensions to the architecture elements in the core:
+ </p>
+ <ol>
+ <li>The representation meta-model is extended with the dialect’s own concepts. For example a diagram can have nodes and connections between these nodes.</li>
+ <li>The core description meta-model is extended to support the definition of these specific concepts. The tooling environment must then be extended to allow architects to specify these new concepts (in general this part can mostly be inferred from the structure of description metamodel and thus automatically generated).</li>
+ <li>Each dialect must provide its own refresh algorithm (although the Sirius core provides some common code to facilitate this).</li>
+ <li>Finally, each dialect must implement the editor(s) used to present their representations to the end-users and allow them to interact with them. This is where dialects make use of additional frameworks and technologies, like GMF for example to render diagrams.</li>
+ </ol>
+ <p>The Sirius architecture as described in this document has the following important properties:</p>
+ <ul>
+ <li>separation of tooling from the runtime: smaller runtime for end-users (which are much more numerous) with no UI “pollution” by architects-specific concepts; the runtime does not care how the modeler definitions where produced: using the standard tooling, using an alternate tooling developed completely separately, produced by a program… the only requirement is that the resulting definition conforms to the meta-model.</li>
+ <li>separation of the core from dialect-specific parts: isolates technical dependencies required by some dialects out of the core; allow installations with only a subset of all the supported dialects; extensible; by making even the standard dialects normal clients of the core, keeps us “honest” about our APIs: the standard dialect do not (or at least should not) have privileged access to core features that externally-developed dialects can not access; the core still provides a good place to share common abstractions and code, which results in less code in dialects, a better integration and more uniform end-user experience across different types of representations.</li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/Meta-models.html b/doc/5.1.x/developer/Meta-models.html
new file mode 100644
index 0000000..afbcf1d
--- /dev/null
+++ b/doc/5.1.x/developer/Meta-models.html
@@ -0,0 +1,121 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Meta-models</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="OverviewoftheSiriusMetaModels">Overview of the Sirius Meta-Models</h1>
+ <h2 id="introduction">Introduction</h2>
+ <p>Sirius uses EMF models to store both
+ <em>Viewpoint Specification Models</em> (the
+ <code>*.odesign</code> files) and representation data (the
+ <code>*.aird</code> files). If you need to extend the Sirius platform in Java, sooner or later you will have to deal with elements from these meta-models, so this document gives a very brief overview of which meta-models are used, where they are defined and how they are organized.
+ </p>
+ <h2 id="vsm_metamodels">Viewpoint Specification Meta-Models</h2>
+ <p>The structure of the
+ <em>VSMs</em> is defined by several meta-models. The
+ <code>org.eclipse.sirius</code> plug-in contains the
+ <code>http://www.eclipse.org/sirius/1.1.0</code> Ecore package and its sub-packages, which defines the general structure of a VSM:
+ </p>
+ <ul>
+ <li>
+ <code>http://www.eclipse.org/sirius/description/1.1.0</code>: defines the overall structure (
+ <code>Group</code>,
+ <code>Viewpoint</code>, the abstract
+ <code>RepresentationDescription</code> type used for all dialects).
+ </li>
+ <li>
+ <code>http://www.eclipse.org/sirius/description/style/1.1.0</code>: defines the abstract and generic
+ <code>StyleDescription</code> and associated types which are used by all dialects.
+ </li>
+ <li>
+ <code>http://www.eclipse.org/sirius/description/tool/1.1.0</code>: defines the generic
+ <code>AbstractToolDescription</code> and generic tool types. This package also contains the definitions for all the
+ <a href="../specifier/general/Model_Operations.html">Model Operations</a> like
+ <code>If</code>,
+ <code>CreateInstance</code>, etc.
+ </li>
+ <li>
+ <code>http://www.eclipse.org/sirius/description/validation/1.1.0</code>: defines the validation rules which can be added to viewpoints and diagrams, include the quick-fixes definitions.
+ </li>
+ </ul>
+ <p>The other dialects define their own extensions to these packages, in their own plug-ins. They follow the same structure:</p>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.diagram</code> defines
+ <code>http://www.eclipse.org/sirius/diagram/description/1.1.0</code> and its sub-packages, with all the elements that are used to specify a diagram description inside a VSM.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.sequence</code> defines
+ <code>http://www.eclipse.org/sirius/diagram/sequence/description/2.0.0</code> and
+ <code>http://www.eclipse.org/sirius/diagram/sequence/description//tool/2.0.0</code> for sequence diagrams-specific mappings and tools.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table</code> defines
+ <code>http://www.eclipse.org/sirius/table/description/1.1.0</code> for table mappings and tools.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree</code> defines
+ <code>http://www.eclipse.org/sirius/tree/description/1.1.0</code> for tree mappings and tools.
+ </li>
+ </ul>
+ <h2 id="representation_metamodels">Representation Meta-Models</h2>
+ <p>The meta-models described above correspond to the elements which are found inside the
+ <code>*.odesign</code> files. The
+ <em>representation files</em> (
+ <code>*.aird</code>) are also stored as models. A representation can be thought of as a serialized version of a session. It includes references to the semantic models represented in the session, and the model for each actual representation (diagram, table or tree). These representation models are organized into groups corresponding to which viewpoint defines them, and the representation file also stores the set of currently enabled viewpoints in the session.
+ </p>
+ <p>This means the representation file
+ <em>contains</em> the representation and session data,
+ <em>references</em> the semantic models, and also
+ <em>references</em> the
+ <em>VSMs</em> which define the representations it contains.
+ </p>
+ <p>The meta-model for representation files is defined in the
+ <code>http://www.eclipse.org/sirius/1.1.0</code> package, from the main
+ <code>org.eclipse.sirius</code> plug-in. Diagrams, sequence diagrams, tables and trees define their own meta-models to describe their representations' data:
+ </p>
+ <ul>
+ <li>
+ <code>http://www.eclipse.org/sirius/diagram/1.1.0</code> defined in
+ <code>org.eclipse.sirius.diagram</code>.
+ </li>
+ <li>
+ <code>http://www.eclipse.org/sirius/diagram/sequence/2.0.0</code> defined in
+ <code>org.eclipse.sirius.diagram.sequence</code>.
+ </li>
+ <li>
+ <code>http://www.eclipse.org/sirius/table/1.1.0</code> defined in
+ <code>org.eclipse.sirius.table</code>.
+ </li>
+ <li>
+ <code>http://www.eclipse.org/sirius/tree/1.0.0</code> defined in
+ <code>org.eclipse.sirius.tree</code>.
+ </li>
+ </ul>
+ <p>The concrete structure of an
+ <code>aird</code> file is the following: An
+ <code>aird</code> resource contains a single
+ <code>DAnalysis</code>. The analysis references the semantic resources in the session, via its
+ <code>semanticResources</code> reference, and may reference other “sub-aird” through its
+ <code>referencedAnalysis</code> reference. It also contains through
+ <code>ownedViews</code> a
+ <code>DView</code> for every Viewpoint which was ever enabled in the session. The sub-set of
+ <code>ownedViews</code> in
+ <code>selectedViews</code> corresponds to the Viewpoints currently enabled in the session. Each
+ <code>DView</code> references (through
+ <code>viewpoint</code>) the viewpoint definition it is an “instance” of, and contains actual representations (from that viewpoint) in
+ <code>ownedRepresentations</code>.
+ </p>
+ <p>The structure of the representations themselves depend on each dialect, which defines its own meta-model as mentioned above. However, they all use the
+ <code>org.eclipse.sirius.viewpoint.DSemanticDecorator</code> interface for representation elements which stand for semantic elements. The
+ <code>getTarget()</code> method of
+ <code>DSemanticDecorator</code> can be used to obtain the actual semantic target element being represented. This means that both a node on a diagram (which is a
+ <code>DNode</code>) and a cell in a table (a
+ <code>DCell</code>), and any other representation element in Sirius, share the same API to retrieve the element in the user’s semantic model that it represents.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/Sirius Developer Manual.html b/doc/5.1.x/developer/Sirius Developer Manual.html
new file mode 100644
index 0000000..86692ef
--- /dev/null
+++ b/doc/5.1.x/developer/Sirius Developer Manual.html
@@ -0,0 +1,116 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Sirius Developer Manual</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusDeveloperManual">Sirius Developer Manual</h1>
+ <p>This document gives an overview of the internals of the
+ <em>Sirius</em> platform, and describes the main APIs and extension points.
+ </p>
+ <ul>
+ <li>
+ <a href="Architecture_Overview.html">
+ <strong>Architecture Overview</strong>
+ </a> provides a high-level view of how Sirius is structured.
+ </li>
+ <li>
+ <a href="Architecture.html">
+ <strong>Architecture and Concepts</strong>
+ </a> describes the general architecture of the system, the main concepts and top-level entry points in the APIs.
+ </li>
+ <li>
+ <a href="Meta-models.html">
+ <strong>Meta-models</strong>
+ </a> gives a high-level description of the various meta-models used internally by Sirius, to represent both
+ <em>VSMs</em> and representation files.
+ </li>
+ <li>The Sirius platform publishs a set of API, and the next sections describe some which require particular attention:
+ <ul>
+ <li>
+ <a href="siriusCrossReferenceAdapter.html">
+ <strong>SiriusCrossReferenceAdapter</strong>
+ </a>
+ </li>
+ <li>
+ <a href="representations_lazy_loading.html">
+ <strong>Representations lazy loading (experimental)</strong>
+ </a>
+ </li>
+ </ul>
+ </li>
+ <li>The Sirius platform is extensible, and the next sections describe some common extension scenarios:
+ <ul>
+ <li>
+ <a href="integration-plm.html">
+ <strong>Integration with Product Life Cycle Management</strong>
+ </a>
+ </li>
+ <li>
+ <a href="integration-modeler_description_file_deployment.html">
+ <strong>Deploy a Modeler Description File</strong>
+ </a>
+ </li>
+ <li>
+ <a href="extensions-provide_save_dialog.html">
+ <strong>Provide custom save dialog</strong>
+ </a>
+ </li>
+ <li>
+ <a href="extensions-provide_custom-arrange-all.html">
+ <strong>Provide custom arrange-all</strong>
+ </a>
+ </li>
+ <li>
+ <a href="extensions-provide_custom_style.html">
+ <strong>Provide custom style</strong>
+ </a>
+ </li>
+ <li>
+ <a href="extensions-provide_tabbar_extensions.html">
+ <strong>Provide tab-bar extensions</strong>
+ </a>
+ </li>
+ <li>
+ <a href="extensions-provide_migrate_contribution.html">
+ <strong>Provide custom representation files migration</strong>
+ </a>
+ </li>
+ <li>
+ <a href="extensions-provide_repair_contribution.html">
+ <strong>Provide custom repair participant</strong>
+ </a>
+ </li>
+ <li>
+ <a href="extensions-provide_celleditor.html">
+ <strong>Provide custom cell editor</strong>
+ </a>
+ </li>
+ <li>
+ <a href="extensions-provide_custom_bundled_image_shape.html">
+ <strong>Provide custom bundled image shape</strong>
+ </a>
+ </li>
+ <li>
+ <a href="extensions-properties_provide_custom_widget.html">
+ <strong>Provide custom widget for the properties view and dialogs</strong>
+ </a>
+ </li>
+ <li>
+ <a href="extensions-provide_custom_model_operation.html">
+ <strong>Provide custom model operation</strong>
+ </a>
+ </li>
+ <li>
+ <a href="extensions-provide_custom_aird_editor_pages.html">
+ <strong>Provide custom aird editor pages</strong>
+ </a>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-properties_provide_custom_widget.html b/doc/5.1.x/developer/extensions-properties_provide_custom_widget.html
new file mode 100644
index 0000000..3983cac
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-properties_provide_custom_widget.html
@@ -0,0 +1,41 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-properties_provide_custom_widget</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusProvideCustomWidgetForThePropertiesView">Sirius – Provide Custom Widget For The Properties View</h1>
+ <h2 id="Goal">Goal</h2>
+ <p>Using the Properties DSL in the odesign, a specifier can create the content of the Properties view for her/his Sirius-based designers. In some projects, a specifier may require the use of additional widgets not provided by the Sirius Properties runtime. In order to fulfill this need, the Sirius Properties runtime provide two ways for a developer to contribute additional widgets for specifiers.</p>
+ <h2 id="Strategies">Strategies</h2>
+ <p>Two strategies,
+ <a href="extensions-properties_provide_custom_widget_basic.html">
+ <strong>Basic Custom Widget</strong>
+ </a> and
+ <a href="extensions-properties_provide_custom_widget_advanced.html">
+ <strong>Advanced Custom Widget</strong>
+ </a>, exist to create a custom widget depending on the quality of the integration of the custom widget that you want to create.
+ </p>
+ <table class="table table-bordered" style="margin-left:0">
+ <tr>
+ <td></td>
+ <th>Basic Custom Widget</th>
+ <th>Advanced Custom Widget</th>
+ </tr>
+ <tr>
+ <td>Advantages</td>
+ <td>Easier to implement by the developer</td>
+ <td>Exactly the same integration in Sirius as any other concepts</td>
+ </tr>
+ <tr>
+ <td>Drawbacks</td>
+ <td>Poor user interface for the specifier to manipulate</td>
+ <td>Complex to implement by the developer</td>
+ </tr>
+ </table>
+ <p>Those two strategies have their own specific advantages and drawbacks but the “Advanced Custom Widget” strategy can developed as a follow-up of a “Basic Custom Widget” while keeping most of the code developed for the “Basic Custom Widget” approach.</p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-properties_provide_custom_widget_advanced.html b/doc/5.1.x/developer/extensions-properties_provide_custom_widget_advanced.html
new file mode 100644
index 0000000..a0c8bd3
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-properties_provide_custom_widget_advanced.html
@@ -0,0 +1,623 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-properties_provide_custom_widget_advanced</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusPropertiesAdvancedCustomWidget">Sirius Properties – Advanced Custom Widget</h1>
+ <h2 id="Goal">Goal</h2>
+ <p>Using the Advanced Custom Widget approach, our goal aims at the creation of a custom widget with a great user experience for the Sirius specifier. This custom widget will be created after the development of the basic custom widget. You should be familiar with this approach first.</p>
+ <h2 id="Strategy">Strategy</h2>
+ <p>In order to create a custom widget, we will have to think about the two kind of users that will interact with our work, the Sirius specifier and the end-user. With this advanced approach, we will create a table widget for the end-user with a great experience for the Sirius specifier who will manipulate it.</p>
+ <h3 id="SpecificationofthecustomwidgetinEclipseSirius">Specification of the custom widget in Eclipse Sirius</h3>
+ <p>The specification of the advanced custom widget will be the main difference with the basic custom widget. While with the basic approach, the Sirius specifier had to use a generic and bland custom widget description, with the advanced approach we will create a real definition for the Sirius specifier to manipulate.</p>
+ <p>As a first step, we want to contribute a piece of model to be displayed in the odesign file for our Sirius specifiers. For that, you will have to create a plugin named
+ <code>com.example.awesomeproject.sirius.properties.ext.widgets.table</code> containing, in a folder named model, an Ecore model named
+ <code>properties-ext-widgets-table.ecore</code>. In this Ecore model, you will have to load the resource
+ <code>properties.ecore</code> used to define the Properties view description in the odesign. This meta-model can be found in the EPackage registry using its NsURI
+ <code>http://www.eclipse.org/sirius/properties/1.0.0</code>.
+ </p>
+ <p>Once this resource has been loaded, give a name, NsPrefix and NsURI to your EPackage (the root element), for example:</p>
+ <ul>
+ <li>Name:
+ <code>propertiesextwidgetstable</code>
+ </li>
+ <li>NsPrefix:
+ <code>properties-ext-widgets-table</code>
+ </li>
+ <li>NsURI:
+ <code>http://www.example.com/awesomeproject/properties/ext/widgets/table</code>
+ </li>
+ </ul>
+ <p>After that, you can create an EClass under the EPackage with the named
+ <code>ExtTableDescription</code> and with the EClass
+ <code>WidgetDescription</code> as a supertype. This EClass should contain for our example two EAttributes named
+ <code>onClickExpression</code> and
+ <code>valueExpression</code> and both should have the type
+ <code>InterpretedExpresion</code>.
+ </p>
+ <p>You can then create a genmodel file for your Ecore model in the same repository. Make sure to configure your
+ <code>genmodel</code> with a
+ <em>Runtime Version</em> property set to
+ <em>2.3</em> so that the generated Java is compatible with the “parent” metamodel from Sirius. Launching the generation of the model and its edit support will produce two plugins:
+ </p>
+ <ul>
+ <li>Sirius Properties model extension:
+ <code>com.example.awesomeproject.sirius.properties.ext.widgets.table</code>
+ </li>
+ <li>Sirius Properties model extension Edit support:
+ <code>com.example.awesomeproject.sirius.properties.ext.widgets.table.edit</code>
+ </li>
+ </ul>
+ <h3 id="SpecificationofthecustomwidgetinEclipseEEF">Specification of the custom widget in Eclipse EEF</h3>
+ <p>Eclipse EEF has a runtime independent of Eclipse Sirius and as such the definition of the widget that exist in the odesign file has to be transformed into a definition that can be maintained by Eclipse EEF. For most of the existing concepts this transformation is very basic since it only involves the transformation of the Sirius concepts directly into similar EEF concepts but both domain specific languages have very different roles.</p>
+ <p>The Eclipse Sirius Properties DSL is used as the user interface for the Eclipse Sirius specifier while the Eclipse EEF DSL is the model interpreted by the runtime. It is perfectly possible, and even recommended, to define, in the extension of the Sirius Properties DSL, high level concepts that should be user-friendly for the Sirius specifier and to keep in the extension of the EEF DSL raw concepts transformed from the extension of the Sirius Properties DSL.</p>
+ <p>You will now have to create a third plugin named
+ <code>com.example.awesomeproject.eef.ext.widgets.table</code> with a model folder and an Ecore model inside named
+ <code>eef-ext-widgets-table.ecore</code>. In this model you should load the resource
+ <code>eef.ecore</code> containing the EEF DSL that you will have to extend. You can find it in the EPackage registry using its NsURI
+ <code>http://www.eclipse.org/eef</code>. Once the EEF DSL is loaded, you can set the properties of your root EPackage:
+ </p>
+ <ul>
+ <li>Name:
+ <code>eefextwidgetstable</code>
+ </li>
+ <li>NsPrefix:
+ <code>eef-ext-widgets-table</code>
+ </li>
+ <li>NsURI:
+ <code>http://www.example.com/awesomeproject/eef/ext/widgets/table</code>
+ </li>
+ </ul>
+ <p>Under this root EPackage, you can now create your EClass named
+ <code>EEFExtTableDescription</code> which should have
+ <code>EEFWidgetDescription</code> as a supertype. This EClass should contain for our example two EAttributes named
+ <code>onClickExpression</code> and
+ <code>valueExpression</code> and both should have the type
+ <code>EString</code>. In our example, both the extension of the Sirius DSL and the EEF DSL have the same properties since we are using a very simple example.
+ </p>
+ <p>You can now create a genmodel for your extension of the EEF DSL and generate the code for the model (the Edit support is not necessary here). You will now have three plugins:</p>
+ <ul>
+ <li>Sirius Properties model extension:
+ <code>com.example.awesomeproject.sirius.properties.ext.widgets.table</code>
+ </li>
+ <li>Sirius Properties model extension Edit support:
+ <code>com.example.awesomeproject.sirius.properties.ext.widgets.table.edit</code>
+ </li>
+ <li>EEF model extension:
+ <code>com.example.awesomeproject.eef.ext.widgets.table</code>
+ </li>
+ </ul>
+ <h3 id="ContributionoftheconverterfromSiriustoEEF">Contribution of the converter from Sirius to EEF</h3>
+ <p>Now that you have your extension to the Sirius Properties DSL and the EEF DSL, you need to inform the Sirius bridge how to transform the concepts from your extension to the Sirius DSL into EEF concepts. For that an extension point is available in order to contribute an IDescriptionConverter. This converter will have to depend on the Sirius bridge for Eclipse EEF and at least the extension to both the Sirius Properties DSL and the EEF DSL. As a result, this code will have to go into another plugin because having those dependencies on an existing plugins would be against the best practices. We will thus create a fourth plugin named
+ <code>com.example.awesomeproject.sirius.ui.properties.ext.widgets.table</code>. In this plugin, we will declare our description converter using the following extension.
+ </p>
+ <pre><?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.sirius.ui.properties.descriptionConverter">
+ <descriptor
+ class="com.example.awesomeproject.sirius.ui.properties.ext.widgets.table.internal.ExtTableDescriptionConverter"
+ description="%tableDescriptionConverter.Description"
+ id="com.example.awesomeproject.sirius.ui.properties.ext.widgets.table.descriptionConverter"
+ label="%tableDescriptionConverter.Label">
+ </descriptor>
+ </extension>
+</plugin>
+
+</pre>
+ <p>
+ <br/>The transformation from the Sirius DSL to the EEF DSL occur in two parts, first the description are converted using an IDescriptionConverter and after an IDescriptionLinkResolver may be used to resolve some links. In our case, the description converter will simply be used to transform a instance of
+ <code>ExtTableDescription</code> into an
+ <code>EEFExtTableDescription</code> and we won’t use a description link resolver since it is not useful here.
+ </p>
+ <pre>package com.example.awesomeproject.sirius.ui.properties.ext.widgets.table.internal;
+
+import java.util.Map;
+
+import com.example.awesomeproject.eef.ext.widgets.table.EEFExtTableDescription;
+import com.example.awesomeproject.eef.ext.widgets.table.EefExtWidgetsTableFactory;
+import org.eclipse.emf.ecore.EObject;
+import com.example.awesomeproject.sirius.properties.ext.widgets.table.ExtTableDescription;
+import org.eclipse.sirius.ui.properties.api.DescriptionCache;
+import org.eclipse.sirius.ui.properties.api.IDescriptionConverter;
+
+public class ExtTableDescriptionConverter implements IDescriptionConverter {
+
+ @Override
+ public boolean canHandle(EObject description) {
+ return description instanceof ExtTableDescription;
+ }
+
+ @Override
+ public EObject convert(EObject description, Map<String, Object> parameters, DescriptionCache cache) {
+ if (description instanceof ExtTableDescription) {
+ ExtTableDescription extTableDescription = (ExtTableDescription) description;
+
+ EEFExtTableDescription eefExtTableDescription = EefExtWidgetsTableFactory.eINSTANCE.createEEFExtTableDescription();
+ eefExtTableDescription.setIdentifier(extTableDescription.getIdentifier());
+ eefExtTableDescription.setHelpExpression(extTableDescription.getHelpExpression());
+ eefExtTableDescription.setIsEnabledExpression(extTableDescription.getIsEnabledExpression());
+ eefExtTableDescription.setLabelExpression(extTableDescription.getLabelExpression());
+
+ eefExtTableDescription.setValueExpression(extTableDescription.getValueExpression());
+ eefExtTableDescription.setOnClickExpression(extTableDescription.getOnClickExpression());
+
+ // Let's not forget to populate the cache for the other converters or link resolvers
+ cache.put(extTableDescription, eefExtTableDescription);
+
+ return eefExtTableDescription;
+ }
+ return null;
+ }
+}
+
+</pre>
+ <p>
+ <br/>An IDescriptionConverter can be used to convert any element from the Sirius Properties DSL into an EEF DSL element. In order to support custom widgets, you only have to handle your own objects but you could still modify other kind of objects from the Sirius Properties DSL. As a result, this mechanism can be used to dynamically modify anything in the description of the Properties view at runtime. This usage of the IDescriptionConverter should almost never be used, it’s a very powerful mechanism for extremely advanced users only.
+ </p>
+ <p>In order to help developer transform their Sirius entities into EEF entities, multiple possible super-classes are available:</p>
+ <ul>
+ <li>org.eclipse.sirius.ui.properties.api.AbstractDescriptionConverter – Common superclass with utility methods</li>
+ <li>org.eclipse.sirius.ui.properties.api.DefaultDescriptionConverter – Converter for basic transformations</li>
+ <li>org.eclipse.sirius.ui.properties.api.DefaultDescriptionWithInitialOperationConverter – Converter with support for the transformation of a basic operation into a regular expression</li>
+ <li>org.eclipse.sirius.ui.properties.api.DefaultStyleDescriptionConverter – Converter with support for styling</li>
+ </ul>
+ <h3 id="ContributionofthepreprocessorfromSiriuswithextensibilityfeaturestoflattenSirius">Contribution of the preprocessor from Sirius with extensibility features to flatten Sirius</h3>
+ <p>Now that you have your extension to the Sirius Properties DSL, you need to inform the Sirius bridge how to transform the concepts from your new widget with extensibility to the Sirius DSL without extends or overrides mechanism. For that an extension point is available in order to contribute an IDescriptionPreprocessor. This preprocessor will have to depend on the Sirius bridge. As a result, this code will have to go into the same plugin as the converter for best practices. We will thus contribute to the plugin named
+ <code>com.example.awesomeproject.sirius.ui.properties.ext.widgets.table</code>. In this plugin, we will declare our description preprocessor using the following extension.
+ </p>
+ <pre><?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.sirius.ui.properties.descriptionPreprocessor">
+ <descriptor
+ class="com.example.awesomeproject.sirius.ui.properties.ext.widgets.table.internal.ExtTableDescriptionPreprocessor"
+ description="%tableDescriptionPreprocessor.Description"
+ id="com.example.awesomeproject.sirius.ui.properties.ext.widgets.table.descriptionPreprocessor"
+ label="%tableDescriptionPreprocessor.Label">
+ </descriptor>
+ </extension>
+</plugin>
+
+</pre>
+ <p>
+ <br/>The transformation from the Sirius DSL with extends/overrides to the Sirius DSL occur in two parts, first the description are converted using an IDescriptionPreprocessor and after an IDescriptionLinkResolver may be used to resolve some links. In our case, the description preprocessor will simply be used to transform a instance of
+ <code>ExtTableDescription</code> with extends into a flatten
+ <code>ExtTableDescription</code> without extends/overrides and we won’t use a description link resolver since it is not useful here.
+ </p>
+ <pre>package com.example.awesomeproject.sirius.ui.properties.ext.widgets.table.internal;
+
+import java.util.Map;
+
+import com.example.awesomeproject.eef.ext.widgets.table.EEFExtTableDescription;
+import com.example.awesomeproject.eef.ext.widgets.table.EefExtWidgetsTableFactory;
+import org.eclipse.emf.ecore.EObject;
+import com.example.awesomeproject.sirius.properties.ext.widgets.table.ExtTableDescription;
+import org.eclipse.sirius.ui.properties.api.DescriptionCache;
+import org.eclipse.sirius.ui.properties.api.IDescriptionPreprocessor;
+
+public class ExtTableDescriptionPreprocessor extends PreconfiguredPreprocessor<ExtTableDescription> {
+
+ @Override
+ public boolean canHandle(EObject description) {
+ return description instanceof ExtTableDescription;
+ }
+}
+
+</pre>
+ <p>
+ <br/>An IDescriptionPreprocessor can be used to convert any element from the Sirius Properties DSL with extends/overrides to a flatten Sirius DSL.
+ </p>
+ <p>In order to help developer transform their Sirius entities into Sirius flatten entities, multiple possible super-classes are available:</p>
+ <ul>
+ <li>org.eclipse.sirius.ui.properties.api.DefaultDescriptionPreprocessor – Preprocessor for basic transformations</li>
+ <li>org.eclipse.sirius.ui.properties.api.DefaultDescriptionPreprocessorWithFiltering – Preprocessor with support for ignoring some features and copying the value of some other features. This means that in the models resulting from the preprocessing, the ignored values are not copied or inherited.</li>
+ <li>org.eclipse.sirius.ui.properties.api.PreconfiguredPreprocessor – Preprocessor with support for most of the cases by ignoring : the extends reference, all the filters of the extension mechanism and by copying: the actions, the initial operation, the style, the conditional styles.</li>
+ </ul>
+ <h3 id="ContributionofthePropertiessectionfortheodesign">Contribution of the Properties section for the odesign</h3>
+ <p>If you try to edit your extension of the Sirius DSL in the odesign editor, you will find out that it does not work. In order to be able to view the properties of your widget, in our case the
+ <code>onClickExpression</code> and the
+ <code>valueExpression</code>, you will need to contribute to the Properties view of the odesign editor. Since this contribution will require a dependency with the framework used for the Properties view of the odesign editor, it will require another plugin named
+ <code>com.example.awesomeproject.sirius.editor.properties.ext.widgets.table</code> with a dependency to at least:
+ </p>
+ <ul>
+ <li>com.example.awesomeproject.sirius.properties.ext.widgets.table</li>
+ <li>com.example.awesomeproject.sirius.properties.ext.widgets.table.edit</li>
+ <li>org.eclipse.ui.views.properties.tabbed</li>
+ <li>org.eclipse.sirius.editor</li>
+ </ul>
+ <pre><?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.ui.views.properties.tabbed.propertySections">
+ <propertySections
+ contributorId="org.eclipse.sirius.editor.editorPlugin.SiriusEditorContributor">
+ <propertySection
+ afterSection="properties.section.widgetDescription.IsEnabledExpression"
+ class="com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.internal.ExtTableDescriptionValueExpressionPropertySection"
+ filter="com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.internal.ExtTableDescriptionValueExpressionFilter"
+ id="properties.section.extTableDescription.valueExpression"
+ tab="viewpoint.tab.general">
+ <input
+ type="com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.propertiesextwidgetstablee.ExtTableDescription">
+ </input>
+ </propertySection>
+ <propertySection
+ afterSection="properties.section.extTableDescription.valueExpression"
+ class="com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.internal.ExtTableDescriptionOnClickExpressionPropertySection"
+ filter="com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.internal.ExtTableDescriptionOnClickExpressionFilter"
+ id="properties.section.extTableDescription.valueExpression"
+ tab="viewpoint.tab.general">
+ <input
+ type="com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.propertiesextwidgetstablee.ExtTableDescription">
+ </input>
+ </propertySection>
+ </propertySections>
+ </extension>
+</plugin>
+
+
+</pre>
+ <p>
+ <br/>Two property sections will be necessary in order to display a text field for the value expression and the on click expression.
+ </p>
+ <pre>package com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.internal;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.sirius.editor.properties.filters.common.ViewpointPropertyFilter;
+import com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.propertiesextwidgetstablee.PropertiesExtTablePackage;
+
+public class ExtTableDescriptionOnClickExpressionFilter extends ViewpointPropertyFilter {
+
+ @Override
+ protected EStructuralFeature getFeature() {
+ return PropertiesExtTablePackage.eINSTANCE.getExtTableDescription_OnClickExpression();
+ }
+
+ @Override
+ protected boolean isRightInputType(Object arg0) {
+ return arg0 instanceof com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.propertiesextwidgetstablee.ExtTableDescription;
+ }
+
+}
+
+</pre>
+ <p>
+ <br/>Both filter will look almost the same, the only difference will be the structural feature that they will return.
+ </p>
+ <pre>package com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.internal;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.sirius.editor.editorPlugin.SiriusEditor;
+import org.eclipse.sirius.editor.properties.sections.common.AbstractTextWithButtonPropertySection;
+import org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider;
+import org.eclipse.sirius.editor.tools.internal.presentation.TextWithContentProposalDialog;
+import com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.propertiesextwidgetstablee.PropertiesExtTablePackage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+
+@SuppressWarnings("restriction")
+public class ExtTableDescriptionOnClickExpressionPropertySection extends AbstractTextWithButtonPropertySection {
+
+ @Override
+ protected String getDefaultLabelText() {
+ return "On Click Expression"; //$NON-NLS-1$
+ }
+
+ @Override
+ protected String getLabelText() {
+ String labelText;
+ labelText = super.getLabelText() + "*:"; //$NON-NLS-1$
+ return labelText;
+ }
+
+ @Override
+ public EAttribute getFeature() {
+ return PropertiesExtTablePackage.eINSTANCE.getExtTableDescription_OnClickExpression();
+ }
+
+ @Override
+ protected Object getFeatureValue(String newText) {
+ return newText;
+ }
+
+ @Override
+ protected boolean isEqual(String newText) {
+ return this.getFeatureAsText().equals(newText);
+ }
+
+ @Override
+ public void createControls(Composite parent, TabbedPropertySheetPage tabbedPropertySheetPage) {
+ super.createControls(parent, tabbedPropertySheetPage);
+
+ text.setToolTipText(getToolTipText());
+ /*
+ * We set the color as it's a InterpretedExpression
+ */
+ text.setBackground(SiriusEditor.getColorRegistry().get("yellow")); //$NON-NLS-1$
+
+ TypeContentProposalProvider.bindPluginsCompletionProcessors(this, text);
+
+ FormData data = new FormData();
+ data.top = new FormAttachment(text, 0, SWT.TOP);
+ data.left = new FormAttachment(nameLabel);
+
+ nameLabel.setFont(SiriusEditor.getFontRegistry().get("required")); //$NON-NLS-1$
+ }
+
+ @Override
+ protected SelectionListener createButtonListener() {
+ return new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ TextWithContentProposalDialog dialog = new TextWithContentProposalDialog(composite.getShell(), ExtTableDescriptionOnClickExpressionPropertySection.this, text.getText());
+ dialog.open();
+ text.setText(dialog.getResult());
+ handleTextModified();
+ }
+ };
+ }
+
+ @Override
+ protected String getPropertyDescription() {
+ return ""; //$NON-NLS-1$
+ }
+
+}
+
+
+</pre>
+ <p>
+ <br/>This property section will create a text field and label in the Properties view of the odesign editor in order to let the Sirius specifier edit the
+ <code>onClickExpression</code> of the table. Our text field will have the same appear and feature as the regular yellow text fields used by Sirius.
+ </p>
+ <h3 id="Updatetothepluginsofourbasicwidgetapproach">Update to the plugins of our basic widget approach</h3>
+ <p>Now we can reuse our work in the basic approach but this time with our own specific DSL instead of reusing the CustomElements from the EEF DSL. First we will have to modify the lifecycle manager provider to support our EEFExtTableDescription.</p>
+ <pre>package com.example.awesomeproject.eef.ide.ui.ext.widgets.table.internal;
+
+import org.eclipse.eef.EEFControlDescription;
+import org.eclipse.eef.EEFCustomWidgetDescription;
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.eef.ide.ui.api.widgets.IEEFLifecycleManager;
+import org.eclipse.eef.ide.ui.api.widgets.IEEFLifecycleManagerProvider;
+import org.eclipse.sirius.common.interpreter.api.IInterpreter;
+import org.eclipse.sirius.common.interpreter.api.IVariableManager;
+
+public class TableLifecycleManagerProvider implements IEEFLifecycleManagerProvider {
+ /**
+ * The identifier of the control description supported.
+ */
+ private static final String SUPPORTED_ID = "com.example.awesomeproject.sirius.properties.ext.widgets.table"; //$NON-NLS-1$
+
+ @Override
+ public boolean canHandle(EEFControlDescription controlDescription) {
+ // only support custom widgets with the proper identifier
+ return SUPPORTED_ID.equals(controlDescription.getIdentifier()) && controlDescription instanceof EEFCustomWidgetDescription;
+ }
+
+ @Override
+ public IEEFLifecycleManager getLifecycleManager(EEFControlDescription controlDescription, IVariableManager variableManager, IInterpreter interpreter, EditingContextAdapter contextAdapter) {
+ if (controlDescription instanceof EEFCustomWidgetDescription) {
+ return new TableLifecycleManager((EEFCustomWidgetDescription) controlDescription, variableManager, interpreter, contextAdapter);
+ }
+ throw new IllegalArgumentException();
+ }
+}
+
+
+</pre>
+ <p>
+ <br/>Now we can just modify our lifecycle manager to support our EEFExtTableDescription.
+ </p>
+ <pre>package com.example.awesomeproject.eef.ide.ui.ext.widgets.table.internal;
+
+import java.util.function.Consumer;
+
+import org.eclipse.eef.EEFCustomWidgetDescription;
+import org.eclipse.eef.EEFWidgetDescription;
+import org.eclipse.eef.common.ui.api.IEEFFormContainer;
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.eef.core.api.controllers.IEEFWidgetController;
+import org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.sirius.common.interpreter.api.IInterpreter;
+import org.eclipse.sirius.common.interpreter.api.IVariableManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Table;
+
+import com.example.awesomeproject.eef.core.ext.widgets.table.internal.TableController;
+
+public class TableLifecycleManager extends AbstractEEFWidgetLifecycleManager {
+
+ private EEFCustomWidgetDescription description;
+
+ private TableViewer tableViewer;
+
+ private ComposedAdapterFactory composedAdapterFactory;
+
+ private SelectionListener onClickListener;
+
+ private TableController controller;
+
+ private Consumer<Object> newValueConsumer;
+
+ public TableLifecycleManager(EEFCustomWidgetDescription description, IVariableManager variableManager, IInterpreter interpreter,
+ EditingContextAdapter contextAdapter) {
+ super(variableManager, interpreter, contextAdapter);
+ this.description = description;
+ }
+
+ @Override
+ protected void createMainControl(Composite parent, IEEFFormContainer formContainer) {
+ Table table = formContainer.getWidgetFactory().createTable(parent,
+ SWT.READ_ONLY | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER | SWT.SINGLE);
+ this.tableViewer = new TableViewer(table);
+ this.composedAdapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+ this.tableViewer.setContentProvider(ArrayContentProvider.getInstance());
+ this.tableViewer.setLabelProvider(new DelegatingStyledCellLabelProvider(new AdapterFactoryLabelProvider.StyledLabelProvider(
+ this.composedAdapterFactory, this.tableViewer)));
+
+ this.controller = new TableController(description, variableManager, interpreter, editingContextAdapter);
+ }
+
+ @Override
+ public void aboutToBeShown() {
+ super.aboutToBeShown();
+
+ this.newValueConsumer = (newValue) -> this.tableViewer.setInput(newValue);
+ this.controller.onNewValue(this.newValueConsumer);
+
+ this.onClickListener = new SelectionListener() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ Object selection = ((IStructuredSelection) TableLifecycleManager.this.tableViewer.getSelection()).getFirstElement();
+ TableLifecycleManager.this.controller.handleClick(selection);
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent event) {
+ Object selection = ((IStructuredSelection) TableLifecycleManager.this.tableViewer.getSelection()).getFirstElement();
+ TableLifecycleManager.this.controller.handleClick(selection);
+ }
+ };
+ this.tableViewer.getTable().addSelectionListener(this.onClickListener);
+ }
+
+ @Override
+ public void refresh() {
+ super.refresh();
+
+ this.controller.refresh();
+ }
+
+ @Override
+ public void aboutToBeHidden() {
+ super.aboutToBeHidden();
+ this.controller.removeValueConsumer();
+ this.newValueConsumer = null;
+
+ this.tableViewer.getTable().removeSelectionListener(this.onClickListener);
+ this.onClickListener = null;
+ }
+
+ @Override
+ protected IEEFWidgetController getController() {
+ return this.controller;
+ }
+
+ @Override
+ protected EEFWidgetDescription getWidgetDescription() {
+ return this.description;
+ }
+
+ @Override
+ protected Control getValidationControl() {
+ return this.tableViewer.getTable();
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+
+ this.composedAdapterFactory.dispose();
+ }
+
+ @Override
+ protected void setEnabled(boolean isEnabled) {
+ this.tableViewer.getTable().setEnabled(isEnabled);
+ }
+}
+
+</pre>
+ <p>
+ <br/>And finally we can easily adapter our controller.
+ </p>
+ <pre>package com.example.awesomeproject.eef.core.ext.widgets.table.internal;
+
+import java.util.function.Consumer;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.eef.EEFCustomWidgetDescription;
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.eef.core.api.controllers.AbstractEEFCustomWidgetController;
+import org.eclipse.eef.core.api.utils.EvalFactory;
+import org.eclipse.sirius.common.interpreter.api.IInterpreter;
+import org.eclipse.sirius.common.interpreter.api.IVariableManager;
+
+public class TableController extends AbstractEEFCustomWidgetController {
+
+ private static final String VALUE_EXPRESSION_ID = "valueExpression"; //$NON-NLS-1$
+
+ private static final String ON_CLICK_EXPRESSION_ID = "onClickExpression"; //$NON-NLS-1$
+
+ private static final String SELECTION_VARIABLE_NAME = "selection"; //$NON-NLS-1$
+
+ private Consumer<Object> newValueConsumer;
+
+ public TableController(EEFCustomWidgetDescription description, IVariableManager variableManager, IInterpreter interpreter,
+ EditingContextAdapter contextAdapter) {
+ super(description, variableManager, interpreter, contextAdapter);
+ }
+
+ @Override
+ protected EEFCustomWidgetDescription getDescription() {
+ return this.description;
+ }
+
+ @Override
+ public void refresh() {
+ super.refresh();
+ this.newEval().call(this.getCustomExpression(VALUE_EXPRESSION_ID).get(), this.newValueConsumer);
+ }
+
+ public void handleClick(Object object) {
+ this.editingContextAdapter.performModelChange(() -> {
+ String onClickExpression = this.getCustomExpression(ON_CLICK_EXPRESSION_ID).get();
+
+ Map<String, Object> variables = new HashMap<String, Object>();
+ variables.putAll(this.variableManager.getVariables());
+ variables.put(SELECTION_VARIABLE_NAME, object);
+
+ EvalFactory.of(this.interpreter, variables).call(onClickExpression);
+ });
+ }
+
+ public void onNewValue(Consumer<Object> consumer) {
+ this.newValueConsumer = consumer;
+ }
+
+ public void removeValueConsumer() {
+ this.newValueConsumer = null;
+ }
+}
+
+</pre>
+ <p>
+ <br/>With minimal changes, we can reuse the code of the basic approach in this advanced approach. But now we have the ability to provide the Sirius specifiers with a proper user interface for the manipulation of our widget and we can manipulate our own concepts in the EEF runtime.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-properties_provide_custom_widget_basic.html b/doc/5.1.x/developer/extensions-properties_provide_custom_widget_basic.html
new file mode 100644
index 0000000..aebe5ac
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-properties_provide_custom_widget_basic.html
@@ -0,0 +1,332 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-properties_provide_custom_widget_basic</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusPropertiesBasicCustomWidget">Sirius Properties – Basic Custom Widget</h1>
+ <h2 id="Goal">Goal</h2>
+ <p>Using the Basic Custom Widget approach, our goal aims at the quick creation of a custom widget with a minimal amount of code even if it creates only a basic user interface for the specifier to use our widget. In this example, we will try to create a simple table widget.</p>
+ <h2 id="Strategy">Strategy</h2>
+ <p>In order to create a custom widget, we will have to think about the two kind of users that will interact with our work, the Sirius specifier and the end-user. With this basic approach, we will create a nice table widget for the end-user but we will be a bit limited regarding what we can offer to the specifier.</p>
+ <h3 id="Specificationofthecustomwidget">Specification of the custom widget</h3>
+ <p>The implementation of the Properties view support in Eclipse Sirius is based on the Eclipse EEF project. While both projects are closely related, EEF can be used without Eclipse Sirius and in order to contribute a basic custom widget, we will only have to contribute to the EEF runtime. Both Eclipse EEF and Eclipse Sirius have the ability to let the specifier define a custom widget with a custom widget description.</p>
+ <p>This custom widget description in Eclipse Sirius is manipulated, like any other widget, in the odesign file. In this widget, you can specify the following properties of your widget:</p>
+ <ul>
+ <li>identifier</li>
+ <li>labelExpression</li>
+ <li>helpExpression</li>
+ <li>isEnabledExpression</li>
+ <li>customExpressions</li>
+ <li>customOperations</li>
+ <li>style</li>
+ <li>conditionalStyles</li>
+ </ul>
+ <p>Most of those properties are inherited from the description of the widget (identifier, labelExpression, helpExpression, isEnabledExpression) and the others are specific to the custom widget description (customExpressions, customOperations, style, conditionalStyles). In order to provide a basic custom widget to a Sirius specifier, you will have to indicate her/him the proper identifier to use for the widget, its expressions and its operations. For example, we will specify that in order to make our custom table widget work, the specifier will have to use a custom widget description with the identifier
+ <code>com.example.awesomeproject.sirius.properties.ext.widgets.table</code>.
+ </p>
+ <p>In order to provide the implementation of our table, we will need to use Eclipse EEF’s lifecycle manager provider extension point. This extension point let you define the appearance and behavior of a custom widget using a lifecycle manager.</p>
+ <h3 id="Extensioncontribution">Extension contribution</h3>
+ <p>You will have to start by creating an Eclipse plugin named
+ <code>com.example.awesomeproject.eef.ide.ui.ext.widgets.table</code> which will contain the provider of the lifecycle manager. In Eclipse EEF, a lifecycle manager is used to create the user interface of a widget and manage its lifecycle (add listeners, refresh, remove listeners, dispose etc) while a controller is used to define its behavior. The controller is not compulsary but it is highly recommended. In order to create the lifecycle manager provider, you will have to define the following extension.
+ </p>
+ <pre><?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.eef.ide.ui.eefLifecycleManagerProvider">
+ <descriptor
+ class="com.example.awesomeproject.eef.ide.ui.ext.widgets.table.internal.TableLifecycleManagerProvider"
+ description="%tableLifecycleManagerProvider.Description"
+ id="com.example.awesomeproject.eef.ide.ui.ext.widgets.table"
+ label="%tableLifecycleManagerProvider.Label">
+ </descriptor>
+ </extension>
+</plugin>
+
+</pre>
+ <p>
+ <br/>To make your code compile, you will have to add at least some dependencies (Required Bundle) to the following plugins:
+ </p>
+ <ul>
+ <li>org.eclipse.eef</li>
+ <li>org.eclipse.eef.core</li>
+ <li>org.eclipse.eef.ide.ui</li>
+ <li>org.eclipse.sirius.common.interpreter</li>
+ </ul>
+ <h3 id="EEFlifecyclemanagerprovider">EEF lifecycle manager provider</h3>
+ <p>
+ <br/>The properties label and description should both be internationalized and the class should reference a Java class implementing IEEFLifecycleManagerProvider. Our lifecycle manager provider will have two methods, one to indicate if it can handle the description given by the EEF runtime and one to return a proper lifecycle manager for this description. In our case, the only description that we want to support is a custom widget with the identifier
+ <code>com.example.awesomeproject.sirius.properties.ext.widgets.table</code>.
+ </p>
+ <pre>package com.example.awesomeproject.eef.ide.ui.ext.widgets.table.internal;
+
+import org.eclipse.eef.EEFControlDescription;
+import org.eclipse.eef.EEFCustomWidgetDescription;
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.eef.ide.ui.api.widgets.IEEFLifecycleManager;
+import org.eclipse.eef.ide.ui.api.widgets.IEEFLifecycleManagerProvider;
+import org.eclipse.sirius.common.interpreter.api.IInterpreter;
+import org.eclipse.sirius.common.interpreter.api.IVariableManager;
+
+public class TableLifecycleManagerProvider implements IEEFLifecycleManagerProvider {
+ /**
+ * The identifier of the control description supported.
+ */
+ private static final String SUPPORTED_ID = "com.example.awesomeproject.sirius.properties.ext.widgets.table"; //$NON-NLS-1$
+
+ @Override
+ public boolean canHandle(EEFControlDescription controlDescription) {
+ // only support custom widgets with the proper identifier
+ return SUPPORTED_ID.equals(controlDescription.getIdentifier()) && controlDescription instanceof EEFCustomWidgetDescription;
+ }
+
+ @Override
+ public IEEFLifecycleManager getLifecycleManager(EEFControlDescription controlDescription, IVariableManager variableManager,
+ IInterpreter interpreter, EditingContextAdapter contextAdapter) {
+ if (controlDescription instanceof EEFCustomWidgetDescription) {
+ return new TableLifecycleManager((EEFCustomWidgetDescription) controlDescription, variableManager, interpreter, contextAdapter);
+ }
+ throw new IllegalArgumentException();
+ }
+}
+
+
+</pre>
+ <p>
+ <br/>To create the lifecycle manager, the EEF runtime gives us access to several variables:
+ </p>
+ <ul>
+ <li>controlDescription: The description of the control that we support</li>
+ <li>variableManager: The variables available for this control, we can use it to add new variables and even create child contexts with new variables</li>
+ <li>interpreter: The interpreter used to run expression given by the Sirius specifier</li>
+ <li>contextAdapter: The wrapper used to run modifications of the model with optional support for transactions</li>
+ </ul>
+ <h3 id="EEFlifecyclemanager">EEF lifecycle manager</h3>
+ <p>The lifecycle manager must implements the interface
+ <code>IEEFLifecycleManager</code> but for a custom widget it is easier to extends on of its default abstract implementation, in our case
+ <code>org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager</code>.
+ </p>
+ <pre>package com.example.awesomeproject.eef.ide.ui.ext.widgets.table.internal;
+
+import java.util.function.Consumer;
+
+import org.eclipse.eef.EEFCustomWidgetDescription;
+import org.eclipse.eef.EEFWidgetDescription;
+import org.eclipse.eef.common.ui.api.IEEFFormContainer;
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.eef.core.api.controllers.IEEFWidgetController;
+import org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.sirius.common.interpreter.api.IInterpreter;
+import org.eclipse.sirius.common.interpreter.api.IVariableManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Table;
+
+import com.example.awesomeproject.eef.core.ext.widgets.table.internal.TableController;
+
+public class TableLifecycleManager extends AbstractEEFWidgetLifecycleManager {
+
+ private EEFCustomWidgetDescription description;
+
+ private TableViewer tableViewer;
+
+ private ComposedAdapterFactory composedAdapterFactory;
+
+ private SelectionListener onClickListener;
+
+ private TableController controller;
+
+ private Consumer<Object> newValueConsumer;
+
+ public TableLifecycleManager(EEFCustomWidgetDescription description, IVariableManager variableManager, IInterpreter interpreter,
+ EditingContextAdapter contextAdapter) {
+ super(variableManager, interpreter, contextAdapter);
+ this.description = description;
+ }
+
+ @Override
+ protected void createMainControl(Composite parent, IEEFFormContainer formContainer) {
+ Table table = formContainer.getWidgetFactory().createTable(parent,
+ SWT.READ_ONLY | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER | SWT.SINGLE);
+ this.tableViewer = new TableViewer(table);
+ this.composedAdapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+ this.tableViewer.setContentProvider(ArrayContentProvider.getInstance());
+ this.tableViewer.setLabelProvider(new DelegatingStyledCellLabelProvider(new AdapterFactoryLabelProvider.StyledLabelProvider(
+ this.composedAdapterFactory, this.tableViewer)));
+
+ this.controller = new TableController(description, variableManager, interpreter, editingContextAdapter);
+ }
+
+ @Override
+ public void aboutToBeShown() {
+ super.aboutToBeShown();
+
+ this.newValueConsumer = (newValue) -> this.tableViewer.setInput(newValue);
+ this.controller.onNewValue(this.newValueConsumer);
+
+ this.onClickListener = new SelectionListener() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ Object selection = ((IStructuredSelection) TableLifecycleManager.this.tableViewer.getSelection()).getFirstElement();
+ TableLifecycleManager.this.controller.handleClick(selection);
+ }
+
+ @Override
+ public void widgetDefaultSelected(SelectionEvent event) {
+ Object selection = ((IStructuredSelection) TableLifecycleManager.this.tableViewer.getSelection()).getFirstElement();
+ TableLifecycleManager.this.controller.handleClick(selection);
+ }
+ };
+ this.tableViewer.getTable().addSelectionListener(this.onClickListener);
+ }
+
+ @Override
+ public void refresh() {
+ super.refresh();
+
+ this.controller.refresh();
+ }
+
+ @Override
+ public void aboutToBeHidden() {
+ super.aboutToBeHidden();
+ this.controller.removeValueConsumer();
+ this.newValueConsumer = null;
+
+ this.tableViewer.getTable().removeSelectionListener(this.onClickListener);
+ this.onClickListener = null;
+ }
+
+ @Override
+ protected IEEFWidgetController getController() {
+ return this.controller;
+ }
+
+ @Override
+ protected EEFWidgetDescription getWidgetDescription() {
+ return this.description;
+ }
+
+ @Override
+ protected Control getValidationControl() {
+ return this.tableViewer.getTable();
+ }
+
+ @Override
+ public void dispose() {
+ super.dispose();
+
+ this.composedAdapterFactory.dispose();
+ }
+
+ @Override
+ protected void setEnabled(boolean isEnabled) {
+ this.tableViewer.getTable().setEnabled(isEnabled);
+ }
+}
+
+</pre>
+ <p>
+ <br/>The lifecycle manager will first create the controls of the table widget and it will initialized a controller for the table.
+ </p>
+ <h3 id="EEFcontroller">EEF controller</h3>
+ <p>The controller is not required but it will handle several keys problems for us, for example by extending the proper abstract class it can handle the validation rules of your widget. For a basic custom widget, it is highly recommended to extend
+ <code>org.eclipse.eef.core.api.controllers.AbstractEEFCustomWidgetController</code>. The controller does not have any reason to depend on the user interface, thus it will be created in another Eclipse plugin which will be usable without any dependency to an user interface specific plugins. This plugin will be named
+ <code>com.example.awesomeproject.eef.core.ext.widgets.table</code>. It will depend on at least the following plugins:
+ </p>
+ <ul>
+ <li>org.eclipse.eef</li>
+ <li>org.eclipse.eef.core</li>
+ <li>org.eclipse.sirius.common.interpreter</li>
+ </ul>
+ <pre>package com.example.awesomeproject.eef.core.ext.widgets.table.internal;
+
+import java.util.function.Consumer;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.eef.EEFCustomWidgetDescription;
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.eef.core.api.controllers.AbstractEEFCustomWidgetController;
+import org.eclipse.eef.core.api.utils.EvalFactory;
+import org.eclipse.sirius.common.interpreter.api.IInterpreter;
+import org.eclipse.sirius.common.interpreter.api.IVariableManager;
+
+public class TableController extends AbstractEEFCustomWidgetController {
+
+ private static final String VALUE_EXPRESSION_ID = "valueExpression"; //$NON-NLS-1$
+
+ private static final String ON_CLICK_EXPRESSION_ID = "onClickExpression"; //$NON-NLS-1$
+
+ private static final String SELECTION_VARIABLE_NAME = "selection"; //$NON-NLS-1$
+
+ private Consumer<Object> newValueConsumer;
+
+ public TableController(EEFCustomWidgetDescription description, IVariableManager variableManager, IInterpreter interpreter,
+ EditingContextAdapter contextAdapter) {
+ super(description, variableManager, interpreter, contextAdapter);
+ }
+
+ @Override
+ protected EEFCustomWidgetDescription getDescription() {
+ return this.description;
+ }
+
+ @Override
+ public void refresh() {
+ super.refresh();
+ this.newEval().call(this.getCustomExpression(VALUE_EXPRESSION_ID).get(), this.newValueConsumer);
+ }
+
+ public void handleClick(Object object) {
+ this.editingContextAdapter.performModelChange(() -> {
+ String onClickExpression = this.getCustomExpression(ON_CLICK_EXPRESSION_ID).get();
+
+ Map<String, Object> variables = new HashMap<String, Object>();
+ variables.putAll(this.variableManager.getVariables());
+ variables.put(SELECTION_VARIABLE_NAME, object);
+
+ EvalFactory.of(this.interpreter, variables).call(onClickExpression);
+ });
+ }
+
+ public void onNewValue(Consumer<Object> consumer) {
+ this.newValueConsumer = consumer;
+ }
+
+ public void removeValueConsumer() {
+ this.newValueConsumer = null;
+ }
+}
+
+</pre>
+ <p>
+ <br/>The controller here will handle two different situations. Firstly, it will react to the refresh in order to compute the new value of the table widget. For that, it will look for an expression with the identifier
+ <code>valueExpression</code> and it will execute it. Once executed, it will give its result to the
+ <code>newValueConsumer</code>. In the table lifecycle manager, we have set, in the method
+ <code>aboutToBeShown</code>, this new value consumer to a lambda which will set a new input for the table. Each time that the lifecycle manager will be refreshed by the framework, its call to
+ <code>super.refresh()</code> will trigger the refresh of the controller (among other things) which will compute the new value to display and given this value to the callback (consumer) registered by the lifecycle manager.
+ </p>
+ <p>Secondly, the controller will be used to handle the click in the table. For that it has a method named
+ <code>handleClick</code> which will be called with the selected object in the table. The controller will then evaluate an expression with the identifier
+ <code>onClickExpression</code> with the variables available along with an additional variable specifically for this use case. The additional variable named
+ <code>selection</code> will here be used to give access to the current selection to the
+ <code>onClickExpression</code>.
+ </p>
+ <p>Now your end users can use your two plugins to create tables in their Properties view using the custom widget description.</p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_celleditor.html b/doc/5.1.x/developer/extensions-provide_celleditor.html
new file mode 100644
index 0000000..36bd293
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_celleditor.html
@@ -0,0 +1,27 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-provide_celleditor</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusProvideCustomCellEditors">Sirius – Provide Custom Cell Editors</h1>
+ <h2 id="SiriusSemanticPropertiesView">Sirius Semantic Properties View</h2>
+ <p>You can override the default CellEditors in the Sirius semantic properties views by implementing
+ <code>org.eclipse.sirius.ext.emf.ui.ICellEditorProvider</code> and provide it through the
+ <code>org.eclipse.sirius.ui.siriuspropertiescelleditor</code> extension point.
+ </p>
+ <p>
+ <img border="0" src="images/propertiesView.png"/>
+ <br/>
+ <em>The semantic properties view</em>
+ </p>
+ <h2 id="OtherEditorsPropertiesView">Other Editors Properties View</h2>
+ <p>This extension mechanism can also be used for other editors properties view. That can be done by providing the
+ <code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource</code> instead of the default EMF one by replacing the
+ <code>propertySourceProvider</code> in the generated editor.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_custom-arrange-all.html b/doc/5.1.x/developer/extensions-provide_custom-arrange-all.html
new file mode 100644
index 0000000..8dfdcde
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_custom-arrange-all.html
@@ -0,0 +1,352 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-provide_custom-arrange-all</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="Provideacustomarrangeall">Provide a custom arrange-all</h1>
+ <h2 id="Goals">Goals</h2>
+ <p>One of the main issues of visual modelers is the global arrangement of all elements. GMF provides a default implementation of an "Arrange All" algorithm to solve this issue but it happens that this default behavior is not adapted for some diagrams. Imagine a diagram representing the hierarchy between a program classes, the "natural" representation a human thinks about is that of a tree. When you add associations on such diagrams, GMF won’t keep the tree representation of the diagram. Sirius provides an API to arrange diagrams according to custom business rules.</p>
+ <h2 id="ThearrangeallconceptasimplementedbyGMF">The arrange all concept as implemented by GMF</h2>
+ <p>GMF provides basic API and implementations to ease the customization of the "Arrange All" mechanism. It also implements a complete algorithm that is based on the graphical elements.</p>
+ <p>The top level type of this this API is
+ <code>ILayoutNodeProvider</code>
+ </p>
+ <p>
+ <img border="0" src="images/arrange-all/arrange-all-tlinterface.jpg"/>
+ </p>
+ <p>As you can see, this interface is designed for genericity. Fortunately, GMF provides abstract classes that handle the low-level work while letting you define the business rules:</p>
+ <p>
+ <img border="0" src="images/arrange-all/arrange-all-ls.jpg"/>
+ </p>
+ <p>This can be done by implementing three operations:</p>
+ <ul>
+ <li>
+ <code>boolean provides(IOperation operation)</code>
+ </li>
+ <li>
+ <code>Command layoutEditParts(GraphicalEditPart containerEditPart, IAdaptable layoutHint)</code>
+ </li>
+ <li>
+ <code>Command layoutEditParts(selectedObjectst List, IAdaptable layoutHint)</code>
+ </li>
+ </ul>
+ <p>The
+ <code>provides</code> operation is meant to return true if the class can arrange the diagram for the specified operation.
+ </p>
+ <p>The
+ <code>layoutEditParts</code> operations will return the commands that will actually be in charge of arranging the diagrams' edit parts. The first one takes the main container that is to be arranged while the latter accepts a list of edit parts to arrange.
+ </p>
+ <h2 id="TheLayoutProvidersasprovidedbySirius">The LayoutProviders as provided by Sirius</h2>
+ <p>The class
+ <code>AbstractLayoutEditPartProvider</code> is the simplest one. Sirius provides utility classes to ease the implementation of "Arrange All" algorithms:
+ </p>
+ <p>
+ <img border="0" src="images/arrange-all/arrange-all-air.jpg"/>
+ </p>
+ <p>Here is a list of all provided layout providers and a basic description of each:</p>
+ <ul>
+ <li>
+ <code>LineLayoutProvider</code>: lays out all views on a single line (either vertical or horizontal).
+ </li>
+ <li>
+ <code>GrigLayoutProvider</code>: lays out all views as a grid.
+ </li>
+ <li>
+ <code>InlineEdgeLayoutProvider</code>: lays out connections alongside their source and target nodes (useful on the sequence diagram for example).
+ </li>
+ </ul>
+ <h2 id="TheViewOrderings">The ViewOrderings</h2>
+ <h3 id="TheAPI">The API</h3>
+ <p>
+ <img border="0" src="images/arrange-all/viewordering.jpg"/>
+ </p>
+ <p>All
+ <code>LayoutProvider</code> provided by Sirius can be used with a
+ <code>ViewOrdering</code> which has the responsibility of actually ordering the views.
+ </p>
+ <p>The aim of all these classes is to order the GMF views and to provide this result to an
+ <code>AbstractLayoutProvider</code>.
+ </p>
+ <h3 id="Sample">Sample</h3>
+ <p>Here is a sample ordering all views to get a tree from a list of UML2 packages :</p>
+ <pre>/**
+ * Orders packages.
+ */
+public class PackageTreeOrdering extends SemanticTreeOrdering {
+
+ public List getSemanticChildren(EObject semanticParent, List candidates) {
+ List result = Collections.EMPTY_LIST;
+ if (semanticParent instanceof Package) {
+ result = new LinkedList&lt;Package&gt;(((Package) semanticParent).getNestedPackages());
+ result.retainAll(candidates);
+ }
+ return result;
+ }
+
+ public List getSemanticRoots(List objects) {
+ List&lt;Package&gt; roots = new LinkedList&lt;Package&gt;();
+ for (Object object : objects) {
+ EObject semantic = (EObject) object;
+ if (semantic instanceof Package) {
+ Package package_ = (Package) semantic;
+ if (package_.eContainer() == null || !objects.contains(package_.eContainer())) {
+ roots.add(package_);
+ }
+ }
+ }
+ return roots;
+ }
+
+}
+
+This tells us how to order the packages. We must notify Sirius that this @ViewOrdering@ has to be used for the Package Hierarchy diagram.
+
+</pre>
+ <h3 id="TheViewOrderingProvider">The
+ <code>ViewOrderingProvider</code>
+ </h3>
+ <p>Here is the implementation of a
+ <code>ViewOrderingProvider</code> for an UML2 modeler :
+ </p>
+ <pre>/**
+ * The view ordering provider for UML2 modeler.
+ */
+public class Uml2ViewOrderingProvider implements ViewOrderingProvider {
+
+ /** The classifier ordering. */
+ private ClassifierTreeOrdering classifierOrdering = new ClassifierTreeOrdering();
+
+ public Uml2ViewOrderingProvider() {
+ classifierOrdering.setUserAwareCapable(true);
+ }
+
+ public ViewOrdering getViewOrdering(DiagramElementMapping mapping) {
+ return (ViewOrdering) getMappingToViewOrdering().get(getMappingName(mapping));
+ }
+
+ public boolean provides(DiagramElementMapping mapping) {
+ return getMappingToViewOrdering().containsKey(getMappingName(mapping));
+ }
+
+ private String getMappingName(DiagramElementMapping mapping) {
+ String result = null;
+ if (mapping instanceof NodeMapping) {
+ result = ((NodeMapping) mapping).getName();
+ } else if (mapping instanceof EdgeMapping) {
+ result = ((EdgeMapping) mapping).getName();
+ } else if (mapping instanceof ContainerMapping) {
+ result = ((ContainerMapping) mapping).getName();
+ }
+ return result;
+ }
+
+ /**
+ * Returns a map : MappingName(String) -&gt; ViewOrdering.
+ *
+ * @return a map : MappingName(String) -&gt; ViewOrdering.
+ */
+ private Map getMappingToViewOrdering() {
+ Map result = new HashMap();
+ result.put(Uml2Constants.LIFELINE_MAPPING_NAME, new LifelineOrdering());
+ result.put(Uml2Constants.MESSAGE_MAPPING_NAME, new MessageOrdering());
+ result.put(Uml2Constants.CLASS_MAPPING_NAME, this.classifierOrdering);
+ result.put(Uml2Constants.INTERFACE_MAPPING_NAME, this.classifierOrdering);
+ return result;
+ }
+
+}
+
+
+</pre>
+ <p>Once this has been implemented, we need to add the extension to the plugin.xml :</p>
+ <p>
+ <img border="0" src="images/arrange-all/arrange-all-provider-extension.png"/>
+ </p>
+ <pre><code><extension point="org.eclipse.sirius.diagram.viewOrderingProvider">
+ <viewOrderingProvider providerClass="com.example.uml2.specific.provider.Uml2ViewOrderingProvider" />
+</extension>
+</code></pre>
+ <h2 id="HowtomapaLayoutProviderwithaDiagram">How to map a Layout Provider with a Diagram</h2>
+ <p>Now, we know how to both order and arrange views. We still need to let Sirius know that we want to use a custom Layout Provider for a specific Diagram.</p>
+ <p>
+ <img border="0" src="images/arrange-all/airlayoutprovider.jpg"/>
+ </p>
+ <p>Here is a provider designed for an UML2 modeler:</p>
+ <pre>public class Uml2LayoutProvider implements LayoutProvider {
+
+ /** The GMF layout provider. */
+ private CompoundLayoutProvider layoutProvider;
+
+ /** The class diagram layout provider. */
+ private GridLayoutProvider classDiagramLayoutProvider;
+
+ /** The package hierarchy layout provider. */
+ private GridLayoutProvider packageHierarchyLayoutProvider;
+
+
+ public AbstractLayoutEditPartProvider getLayoutNodeProvider(IGraphicalEditPart container) {
+ if (isSequenceDiagram(container)) {
+ if (this.layoutProvider == null) {
+ this.layoutProvider = new CompoundLayoutProvider();
+ LineLayoutProvider lineLayoutProvider = new LineLayoutProvider();
+ lineLayoutProvider.getPadding().right = 80;
+ lineLayoutProvider.setHorizontal(true);
+ this.layoutProvider.addProvider(lineLayoutProvider);
+ inlineEdgeLayoutProvider inlineEdgeLayoutProvider = new InlineEdgeLayoutProvider();
+ inlineEdgeLayoutProvider.setSide(PositionConstants.EAST_WEST);
+ inlineEdgeLayoutProvider.setStart(PositionConstants.RIGHT);
+ inlineEdgeLayoutProvider.setAlignment(PositionConstants.VERTICAL);
+ inlineEdgeLayoutProvider.setChangeNodeHeight(true);
+ inlineEdgeLayoutProvider.setChangeNodeWidth(true);
+ inlineEdgeLayoutProvider.getPaddings().top = 50;
+ this.layoutProvider.addProvider(inlineEdgeLayoutProvider);
+ }
+ return this.layoutProvider;
+ } else if (isClassDiagram(container)) {
+ return this.getClassDiagramLayoutProvider();
+ } else if (isPackageHierarchyDiagram(container)) {
+ return this.getPackageHierarchyLayoutProvider();
+ }
+ return null;
+ }
+
+ public boolean provides(IGraphicalEditPart container) {
+ return (isClassDiagram(container) &amp;&amp; isAbleToLayoutClassDiagram(container)) || isSequenceDiagram(container) || isPackageHierarchyDiagram(container);
+ }
+
+ private boolean isSequenceDiagram(IGraphicalEditPart container) {
+ if (container instanceof AbstractDDiagramEditPart) {
+ AbstractDDiagramEditPart editPart = (AbstractDDiagramEditPart) container;
+ if (editPart.resolveSemanticElement() instanceof DDiagram) {
+ DDiagram diagram = (DDiagram) editPart.resolveSemanticElement();
+ if (viewPoint.getDescription() != null) {
+ DiagramDescription diagramDescription = diagram.getDescription();
+ return Uml2Constants.SEQUENCE_DIAGRAM_DESCRIPTION_NAME.equals(diagramDescription.getName());
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean isClassDiagram(IGraphicalEditPart container) {
+ if (container instanceof AbstractDDiagramEditPart) {
+ AbstractDDiagramEditPart editPart = (AbstractDDiagramEditPart) container;
+ if (editPart.resolveSemanticElement() instanceof ViewPoint) {
+ DDiagram diagram = (DDaiagram) editPart.resolveSemanticElement();
+ if (diagram.getDescription() != null) {
+ DiagramDescription diagramDescription = diagram.getDescription();
+ return Uml2Constants.CLASS_DIAGRAM_DESCRIPTION_NAME.equals(diagramDescription.getName());
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean isPackageHierarchyDiagram(IGraphicalEditPart container) {
+ if (container instanceof AbstractDDiagramEditPart) {
+ AbstractDDiagramEditPart editPart = (AbstractDDiagramEditPart) container;
+ if (editPart.resolveSemanticElement() instanceof DDiagram) {
+ DDiagram diagram = (DDiagram) editPart.resolveSemanticElement();
+ if (viewPoint.getDescription() != null) {
+ DiagramDescription diagramDescription = diagram.getDescription();
+ return Uml2Constants.PACKAGE_HIERARCHY_DIAGRAM_DESCRIPTION_NAME.equals(diagramDescription.getName());
+ }
+ }
+ }
+ return false;
+ }
+
+ private boolean isAbleToLayoutClassDiagram(IGraphicalEditPart container) {
+ if (container instanceof DiagramEditPart) {
+ int nbNoInherance = 0;
+ int nbInheritance = 0;
+ Iterator iterConnections = ((DiagramEditPart) container).getConnections().iterator();
+ while (iterConnections.hasNext()) {
+ ConnectionEditPart connectionEditPart = (ConnectionEditPart) iterConnections.next();
+ EObject semantic = connectionEditPart.resolveSemanticElement();
+ if (semantic != null &amp;&amp; semantic instanceof DecorateSemanticElement) {
+ EObject realSemantic = ((DecorateSemanticElement) semantic).getTarget();
+ if (realSemantic instanceof Generalization) {
+ nbInheritance++;
+ } else {
+ nbNoInherance++;
+ }
+ } else {
+ nbNoInherance++;
+ }
+ }
+ return nbInheritance &gt; nbNoInherance;
+ }
+ return false;
+ }
+
+ /**
+ * Returns the class diagram layout provider.
+ *
+ * @return the class diagram layout provider.
+ */
+ public GridLayoutProvider getClassDiagramLayoutProvider() {
+ if (classDiagramLayoutProvider == null) {
+ classDiagramLayoutProvider = new GridLayoutProvider();
+ classDiagramLayoutProvider.setColumnSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
+ classDiagramLayoutProvider.setLineSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
+ classDiagramLayoutProvider.getPadding().top = 20;
+ classDiagramLayoutProvider.getPadding().bottom = 20;
+ classDiagramLayoutProvider.getPadding().left = 20;
+ classDiagramLayoutProvider.getPadding().right = 20;
+ }
+ return classDiagramLayoutProvider;
+ }
+
+ public GridLayoutProvider getPackageHierarchyLayoutProvider() {
+ if (packageHierarchyLayoutProvider == null) {
+ packageHierarchyLayoutProvider = new GridLayoutProvider();
+ packageHierarchyLayoutProvider.setColumnSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
+ packageHierarchyLayoutProvider.setLineSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
+ packageHierarchyLayoutProvider.getPadding().top = 20;
+ packageHierarchyLayoutProvider.getPadding().bottom = 20;
+ packageHierarchyLayoutProvider.getPadding().left = 30;
+ packageHierarchyLayoutProvider.getPadding().right = 30;
+ }
+ return packageHierarchyLayoutProvider;
+ }
+
+ public boolean isDiagramLayoutProvider() {
+ return false;
+ }
+
+}
+
+</pre>
+ <p>Finally, we add the extension in the plug-in file :</p>
+ <p>
+ <img border="0" src="images/arrange-all/arrange-all-layoutprovider-extension.png"/>
+ </p>
+ <pre><code><extension point="org.eclipse.sirius.diagram.layoutProvider">
+ <layoutProvider priority="high" providerClass="com.example.uml2.specific.provider.Uml2LayoutProvider">
+ </layoutProvider>
+</extension>
+</code></pre>
+ <h2 id="EnabletheborderednodeslayoutonacustomLayoutProvider">Enable the bordered nodes layout on a custom LayoutProvider</h2>
+ <p>The bordered nodes layout arranges all the bordered nodes which are connected to one edge. This arrange reduces the path of the edge between each extremity.</p>
+ <p>Currently, the layout of the bordered nodes is activated on the default Layout Provider (CompositeDownTopProvider, CompositeLeftRightProvider and OrderedTreeLayoutProvider. To enable the bordered nodes layout on a new LayoutProvider, in the method getLayoutNodeProvider(IGraphicalEditPart), you must create a new BorderItemAwareLayoutProvider with your own LayoutProvider in parameter. This new BorderItemAwareLayoutProvider must be return instead of your own.</p>
+ <p>Example of the OrderedTreeLayoutProvider</p>
+ <pre><code>public AbstractLayoutEditPartProvider getLayoutNodeProvider(IGraphicalEditPart container) {
+ if (isDDiagramWithConfiguredOrderedTreeLayout(container)) {
+ //Get the expected layout provider
+ AbstractLayoutProvider layoutNodeProvider = getGridLayoutProvider();
+ //Create new BorderItemAwareLayoutProvider
+ layoutNodeProvider = BorderItemAwareLayoutProviderHelper.createBorderItemAwareLayoutProvider(layoutNodeProvider);
+ //Return the BorderItemAwareLayoutProvider which wrap the previous one
+ return layoutNodeProvider;
+ } else {
+ return null;
+ }
+}
+</code></pre>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_custom_aird_editor_pages.html b/doc/5.1.x/developer/extensions-provide_custom_aird_editor_pages.html
new file mode 100644
index 0000000..ac8cf91
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_custom_aird_editor_pages.html
@@ -0,0 +1,339 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-provide_custom_aird_editor_pages</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusProvidecustomairdeditorpages">Sirius – Provide custom aird editor pages</h1>
+ <h2 id="Goals">Goals</h2>
+ <p>Sirius provides an aird editor with a default page allowing to handle viewpoints and representations as well as semantic models. It is the entry point to any Sirius project for end user.</p>
+ <p>Custom pages can be provided to aird editor instances to show different information not available in the default page. It can be anything from business information to aird information. The functionalities around custom page providing are the following: </p>
+ <ul>
+ <li>Custom page can replace the default page or any other contributed pages. </li>
+ <li>Custom pages can be located before or after other pages.</li>
+ <li>Custom pages can be dynamically updated. I.e for any change in the resource set of the aird opened with the editor owing your page instance, you can tell the editor to execute reordering, removing or editor page tab refreshing commands in addition of a refresh done internally by your class.</li>
+ <li>Custom pages are displayed by aird editors only if a required context specified by your page is present. It no such context is specified, the page will always be shown in aird editors.</li>
+ <li>The update commands computing and internal refresh can be deferred to when your page is visible to avoid performance problem when browsing other page whereas yours is not used. This can be useful if you do heavy computing when refreshing or computing update commands.</li>
+ </ul>
+ <p>Sirius offers two distinct ways of providing custom pages for aird editor:</p>
+ <ul>
+ <li>an API with the
+ <code>PageRegistry</code> as entry point.
+ </li>
+ <li>and the same API with
+ <code>sessionEditorPageProvider</code> extension point as entry point.
+ </li>
+ </ul>
+ <h2 id="UsingtheAPItoprovidecustompages">Using the API to provide custom pages</h2>
+ <p>The API is composed of the following classes:</p>
+ <ul>
+ <li>The
+ <code>AbstractSessionEditorPage</code>
+ </li>
+ <li>The
+ <code>PageProvider</code>
+ </li>
+ <li>The
+ <code>PageUpdateCOmmand</code>
+ </li>
+ <li>The
+ <code>PositioningKind</code>
+ </li>
+ <li>The
+ <code>PageUpdateCommandBuilder</code>
+ </li>
+ <li>The
+ <code>PageRegistry</code>
+ </li>
+ </ul>
+ <p>and are available in the package
+ <code>org.eclipse.sirius.ui.editor.api.pages</code> from the plugin
+ <code>org.eclipse.sirius.ui.editor</code>
+ </p>
+ <p>To provide a custom page by using this API you have to:</p>
+ <ol>
+ <li>Build your custom page that extends
+ <code>AbstractSessionEditorPage</code> and with the help of
+ <code>PageUpdateCommandBuilder</code> if needed.
+ </li>
+ <li>Create a
+ <code>PageProvider</code> that will provide your custom page as well as other custom pages you want.
+ </li>
+ <li>Register your
+ <code>PageProvider</code> either directly in the
+ <code>PageRegistry</code> or by using the provided extension point.
+ </li>
+ <li>Launch the runtime and open the aird editor of a modeling project. If the display context required by your custom page is present it will be visible.</li>
+ </ol>
+ <p>Example with the Sirius Debug Page:
+ <br/>
+ <img border="0" src="images/customPageApi_debugPage_example.png"/>
+ </p>
+ <h3 id="pagePositioning">Page positioning</h3>
+ <p>When contributing a custom page, you can tell where the editor tab corresponding to your page will be located regarding other pages' tab in different contexts:</p>
+ <ul>
+ <li>when the page is initialized by your
+ <code>PageProvider</code>
+ </li>
+ <li>when the page position is updated by a reorder command in response to an aird editor’s session’s resource set event or a page visibility update.</li>
+ </ul>
+ <p>Whatever the context is, you always need to provide two kind of information to position your page regarding others:</p>
+ <ul>
+ <li>The
+ <b>id</b> of the page from which your page will be placed relatively to it. The default aird editor page id is accessible in
+ <code>org.eclipse.sirius.ui.editor.SessionEditorPlugin.DEFAULT_PAGE_ID</code>
+ </li>
+ <li>The kind of positioning you want to achieve. The different kinds are defined by the enum
+ <code>org.eclipse.sirius.ui.editor.api.pages.PageProviderRegistry.PositioningKind</code>:
+ <ul>
+ <li>The
+ <code>BEFORE</code> kind will place your page’s tab in the aird editor before the target page’s tab. For example with the debug page before
+ <i>Overview</i>:
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/customPageApi_debugPage_before.png"/>
+ </p>
+ <ul>
+ <li>
+ <ul>
+ <li>The
+ <code>AFTER</code> kind will place your page’s tab in the aird editor after the target page’s tab. For example with the debug page after
+ <i>Overview</i>:
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/customPageApi_debugPage_after.png"/>
+ </p>
+ <ul>
+ <li>
+ <ul>
+ <li>The
+ <code>REPLACE</code> kind will replace the target page’s tab in the aird editor by your page’s tab. For example with the debug page replace the default page
+ <em>Overview</em>:
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/customPageApi_debugPage_replace.png"/>
+ </p>
+ <p>If a page identified by the id used to position your custom page does not exists in the aird editor when positioning your page, then your page will be added to the leftmost position.</p>
+ <h3 id="Buildingthecustompage">Building the custom page</h3>
+ <p>To build a custom page you need to create a class extending
+ <code>org.eclipse.sirius.ui.editor.api.pages.AbstractSessionEditorPage</code> that also extends
+ <code>FormPage</code>.
+ <br/>The UI creation part of your page is handled by the methods of
+ <code>FormPage</code> with the method
+ <code>createFormContent(IManagedForm managedForm)</code> as entry point.
+ <br/>The
+ <code>AbstractSessionEditorPage</code> abstract class brings the following methods to implement:
+ </p>
+ <ul>
+ <li>
+ <code>Optional<PageUpdateCommand> pageChanged(boolean)</code>
+ </li>
+ <li>
+ <code>Optional<PageUpdateCommand> resourceSetChanged(ResourceSetChangeEvent)</code>
+ </li>
+ <li>
+ <code>Optional<PositioningKind> getPositioning()</code>
+ </li>
+ <li>
+ <code>Optional<String> getLocationId()</code>
+ </li>
+ </ul>
+ <p>There is also a method
+ <code>NotificationFilter getFilterForPageRequesting()</code> with default behavior that can be overridden.
+ </p>
+ <h4 id="resourceSetChanged">resourceSetChanged</h4>
+ <p>This method is called by the aird editor whenever a resource set event occurs on its session’s resource set. The event can be a change regarding the aird file, or the loaded resources or viewpoints. </p>
+ <p>You can internally refresh your graphic components when called according to the change event. You also can return a list of
+ <code>PageUpdateCommand</code> that the editor needs to execute to update your page by using the builder
+ <code>PageUpdateCommandBuilder</code>. For example:
+ </p>
+ <pre><code>return Optional.of(new PageUpdateCommandBuilder().removePage().build());
+</code></pre>
+ <p>This builder allows you to build a command the owning aird editor must execute. The built command can do one or a combination of the following command:</p>
+ <ul>
+ <li>the REMOVE command (
+ <code>PageUpdateCommandBuilder removePage()</code>): when the aird editor execute this command, your page will be removed from the editor.
+ </li>
+ <li>the REORDER command (
+ <code>PageUpdateCommandBuilder reorderPage(PositioningKind positioningKind, String targetPageId)</code>): when the aird editor execute this command, your page will be placed at the defined position. To know more about positioning, please read the section
+ <a href="#pagePositioning">Page Positioning</a>
+ </li>
+ <li>the RENAME command
+ <code>PageUpdateCommandBuilder renameTab(String newLabel)</code>: when the aird editor execute this command, the editor tab owning your page will have its label updated with the one given to build the command.
+ </li>
+ </ul>
+ <p>If the built command contains the remove command and a reorder, rename or both command, then the remove command will be executed but not the other(s).</p>
+ <p>If you does not need to use this functionality you must return
+ <code>Optional.empty()</code>.
+ </p>
+ <h4 id="pageChanged">pageChanged</h4>
+ <p>This method is called with true as parameter when your page just becomes visible (i.e it is selected). It is called with false as parameter when any other page than yours is selected. </p>
+ <p>You can use the parameter to avoid doing heavy computation on model changes when you know your page is not visible to the end-user, and defer these to later, when it will become visible again (i.e. when pageChanged is invoked with
+ <code>true</code>).
+ </p>
+ <p>You also can internally refresh your graphic components when called according to the change event. You also can return a list of
+ <code>PageUpdateCommand</code> that the editor needs to execute to update your page by using the builder
+ <code>PageUpdateCommandBuilder</code>. See section
+ <a href="#resourceSetChanged">resourceSetChanged</a> to have details about the commands.
+ </p>
+ <p>If you want to apply page update only when the page is visible and if certain conditions are fulfilled regarding the session, then it is your responsibility to keep track of what happens since the last page selection with calls to
+ <code>resourceSetChanged(ResourceSetChangeEvent)</code> to know if some update must be done.
+ </p>
+ <p>If you does not need to use this functionality you must return
+ <code>Optional.empty()</code>.
+ </p>
+ <h4 id="getFilterForPageRequesting">getFilterForPageRequesting</h4>
+ <p>This method defined with a default implementation in
+ <code>AbstractSessionEditorPage</code> allows to prevent calls to
+ <code>AbstractSessionEditorPage.resourceSetChanged(ResourceSetChangeEvent)</code> for events you does not want to consider because you know your page will not refresh anything from these.
+ </p>
+ <p>By default the filter
+ <code>org.eclipse.emf.transaction.NotificationFilter.NOT_TOUCH</code> is used. This filter makes sure you are not called when all the event’s notification does not change any values.
+ </p>
+ <p>You can override this method to provide your own filter.</p>
+ <h4 id="getPositioning">getPositioning</h4>
+ <p>This method is used when your page is created to position it among other pages. See section
+ <a href="#pagePositioning">Page Positioning</a> to now more about how positioning works.
+ </p>
+ <p>It defines the kind of positioning to achieve.</p>
+ <p>If you don’t want to position your page relatively to another one, you can return
+ <code>Optional.empty()</code>. In this case your page will be added to the leftmost position (first position).
+ </p>
+ <h4 id="getLocationId">getLocationId</h4>
+ <p>This method is used when your page is created to position it among other pages. See section
+ <a href="#pagePositioning">Page Positioning</a> to now more about how positioning works.
+ </p>
+ <p>It defines the page id from which your page should be positioned relatively to.</p>
+ <p>If you don’t want to position your page relatively to another one, you can return
+ <code>Optional.empty()</code>. In this case your page will be added to the leftmost position (first position).
+ </p>
+ <h3 id="BuildingthePageProvider">Building the PageProvider</h3>
+ <p>The PageProvider responsibilities are: </p>
+ <ul>
+ <li>to provide all the custom pages you want to Sirius.</li>
+ <li>to give the id of the pages provided by it.</li>
+ </ul>
+ <p>To build a custom page you need to create a class extending
+ <code>org.eclipse.sirius.ui.editor.api.pages.PageProvider</code>.
+ <br/>This abstract class brings the following methods to implements:
+ </p>
+ <ul>
+ <li>
+ <code>Map<String, Supplier<AbstractSessionEditorPage>> getPages(SessionEditor)</code>
+ </li>
+ <li>
+ <code>NotificationFilter getFilterForPageRequesting()</code>
+ </li>
+ <li>
+ <code>boolean provides(String)</code>
+ </li>
+ </ul>
+ <h4 id="getPages">getPages</h4>
+ <p>This method returns all custom pages instances extending
+ <code>AbstractSessionEditorPage</code> to initialize.
+ </p>
+ <p>This method must return a map of page id to its supplier initializing a new instance of the page.</p>
+ <p>For example with the debug page:</p>
+ <pre><code>Map<String, Supplier<AbstractSessionEditorPage>> resultMap = new HashMap<>();
+resultMap.put(DebugPage.PAGE_ID, () -> {
+ return new DebugPage(editor, DebugPage.PAGE_ID, DEBUG_PAGE_TITLE);
+});
+return resultMap;
+</code></pre>
+ <p>You can use the given parameter to determine if your pages should be provided at the moment. You have access to the editor
+ <code>org.eclipse.sirius.ui.editor.SessionEditor</code> asking for the pages of your provider. From this parameter you can access to its session by using the method
+ <code>org.eclipse.sirius.ui.editor.SessionEditor.getSession()</code>. You also can use any singleton like
+ <code>PlatformUI</code> to know if your pages should be created at the moment.
+ </p>
+ <p>If the required conditions to display a page that can be computed from the session are not verified, then you should not return a new instance of this page.</p>
+ <p>The method is called when: </p>
+ <ul>
+ <li>the aird editor is created.</li>
+ <li>a resource set event occurs from the resource set of the editor’s session excepted if all notifications of the event are not filtered by the filter returned by method
+ <code>getFilterForPageRequesting</code>.
+ </li>
+ <li>a
+ <code>PageProvider</code> is added or removed from the providers registry.
+ </li>
+ </ul>
+ <h4 id="getFilterForPageRequesting2">getFilterForPageRequesting</h4>
+ <p>This method defined with a default implementation in
+ <code>PageProvider</code> allows to prevent calls to
+ <code>PageProvider.getPages(SessionEditor)</code> for events you does not want to consider because you know that the initial conditions to show your pages will not be fulfilled.
+ </p>
+ <p>By default the filter
+ <code>org.eclipse.emf.transaction.NotificationFilter.NOT_TOUCH</code> is used. This filter makes sure you are not called when the event does not change any values.
+ </p>
+ <p>You can override this method to provide your own filter.</p>
+ <h4 id="provides">provides</h4>
+ <p>This method tells if your provider can create a page instance of the given id as parameter. It is used when computing page positions. </p>
+ <p>Warning: If you don’t return true for the id of a page you provide, then positioning may not be what you expect.</p>
+ <h3 id="Pagestatussynchronization">Page status synchronization</h3>
+ <p>You can create pages at a given position of an editor only when some initial conditions are fulfilled. This mechanism involves the methods:</p>
+ <ul>
+ <li>
+ <code>PageProvider.getPages(SessionEditor)</code>
+ </li>
+ <li>
+ <code>AbstractSessionEditorPage.getPositioning()</code>
+ </li>
+ <li>
+ <code>AbstractSessionEditorPage.getLocationId()</code>
+ </li>
+ </ul>
+ <p>You also can dynamically change the page position by reacting to session’s resource set events or even tell the editor to remove the page no longer useful. This mechanism involves the methods:</p>
+ <ul>
+ <li>
+ <code>AbstractSessionEditorPage.resourceSetChanged(ResourceSetChangeEvent)</code>
+ </li>
+ <li>
+ <code>AbstractSessionEditorPage.pageChanged(boolean)</code>
+ </li>
+ </ul>
+ <p>So we have two distinct mechanism allowing for page positioning that can be conflicted if not careful.
+ <br/>For example, your
+ <code>AbstractSessionEditorPage</code> page can dynamically be removed when a condition A is verified. But your page creation initial condition in
+ <code>PageProvider</code> is also A. In this situation, if A is verified a first time, the page is created. Then if A is verified a second time, the page will be removed dynamically and created again.
+ </p>
+ <p>So to avoid conflicts, the page position and creation/removal must have the most specific conditions in the
+ <code>PageProvider</code> and the less specific in
+ <code>AbstractSessionEditorPage</code>
+ </p>
+ <p>For example, if a page can be created from
+ <code>PageProvider</code> when condition A and B are verified, then this page can be dynamically removed only if !A or !B is verified but not if another condition is verified like C or !C.
+ </p>
+ <h3 id="RegisteringthePageProvider">Registering the PageProvider</h3>
+ <p>When your PageProvider providing your custom pages is done, you have to register it to Sirius so it can be use to display your pages in aird editors.
+ <br/>You have two ways to do that either by using the
+ <code>PageRegistry</code> or an extension point.
+ </p>
+ <h4 id="Programmaticregistering">Programmatic registering</h4>
+ <p>The
+ <code>PageRegistry</code> is the registry containing all
+ <code>PageProvider</code> used by aird editors.
+ <br/>To be used, your provider can be registered in this registry.
+ </p>
+ <p>You can do this programmatically by calling the method
+ <code>org.eclipse.sirius.ui.editor.SessionEditorPlugin.getPlugin().getPageRegistry().addPageProvider(parameter)</code> with a new instance of your page provider as parameter.
+ </p>
+ <h4 id="Declarativeregistering">Declarative registering</h4>
+ <p>The extension point
+ <code>org.eclipse.sirius.ui.editor.sessionEditorPageProvider</code> allows you to define the class of your page provider that should be taken in consideration when Sirius populates pages of aird editors:
+ </p>
+ <p>
+ <img border="0" src="images/customPageApi_debugPage_extensionPoint.png"/>
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_custom_bundled_image_shape.html b/doc/5.1.x/developer/extensions-provide_custom_bundled_image_shape.html
new file mode 100644
index 0000000..98bdbb1
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_custom_bundled_image_shape.html
@@ -0,0 +1,89 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-provide_custom_bundled_image_shape</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusProvidecustombundledimageshape">Sirius – Provide custom bundled image shape</h1>
+ <h2 id="Goals">Goals</h2>
+ <ul>
+ <li>Sirius provides a basic image style for node mappings. This style offer a selection of five different shapes. This extension point is used to allow specifiers to provide their own shapes defined in a SVG file.</li>
+ </ul>
+ <h2 id="Defineabundledimageshapeextension">Define a bundled image shape extension</h2>
+ <ul>
+ <li>This extension point is identified as
+ <code>org.eclipse.sirius.diagram.bundledImageShape</code>. In this extension, there are three required fields:
+ <ul>
+ <li>The Id of the extension is for once required as it will be used to identify the provided shape in the models (VSM and graphical models).</li>
+ <li>The image path, that needs to start with the plug-in name as it is possible to define a bundled image shape extension using an image in a different plug-in.</li>
+ <li>The image label displayed in VSMs (suffixed with the plug-in name where the bundled image shape extension is declared).</li>
+ </ul>
+ </li>
+ </ul>
+ <ul>
+ <li>There are 6 optional parameters in this extension point. These parameters are used to provide the identifier or attribute name concerning the color, border color and border size used in the given SVG file, if these parameters are not the default ones (used in the 5 default shapes). Here is a list of these parameters and the default value.
+ <ul>
+ <li>colorIdentifier, the identifier of the tag defining the inner color of the figure. The default identifier is “stop1”.</li>
+ <li>colorAttribute, the attribute of the tag defining the inner color of the figure. The default identifier is “style”.</li>
+ <li>borderColorIdentifier, the identifier of the tag defining the border color of the figure. The default identifier is “elementWithGradient”.</li>
+ <li>borderColorAttribute, the attribute of the tag defining the border color of the figure. The default identifier is “style”.</li>
+ <li>borderSizeIdentifier, the identifier of the tag defining the border size of the figure. The default identifier is “externalBorder”.</li>
+ <li>borderSizeAttribute, the attribute of the tag defining the border color of the figure. The default identifier is “style”.</li>
+ </ul>
+ </li>
+ </ul>
+ <p>Note that it is possible to provide a non SVG file but the colors and border size will not be synchronized with the selected information in the VSM.</p>
+ <h2 id="Example">Example</h2>
+ <p>The following example defines a new bundled image shape using an image file donut.svg.</p>
+ <pre> <extension
+ id="org.eclipse.sirius.tests.swtbot.donut"
+ point="org.eclipse.sirius.diagram.bundledImageShape">
+ <image
+ imagePath="/org.eclipse.sirius.tests.swtbot/images/donut.svg"
+ label="Donut">
+ <colorIdentifier
+ colorIdentifier="stop8224-2">
+ </colorIdentifier>
+ <colorAttribute
+ colorAttribute="style">
+ </colorAttribute>
+ <borderColorIdentifier
+ borderColorIdentifier="path10796-2-6-2-7">
+ </borderColorIdentifier>
+ <borderColorAttribute
+ borderColorAttribute="style">
+ </borderColorAttribute>
+ <borderSizeIdentifier
+ borderSizeIdentifier="path10796-2-6-2-7">
+ </borderSizeIdentifier>
+ <borderSizeAttribute
+ borderSizeAttribute="style">
+ </borderSizeAttribute>
+ </image>
+ </extension>
+
+</pre>
+ <p>In this sample, the identifier concerning the tags for the inner color (colorIdentifier), the border color (borderColorIdentifier) and the border size (borderSizeIdentifier) are not the default one. However, the attributes are all the default values. Therefore, we can simplify the extension as follows.</p>
+ <pre> <extension
+ id="org.eclipse.sirius.tests.swtbot.donut"
+ point="org.eclipse.sirius.diagram.bundledImageShape">
+ <image
+ imagePath="/org.eclipse.sirius.tests.swtbot/images/donut.svg"
+ label="Donut">
+ <colorIdentifier
+ colorIdentifier="stop8224-2">
+ </colorIdentifier>
+ <borderColorIdentifier
+ borderColorIdentifier="path10796-2-6-2-7">
+ </borderColorIdentifier>
+ <borderSizeIdentifier
+ borderSizeIdentifier="path10796-2-6-2-7">
+ </borderSizeIdentifier>
+ </image>
+ </extension>
+</pre>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_custom_model_operation.html b/doc/5.1.x/developer/extensions-provide_custom_model_operation.html
new file mode 100644
index 0000000..1c4109c
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_custom_model_operation.html
@@ -0,0 +1,43 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-provide_custom_model_operation</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusProvidecustommodeloperation">Sirius – Provide custom model operation</h1>
+ <h2 id="Goals">Goals</h2>
+ <p>Sirius provides various model operations (change context, if, for, create instance, etc). This extension point allows the contribution of additional model operations.</p>
+ <h2 id="Defineamodeloperationextension">Define a model operation extension</h2>
+ <p>This extension point is identified as
+ <code>org.eclipse.sirius.diagram.bundledImageShape</code>. In this extension, there are three required fields:
+ </p>
+ <ul>
+ <li>id – The identifier of the contribution</li>
+ <li>name – The human readable name of the contribution</li>
+ <li>modelOperationManager – The Java class used to handle the model operation</li>
+ </ul>
+ <p>The model operation manager will have to create a Sirius task from the given description of the model operation. An example is available in the plugin
+ <code>org.eclipse.sirius.ui.properties</code> with the class
+ <code>org.eclipse.sirius.ui.properties.internal.dialog.DialogModelOperationManager</code>.
+ </p>
+ <pre>public class DialogModelOperationManager implements IModelOperationManager {
+
+ @Override
+ public Optional<ICommandTask> createTask(ModelOperation modelOperation, ModelAccessor modelAccessor, UICallBack uiCallback,
+ Session session, IInterpreter interpreter, CommandContext context) {
+ if (modelOperation instanceof DialogModelOperation) {
+ DialogModelOperation dialogModelOperation = (DialogModelOperation) modelOperation;
+ return Optional.of(new DialogTask(context, modelAccessor, interpreter, session, dialogModelOperation));
+ }
+ return Optional.empty();
+ }
+
+}
+
+</pre>
+ <p>In this example, we will only consider the DialogModelOperation and we will return a new DialogTask used to open a dialog.</p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_custom_permission_authority.html b/doc/5.1.x/developer/extensions-provide_custom_permission_authority.html
new file mode 100644
index 0000000..67ae3b7
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_custom_permission_authority.html
@@ -0,0 +1,25 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-provide_custom_permission_authority</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="ProvidingaCustomPermissionAuthority">Providing a Custom Permission Authority</h1>
+ <p>Both read and write operations on the model are executed through an accessibility layer called the model accessor, implemented by
+ <code>org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor</code>. Each session has an an associated
+ <code>ModelAccessor</code> which can be obtained with
+ <code>Session.getModelAccessor()</code>.
+ </p>
+ <p>The model accessor itself delegates the permission checking to an
+ <code>IPermissionAuthority</code> , which is responsible for checking which operations are permitted on a given model element. The permission authority is also used to lock model elements (both representation and semantic elements), query their lock status and be notified (through
+ <code>IAuthorityListener</code>) when a lock is taken or released.
+ </p>
+ <p>You can provide a custom permission authority by implementing the interface
+ <code>org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority</code> and registering your custom implementation with the
+ <code>org.eclipse.sirius.ecore.extender.PermissionProvider</code> extension point.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_custom_style.html b/doc/5.1.x/developer/extensions-provide_custom_style.html
new file mode 100644
index 0000000..5c72ea1
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_custom_style.html
@@ -0,0 +1,697 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-provide_custom_style</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusProvidecustomstyle">Sirius – Provide custom style</h1>
+ <h2 id="Goals">Goals</h2>
+ <p>Sirius provides tools to design and display diagrams. These diagrams are essentially composed of figures of distinct styles
+ <br/>and shapes and, even though the tooling initially allows for the usage of a wide array of styles, many diagrams will still require
+ <br/>customized styles to conform to the company’s theme.
+ </p>
+ <p>Sirius offers three distinct ways of customizing its graphical styles:</p>
+ <ol>
+ <li>the
+ <code>StyleConfiguration</code> extension point.
+ </li>
+ <li>the
+ <code>CustomStyle</code> in addition to the
+ <code>EditPartProvider</code> GMF extension point.
+ </li>
+ <li>the GMF-provided extension points.</li>
+ </ol>
+ <h2 id="StyleConfiguration">StyleConfiguration</h2>
+ <p>StyleConfiguration is a mechanism that enables the customization of a specific style. It aims at providing support for different
+ <br/>ways of displaying labels, anchors, ...
+ </p>
+ <h3 id="TheStyleConfigurationinterface">The StyleConfiguration interface</h3>
+ <p>This interface defines a set of methods that need be implemented in order for the syle to be customizable:</p>
+ <ul>
+ <li>
+ <code>void adaptNodeLabel(DNode node, WrapLabel nodeLabel)</code>
+ </li>
+ <li>
+ <code>BorderItemLocatorProvider getBorderItemLocatorProvider()</code>
+ </li>
+ <li>
+ <code>IBorderItemLocator getNameBorderItemLocator(DNode node, IFigure mainFigure)</code>
+ </li>
+ <li>
+ <code>int adaptViewNodeSizeWithLabel(DNode viewNode, WrapLabel nodeLabel, int nodeWidth)</code>
+ </li>
+ <li>
+ <code>AnchorProvider getAnchorProvider()</code>
+ </li>
+ <li>
+ <code>Image getLabelIcon(DDiagramElement element)</code>
+ </li>
+ <li>
+ <code>Dimension fitToText(DNode node, WrapLabel nodeLabel, DefaultSizeNodeFigure defaultSizeNodeFigure)</code>
+ </li>
+ </ul>
+ <h4 id="adaptNodeLabel">adaptNodeLabel</h4>
+ <p>This method can be used to alter the size and location of a given label according to a given node.</p>
+ <ul>
+ <li>Parameters
+ <ul>
+ <li>
+ <code>viewNode</code>: The node representation.
+ </li>
+ <li>
+ <code>nodeLabel</code>: Label of the node.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4 id="getBorderItemLocatorProvider">getBorderItemLocatorProvider</h4>
+ <p>This method returns the instance currently providing border item locators for the node. A border item is a node located on the border of another node.</p>
+ <h4 id="getNameBorderItemLocator">getNameBorderItemLocator</h4>
+ <p>This method returns the item locator for the label of the node. This method is meaningless if the position of the label isn’t
+ <code>BORDER</code>.
+ </p>
+ <ul>
+ <li>Parameters
+ <ul>
+ <li>
+ <code>node</code>: The node representation.
+ </li>
+ <li>
+ <code>mainFigure</code>: The Draw2D figure representing the node.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4 id="adaptViewNodeSizeWithLabel">adaptViewNodeSizeWithLabel</h4>
+ <p>This method returns the minimum width a node needs to be correctly displayed with its label.</p>
+ <ul>
+ <li>Parameters
+ <ul>
+ <li>
+ <code>viewNode</code>: The node representation.
+ </li>
+ <li>
+ <code>nodeLabel</code>: Label of the node.
+ </li>
+ <li>
+ <code>nodeWidth</code>: Current width of the node.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4 id="getAnchorProvider">getAnchorProvider</h4>
+ <p>This method returns the instance providing connections anchors.</p>
+ <h4 id="getLabelIcon">getLabelIcon</h4>
+ <p>This method returns the icon that will displayed for this element’s representations.</p>
+ <ul>
+ <li>Parameters
+ <ul>
+ <li>
+ <code>vpElement</code>: The element for which we need an icon.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4 id="fitToText">fitToText</h4>
+ <p>This method returns the optimal dimension of the node.</p>
+ <ul>
+ <li>Parameters
+ <ul>
+ <li>
+ <code>node</code>: The node representation.
+ </li>
+ <li>
+ <code>nodeLabel</code>: Label of the node.
+ </li>
+ <li>
+ <code>defaultSizeNodeFigure</code>: The draw2d representation of the node.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h3 id="ProvidingcustomStyleConfiguration">Providing custom StyleConfiguration</h3>
+ <p>The
+ <code>StyleConfiguration</code> mechanism is only available for
+ <code>ViewNode</code> at the moment. Default configurations are initially installed on nodes.
+ </p>
+ <p>
+ <b>SimpleStyleConfiguration</b>
+ </p>
+ <p>This configuration is the simplest implementation.</p>
+ <p>
+ <b>SquareStyleConfiguration</b>
+ </p>
+ <p>This is the minimal configuration for nodes using the
+ <code>BundledImage</code> style with a square shape.
+ </p>
+ <p>
+ <b>SimpleSquareStyleConfiguration</b>
+ </p>
+ <p>This is the minimal configuration for nodes with a
+ <code>Square</code> style.
+ </p>
+ <h4 id="ProvidersofStyleConfiguration">Providers of StyleConfiguration</h4>
+ <p>Installing your own configurations can be done through the
+ <code>org.eclipse.sirius.diagram.styleConfigurationProvider</code> extension
+ <br/>point. This extension point requires only one attribute: the qualified name of the provider class.
+ </p>
+ <pre><code><extension point="org.eclipse.sirius.diagram.styleConfigurationProvider">
+ <styleConfigurationProvider providerClass="com.example.diagseq.style.DiagSeqStyleConfigurationProvider" />
+</extension>
+
+</code></pre>
+ <p>Here is a sample of the extension tab of the PDE editor when filling in this extension point:</p>
+ <p>
+ <img border="0" src="./images/style/styleConfigurationProviderExt.png"/>
+ </p>
+ <p>This example records the
+ <code>DiagSeqStyleConfigurationProvider</code> as a configuration provider. This class must implement the
+ <br/>
+ <code>IStyleConfigrationProvider</code> interface.
+ </p>
+ <p>The latter interface defines two methods:</p>
+ <p>
+ <strong>
+ <code>boolean provides(DiagramElementMapping mapping, Style style)</code>
+ </strong>
+ </p>
+ <p>This method returns true if the provider provides a configuration for the given mapping and style.</p>
+ <ul>
+ <li>Parameters
+ <ul>
+ <li>
+ <code>mapping</code>: The mapping of the node.
+ </li>
+ <li>
+ <code>style</code>: Style of the node.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ <strong>
+ <code>StyleConfiguration createStyleConfiguration(DiagramElementMapping mapping, Style style)</code>
+ </strong>
+ </p>
+ <p>This method creates a StyleConfiguration for the specified mapping and style.</p>
+ <ul>
+ <li>Parameters
+ <ul>
+ <li>
+ <code>mapping</code>: Mapping of the node.
+ </li>
+ <li>
+ <code>style</code>: Style of the node.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>Here is an example of a provider:</p>
+ <pre><code>public class DiagSeqStyleConfigurationProvider implements IStyleConfigurationProvider {
+ public StyleConfiguration createStyleConfiguration(DiagramElementMapping mapping, Style style) {
+ if (mapping instanceof NodeMapping) {
+ NodeMapping nodeMapping = (NodeMapping) mapping;
+ if (nodeMapping.getName() != null && nodeMapping.getName().equals(DiagSeqConstants.INSTANCE_ROLE_MAPPING_NAME)) {
+ return new InstanceRoleStyleConfiguration();
+ }
+ if (nodeMapping.getName() != null && nodeMapping.getName().equals(DiagSeqConstants.EXECUTION_MAPPING_NAME)) {
+ return new ExecutionSpecificationStyleConfiguration();
+ }
+ }
+ return null;
+ }
+
+ public boolean provides(DiagramElementMapping mapping, Style style) {
+ return mapping instanceof NodeMapping && ((NodeMapping) mapping).getName() != null
+ && (((NodeMapping) mapping).getName().equals(DiagSeqConstants.INSTANCE_ROLE_MAPPING_NAME)
+ || DiagSeqConstants.EXECUTION_MAPPING_NAME.equals(((NodeMapping) mapping).getName()));
+ }
+}
+
+
+</code></pre>
+ <h3 id="ExampleofaStyleConfigurationimplementation">Example of a StyleConfiguration implementation</h3>
+ <pre><code>public class SimpleStyleConfiguration implements StyleConfiguration {
+ public void adaptNodeLabel(DNode node, WrapLabel nodeLabel) {
+ if (nodeLabel.getParent() != null) {
+ Rectangle constraint = nodeLabel.getParent().getBounds().getCopy();
+
+ Insets borderDimension = this.getBorderDimension(node);
+ constraint.height -= (borderDimension.top + borderDimension.bottom);
+ constraint.width -= (borderDimension.left + borderDimension.right);
+ constraint.x += borderDimension.left;
+ constraint.y += borderDimension.top;
+
+ nodeLabel.setBounds(constraint);
+ nodeLabel.getParent().setConstraint(nodeLabel, constraint);
+ }
+ }
+
+ public int adaptViewNodeSizeWithLabel(DNode viewNode, WrapLabel nodeLabel, int nodeWidth) {
+ if (viewNode.getResizeKind() != ResizeKind.NONE_LITERAL) {
+
+ }
+ return nodeWidth;
+ }
+
+ public AnchorProvider getAnchorProvider() {
+ return null;
+ }
+
+ public BorderItemLocatorProvider getBorderItemLocatorProvider() {
+ return DefaultBorderItemLocatorProvider.getInstance();
+ }
+
+ public IBorderItemLocator getNameBorderItemLocator(DNode node, IFigure mainFigure) {
+ BorderItemLocator locator = new AirBorderItemLocator(mainFigure, PositionConstants.NSEW);
+ locator.setBorderItemOffset(new Dimension(1, 1));
+ return locator;
+ }
+
+ public Image getLabelIcon(DDiagramElement vpElement) {
+ EObject target = vpElement;
+ if (vpElement instanceof DSemanticDecorator) {
+ target = ((DSemanticDecorator) vpElement).getTarget();
+ }
+ if (isShowIcon(vpElement)) {
+ if (target != null) {
+ IItemLabelProvider labelProvider = (IItemLabelProvider) SiriusDiagramEditorPlugin.getInstance()
+ .getItemProvidersAdapterFactory().adapt(target, IItemLabelProvider.class);
+ if (labelProvider != null) {
+ ImageDescriptor descriptor = ExtendedImageRegistry.getInstance().getImageDescriptor(labelProvider.getImage(target));
+ if (descriptor == null) {
+ descriptor = ImageDescriptor.getMissingImageDescriptor();
+ }
+ return SiriusDiagramEditorPlugin.getInstance().getImage(descriptor);
+ }
+ }
+ }
+ return null;
+ }
+
+ protected boolean isShowIcon(DDiagramElement vpElement) {
+ if (vpElement instanceof MappingBased) {
+ DiagramElementMapping vpElementMapping = ((MappingBased) vpElement).getMapping();
+ if (vpElementMapping instanceof NodeMapping) {
+ return ((NodeMapping) vpElementMapping).isShowIcon();
+ }
+ if (vpElementMapping instanceof EdgeMapping) {
+ return ((EdgeMapping) vpElementMapping).isShowIcon();
+ }
+ if (vpElementMapping instanceof ContainerMapping) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public Dimension fitToText(DNode node, WrapLabel nodeLabel, DefaultSizeNodeFigure defaultSizeNodeFigure) {
+ if (nodeLabel.getFont() != null) {
+ String text = node.getName();
+
+ int charHeight = FigureUtilities.getStringExtents("ABCDEF", nodeLabel.getFont()).height + 5;
+ int charWidth = FigureUtilities.getTextWidth("ABCDEFGHIJKLMNOPQRSTUVWXYZ", nodeLabel.getFont()) / 26;
+
+ double ratio = charHeight / charWidth;
+
+ int nbLines = (int) (Math.sqrt(text.length()) / ratio) + 1;
+ int nbCols = (int) (Math.sqrt(text.length()) * ratio) + 1;
+
+ int longestWord = this.getTheLongestWord(text.split("\\s"));
+ nbCols = Math.max(nbCols, longestWord);
+
+ int hHeight = nbLines * charHeight;
+ int hWidth = nbCols * charWidth;
+
+ Dimension size = nodeLabel.getPreferredSize(hWidth + nodeLabel.getIconBounds().width +
+ nodeLabel.getIconTextGap(), hHeight).getCopy();
+
+ size.width += 20;
+ size.height += 30;
+
+ Insets borderDimension = this.getBorderDimension(node);
+ size.width += (borderDimension.left + borderDimension.right);
+ size.height += (borderDimension.top + borderDimension.bottom);
+
+ //
+ // Square ?
+ if (node.getHeight().intValue() == node.getWidth().intValue()) {
+ // size.width = Math.max(size.height, size.width);
+ // size.height = Math.max(size.height, size.width);
+ }
+
+ return size;
+ }
+ return defaultSizeNodeFigure.getBounds().getSize().getCopy();
+ }
+
+ private int getTheLongestWord(String[] strings) {
+ int max = -1;
+ for (int i = 0; i < strings.length; i++) {
+ if (strings[i].length() > max) {
+ max = strings[i].length();
+ }
+ }
+ return max;
+ }
+
+ /**
+ * Return the dimension of the border.
+ *
+ * @param nodeth
+ * view node.
+ * @return the dimension of the border.
+ */
+ public Insets getBorderDimension(DNode node) {
+ return new Insets(0, 0, 0, 0);
+ }
+
+}
+
+</code></pre>
+ <p>The easiest way to implement your own configuration is to make it a sub class of
+ <code>SimpleStyleConfiguration</code>.
+ </p>
+ <h2 id="GMFextensionpointsCustomStyleandEditPartProvider">GMF extension points, CustomStyle and EditPartProvider</h2>
+ <p>
+ <code>CustomStyle</code> is a style that can be applied to a node. Its only property is
+ <code>id</code> that is a string value. By default,
+ <br/>applying a CustomStyle will have a Green Square be displayed. A custom
+ <code>EditPart</code> describing the appearance of the node
+ <br/>must be implemented.
+ </p>
+ <p>Here is how to apply a
+ <code>CustomStyle</code>:
+ </p>
+ <p>
+ <img border="0" src="./images/style/customStyle.png"/>
+ </p>
+ <p>Next step is to create and record an
+ <code>EditPart</code> to define the way this style will be managed.
+ </p>
+ <p>An
+ <code>EditPart</code> is a GEF class. It references both a model element and the shape that represents it. GMF adds a layer to GEF
+ <br/>and exposes its own
+ <strong>EditPart</strong> API. The base type of this API is
+ <code>IGraphicalEditPart</code> (in package
+ <br/>
+ <code>org.eclipse.gmf.runtime.diagram.ui.editparts</code>). Here are the main methods this interface defines:
+ </p>
+ <ul>
+ <li>
+ <code>EObject resolveSemanticElement()</code>: This method returns the semantic element of the edit part. The type of this semantic element is a type contained by the Sirius package (see
+ <code>SiriusPackage</code>). For instance, if we were to write an
+ <code>EditPart</code> for our
+ <code>CustomStyle</code>, the semantic element would be the said
+ <code>CustomStyle</code>. It is possible to get the ViewNode with it and, then, the target element.
+ </li>
+ <li>
+ <code>View getNotationView()</code>: This method returns the GMF View of the edit part. This is the view that will be saved into the GMF Diagram.
+ </li>
+ </ul>
+ <p>All Custom Style Edit Part must implement the
+ <code>IStyleEditPart</code> interface. Semantically, a Style Edit Part should not be selectable: it is selected when the Shape or Connector that contains it is selected. Therefore,
+ <strong>all Custom Style Edit Part should override the
+ <code>isSelectable()</code> method and return false
+ </strong>. If you can, inherit from the abstract class
+ <code>AbstractNotSelectableShapeNodeEditPart</code> that already overrides correctly this method. You should also override the
+ <code>createDefaultEditPolicies</code> to do nothing if you want to let Sirius control your custom node as it is done in the provided Sirius style edit parts: the style part is responsible for the style/figure aspects while its parent part will mainly control the behavior by its policies. Otherwise you will need to properly add policies to override the default GMF policies, add your own specific policies or the Sirius ones.
+ </p>
+ <p>Here is a sample of a Custom Style Edit Part:</p>
+ <pre><code>public class InstanceRoleStyleEditPart extends AbstractNotSelectableShapeNodeEditPart implements IStyleEditPart {
+
+ /**
+ * the content pane.
+ */
+ protected IFigure contentPane;
+
+ /**
+ * the primary shape.
+ */
+ protected ImageFigure primaryShape;
+
+ /**
+ * Create a new {@link ChangingImageEditPart}.
+ *
+ * @param view
+ * the view.
+ */
+ public InstanceRoleStyleEditPart(View view) {
+ super(view);
+ }
+
+ public DragTracker getDragTracker(Request request) {
+ return getParent().getDragTracker(request);
+ }
+
+ protected NodeFigure createNodeFigure() {
+ NodeFigure figure = createNodePlate();
+ figure.setLayoutManager(new XYLayout());
+ IFigure shape = createNodeShape();
+ figure.add(shape);
+ contentPane = setupContentPane(shape);
+ return figure;
+ }
+
+ private NodeFigure createNodePlate() {
+ DefaultSizeNodeFigure result = new AirStyleDefaultSizeNodeFigure(getMapMode().DPtoLP(40), getMapMode().DPtoLP(40));
+ return result;
+ }
+
+ /**
+ * Create the instance role figure.
+ *
+ * @return the created figure.
+ */
+ protected ImageFigure createNodeShape() {
+ if (primaryShape == null) {
+ primaryShape = new ImageFigure();
+ }
+ return primaryShape;
+ }
+
+ /**
+ * Return the instance role figure.
+ *
+ * @return the instance role figure.
+ */
+ public ImageFigure getPrimaryShape() {
+ return primaryShape;
+ }
+
+ /**
+ * Default implementation treats passed figure as content pane. Respects
+ * layout one may have set for generated figure.
+ *
+ * @param nodeShape
+ * instance of generated figure class
+ * @return the figure
+ */
+ protected IFigure setupContentPane(IFigure nodeShape) {
+ return nodeShape; // use nodeShape itself as contentPane
+ }
+
+ public IFigure getContentPane() {
+ if (contentPane != null) {
+ return contentPane;
+ }
+ return super.getContentPane();
+ }
+
+ protected void refreshVisuals() {
+ CustomStyle customStyle = (CustomStyle) this.resolveSemanticElement();
+ if (customStyle.eContainer() instanceof DNode) {
+ this.getPrimaryShape().setImage(SiriusPlugin.getDefault().getBundledImage(((DNode) customStyle.eContainer()).getName()));
+ }
+ }
+
+ protected void createDefaultEditPolicies() {
+ // empty.
+ }
+}
+
+</code></pre>
+ <p>We now have to notify Sirius that we are providing a new
+ <code>EditPart</code> for nodes having a CustomStyle of that id.
+ <br/>The GMF extension mechanism can be used to achieve this.
+ </p>
+ <p>plugin.xml:</p>
+ <p>
+ <img border="0" src="./images/style/editPartProvider_plugin1.png"/>
+ </p>
+ <pre><code><extension point="org.eclipse.gmf.runtime.diagram.ui.editpartProviders">
+ <editpartProvider class="com.example.diagseq.provider.DiagSeqEditPartProvider">
+ <Priority name="High"/>
+ </editpartProvider>
+</extension>
+
+</code></pre>
+ <p>The provider class (
+ <code>com.example.diagseq.provider.DiagSeqEditPartProvider</code>) extends the GMF class
+ <br/>
+ <code>org.eclipse.gmf.runtime.diagram.ui.services.editpart.AbstractEditPartProvider</code>. Our custom Edit part will be
+ <br/>provided by overriding
+ <code>getNodeEditPartClass</code>. Here is how this class looks like:
+ </p>
+ <pre><code>public class DiagSeqEditPartProvider extends AbstractEditPartProvider {
+ @Override
+ protected Class getNodeEditPartClass(View view) {
+ if (view.getElement() instanceof CustomStyle) {
+ CustomStyle customStyle = (CustomStyle) view.getElement();
+ if (customStyle.getId().equals(DiagSeqConstants.INSTANCE_ROLE_STYLE_ID)) {
+ return InstanceRoleStyleEditPart.class;
+ }
+ }
+ return super.getNodeEditPartClass(view);
+ }
+}
+
+</code></pre>
+ <p>Where
+ <code>DiagSeqConstants.INSTANCE_ROLE_STYLE_ID</code> is the id of our custom style.
+ </p>
+ <p>In the modeler, the result looks like this:</p>
+ <p>
+ <img border="0" src="./images/style/instanceRole.png"/>
+ </p>
+ <h2 id="GMFextensionpoints">GMF extension points</h2>
+ <p>GMF exposes all of the necessary API to extend the default behavior of a modeler.</p>
+ <ul>
+ <li>Edit Part provider.</li>
+ <li>Edit Policy Provider.</li>
+ <li>Layout Provider</li>
+ </ul>
+ <h3 id="EditPartProvider">Edit Part Provider</h3>
+ <p>We saw earlier how to provide custom edit parts. Here is how the result looks like in Sirius.</p>
+ <p>Snapshot of the Sirius meta-model:</p>
+ <p>
+ <img border="0" src="./images/style/viewpoint.jpg"/>
+ </p>
+ <p>The types DNode, DNodeContainer, DNodeList, DNodeListElement, etc. have their own edit parts:</p>
+ <p>
+ <img border="0" src="./images/style/editParts.jpg"/>
+ </p>
+ <h3 id="EditPolicyProvider">Edit Policy Provider</h3>
+ <p>Edit Policies are objects responsible for the handling of user actions. There are Edit Policies for different behaviors:</p>
+ <ul>
+ <li>Creation</li>
+ <li>Deletion</li>
+ <li>Move elements</li>
+ <li>Selection</li>
+ <li>etc.</li>
+ </ul>
+ <p>As with edit parts, it is necessary to write an Edit Policy Provider as well as the Edit Policy that is to be provided. The
+ <br/>Edit Policy Provider must implement the
+ <code>IEditPolicyProvider</code> interface:
+ </p>
+ <ul>
+ <li>
+ <code>public void addProviderChangeListener(IProviderChangeListener listener)</code>: Registers a listener on the provider.
+ </li>
+ <li>
+ <code>public boolean provides(IOperation operation)</code>: Returns true if this instance provides edit policies for the specified operation.
+ </li>
+ <li>
+ <code>public void removeProviderChangeListener(IProviderChangeListener listener)</code>: Removes a listener from this provider.
+ </li>
+ <li>
+ <code>public void createEditPolicies(EditPart editPart)</code>: Adds edit policies on the specified edit part.
+ </li>
+ </ul>
+ <p>Here is an example of an Edit Policy Provider</p>
+ <pre><code>/**
+ * Provides Edit Policy for Note Attachment.
+ */
+public class AirNoteAttachmentEditPolicyProvider implements IEditPolicyProvider {
+
+ /** the property change support. */
+ private List listeners;
+
+ /**
+ * Create a new {@link AirNoteAttachmentEditPolicyProvider}.
+ */
+ public AirNoteAttachmentEditPolicyProvider() {
+ this.listeners = new ArrayList(2);
+ }
+
+ public void createEditPolicies(EditPart editPart) {
+ if (editPart instanceof NoteAttachmentEditPart) {
+ editPart.installEditPolicy(EditPolicy.CONNECTION_ROLE, new AirNoteAttachmentEditPolicy());
+ }
+ }
+
+ public void addProviderChangeListener(IProviderChangeListener listener) {
+ this.listeners.add(listener);
+ }
+
+ public boolean provides(IOperation operation) {
+ if (operation instanceof CreateEditPoliciesOperation) {
+ CreateEditPoliciesOperation castedOperation = (CreateEditPoliciesOperation) operation;
+ EditPart editPart = castedOperation.getEditPart();
+ Object model = editPart.getModel();
+ if (model instanceof View) {
+ View view = (View) model;
+ if (view.getDiagram() != null && view.getDiagram().getElement() != null
+ && view.getDiagram().getElement().eClass().getEPackage().getNsURI().equals(ViewpointPackage.eINSTANCE.getNsURI())) {
+ if ("NoteAttachment".equals(view.getType())) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public void removeProviderChangeListener(IProviderChangeListener listener) {
+ this.listeners.remove(listener);
+ }
+
+ /**
+ * Fire a {@link ProviderChangeEvent}.
+ */
+ protected void fireProviderChanged() {
+ ProviderChangeEvent event = new ProviderChangeEvent(this);
+ Iterator iterListener = this.listeners.iterator();
+ while (iterListener.hasNext()) {
+ IProviderChangeListener listener = (IProviderChangeListener) iterListener.next();
+ listener.providerChanged(event);
+ }
+ }
+
+}
+
+</code></pre>
+ <p>More flexibility can be achieved by writing an abstract provider:</p>
+ <pre><code>public abstract class AbstractEditPolicyProvider implements IEditPolicyProvider {
+
+ /** All listeners. */
+ private List listeners = new ArrayList(1);
+
+ public void addProviderChangeListener(IProviderChangeListener listener) {
+ this.listeners.add(listener);
+ }
+
+ public void removeProviderChangeListener(IProviderChangeListener listener) {
+ this.listeners.remove(listener);
+ }
+
+ protected void fireProviderChanged() {
+ ProviderChangeEvent event = new ProviderChangeEvent(this);
+ Iterator iterListener = this.listeners.iterator();
+ while (iterListener.hasNext()) {
+ IProviderChangeListener listener = (IProviderChangeListener) iterListener.next();
+ listener.providerChanged(event);
+ }
+ }
+}
+
+</code></pre>
+ <p>There only remains to override the methods
+ <code>provides()</code> and
+ <code>createEditPolicies()</code> in this provider’s implementations.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_migrate_contribution.html b/doc/5.1.x/developer/extensions-provide_migrate_contribution.html
new file mode 100644
index 0000000..2b8fe6f
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_migrate_contribution.html
@@ -0,0 +1,69 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-provide_migrate_contribution</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusProvideCustomMigrationParticipants">Sirius – Provide Custom Migration Participants</h1>
+ <h2 id="Goals">Goals</h2>
+ <p>In some cases, a migration of representation files or VSMs between two versions of meta-model is required. The migration process has been rewritten to be performed automatically at resource loading time. This migration is transparent for the end-user.
+ <br/>If you have extended Sirius meta-models, you may need to implement your own migration rules.
+ </p>
+ <p>To contribute to the Sirius migration process, you need to implement an
+ <code>org.eclipse.sirius.business.api.migration.IMigrationParticipant</code> and provide it through the
+ <code>org.eclipse.sirius.migrationParticipant</code> extension point.
+ </p>
+ <h2 id="Extensionpoint">Extension point</h2>
+ <p>The
+ <code>org.eclipse.sirius.migrationParticipant</code> extension point allows to contribute migration participants. Each contribution must provide an implementation of
+ <code>IMigrationParticipant</code> and a “kind” attribute which gives informations about what kind of file is concerned (
+ <code>REPRESENTATIONSFILE_KIND</code> for Representation files and
+ <code>VSM_KIND</code> for VSMs).
+ </p>
+ <h2 id="MigrationParticipantsimplementation">MigrationParticipants implementation</h2>
+ <p>Each methods of an
+ <code>IMigrationParticipant</code> receives the current version of the model to migrate, corresponding to the
+ <code>org.eclipse.sirius</code> bundle version.
+ </p>
+ <ul>
+ <li>
+ <code>EStructuralFeature getAttribute(EClass eClass, String name, String version)</code> is called during the parsing of XMIResources (at loading time). It allows to retrieve a renamed
+ <code>EAttribute</code> from its old name. For example, if an attribute
+ <em>foo</em> has been renamed to
+ <em>bar</em>, then your MigrationParticipant should return the
+ <em>bar</em> attribute when given the
+ <em>'foo'</em> name.
+ </li>
+ <li>
+ <code>EStructuralFeature getLocalElement(EClass eClass, String name, String version)</code> is called during the parsing of XMIResources (at loading time). If the feature name has changed, you should return the correct one.
+ </li>
+ <li>
+ <code>EClassifier getType(EPackage ePackage, String name, String version)</code> is called during the parsing of XMIResources (at loading time). If an
+ <code>EClassifier</code> name has changed, then you should return the correct one.
+ </li>
+ <li>
+ <code>Object getValue(EObject object, EStructuralFeature feature, Object value, String version)</code> is called during the parsing of XMIResources (at loading time). If a feature value has changed since a previous version, use this method to return the correct expected value.
+ </li>
+ <li>
+ <code>void postLoad(XMLResource resource, String version)</code> is called after the resource loading. All other structural changes in meta-models should be migrated here.
+ </li>
+ <li>
+ <code>Version getMigrationVersion()</code> is used by the migration framework to determine if at least one migration is needed. This method has to provide the Sirius version for which your migration is written. The framework doesn’t decide whether your participant need to be launched or not, you have to make sure that the Sirius version number of the loaded resource (available via the version parameter) requires a migration.
+ </li>
+ </ul>
+ <h2 id="Managetheversionnumber">Manage the version number</h2>
+ <p>Your migration participant has to return the Sirius version number where your migration is introduced. For example, you have to write a new migration for viewpoint 6.7.0, your migration participant
+ <code>getMigrationVersion()</code> has to return 6.7.0.qualifier, where the qualifier may be the current date.
+ </p>
+ <p>
+ <code>getMigrationVersion()</code> is used by the migration framework to determine if at least one participant has to be called, in that case the migration mechanism is launched.
+ </p>
+ <p>
+ <strong>Your migration participant is responsible to make sure that it has to perform its migration</strong>. Indeed,
+ <code>getMigrationVersion()</code> is only used by the migration framework to determine if at least one migration is needed. You have to make sure that the viewpoint version number of the loaded resource requires a migration.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_repair_contribution.html b/doc/5.1.x/developer/extensions-provide_repair_contribution.html
new file mode 100644
index 0000000..d5974f2
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_repair_contribution.html
@@ -0,0 +1,16 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-provide_repair_contribution</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusProvideCustomRepairParticipants">Sirius – Provide Custom Repair Participants</h1>
+ <p>In some cases, some repair operations are specific to representation nature (like sequence diagram for example). You need to implement
+ <code>org.eclipse.sirius.business.api.repair.IRepairParticipant</code> through the
+ <code>org.eclipse.sirius.viewpoint.repair.repairParticipant</code> extension point to contribute to repair process.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_resource_strategy.html b/doc/5.1.x/developer/extensions-provide_resource_strategy.html
new file mode 100644
index 0000000..3299559
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_resource_strategy.html
@@ -0,0 +1,77 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-provide_resource_strategy</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusProvidearesourcestrategy">Sirius – Provide a resource strategy</h1>
+ <h2 id="Goals">Goals</h2>
+ <p>The
+ <em>resource strategy registry</em>,
+ <code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategyRegistry</code>, centralizes all behaviors related to resource used in Sirius Session that can be overridden.
+ <br/>The extension point
+ <code>org.eclipse.sirius.resourceStrategy</code> allows to contribute a new behavior for each
+ <em>resource strategy type</em>.
+ <br/>When you contribute a new
+ <code>ResourceStrategy</code>, you need to handle one or more of the
+ <code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategy.ResourceStrategyType</code> by using
+ <code>canHandle</code> methods. For each type, there is one or more methods to override from
+ <code>org.eclipse.sirius.business.api.resource.strategy.AbstractResourceStrategyImpl</code>. The methods to override are documented in javadoc of each
+ <code>ResourceStrategyType</code>.
+ </p>
+ <p>To know all behaviors that can be overridden, you must refer to
+ <code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategy.ResourceStrategyType</code>.
+ </p>
+ <h2 id="Example">Example</h2>
+ <p>Here is an example that ignore “*.genmodel” files as semantic model of Sirius Session.</p>
+ <p>You have to add your resource strategy contribution in the plugin.xml file.</p>
+ <pre><extension point="org.eclipse.sirius.resourceStrategy">
+ <resourceStrategy
+ class="org.eclipse.sirius.tests.unit.api.convert.TestResourceStrategyToIgnoreGenModelFile">
+ </resourceStrategy>
+</extension>
+
+</pre>
+ <p>The class references a class extending the
+ <code>AbstractResourceStrategyImpl</code>. The corresponding code is:
+ </p>
+ <pre>/**
+ * This class overrides AbstractResourceStrategyImpl and also ignores genmodel
+ * files.
+ */
+public class TestResourceStrategyToIgnoreGenModelFile extends AbstractResourceStrategyImpl {
+
+ @Override
+ public boolean isPotentialSemanticResource(URI uri) {
+ boolean result = super.isPotentialSemanticResource(uri);
+ if (result && uri != null) {
+ result = !"genmodel".equals(uri.fileExtension());
+ }
+ return result;
+ }
+
+ @Override
+ public boolean canHandle(URI resourceURI, ResourceStrategyType resourceStrategyType) {
+ return ResourceStrategyType.SEMANTIC_RESOURCE.equals(resourceStrategyType);
+ }
+}
+
+</pre>
+ <p></p>
+ <ul>
+ <li>
+ <code>canHandle</code> allows to restrict this new resource strategy to only one type (
+ <code>ResourceStrategyType.SEMANTIC_RESOURCE</code>).
+ </li>
+ <li>
+ <code>isPotentialSemanticResource(URI)</code> is overridden to also ignore genmodel.
+ </li>
+ <li>
+ <code>isLoadableModel(URI, Session)</code> is not overridden as we want to keep the default behavior for this method.
+ </li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_save_dialog.html b/doc/5.1.x/developer/extensions-provide_save_dialog.html
new file mode 100644
index 0000000..228f51c
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_save_dialog.html
@@ -0,0 +1,100 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-provide_save_dialog</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusProvidecustomsavedialog">Sirius – Provide custom save dialog</h1>
+ <h2 id="Goals">Goals</h2>
+ <p>Sirius uses the same
+ <em>Save Dialog</em> for any operation that implies to the end-user whether changes made on session should be saved or discarded (when closing a session through the
+ <code>CloseUISessionCommand</code>, when controlling resources...).
+ </p>
+ <p>Developer may need to extend this save dialog to propose other choices to the end-user.</p>
+ <h2 id="CustomizeSiriussavedialogs">Customize Sirius save dialogs</h2>
+ <h3 id="TheISaveDialogExtensioninterface">The
+ <code>ISaveDialogExtension</code> interface
+ </h3>
+ <p>This interface allows to:</p>
+ <ul>
+ <li>Customize the choices given to the end-user when a save dialog opens (for example default is
+ <em>Save</em> and
+ <em>Discard</em>)
+ </li>
+ <li>Add additional behavior according to the choice made by user.</li>
+ </ul>
+ <ul>
+ <li>
+ <code>boolean isSaveDialogFor(Object objectToSave)</code> : allows to indicates whether this extension should be applied (condition on the Session for example)
+ </li>
+ <li>
+ <code>Collection<String> getButtons();</code> : returns a collection of String corresponding to the available choices for a save dialog (do no override CANCEL, this will be added automatically if possible)
+ </li>
+ <li>
+ <code>int reactToValue(Object objectToSave, int userChoice);</code> : defines the behavior to apply when faced to the given user choice.
+ </li>
+ </ul>
+ <h3 id="ProvideyourISaveDialogExtensionusingtheorg.eclipse.sirius.common.ui.savedialogextensionextensionpoint">Provide your
+ <code>ISaveDialogExtension</code> using the
+ <code>org.eclipse.sirius.common.ui.savedialogextension</code> extension point
+ </h3>
+ <p>Please refer to this extension point documentation for more details.</p>
+ <h2 id="Example">Example</h2>
+ <pre><code>package myPackage;
+
+import com.google.common.collect.Lists;
+import java.util.Collection;
+import org.eclipse.sirius.business.api.session.Session;
+import org.eclipse.ui.ISaveablePart2;
+
+public class CustomSaveDialogExtension {
+
+ public boolean isSaveDialogFor(Object objectToSave) {
+ // This save dialog is active if
+ // - the saved element is a session
+ return (objectToSave instanceof Session)
+ // - the session ID is "SaveSession"
+ && "SaveSession".equals(((Session) objectToSave).getID());
+ }
+
+ public Collection<String> getButtons() {
+ return Lists.newArrayList("Save", "Make something special", "Discard");
+ }
+
+ public int reactToValue(Object objectToSave, int temporaryResult) {
+ Session session = (Session) objectToSave;
+ int returnedValue = ISaveablePart2.YES;
+
+ switch (temporaryResult) {
+ // Case 0 : "Save"
+ case 0:
+ // we will return ISaveablePart2.YES => the session will be saved
+ // normally
+ break;
+ // Case 1 : "Make something special"
+ case 1:
+ makeSomethingSpecial(session);
+ // we will return CANCEL => nothing else willl be done
+ returnedValue = ISaveablePart2.CANCEL;
+ break;
+ // Case 2 : "Discard"
+ case 2:
+ // we return NO => changes will be discarded
+ returnedValue = ISaveablePart2.NO;
+ break;
+ // Default : "CANCEL" or any other
+ default:
+ returnedValue = ISaveablePart2.CANCEL;
+ break;
+
+ }
+ return returnedValue;
+ }
+}
+
+</code></pre>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_tabbar_extensions.html b/doc/5.1.x/developer/extensions-provide_tabbar_extensions.html
new file mode 100644
index 0000000..617f1e7
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_tabbar_extensions.html
@@ -0,0 +1,296 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>extensions-provide_tabbar_extensions</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusProvidetabbarextensions">Sirius – Provide tab-bar extensions</h1>
+ <h2 id="Goals">Goals</h2>
+ <p>The top area of all Sirius diagram editors is filled with the
+ <em>tab-bar</em>, which provides access to many operations on diagrams and their elements. The content of the tab-bar will depends on whether the current selection is the diagram itself (i.e. no element is selected) or one or several diagram elements.
+ </p>
+ <p>When the diagram itself (and not a specific element) is selected, the tab-bar contains the following buttons:
+ <br/>
+ <img border="0" src="images/tabbar01.png"/>
+ </p>
+ <p>The tab-bar contains a different set of actions when at least one element is selected:
+ <br/>
+ <img border="0" src="images/tabbar02.png"/>
+ </p>
+ <p>Sirius allows to define new operations and to add them at the end of the tab-bar.</p>
+ <h2 id="Addanewtabbaritem">Add a new tab-bar item</h2>
+ <p>Sirius asks the workbench’s
+ <code>IMenuService</code> service to populate the tab-bar with provided contributions. This service leans on the
+ <code>org.eclipse.ui.menus</code> extension point.
+ </p>
+ <p>Sirius defines the tab-bar as a toolbar with the id
+ <em>org.eclipse.sirius.diagram.ui.tabbar</em>.
+ <br/>Menu contributions to tab-bar must be declared with the
+ <em>toolbar</em> scheme and the Sirius tab-bar id.
+ </p>
+ <p>You can use the insertion point part of the
+ <em>locationUri</em> to organize your contributions. Sirius defines the
+ <em>additions</em> group, this group and all contribution will be placed at the end of the tab-bar.
+ </p>
+ <p>You can choose when to make your contribution visible (see the example) with the
+ <em>visibleWhen</em> element and some property testers: show a menu for diagram selection or only on some diagram with a specific description, ... Sirius defines several property testers like
+ <em>org.eclipse.sirius.diagram.ui.isDDiagram</em> and
+ <em>org.eclipse.sirius.diagram.ui.isDDiagramElement</em>, but you can define your own domain specific testers.
+ </p>
+ <h3 id="Provideyourtabbaritemsusingtheorg.eclipse.ui.menusextensionpoint">Provide your tab-bar items using the
+ <code>org.eclipse.ui.menus</code> extension point
+ </h3>
+ <p>Please refer to this extension point documentation for more details.</p>
+ <h3 id="Provideyouroperationusingtheorg.eclipse.ui.commandsextensionpoint">Provide your operation using the
+ <code>org.eclipse.ui.commands</code> extension point
+ </h3>
+ <p>Please refer to this extension point documentation for more details.</p>
+ <h3 id="Example">Example</h3>
+ <p>The following example defines a new push button for the tab-bar. The contribution will only be visible when an element is selected on diagram which correspond to a specific description.</p>
+ <p>You have to add your menu contribution in the plugin.xml file.</p>
+ <p>
+ <img border="0" src="images/tabbar_extension_plugin_xml.png"/>
+ </p>
+ <p>The first step is to create the menu contribution to reference an existing command:</p>
+ <pre> <extension point="org.eclipse.ui.menus">
+ <menuContribution
+ allPopups="false"
+ locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=additions">
+ <command
+ commandId="org.example.myproject.command.id"
+ icon="images/action.gif"
+ id="org.eclipse.sirius.diagram.tabbar.test.action.on.diagramelement"
+ label="Action on DDiagramElement"
+ tooltip="Action on DDiagramElement">
+ <!-- [...] a visible when element will be added later to control the visibility -->
+ </command>
+ </menuContribution>
+ </extension>
+
+</pre>
+ <p>The
+ <em>locationURI</em> references the Sirius tabbar with
+ <code>toolbar:org.eclipse.sirius.diagram.ui.tabbar</code> and and insertion point
+ <code>?after=additions</code>.
+ <br/> The command element references an existing
+ <em>commandID</em>, and defines its own menu id (can be used as insertion/organization point in other contributions
+ <em>locationURI</em>), its label and tooltip. If a key binding exists on the referenced command, the workbench will add it to the tooltip.
+ </p>
+ <p>Then you can control the visibility of your contribution with a visible when element. </p>
+ <pre> <!-- [...] continued from the example above -->
+ <visibleWhen checkEnabled="false">
+ <and>
+ <with variable="activeEditorId">
+ <equals value="org.eclipse.sirius.diagram.ui.part.SiriusDiagramEditorID"/>
+ </with>
+ <with variable="activeEditor">
+ <test property="org.eclipse.sirius.sample.tabbar.isConcernedEditor"/>
+ </with>
+ <with variable="selection">
+ <iterate ifEmpty="false" operator="or">
+ <and>
+ <test property="org.eclipse.sirius.diagram.ui.isDDiagramElement"/>
+ <test property="org.eclipse.sirius.sample.tabbar.shouldActivateTabbarExtension"/>
+ </and>
+ </iterate>
+ </with>
+ </and>
+ </visibleWhen>
+</command>
+
+</pre>
+ <p>The sample contribution declares four conditions to enable its visibility:</p>
+ <ul>
+ <li>it checks that the active editor is a Sirius Diagram Editor using the workbench variable
+ <em>activeEditorId</em> and the Sirius Diagram Editor id.
+ </li>
+ <li>it asks a property tester if the active editor should trigger the contribution visibility (see next section for the sample property tester explanation)</li>
+ <li>it iterates over the selection with a “OR” operator between elements and a false result for empty selection:
+ <ul>
+ <li>it uses the Sirius predefined property tester to check that a selected element is a diagram element.</li>
+ <li>it asks a property tester if the current element should trigger the contribution visibility (see next section for the sample property tester explanation)</li>
+ </ul>
+ </li>
+ </ul>
+ <p>Property testers are defined in the plug-in.xml file. They define namespace, some properties and the type of elements they can test.</p>
+ <pre><extension point="org.eclipse.core.expressions.propertyTesters">
+ <propertyTester
+ class="org.eclipse.sirius.sample.tabbar.SampleTestTabbarExtensionActivationPropertyTester"
+ id="org.eclipse.sirius.sample.tabbar.ActiveExtensionTester"
+ namespace="org.eclipse.sirius.sample.tabbar"
+ properties="shouldActivateTabbarExtension"
+ type="org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart">
+ </propertyTester>
+ <propertyTester
+ class="org.eclipse.sirius.sample.tabbar.SampleTestTabbarExtensionActivationPropertyTester"
+ id="org.eclipse.sirius.sample.tabbar.ConcernEditorTester"
+ namespace="org.eclipse.sirius.sample.tabbar"
+ properties="isConcernedEditor"
+ type="org.eclipse.ui.IEditorPart">
+ </propertyTester>
+</extension>
+
+</pre>
+ <p>Here is the implementation of the corresponding property tester. The
+ <em>isConcerned</em> property will lead to check the
+ <code>DiagramDescription</code> id of the current editor. The
+ <em>shouldActivateTabbarExtension</em> will lead to check a property of the selected domain object.
+ </p>
+ <pre><code>package org.eclipse.sirius.sample.tabbar;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.DRepresentation;
+import org.eclipse.sirius.diagram.edit.api.part.IDiagramElementEditPart;
+import org.eclipse.sirius.ui.business.api.dialect.DialectEditor;
+
+/**
+ * Sample property tester.
+ *
+ * @author mporhel
+ */
+public class SampleTestTabbarExtensionActivationPropertyTester extends PropertyTester {
+ public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+ if ("isConcernedEditor".equals(property)) {
+ // called in a with activeEditor element
+ if (receiver instanceof DialectEditor) {
+ DRepresentation activeRepresentation = ((DialectEditor) receiver).getRepresentation();
+ if (activeRepresentation instanceof DDiagram) {
+ // the id property in the VSM editor : name in the meta
+ // model.
+ return "diagram.description.sample.id".equals(((DDiagram) activeRepresentation).getDescription().getName());
+ }
+ }
+ } else if ("shouldActivateTabbarExtension".equals(property)) {
+ if (receiver instanceof IDiagramElementEditPart) {
+ EObject domainElement = ((IDiagramElementEditPart) receiver).resolveTargetSemanticElement();
+ // sample condition
+ return domainElement instanceof EClass && ((EClass) domainElement).isAbstract();
+ }
+ }
+ return false;
+ }
+}
+
+
+</code></pre>
+ <p>The a new button is added to the tab-bar only when the selection contains an abstract
+ <code>EClass</code> is selected and the active editor corresponds to the expected description id:
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_extension_result.png"/>
+ </p>
+ <h2 id="contributeFullTabbar">Contribute a full customized tab-bar</h2>
+ <p>Sirius lets the possibility to contribute an entire customized tab-bar. To do so, the developer has to contribute an
+ <code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.ITabbarContributor</code> to the
+ <code>org.eclipse.sirius.diagram.ui.tabbarContributor</code> extension-point. An abstract implementation of
+ <code>ITabbarContributor</code> exists:
+ <code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code>. This implementation contains protected methods that allows creating one or several contributions of the default Sirius tab-bar. See the
+ <a href="../user/diagrams/Diagrams.html#ref_tabbar">Tab-bar</a> section in user manual for more details about each items.
+ </p>
+ <p>here is an example of
+ <code>ITabbarContributor</code> implementation. This sample provides two different tab-bar whether the selection is done on a diagram element (a Node or a Container for instance) or on the diagram (no specific selection). If the selection is done on an Edge, the tab-bar will be empty since the sample doesn’t return any contributionItem.
+ </p>
+ <pre><code>public class TestTabbarExt extends AbstractTabbarContributor {
+
+ private ArrayList<IContributionItem> diagramContributionItems;
+
+ private ArrayList<IContributionItem> diagramElementContributionItems;
+
+ @Override
+ public List<IContributionItem> getContributionItems(ISelection selection, IDiagramWorkbenchPart part, ToolBarManager manager) {
+ List<IContributionItem> contributionItems = new ArrayList<IContributionItem>();
+ if (selection instanceof IStructuredSelection) {
+ Object firstElement = ((IStructuredSelection) selection).getFirstElement();
+ if (firstElement instanceof AbstractDDiagramEditPart) {
+ contributionItems = getDiagramContributionItem(part, manager);
+ } else if (firstElement instanceof IAbstractDiagramNodeEditPart) {
+ contributionItems = getDiagramElementContributionItem(part, manager);
+ }
+ }
+ return contributionItems;
+ }
+
+ @Override
+ public boolean accept(ISelection selection) {
+ boolean accept = false;
+ if (selection == null) {
+ accept = true;
+ } else if (selection instanceof IStructuredSelection) {
+ Object firstElement = ((IStructuredSelection) selection).getFirstElement();
+ if (firstElement instanceof AbstractDDiagramEditPart || firstElement instanceof IAbstractDiagramNodeEditPart) {
+ accept = true;
+ }
+ }
+ return accept;
+ }
+
+ @Override
+ public List<IContributionItem> getContributionItems(IDiagramWorkbenchPart part, ToolBarManager manager) {
+ return getDiagramContributionItem(part, manager);
+ }
+
+ private List<IContributionItem> getDiagramContributionItem(IDiagramWorkbenchPart part, ToolBarManager manager) {
+ if (diagramContributionItems == null) {
+ diagramContributionItems = new ArrayList<IContributionItem>();
+ diagramContributionItems.add(createArrangeMenuManager(part));
+ diagramContributionItems.add(createSelectMenuManager());
+ diagramContributionItems.add(createLayerContribution(part, manager));
+ diagramContributionItems.add(createZoomInContribution(part));
+ diagramContributionItems.add(createZoomOutContribution(part));
+ diagramContributionItems.add(createZoomContribution(part));
+ diagramContributionItems.add(createSelectPinnedElementsContribution(part));
+ diagramContributionItems.add(createSelectHiddenElementsContribution(part));
+ diagramContributionItems.add(createFilterContribution(part, manager));
+ diagramContributionItems.add(createPasteLayoutContribution(part));
+ diagramContributionItems.add(createRefreshContribution());
+ diagramContributionItems.add(createSaveAsImageContributionItem());
+ diagramContributionItems.add(createLayoutingModeContributionItem(part));
+ diagramContributionItems.add(createCopyAppearancePropertiesContribution(part));
+ diagramContributionItems.add(createCopyLayoutContribution(part));
+ }
+ return diagramContributionItems;
+ }
+
+ private List<IContributionItem> getDiagramElementContributionItem(IDiagramWorkbenchPart part, ToolBarManager manager) {
+ if (diagramElementContributionItems == null) {
+ diagramElementContributionItems = new ArrayList<IContributionItem>();
+ diagramElementContributionItems.add(createArrangeMenuManager(part));
+ diagramElementContributionItems.add(createAlignMenuManager());
+ diagramElementContributionItems.add(createHideElementLabelContribution(part));
+ diagramElementContributionItems.add(createHideElementContribution(part));
+ diagramElementContributionItems.add(createDeleteFromDiagramContribution(part));
+ diagramElementContributionItems.add(createDeleteFromModelContribution(part));
+ IContributionItem pinElementContributionItem = createPinElementContribution(part);
+ diagramElementContributionItems.add(pinElementContributionItem);
+ diagramElementContributionItems.add(createUnPinElementContribution(part, pinElementContributionItem));
+ diagramElementContributionItems.add(createFontColorContribution(part));
+ diagramElementContributionItems.add(createPasteLayoutContribution(part));
+ diagramElementContributionItems.add(createBoldFontStyleContribution(part));
+ diagramElementContributionItems.add(createItalicFontStyleContribution(part));
+ diagramElementContributionItems.add(createFontDialogContribution(part));
+ diagramElementContributionItems.add(createFillColorContribution(part));
+ diagramElementContributionItems.add(createLineColorPropertyContribution(part));
+ diagramElementContributionItems.add(createResetStylePropertyContribution(part));
+ diagramElementContributionItems.add(createSetStyleToWorkspaceImageContribution(part));
+ diagramElementContributionItems.add(createSaveAsImageContributionItem());
+ diagramElementContributionItems.add(createDistributeContribution());
+ diagramElementContributionItems.add(createLayoutingModeContributionItem(part));
+ diagramElementContributionItems.add(createRouterContribution());
+ diagramElementContributionItems.add(createCopyAppearancePropertiesContribution(part));
+ diagramElementContributionItems.add(createCopyLayoutContribution(part));
+ diagramElementContributionItems.add(createSizeBothContribution(part));
+ diagramElementContributionItems.add(createAutoSizeContribution(part));
+ }
+ return diagramElementContributionItems;
+ }
+
+</code></pre>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/developer/images/Sirius - High-Level Architecture Overview.png b/doc/5.1.x/developer/images/Sirius - High-Level Architecture Overview.png
similarity index 100%
rename from doc/developer/images/Sirius - High-Level Architecture Overview.png
rename to doc/5.1.x/developer/images/Sirius - High-Level Architecture Overview.png
Binary files differ
diff --git a/doc/developer/images/Sirius - High-Level Architecture Overview.svg b/doc/5.1.x/developer/images/Sirius - High-Level Architecture Overview.svg
similarity index 100%
rename from doc/developer/images/Sirius - High-Level Architecture Overview.svg
rename to doc/5.1.x/developer/images/Sirius - High-Level Architecture Overview.svg
diff --git a/doc/developer/images/Sirius - Representation Refresh-Sync.png b/doc/5.1.x/developer/images/Sirius - Representation Refresh-Sync.png
similarity index 100%
rename from doc/developer/images/Sirius - Representation Refresh-Sync.png
rename to doc/5.1.x/developer/images/Sirius - Representation Refresh-Sync.png
Binary files differ
diff --git a/doc/developer/images/Sirius - Representation Refresh-Sync.svg b/doc/5.1.x/developer/images/Sirius - Representation Refresh-Sync.svg
similarity index 100%
rename from doc/developer/images/Sirius - Representation Refresh-Sync.svg
rename to doc/5.1.x/developer/images/Sirius - Representation Refresh-Sync.svg
diff --git a/doc/5.1.x/developer/images/architecture.jpg b/doc/5.1.x/developer/images/architecture.jpg
new file mode 100644
index 0000000..5bc9f4e
--- /dev/null
+++ b/doc/5.1.x/developer/images/architecture.jpg
Binary files differ
diff --git a/doc/developer/images/arrange-all/airlayoutprovider.jpg b/doc/5.1.x/developer/images/arrange-all/airlayoutprovider.jpg
similarity index 100%
rename from doc/developer/images/arrange-all/airlayoutprovider.jpg
rename to doc/5.1.x/developer/images/arrange-all/airlayoutprovider.jpg
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-air.jpg b/doc/5.1.x/developer/images/arrange-all/arrange-all-air.jpg
similarity index 100%
rename from doc/developer/images/arrange-all/arrange-all-air.jpg
rename to doc/5.1.x/developer/images/arrange-all/arrange-all-air.jpg
Binary files differ
diff --git a/doc/5.1.x/developer/images/arrange-all/arrange-all-layoutprovider-extension.png b/doc/5.1.x/developer/images/arrange-all/arrange-all-layoutprovider-extension.png
new file mode 100644
index 0000000..db453d3
--- /dev/null
+++ b/doc/5.1.x/developer/images/arrange-all/arrange-all-layoutprovider-extension.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-ls.jpg b/doc/5.1.x/developer/images/arrange-all/arrange-all-ls.jpg
similarity index 100%
rename from doc/developer/images/arrange-all/arrange-all-ls.jpg
rename to doc/5.1.x/developer/images/arrange-all/arrange-all-ls.jpg
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-provider-extension.png b/doc/5.1.x/developer/images/arrange-all/arrange-all-provider-extension.png
similarity index 100%
rename from doc/developer/images/arrange-all/arrange-all-provider-extension.png
rename to doc/5.1.x/developer/images/arrange-all/arrange-all-provider-extension.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-tlinterface.jpg b/doc/5.1.x/developer/images/arrange-all/arrange-all-tlinterface.jpg
similarity index 100%
rename from doc/developer/images/arrange-all/arrange-all-tlinterface.jpg
rename to doc/5.1.x/developer/images/arrange-all/arrange-all-tlinterface.jpg
Binary files differ
diff --git a/doc/developer/images/arrange-all/viewordering.jpg b/doc/5.1.x/developer/images/arrange-all/viewordering.jpg
similarity index 100%
rename from doc/developer/images/arrange-all/viewordering.jpg
rename to doc/5.1.x/developer/images/arrange-all/viewordering.jpg
Binary files differ
diff --git a/doc/5.1.x/developer/images/customPageApi_debugPage_after.png b/doc/5.1.x/developer/images/customPageApi_debugPage_after.png
new file mode 100644
index 0000000..237a416
--- /dev/null
+++ b/doc/5.1.x/developer/images/customPageApi_debugPage_after.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/customPageApi_debugPage_before.png b/doc/5.1.x/developer/images/customPageApi_debugPage_before.png
new file mode 100644
index 0000000..fc2049f
--- /dev/null
+++ b/doc/5.1.x/developer/images/customPageApi_debugPage_before.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/customPageApi_debugPage_example.png b/doc/5.1.x/developer/images/customPageApi_debugPage_example.png
new file mode 100644
index 0000000..0686080
--- /dev/null
+++ b/doc/5.1.x/developer/images/customPageApi_debugPage_example.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/customPageApi_debugPage_extensionPoint.png b/doc/5.1.x/developer/images/customPageApi_debugPage_extensionPoint.png
new file mode 100644
index 0000000..0fbff20
--- /dev/null
+++ b/doc/5.1.x/developer/images/customPageApi_debugPage_extensionPoint.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/customPageApi_debugPage_replace.png b/doc/5.1.x/developer/images/customPageApi_debugPage_replace.png
new file mode 100644
index 0000000..cb7f81e
--- /dev/null
+++ b/doc/5.1.x/developer/images/customPageApi_debugPage_replace.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/propertiesView.png b/doc/5.1.x/developer/images/propertiesView.png
new file mode 100644
index 0000000..7a59d51
--- /dev/null
+++ b/doc/5.1.x/developer/images/propertiesView.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/sessionCreation.png b/doc/5.1.x/developer/images/sessionCreation.png
new file mode 100644
index 0000000..f91b638
--- /dev/null
+++ b/doc/5.1.x/developer/images/sessionCreation.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/style/customStyle.png b/doc/5.1.x/developer/images/style/customStyle.png
new file mode 100644
index 0000000..094eb01
--- /dev/null
+++ b/doc/5.1.x/developer/images/style/customStyle.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/style/editPartProvider_plugin1.png b/doc/5.1.x/developer/images/style/editPartProvider_plugin1.png
new file mode 100644
index 0000000..269f25c
--- /dev/null
+++ b/doc/5.1.x/developer/images/style/editPartProvider_plugin1.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/style/editParts.jpg b/doc/5.1.x/developer/images/style/editParts.jpg
new file mode 100644
index 0000000..40dce69
--- /dev/null
+++ b/doc/5.1.x/developer/images/style/editParts.jpg
Binary files differ
diff --git a/doc/5.1.x/developer/images/style/instanceRole.png b/doc/5.1.x/developer/images/style/instanceRole.png
new file mode 100644
index 0000000..7b2ba13
--- /dev/null
+++ b/doc/5.1.x/developer/images/style/instanceRole.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/style/styleConfigurationProviderExt.png b/doc/5.1.x/developer/images/style/styleConfigurationProviderExt.png
new file mode 100644
index 0000000..52740dd
--- /dev/null
+++ b/doc/5.1.x/developer/images/style/styleConfigurationProviderExt.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/style/viewpoint.jpg b/doc/5.1.x/developer/images/style/viewpoint.jpg
new file mode 100644
index 0000000..f146149
--- /dev/null
+++ b/doc/5.1.x/developer/images/style/viewpoint.jpg
Binary files differ
diff --git a/doc/5.1.x/developer/images/tabbar01.png b/doc/5.1.x/developer/images/tabbar01.png
new file mode 100644
index 0000000..6a71098
--- /dev/null
+++ b/doc/5.1.x/developer/images/tabbar01.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/tabbar02.png b/doc/5.1.x/developer/images/tabbar02.png
new file mode 100644
index 0000000..f4811ac
--- /dev/null
+++ b/doc/5.1.x/developer/images/tabbar02.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/tabbar_extension_plugin_xml.png b/doc/5.1.x/developer/images/tabbar_extension_plugin_xml.png
new file mode 100644
index 0000000..707eb63
--- /dev/null
+++ b/doc/5.1.x/developer/images/tabbar_extension_plugin_xml.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/tabbar_extension_result.png b/doc/5.1.x/developer/images/tabbar_extension_result.png
new file mode 100644
index 0000000..f3d4fd2
--- /dev/null
+++ b/doc/5.1.x/developer/images/tabbar_extension_result.png
Binary files differ
diff --git a/doc/5.1.x/developer/integration-modeler_description_file_deployment.html b/doc/5.1.x/developer/integration-modeler_description_file_deployment.html
new file mode 100644
index 0000000..73755a0
--- /dev/null
+++ b/doc/5.1.x/developer/integration-modeler_description_file_deployment.html
@@ -0,0 +1,78 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>integration-modeler_description_file_deployment</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusDeployaModelerdescriptionfile">Sirius – Deploy a Modeler description file</h1>
+ <p>This document describes how to deploy a modeler description file as an Eclipse plug-in through the available APIs.</p>
+ <h2 id="CreateanewEclipseplugin">Create a new Eclipse plug-in</h2>
+ <ul>
+ <li>Select
+ <strong>File -> New -> Plug-in project</strong>
+ </li>
+ <li>Choose a name; for instance
+ <code>com.yourcompany.yourproject.mymodeler</code>
+ </li>
+ <li>Select
+ <em>Generate an activator</em> and uncheck the checkbox labelled
+ <em>This plug-in will make contributions to the UI</em>
+ </li>
+ <li>Create a new folder named "description" in the created project’s root</li>
+ <li>Activate to true the option "Activate this plug-in when one of its classes is loaded" of your plugin.xml</li>
+ </ul>
+ <h2 id="Importyourmodeler">Import your modeler</h2>
+ <ul>
+ <li>Select
+ <strong>File -> Import... -> File System</strong>
+ </li>
+ <li>Select the directory where your modeler description file is located.</li>
+ <li>Check that the modeler description file is checked as file to import.</li>
+ <li>import it in the previously created project</li>
+ </ul>
+ <h2 id="Contributetoorg.eclipse.sirius.componentization">Contribute to
+ <code>org.eclipse.sirius.componentization</code>
+ </h2>
+ <ul>
+ <li>Open the
+ <em>META-INF/MANIFEST.MF</em> file.
+ </li>
+ <li>In the
+ <em>Extensions</em> tab, add a new extensions based on the
+ <code>org.eclipse.sirius.componentization</code> extension point
+ </li>
+ <li>Fill the properties with the following values :
+ <ul>
+ <li>id: an identifier string</li>
+ <li>name: a name string</li>
+ <li>class: the activator of the previously created plug-in</li>
+ </ul>
+ </li>
+ </ul>
+ <p>Here is an example :</p>
+ <pre> id="com.mycompany.yourproject.mymodeler.modeler"
+ name="com.mycompany.yourproject.mymodeler.modeler"
+ class="com.mycompany.yourproject.mymodeler.modeler.MyActivator"
+</pre>
+ <h2 id="Registeryourviewpointsatthestartofyourplugin">Register your viewpoints at the start of your plug-in</h2>
+ <ul>
+ <li>Add your viewpoints in the function start of the activator of your plug-in:</li>
+ </ul>
+ <pre>viewpoints = new HashSet&lt;Viewpoint&gt;();
+viewpoints.addAll(ViewpointRegistry.getInstance().registerFromPlugin(PLUGIN&#95;ID+&quot;/&lt;path&#95;from&#95;the&#95;plugin&#95;project&gt;/&lt;myModeler&gt;.odesign&quot;));
+</pre>
+ <ul>
+ <li>Suppress your viewpoints in the function stop of the activator of your plug-in</li>
+ </ul>
+ <pre>if (viewpoints != null) {
+ for (Viewpoint viewpoint : viewpoints) {
+ ViewpointRegistry.getInstance().disposeFromPlugin(viewpoint);
+ }
+ viewpoints.clear();
+}
+</pre>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/integration-plm.html b/doc/5.1.x/developer/integration-plm.html
new file mode 100644
index 0000000..b19e35e
--- /dev/null
+++ b/doc/5.1.x/developer/integration-plm.html
@@ -0,0 +1,104 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>integration-plm</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="IntegrationwithProductLifeCycleManagement">Integration with Product Life Cycle Management</h1>
+ <h2 id="API">API</h2>
+ <h3 id="Description">Description</h3>
+ <p>Sirius can be used in a concurrent environment and should therefore provide a mean to lock/unlock elements and adapt its behavior according to this information. The PermissionAuthority is responsible for telling whether an element feature is locked or not.</p>
+ <h3 id="GettingthecurrentPermissionAuthority">Getting the current Permission Authority</h3>
+ <p>The
+ <code>org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionProvider</code> service will return an instance of
+ <code>org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority</code> given a resource set. Convenience methods have been added in
+ <code>ModelAccessor</code> to retrieve the current authority.
+ </p>
+ <h3 id="WritingyourownPermissionauthority">Writing your own Permission authority</h3>
+ <p>Custom Permission Authorities can be implemented in order to activate the lock/unlock support for your own concurrent handling
+ <br/>mechanism within Sirius.
+ </p>
+ <p>Providing your own Permission Authority to determine whether an element (either semantic or diagrammatic) is locked or not can
+ <br/>be done through the
+ <code>org.eclipse.sirius.ecore.extender.PermissionProvider</code> extension point.
+ </p>
+ <p>Permission Authorities must implement the interface
+ <code>IPermissionAuthority</code> and be described in the plug-in’s plugin.xml:
+ </p>
+ <pre><extension point="org.eclipse.sirius.ecore.extender.PermissionProvider">
+ <permissionprovider priority="high" providerClass="com.example.MyAuthorityProvider" />
+</extension>
+</pre>
+ <p>Your provider will the be prompted whether this permission authority should be provided considering a ResourceSet.</p>
+ <h2 id="Implementationnotes">Implementation notes</h2>
+ <p>Dynamic PLM allows for the locking and unlocking of any element as well as determining at any moment if an element has been
+ <br/>modified, created, ...
+ </p>
+ <p>These features require a tight integration of the tooling (Modelers and editors) with the permission manager. </p>
+ <p>We can logically divide these aspects in a number of components of Sirius:</p>
+ <ul>
+ <li>Core components
+ <ul>
+ <li>File Modification Validation</li>
+ <li>Semantic Model Access</li>
+ <li>ViewPoint Model Access</li>
+ </ul>
+ </li>
+ <li>Editor components
+ <ul>
+ <li>GMF model access</li>
+ <li>Graphical Viewer access</li>
+ <li>Tool Access</li>
+ <li>Properties Access (Semantic, Extension, Style and Graphical Properties)</li>
+ </ul>
+ </li>
+ </ul>
+ <h3 id="FileModificationValidation">File Modification Validation</h3>
+ <p>You can provide specific file modification validator to integrate with your legacy SCM System.
+ <br/>A file modification validator should implement
+ <code>IFileModificationValidator</code> interface and could be contributed through an extension point :
+ </p>
+ <p>
+ <code>org.elipse.sirius.common.fileModificationValidator</code>
+ </p>
+ <p>An default implementation (which override default eclipse to handle a Clearcase SCM specific issue) is provided in the
+ <code>org.elipse.sirius.common.ui</code> plug-in, by the class
+ <code>FileModificationValidator</code>.
+ </p>
+ <h3 id="SemanticAccess">Semantic Access</h3>
+ <p>Every semantic access to model elements is done through the “ModelAccessor”. This accessor is the common facade of the Ecore intrinsic data access and of any kind of extended data access. It also handles the inter-weaving of the elements provided by both the Ecore semantic model and the annotations.</p>
+ <p>Having the permission to set/unset a value or to create an instance of the semantic model are therefore done through instances of this class and a permission authority coupled with this class may be used to prompt for permission or notify changes and element creations.</p>
+ <h3 id="SiriusModelAccess">Sirius Model Access</h3>
+ <p>Every access made to the viewpoint model checks whether it has the rights to create/delete/update an element, which means every possible creation or setting of a value automatically request the permission beforehand.</p>
+ <h3 id="GMFModelAccess">GMF Model Access</h3>
+ <p>GMF models should be understood as the Annotation model used by GMF to keep track of the diagram data. It is composed of
+ <code>Node</code>\ s,
+ <code>Edge</code>\ s and positions for instance. The GMF model is automatically updated trough the
+ <code>CannonicalEditPolicy</code> of every edit part in the diagram editor. We have virtually no control on that though we can tell if an edit part’s “edit mode” is enabled or not. If the edit mode is disabled then nothing
+ <strong>should</strong> lead to a change in the GMF model.
+ </p>
+ <p>We ensure that when a
+ <code>DDiagram</code> cannot be edited, GMF won’t bypass any EditPart to refresh the annotation model at the diagram opening.
+ </p>
+ <h3 id="GraphicalVieweraccess">Graphical Viewer access</h3>
+ <p>Mouse or keyboard editing will be prevented thanks to the disable/enable edit mode in the GMF edit parts and specific code in the properties view.</p>
+ <h3 id="ToolAccess">Tool Access</h3>
+ <p>Every tool in the modeler’s palette can cause changes in the model. As every command launched re-uses the
+ <code>ModelAccessor</code>, it wouldn’t really change anything in a locked model. Yet since we don’t want the tool to be enabled on a locked element either, the EMFCommandFactory asks for permission before allowing the usage of a tool. When no permission is given, it will return an UnexecutableCommand.
+ </p>
+ <h3 id="PropertiesAccess">Properties Access</h3>
+ <p>Properties will ask for permission on a “per instance” basis right now, when not given, no CellEditor will be returned which means the feature won’t be editable.</p>
+ <h3 id="Notifyingthechanges">Notifying the changes</h3>
+ <p>The Permission authority should be notified on instances creation and modification. To this end the PermissionAuthority initialization will install a listener on the ResourceSet and will automatically be notified when a change occurs. This will also help in checking for unauthorized changes. In
+ <strong>strict</strong> mode the permission authority will throw Exceptions when a change is made to a locked element. If the process was in a transactional environment, a rollback will then happen.
+ </p>
+ <h3 id="Accesserrors">Access errors</h3>
+ <p>The current implementation provides 2 modes for the ModelAccessor. The “silent” mode won’t complain about an invalid access on a locked element, it will simply ignore it. When not in “silent” mode, an Exception will be thrown in these cases. </p>
+ <h3 id="Status">Status</h3>
+ <p>Semantic Model accesses are handled through the command or properties. Extended information too. Notification are handled through the usual EMF notifiers + the notification of instance creation in the Model Accessor.</p>
+ <p>EditParts are disabled when the corresponding semantic element is locked. Permission listeners are set up to handle dynamic locking/unlocking.</p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/later/extensions-provide_custom_extender.txt b/doc/5.1.x/developer/later/extensions-provide_custom_extender.txt
new file mode 100644
index 0000000..bc48cfa
--- /dev/null
+++ b/doc/5.1.x/developer/later/extensions-provide_custom_extender.txt
@@ -0,0 +1,76 @@
+===================================================
+Sirius - Model Extension
+===================================================
+
+Writing your own Extender
+-------------------------
+You may want to write your own Extender if you want to define a new Metamodel extension mechanism or if you want to change the way
+the model accesses are done on EMF objects.
+
+To provide your own Extender you should use the ::
+
+ org.eclipse.sirius.ecore.extender.ExtenderProvider
+
+extension point and provides your own::
+
+ org.eclipse.sirius.ecore.extender.business.api.accessor.IExtenderProvider
+
+implementation.
+
+And then describe it through plugin.xml::
+
+ <extension
+ point="org.eclipse.sirius.ecore.extender.ExtenderProvider">
+ <extenderprovider
+ priority="highest"
+ providerClass="com.example.MyExtenderProvider">
+ </extenderprovider>
+ </extension>
+
+And your provider will be asked to tell if yes or no the extender should be provided considering the resourceset.
+
+The priority field will be used to organize the order of the extender calls.
+If you set the priority to highest, then you are sure every model access request will first go through
+your extender. If it set to lowest, then you know your extender will only be called if no other extenders
+fullfilled the request.
+
+Dynamic update of the Extender
+------------------------------
+
+Your extender might need to update it's state depending on the selected viewpoints. A new API is available for that need. You can provide a MetamodelDescriptorProviders (org.eclipse.sirius.api.extender.MetamodelDescriptorProvider) which will be asked
+for each change in the viewpoint selection, whether it provides MetamodelDescriptors or not. Then these descriptors will be passed by the ModelAccessor API to every instance of IMetamodelExtender so
+that it can change it's internal state. For instance the EcoreIntrinsicExtender provides MetamodelDescriptors ::
+
+ DiagramDescription diag = (DiagramDescription) desc;
+ for (EPackage pak : diag.getMetamodel()) {
+ String nsURI = pak.getNsURI();
+ EPackage registeredPackage = EPackage.Registry.INSTANCE.getEPackage(nsURI);
+ if (registeredPackage != null) {
+ result.add(new EcoreMetamodelDescriptor(registeredPackage));
+ } else {
+
+ result.add(new EcoreMetamodelDescriptor(pak));
+ }
+ }
+
+And then the extender reuse them in the updateMetamodels(..) Method ::
+
+ public void updateMetamodels(final Collection metamodelDescriptors) {
+ final Iterator it = metamodelDescriptors.iterator();
+ while (it.hasNext()) {
+ final Object obj = it.next();
+ if (obj instanceof EcoreMetamodelDescriptor) {
+ final EPackage pak = ((EcoreMetamodelDescriptor) obj).resolve();
+ if (pak != null)
+ addEClassFromEPackage(pak);
+ }
+
+ }
+
+ }
+
+
+
+
+
+
diff --git a/doc/5.1.x/developer/later/extensions-provide_custom_representation.txt b/doc/5.1.x/developer/later/extensions-provide_custom_representation.txt
new file mode 100644
index 0000000..8fa540e
--- /dev/null
+++ b/doc/5.1.x/developer/later/extensions-provide_custom_representation.txt
@@ -0,0 +1,85 @@
+============================================
+ Sirius - Provide custom representation
+============================================
+
+Description
+============
+
+Overview
+---------------------
+
+Sirius allows one to define new kind of representations.
+A representation kind is called "dialect".
+
+API
+=======
+
+Interface
+-------------------------------
+
+To provide a new dialect you must implement four interfaces.
+
+First step is to implement`org.eclipse.sirius.business.api.dialect.Dialect``. Your implementation should like this ::
+
+ public class ExampleDialect implements Dialect {
+
+ private DialectServices services;
+
+ public String getName() {
+ return "example";
+ }
+
+ public DialectServices getServices() {
+ if (services == null) {
+ services = new ExampleDialectServices();
+ }
+ return services;
+ }
+ }
+
+Second step is to implement ``org.eclipse.sirius.business.api.dialect.DialectServices``.
+
+Third step is to implement ``org.eclipse.sirius.ui.business.api.dialect.DialectUI``. Your implementation should look like this ::
+
+ public class ExampleDialectUI implements DialectUI {
+
+ private DialectUIServices services;
+
+ public String getName() {
+ return "example";
+ }
+
+ public DialectUIServices getServices() {
+ if (services == null) {
+ services = new ExampleDialectUIServices();
+ }
+ return services;
+ }
+ }
+
+Last step is to implement ``org.eclipse.sirius.ui.business.api.dialect.DialectUIServices``.
+When you have finished, you can contribute to dialect extension points.
+
+Extension points
+-------------------------------
+
+To contribute our dialect implementation, we have to provide two extensions.
+First to contribute to ``org.eclipse.sirius.dialect`` extension point.
+Here is a example ::
+
+ <extension point="org.eclipse.sirius.dialect">
+ <dialect
+ class="com.example.project.extension.dialect.ExampleDialect">
+ </dialect>
+ </extension>
+
+Then we need to contribute to ``org.eclipse.sirius.ui.dialectui``
+Here is a example ::
+
+ <extension
+ point="org.eclipse.sirius.ui.dialectui">
+ <dialectUI
+ class="com.example.project.ui.extension.dialect.ExampleDialectUI">
+ </dialectUI>
+ </extension>
+
\ No newline at end of file
diff --git a/doc/5.1.x/developer/later/extensions-provide_custom_representations_export.txt b/doc/5.1.x/developer/later/extensions-provide_custom_representations_export.txt
new file mode 100644
index 0000000..ae94baf
--- /dev/null
+++ b/doc/5.1.x/developer/later/extensions-provide_custom_representations_export.txt
@@ -0,0 +1,39 @@
+=================================================
+Sirius - Provide custom representation export
+=================================================
+
+Description
+============
+
+Overview
+---------------------
+
+Viewpoint has the functionality to export representations as images. Currently it works only with diagrams.
+
+The default export behavior is customizable in an aspect like way.
+
+API
+=======
+
+Interfaces to extends export
+------------------------------------------------
+``org.eclipse.sirius.ui.tools.api.actions.export.IBeforeExport``
+
+It contains methods that will be executed *before* representation export operations.
+
+``org.eclipse.sirius.ui.tools.api.actions.export.IAfterExport``
+
+It contains methods that will be executed *after* representation export operations.
+
+Interface to override export
+------------------------------------------------
+
+``org.eclipse.sirius.ui.tools.api.actions.export.IAroundExport``
+
+It contains one method that will be executed *instead* of the standard export
+
+Extension point
+----------------------------
+
+``org.eclipse.sirius.ui.exportRepresentationsAsImagesExtension``.
+
diff --git a/doc/5.1.x/developer/later/extensions-provide_custom_specific_editor.txt b/doc/5.1.x/developer/later/extensions-provide_custom_specific_editor.txt
new file mode 100644
index 0000000..8944e6a
--- /dev/null
+++ b/doc/5.1.x/developer/later/extensions-provide_custom_specific_editor.txt
@@ -0,0 +1,60 @@
+=================================
+Sirius - Provide specific editor
+=================================
+
+Description
+============
+
+Overview
+---------------------
+
+Sirius allows one to define eclipse editor dedicated to a viewpoint and a representation description.
+A specific editor hides session creation, opening, viewpoint activation, and session closing to end user.
+
+API
+=======
+
+Interface
+-------------------------------
+
+To provide a new specific editor you simply need to create an editor.
+
+For the first step the easiest is to extend one existing editor for your kind of representation. For instance for diagram you simply need to extend
+`org.eclipse.sirius.diagram.tools.api.editor.AbstractSpecificDDiagramEditor``. Your implementation should like this ::
+
+public class MySpecificEditor extends AbstractSpecificDDiagramEditor {
+
+ public String getDiagramDescriptionName() {
+ return "YourDiagramDescriptionName";
+ }
+
+ public URI getViewpointURI() {
+ return URI.createURI("viewpoint:/com.yourcompany.yourproject.odesign/YourViewpointName");
+ }
+
+ public boolean isSessionStoredInWorkspace() {
+ return false;
+ }
+}
+
+Second and last step is to contribute to eclipse editor extension point.
+
+Extension points
+-------------------------------
+
+To contribute our specific editor, we have to provide one extension to ``org.eclipse.ui.editors`` extension point.
+Here is a example ::
+
+ <extension
+ point="org.eclipse.ui.editors">
+ <editor
+ class="com.yourcompany.yourproject.design.editor.MySpecificEditor"
+ contributorClass="org.eclipse.sirius.diagram.part.ViewpointDiagramActionBarContributor"
+ default="false"
+ extensions="YourModelFileExtension"
+ icon="icons/full/obj16/YourModelFile.gif"
+ id="com.yourcompany.yourproject.design.editor."
+ name="YourModel Editor">
+ </editor>
+ </extension>
+
\ No newline at end of file
diff --git a/doc/5.1.x/developer/later/integration-model_access.txt b/doc/5.1.x/developer/later/integration-model_access.txt
new file mode 100644
index 0000000..bbb7e07
--- /dev/null
+++ b/doc/5.1.x/developer/later/integration-model_access.txt
@@ -0,0 +1,91 @@
+===================================================
+Sirius - Model Access
+===================================================
+
+Description
+============
+
+Overview
+-----------
+
+Every access (set or get) to the semantic model is going through a unified layer called the *ModelAccessor*. This model accessor is
+responsible for setting and getting values in an unified way, not knowing whether we are setting an intrinsic data attribute or an extended one
+from a annotation.
+
+The ModelAccessor uses a set of Extenders which are responsible for a part of the model data. For instance we have an EcoreIntrinsicExtender which handle
+the classical (defined in the metamodel) attributes accesses. And an AnnotationExtender which use an annotation model to add data to an existing model
+without changing the metamodel implementation.
+
+All these extenders are working together and provides, through the ModelAccessor instance, an unified model access layer.
+
+
+ Dynamic PLM is about being able to lock/unlock a given element and being able to tell at any moment if this element has been modified or not, if it's a new element and so on.
+
+
+All these features requires a tight integration of the tooling (Modelers and editors) and the permission manager.
+
+We can logically cut these aspects in a number of components in Viewpoint :
+
+# Core components considering
+ - Semantic Model Access
+ - ViewPoint Model Access
+# Editor components
+ - GMF model access
+ - Graphical Viewer access
+ - Tool Access
+ - Properties Access (Semantic, Extension, Style and Graphical Properties)
+
+Semantic Access
+---------------
+
+ Every semantic access of model elements is done through the "ModelAccessor". This accessor is the common facade of the Ecore intrinsic data access and
+ of any kind of extended data access. It also handle the inter-weaving of the elements provided by both the Ecore semantic model and the annotations.
+
+ Having the permission to set/unset a value or to create an instance of the semantic model is then done in this class and a permission authority coupled with this class may then be used
+ to ask for permission or notify a change or instance creation.
+
+
+ViewPoint Model Access
+----------------------
+
+ Every access made to the viewpoint model is manually checking whether it has rights or not to create/delete/update an element. That means every possible creation or setting of a value manually request the permission at first.
+
+GMF Model Access
+----------------
+GMF model should be understood as the Annotation model used by GMF to keep track of the diagram data. It is composed of "Node" and "Edge" and positions for instance.
+The GMF model is automatically updated trough the CannonicalEditPolicy of every edit part in the diagram editor.
+We pretty much have no control on that but we can tell an edit part its "edit mode" is enabled or not. If the edit mode is disabled then nothing *should* lead to a change in the GMF model.
+
+We make sure that if a "ViewPoint" can't be edited, then at the diagram opening GMF won't bypass any EditPart to refresh the annotation model.
+
+Graphical Viewer access
+-----------------------
+Mouse or keyboard editing is prevented thanks to the disable/enable edit mode in the GMF edit parts and specific code in the properties.
+
+Tool Access
+-----------
+Every tool in the modeler palette is able to cause the a change in the model. As every command launched re-use the ModelAccessor it won't really change something in the model,
+but as we don't want the tool to be enabled on a locked element, then the EMFCommandFactory ask for permission too, and if no permission is given, will return an UnexecutableCommand.
+
+Properties Access
+-----------------
+Properties will ask for permission on a "per instance" basis right now, if it is not given, no CellEditor will be returned meaning the feature won't be editable.
+
+Notifying the changes
+----------------------
+The Permission authority should be notified on new instance creation and on changes of the instances. To do so the PermissionAuthority initialization will install a listener on the given ResourceSet and will automatically notify it-self when a change appears.
+This system will also help in checking that some unauthorized changes are not done.
+In *strict* mode the permission authority will throw Exceptions when a change is made to a locked element. Then if the process was in a transactional environment, then a rollback will happen.
+
+Access errors
+-------------
+Current implementation provides 2 modes of usage of the ModelAccessor. The "silent" mode won't complain about an invalid access on a locked element, it will just ignore it.
+If the current model accessor is not in silent mode then an Exception will be thrown in these cases.
+
+Status
+------
+
+Semantic Model accesses are handled through the command or properties. Extended information too.
+Notification are handled through the usual EMF notifiers + the notification of instance creation in the Model Accessor.
+
+EditParts are disabled when the corresponding semantic element is locked. Permission listeners are setup to handle dynamic locking/unlocking.
diff --git a/doc/5.1.x/developer/representations_lazy_loading.html b/doc/5.1.x/developer/representations_lazy_loading.html
new file mode 100644
index 0000000..62d6d6a
--- /dev/null
+++ b/doc/5.1.x/developer/representations_lazy_loading.html
@@ -0,0 +1,62 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>representations_lazy_loading</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusRepresentationslazyloadingexperimental">Sirius – Representations lazy loading (experimental)</h1>
+ <h2 id="Overview">Overview</h2>
+ <p>An experimental mode allows to have the representation lazy loading. This mode is available with the system property
+ <code>createLocalRepresentationInSeparateResource=true</code>.
+ </p>
+ <p>There is two main changes to keep in mind with this mode:</p>
+ <ul>
+ <li>The representations are (by default) serialized in separate *.srm files in a .representation folder. This folder is created at the same location than the *.aird file.</li>
+ <li>The representations are loaded on demand. That means the session opening does not load the representations. They will be loaded as soon as Sirius needs it to perform the functionality. For example: open an editor, copy, rename or delete a representation, export a diagram as image etc. From a developer point of view, the representation is loaded when
+ <code>DRepresentationDescriptor.getRepresentation()</code> is called.
+ </li>
+ </ul>
+ <h2 id="Impacts">Impacts</h2>
+ <p>The Sirius API used to retrieve
+ <code>DRepresentation</code>, such as the
+ <code>DialectManager</code>, keep the same behavior: the representation will be loaded where necessary. New API (see the release note for more details) has been added to retrieve only loaded representations.
+ </p>
+ <p>
+ <strong>Warning</strong>, if some of your features depend on the Sirius crossReferencer, it may not return the same result than before. It works on the scope of only what is loaded in the session. Before, all the models was loaded whereas now some representations will not be.
+ <code>ECrossReferenceAdapter.getInverseReferences(EObject )</code> or
+ <code>ECrossReferenceAdapter.getInverseReferences(EObject , boolean)</code> will not provide potential inverse references that would be in not loaded representation. The typical case is getting DRepresentationElement referencing a semantic element as DSemanticDecorator.target.
+ </p>
+ <h2 id="Overridetherepresentationlocationrule.">Override the representation location rule.</h2>
+ <p>By default Sirius creates an *.srm file per representation. Developer may need to override this rule by choosing to add one or several representations in a specific resource.</p>
+ <h3 id="TheDRepresentationLocationRuleinterface">The
+ <code>DRepresentationLocationRule</code> interface
+ </h3>
+ <ul>
+ <li>
+ <code>boolean providesURI(DRepresentation representation, Resource dViewResource)</code>: Indicates if this
+ <code>DRepresentationLocationRule</code> provides a custom URI for this kind of representation and the resource that holds the
+ <code>DView</code>. If not and if there is no other
+ <code>DRepresentationLocationRule</code> that provides, Sirius fall back to the default implementation.
+ </li>
+ </ul>
+ <ul>
+ <li>
+ <code>URI getResourceURI(DRepresentation representation, Resource dViewResource)</code>: Provides the new URI for the given representation.
+ </li>
+ </ul>
+ <ul>
+ <li>
+ <code>Boolean isARepresentationResource(String fileExtension)</code>: Indicates if the given file extension is considered as a representation file. This extension point allows to define its own extension to hold representations. The developer still needs to register the Resource Factory to
+ <code>org.eclipse.emf.ecore.extension_parser</code> extension point.
+ </li>
+ </ul>
+ <h3 id="ProvideyourDRepresentationLocationRuleusingtheorg.eclipse.sirius.dRepresentationLocationRuleextensionpoint">Provide your
+ <code>DRepresentationLocationRule</code> using the
+ <code>org.eclipse.sirius.dRepresentationLocationRule</code> extension point
+ </h3>
+ <p>Please refer to this extension point documentation for more details.</p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/siriusCrossReferenceAdapter.html b/doc/5.1.x/developer/siriusCrossReferenceAdapter.html
new file mode 100644
index 0000000..2878977
--- /dev/null
+++ b/doc/5.1.x/developer/siriusCrossReferenceAdapter.html
@@ -0,0 +1,25 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>siriusCrossReferenceAdapter</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusCrossReferenceAdapter">SiriusCrossReferenceAdapter</h1>
+ <p>The
+ <code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapter</code> interface is designed to disable the proxy resolution of the InverseCrossReferencer.
+ </p>
+ <p>This capability is typically used to prevent loading a resource during its unloading.</p>
+ <p>Furthermore, it is not recommended to add other ECrossReferenceAdapter additionally to those created by Sirius. Note that you can get the semantic CrossReferencer with
+ <code>org.eclipse.sirius.business.api.session.Session.getSemanticCrossReferencer()</code>.
+ </p>
+ <p>However, in the case where an additional custom ECrossReferenceAdapter is needed, it should extend
+ <code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapterImpl</code> or at least implement
+ <code>SiriusCrossReferenceAdapter</code> with the same implementation as
+ <code>SiriusCrossReferenceAdapterImpl</code>.
+ <br/>Otherwise, there is no guarantee that load during unload won’t come up.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/i18n_changes.html b/doc/5.1.x/i18n_changes.html
new file mode 100644
index 0000000..3e9430d
--- /dev/null
+++ b/doc/5.1.x/i18n_changes.html
@@ -0,0 +1,508 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>i18n_changes</title>
+ <link type="text/css" rel="stylesheet" href="resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="TranslationKeysChanges">Translation Keys Changes</h1>
+ <p>This document lists the changes in
+ <code>TranslatableMessage</code> used for Sirius internationalization in each Sirius version.
+ </p>
+ <h2 id="sirius51">Translation Keys Changes in Sirius 5.1 (from Sirius 5.0)</h2>
+ <h3 id="MessageKeysAdded">Message Keys Added</h3>
+ <ul>
+ <li>`org.eclipse.sirius.diagram.sequence.Messages.Range_wrongArgument`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.BundledImageShape_attributeAbsent`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_scaleDiagramOnExport`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_showSynchronizeStatusDecoratorLabel`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.RepairGMFbendpointsMigrationParticipant_edgesModified`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.RepairGMFbendpointsMigrationParticipant_title`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SiriusStatusLineContributionItemProvider_diagramSynchronized`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SiriusStatusLineContributionItemProvider_diagramUnsynchronized`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_nodesMoved`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_oneLabelSnapBacked`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_severalLabelsSnapBacked`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_title`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_BottomSidePinnedLabel`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_BottomSidePinnedTooltip`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_LeftSidePinnedLabel`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_LeftSidePinnedTooltip`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_RightSidePinnedLabel`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_RightSidePinnedTooltip`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_TopSidePinnedLabel`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_TopSidePinnedTooltip`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeStatusFigure_diagSynchronized`</li>
+ <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeStatusFigure_diagUnsynchronized`</li>
+ <li>`org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_closeSession_action_label`</li>
+ <li>`org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_closeSession_action_tooltip`</li>
+ <li>`org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_addModelButton_tooltip`</li>
+ <li>`org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_newModelButton_tooltip`</li>
+ <li>`org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_removeModelButton_tooltip`</li>
+ <li>`org.eclipse.sirius.ui.editor.Messages.PluginPageProviderRegistry_badClassType`</li>
+ <li>`org.eclipse.sirius.ui.editor.Messages.PluginPageProviderRegistry_classInitialization`</li>
+ <li>`org.eclipse.sirius.ui.editor.Messages.SessionEditor_PageActivation_Failure`</li>
+ <li>`org.eclipse.sirius.ui.editor.Messages.SessionEditor_PageCommand_Integrity_Error`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractExportRepresentationsAsImagesDialog_autoScaleDiagram`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_message`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_message_plural`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_title`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_title_plural`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_disableViewpointButton_tooltip`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_enableViewpointButton_tooltip`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_newRepresentationButton_tooltip`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_removeRepresentationButton_tooltip`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Active_Representation_Message`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Controlled_Resources_Message`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Error_Removal_Title`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Not_External_Dependency_Message`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.UpdateRepresentationsLocationHandler_errorMsg`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.UpdateRepresentationsLocationHandler_label`</li>
+ <li>`org.eclipse.sirius.viewpoint.Messages.DRepresentationDescriptorToDRepresentationLinkManager_repLoading`</li>
+ <li>`org.eclipse.sirius.viewpoint.Messages.ModelOperationToTask_cannotCreateTaskWarningMsg`</li>
+ <li>`org.eclipse.sirius.viewpoint.Messages.SessionFactoryImpl_ResourceTypeErrorMsg`</li>
+ </ul>
+ <h3 id="MessageKeysRemoved">Message Keys Removed</h3>
+ <ul>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_message`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_message_plural`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_title`</li>
+ <li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_title_plural`</li>
+ </ul>
+ <h2 id="sirius50">Translation Keys Changes in Sirius 5.0 (from Sirius 4.1)</h2>
+ <h3 id="MessageKeysAdded2">Message Keys Added</h3>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.common.acceleo.aql.business.Messages.AQLInterpreter_errorWithExpression</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramAppearancePreferencePage_authorizeOverlapGroupText</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramAppearancePreferencePage_decorationGroupText</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramPrintingPreferencePage_optionsGroupText</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramPrintingPreferencePage_printDecorations</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.SiriusDiagramGraphicalViewer_tooltipDisplayDelay</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ecore.extender.business.internal.Messages.PermissionService_permissionProviderInstantiationError</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.ext.widgets.reference.internal.Messages.DefaultReferenceDescriptionFactory_name</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.ext.widgets.reference.internal.Messages.DefaultReferenceDescriptionFactory_widgetLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.CategoryMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.ConditionalStyleMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.ContainerMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.CreateWidgetForAllFeaturesCommand_text</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.CreateWidgetFromDomainClassMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.CustomExpressionMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.CustomOperationMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultBooleanDescriptionFactory_name</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultBooleanDescriptionFactory_widgetLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultEnumerationDescriptionFactory_name</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultEnumerationDescriptionFactory_widgetLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultMonolineTextDescriptionFactory_name</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultMonolineTextDescriptionFactory_widgetLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultMultilineTextDescriptionFactory_name</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultMultilineTextDescriptionFactory_widgetLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultMultivaluedEAttributeDescriptionFactory_name</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultMultivaluedEAttributeDescriptionFactory_widgetLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.DialogButtonMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.DynamicMappingMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.GroupMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.LayoutMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.OverridesMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.PageMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.PropertiesMenuBuilder_ExtendPropertiesView_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.PropertiesMenuBuilder_ImportPropertiesView_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.PropertiesMenuBuilder_NewPropertiesView_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.PropertiesMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.StyleMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.ToolbarActionMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.ValidationMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.WidgetActionMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.internal.Messages.WidgetMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.properties.core.internal.Messages.AbstractDescriptionConverter_noConverterFound</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.properties.core.internal.Messages.IDescriptionConverter_InvalidDescriptionType</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.properties.core.internal.Messages.SiriusToolServices_MainTabLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.properties.defaultrules.internal.Messages.DefaultRulesProvider_DefaultPropertiesNotFound</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.properties.provider.Messages.Category__name</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.properties.provider.Messages.GridLayoutDescription__label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.properties.provider.Messages.GroupDescription__name</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.properties.provider.Messages.PageDescription__name</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.properties.provider.Messages.ViewExtensionDescription__name</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Refresh_cancelled</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Refresh_error</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Refresh_errorDuringRefresh</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Table_LineElement</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Table_TableElement</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table.tools.internal.Messages.TableToolVariables_LineElement</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table.tools.internal.Messages.TableToolVariables_TableElement</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree.ui.provider.Messages.EditorRefresh_error</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree.ui.provider.Messages.EditorRefresh_refreshCancelled</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree.ui.provider.Messages.EditorRefresh_treeRefreshError</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree.ui.provider.Messages.SiriusTreePreferencePage_alwaysUseStandardFont</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree.ui.provider.Messages.SiriusTreePreferencePage_alwaysUseStandardFont_help</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree.ui.provider.Messages.SiriusTreePreferencePage_globalGroupName</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_collapseAllAction_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_selectFilterAction_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.GraphicalRepresentationHandler_disabledViewpoint_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.GraphicalRepresentationHandler_missingDependencies_requirements</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.GraphicalRepresentationHandler_representationNumber_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_default_page_tab_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_header_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_inputNotHandled_error_message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_models_button_newSemanticModel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_models_button_removeSemanticModel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_models_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_new_semantic_model_action_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_page_loading_error_message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_representation_button_newRepresentation</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_representation_button_removeRepresentation</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_representation_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_session_loading_error_message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_session_loading_task_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_viewpoints_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.properties.internal.Messages.DialogTask_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.properties.internal.Messages.WizardTask_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.properties.internal.preferences.Messages.SiriusPropertiesPreferencePage_maxLengthTabName_invalidInteger</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.properties.internal.preferences.Messages.SiriusPropertiesPreferencePage_maxLengthTabName_invalidValue</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractExportRepresentationsAsImagesDialog_decorationExport</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.CreateEMFModelWizard_errorInstantiateRootElement</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.CreateEMFModelWizard_modelNamePrefix</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.CreateEMFModelWizard_windowTitle</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.DynamicViewpointsSelectionComponent_missingDependencies_requirements</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_CreateRepresentationWizard_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_button_activateDeactivateViewpoint_incorrectSelection_message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_button_activateDeactivateViewpoint_incorrectSelection_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_button_activateViewpoint</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_button_deactivateViewpoint</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_button_newRepresentation</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_button_removeRepresentation</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_checkBoxGroupByRepresentationDescription_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_checkBoxGroupByViewpoint_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_disabledViewpoint_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_missingDependencies_requirements</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_representationNumber_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.NameAndLocationWizardPage_description</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.NameAndLocationWizardPage_errorMessage</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.NameAndLocationWizardPage_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.OtherRepresentationAction_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.OtherRepresentationAction_noRepresentation_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.OtherRepresentationAction_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SelectEMFMetamodelWizardPage_description</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SelectEMFMetamodelWizardPage_documentationLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SelectEMFMetamodelWizardPage_metamodelLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SelectEMFMetamodelWizardPage_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SelectRootElementWizardPage_checkboxLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SelectRootElementWizardPage_description</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SelectRootElementWizardPage_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SelectRootElementWizardPage_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SiriusPreferencePage_autoSessionEditorOpening</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SiriusPreferencePage_sessionEditorGroup</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SiriusRepresentationWithInactiveStatusLabelProvider_representationDescriptionItem_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SiriusRepresentationWithInactiveStatusLabelProvider_viewpointItem_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ViewpointSelectionCallbackWithConfimationAndDependenciesHandling_confirmDependencyActivation_activateLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ViewpointSelectionCallbackWithConfimationAndDependenciesHandling_confirmDependencyActivation_deactivateLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ViewpointSelectionCallbackWithConfimationAndDependenciesHandling_confirmDependencyActivation_message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ViewpointSelectionCallbackWithConfimationAndDependenciesHandling_confirmDependencyActivation_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ViewpointSelectionCallbackWithConfimationAndDependenciesHandling_missingDependency_message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ViewpointSelectionCallbackWithConfimationAndDependenciesHandling_missingDependency_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.AbstractResourceStrategyImpl_methodReleaseNotHandleMsg</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.LetTask_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.SessionInterpreter_evaluationError</code>
+ </li>
+ </ul>
+ <h3 id="MessageKeysRemoved2">Message Keys Removed</h3>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.editor.properties.Messages.ImportingDefaultPropertiesViewDescriptionCommand_text</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Action_cancelled</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Action_error</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.table.metamodel.table.provider.Messages.RefreshAction_errorDuringRefresh</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree.ui.provider.Messages.EditorRefreshAction_error</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree.ui.provider.Messages.EditorRefreshAction_refreshCancelled</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.tree.ui.provider.Messages.EditorRefreshAction_treeRefreshError</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.properties.internal.Messages.AbstractDescriptionConverter_noConverterFound</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.properties.internal.Messages.IDescriptionConverter_InvalidDescriptionType</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.properties.internal.Messages.SiriusTabDescriptorProvider_DefaultPropertiesNotFound</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.properties.internal.Messages.SiriusToolServices_MainTabLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SiriusCommonLabelProvider_eClassDisabled</code>
+ </li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/images/1 - Initializing EEF models.png b/doc/5.1.x/images/1 - Initializing EEF models.png
similarity index 100%
rename from doc/images/1 - Initializing EEF models.png
rename to doc/5.1.x/images/1 - Initializing EEF models.png
Binary files differ
diff --git a/doc/images/2 - VP Contributor ID.png b/doc/5.1.x/images/2 - VP Contributor ID.png
similarity index 100%
rename from doc/images/2 - VP Contributor ID.png
rename to doc/5.1.x/images/2 - VP Contributor ID.png
Binary files differ
diff --git a/doc/images/2-1 - Leaf Components.png b/doc/5.1.x/images/2-1 - Leaf Components.png
similarity index 100%
rename from doc/images/2-1 - Leaf Components.png
rename to doc/5.1.x/images/2-1 - Leaf Components.png
Binary files differ
diff --git a/doc/images/3 - EEF runtime dependency.png b/doc/5.1.x/images/3 - EEF runtime dependency.png
similarity index 100%
rename from doc/images/3 - EEF runtime dependency.png
rename to doc/5.1.x/images/3 - EEF runtime dependency.png
Binary files differ
diff --git a/doc/images/4 - Copying EEF extensions.png b/doc/5.1.x/images/4 - Copying EEF extensions.png
similarity index 100%
rename from doc/images/4 - Copying EEF extensions.png
rename to doc/5.1.x/images/4 - Copying EEF extensions.png
Binary files differ
diff --git a/doc/images/5 - Properties view testing.png b/doc/5.1.x/images/5 - Properties view testing.png
similarity index 100%
rename from doc/images/5 - Properties view testing.png
rename to doc/5.1.x/images/5 - Properties view testing.png
Binary files differ
diff --git a/doc/images/6 - Property sheet on top.png b/doc/5.1.x/images/6 - Property sheet on top.png
similarity index 100%
rename from doc/images/6 - Property sheet on top.png
rename to doc/5.1.x/images/6 - Property sheet on top.png
Binary files differ
diff --git a/doc/images/7 - Multiple tabs.png b/doc/5.1.x/images/7 - Multiple tabs.png
similarity index 100%
rename from doc/images/7 - Multiple tabs.png
rename to doc/5.1.x/images/7 - Multiple tabs.png
Binary files differ
diff --git a/doc/images/8 - Double click descriptor.png b/doc/5.1.x/images/8 - Double click descriptor.png
similarity index 100%
rename from doc/images/8 - Double click descriptor.png
rename to doc/5.1.x/images/8 - Double click descriptor.png
Binary files differ
diff --git a/doc/images/9 - EEF Wizard on VP.png b/doc/5.1.x/images/9 - EEF Wizard on VP.png
similarity index 100%
rename from doc/images/9 - EEF Wizard on VP.png
rename to doc/5.1.x/images/9 - EEF Wizard on VP.png
Binary files differ
diff --git a/doc/5.1.x/images/ApplyAppearanceProperties.png b/doc/5.1.x/images/ApplyAppearanceProperties.png
new file mode 100644
index 0000000..5f935dd
--- /dev/null
+++ b/doc/5.1.x/images/ApplyAppearanceProperties.png
Binary files differ
diff --git a/doc/5.1.x/images/PreferencePageMaxTabName.png b/doc/5.1.x/images/PreferencePageMaxTabName.png
new file mode 100644
index 0000000..c7efb06
--- /dev/null
+++ b/doc/5.1.x/images/PreferencePageMaxTabName.png
Binary files differ
diff --git a/doc/5.1.x/images/borderNodesWithSnapToGrid.png b/doc/5.1.x/images/borderNodesWithSnapToGrid.png
new file mode 100644
index 0000000..b7a82f2
--- /dev/null
+++ b/doc/5.1.x/images/borderNodesWithSnapToGrid.png
Binary files differ
diff --git a/doc/5.1.x/images/compartments_collapse.png b/doc/5.1.x/images/compartments_collapse.png
new file mode 100644
index 0000000..9422f0a
--- /dev/null
+++ b/doc/5.1.x/images/compartments_collapse.png
Binary files differ
diff --git a/doc/5.1.x/images/compartments_collapse2.png b/doc/5.1.x/images/compartments_collapse2.png
new file mode 100644
index 0000000..e3dce1b
--- /dev/null
+++ b/doc/5.1.x/images/compartments_collapse2.png
Binary files differ
diff --git a/doc/5.1.x/images/containerResize-changedBehavior.gif b/doc/5.1.x/images/containerResize-changedBehavior.gif
new file mode 100644
index 0000000..c422d9f
--- /dev/null
+++ b/doc/5.1.x/images/containerResize-changedBehavior.gif
Binary files differ
diff --git a/doc/5.1.x/images/edgeLabelMoveAfterSirius3.1.gif b/doc/5.1.x/images/edgeLabelMoveAfterSirius3.1.gif
new file mode 100644
index 0000000..cf14fa7
--- /dev/null
+++ b/doc/5.1.x/images/edgeLabelMoveAfterSirius3.1.gif
Binary files differ
diff --git a/doc/5.1.x/images/edgeLabelMoveBeforeSirius3.1.gif b/doc/5.1.x/images/edgeLabelMoveBeforeSirius3.1.gif
new file mode 100644
index 0000000..1484a84
--- /dev/null
+++ b/doc/5.1.x/images/edgeLabelMoveBeforeSirius3.1.gif
Binary files differ
diff --git a/doc/5.1.x/images/improvedsiriusinterpreter.png b/doc/5.1.x/images/improvedsiriusinterpreter.png
new file mode 100644
index 0000000..601e629
--- /dev/null
+++ b/doc/5.1.x/images/improvedsiriusinterpreter.png
Binary files differ
diff --git a/doc/5.1.x/images/improvedsiriusinterpreter_thumbnail.png b/doc/5.1.x/images/improvedsiriusinterpreter_thumbnail.png
new file mode 100644
index 0000000..fc844ad
--- /dev/null
+++ b/doc/5.1.x/images/improvedsiriusinterpreter_thumbnail.png
Binary files differ
diff --git a/doc/5.1.x/images/moveNode-edgeImpact-changedBehavior.gif b/doc/5.1.x/images/moveNode-edgeImpact-changedBehavior.gif
new file mode 100644
index 0000000..9b7892e
--- /dev/null
+++ b/doc/5.1.x/images/moveNode-edgeImpact-changedBehavior.gif
Binary files differ
diff --git a/doc/5.1.x/images/representationNameWizardChange.png b/doc/5.1.x/images/representationNameWizardChange.png
new file mode 100644
index 0000000..41e85f6
--- /dev/null
+++ b/doc/5.1.x/images/representationNameWizardChange.png
Binary files differ
diff --git a/doc/5.1.x/images/shapeResize1.png b/doc/5.1.x/images/shapeResize1.png
new file mode 100644
index 0000000..e5e6481
--- /dev/null
+++ b/doc/5.1.x/images/shapeResize1.png
Binary files differ
diff --git a/doc/5.1.x/images/shapeResize2.png b/doc/5.1.x/images/shapeResize2.png
new file mode 100644
index 0000000..4368dd4
--- /dev/null
+++ b/doc/5.1.x/images/shapeResize2.png
Binary files differ
diff --git a/doc/5.1.x/images/shapeResize3.png b/doc/5.1.x/images/shapeResize3.png
new file mode 100644
index 0000000..3e3c0bc
--- /dev/null
+++ b/doc/5.1.x/images/shapeResize3.png
Binary files differ
diff --git a/doc/5.1.x/index.html b/doc/5.1.x/index.html
new file mode 100644
index 0000000..22beac0
--- /dev/null
+++ b/doc/5.1.x/index.html
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Eclipse Sirius Documentation</title>
+ <link type="text/css" rel="stylesheet" href="resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="resources/custom.css"/>
+ </head>
+ <body>
+
+ <div id="header">
+ <a href="http://www.eclipse.org/sirius/" target="_blank"><div id="logo" class="left"></div></a>
+
+ <div class="visit right">
+ <a class="right" href="http://www.eclipse.org/sirius/" target="_blank">eclipse.org/sirius</a>
+ </div>
+ </div>
+
+ <div class="clear"></div>
+
+ <div class="description">
+ <p>Sirius is an Eclipse project which allows you to easily create your own graphical modeling workbench by leveraging the Eclipse Modeling technologies, including EMF and GMF.</p>
+ <p>It provides a generic workbench for model-based architecture engineering that could be easily tailored to fit specific needs.</p>
+ <p>Based on a viewpoint approach, Sirius makes it possible to equip teams who have to deal with complex architectures on specific domains.</p>
+ </div>
+
+ <div class="col1 left">
+ <h3 id="SiriusDocumentation">Contents</h3>
+ <ul>
+ <li class="borderlist">
+ <a href="Release_Notes.html">Release Notes</a>: see what's new in each release of Sirius.
+ </li>
+ <li>
+ <a href="user/Sirius%20User%20Manual.html">Sirius User Manual</a>: learn how to use Sirius-based modelers.
+ <ul>
+ <li>
+ <a href="user/general/Modeling%20Project.html">Modeling Project</a>
+ </li>
+ <li>
+ <a href="user/general/Aird_Editor.html">Aird Editor</a>
+ </li>
+ <li>
+ <a href="user/diagrams/Diagrams.html">Diagrams</a>
+ </li>
+ <li>
+ <a href="user/sequences/Sequence%20Diagrams.html">Sequence Diagrams</a>
+ </li>
+ <li>
+ <a href="user/tables/Tables.html">Tables</a>
+ </li>
+ <li>
+ <a href="user/trees/Trees.html">Trees</a>
+ </li>
+ <li>
+ <a href="user/properties/Properties%20View.html">Properties Views</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="specifier/Sirius%20Specifier%20Manual.html">Sirius Specifier Manual</a>: learn how to create your own modelers using Sirius.
+ <ul>
+ <li>
+ <a href="specifier/general/Specifying_Viewpoints.html">Specifying Viewpoints</a>
+ </li>
+ <li>
+ <a href="specifier/diagrams/Diagrams.html">Diagrams</a>
+ </li>
+ <li>
+ <a href="specifier/sequences/Sequence%20Diagrams.html">Sequence Diagrams</a>
+ </li>
+ <li>
+ <a href="specifier/tables/Tables.html">Tables</a>
+ </li>
+ <li>
+ <a href="specifier/trees/Trees.html">Trees</a>
+ </li>
+ <li>
+ <a href="specifier/properties/Properties_View_Description.html">Properties View</a>
+ </li>
+ <li>
+ <a href="specifier/general/Model_Operations.html">Model Operations</a>
+ </li>
+ <li>
+ <a href="specifier/general/ToolsSpecification.html">Tools Specification</a>
+ </li>
+ <li>
+ <a href="specifier/general/Colors.html">Defining Color Palettes</a>
+ </li>
+ <li>
+ <a href="specifier/general/Writing_Queries.html">Writing Queries</a>
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="developer/Sirius%20Developer%20Manual.html">Sirius Developer Manual</a>: learn how to extend Sirius and leverage its APIs
+ </li>
+ <li>
+ <a href="http://www.obeodesigner.com/best-practices" target="_blank">Best Practices</a>
+ </li>
+ <li>
+ <a href="Glossary.html">Glossary</a> of terms.
+ </li>
+ </ul>
+ </div>
+
+ <div class="col2 right">
+ <img src="resources/images/screenshot.png" alt="The easiest way to get your own modeling tool" />
+ </div>
+
+ <div class="clear"></div>
+ <div class="clear"></div>
+ <p>For further information, please visit our website at <a href="http://www.eclipse.org/sirius/" target="_blank">www.eclipse.org/sirius</a>.</p>
+ </body>
+</html>
diff --git a/doc/5.1.x/release_notes_vp.html b/doc/5.1.x/release_notes_vp.html
new file mode 100644
index 0000000..7938a61
--- /dev/null
+++ b/doc/5.1.x/release_notes_vp.html
@@ -0,0 +1,150 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>release_notes_vp</title>
+ <link type="text/css" rel="stylesheet" href="resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="ReleaseNotesforViewpoint">Release Notes for Viewpoint</h1>
+ <h2 id="vp6.10">Viewpoint 6.10</h2>
+ <p>Viewpoint 6.10 contains no API or feature changes compared to Viewpoint 6.9.</p>
+ <h2 id="vp6.9">Viewpoint 6.9</h2>
+ <h3 id="ChangesVisibletoEndUsers">Changes Visible to End-Users</h3>
+ <ul>
+ <li>New notion for layers: Additional layers (formerly Optional layer) cannot be disabled by end-user if the specifier unchecked the “optional” option. In this case, the layers become mandatory. The end-user do not see the mandatory layers in the layer activation menu.</li>
+ <li>A new graphical wrapper have been provided to group huge hierarchy children in tree items. Several preferences allow to customize this feature in the viewpoint preference page.
+ <ul>
+ <li>We find this wrapper on the model explorer tree viewer and on viewpoint selection wizards that use a tree viewer.</li>
+ <li>On viewpoint selection wizards
+ <ul>
+ <li>if the wrapper is disabled, we expand all children like in previous releases of viewpoint.</li>
+ <li>if the wrapper is enabled and root items are not grouping items, we expand only the first level of children.</li>
+ <li>if the wrapper is enabled and root items are grouping items, we not expand children.</li>
+ </ul>
+ </li>
+ <li>For more graphical details about this feature, please refer to the
+ <a href="user/general/Modeling%20Project.html#ModelExplorer">Modeling Project section</a> in the user documentation.
+ </li>
+ </ul>
+ </li>
+ <li>Until Viewpoint 6.2, the endÂ-user had access to the Connections preference page (Viewpoint/Viewpoint Diagram/Connections). This page is provided by default by GMF but was unsuitable for Viewpoint use. Indeed, in Viewpoint the default routing style is defined in VSM. This preference page is available again. It has been adapted to Viewpoint (see
+ <a href="user/diagrams/Diagrams.html#routingStylePref">
+ <em>Viewpoint User Manual/Diagrams/Features Overview/Style customizations/Customize edge routing style from preferences</em>
+ </a> for further details).
+ </li>
+ </ul>
+ <h3 id="ChangesVisibletoSpecifiers">Changes Visible to Specifiers</h3>
+ <ul>
+ <li>Optional Layer has been renamed to Additional Layer.</li>
+ <li>A new attribute “Optional” is available to specified whether the additional layer can be disabled or not by end-user.</li>
+ <li>A new checkbox about
+ <code>fr.obeo.dsl.viewpoint.description.EStructuralFeatureCustomization.applyOnAll</code> under the
+ <code>fr.obeo.dsl.viewpoint.description.EStructuralFeatureCustomization.appliedOn</code> property section has been added. When this checkbox will be checked the
+ <code>fr.obeo.dsl.viewpoint.description.EStructuralFeatureCustomization.appliedOn</code> section will turn gray and disabled.
+ </li>
+ <li>The fields ViewpointURI and representationName on Diagram Extension Description can be a regular expression as well.</li>
+ </ul>
+ <h3 id="ChangesVisibletoDevelopers">Changes Visible to Developers</h3>
+ <ul>
+ <li>Changed APIs:
+ <ul>
+ <li>
+ <code>fr.obeo.dsl.viewpoint.description.OptionalLayer</code> type has been renamed to
+ <code>fr.obeo.dsl.viewpoint.description.AdditionalLayer</code>
+ </li>
+ <li>
+ <code>fr.obeo.dsl.viewpoint.description.DiagramDescription.optionalLayers</code> meta-model reference has been renamed to
+ <code>fr.obeo.dsl.viewpoint.description.DiagramDescription.additionalLayers</code>
+ </li>
+ <li>
+ <code>fr.obeo.dsl.viewpoint.ui.tools.api.views.common.item.CommonItem.getSession()</code> is now refactored in
+ <code>fr.obeo.dsl.viewpoint.ui.tools.api.views.common.item.CommonSessionItem</code>.
+ </li>
+ <li>
+ <code>fr.obeo.dsl.viewpoint.ui.tools.api.views.common.item.CommonItem</code> is now moved in
+ <code>fr.obeo.dsl.common.ui.tools.api.view.common.item.CommonItem</code>.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <ul>
+ <li>New APIs:
+ <ul>
+ <li>
+ <code>fr.obeo.dsl.viewpoint.description.AdditionalLayer.optional:Boolean</code> meta-model attribute has been added.
+ </li>
+ <li>Four new preferences to customize the new tree item group wrapper.
+ <ol>
+ <li>
+ <code>PREF_GROUP_ENABLE</code>:Boolean (default=true)
+ <ul>
+ <li>has been added in
+ <code>fr.obeo.dsl.common.tools.api.constant.CommonPreferencesConstants</code> to say the tree item group wrapper is enable.
+ </li>
+ </ul>
+ </li>
+ <li>
+ <code>PREF_GROUP_BY_CONTAINING_FEATURE</code>:Boolean (default=false)
+ <ul>
+ <li>has been added in
+ <code>fr.obeo.dsl.common.tools.api.constant.CommonPreferencesConstants</code> to say if the grouping strategy uses the containing feature instead of the basic hierarchy.
+ </li>
+ <li>This preference cannot be directly edited by the final user. A developer can override this default value, for example in its own AbstractUIPlugin implementation, in the start() method : ViewPointTransPlugin.getPlugin().getPreferenceStore().setValue(CommonPreferencesConstants.PREF_GROUP_BY_CONTAINING_FEATURE, true)</li>
+ </ul>
+ </li>
+ <li>
+ <code>PREF_GROUP_TRIGGER</code>:Integer (default=10000)
+ <ul>
+ <li>has been added in
+ <code>fr.obeo.dsl.common.tools.api.constant.CommonPreferencesConstants</code> to define the size of children that triggers the group in sub block.
+ </li>
+ </ul>
+ </li>
+ <li>
+ <code>PREF_GROUP_SIZE</code>:Integer (default=100)
+ <ul>
+ <li>has been added in
+ <code>fr.obeo.dsl.common.tools.api.constant.CommonPreferencesConstants</code> to define the size of elements contained in a group.
+ </li>
+ </ul>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <code>fr.obeo.dsl.common.ui.tools.api.navigator.GroupingContentProvider</code> a new content provider wrapper that delegates everything to the replaced content provider excepted if groups are expected.
+ </li>
+ <li>
+ <code>fr.obeo.dsl.common.ui.tools.api.navigator.GroupingItem</code> a dedicated group tree item to provide an new ui render.
+ </li>
+ <li>
+ <code>fr.obeo.dsl.viewpoint.ui.tools.api.views.common.item.CommonSessionItem</code> extends
+ <code>fr.obeo.dsl.common.ui.tools.api.view.common.item.CommonItem</code> and provide getSession().
+ </li>
+ <li>
+ <code>fr.obeo.dsl.viewpoint.diagram.business.api.view.ViewpointGMFHelper.getGmfEdge(DDiagramElement, ECrossReferenceAdapter)</code> has been added in complementary of
+ <code>getGmfEdge(DDiagramElement, Session)</code>. This method uses directly the parameter
+ <code>ECrossReferenceAdapter</code> (instead of
+ <code>Session.getSemanticCrossReferencer()</code>) to retrieve the GMF edge corresponding to the DDiagramElement.
+ </li>
+ <li>
+ <code>fr.obeo.dsl.viewpoint.tools.api.preferences.ViewpointDiagramCorePreferences</code> has been added. This interface declares constants corresponding to default routing styles. These constants are set via the UI preference page of
+ <code>fr.obeo.dsl.viewpoint.diagram</code> but declared here to allow access outside UI plug-in.
+ </li>
+ <li>
+ <code>fr.obeo.dsl.viewpoint.description.EStructuralFeatureCustomization.applyOnAll:Boolean</code> meta-model attribute has been added.
+ </li>
+ <li>
+ <code>fr.obeo.dsl.viewpoint.ui.tools.api.dialogs.AbstractExportRepresentationsAsImagesDialog.FILE_SEPARATOR_ALTERNATIVE</code> constant has been added. It defines the alternative character in
+ <em>export diagram as image dialog</em> when file separators are found in the representation name.
+ </li>
+ <li>
+ <code>fr.obeo.dsl.viewpoint.business.api.migration.IMigrationParticipant.getNewFragment(String)</code> returns the new fragment if the corresponding reference has changed. This method is added in the migration framework to handle the rename of a reference. The abstract implementation,
+ <code>fr.obeo.dsl.viewpoint.business.api.migration.AbstractMigrationParticipant</code>, has also been changed.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/resources/bootstrap.css b/doc/5.1.x/resources/bootstrap.css
new file mode 100644
index 0000000..7d519a6
--- /dev/null
+++ b/doc/5.1.x/resources/bootstrap.css
@@ -0,0 +1,3363 @@
+/*!
+ * Bootstrap v2.0.0
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+ display: block;
+}
+audio, canvas, video {
+ display: inline-block;
+ *display: inline;
+ *zoom: 1;
+}
+audio:not([controls]) {
+ display: none;
+}
+html {
+ font-size: 100%;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+a:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+a:hover, a:active {
+ outline: 0;
+}
+sub, sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+sup {
+ top: -0.5em;
+}
+sub {
+ bottom: -0.25em;
+}
+img {
+ max-width: 100%;
+ height: auto;
+ border: 0;
+ -ms-interpolation-mode: bicubic;
+}
+button,
+input,
+select,
+textarea {
+ margin: 0;
+ font-size: 100%;
+ vertical-align: middle;
+}
+button, input {
+ *overflow: visible;
+ line-height: normal;
+}
+button::-moz-focus-inner, input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ cursor: pointer;
+ -webkit-appearance: button;
+}
+input[type="search"] {
+ -webkit-appearance: textfield;
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button {
+ -webkit-appearance: none;
+}
+textarea {
+ overflow: auto;
+ vertical-align: top;
+}
+body {
+ margin: 0;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ line-height: 18px;
+ color: #333333;
+ background-color: #ffffff;
+}
+a {
+ color: #0088cc;
+ text-decoration: none;
+}
+a:hover {
+ color: #005580;
+ text-decoration: underline;
+}
+.row {
+ margin-left: -20px;
+ *zoom: 1;
+}
+.row:before, .row:after {
+ display: table;
+ content: "";
+}
+.row:after {
+ clear: both;
+}
+[class*="span"] {
+ float: left;
+ margin-left: 20px;
+}
+.span1 {
+ width: 60px;
+}
+.span2 {
+ width: 140px;
+}
+.span3 {
+ width: 220px;
+}
+.span4 {
+ width: 300px;
+}
+.span5 {
+ width: 380px;
+}
+.span6 {
+ width: 460px;
+}
+.span7 {
+ width: 540px;
+}
+.span8 {
+ width: 620px;
+}
+.span9 {
+ width: 700px;
+}
+.span10 {
+ width: 780px;
+}
+.span11 {
+ width: 860px;
+}
+.span12, .container {
+ width: 940px;
+}
+.offset1 {
+ margin-left: 100px;
+}
+.offset2 {
+ margin-left: 180px;
+}
+.offset3 {
+ margin-left: 260px;
+}
+.offset4 {
+ margin-left: 340px;
+}
+.offset5 {
+ margin-left: 420px;
+}
+.offset6 {
+ margin-left: 500px;
+}
+.offset7 {
+ margin-left: 580px;
+}
+.offset8 {
+ margin-left: 660px;
+}
+.offset9 {
+ margin-left: 740px;
+}
+.offset10 {
+ margin-left: 820px;
+}
+.offset11 {
+ margin-left: 900px;
+}
+.row-fluid {
+ width: 100%;
+ *zoom: 1;
+}
+.row-fluid:before, .row-fluid:after {
+ display: table;
+ content: "";
+}
+.row-fluid:after {
+ clear: both;
+}
+.row-fluid > [class*="span"] {
+ float: left;
+ margin-left: 2.127659574%;
+}
+.row-fluid > [class*="span"]:first-child {
+ margin-left: 0;
+}
+.row-fluid .span1 {
+ width: 6.382978723%;
+}
+.row-fluid .span2 {
+ width: 14.89361702%;
+}
+.row-fluid .span3 {
+ width: 23.404255317%;
+}
+.row-fluid .span4 {
+ width: 31.914893614%;
+}
+.row-fluid .span5 {
+ width: 40.425531911%;
+}
+.row-fluid .span6 {
+ width: 48.93617020799999%;
+}
+.row-fluid .span7 {
+ width: 57.446808505%;
+}
+.row-fluid .span8 {
+ width: 65.95744680199999%;
+}
+.row-fluid .span9 {
+ width: 74.468085099%;
+}
+.row-fluid .span10 {
+ width: 82.97872339599999%;
+}
+.row-fluid .span11 {
+ width: 91.489361693%;
+}
+.row-fluid .span12 {
+ width: 99.99999998999999%;
+}
+.container {
+ width: 940px;
+ margin-left: auto;
+ margin-right: auto;
+ *zoom: 1;
+}
+.container:before, .container:after {
+ display: table;
+ content: "";
+}
+.container:after {
+ clear: both;
+}
+.container-fluid {
+ padding-left: 20px;
+ padding-right: 20px;
+ *zoom: 1;
+}
+.container-fluid:before, .container-fluid:after {
+ display: table;
+ content: "";
+}
+.container-fluid:after {
+ clear: both;
+}
+p {
+ margin: 0 0 9px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ line-height: 18px;
+}
+p small {
+ font-size: 11px;
+ color: #999999;
+}
+.lead {
+ margin-bottom: 18px;
+ font-size: 20px;
+ font-weight: 200;
+ line-height: 27px;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ margin: 0;
+ font-weight: bold;
+ color: #333333;
+ text-rendering: optimizelegibility;
+}
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small {
+ font-weight: normal;
+ color: #999999;
+}
+h1 {
+ font-size: 30px;
+ line-height: 36px;
+}
+h1 small {
+ font-size: 18px;
+}
+h2 {
+ font-size: 24px;
+ line-height: 36px;
+}
+h2 small {
+ font-size: 18px;
+}
+h3 {
+ line-height: 27px;
+ font-size: 18px;
+}
+h3 small {
+ font-size: 14px;
+}
+h4, h5, h6 {
+ line-height: 18px;
+}
+h4 {
+ font-size: 14px;
+}
+h4 small {
+ font-size: 12px;
+}
+h5 {
+ font-size: 12px;
+}
+h6 {
+ font-size: 11px;
+ color: #999999;
+ text-transform: uppercase;
+}
+.page-header {
+ padding-bottom: 17px;
+ margin: 18px 0;
+ border-bottom: 1px solid #eeeeee;
+}
+.page-header h1 {
+ line-height: 1;
+}
+ul, ol {
+ padding: 0;
+ margin: 0 0 9px 25px;
+}
+ul ul,
+ul ol,
+ol ol,
+ol ul {
+ margin-bottom: 0;
+}
+ul {
+ list-style: disc;
+}
+ol {
+ list-style: decimal;
+}
+li {
+ line-height: 18px;
+}
+ul.unstyled {
+ margin-left: 0;
+ list-style: none;
+}
+dl {
+ margin-bottom: 18px;
+}
+dt, dd {
+ line-height: 18px;
+}
+dt {
+ font-weight: bold;
+}
+dd {
+ margin-left: 9px;
+}
+hr {
+ margin: 18px 0;
+ border: 0;
+ border-top: 1px solid #e5e5e5;
+ border-bottom: 1px solid #ffffff;
+}
+strong {
+ font-weight: bold;
+}
+em {
+ font-style: italic;
+}
+.muted {
+ color: #999999;
+}
+abbr {
+ font-size: 90%;
+ text-transform: uppercase;
+ border-bottom: 1px dotted #ddd;
+ cursor: help;
+}
+blockquote {
+ padding: 0 0 0 15px;
+ margin: 0 0 18px;
+ border-left: 5px solid #eeeeee;
+}
+blockquote p {
+ margin-bottom: 0;
+ font-size: 16px;
+ font-weight: 300;
+ line-height: 22.5px;
+}
+blockquote small {
+ display: block;
+ line-height: 18px;
+ color: #999999;
+}
+blockquote small:before {
+ content: '\2014 \00A0';
+}
+blockquote.pull-right {
+ float: right;
+ padding-left: 0;
+ padding-right: 15px;
+ border-left: 0;
+ border-right: 5px solid #eeeeee;
+}
+blockquote.pull-right p, blockquote.pull-right small {
+ text-align: right;
+}
+q:before,
+q:after,
+blockquote:before,
+blockquote:after {
+ content: "";
+}
+address {
+ display: block;
+ margin-bottom: 18px;
+ line-height: 18px;
+ font-style: normal;
+}
+small {
+ font-size: 100%;
+}
+cite {
+ font-style: normal;
+}
+code, pre {
+ padding: 0 3px 2px;
+ font-family: Menlo, Monaco, "Courier New", monospace;
+ font-size: 12px;
+ color: #333333;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+code {
+ padding: 3px 4px;
+ color: #d14;
+ background-color: #f7f7f9;
+ border: 1px solid #e1e1e8;
+}
+pre {
+ display: block;
+ padding: 8.5px;
+ margin: 0 0 9px;
+ font-size: 12px;
+ line-height: 18px;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ white-space: pre;
+ white-space: pre-wrap;
+ word-break: break-all;
+}
+pre.prettyprint {
+ margin-bottom: 18px;
+}
+pre code {
+ padding: 0;
+ background-color: transparent;
+}
+form {
+ margin: 0 0 18px;
+}
+fieldset {
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 27px;
+ font-size: 19.5px;
+ line-height: 36px;
+ color: #333333;
+ border: 0;
+ border-bottom: 1px solid #eee;
+}
+label,
+input,
+button,
+select,
+textarea {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ font-weight: normal;
+ line-height: 18px;
+}
+label {
+ display: block;
+ margin-bottom: 5px;
+ color: #333333;
+}
+input,
+textarea,
+select,
+.uneditable-input {
+ display: inline-block;
+ width: 210px;
+ height: 18px;
+ padding: 4px;
+ margin-bottom: 9px;
+ font-size: 13px;
+ line-height: 18px;
+ color: #555555;
+ border: 1px solid #ccc;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.uneditable-textarea {
+ width: auto;
+ height: auto;
+}
+label input, label textarea, label select {
+ display: block;
+}
+input[type="image"], input[type="checkbox"], input[type="radio"] {
+ width: auto;
+ height: auto;
+ padding: 0;
+ margin: 3px 0;
+ *margin-top: 0;
+ /* IE7 */
+
+ line-height: normal;
+ border: 0;
+ cursor: pointer;
+ border-radius: 0 \0/;
+}
+input[type="file"] {
+ padding: initial;
+ line-height: initial;
+ border: initial;
+ background-color: #ffffff;
+ background-color: initial;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+input[type="button"], input[type="reset"], input[type="submit"] {
+ width: auto;
+ height: auto;
+}
+select, input[type="file"] {
+ height: 28px;
+ /* In IE7, the height of the select element cannot be changed by height, only font-size */
+
+ *margin-top: 4px;
+ /* For IE7, add top margin to align select with labels */
+
+ line-height: 28px;
+}
+select {
+ width: 220px;
+ background-color: #ffffff;
+}
+select[multiple], select[size] {
+ height: auto;
+}
+input[type="image"] {
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+textarea {
+ height: auto;
+}
+input[type="hidden"] {
+ display: none;
+}
+.radio, .checkbox {
+ padding-left: 18px;
+}
+.radio input[type="radio"], .checkbox input[type="checkbox"] {
+ float: left;
+ margin-left: -18px;
+}
+.controls > .radio:first-child, .controls > .checkbox:first-child {
+ padding-top: 5px;
+}
+.radio.inline, .checkbox.inline {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+}
+.radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline {
+ margin-left: 10px;
+}
+.controls > .radio.inline:first-child, .controls > .checkbox.inline:first-child {
+ padding-top: 0;
+}
+input, textarea {
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+ -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
+ -o-transition: border linear 0.2s, box-shadow linear 0.2s;
+ transition: border linear 0.2s, box-shadow linear 0.2s;
+}
+input:focus, textarea:focus {
+ border-color: rgba(82, 168, 236, 0.8);
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+ outline: 0;
+ outline: thin dotted \9;
+ /* IE6-8 */
+
+}
+input[type="file"]:focus, input[type="checkbox"]:focus, select:focus {
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+.input-mini {
+ width: 60px;
+}
+.input-small {
+ width: 90px;
+}
+.input-medium {
+ width: 150px;
+}
+.input-large {
+ width: 210px;
+}
+.input-xlarge {
+ width: 270px;
+}
+.input-xxlarge {
+ width: 530px;
+}
+input[class*="span"],
+select[class*="span"],
+textarea[class*="span"],
+.uneditable-input {
+ float: none;
+ margin-left: 0;
+}
+input.span1, textarea.span1, .uneditable-input.span1 {
+ width: 50px;
+}
+input.span2, textarea.span2, .uneditable-input.span2 {
+ width: 130px;
+}
+input.span3, textarea.span3, .uneditable-input.span3 {
+ width: 210px;
+}
+input.span4, textarea.span4, .uneditable-input.span4 {
+ width: 290px;
+}
+input.span5, textarea.span5, .uneditable-input.span5 {
+ width: 370px;
+}
+input.span6, textarea.span6, .uneditable-input.span6 {
+ width: 450px;
+}
+input.span7, textarea.span7, .uneditable-input.span7 {
+ width: 530px;
+}
+input.span8, textarea.span8, .uneditable-input.span8 {
+ width: 610px;
+}
+input.span9, textarea.span9, .uneditable-input.span9 {
+ width: 690px;
+}
+input.span10, textarea.span10, .uneditable-input.span10 {
+ width: 770px;
+}
+input.span11, textarea.span11, .uneditable-input.span11 {
+ width: 850px;
+}
+input.span12, textarea.span12, .uneditable-input.span12 {
+ width: 930px;
+}
+input[disabled],
+select[disabled],
+textarea[disabled],
+input[readonly],
+select[readonly],
+textarea[readonly] {
+ background-color: #f5f5f5;
+ border-color: #ddd;
+ cursor: not-allowed;
+}
+.control-group.warning > label, .control-group.warning .help-block, .control-group.warning .help-inline {
+ color: #c09853;
+}
+.control-group.warning input, .control-group.warning select, .control-group.warning textarea {
+ color: #c09853;
+ border-color: #c09853;
+}
+.control-group.warning input:focus, .control-group.warning select:focus, .control-group.warning textarea:focus {
+ border-color: #a47e3c;
+ -webkit-box-shadow: 0 0 6px #dbc59e;
+ -moz-box-shadow: 0 0 6px #dbc59e;
+ box-shadow: 0 0 6px #dbc59e;
+}
+.control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on {
+ color: #c09853;
+ background-color: #fcf8e3;
+ border-color: #c09853;
+}
+.control-group.error > label, .control-group.error .help-block, .control-group.error .help-inline {
+ color: #b94a48;
+}
+.control-group.error input, .control-group.error select, .control-group.error textarea {
+ color: #b94a48;
+ border-color: #b94a48;
+}
+.control-group.error input:focus, .control-group.error select:focus, .control-group.error textarea:focus {
+ border-color: #953b39;
+ -webkit-box-shadow: 0 0 6px #d59392;
+ -moz-box-shadow: 0 0 6px #d59392;
+ box-shadow: 0 0 6px #d59392;
+}
+.control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on {
+ color: #b94a48;
+ background-color: #f2dede;
+ border-color: #b94a48;
+}
+.control-group.success > label, .control-group.success .help-block, .control-group.success .help-inline {
+ color: #468847;
+}
+.control-group.success input, .control-group.success select, .control-group.success textarea {
+ color: #468847;
+ border-color: #468847;
+}
+.control-group.success input:focus, .control-group.success select:focus, .control-group.success textarea:focus {
+ border-color: #356635;
+ -webkit-box-shadow: 0 0 6px #7aba7b;
+ -moz-box-shadow: 0 0 6px #7aba7b;
+ box-shadow: 0 0 6px #7aba7b;
+}
+.control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on {
+ color: #468847;
+ background-color: #dff0d8;
+ border-color: #468847;
+}
+input:focus:required:invalid, textarea:focus:required:invalid, select:focus:required:invalid {
+ color: #b94a48;
+ border-color: #ee5f5b;
+}
+input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, select:focus:required:invalid:focus {
+ border-color: #e9322d;
+ -webkit-box-shadow: 0 0 6px #f8b9b7;
+ -moz-box-shadow: 0 0 6px #f8b9b7;
+ box-shadow: 0 0 6px #f8b9b7;
+}
+.form-actions {
+ padding: 17px 20px 18px;
+ margin-top: 18px;
+ margin-bottom: 18px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+}
+.uneditable-input {
+ display: block;
+ background-color: #ffffff;
+ border-color: #eee;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+ cursor: not-allowed;
+}
+:-moz-placeholder {
+ color: #999999;
+}
+::-webkit-input-placeholder {
+ color: #999999;
+}
+.help-block {
+ margin-top: 5px;
+ margin-bottom: 0;
+ color: #999999;
+}
+.help-inline {
+ display: inline-block;
+ *display: inline;
+ /* IE7 inline-block hack */
+
+ *zoom: 1;
+ margin-bottom: 9px;
+ vertical-align: middle;
+ padding-left: 5px;
+}
+.input-prepend, .input-append {
+ margin-bottom: 5px;
+ *zoom: 1;
+}
+.input-prepend:before,
+.input-append:before,
+.input-prepend:after,
+.input-append:after {
+ display: table;
+ content: "";
+}
+.input-prepend:after, .input-append:after {
+ clear: both;
+}
+.input-prepend input,
+.input-append input,
+.input-prepend .uneditable-input,
+.input-append .uneditable-input {
+ -webkit-border-radius: 0 3px 3px 0;
+ -moz-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0;
+}
+.input-prepend input:focus,
+.input-append input:focus,
+.input-prepend .uneditable-input:focus,
+.input-append .uneditable-input:focus {
+ position: relative;
+ z-index: 2;
+}
+.input-prepend .uneditable-input, .input-append .uneditable-input {
+ border-left-color: #ccc;
+}
+.input-prepend .add-on, .input-append .add-on {
+ float: left;
+ display: block;
+ width: auto;
+ min-width: 16px;
+ height: 18px;
+ margin-right: -1px;
+ padding: 4px 5px;
+ font-weight: normal;
+ line-height: 18px;
+ color: #999999;
+ text-align: center;
+ text-shadow: 0 1px 0 #ffffff;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ -webkit-border-radius: 3px 0 0 3px;
+ -moz-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px;
+}
+.input-prepend .active, .input-append .active {
+ background-color: #a9dba9;
+ border-color: #46a546;
+}
+.input-prepend .add-on {
+ *margin-top: 1px;
+ /* IE6-7 */
+
+}
+.input-append input, .input-append .uneditable-input {
+ float: left;
+ -webkit-border-radius: 3px 0 0 3px;
+ -moz-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px;
+}
+.input-append .uneditable-input {
+ border-right-color: #ccc;
+}
+.input-append .add-on {
+ margin-right: 0;
+ margin-left: -1px;
+ -webkit-border-radius: 0 3px 3px 0;
+ -moz-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0;
+}
+.input-append input:first-child {
+ *margin-left: -160px;
+}
+.input-append input:first-child + .add-on {
+ *margin-left: -21px;
+}
+.search-query {
+ padding-left: 14px;
+ padding-right: 14px;
+ margin-bottom: 0;
+ -webkit-border-radius: 14px;
+ -moz-border-radius: 14px;
+ border-radius: 14px;
+}
+.form-search input,
+.form-inline input,
+.form-horizontal input,
+.form-search textarea,
+.form-inline textarea,
+.form-horizontal textarea,
+.form-search select,
+.form-inline select,
+.form-horizontal select,
+.form-search .help-inline,
+.form-inline .help-inline,
+.form-horizontal .help-inline,
+.form-search .uneditable-input,
+.form-inline .uneditable-input,
+.form-horizontal .uneditable-input {
+ display: inline-block;
+ margin-bottom: 0;
+}
+.form-search label,
+.form-inline label,
+.form-search .input-append,
+.form-inline .input-append,
+.form-search .input-prepend,
+.form-inline .input-prepend {
+ display: inline-block;
+}
+.form-search .input-append .add-on,
+.form-inline .input-prepend .add-on,
+.form-search .input-append .add-on,
+.form-inline .input-prepend .add-on {
+ vertical-align: middle;
+}
+.control-group {
+ margin-bottom: 9px;
+}
+.form-horizontal legend + .control-group {
+ margin-top: 18px;
+ -webkit-margin-top-collapse: separate;
+}
+.form-horizontal .control-group {
+ margin-bottom: 18px;
+ *zoom: 1;
+}
+.form-horizontal .control-group:before, .form-horizontal .control-group:after {
+ display: table;
+ content: "";
+}
+.form-horizontal .control-group:after {
+ clear: both;
+}
+.form-horizontal .control-group > label {
+ float: left;
+ width: 140px;
+ padding-top: 5px;
+ text-align: right;
+}
+.form-horizontal .controls {
+ margin-left: 160px;
+}
+.form-horizontal .form-actions {
+ padding-left: 160px;
+}
+table {
+ max-width: 100%;
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+.table {
+ width: 100%;
+ margin-bottom: 18px;
+}
+.table th, .table td {
+ padding: 8px;
+ line-height: 18px;
+ text-align: left;
+ border-top: 1px solid #ddd;
+}
+.table th {
+ font-weight: bold;
+ vertical-align: bottom;
+}
+.table td {
+ vertical-align: top;
+}
+.table thead:first-child tr th, .table thead:first-child tr td {
+ border-top: 0;
+}
+.table tbody + tbody {
+ border-top: 2px solid #ddd;
+}
+.table-condensed th, .table-condensed td {
+ padding: 4px 5px;
+}
+.table-bordered {
+ border: 1px solid #ddd;
+ border-collapse: separate;
+ *border-collapse: collapsed;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.table-bordered th + th,
+.table-bordered td + td,
+.table-bordered th + td,
+.table-bordered td + th {
+ border-left: 1px solid #ddd;
+}
+.table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child td {
+ border-top: 0;
+}
+.table-bordered thead:first-child tr:first-child th:first-child, .table-bordered tbody:first-child tr:first-child td:first-child {
+ -webkit-border-radius: 4px 0 0 0;
+ -moz-border-radius: 4px 0 0 0;
+ border-radius: 4px 0 0 0;
+}
+.table-bordered thead:first-child tr:first-child th:last-child, .table-bordered tbody:first-child tr:first-child td:last-child {
+ -webkit-border-radius: 0 4px 0 0;
+ -moz-border-radius: 0 4px 0 0;
+ border-radius: 0 4px 0 0;
+}
+.table-bordered thead:last-child tr:last-child th:first-child, .table-bordered tbody:last-child tr:last-child td:first-child {
+ -webkit-border-radius: 0 0 0 4px;
+ -moz-border-radius: 0 0 0 4px;
+ border-radius: 0 0 0 4px;
+}
+.table-bordered thead:last-child tr:last-child th:last-child, .table-bordered tbody:last-child tr:last-child td:last-child {
+ -webkit-border-radius: 0 0 4px 0;
+ -moz-border-radius: 0 0 4px 0;
+ border-radius: 0 0 4px 0;
+}
+.table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th {
+ background-color: #f9f9f9;
+}
+table .span1 {
+ float: none;
+ width: 44px;
+ margin-left: 0;
+}
+table .span2 {
+ float: none;
+ width: 124px;
+ margin-left: 0;
+}
+table .span3 {
+ float: none;
+ width: 204px;
+ margin-left: 0;
+}
+table .span4 {
+ float: none;
+ width: 284px;
+ margin-left: 0;
+}
+table .span5 {
+ float: none;
+ width: 364px;
+ margin-left: 0;
+}
+table .span6 {
+ float: none;
+ width: 444px;
+ margin-left: 0;
+}
+table .span7 {
+ float: none;
+ width: 524px;
+ margin-left: 0;
+}
+table .span8 {
+ float: none;
+ width: 604px;
+ margin-left: 0;
+}
+table .span9 {
+ float: none;
+ width: 684px;
+ margin-left: 0;
+}
+table .span10 {
+ float: none;
+ width: 764px;
+ margin-left: 0;
+}
+table .span11 {
+ float: none;
+ width: 844px;
+ margin-left: 0;
+}
+table .span12 {
+ float: none;
+ width: 924px;
+ margin-left: 0;
+}
+[class*="icon-"] {
+ display: inline-block;
+ width: 14px;
+ height: 14px;
+ vertical-align: text-top;
+ background-image: url(../img/glyphicons-halflings.png);
+ background-position: 14px 14px;
+ background-repeat: no-repeat;
+ *margin-right: .3em;
+}
+[class*="icon-"]:last-child {
+ *margin-left: 0;
+}
+.icon-white {
+ background-image: url(../img/glyphicons-halflings-white.png);
+}
+.icon-glass {
+ background-position: 0 0;
+}
+.icon-music {
+ background-position: -24px 0;
+}
+.icon-search {
+ background-position: -48px 0;
+}
+.icon-envelope {
+ background-position: -72px 0;
+}
+.icon-heart {
+ background-position: -96px 0;
+}
+.icon-star {
+ background-position: -120px 0;
+}
+.icon-star-empty {
+ background-position: -144px 0;
+}
+.icon-user {
+ background-position: -168px 0;
+}
+.icon-film {
+ background-position: -192px 0;
+}
+.icon-th-large {
+ background-position: -216px 0;
+}
+.icon-th {
+ background-position: -240px 0;
+}
+.icon-th-list {
+ background-position: -264px 0;
+}
+.icon-ok {
+ background-position: -288px 0;
+}
+.icon-remove {
+ background-position: -312px 0;
+}
+.icon-zoom-in {
+ background-position: -336px 0;
+}
+.icon-zoom-out {
+ background-position: -360px 0;
+}
+.icon-off {
+ background-position: -384px 0;
+}
+.icon-signal {
+ background-position: -408px 0;
+}
+.icon-cog {
+ background-position: -432px 0;
+}
+.icon-trash {
+ background-position: -456px 0;
+}
+.icon-home {
+ background-position: 0 -24px;
+}
+.icon-file {
+ background-position: -24px -24px;
+}
+.icon-time {
+ background-position: -48px -24px;
+}
+.icon-road {
+ background-position: -72px -24px;
+}
+.icon-download-alt {
+ background-position: -96px -24px;
+}
+.icon-download {
+ background-position: -120px -24px;
+}
+.icon-upload {
+ background-position: -144px -24px;
+}
+.icon-inbox {
+ background-position: -168px -24px;
+}
+.icon-play-circle {
+ background-position: -192px -24px;
+}
+.icon-repeat {
+ background-position: -216px -24px;
+}
+.icon-refresh {
+ background-position: -240px -24px;
+}
+.icon-list-alt {
+ background-position: -264px -24px;
+}
+.icon-lock {
+ background-position: -287px -24px;
+}
+.icon-flag {
+ background-position: -312px -24px;
+}
+.icon-headphones {
+ background-position: -336px -24px;
+}
+.icon-volume-off {
+ background-position: -360px -24px;
+}
+.icon-volume-down {
+ background-position: -384px -24px;
+}
+.icon-volume-up {
+ background-position: -408px -24px;
+}
+.icon-qrcode {
+ background-position: -432px -24px;
+}
+.icon-barcode {
+ background-position: -456px -24px;
+}
+.icon-tag {
+ background-position: 0 -48px;
+}
+.icon-tags {
+ background-position: -25px -48px;
+}
+.icon-book {
+ background-position: -48px -48px;
+}
+.icon-bookmark {
+ background-position: -72px -48px;
+}
+.icon-print {
+ background-position: -96px -48px;
+}
+.icon-camera {
+ background-position: -120px -48px;
+}
+.icon-font {
+ background-position: -144px -48px;
+}
+.icon-bold {
+ background-position: -167px -48px;
+}
+.icon-italic {
+ background-position: -192px -48px;
+}
+.icon-text-height {
+ background-position: -216px -48px;
+}
+.icon-text-width {
+ background-position: -240px -48px;
+}
+.icon-align-left {
+ background-position: -264px -48px;
+}
+.icon-align-center {
+ background-position: -288px -48px;
+}
+.icon-align-right {
+ background-position: -312px -48px;
+}
+.icon-align-justify {
+ background-position: -336px -48px;
+}
+.icon-list {
+ background-position: -360px -48px;
+}
+.icon-indent-left {
+ background-position: -384px -48px;
+}
+.icon-indent-right {
+ background-position: -408px -48px;
+}
+.icon-facetime-video {
+ background-position: -432px -48px;
+}
+.icon-picture {
+ background-position: -456px -48px;
+}
+.icon-pencil {
+ background-position: 0 -72px;
+}
+.icon-map-marker {
+ background-position: -24px -72px;
+}
+.icon-adjust {
+ background-position: -48px -72px;
+}
+.icon-tint {
+ background-position: -72px -72px;
+}
+.icon-edit {
+ background-position: -96px -72px;
+}
+.icon-share {
+ background-position: -120px -72px;
+}
+.icon-check {
+ background-position: -144px -72px;
+}
+.icon-move {
+ background-position: -168px -72px;
+}
+.icon-step-backward {
+ background-position: -192px -72px;
+}
+.icon-fast-backward {
+ background-position: -216px -72px;
+}
+.icon-backward {
+ background-position: -240px -72px;
+}
+.icon-play {
+ background-position: -264px -72px;
+}
+.icon-pause {
+ background-position: -288px -72px;
+}
+.icon-stop {
+ background-position: -312px -72px;
+}
+.icon-forward {
+ background-position: -336px -72px;
+}
+.icon-fast-forward {
+ background-position: -360px -72px;
+}
+.icon-step-forward {
+ background-position: -384px -72px;
+}
+.icon-eject {
+ background-position: -408px -72px;
+}
+.icon-chevron-left {
+ background-position: -432px -72px;
+}
+.icon-chevron-right {
+ background-position: -456px -72px;
+}
+.icon-plus-sign {
+ background-position: 0 -96px;
+}
+.icon-minus-sign {
+ background-position: -24px -96px;
+}
+.icon-remove-sign {
+ background-position: -48px -96px;
+}
+.icon-ok-sign {
+ background-position: -72px -96px;
+}
+.icon-question-sign {
+ background-position: -96px -96px;
+}
+.icon-info-sign {
+ background-position: -120px -96px;
+}
+.icon-screenshot {
+ background-position: -144px -96px;
+}
+.icon-remove-circle {
+ background-position: -168px -96px;
+}
+.icon-ok-circle {
+ background-position: -192px -96px;
+}
+.icon-ban-circle {
+ background-position: -216px -96px;
+}
+.icon-arrow-left {
+ background-position: -240px -96px;
+}
+.icon-arrow-right {
+ background-position: -264px -96px;
+}
+.icon-arrow-up {
+ background-position: -289px -96px;
+}
+.icon-arrow-down {
+ background-position: -312px -96px;
+}
+.icon-share-alt {
+ background-position: -336px -96px;
+}
+.icon-resize-full {
+ background-position: -360px -96px;
+}
+.icon-resize-small {
+ background-position: -384px -96px;
+}
+.icon-plus {
+ background-position: -408px -96px;
+}
+.icon-minus {
+ background-position: -433px -96px;
+}
+.icon-asterisk {
+ background-position: -456px -96px;
+}
+.icon-exclamation-sign {
+ background-position: 0 -120px;
+}
+.icon-gift {
+ background-position: -24px -120px;
+}
+.icon-leaf {
+ background-position: -48px -120px;
+}
+.icon-fire {
+ background-position: -72px -120px;
+}
+.icon-eye-open {
+ background-position: -96px -120px;
+}
+.icon-eye-close {
+ background-position: -120px -120px;
+}
+.icon-warning-sign {
+ background-position: -144px -120px;
+}
+.icon-plane {
+ background-position: -168px -120px;
+}
+.icon-calendar {
+ background-position: -192px -120px;
+}
+.icon-random {
+ background-position: -216px -120px;
+}
+.icon-comment {
+ background-position: -240px -120px;
+}
+.icon-magnet {
+ background-position: -264px -120px;
+}
+.icon-chevron-up {
+ background-position: -288px -120px;
+}
+.icon-chevron-down {
+ background-position: -313px -119px;
+}
+.icon-retweet {
+ background-position: -336px -120px;
+}
+.icon-shopping-cart {
+ background-position: -360px -120px;
+}
+.icon-folder-close {
+ background-position: -384px -120px;
+}
+.icon-folder-open {
+ background-position: -408px -120px;
+}
+.icon-resize-vertical {
+ background-position: -432px -119px;
+}
+.icon-resize-horizontal {
+ background-position: -456px -118px;
+}
+.dropdown {
+ position: relative;
+}
+.dropdown-toggle {
+ *margin-bottom: -3px;
+}
+.dropdown-toggle:active, .open .dropdown-toggle {
+ outline: 0;
+}
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ text-indent: -99999px;
+ *text-indent: 0;
+ vertical-align: top;
+ border-left: 4px solid transparent;
+ border-right: 4px solid transparent;
+ border-top: 4px solid #000000;
+ opacity: 0.3;
+ filter: alpha(opacity=30);
+ content: "\2193";
+}
+.dropdown .caret {
+ margin-top: 8px;
+ margin-left: 2px;
+}
+.dropdown:hover .caret, .open.dropdown .caret {
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ float: left;
+ display: none;
+ min-width: 160px;
+ max-width: 220px;
+ _width: 160px;
+ padding: 4px 0;
+ margin: 0;
+ list-style: none;
+ background-color: #ffffff;
+ border-color: #ccc;
+ border-color: rgba(0, 0, 0, 0.2);
+ border-style: solid;
+ border-width: 1px;
+ -webkit-border-radius: 0 0 5px 5px;
+ -moz-border-radius: 0 0 5px 5px;
+ border-radius: 0 0 5px 5px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding;
+ background-clip: padding-box;
+ *border-right-width: 2px;
+ *border-bottom-width: 2px;
+}
+.dropdown-menu.bottom-up {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 2px;
+}
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 5px 1px;
+ overflow: hidden;
+ background-color: #e5e5e5;
+ border-bottom: 1px solid #ffffff;
+ *width: 100%;
+ *margin: -5px 0 5px;
+}
+.dropdown-menu a {
+ display: block;
+ padding: 3px 15px;
+ clear: both;
+ font-weight: normal;
+ line-height: 18px;
+ color: #555555;
+ white-space: nowrap;
+}
+.dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover {
+ color: #ffffff;
+ text-decoration: none;
+ background-color: #0088cc;
+}
+.dropdown.open {
+ *z-index: 1000;
+}
+.dropdown.open .dropdown-toggle {
+ color: #ffffff;
+ background: #ccc;
+ background: rgba(0, 0, 0, 0.3);
+}
+.dropdown.open .dropdown-menu {
+ display: block;
+}
+.typeahead {
+ margin-top: 2px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #eee;
+ border: 1px solid rgba(0, 0, 0, 0.05);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, 0.15);
+}
+.fade {
+ -webkit-transition: opacity 0.15s linear;
+ -moz-transition: opacity 0.15s linear;
+ -ms-transition: opacity 0.15s linear;
+ -o-transition: opacity 0.15s linear;
+ transition: opacity 0.15s linear;
+ opacity: 0;
+}
+.fade.in {
+ opacity: 1;
+}
+.collapse {
+ -webkit-transition: height 0.35s ease;
+ -moz-transition: height 0.35s ease;
+ -ms-transition: height 0.35s ease;
+ -o-transition: height 0.35s ease;
+ transition: height 0.35s ease;
+ position: relative;
+ overflow: hidden;
+ height: 0;
+}
+.collapse.in {
+ height: auto;
+}
+.close {
+ float: right;
+ font-size: 20px;
+ font-weight: bold;
+ line-height: 18px;
+ color: #000000;
+ text-shadow: 0 1px 0 #ffffff;
+ opacity: 0.2;
+ filter: alpha(opacity=20);
+}
+.close:hover {
+ color: #000000;
+ text-decoration: none;
+ opacity: 0.4;
+ filter: alpha(opacity=40);
+ cursor: pointer;
+}
+.btn {
+ display: inline-block;
+ padding: 4px 10px 4px;
+ font-size: 13px;
+ line-height: 18px;
+ color: #333333;
+ text-align: center;
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+ background-color: #fafafa;
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));
+ background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
+ background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);
+ background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
+ background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
+ background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
+ background-repeat: no-repeat;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
+ border: 1px solid #ccc;
+ border-bottom-color: #bbb;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ cursor: pointer;
+ *margin-left: .3em;
+}
+.btn:first-child {
+ *margin-left: 0;
+}
+.btn:hover {
+ color: #333333;
+ text-decoration: none;
+ background-color: #e6e6e6;
+ background-position: 0 -15px;
+ -webkit-transition: background-position 0.1s linear;
+ -moz-transition: background-position 0.1s linear;
+ -ms-transition: background-position 0.1s linear;
+ -o-transition: background-position 0.1s linear;
+ transition: background-position 0.1s linear;
+}
+.btn:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+.btn.active, .btn:active {
+ background-image: none;
+ -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ background-color: #e6e6e6;
+ background-color: #d9d9d9 \9;
+ color: rgba(0, 0, 0, 0.5);
+ outline: 0;
+}
+.btn.disabled, .btn[disabled] {
+ cursor: default;
+ background-image: none;
+ background-color: #e6e6e6;
+ opacity: 0.65;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+.btn-large {
+ padding: 9px 14px;
+ font-size: 15px;
+ line-height: normal;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.btn-large .icon {
+ margin-top: 1px;
+}
+.btn-small {
+ padding: 5px 9px;
+ font-size: 11px;
+ line-height: 16px;
+}
+.btn-small .icon {
+ margin-top: -1px;
+}
+.btn-primary,
+.btn-primary:hover,
+.btn-warning,
+.btn-warning:hover,
+.btn-danger,
+.btn-danger:hover,
+.btn-success,
+.btn-success:hover,
+.btn-info,
+.btn-info:hover {
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ color: #ffffff;
+}
+.btn-primary.active,
+.btn-warning.active,
+.btn-danger.active,
+.btn-success.active,
+.btn-info.active {
+ color: rgba(255, 255, 255, 0.75);
+}
+.btn-primary {
+ background-color: #006dcc;
+ background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+ background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+ background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+ background-image: linear-gradient(top, #0088cc, #0044cc);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
+ border-color: #0044cc #0044cc #002a80;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.btn-primary:hover,
+.btn-primary:active,
+.btn-primary.active,
+.btn-primary.disabled,
+.btn-primary[disabled] {
+ background-color: #0044cc;
+}
+.btn-primary:active, .btn-primary.active {
+ background-color: #003399 \9;
+}
+.btn-warning {
+ background-color: #faa732;
+ background-image: -moz-linear-gradient(top, #fbb450, #f89406);
+ background-image: -ms-linear-gradient(top, #fbb450, #f89406);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
+ background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
+ background-image: -o-linear-gradient(top, #fbb450, #f89406);
+ background-image: linear-gradient(top, #fbb450, #f89406);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
+ border-color: #f89406 #f89406 #ad6704;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.btn-warning:hover,
+.btn-warning:active,
+.btn-warning.active,
+.btn-warning.disabled,
+.btn-warning[disabled] {
+ background-color: #f89406;
+}
+.btn-warning:active, .btn-warning.active {
+ background-color: #c67605 \9;
+}
+.btn-danger {
+ background-color: #da4f49;
+ background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
+ background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
+ background-image: linear-gradient(top, #ee5f5b, #bd362f);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);
+ border-color: #bd362f #bd362f #802420;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.btn-danger:hover,
+.btn-danger:active,
+.btn-danger.active,
+.btn-danger.disabled,
+.btn-danger[disabled] {
+ background-color: #bd362f;
+}
+.btn-danger:active, .btn-danger.active {
+ background-color: #942a25 \9;
+}
+.btn-success {
+ background-color: #5bb75b;
+ background-image: -moz-linear-gradient(top, #62c462, #51a351);
+ background-image: -ms-linear-gradient(top, #62c462, #51a351);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
+ background-image: -webkit-linear-gradient(top, #62c462, #51a351);
+ background-image: -o-linear-gradient(top, #62c462, #51a351);
+ background-image: linear-gradient(top, #62c462, #51a351);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);
+ border-color: #51a351 #51a351 #387038;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.btn-success:hover,
+.btn-success:active,
+.btn-success.active,
+.btn-success.disabled,
+.btn-success[disabled] {
+ background-color: #51a351;
+}
+.btn-success:active, .btn-success.active {
+ background-color: #408140 \9;
+}
+.btn-info {
+ background-color: #49afcd;
+ background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
+ background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
+ background-image: linear-gradient(top, #5bc0de, #2f96b4);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);
+ border-color: #2f96b4 #2f96b4 #1f6377;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.btn-info:hover,
+.btn-info:active,
+.btn-info.active,
+.btn-info.disabled,
+.btn-info[disabled] {
+ background-color: #2f96b4;
+}
+.btn-info:active, .btn-info.active {
+ background-color: #24748c \9;
+}
+button.btn, input[type="submit"].btn {
+ *padding-top: 2px;
+ *padding-bottom: 2px;
+}
+button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+button.btn.large, input[type="submit"].btn.large {
+ *padding-top: 7px;
+ *padding-bottom: 7px;
+}
+button.btn.small, input[type="submit"].btn.small {
+ *padding-top: 3px;
+ *padding-bottom: 3px;
+}
+.btn-group {
+ position: relative;
+ *zoom: 1;
+ *margin-left: .3em;
+}
+.btn-group:before, .btn-group:after {
+ display: table;
+ content: "";
+}
+.btn-group:after {
+ clear: both;
+}
+.btn-group:first-child {
+ *margin-left: 0;
+}
+.btn-group + .btn-group {
+ margin-left: 5px;
+}
+.btn-toolbar {
+ margin-top: 9px;
+ margin-bottom: 9px;
+}
+.btn-toolbar .btn-group {
+ display: inline-block;
+ *display: inline;
+ /* IE7 inline-block hack */
+
+ *zoom: 1;
+}
+.btn-group .btn {
+ position: relative;
+ float: left;
+ margin-left: -1px;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+.btn-group .btn:first-child {
+ margin-left: 0;
+ -webkit-border-top-left-radius: 4px;
+ -moz-border-radius-topleft: 4px;
+ border-top-left-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomleft: 4px;
+ border-bottom-left-radius: 4px;
+}
+.btn-group .btn:last-child, .btn-group .dropdown-toggle {
+ -webkit-border-top-right-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ border-top-right-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ border-bottom-right-radius: 4px;
+}
+.btn-group .btn.large:first-child {
+ margin-left: 0;
+ -webkit-border-top-left-radius: 6px;
+ -moz-border-radius-topleft: 6px;
+ border-top-left-radius: 6px;
+ -webkit-border-bottom-left-radius: 6px;
+ -moz-border-radius-bottomleft: 6px;
+ border-bottom-left-radius: 6px;
+}
+.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle {
+ -webkit-border-top-right-radius: 6px;
+ -moz-border-radius-topright: 6px;
+ border-top-right-radius: 6px;
+ -webkit-border-bottom-right-radius: 6px;
+ -moz-border-radius-bottomright: 6px;
+ border-bottom-right-radius: 6px;
+}
+.btn-group .btn:hover,
+.btn-group .btn:focus,
+.btn-group .btn:active,
+.btn-group .btn.active {
+ z-index: 2;
+}
+.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+.btn-group .dropdown-toggle {
+ padding-left: 8px;
+ padding-right: 8px;
+ -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+ *padding-top: 5px;
+ *padding-bottom: 5px;
+}
+.btn-group.open {
+ *z-index: 1000;
+}
+.btn-group.open .dropdown-menu {
+ display: block;
+ margin-top: 1px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.btn-group.open .dropdown-toggle {
+ background-image: none;
+ -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+.btn .caret {
+ margin-top: 7px;
+ margin-left: 0;
+}
+.btn:hover .caret, .open.btn-group .caret {
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+.btn-primary .caret,
+.btn-danger .caret,
+.btn-info .caret,
+.btn-success .caret {
+ border-top-color: #ffffff;
+ opacity: 0.75;
+ filter: alpha(opacity=75);
+}
+.btn-small .caret {
+ margin-top: 4px;
+}
+.alert {
+ padding: 8px 35px 8px 14px;
+ margin-bottom: 18px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+ background-color: #fcf8e3;
+ border: 1px solid #fbeed5;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.alert, .alert-heading {
+ color: #c09853;
+}
+.alert .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ line-height: 18px;
+}
+.alert-success {
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.alert-success, .alert-success .alert-heading {
+ color: #468847;
+}
+.alert-danger, .alert-error {
+ background-color: #f2dede;
+ border-color: #eed3d7;
+}
+.alert-danger,
+.alert-error,
+.alert-danger .alert-heading,
+.alert-error .alert-heading {
+ color: #b94a48;
+}
+.alert-info {
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.alert-info, .alert-info .alert-heading {
+ color: #3a87ad;
+}
+.alert-block {
+ padding-top: 14px;
+ padding-bottom: 14px;
+}
+.alert-block > p, .alert-block > ul {
+ margin-bottom: 0;
+}
+.alert-block p + p {
+ margin-top: 5px;
+}
+.nav {
+ margin-left: 0;
+ margin-bottom: 18px;
+ list-style: none;
+}
+.nav > li > a {
+ display: block;
+}
+.nav > li > a:hover {
+ text-decoration: none;
+ background-color: #eeeeee;
+}
+.nav-list {
+ padding-left: 14px;
+ padding-right: 14px;
+ margin-bottom: 0;
+}
+.nav-list > li > a, .nav-list .nav-header {
+ display: block;
+ padding: 3px 15px;
+ margin-left: -15px;
+ margin-right: -15px;
+ text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+}
+.nav-list .nav-header {
+ font-size: 11px;
+ font-weight: bold;
+ line-height: 18px;
+ color: #999999;
+ text-transform: uppercase;
+}
+.nav-list > li + .nav-header {
+ margin-top: 9px;
+}
+.nav-list .active > a {
+ color: #ffffff;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+ background-color: #0088cc;
+}
+.nav-list .icon {
+ margin-right: 2px;
+}
+.nav-tabs, .nav-pills {
+ *zoom: 1;
+}
+.nav-tabs:before,
+.nav-pills:before,
+.nav-tabs:after,
+.nav-pills:after {
+ display: table;
+ content: "";
+}
+.nav-tabs:after, .nav-pills:after {
+ clear: both;
+}
+.nav-tabs > li, .nav-pills > li {
+ float: left;
+}
+.nav-tabs > li > a, .nav-pills > li > a {
+ padding-right: 12px;
+ padding-left: 12px;
+ margin-right: 2px;
+ line-height: 14px;
+}
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+ margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+ padding-top: 9px;
+ padding-bottom: 9px;
+ border: 1px solid transparent;
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+ border-color: #eeeeee #eeeeee #dddddd;
+}
+.nav-tabs > .active > a, .nav-tabs > .active > a:hover {
+ color: #555555;
+ background-color: #ffffff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+ cursor: default;
+}
+.nav-pills > li > a {
+ padding-top: 8px;
+ padding-bottom: 8px;
+ margin-top: 2px;
+ margin-bottom: 2px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.nav-pills .active > a, .nav-pills .active > a:hover {
+ color: #ffffff;
+ background-color: #0088cc;
+}
+.nav-stacked > li {
+ float: none;
+}
+.nav-stacked > li > a {
+ margin-right: 0;
+}
+.nav-tabs.nav-stacked {
+ border-bottom: 0;
+}
+.nav-tabs.nav-stacked > li > a {
+ border: 1px solid #ddd;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+.nav-tabs.nav-stacked > li:first-child > a {
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+.nav-tabs.nav-stacked > li:last-child > a {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+.nav-tabs.nav-stacked > li > a:hover {
+ border-color: #ddd;
+ z-index: 2;
+}
+.nav-pills.nav-stacked > li > a {
+ margin-bottom: 3px;
+}
+.nav-pills.nav-stacked > li:last-child > a {
+ margin-bottom: 1px;
+}
+.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu {
+ margin-top: 1px;
+ border-width: 1px;
+}
+.nav-pills .dropdown-menu {
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret {
+ border-top-color: #0088cc;
+ margin-top: 6px;
+}
+.nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret {
+ border-top-color: #005580;
+}
+.nav-tabs .active .dropdown-toggle .caret, .nav-pills .active .dropdown-toggle .caret {
+ border-top-color: #333333;
+}
+.nav > .dropdown.active > a:hover {
+ color: #000000;
+ cursor: pointer;
+}
+.nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > .open.active > a:hover {
+ color: #ffffff;
+ background-color: #999999;
+ border-color: #999999;
+}
+.nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret {
+ border-top-color: #ffffff;
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+.tabs-stacked .open > a:hover {
+ border-color: #999999;
+}
+.tabbable {
+ *zoom: 1;
+}
+.tabbable:before, .tabbable:after {
+ display: table;
+ content: "";
+}
+.tabbable:after {
+ clear: both;
+}
+.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs {
+ border-bottom: 0;
+}
+.tab-content > .tab-pane, .pill-content > .pill-pane {
+ display: none;
+}
+.tab-content > .active, .pill-content > .active {
+ display: block;
+}
+.tabs-below .nav-tabs {
+ border-top: 1px solid #ddd;
+}
+.tabs-below .nav-tabs > li {
+ margin-top: -1px;
+ margin-bottom: 0;
+}
+.tabs-below .nav-tabs > li > a {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+.tabs-below .nav-tabs > li > a:hover {
+ border-bottom-color: transparent;
+ border-top-color: #ddd;
+}
+.tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover {
+ border-color: transparent #ddd #ddd #ddd;
+}
+.tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li {
+ float: none;
+}
+.tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a {
+ min-width: 74px;
+ margin-right: 0;
+ margin-bottom: 3px;
+}
+.tabs-left .nav-tabs {
+ float: left;
+ margin-right: 19px;
+ border-right: 1px solid #ddd;
+}
+.tabs-left .nav-tabs > li > a {
+ margin-right: -1px;
+ -webkit-border-radius: 4px 0 0 4px;
+ -moz-border-radius: 4px 0 0 4px;
+ border-radius: 4px 0 0 4px;
+}
+.tabs-left .nav-tabs > li > a:hover {
+ border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+.tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover {
+ border-color: #ddd transparent #ddd #ddd;
+ *border-right-color: #ffffff;
+}
+.tabs-right .nav-tabs {
+ float: right;
+ margin-left: 19px;
+ border-left: 1px solid #ddd;
+}
+.tabs-right .nav-tabs > li > a {
+ margin-left: -1px;
+ -webkit-border-radius: 0 4px 4px 0;
+ -moz-border-radius: 0 4px 4px 0;
+ border-radius: 0 4px 4px 0;
+}
+.tabs-right .nav-tabs > li > a:hover {
+ border-color: #eeeeee #eeeeee #eeeeee #dddddd;
+}
+.tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover {
+ border-color: #ddd #ddd #ddd transparent;
+ *border-left-color: #ffffff;
+}
+.navbar {
+ overflow: visible;
+ margin-bottom: 18px;
+}
+.navbar-inner {
+ padding-left: 20px;
+ padding-right: 20px;
+ background-color: #2c2c2c;
+ background-image: -moz-linear-gradient(top, #333333, #222222);
+ background-image: -ms-linear-gradient(top, #333333, #222222);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
+ background-image: -webkit-linear-gradient(top, #333333, #222222);
+ background-image: -o-linear-gradient(top, #333333, #222222);
+ background-image: linear-gradient(top, #333333, #222222);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+}
+.btn-navbar {
+ display: none;
+ float: right;
+ padding: 7px 10px;
+ margin-left: 5px;
+ margin-right: 5px;
+ background-color: #2c2c2c;
+ background-image: -moz-linear-gradient(top, #333333, #222222);
+ background-image: -ms-linear-gradient(top, #333333, #222222);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
+ background-image: -webkit-linear-gradient(top, #333333, #222222);
+ background-image: -o-linear-gradient(top, #333333, #222222);
+ background-image: linear-gradient(top, #333333, #222222);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
+ border-color: #222222 #222222 #000000;
+ border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+ -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+}
+.btn-navbar:hover,
+.btn-navbar:active,
+.btn-navbar.active,
+.btn-navbar.disabled,
+.btn-navbar[disabled] {
+ background-color: #222222;
+}
+.btn-navbar:active, .btn-navbar.active {
+ background-color: #080808 \9;
+}
+.btn-navbar .icon-bar {
+ display: block;
+ width: 18px;
+ height: 2px;
+ background-color: #f5f5f5;
+ -webkit-border-radius: 1px;
+ -moz-border-radius: 1px;
+ border-radius: 1px;
+ -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+ -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+ box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+}
+.btn-navbar .icon-bar + .icon-bar {
+ margin-top: 3px;
+}
+.nav-collapse.collapse {
+ height: auto;
+}
+.navbar .brand:hover {
+ text-decoration: none;
+}
+.navbar .brand {
+ float: left;
+ display: block;
+ padding: 8px 20px 12px;
+ margin-left: -20px;
+ font-size: 20px;
+ font-weight: 200;
+ line-height: 1;
+ color: #ffffff;
+}
+.navbar .navbar-text {
+ margin-bottom: 0;
+ line-height: 40px;
+ color: #999999;
+}
+.navbar .navbar-text a:hover {
+ color: #ffffff;
+ background-color: transparent;
+}
+.navbar .btn, .navbar .btn-group {
+ margin-top: 5px;
+}
+.navbar .btn-group .btn {
+ margin-top: 0;
+}
+.navbar-form {
+ margin-bottom: 0;
+ *zoom: 1;
+}
+.navbar-form:before, .navbar-form:after {
+ display: table;
+ content: "";
+}
+.navbar-form:after {
+ clear: both;
+}
+.navbar-form input, .navbar-form select {
+ display: inline-block;
+ margin-top: 5px;
+ margin-bottom: 0;
+}
+.navbar-form .radio, .navbar-form .checkbox {
+ margin-top: 5px;
+}
+.navbar-form input[type="image"], .navbar-form input[type="checkbox"], .navbar-form input[type="radio"] {
+ margin-top: 3px;
+}
+.navbar-search {
+ position: relative;
+ float: left;
+ margin-top: 6px;
+ margin-bottom: 0;
+}
+.navbar-search .search-query {
+ padding: 4px 9px;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ font-weight: normal;
+ line-height: 1;
+ color: #ffffff;
+ color: rgba(255, 255, 255, 0.75);
+ background: #666;
+ background: rgba(255, 255, 255, 0.3);
+ border: 1px solid #111;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
+ -webkit-transition: none;
+ -moz-transition: none;
+ -ms-transition: none;
+ -o-transition: none;
+ transition: none;
+}
+.navbar-search .search-query :-moz-placeholder {
+ color: #eeeeee;
+}
+.navbar-search .search-query::-webkit-input-placeholder {
+ color: #eeeeee;
+}
+.navbar-search .search-query:hover {
+ color: #ffffff;
+ background-color: #999999;
+ background-color: rgba(255, 255, 255, 0.5);
+}
+.navbar-search .search-query:focus, .navbar-search .search-query.focused {
+ padding: 5px 10px;
+ color: #333333;
+ text-shadow: 0 1px 0 #ffffff;
+ background-color: #ffffff;
+ border: 0;
+ -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+ box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+ outline: 0;
+}
+.navbar-fixed-top {
+ position: fixed;
+ top: 0;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+.navbar-fixed-top .navbar-inner {
+ padding-left: 0;
+ padding-right: 0;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+}
+.navbar .nav {
+ position: relative;
+ left: 0;
+ display: block;
+ float: left;
+ margin: 0 10px 0 0;
+}
+.navbar .nav.pull-right {
+ float: right;
+}
+.navbar .nav > li {
+ display: block;
+ float: left;
+}
+.navbar .nav > li > a {
+ float: none;
+ padding: 10px 10px 11px;
+ line-height: 19px;
+ color: #999999;
+ text-decoration: none;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.navbar .nav > li > a:hover {
+ background-color: transparent;
+ color: #ffffff;
+ text-decoration: none;
+}
+.navbar .nav .active > a, .navbar .nav .active > a:hover {
+ color: #ffffff;
+ text-decoration: none;
+ background-color: #222222;
+ background-color: rgba(0, 0, 0, 0.5);
+}
+.navbar .divider-vertical {
+ height: 40px;
+ width: 1px;
+ margin: 0 9px;
+ overflow: hidden;
+ background-color: #222222;
+ border-right: 1px solid #333333;
+}
+.navbar .nav.pull-right {
+ margin-left: 10px;
+ margin-right: 0;
+}
+.navbar .dropdown-menu {
+ margin-top: 1px;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.navbar .dropdown-menu:before {
+ content: '';
+ display: inline-block;
+ border-left: 7px solid transparent;
+ border-right: 7px solid transparent;
+ border-bottom: 7px solid #ccc;
+ border-bottom-color: rgba(0, 0, 0, 0.2);
+ position: absolute;
+ top: -7px;
+ left: 9px;
+}
+.navbar .dropdown-menu:after {
+ content: '';
+ display: inline-block;
+ border-left: 6px solid transparent;
+ border-right: 6px solid transparent;
+ border-bottom: 6px solid #ffffff;
+ position: absolute;
+ top: -6px;
+ left: 10px;
+}
+.navbar .nav .dropdown-toggle .caret, .navbar .nav .open.dropdown .caret {
+ border-top-color: #ffffff;
+}
+.navbar .nav .active .caret {
+ opacity: 1;
+ filter: alpha(opacity=100);
+}
+.navbar .nav .open > .dropdown-toggle, .navbar .nav .active > .dropdown-toggle, .navbar .nav .open.active > .dropdown-toggle {
+ background-color: transparent;
+}
+.navbar .nav .active > .dropdown-toggle:hover {
+ color: #ffffff;
+}
+.navbar .nav.pull-right .dropdown-menu {
+ left: auto;
+ right: 0;
+}
+.navbar .nav.pull-right .dropdown-menu:before {
+ left: auto;
+ right: 12px;
+}
+.navbar .nav.pull-right .dropdown-menu:after {
+ left: auto;
+ right: 13px;
+}
+.breadcrumb {
+ padding: 7px 14px;
+ margin: 0 0 18px;
+ background-color: #fbfbfb;
+ background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
+ background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));
+ background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
+ background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
+ background-image: linear-gradient(top, #ffffff, #f5f5f5);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
+ border: 1px solid #ddd;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-shadow: inset 0 1px 0 #ffffff;
+ -moz-box-shadow: inset 0 1px 0 #ffffff;
+ box-shadow: inset 0 1px 0 #ffffff;
+}
+.breadcrumb li {
+ display: inline;
+ text-shadow: 0 1px 0 #ffffff;
+}
+.breadcrumb .divider {
+ padding: 0 5px;
+ color: #999999;
+}
+.breadcrumb .active a {
+ color: #333333;
+}
+.pagination {
+ height: 36px;
+ margin: 18px 0;
+}
+.pagination ul {
+ display: inline-block;
+ *display: inline;
+ /* IE7 inline-block hack */
+
+ *zoom: 1;
+ margin-left: 0;
+ margin-bottom: 0;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+ -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+.pagination li {
+ display: inline;
+}
+.pagination a {
+ float: left;
+ padding: 0 14px;
+ line-height: 34px;
+ text-decoration: none;
+ border: 1px solid #ddd;
+ border-left-width: 0;
+}
+.pagination a:hover, .pagination .active a {
+ background-color: #f5f5f5;
+}
+.pagination .active a {
+ color: #999999;
+ cursor: default;
+}
+.pagination .disabled a, .pagination .disabled a:hover {
+ color: #999999;
+ background-color: transparent;
+ cursor: default;
+}
+.pagination li:first-child a {
+ border-left-width: 1px;
+ -webkit-border-radius: 3px 0 0 3px;
+ -moz-border-radius: 3px 0 0 3px;
+ border-radius: 3px 0 0 3px;
+}
+.pagination li:last-child a {
+ -webkit-border-radius: 0 3px 3px 0;
+ -moz-border-radius: 0 3px 3px 0;
+ border-radius: 0 3px 3px 0;
+}
+.pagination-centered {
+ text-align: center;
+}
+.pagination-right {
+ text-align: right;
+}
+.pager {
+ margin-left: 0;
+ margin-bottom: 18px;
+ list-style: none;
+ text-align: center;
+ *zoom: 1;
+}
+.pager:before, .pager:after {
+ display: table;
+ content: "";
+}
+.pager:after {
+ clear: both;
+}
+.pager li {
+ display: inline;
+}
+.pager a {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ -webkit-border-radius: 15px;
+ -moz-border-radius: 15px;
+ border-radius: 15px;
+}
+.pager a:hover {
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+.pager .next a {
+ float: right;
+}
+.pager .previous a {
+ float: left;
+}
+.modal-open .dropdown-menu {
+ z-index: 2050;
+}
+.modal-open .dropdown.open {
+ *z-index: 2050;
+}
+.modal-open .popover {
+ z-index: 2060;
+}
+.modal-open .tooltip {
+ z-index: 2070;
+}
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000000;
+}
+.modal-backdrop.fade {
+ opacity: 0;
+}
+.modal-backdrop, .modal-backdrop.fade.in {
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+.modal {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ z-index: 1050;
+ max-height: 500px;
+ overflow: auto;
+ width: 560px;
+ margin: -250px 0 0 -280px;
+ background-color: #ffffff;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, 0.3);
+ *border: 1px solid #999;
+ /* IE6-7 */
+
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding-box;
+ background-clip: padding-box;
+}
+.modal.fade {
+ -webkit-transition: opacity .3s linear, top .3s ease-out;
+ -moz-transition: opacity .3s linear, top .3s ease-out;
+ -ms-transition: opacity .3s linear, top .3s ease-out;
+ -o-transition: opacity .3s linear, top .3s ease-out;
+ transition: opacity .3s linear, top .3s ease-out;
+ top: -25%;
+}
+.modal.fade.in {
+ top: 50%;
+}
+.modal-header {
+ padding: 9px 15px;
+ border-bottom: 1px solid #eee;
+}
+.modal-header .close {
+ margin-top: 2px;
+}
+.modal-body {
+ padding: 15px;
+}
+.modal-footer {
+ padding: 14px 15px 15px;
+ margin-bottom: 0;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ -webkit-border-radius: 0 0 6px 6px;
+ -moz-border-radius: 0 0 6px 6px;
+ border-radius: 0 0 6px 6px;
+ -webkit-box-shadow: inset 0 1px 0 #ffffff;
+ -moz-box-shadow: inset 0 1px 0 #ffffff;
+ box-shadow: inset 0 1px 0 #ffffff;
+ *zoom: 1;
+}
+.modal-footer:before, .modal-footer:after {
+ display: table;
+ content: "";
+}
+.modal-footer:after {
+ clear: both;
+}
+.modal-footer .btn {
+ float: right;
+ margin-left: 5px;
+ margin-bottom: 0;
+}
+.tooltip {
+ position: absolute;
+ z-index: 1020;
+ display: block;
+ visibility: visible;
+ padding: 5px;
+ font-size: 11px;
+ opacity: 0;
+ filter: alpha(opacity=0);
+}
+.tooltip.in {
+ opacity: 0.8;
+ filter: alpha(opacity=80);
+}
+.tooltip.top {
+ margin-top: -2px;
+}
+.tooltip.right {
+ margin-left: 2px;
+}
+.tooltip.bottom {
+ margin-top: 2px;
+}
+.tooltip.left {
+ margin-left: -2px;
+}
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-top: 5px solid #000000;
+}
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-top: 5px solid transparent;
+ border-bottom: 5px solid transparent;
+ border-left: 5px solid #000000;
+}
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-bottom: 5px solid #000000;
+}
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-top: 5px solid transparent;
+ border-bottom: 5px solid transparent;
+ border-right: 5px solid #000000;
+}
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #ffffff;
+ text-align: center;
+ text-decoration: none;
+ background-color: #000000;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+}
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1010;
+ display: none;
+ padding: 5px;
+}
+.popover.top {
+ margin-top: -5px;
+}
+.popover.right {
+ margin-left: 5px;
+}
+.popover.bottom {
+ margin-top: 5px;
+}
+.popover.left {
+ margin-left: -5px;
+}
+.popover.top .arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-top: 5px solid #000000;
+}
+.popover.right .arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-top: 5px solid transparent;
+ border-bottom: 5px solid transparent;
+ border-right: 5px solid #000000;
+}
+.popover.bottom .arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-left: 5px solid transparent;
+ border-right: 5px solid transparent;
+ border-bottom: 5px solid #000000;
+}
+.popover.left .arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-top: 5px solid transparent;
+ border-bottom: 5px solid transparent;
+ border-left: 5px solid #000000;
+}
+.popover .arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+}
+.popover-inner {
+ padding: 3px;
+ width: 280px;
+ overflow: hidden;
+ background: #000000;
+ background: rgba(0, 0, 0, 0.8);
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+ box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+}
+.popover-title {
+ padding: 9px 15px;
+ line-height: 1;
+ background-color: #f5f5f5;
+ border-bottom: 1px solid #eee;
+ -webkit-border-radius: 3px 3px 0 0;
+ -moz-border-radius: 3px 3px 0 0;
+ border-radius: 3px 3px 0 0;
+}
+.popover-content {
+ padding: 14px;
+ background-color: #ffffff;
+ -webkit-border-radius: 0 0 3px 3px;
+ -moz-border-radius: 0 0 3px 3px;
+ border-radius: 0 0 3px 3px;
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding-box;
+ background-clip: padding-box;
+}
+.popover-content p, .popover-content ul, .popover-content ol {
+ margin-bottom: 0;
+}
+.thumbnails {
+ margin-left: -20px;
+ list-style: none;
+ *zoom: 1;
+}
+.thumbnails:before, .thumbnails:after {
+ display: table;
+ content: "";
+}
+.thumbnails:after {
+ clear: both;
+}
+.thumbnails > li {
+ float: left;
+ margin: 0 0 18px 20px;
+}
+.thumbnail {
+ display: block;
+ padding: 4px;
+ line-height: 1;
+ border: 1px solid #ddd;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+ -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+a.thumbnail:hover {
+ border-color: #0088cc;
+ -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+ -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+ box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+}
+.thumbnail > img {
+ display: block;
+ max-width: 100%;
+ margin-left: auto;
+ margin-right: auto;
+}
+.thumbnail .caption {
+ padding: 9px;
+}
+.label {
+ padding: 1px 3px 2px;
+ font-size: 9.75px;
+ font-weight: bold;
+ color: #ffffff;
+ text-transform: uppercase;
+ background-color: #999999;
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.label-important {
+ background-color: #b94a48;
+}
+.label-warning {
+ background-color: #f89406;
+}
+.label-success {
+ background-color: #468847;
+}
+.label-info {
+ background-color: #3a87ad;
+}
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 0 0;
+ }
+ to {
+ background-position: 40px 0;
+ }
+}
+@-moz-keyframes progress-bar-stripes {
+ from {
+ background-position: 0 0;
+ }
+ to {
+ background-position: 40px 0;
+ }
+}
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 0 0;
+ }
+ to {
+ background-position: 40px 0;
+ }
+}
+.progress {
+ overflow: hidden;
+ height: 18px;
+ margin-bottom: 18px;
+ background-color: #f7f7f7;
+ background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
+ background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
+ background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
+ background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
+ background-image: linear-gradient(top, #f5f5f5, #f9f9f9);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.progress .bar {
+ width: 0%;
+ height: 18px;
+ color: #ffffff;
+ font-size: 12px;
+ text-align: center;
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+ background-color: #0e90d2;
+ background-image: -moz-linear-gradient(top, #149bdf, #0480be);
+ background-image: -ms-linear-gradient(top, #149bdf, #0480be);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
+ background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
+ background-image: -o-linear-gradient(top, #149bdf, #0480be);
+ background-image: linear-gradient(top, #149bdf, #0480be);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ -webkit-transition: width 0.6s ease;
+ -moz-transition: width 0.6s ease;
+ -ms-transition: width 0.6s ease;
+ -o-transition: width 0.6s ease;
+ transition: width 0.6s ease;
+}
+.progress-striped .bar {
+ background-color: #62c462;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ -webkit-background-size: 40px 40px;
+ -moz-background-size: 40px 40px;
+ -o-background-size: 40px 40px;
+ background-size: 40px 40px;
+}
+.progress.active .bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ -moz-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-danger .bar {
+ background-color: #dd514c;
+ background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
+ background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
+ background-image: linear-gradient(top, #ee5f5b, #c43c35);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
+}
+.progress-danger.progress-striped .bar {
+ background-color: #ee5f5b;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.progress-success .bar {
+ background-color: #5eb95e;
+ background-image: -moz-linear-gradient(top, #62c462, #57a957);
+ background-image: -ms-linear-gradient(top, #62c462, #57a957);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
+ background-image: -webkit-linear-gradient(top, #62c462, #57a957);
+ background-image: -o-linear-gradient(top, #62c462, #57a957);
+ background-image: linear-gradient(top, #62c462, #57a957);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
+}
+.progress-success.progress-striped .bar {
+ background-color: #62c462;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.progress-info .bar {
+ background-color: #4bb1cf;
+ background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
+ background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
+ background-image: linear-gradient(top, #5bc0de, #339bb9);
+ background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
+}
+.progress-info.progress-striped .bar {
+ background-color: #5bc0de;
+ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+ background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.accordion {
+ margin-bottom: 18px;
+}
+.accordion-group {
+ margin-bottom: 2px;
+ border: 1px solid #e5e5e5;
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.accordion-heading {
+ border-bottom: 0;
+}
+.accordion-heading .accordion-toggle {
+ display: block;
+ padding: 8px 15px;
+}
+.accordion-inner {
+ padding: 9px 15px;
+ border-top: 1px solid #e5e5e5;
+}
+.carousel {
+ position: relative;
+ margin-bottom: 18px;
+ line-height: 1;
+}
+.carousel-inner {
+ overflow: hidden;
+ width: 100%;
+ position: relative;
+}
+.carousel .item {
+ display: none;
+ position: relative;
+ -webkit-transition: 0.6s ease-in-out left;
+ -moz-transition: 0.6s ease-in-out left;
+ -ms-transition: 0.6s ease-in-out left;
+ -o-transition: 0.6s ease-in-out left;
+ transition: 0.6s ease-in-out left;
+}
+.carousel .item > img {
+ display: block;
+ line-height: 1;
+}
+.carousel .active, .carousel .next, .carousel .prev {
+ display: block;
+}
+.carousel .active {
+ left: 0;
+}
+.carousel .next, .carousel .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.carousel .next {
+ left: 100%;
+}
+.carousel .prev {
+ left: -100%;
+}
+.carousel .next.left, .carousel .prev.right {
+ left: 0;
+}
+.carousel .active.left {
+ left: -100%;
+}
+.carousel .active.right {
+ left: 100%;
+}
+.carousel-control {
+ position: absolute;
+ top: 40%;
+ left: 15px;
+ width: 40px;
+ height: 40px;
+ margin-top: -20px;
+ font-size: 60px;
+ font-weight: 100;
+ line-height: 30px;
+ color: #ffffff;
+ text-align: center;
+ background: #222222;
+ border: 3px solid #ffffff;
+ -webkit-border-radius: 23px;
+ -moz-border-radius: 23px;
+ border-radius: 23px;
+ opacity: 0.5;
+ filter: alpha(opacity=50);
+}
+.carousel-control.right {
+ left: auto;
+ right: 15px;
+}
+.carousel-control:hover {
+ color: #ffffff;
+ text-decoration: none;
+ opacity: 0.9;
+ filter: alpha(opacity=90);
+}
+.carousel-caption {
+ position: absolute;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ padding: 10px 15px 5px;
+ background: #333333;
+ background: rgba(0, 0, 0, 0.75);
+}
+.carousel-caption h4, .carousel-caption p {
+ color: #ffffff;
+}
+.hero-unit {
+ padding: 60px;
+ margin-bottom: 30px;
+ background-color: #f5f5f5;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+.hero-unit h1 {
+ margin-bottom: 0;
+ font-size: 60px;
+ line-height: 1;
+ letter-spacing: -1px;
+}
+.hero-unit p {
+ font-size: 18px;
+ font-weight: 200;
+ line-height: 27px;
+}
+.pull-right {
+ float: right;
+}
+.pull-left {
+ float: left;
+}
+.hide {
+ display: none;
+}
+.show {
+ display: block;
+}
+.invisible {
+ visibility: hidden;
+}
diff --git a/doc/5.1.x/resources/bootstrap.js b/doc/5.1.x/resources/bootstrap.js
new file mode 100644
index 0000000..49aceca
--- /dev/null
+++ b/doc/5.1.x/resources/bootstrap.js
@@ -0,0 +1,1734 @@
+/* ===================================================
+ * bootstrap-transition.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#transitions
+ * ===================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+!function( $ ) {
+
+ $(function () {
+
+ "use strict"
+
+ /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
+ * ======================================================= */
+
+ $.support.transition = (function () {
+ var thisBody = document.body || document.documentElement
+ , thisStyle = thisBody.style
+ , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
+
+ return support && {
+ end: (function () {
+ var transitionEnd = "TransitionEnd"
+ if ( $.browser.webkit ) {
+ transitionEnd = "webkitTransitionEnd"
+ } else if ( $.browser.mozilla ) {
+ transitionEnd = "transitionend"
+ } else if ( $.browser.opera ) {
+ transitionEnd = "oTransitionEnd"
+ }
+ return transitionEnd
+ }())
+ }
+ })()
+
+ })
+
+}( window.jQuery )
+
+/* =========================================================
+ * bootstrap-modal.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#modals
+ * =========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================= */
+
+
+!function( $ ){
+
+ "use strict"
+
+ /* MODAL CLASS DEFINITION
+ * ====================== */
+
+ var Modal = function ( content, options ) {
+ this.options = options
+ this.$element = $(content)
+ .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
+ }
+
+ Modal.prototype = {
+
+ constructor: Modal
+
+ , toggle: function () {
+ return this[!this.isShown ? 'show' : 'hide']()
+ }
+
+ , show: function () {
+ var that = this
+
+ if (this.isShown) return
+
+ $('body').addClass('modal-open')
+
+ this.isShown = true
+ this.$element.trigger('show')
+
+ escape.call(this)
+ backdrop.call(this, function () {
+ var transition = $.support.transition && that.$element.hasClass('fade')
+
+ !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
+
+ that.$element
+ .show()
+
+ if (transition) {
+ that.$element[0].offsetWidth // force reflow
+ }
+
+ that.$element.addClass('in')
+
+ transition ?
+ that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
+ that.$element.trigger('shown')
+
+ })
+ }
+
+ , hide: function ( e ) {
+ e && e.preventDefault()
+
+ if (!this.isShown) return
+
+ var that = this
+ this.isShown = false
+
+ $('body').removeClass('modal-open')
+
+ escape.call(this)
+
+ this.$element
+ .trigger('hide')
+ .removeClass('in')
+
+ $.support.transition && this.$element.hasClass('fade') ?
+ hideWithTransition.call(this) :
+ hideModal.call(this)
+ }
+
+ }
+
+
+ /* MODAL PRIVATE METHODS
+ * ===================== */
+
+ function hideWithTransition() {
+ var that = this
+ , timeout = setTimeout(function () {
+ that.$element.off($.support.transition.end)
+ hideModal.call(that)
+ }, 500)
+
+ this.$element.one($.support.transition.end, function () {
+ clearTimeout(timeout)
+ hideModal.call(that)
+ })
+ }
+
+ function hideModal( that ) {
+ this.$element
+ .hide()
+ .trigger('hidden')
+
+ backdrop.call(this)
+ }
+
+ function backdrop( callback ) {
+ var that = this
+ , animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+ if (this.isShown && this.options.backdrop) {
+ var doAnimate = $.support.transition && animate
+
+ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
+ .appendTo(document.body)
+
+ if (this.options.backdrop != 'static') {
+ this.$backdrop.click($.proxy(this.hide, this))
+ }
+
+ if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+ this.$backdrop.addClass('in')
+
+ doAnimate ?
+ this.$backdrop.one($.support.transition.end, callback) :
+ callback()
+
+ } else if (!this.isShown && this.$backdrop) {
+ this.$backdrop.removeClass('in')
+
+ $.support.transition && this.$element.hasClass('fade')?
+ this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
+ removeBackdrop.call(this)
+
+ } else if (callback) {
+ callback()
+ }
+ }
+
+ function removeBackdrop() {
+ this.$backdrop.remove()
+ this.$backdrop = null
+ }
+
+ function escape() {
+ var that = this
+ if (this.isShown && this.options.keyboard) {
+ $(document).on('keyup.dismiss.modal', function ( e ) {
+ e.which == 27 && that.hide()
+ })
+ } else if (!this.isShown) {
+ $(document).off('keyup.dismiss.modal')
+ }
+ }
+
+
+ /* MODAL PLUGIN DEFINITION
+ * ======================= */
+
+ $.fn.modal = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('modal')
+ , options = $.extend({}, $.fn.modal.defaults, typeof option == 'object' && option)
+ if (!data) $this.data('modal', (data = new Modal(this, options)))
+ if (typeof option == 'string') data[option]()
+ else if (options.show) data.show()
+ })
+ }
+
+ $.fn.modal.defaults = {
+ backdrop: true
+ , keyboard: true
+ , show: true
+ }
+
+ $.fn.modal.Constructor = Modal
+
+
+ /* MODAL DATA-API
+ * ============== */
+
+ $(function () {
+ $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
+ var $this = $(this), href
+ , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
+
+ e.preventDefault()
+ $target.modal(option)
+ })
+ })
+
+}( window.jQuery )
+
+/* ============================================================
+ * bootstrap-dropdown.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#dropdowns
+ * ============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+
+!function( $ ){
+
+ "use strict"
+
+ /* DROPDOWN CLASS DEFINITION
+ * ========================= */
+
+ var toggle = '[data-toggle="dropdown"]'
+ , Dropdown = function ( element ) {
+ var $el = $(element).on('click.dropdown.data-api', this.toggle)
+ $('html').on('click.dropdown.data-api', function () {
+ $el.parent().removeClass('open')
+ })
+ }
+
+ Dropdown.prototype = {
+
+ constructor: Dropdown
+
+ , toggle: function ( e ) {
+ var $this = $(this)
+ , selector = $this.attr('data-target')
+ , $parent
+ , isActive
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ $parent = $(selector)
+ $parent.length || ($parent = $this.parent())
+
+ isActive = $parent.hasClass('open')
+
+ clearMenus()
+ !isActive && $parent.toggleClass('open')
+
+ return false
+ }
+
+ }
+
+ function clearMenus() {
+ $(toggle).parent().removeClass('open')
+ }
+
+
+ /* DROPDOWN PLUGIN DEFINITION
+ * ========================== */
+
+ $.fn.dropdown = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('dropdown')
+ if (!data) $this.data('dropdown', (data = new Dropdown(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ $.fn.dropdown.Constructor = Dropdown
+
+
+ /* APPLY TO STANDARD DROPDOWN ELEMENTS
+ * =================================== */
+
+ $(function () {
+ $('html').on('click.dropdown.data-api', clearMenus)
+ $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+ })
+
+}( window.jQuery )
+
+/* =============================================================
+ * bootstrap-scrollspy.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#scrollspy
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================== */
+
+!function ( $ ) {
+
+ "use strict"
+
+ /* SCROLLSPY CLASS DEFINITION
+ * ========================== */
+
+ function ScrollSpy( element, options) {
+ var process = $.proxy(this.process, this)
+ , $element = $(element).is('body') ? $(window) : $(element)
+ , href
+ this.options = $.extend({}, $.fn.scrollspy.defaults, options)
+ this.$scrollElement = $element.on('scroll.scroll.data-api', process)
+ this.selector = (this.options.target
+ || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ || '') + ' .nav li > a'
+ this.$body = $('body').on('click.scroll.data-api', this.selector, process)
+ this.refresh()
+ this.process()
+ }
+
+ ScrollSpy.prototype = {
+
+ constructor: ScrollSpy
+
+ , refresh: function () {
+ this.targets = this.$body
+ .find(this.selector)
+ .map(function () {
+ var href = $(this).attr('href')
+ return /^#\w/.test(href) && $(href).length ? href : null
+ })
+
+ this.offsets = $.map(this.targets, function (id) {
+ return $(id).position().top
+ })
+ }
+
+ , process: function () {
+ var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+ , offsets = this.offsets
+ , targets = this.targets
+ , activeTarget = this.activeTarget
+ , i
+
+ for (i = offsets.length; i--;) {
+ activeTarget != targets[i]
+ && scrollTop >= offsets[i]
+ && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
+ && this.activate( targets[i] )
+ }
+ }
+
+ , activate: function (target) {
+ var active
+
+ this.activeTarget = target
+
+ this.$body
+ .find(this.selector).parent('.active')
+ .removeClass('active')
+
+ active = this.$body
+ .find(this.selector + '[href="' + target + '"]')
+ .parent('li')
+ .addClass('active')
+
+ if ( active.parent('.dropdown-menu') ) {
+ active.closest('li.dropdown').addClass('active')
+ }
+ }
+
+ }
+
+
+ /* SCROLLSPY PLUGIN DEFINITION
+ * =========================== */
+
+ $.fn.scrollspy = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('scrollspy')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.scrollspy.Constructor = ScrollSpy
+
+ $.fn.scrollspy.defaults = {
+ offset: 10
+ }
+
+
+ /* SCROLLSPY DATA-API
+ * ================== */
+
+ $(function () {
+ $('[data-spy="scroll"]').each(function () {
+ var $spy = $(this)
+ $spy.scrollspy($spy.data())
+ })
+ })
+
+}( window.jQuery )
+
+/* ========================================================
+ * bootstrap-tab.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#tabs
+ * ========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================== */
+
+
+!function( $ ){
+
+ "use strict"
+
+ /* TAB CLASS DEFINITION
+ * ==================== */
+
+ var Tab = function ( element ) {
+ this.element = $(element)
+ }
+
+ Tab.prototype = {
+
+ constructor: Tab
+
+ , show: function () {
+ var $this = this.element
+ , $ul = $this.closest('ul:not(.dropdown-menu)')
+ , selector = $this.attr('data-target')
+ , previous
+ , $target
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ if ( $this.parent('li').hasClass('active') ) return
+
+ previous = $ul.find('.active a').last()[0]
+
+ $this.trigger({
+ type: 'show'
+ , relatedTarget: previous
+ })
+
+ $target = $(selector)
+
+ this.activate($this.parent('li'), $ul)
+ this.activate($target, $target.parent(), function () {
+ $this.trigger({
+ type: 'shown'
+ , relatedTarget: previous
+ })
+ })
+ }
+
+ , activate: function ( element, container, callback) {
+ var $active = container.find('> .active')
+ , transition = callback
+ && $.support.transition
+ && $active.hasClass('fade')
+
+ function next() {
+ $active
+ .removeClass('active')
+ .find('> .dropdown-menu > .active')
+ .removeClass('active')
+
+ element.addClass('active')
+
+ if (transition) {
+ element[0].offsetWidth // reflow for transition
+ element.addClass('in')
+ } else {
+ element.removeClass('fade')
+ }
+
+ if ( element.parent('.dropdown-menu') ) {
+ element.closest('li.dropdown').addClass('active')
+ }
+
+ callback && callback()
+ }
+
+ transition ?
+ $active.one($.support.transition.end, next) :
+ next()
+
+ $active.removeClass('in')
+ }
+ }
+
+
+ /* TAB PLUGIN DEFINITION
+ * ===================== */
+
+ $.fn.tab = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('tab')
+ if (!data) $this.data('tab', (data = new Tab(this)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.tab.Constructor = Tab
+
+
+ /* TAB DATA-API
+ * ============ */
+
+ $(function () {
+ $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
+ e.preventDefault()
+ $(this).tab('show')
+ })
+ })
+
+}( window.jQuery )
+
+/* ===========================================================
+ * bootstrap-tooltip.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#tooltips
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ===========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+!function( $ ) {
+
+ "use strict"
+
+ /* TOOLTIP PUBLIC CLASS DEFINITION
+ * =============================== */
+
+ var Tooltip = function ( element, options ) {
+ this.init('tooltip', element, options)
+ }
+
+ Tooltip.prototype = {
+
+ constructor: Tooltip
+
+ , init: function ( type, element, options ) {
+ var eventIn
+ , eventOut
+
+ this.type = type
+ this.$element = $(element)
+ this.options = this.getOptions(options)
+ this.enabled = true
+
+ if (this.options.trigger != 'manual') {
+ eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
+ eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
+ this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
+ this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
+ }
+
+ this.options.selector ?
+ (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+ this.fixTitle()
+ }
+
+ , getOptions: function ( options ) {
+ options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
+
+ if (options.delay && typeof options.delay == 'number') {
+ options.delay = {
+ show: options.delay
+ , hide: options.delay
+ }
+ }
+
+ return options
+ }
+
+ , enter: function ( e ) {
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
+
+ if (!self.options.delay || !self.options.delay.show) {
+ self.show()
+ } else {
+ self.hoverState = 'in'
+ setTimeout(function() {
+ if (self.hoverState == 'in') {
+ self.show()
+ }
+ }, self.options.delay.show)
+ }
+ }
+
+ , leave: function ( e ) {
+ var self = $(e.currentTarget)[this.type](this._options).data(this.type)
+
+ if (!self.options.delay || !self.options.delay.hide) {
+ self.hide()
+ } else {
+ self.hoverState = 'out'
+ setTimeout(function() {
+ if (self.hoverState == 'out') {
+ self.hide()
+ }
+ }, self.options.delay.hide)
+ }
+ }
+
+ , show: function () {
+ var $tip
+ , inside
+ , pos
+ , actualWidth
+ , actualHeight
+ , placement
+ , tp
+
+ if (this.hasContent() && this.enabled) {
+ $tip = this.tip()
+ this.setContent()
+
+ if (this.options.animation) {
+ $tip.addClass('fade')
+ }
+
+ placement = typeof this.options.placement == 'function' ?
+ this.options.placement.call(this, $tip[0], this.$element[0]) :
+ this.options.placement
+
+ inside = /in/.test(placement)
+
+ $tip
+ .remove()
+ .css({ top: 0, left: 0, display: 'block' })
+ .appendTo(inside ? this.$element : document.body)
+
+ pos = this.getPosition(inside)
+
+ actualWidth = $tip[0].offsetWidth
+ actualHeight = $tip[0].offsetHeight
+
+ switch (inside ? placement.split(' ')[1] : placement) {
+ case 'bottom':
+ tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
+ break
+ case 'top':
+ tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
+ break
+ case 'left':
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
+ break
+ case 'right':
+ tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
+ break
+ }
+
+ $tip
+ .css(tp)
+ .addClass(placement)
+ .addClass('in')
+ }
+ }
+
+ , setContent: function () {
+ var $tip = this.tip()
+ $tip.find('.tooltip-inner').html(this.getTitle())
+ $tip.removeClass('fade in top bottom left right')
+ }
+
+ , hide: function () {
+ var that = this
+ , $tip = this.tip()
+
+ $tip.removeClass('in')
+
+ function removeWithAnimation() {
+ var timeout = setTimeout(function () {
+ $tip.off($.support.transition.end).remove()
+ }, 500)
+
+ $tip.one($.support.transition.end, function () {
+ clearTimeout(timeout)
+ $tip.remove()
+ })
+ }
+
+ $.support.transition && this.$tip.hasClass('fade') ?
+ removeWithAnimation() :
+ $tip.remove()
+ }
+
+ , fixTitle: function () {
+ var $e = this.$element
+ if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
+ $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
+ }
+ }
+
+ , hasContent: function () {
+ return this.getTitle()
+ }
+
+ , getPosition: function (inside) {
+ return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
+ width: this.$element[0].offsetWidth
+ , height: this.$element[0].offsetHeight
+ })
+ }
+
+ , getTitle: function () {
+ var title
+ , $e = this.$element
+ , o = this.options
+
+ title = $e.attr('data-original-title')
+ || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
+
+ title = title.toString().replace(/(^\s*|\s*$)/, "")
+
+ return title
+ }
+
+ , tip: function () {
+ return this.$tip = this.$tip || $(this.options.template)
+ }
+
+ , validate: function () {
+ if (!this.$element[0].parentNode) {
+ this.hide()
+ this.$element = null
+ this.options = null
+ }
+ }
+
+ , enable: function () {
+ this.enabled = true
+ }
+
+ , disable: function () {
+ this.enabled = false
+ }
+
+ , toggleEnabled: function () {
+ this.enabled = !this.enabled
+ }
+
+ , toggle: function () {
+ this[this.tip().hasClass('in') ? 'hide' : 'show']()
+ }
+
+ }
+
+
+ /* TOOLTIP PLUGIN DEFINITION
+ * ========================= */
+
+ $.fn.tooltip = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('tooltip')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.tooltip.Constructor = Tooltip
+
+ $.fn.tooltip.defaults = {
+ animation: true
+ , delay: 0
+ , selector: false
+ , placement: 'top'
+ , trigger: 'hover'
+ , title: ''
+ , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
+ }
+
+}( window.jQuery )
+
+/* ===========================================================
+ * bootstrap-popover.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#popovers
+ * ===========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =========================================================== */
+
+
+!function( $ ) {
+
+ "use strict"
+
+ var Popover = function ( element, options ) {
+ this.init('popover', element, options)
+ }
+
+ /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
+ ========================================== */
+
+ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
+
+ constructor: Popover
+
+ , setContent: function () {
+ var $tip = this.tip()
+ , title = this.getTitle()
+ , content = this.getContent()
+
+ $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
+ $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
+
+ $tip.removeClass('fade top bottom left right in')
+ }
+
+ , hasContent: function () {
+ return this.getTitle() || this.getContent()
+ }
+
+ , getContent: function () {
+ var content
+ , $e = this.$element
+ , o = this.options
+
+ content = $e.attr('data-content')
+ || (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
+
+ content = content.toString().replace(/(^\s*|\s*$)/, "")
+
+ return content
+ }
+
+ , tip: function() {
+ if (!this.$tip) {
+ this.$tip = $(this.options.template)
+ }
+ return this.$tip
+ }
+
+ })
+
+
+ /* POPOVER PLUGIN DEFINITION
+ * ======================= */
+
+ $.fn.popover = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('popover')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('popover', (data = new Popover(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.popover.Constructor = Popover
+
+ $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
+ placement: 'right'
+ , content: ''
+ , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
+ })
+
+}( window.jQuery )
+
+/* ==========================================================
+ * bootstrap-alert.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
+ * ==========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function( $ ){
+
+ "use strict"
+
+ /* ALERT CLASS DEFINITION
+ * ====================== */
+
+ var dismiss = '[data-dismiss="alert"]'
+ , Alert = function ( el ) {
+ $(el).on('click', dismiss, this.close)
+ }
+
+ Alert.prototype = {
+
+ constructor: Alert
+
+ , close: function ( e ) {
+ var $this = $(this)
+ , selector = $this.attr('data-target')
+ , $parent
+
+ if (!selector) {
+ selector = $this.attr('href')
+ selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+ }
+
+ $parent = $(selector)
+ $parent.trigger('close')
+
+ e && e.preventDefault()
+
+ $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
+
+ $parent.removeClass('in')
+
+ function removeElement() {
+ $parent.remove()
+ $parent.trigger('closed')
+ }
+
+ $.support.transition && $parent.hasClass('fade') ?
+ $parent.on($.support.transition.end, removeElement) :
+ removeElement()
+ }
+
+ }
+
+
+ /* ALERT PLUGIN DEFINITION
+ * ======================= */
+
+ $.fn.alert = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('alert')
+ if (!data) $this.data('alert', (data = new Alert(this)))
+ if (typeof option == 'string') data[option].call($this)
+ })
+ }
+
+ $.fn.alert.Constructor = Alert
+
+
+ /* ALERT DATA-API
+ * ============== */
+
+ $(function () {
+ $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
+ })
+
+}( window.jQuery )
+
+/* ============================================================
+ * bootstrap-button.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#buttons
+ * ============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+!function( $ ){
+
+ "use strict"
+
+ /* BUTTON PUBLIC CLASS DEFINITION
+ * ============================== */
+
+ var Button = function ( element, options ) {
+ this.$element = $(element)
+ this.options = $.extend({}, $.fn.button.defaults, options)
+ }
+
+ Button.prototype = {
+
+ constructor: Button
+
+ , setState: function ( state ) {
+ var d = 'disabled'
+ , $el = this.$element
+ , data = $el.data()
+ , val = $el.is('input') ? 'val' : 'html'
+
+ state = state + 'Text'
+ data.resetText || $el.data('resetText', $el[val]())
+
+ $el[val](data[state] || this.options[state])
+
+ // push to event loop to allow forms to submit
+ setTimeout(function () {
+ state == 'loadingText' ?
+ $el.addClass(d).attr(d, d) :
+ $el.removeClass(d).removeAttr(d)
+ }, 0)
+ }
+
+ , toggle: function () {
+ var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
+
+ $parent && $parent
+ .find('.active')
+ .removeClass('active')
+
+ this.$element.toggleClass('active')
+ }
+
+ }
+
+
+ /* BUTTON PLUGIN DEFINITION
+ * ======================== */
+
+ $.fn.button = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('button')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('button', (data = new Button(this, options)))
+ if (option == 'toggle') data.toggle()
+ else if (option) data.setState(option)
+ })
+ }
+
+ $.fn.button.defaults = {
+ loadingText: 'loading...'
+ }
+
+ $.fn.button.Constructor = Button
+
+
+ /* BUTTON DATA-API
+ * =============== */
+
+ $(function () {
+ $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
+ $(e.target).button('toggle')
+ })
+ })
+
+}( window.jQuery )
+
+/* =============================================================
+ * bootstrap-collapse.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#collapse
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+!function( $ ){
+
+ "use strict"
+
+ var Collapse = function ( element, options ) {
+ this.$element = $(element)
+ this.options = $.extend({}, $.fn.collapse.defaults, options)
+
+ if (this.options["parent"]) {
+ this.$parent = $(this.options["parent"])
+ }
+
+ this.options.toggle && this.toggle()
+ }
+
+ Collapse.prototype = {
+
+ constructor: Collapse
+
+ , dimension: function () {
+ var hasWidth = this.$element.hasClass('width')
+ return hasWidth ? 'width' : 'height'
+ }
+
+ , show: function () {
+ var dimension = this.dimension()
+ , scroll = $.camelCase(['scroll', dimension].join('-'))
+ , actives = this.$parent && this.$parent.find('.in')
+ , hasData
+
+ if (actives && actives.length) {
+ hasData = actives.data('collapse')
+ actives.collapse('hide')
+ hasData || actives.data('collapse', null)
+ }
+
+ this.$element[dimension](0)
+ this.transition('addClass', 'show', 'shown')
+ this.$element[dimension](this.$element[0][scroll])
+
+ }
+
+ , hide: function () {
+ var dimension = this.dimension()
+ this.reset(this.$element[dimension]())
+ this.transition('removeClass', 'hide', 'hidden')
+ this.$element[dimension](0)
+ }
+
+ , reset: function ( size ) {
+ var dimension = this.dimension()
+
+ this.$element
+ .removeClass('collapse')
+ [dimension](size || 'auto')
+ [0].offsetWidth
+
+ this.$element.addClass('collapse')
+ }
+
+ , transition: function ( method, startEvent, completeEvent ) {
+ var that = this
+ , complete = function () {
+ if (startEvent == 'show') that.reset()
+ that.$element.trigger(completeEvent)
+ }
+
+ this.$element
+ .trigger(startEvent)
+ [method]('in')
+
+ $.support.transition && this.$element.hasClass('collapse') ?
+ this.$element.one($.support.transition.end, complete) :
+ complete()
+ }
+
+ , toggle: function () {
+ this[this.$element.hasClass('in') ? 'hide' : 'show']()
+ }
+
+ }
+
+ /* COLLAPSIBLE PLUGIN DEFINITION
+ * ============================== */
+
+ $.fn.collapse = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('collapse')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('collapse', (data = new Collapse(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.collapse.defaults = {
+ toggle: true
+ }
+
+ $.fn.collapse.Constructor = Collapse
+
+
+ /* COLLAPSIBLE DATA-API
+ * ==================== */
+
+ $(function () {
+ $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
+ var $this = $(this), href
+ , target = $this.attr('data-target')
+ || e.preventDefault()
+ || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
+ , option = $(target).data('collapse') ? 'toggle' : $this.data()
+ $(target).collapse(option)
+ })
+ })
+
+}( window.jQuery )
+
+/* ==========================================================
+ * bootstrap-carousel.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#carousel
+ * ==========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function( $ ){
+
+ "use strict"
+
+ /* CAROUSEL CLASS DEFINITION
+ * ========================= */
+
+ var Carousel = function (element, options) {
+ this.$element = $(element)
+ this.options = $.extend({}, $.fn.carousel.defaults, options)
+ this.options.slide && this.slide(this.options.slide)
+ }
+
+ Carousel.prototype = {
+
+ cycle: function () {
+ this.interval = setInterval($.proxy(this.next, this), this.options.interval)
+ return this
+ }
+
+ , to: function (pos) {
+ var $active = this.$element.find('.active')
+ , children = $active.parent().children()
+ , activePos = children.index($active)
+ , that = this
+
+ if (pos > (children.length - 1) || pos < 0) return
+
+ if (this.sliding) {
+ return this.$element.one('slid', function () {
+ that.to(pos)
+ })
+ }
+
+ if (activePos == pos) {
+ return this.pause().cycle()
+ }
+
+ return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
+ }
+
+ , pause: function () {
+ clearInterval(this.interval)
+ return this
+ }
+
+ , next: function () {
+ if (this.sliding) return
+ return this.slide('next')
+ }
+
+ , prev: function () {
+ if (this.sliding) return
+ return this.slide('prev')
+ }
+
+ , slide: function (type, next) {
+ var $active = this.$element.find('.active')
+ , $next = next || $active[type]()
+ , isCycling = this.interval
+ , direction = type == 'next' ? 'left' : 'right'
+ , fallback = type == 'next' ? 'first' : 'last'
+ , that = this
+
+ this.sliding = true
+
+ isCycling && this.pause()
+
+ $next = $next.length ? $next : this.$element.find('.item')[fallback]()
+
+ if (!$.support.transition && this.$element.hasClass('slide')) {
+ this.$element.trigger('slide')
+ $active.removeClass('active')
+ $next.addClass('active')
+ this.sliding = false
+ this.$element.trigger('slid')
+ } else {
+ $next.addClass(type)
+ $next[0].offsetWidth // force reflow
+ $active.addClass(direction)
+ $next.addClass(direction)
+ this.$element.trigger('slide')
+ this.$element.one($.support.transition.end, function () {
+ $next.removeClass([type, direction].join(' ')).addClass('active')
+ $active.removeClass(['active', direction].join(' '))
+ that.sliding = false
+ setTimeout(function () { that.$element.trigger('slid') }, 0)
+ })
+ }
+
+ isCycling && this.cycle()
+
+ return this
+ }
+
+ }
+
+
+ /* CAROUSEL PLUGIN DEFINITION
+ * ========================== */
+
+ $.fn.carousel = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('carousel')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('carousel', (data = new Carousel(this, options)))
+ if (typeof option == 'number') data.to(option)
+ else if (typeof option == 'string' || (option = options.slide)) data[option]()
+ else data.cycle()
+ })
+ }
+
+ $.fn.carousel.defaults = {
+ interval: 5000
+ }
+
+ $.fn.carousel.Constructor = Carousel
+
+
+ /* CAROUSEL DATA-API
+ * ================= */
+
+ $(function () {
+ $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
+ var $this = $(this), href
+ , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+ , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
+ $target.carousel(options)
+ e.preventDefault()
+ })
+ })
+
+}( window.jQuery )
+
+/* =============================================================
+ * bootstrap-typeahead.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#typeahead
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+!function( $ ){
+
+ "use strict"
+
+ var Typeahead = function ( element, options ) {
+ this.$element = $(element)
+ this.options = $.extend({}, $.fn.typeahead.defaults, options)
+ this.matcher = this.options.matcher || this.matcher
+ this.sorter = this.options.sorter || this.sorter
+ this.highlighter = this.options.highlighter || this.highlighter
+ this.$menu = $(this.options.menu).appendTo('body')
+ this.source = this.options.source
+ this.shown = false
+ this.listen()
+ }
+
+ Typeahead.prototype = {
+
+ constructor: Typeahead
+
+ , select: function () {
+ var val = this.$menu.find('.active').attr('data-value')
+ this.$element.val(val)
+ return this.hide()
+ }
+
+ , show: function () {
+ var pos = $.extend({}, this.$element.offset(), {
+ height: this.$element[0].offsetHeight
+ })
+
+ this.$menu.css({
+ top: pos.top + pos.height
+ , left: pos.left
+ })
+
+ this.$menu.show()
+ this.shown = true
+ return this
+ }
+
+ , hide: function () {
+ this.$menu.hide()
+ this.shown = false
+ return this
+ }
+
+ , lookup: function (event) {
+ var that = this
+ , items
+ , q
+
+ this.query = this.$element.val()
+
+ if (!this.query) {
+ return this.shown ? this.hide() : this
+ }
+
+ items = $.grep(this.source, function (item) {
+ if (that.matcher(item)) return item
+ })
+
+ items = this.sorter(items)
+
+ if (!items.length) {
+ return this.shown ? this.hide() : this
+ }
+
+ return this.render(items.slice(0, this.options.items)).show()
+ }
+
+ , matcher: function (item) {
+ return ~item.toLowerCase().indexOf(this.query.toLowerCase())
+ }
+
+ , sorter: function (items) {
+ var beginswith = []
+ , caseSensitive = []
+ , caseInsensitive = []
+ , item
+
+ while (item = items.shift()) {
+ if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
+ else if (~item.indexOf(this.query)) caseSensitive.push(item)
+ else caseInsensitive.push(item)
+ }
+
+ return beginswith.concat(caseSensitive, caseInsensitive)
+ }
+
+ , highlighter: function (item) {
+ return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
+ return '<strong>' + match + '</strong>'
+ })
+ }
+
+ , render: function (items) {
+ var that = this
+
+ items = $(items).map(function (i, item) {
+ i = $(that.options.item).attr('data-value', item)
+ i.find('a').html(that.highlighter(item))
+ return i[0]
+ })
+
+ items.first().addClass('active')
+ this.$menu.html(items)
+ return this
+ }
+
+ , next: function (event) {
+ var active = this.$menu.find('.active').removeClass('active')
+ , next = active.next()
+
+ if (!next.length) {
+ next = $(this.$menu.find('li')[0])
+ }
+
+ next.addClass('active')
+ }
+
+ , prev: function (event) {
+ var active = this.$menu.find('.active').removeClass('active')
+ , prev = active.prev()
+
+ if (!prev.length) {
+ prev = this.$menu.find('li').last()
+ }
+
+ prev.addClass('active')
+ }
+
+ , listen: function () {
+ this.$element
+ .on('blur', $.proxy(this.blur, this))
+ .on('keypress', $.proxy(this.keypress, this))
+ .on('keyup', $.proxy(this.keyup, this))
+
+ if ($.browser.webkit || $.browser.msie) {
+ this.$element.on('keydown', $.proxy(this.keypress, this))
+ }
+
+ this.$menu
+ .on('click', $.proxy(this.click, this))
+ .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
+ }
+
+ , keyup: function (e) {
+ e.stopPropagation()
+ e.preventDefault()
+
+ switch(e.keyCode) {
+ case 40: // down arrow
+ case 38: // up arrow
+ break
+
+ case 9: // tab
+ case 13: // enter
+ if (!this.shown) return
+ this.select()
+ break
+
+ case 27: // escape
+ this.hide()
+ break
+
+ default:
+ this.lookup()
+ }
+
+ }
+
+ , keypress: function (e) {
+ e.stopPropagation()
+ if (!this.shown) return
+
+ switch(e.keyCode) {
+ case 9: // tab
+ case 13: // enter
+ case 27: // escape
+ e.preventDefault()
+ break
+
+ case 38: // up arrow
+ e.preventDefault()
+ this.prev()
+ break
+
+ case 40: // down arrow
+ e.preventDefault()
+ this.next()
+ break
+ }
+ }
+
+ , blur: function (e) {
+ var that = this
+ e.stopPropagation()
+ e.preventDefault()
+ setTimeout(function () { that.hide() }, 150)
+ }
+
+ , click: function (e) {
+ e.stopPropagation()
+ e.preventDefault()
+ this.select()
+ }
+
+ , mouseenter: function (e) {
+ this.$menu.find('.active').removeClass('active')
+ $(e.currentTarget).addClass('active')
+ }
+
+ }
+
+
+ /* TYPEAHEAD PLUGIN DEFINITION
+ * =========================== */
+
+ $.fn.typeahead = function ( option ) {
+ return this.each(function () {
+ var $this = $(this)
+ , data = $this.data('typeahead')
+ , options = typeof option == 'object' && option
+ if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
+ if (typeof option == 'string') data[option]()
+ })
+ }
+
+ $.fn.typeahead.defaults = {
+ source: []
+ , items: 8
+ , menu: '<ul class="typeahead dropdown-menu"></ul>'
+ , item: '<li><a href="#"></a></li>'
+ }
+
+ $.fn.typeahead.Constructor = Typeahead
+
+
+ /* TYPEAHEAD DATA-API
+ * ================== */
+
+ $(function () {
+ $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
+ var $this = $(this)
+ if ($this.data('typeahead')) return
+ e.preventDefault()
+ $this.typeahead($this.data())
+ })
+ })
+
+}( window.jQuery )
diff --git a/doc/5.1.x/resources/custom.css b/doc/5.1.x/resources/custom.css
new file mode 100644
index 0000000..21ea222
--- /dev/null
+++ b/doc/5.1.x/resources/custom.css
@@ -0,0 +1,175 @@
+/*
+ Sections padding customizations.
+*/
+body {
+ background-color: #fff;
+ width: 1200px;
+ margin: 0 auto;
+ padding-bottom: 30px;
+ color: #383838;
+}
+
+@media (max-width : 1224px) {
+ body {
+ background-color: #fff;
+ width: 690px;
+ margin: 0 auto;
+ padding-bottom: 30px;
+ color: #383838;
+}
+
+img {
+ max-width: 70%;
+ }
+}
+
+a:hover {
+ color: #383838;
+}
+
+h1,h2,h3,h4,h5 {
+ padding: 12px 0;
+ color: #000;
+}
+
+p,dl {
+
+}
+
+ul,ol {
+
+}
+
+ul ul {
+ padding-left: 15px;
+}
+
+li {
+ line-height: 22px;
+}
+
+
+ol ol {
+ padding-left: 20px;
+}
+
+ol {
+ margin: 0 0 30px 0;
+}
+
+table {
+ margin-left: 50px;
+}
+
+img {
+ box-shadow: 0 2px 6px #999;
+ margin: 1.5em auto 3em auto;
+ display: block;
+}
+
+pre {
+ left: 50px;
+ width: 90%;
+ position: relative;
+}
+
+/*
+ Color customizations.
+*/
+td,th {
+ border: 1px solid #ddd;
+}
+
+.toc {
+ margin: 10px 0;
+ padding: 10px 30px;
+ border: 1px solid #ddd;
+}
+
+ol li {
+
+}
+
+code,pre {
+ color: #25587E;
+}
+
+/*
+ Welcome page & header customizations.
+*/
+#header {
+ width: inherit;
+ height: 70px;;
+ padding: 20px 0 0 0;
+ margin-bottom: 50px;
+}
+
+.clear {
+ clear: both;
+}
+
+#logo {
+ position: relative;
+ background: url("images/logo.png") no-repeat;
+ display: block;
+ height: 70px;
+ width: 229px;
+}
+
+#logo img {
+ width: 190px;
+ height: auto;
+ box-shadow: none !important;
+ border: none;
+ margin: 0 !important;
+}
+
+.visit a {
+ display: block;
+ width: 180px;
+ height: 35px;
+ text-align: center;
+ color: #fff;
+ background-color: #7269a4;
+ font-size: 14px;
+ margin: 30px 0 0 0;
+ line-height: 35px;
+ font-weight: bold;
+ letter-spacing: 1px;
+}
+
+.visit a:hover {
+ background-color: #be1a78;
+}
+
+.col1,.col2 {
+ display: 0;
+ margin: 20px 0;
+ padding: 0;
+ border: none;
+}
+
+.col1 {
+ width: 40%;
+}
+
+.col2 {
+ width: 60%;
+}
+
+.left {
+ float: left !important;
+}
+
+.right {
+ float: right !important;
+}
+
+code {
+ background-color: #fafafc !important;
+ border: none !important;
+}
+
+.label-danger {
+ background-color: #d9534f;
+}
\ No newline at end of file
diff --git a/doc/5.1.x/resources/images/logo.png b/doc/5.1.x/resources/images/logo.png
new file mode 100644
index 0000000..003ec55
--- /dev/null
+++ b/doc/5.1.x/resources/images/logo.png
Binary files differ
diff --git a/doc/5.1.x/resources/images/screenshot.png b/doc/5.1.x/resources/images/screenshot.png
new file mode 100644
index 0000000..322280b
--- /dev/null
+++ b/doc/5.1.x/resources/images/screenshot.png
Binary files differ
diff --git a/doc/5.1.x/specifier/Sirius Specifier Manual.html b/doc/5.1.x/specifier/Sirius Specifier Manual.html
new file mode 100644
index 0000000..33138e4
--- /dev/null
+++ b/doc/5.1.x/specifier/Sirius Specifier Manual.html
@@ -0,0 +1,82 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Sirius Specifier Manual</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusSpecifierManual">Sirius Specifier Manual</h1>
+ <p>This document describes how to create your own designers using Sirius. To learn how to
+ <strong>
+ <em>use</em>
+ </strong> existing designers, refer to the
+ <a href="../user/Sirius%20User%20Manual.html">Sirius User Manual</a> .
+ </p>
+ <p>You will find the following sections:</p>
+ <ul>
+ <li>
+ <a href="general/Specifying_Viewpoints.html">
+ <strong>Viewpoints</strong>
+ </a> gives a general overview of what viewpoints are and how they are specified, tested and deployed.
+ </li>
+ <li>The next sections are specific to a kind of representation supported by Sirius:
+ <ul>
+ <li>
+ <a href="diagrams/Diagrams.html">
+ <strong>Diagrams</strong>
+ </a> describes how to specify general graphical modelers.
+ </li>
+ <li>
+ <a href="sequences/Sequence%20Diagrams.html">
+ <strong>Sequence Diagrams</strong>
+ </a> are a special case of diagram with many peculiarities and specific kinds of tools, which are detailed here.
+ </li>
+ <li>
+ <a href="tables/Tables.html">
+ <strong>Tables</strong>
+ </a> covers how to specify both edition tables and matrix-like cross-tables.
+ </li>
+ <li>
+ <a href="trees/Trees.html">
+ <strong>Trees</strong>
+ </a> shows how to create tree-like modelers for a hierarchical view of data.
+ </li>
+ <li>
+ <a href="properties/Properties_View_Description.html">
+ <strong>Properties View</strong>
+ </a> shows how to define custom properties views for your modelers.
+ </li>
+ </ul>
+ </li>
+ <li>
+ <a href="general/Model_Operations.html">
+ <strong>Model Operations</strong>
+ </a> describes the small language which can be used throughout
+ <a href="../Glossary.html#VSM">
+ <em>Viewpoint Specification Models</em>
+ </a> to describe behavior (for example for tools).
+ </li>
+ <li>
+ <a href="general/Colors.html">
+ <strong>Colors</strong>
+ </a> explains how colors can be specified for all kinds of representations.
+ </li>
+ <li>
+ <a href="general/Writing_Queries.html">
+ <strong>Queries and Interpreted Expressions</strong>
+ </a> explains the general rules to follow to write the expressions used inside
+ <a href="../Glossary.html#VSM">
+ <em>Viewpoint Specification Models</em>
+ </a>, and the various languages supported.
+ </li>
+ </ul>
+ <p>For more information on Sirius, please refer to the
+ <a href="../user/Sirius%20User%20Manual.html">
+ <strong>Sirius User Manual</strong>
+ </a>, which describes how end-users can use the designers you created.
+ </p>
+ <p>In addition to this documentation, see also the <a href="http://www.eclipse.org/sirius" target="_blank">main project site</a>: and the <a href="http://wiki.eclipse.org/Sirius" target="_blank">top-level wiki page</a>.</p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/cheatsheets/CreatingViewpointSpecification.xml b/doc/5.1.x/specifier/cheatsheets/CreatingViewpointSpecification.xml
new file mode 100644
index 0000000..fa34009
--- /dev/null
+++ b/doc/5.1.x/specifier/cheatsheets/CreatingViewpointSpecification.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<cheatsheet title="Creating a viewpoint specification project">
+ <intro>
+ <description>Learn how to create a minimal working viewpoint specification project that can be enriched later.</description>
+ </intro>
+ <item title="Create the project" dialog="true" skip="false">
+ <description>First, you need to create a Viewpoint Specification Project.</description>
+
+ <subitem label="Go to the 'Sirius' perspective." />
+ <subitem label="In the 'Model Explorer' view, right-click and select New > Viewpoint Specification Project." />
+ <subitem label="Enter the name of the new project and hit 'Next'. The convention is to use the name of the main domain model's plug-in, followed by '.design'." />
+ <subitem label="On the next page, enter the name of the Viewpoint Specification Model file, and then 'Finish'." />
+ </item>
+ <item title="Fill the Viewpoint Specification Model" dialog="true" skip="false">
+ <description>
+ The project created is a complete Eclipse plug-in project, and contains an empty Viewpoint Specification Model. Refer to the Sirius Specifier Manual to learn of to specify viewpoints and representations. The basic idea is to:
+ </description>
+ <subitem label="Create one or more Viewpoint element inside the VSM." />
+ <subitem label="Inside each Viewpoint, create one or more representation descriptions, for example a diagram description." />
+ <subitem label="Define the structure of your representation, i.e. what elements should be visible and how should they be organized." />
+ <subitem label="Define the style of your representation, i.e. for each kind of element it will show, what shape, color, etc. should it have." />
+ <subitem label="Finally, define the behavior of your representation by associating tools to each kind of element." />
+ </item>
+ <item title="Test and refine your representations" dialog="true" skip="false">
+ <description>
+ Once you have a basic representation defined, even if it is just a skeleton with no behavior, start to test it and refine the definition. In most cases, it is possible to test your VSMs dynamically, with no need to compile or deploy anything.
+ </description>
+ <subitem label="In the same workspace in which you are defining your VSM, create a Modeling project with a sample domain model." />
+ <subitem label="On the Modeling project, enable the Viewpoint which you are currently specifying." />
+ <subitem label="Create an instance of the representation your are developing." />
+ <subitem label="Keep both the representation and the VSM opened. When you change and save your VSM, the representation will automatically be updated to take the new, improved definition into account." />
+ <subitem label="Continue to develop your representation(s) interactively and interactively until you are satisfied. "/>
+ </item>
+ <item title="Test your representation in deployed mode" dialog="true" skip="false">
+ <description>
+ When you are satisfied with your viewpoints and representations definitions, you can test them in a non-dynamic setting, closer to how your users will experience it.
+ </description>
+ <subitem label="Create a new 'Eclipse Application' launch configuration using the 'Run > Run Configurations...' menu." />
+ <subitem label="Run the launch configuration, and test your viewpoints." />
+ </item>
+ <item title="Deploy your viewpoints" dialog="true" skip="false">
+ <description>
+ When development is finished, you can build and deploy your Viewpoint Specification Project like any other Eclipse plug-in. Juste make sure the project's dependencies include everything you need, in particular the domain model plug-ins and the Sirius plug-ins which provide support for the query language(s) you used in your VSM.
+ </description>
+ </item>
+</cheatsheet>
diff --git a/doc/5.1.x/specifier/diagrams/Diagrams.html b/doc/5.1.x/specifier/diagrams/Diagrams.html
new file mode 100644
index 0000000..f2786d9
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/Diagrams.html
@@ -0,0 +1,1952 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Diagrams</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SpecifyingDiagramEditors">Specifying Diagram Editors</h1>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#SpecifyingDiagramEditors">Specifying Diagram Editors</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#diagram_description">Diagram Description</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#layout">Layout Configuration</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#layers_graphical_elements">Layers and Graphical Elements</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#layers">Layers</a>
+ </li>
+ <li>
+ <a href="#graphical_elements">Graphical Elements and Mappings</a>
+ </li>
+ <li>
+ <a href="#nodes">Nodes</a>
+ </li>
+ <li>
+ <a href="#containers">Containers</a>
+ </li>
+ <li>
+ <a href="#bordered_nodes">Bordered Nodes</a>
+ </li>
+ <li>
+ <a href="#edges">Edges</a>
+ </li>
+ <li>
+ <a href="#decorations">Decorations</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#styling">Styling</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#conditional_styles">Conditional Styles</a>
+ </li>
+ <li>
+ <a href="#label_style">Label Properties</a>
+ </li>
+ <li>
+ <a href="#size">Size Properties</a>
+ </li>
+ <li>
+ <a href="#colors">Colors</a>
+ </li>
+ <li>
+ <a href="#authorizedsides">Authorized Sides</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#tools">Tools</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#tools_organization">Tools Organization</a>
+ </li>
+ <li>
+ <a href="#tools_specification">Tools Specification</a>
+ </li>
+ <li>
+ <a href="#tools_reference">Tools Reference</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#filters">Filters</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#mapping_filter">Mapping Filter</a>
+ </li>
+ <li>
+ <a href="#variable_filter">Variable Filter</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#validation">Validation Rules</a>
+ </li>
+ <li>
+ <a href="#extensibility">Diagram Extensibility Features</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#diagram_extension">Diagram Extensions</a>
+ </li>
+ <li>
+ <a href="#mapping_imports">Mapping Imports</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#customization">Diagram Styles Customization</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#enum_customization">Style Customization of an Enumerator property </a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="introduction">Introduction</h2>
+ <p>Sirius supports the definition of sophisticated graphical modelers, with support for many features like filters, layers, drag’n’drop, complex styling etc.</p>
+ <p>Diagrams support several kinds of graphical constructs: simple nodes, containers (which can contain other nodes or containers), lists, bordered nodes (nodes which appear on the side of other elements, typically to represent ports), and edges between all of these. Each kind of element supports a rich set of possible styles (shape and color).</p>
+ <p>As the specifier of Sirius diagrams, you have total control on how the elements in your semantic models are
+ <em>represented</em> using the constructs provided by Sirius, and how they
+ <em>behave</em>. In particular, this means the structure of the graphical elements shown on a diagram (which element contains which, how they are connected) does not have to match the “physical” structure of the semantic model being represented. The two are completely de-correlated, and you can choose to represent your semantic models in ways which make sense from various point of views.
+ </p>
+ <h2 id="diagram_description">Diagram Description</h2>
+ <p>Diagrams are configured by creating a
+ <em>Diagram Description</em> element (inside a
+ <em>Viewpoint</em>) and its sub-elements (which describe the layers, graphical elements and tools).
+ </p>
+ <p>Like many elements inside a
+ <a href="../../Glossary.html#VSM">
+ <em>VSM</em>
+ </a>,
+ <em>Diagram Description</em> have a mandatory
+ <em>Id</em>, which should be unique and stable across revisions of the diagram specification, and an optional
+ <em>Label</em> which is used for presentation purpose (i.e. it is the name visible to end-users). If no
+ <em>Label</em> is specified, the
+ <em>Id</em> is used for presentation. Note that changing the
+ <em>Id</em> will break existing diagrams which were created using the previous version; changing the
+ <em>Label</em> is safe.
+ </p>
+ <p>The mandatory
+ <em>Domain Class</em> attribute is the type of semantic element which are represented by the diagram. In the
+ <em>Model Explorer</em>, end-users will be able to create new instances of this diagram on semantic elements of this type (assuming the corresponding viewpoint is enabled in the
+ <em>Modeling Project</em>). The syntax for the domain class name can be the basic name, like
+ <code>Package</code>, a qualified name using name of the EMF EPackage which defines the type, like
+ <code>uml::Package</code>, or a fully qualified URI like
+ <code>http://www.eclipse.org/uml2/3.0.0/UML#//Package</code>.
+ </p>
+ <p>By default, new diagrams can be created on
+ <em>any</em> instance of the
+ <em>Domain Class</em>. You can use the
+ <em>Precondition Expression</em> to change this. If such an expression is specified, it will be evaluated in the context of the semantic element the user has selected, and only if the expression returns
+ <code>true</code> will the user be able to create a new diagram on this element.
+ </p>
+ <p>The default title for newly created diagram can be specified using the
+ <em>Title expression</em> (
+ <em>Advanced</em> category), which is evaluated in the context of the semantic element on which the diagram is created, and should return a string. If the expression is not specified, the default title is the label of the diagram description (of its
+ <em>Id</em> if no
+ <em>Label</em> is set) prefixed with the string
+ <code>"new "</code> (e.g.
+ <code>new Package Contents</code>).
+ </p>
+ <p>It is recommended that the
+ <em>Diagram Description</em> be explicitly associated with the meta-model(s) of the semantic elements it will represent. You can add referenced meta-models from different sources in the
+ <em>Metamodels</em> property section of the
+ <em>Diagram Description</em>. Sirius will work even without this association, but setting it explicitly will give you better feedback when validating your
+ <a href="../../Glossary.html#VSM">
+ <em>VSM</em>
+ </a>.
+ </p>
+ <p>The
+ <em>Initialization</em> and
+ <em>Show on startup</em> flags control whether diagram instances are created and/or opened automatically without user intervention. If
+ <em>Initialization</em> is set, then when the viewpoint which contains this diagram description is enabled, instances of this diagram description will be automatically created on all compatible semantic elements. If
+ <em>Show on startup</em> is set, then when a modeling project is opened which contains instances of this diagram description, they will be opened: if only one such representation exist, it will be opened automatically; if there are more than one, a dialog box will appear to allow the user to select which one(s) to open.
+ <strong>WARNING</strong>: Then
+ <em>Initialization</em> flag can have a negative impact on performance: if it is set on a given diagram, then when the user enables the viewpoint which defines this diagram Sirius will attempt to find all possible elements in the semantic model on which it may be possible to create such a diagram. This can take a long time on big semantic models.
+ </p>
+ <p>If
+ <em>Enable Popup Bars</em> flag is set, then when the end-user leaves the mouse pointer still on a diagram (or diagram element) for a small time, a
+ <em>popup bar</em> will appear with shortcut buttons to all the tools which can be applied in this context. It can be useful to create elements without going to the palette to select tools, but it can also become visually distracting if too many tools are available in the popup bar.
+ </p>
+ <p>The content of the
+ <em>Diagram Description</em> is mostly made of
+ <a href="#graphical_elements">graphical elements mappings</a>, organized in
+ <a href="#layers">layers</a>, and their associated
+ <a href="#tools">tools</a>. In addition, it can also contain
+ <a href="#validation">validation rules</a>,
+ <a href="#filters">filters</a> and
+ <a href="#layout">layout configuration</a> information.
+ </p>
+ <p>Note that the
+ <em>Window Title</em> label and
+ <em>Message</em> label are
+ <a href="../general/Specifying_Viewpoints.html#translatable_messages">
+ <em>Translatable Messages</em>
+ </a> and can therefore be localized.
+ </p>
+ <h3 id="layout">Layout Configuration</h3>
+ <p>Sirius provides a default algorithm to perform an automatic layout of all the graphical elements on a diagram (excluding
+ <a href="../../user/diagrams/Diagrams.html#diagram_element_pinning">pinned elements</a> ). If the default algorithm does not fit your needs, you can configure some parameters or request for alternate algorithms (currently only one) directly inside the VSM.
+ </p>
+ <p>The
+ <em>Composite Layout</em> enables one to specify the
+ <code>padding</code> between elements and the
+ <code>direction</code> for the default algorithm.
+ </p>
+ <p>The
+ <em>Ordered Tree Layout</em> enables one to lay out nodes as an ordered tree. The manner to retrieve children for each node should be specified.
+ </p>
+ <p>NOTE: these layout algorithms manage only nodes connected by edges, other nodes are layouted from left to right as usual.</p>
+ <p>If you need to go beyond that, you can provide your own layout algorithm programmatically (see the
+ <a href="../../developer/Sirius%20Developer%20Manual.html">developer documentation</a> for details).
+ </p>
+ <h2 id="layers_graphical_elements">Layers and Graphical Elements</h2>
+ <p>This section describes how to specify the graphical elements which should appear on your diagram, and how to organize them.</p>
+ <h3 id="layers">Layers</h3>
+ <p>All the graphical elements and tools on a Sirius diagram are part of a
+ <em>Layer</em>. Every diagram
+ <em>must</em> have a default layer, which is always enabled, and zero or more
+ <em>additional layers</em> that the end-user can enable or disable following the optional flag value. Note that the default layer is created at diagram creation. When a layer is enabled, all the graphical elements and tools it defines are also enabled.
+ </p>
+ <p>The elements which are defined in different layers can interact and reference themselves. For example, it is possible to define a type of edge (connection) between elements which are defined in different layers; the edges will only be visible if all the concerned layers are enabled: the ones which define the source graphical element, the one for the target graphical element, and the one for the edge itself.</p>
+ <p>Layers are defined directly inside the
+ <em>Diagram Description</em> element. You must have exactly one
+ <em>Default Layer</em> (whose name does not matter), and as many
+ <em>Additional Layers</em> as you need.
+ </p>
+ <ul>
+ <li>Additional layers have an
+ <em>Optional</em> flag (unset by default) that specify whether the additional layer can be disabled (if true) or not by the end-user.
+ </li>
+ <li>The
+ <em>Active by default</em> flag, if it set (unset by default), the layer will be automatically enabled when the user creates a new diagram of this type. This flag has no effect in the case where the optional flag is unset, the layer become mandatory and cannot be disabled by the end-user.
+ </li>
+ </ul>
+ <p>The
+ <em>Label</em> (or
+ <em>Id</em> if not label is set) of an optional layer is used in the drop-down menu available to users in the diagram’s tabbar, from which they can enable or disable them. Mandatory layers are not visible in this menu. The
+ <em>Layers</em> can
+ <em>contain</em> graphical elements and tools definitions (as described below), but they can also
+ <em>reuse</em> tools and mappings (graphical elements definitions) which are defined in other layers using the
+ <em>Reused Tools</em> and
+ <em>Reused Mappings</em> in the
+ <em>Advanced</em> category. If a layer
+ <em>L1</em> reuses elements defined in another layer
+ <em>L2</em>, these elements will be enabled whenever
+ <em>L1</em> is enabled, even if
+ <em>L2</em> is not. However if both
+ <em>L1</em> and
+ <em>L2</em> are enabled, the elements are enabled only once (i.e. graphical elements do not appear once for
+ <em>L1</em> and once for
+ <em>L2</em>).
+ </p>
+ <h4 id="Transientlayer">Transient layer</h4>
+ <p>A transient layer is a layer that contains only
+ <em>Decoration Description</em> and/or tools.
+ <br/>When applying a transient layer, the diagram is
+ <strong>never</strong> modified. Tools are displayed in the palette and decorations are refreshed in opened editors.
+ </p>
+ <p>Note that the
+ <em>Active by default</em> flag have a different meaning for transient layer. If
+ <em>Active by default</em> is set, the transient layer will be automatically enabled when the user
+ <strong>opens</strong> a diagram (and not specially when he creates a new diagram).
+ </p>
+ <h3 id="graphical_elements">Graphical Elements and Mappings</h3>
+ <p>This section describes the different kinds of graphical elements supported on Sirius diagrams and the general principle of how they are specified inside the VSM, through the notion of
+ <em>mapping</em>.
+ </p>
+ <p>
+ <strong>Graphical Vocabulary.</strong> Sirius diagrams can contain several different types of graphical elements, which are described inside the
+ <em>Layer</em> elements. These are:
+ </p>
+ <ul>
+ <li>
+ <em>Nodes</em> for elements which can not contain other elements;
+ </li>
+ <li>
+ <em>Containers</em> for elements which can contain other elements, including other containers;
+ </li>
+ <li>
+ <em>List containers</em> (or just
+ <em>Lists</em>), which are a special kind of containers. They present their direct sub-elements as a vertical list of text items (with an optional icon). List containers are not recursive.
+ </li>
+ <li>
+ <em>Region Container</em>, which are a special kind of containers. They present their direct sub-container as a vertical or horizontal stack of compartments also called
+ <em>Regions</em> in Sirius. Region containers are not recursive and can not contain nodes as direct children.
+ </li>
+ <li>
+ <em>Region</em>, which are a special kind of container. They are compartments of a container, organized vertically or horizontally regarding the configuration of their parent Region container. They are
+ <em>Containers</em> or
+ <em>List Containers</em> but can not be themselves a Region container.
+ </li>
+ <li>
+ <em>Bordered nodes</em> are like normal nodes, but instead of appearing directly on the diagram or inside a container, they are placed on the border of another element (node, container, list, region container but not region). This is useful to represent things like communication ports.
+ </li>
+ <li>Finally,
+ <em>Edges</em> are connections between a source and target element. The source and target element can be any of the other kind of graphical element mentioned above. It is also possible for the source or the target of an edge (but not both) to be another edge.
+ </li>
+ </ul>
+ <table class="table table-striped table-condensed">
+ <tr>
+ <td>
+ <img border="0" src="images/styles/Graphical_Vocabulary_Node.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Graphical_Vocabulary_Container.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Graphical_Vocabulary_List_Container.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Graphical_Vocabulary_Bordered_Node.png"/>
+ </td>
+ </tr>
+ <tr>
+ <th>Nodes</th>
+ <th>Containers</th>
+ <th>List Containers</th>
+ <th>BorderedNodes</th>
+ </tr>
+ </table>
+ <p id="mappings">
+ <strong>Mappings.</strong> All these graphical elements are described using the concept of a
+ <em>mapping</em> (for example a
+ <em>Node</em> mapping to describe a kind of nodes). A mapping is an element defined inside the VSM which identifies a sub-set of the elements in the semantic model and associates a graphical representation to them: it
+ <em>maps</em> semantic elements onto some graphical notation. At runtime, each active mapping (i.e. defined in a layer which is enabled) will produce zero or more graphical elements on the diagram, depending on how many semantic elements currently match the mapping’s definition. In the default functioning mode, whenever the semantic model changes Sirius will automatically re-compute which graphical elements should appear on the diagram according to the active mappings, and create or remove the necessary elements.
+ </p>
+ <p>You can think of the set of mappings defined in a diagram as a description of how to
+ <em>project</em> the concepts in your semantic model onto the graphical language provided by Sirius (nodes, containers, edges...) according to the
+ <em>viewpoint</em> you want the diagram to represent.
+ </p>
+ <p>
+ <strong>Mapping Definition.</strong> The mapping descriptions for all the different types of graphical elements share the same common principles:
+ </p>
+ <ul>
+ <li>Some of the elements of the semantic model are selected, using a combination of mapping configuration attributes (see below). These elements are called
+ <em>targets</em>, and each one has a single graphical diagram element of this type representing it.
+ </li>
+ <li>Each of these diagram elements is also associated to a set of
+ <em>semantic elements</em>: model elements which are logically grouped together and include all the semantically relevant information for the node. By default, the only semantic element of a node is its target, but this can be overridden. This is useful if the meta-model is fine-grained and describes a single logical entity with a group of inter-related model elements: the graphical element will be represent a single
+ <em>target</em> (the main semantic element), but you can also associate to it the other semantically related elements.
+ </li>
+ <li>The graphical aspect of the mapping is defined by a
+ <em>style</em>. Sirius provides a rich set of possible styles, which are described later in this document.
+ </li>
+ <li>Finally, the behavior of the graphical element (how to create it, how it reacts to edition of its label, to drag and drop operations, etc.) are defined by
+ <em>tools</em> associated to the mapping.
+ </li>
+ </ul>
+ <p>Each mapping is defined in a
+ <em>context</em> in the VSM: either directly inside a layer or inside another mapping. At runtime, the corresponding
+ <em>context element</em> would be (respectively) either the target semantic element of the diagram itself, or the target of an instance of the parent mapping. This context element is used as a starting point to determine which instances of a mapping should be created on the diagram:
+ </p>
+ <ol>
+ <li>First, the
+ <em>Semantic Candidates Expression</em> of the mapping is evaluated, starting from the context element. It should return a set (possibly empty) of elements in the semantic model.
+ </li>
+ <li>This list of candidates is then filtered using the
+ <em>Domain Class</em> specified in the mapping: only the candidates which are instance of the specified class are retained.
+ </li>
+ <li>Finally, the optional
+ <em>Precondition Expression</em> of the mapping (in the
+ <em>Advanced</em> category) is evaluated, once for each of the remaining candidate. It should return a boolean value. Only the candidates for which the predicate returns a true value are kept and will actually produce a graphical element on the diagram, with that element as its semantic target.
+ </li>
+ </ol>
+ <p>This order of evaluation should be kept in mind when specifying diagrams. In particular, to avoid performance issues you should:</p>
+ <ul>
+ <li>Limit the number of model elements with
+ <em>Semantic Candidates Expression</em>.
+ </li>
+ <li>Avoid testing instances type in
+ <em>Semantic Candidates Expression</em> (this will be done anyway when filtering the
+ <em>Domain Class</em>).
+ </li>
+ <li>Use the most specific type in
+ <em>Domain Class</em>.
+ </li>
+ <li>Avoid navigation and long computations in
+ <em>Precondition Expression</em>.
+ </li>
+ </ul>
+ <p>
+ <strong>Associated Semantic Elements.</strong> To associate more semantic elements to a graphical element than just its semantic target, you can specify the
+ <em>Associated Elements Expression</em> (in the
+ <em>Advanced</em> category). It will be evaluated for each instance of the mapping in the context of the semantic target, and should return a set of semantic elements. These will be visible to the end-user in the
+ <em>Properties</em> view when the graphical element is selected, and any change on one of these elements will trigger a refresh of the graphical element. This means that if you use properties of other elements than the target to compute an element’s label or conditional style (for example), you should make sure that these other elements appear in the
+ <em>Associated Elements</em>, otherwise the label or style will not be properly refreshed when the elements are modified.
+ </p>
+ <p>
+ <strong>Synchronization.</strong> All mappings have a
+ <em>Synchronization</em> parameter (in the
+ <em>Advanced</em> category) which controls when instances of the mapping are created on the diagram. The possible values are:
+ </p>
+ <ul>
+ <li>
+ <em>Synchronized</em>: It means that when Sirius refreshes the diagram (either automatically or due to an explicit
+ <em>Refresh</em> action from the user), it will ensure that exactly one instance of the mapping exists on the diagram for each compatible semantic target element (as defined by the mapping’s properties). In this mode, if a new semantic element compatible with the mapping is created (even by an action on another representation or a change in the semantic model’s file), the corresponding graphical element will automatically appear on the diagram. Symmetrically, if the semantic element of one of the mapping’s instances is deleted from the model, the graphical element (view) will disappear automatically.
+ </li>
+ <li>
+ <em>Not Synchronized</em>: In this mode, the graphical instances of the mapping are only created and deleted when explicitly requested by a tool (using the
+ <em>Create View</em> and
+ <em>Delete View</em> operations). It means that if a new semantic element compatible with the mapping is created, the corresponding view will not appear on the diagram by default. Symmetrically, if the semantic element of one of the mapping’s instances is deleted from the model, the graphical element (view) will not disappear automatically, but a red cross will appear on it to indicate it represents an element which does not exist anymore. An explicit
+ <em>Refresh</em> operation removes these obsolete graphical elements, but will not create new ones. This mode is useful if you want the user to decide which parts of a big semantic model he wants to see: set the mapping to
+ <em>Unsynchronized</em> and create specific tools to allow the user to reveal progressively the parts of the model which interest him.
+ </li>
+ <li>
+ <em>Unsynchronizable</em>: This is the default. This mode is similar to
+ <em>Synchronized</em> be default, but gives some control to end-users: if they put the whole diagram in
+ <em>Unsynchronized mode</em> (using the context menu on the diagram), all the diagram’s mappings which are
+ <em>Unsynchronizable</em> will behave as if they were
+ <em>Unsynchronized</em>. They will go back to a
+ <em>Synchronized</em> behavior if the user disables the
+ <em>Unsynchronized</em> mode.
+ </li>
+ </ul>
+ <p>
+ <strong>Mapping Imports.</strong> A mapping import is a feature which can be used to
+ <em>specialize</em> (modify) a mapping defined somewhere else (in an other layer, an other graphical representation or an other viewpoint). It is available for Nodes, Containers and Edges. Although it can be used in normal diagram descriptions, its main use case is when defining
+ <a href="#diagram_extension">diagram extensions</a>, so mapping imports are describe in
+ <a href="#mapping_imports">their own section</a>.
+ </p>
+ <h3 id="nodes">Nodes</h3>
+ <p>A
+ <em>Node</em> mapping is used to represent model elements graphically as atomic elements, i.e. elements which can not contain other elements.
+ <em>Node</em> mappings can appear directly inside a layer description, in which case the node will appear directly on the diagram, or inside another element (for example a container). A node mapping which is defined inside another element can be either a
+ <em>sub-node mapping</em>, in which case it will appear inside its parent (which must be a container), or a
+ <em>bordered node mapping</em>, in which case it will appear on the border of its parent (which may be a container or a node, including another bordered node). Bordered node mappings are useful to represent ports.
+ </p>
+ <table class="table table-striped table-condensed">
+ <tr>
+ <td>
+ <img border="0" src="images/styles/Graphical_Vocabulary_Node.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Graphical_Vocabulary_Container.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Graphical_Vocabulary_List_Container.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Graphical_Vocabulary_Bordered_Node.png"/>
+ </td>
+ </tr>
+ <tr>
+ <th>Nodes on a diagram</th>
+ <th>Nodes in container</th>
+ <th>Nodes in containers displayed as lists</th>
+ <th>Nodes on borders</th>
+ </tr>
+ </table>
+ <p>The definition of a node mapping follows the general rules described
+ <a href="#mappings">above</a> to determine the semantic elements for which a node should be created. All the properties available in the
+ <em>Behavior</em> category of the
+ <em>Node</em> mapping configuration allow you to see all the various tools, defined elsewhere in the VSM, which apply to this mapping.
+ </p>
+ <p>A node can not contain sub-nodes, but it can have
+ <em>bordered nodes</em>, which are defined inside the node mapping (
+ <em>New Diagram Element > Bordered Node</em>). You can also
+ <em>reuse</em> node mappings defined elsewhere in the VSM using the
+ <em>Reused Bordered Node Mappings</em> property in the
+ <em>Import</em> category. The effect at runtime is the same as if you had created an equivalent
+ <em>Bordered Node</em> mapping inside the node mapping.
+ </p>
+ <p><div style="display: none">
+ <br/>
+ <strong>TODO</strong> Bordered Node Import
+ <br/></div>
+ </p>
+ <h4 id="node_styles">Node Styles</h4>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including conditional styles. This section only presents the aspects which are specific to nodes.
+ </p>
+ <p>For nodes you can use the following styles:</p>
+ <ul>
+ <li>
+ <em>Square</em>,
+ <em>Diamond</em>,
+ <em>Ellipse</em> to display basic shapes.
+ </li>
+ <li>
+ <em>Basic Shape</em> to represent nodes with predefined shapes provided with the runtime.
+ </li>
+ <li>
+ <em>Note</em> to represent nodes as a square with one folded corner.
+ </li>
+ <li>
+ <em>Gauge</em> to display gauges, for instance progress indicators.
+ </li>
+ <li>
+ <em>Image</em> to represent nodes with an image (from the workspace or from inside a plug-in).
+ </li>
+ <li>
+ <em>Custom Style</em> can be used when none of the predefined styles correspond to your need. Custom style are implemented in Java and use the
+ <code>org.eclipse.sirius.diagram.ui.styleConfigurationProvider</code> extension point.
+ </li>
+ </ul>
+ <table class="table table-striped table-condensed">
+ <tr>
+ <td>
+ <img border="0" src="images/styles/Node_Style_Basic_Square.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Node_Style_Basic_Stroke.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Node_Style_Basic_Triangle.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Node_Style_Basic_Dot.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Node_Style_Basic_Ring.png"/>
+ </td>
+ </tr>
+ <tr>
+ <th>Basic Shape Square</th>
+ <th>Basic Shape Stroke</th>
+ <th>Basic Shape Triangle</th>
+ <th>Basic Shape Dot</th>
+ <th>Basic Shape Ring</th>
+ </tr>
+ </table>
+ <table class="table table-striped table-condensed">
+ <tr>
+ <td>
+ <img border="0" src="images/styles/Node_Style_Square.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Node_Style_Diamond.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Node_Style_Ellipse.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Node_Style_Note.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Node_Style_Gauge.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Node_Style_Image.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Node_Style_Custom.png"/>
+ </td>
+ </tr>
+ <tr>
+ <th>Square</th>
+ <th>Diamond</th>
+ <th>Ellipse</th>
+ <th>Note</th>
+ <th>Gauge</th>
+ <th>Image</th>
+ <th>Custom</th>
+ </tr>
+ </table>
+ <p>Most of the properties used to configure the various styles are self-explanatory. See the
+ <a href="#styling">styles</a> section below for a general discussion. You can also refer to the tool-tips available directly in the editor on the “question mark” icon of each property.
+ </p>
+ <p>
+ <strong>Gauge Style.</strong> The gauge style is more complex than the others and deserves a specific description. It is used to represent nodes as a (set of) gauges, which can be used for example as progress indicators.
+ </p>
+ <p>
+ <img border="0" src="images/styles/mini_Node_Gauge_Vertical.jpg"/>
+ <br/>
+ <img border="0" src="images/styles/mini_Node_Gauge_Horizontal.jpg"/>
+ <br/>
+ <img border="0" src="images/styles/mini_Node_Gauge_Square.jpg"/>
+ </p>
+ <p>In addition to the standard style properties for the label, size and colors, gauges have an
+ <em>Alignment</em> attribute (in the
+ <em>Advanced</em> category) which indicates how the individual gauges are layed out:
+ </p>
+ <ul>
+ <li>
+ <code>VERTICAL</code> The gauges are aligned vertically, from top to bottom.
+ </li>
+ <li>
+ <code>HORIZONTAL</code> The gauges are aligned horizontally, from left to right.
+ </li>
+ <li>
+ <code>SQUARE</code> The gauges are aligned in a square, which may not be complete. Gauges are added from left to right in lines, and lines added from top to bottom.
+ </li>
+ </ul>
+ <p>You can specify the gauge composite’s border color using a color sub-element.</p>
+ <p>Gauge composites need one or more
+ <strong>Gauge Section</strong>, which represent an individual gauge. Each
+ <em>Gauge Section</em> has a
+ <em>Label</em>, a
+ <em>Min</em> and a
+ <em>Max Value Expression</em>, and a
+ <em>Value Expression</em>. The size of the gauge section depends on where the
+ <em>Value Expression</em> sits between the
+ <em>Min</em> (the section is invisible) and the
+ <em>Max</em> (the section occupies all the available space). You can specify each gauge section’s foreground and background colors using color sub-elements.
+ <a href="../general/Colors.html#interpolated_colors">Interpolated colors</a> are particularly suited for gauge sections.
+ </p>
+ <h4 id="node_tools">Node Tools</h4>
+ <p>See the
+ <a href="#tools">tools</a> section for a general presentation of how tools are defined. This section only presents tools which are specific to nodes.
+ </p>
+ <p>
+ <strong>Node Creation.</strong> The only type of tool which is really specific to node mappings is the
+ <em>Node Creation</em> tool, used to create new nodes. These work like all the other creation tools. You simply specify the
+ <em>Node Mappings</em> that this tool can create and specify the behavior of the tool inside the
+ <em>Begin</em> element using all the standard
+ <a href="../general/Model_Operations.html">model operations</a>.
+ </p>
+ <p>By default, your node creation tools will be available on all the graphical elements which can contain an instance of the
+ <em>Node Mappings</em> you specified in the tool, and users will see a “forbidden” sign if they try to apply the tool on an incompatible type of element. You can specify a
+ <em>Precondition</em> to forbid the application of the tool on some of the elements where it would normally be allowed. The precondition is evaluated in the context of the
+ <em>view element</em> on which the user has put the mouse. If it returns a false value, the tool’s application will be forbidden. Symmetrically, you can specify
+ <em>Extra Mappings</em> (
+ <em>Advanced</em> section) on which the tool should be applicable, even though these mapping can not contain nodes of the type you will create. In this case, the node created by the tool will actually appear elsewhere on the diagram, but it can often help usability to allow users to click on related elements.
+ </p>
+ <h3 id="containers">Containers</h3>
+ <p>A
+ <em>Container</em> mapping is used to represent model elements graphically as containers, which can contain sub-elements (including other containers, recursively). A container can also have
+ <em>bordered nodes</em>, which are like normal nodes but appear on the border of the container, for example to represent ports.
+ <em>Container</em> mappings can appear directly inside a layer description, in which case the container will appear directly on the diagram, or inside another container mapping.
+ </p>
+ <p>
+ <img border="0" src="images/styles/Containers_on_diagram_or_another_container.png"/>
+ </p>
+ <p>The definition of a container mapping follows the general rules described
+ <a href="#mappings">above</a> to determine the semantic elements for which a container should be created. All the properties available in the
+ <em>Behavior</em> category of the
+ <em>Container</em> mapping configuration allow you to see all the various tools, defined elsewhere in the VSM, which apply to this mapping.
+ </p>
+ <p>A container can contain
+ <em>sub-containers</em>,
+ <em>sub-nodes</em>, and
+ <em>bordered nodes</em>, all of which are defined inside the container mapping (
+ <em>New Diagram Element > Container</em>,
+ <em>Sub-node</em> and
+ <em>Bordered Node</em>, respectively). You can also
+ <em>reuse</em> node and container mappings defined elsewhere in the VSM in any of these three roles using the corresponding
+ <em>Reused X Mappings</em> properties in the
+ <em>Import</em> category. The effect at runtime is the same as if you had created an equivalent mappings inside the container mapping.
+ </p>
+ <p><div style="display: none">
+ <br/>
+ <strong>TODO</strong> Bordered Node Import, Sub-node import and container import.
+ <br/></div>
+ </p>
+ <p id="list_containers">
+ <strong>List Containers</strong> You can enable a special “list mode” for containers by setting the
+ <em>Children Presentation</em> attribute to
+ <em>List</em> in the mapping configuration. List containers are represented in a special way, in which only the labels of their direct sub-elements (nodes only) are taken into account and presented in a vertical list. When represented as a list, only some of the style attributes (label text, tool-tip, colors) of the container are taken into account. For the list items themselves, only the label text is used.
+ </p>
+ <p>
+ <img border="0" src="images/styles/List_container_with_items.png"/>
+ </p>
+ <p id="compartments">
+ <strong>Compartments</strong> You can enable a special “compartment mode” for containers by setting the
+ <em>Children Presentation</em> attribute to
+ <em>Horizontal Stack</em> or
+ <em>Vertical Stack</em> in the mapping configuration. Region containers presents their children containers and lists as compartments, vertically or horizontally organized. They are sorted following the mapping order and the semantic candidates expression evaluation result of each mapping. The border style attributes of the Region’s styles are used to specify the compartments separators. The other style properties of Region container or Region mapping are used as usual.
+ </p>
+ <p>
+ <img border="0" src="images/styles/Containers_with_compartments.png"/>
+ </p>
+ <p>
+ <em>Warning:</em> The compartment feature has been introduced in Sirius 3.0.0. While working reliably, it has some limitations but you can rely on the improved VSM validation to ensure you are using it in supported modes. Known limitations:
+ </p>
+ <ul>
+ <li>Only the gradient and image style are supported for Region container and Region mappings.</li>
+ <li>The Show/Hide, Hide filter features are disabled on regions (hide filter can be created to the compartment content but not the compartment). The Show/Hide label feature is supported.</li>
+ <li>The move and drag and drop of regions are disabled. Reordering regions can be done by reordering their semantic elements.</li>
+ <li>The resize of compartments might evolve in future versions. The current behavior is to redistribute space between adjacent regions and to resize the first/last region when the region container is resized from top/bottom for a vertical stack and left/right for an horizontal one.</li>
+ <li>A compartment is always considered as auto-sized (except after creation time when it contains no region).</li>
+ <li>The capability to define complex or recursive stack of regions mixing both stack directions has been introduced in Sirius 3.1.0 as an
+ <em>experimental</em> configuration. Some layout-related actions might produce unexpected result. The limitations only concerns the visual aspects, there is no risk of corrupting the underlying models.
+ </li>
+ </ul>
+ <h4 id="container_styles">Container Styles</h4>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including conditional styles. This section only presents the aspects which are specific to containers.
+ </p>
+ <p>For containers you can use the following styles:</p>
+ <ul>
+ <li>
+ <em>Gradient</em> to display containers as rectangles filled with a gradient between two colors (or a flat rectangle if both colors in the gradient are the same).
+ </li>
+ <li>
+ <em>Parallelogram</em> to represent containers as a parallelogram.
+ </li>
+ <li>
+ <em>Image</em> to use a custom image (from the workspace or from inside a plug-in).
+ </li>
+ </ul>
+ <table class="table table-striped table-condensed">
+ <tr>
+ <td>
+ <img border="0" src="images/styles/Container_Style_Gradient.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Container_Style_Parallelogram.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Container_Style_Image.png"/>
+ </td>
+ </tr>
+ <tr>
+ <th>Gradient</th>
+ <th>Parallelogram</th>
+ <th>Image</th>
+ </tr>
+ </table>
+ <h5 id="DefaultSize">Default Size</h5>
+ <p>You can specify the default size of
+ <em>Gradient</em> and
+ <em>Parallelogram</em> styles at creation time by specifying the width and height computation expressions available in the Advanced tab. This default size will also be used to determine the container minimum size when its bounds are
+ <em>auto-sized</em>.
+ </p>
+ <p>Most of the properties used to configure the various styles are self-explanatory. See the
+ <a href="#styling">styles</a> section below for a general discussion. You can also refer to the tool-tips available directly in the editor on the “question mark” icon of each property.
+ </p>
+ <h6 id="compartments_layout">Specific compartments layout</h6>
+ <p>Due to layout specificity of compartments, there are specific rules for this kind of containers:</p>
+ <ul>
+ <li>It is recommended to set to “-1” the
+ <code>Width Computation Expression</code> and
+ <code>Height Computation Expression</code>. The size of the compartment is expected to be computed from their regions.
+ </li>
+ <li>For the same reason, the
+ <code>Width Computation Expression</code> should be the same for each region of the same vertical compartment (same
+ <code>Height Computation Expression</code> for horizontal compartment ). If they are not the same the maximum is used.
+ </li>
+ <li>When a
+ <code>Width Computation Expression</code> and
+ <code>Height Computation Expression</code> are defined for the compartments, they are used at the creation time. You have the same effect if the end-user creates a compartment by drawing a rectangle for creation (instead of just clicking on the diagram). This dimension is kept for the first region creation. After the first region creation, the compartment is considered as auto-sized. A second region creation resizes the compartment (in the direction of the stack of the compartment).
+ </li>
+ </ul>
+ <p>Examples of some layout results according to VSM configuration:</p>
+ <ul>
+ <li>1st example:
+ <ul>
+ <li>Compartment with horizontal stack and with
+ <code>Width Computation Expression</code> and
+ <code>Height Computation Expression</code> equal to 10.
+ </li>
+ <li>Regions with
+ <code>Width Computation Expression</code> and
+ <code>Height Computation Expression</code> equal to 5.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/compartmentsLayout-Creation1.png"/>
+ <br/>1- Creation of a compartment: The compartment has a size of 100x100 pixels. The result would be the same if the end-user drawn a rectangle of 100x100 pixels at the creation time.
+ <br/>2- Creation of a first region: The first region uses the free size of the compartment. The compartment keeps its size.
+ <br/>3- Creation of a second region: The second region uses the height of the first region (highest than the 50 pixels defined in the VSM) and has a width of 50 pixels. The compartment is increased in width.
+ </p>
+ <ul>
+ <li>2nd example:
+ <ul>
+ <li>Compartment with horizontal stack and with
+ <code>Width Computation Expression</code> and
+ <code>Height Computation Expression</code> equal to 10.
+ </li>
+ <li>Regions with
+ <code>Width Computation Expression</code> and
+ <code>Height Computation Expression</code> equal to 15.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/compartmentsLayout-Creation2.png"/>
+ <br/>The first and second steps are the same. But the third is different. The second region has a width of 150 pixels and also a height of 150 pixels (highest than the first one). The compartment is increased in both directions.
+ </p>
+ <ul>
+ <li>3rd example:
+ <ul>
+ <li>Compartment with horizontal stack and with
+ <code>Width Computation Expression</code> and
+ <code>Height Computation Expression</code> equal to -1.
+ </li>
+ <li>Regions with
+ <code>Width Computation Expression</code> and
+ <code>Height Computation Expression</code> equal to 5.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/compartmentsLayout-Creation3.png"/>
+ <br/>1- Creation of a compartment: The compartment is auto-sized and fits to the title.
+ <br/>2- Creation of a first region: The first region uses the width of the compartment (highest than the 50 pixels defined in the VSM) and has a height of 50 pixels. The compartment is increased in height.
+ <br/>3- Creation of a second region: The second region has a size of 50x50 pixels. The compartment is increased in both directions.
+ </p>
+ <h4 id="container_tools">Container Tools</h4>
+ <p>See the
+ <a href="#tools">tools</a> section for a general presentation of how tools are defined. This section only presents tools which are specific to containers.
+ </p>
+ <p>
+ <strong>Container Creation.</strong> These tools are used to create new containers. They work like all the other creation tools. You simply specify the
+ <em>Container Mappings</em> that this tool can create and specify the behavior of the tool inside the
+ <em>Begin</em> element using all the standard
+ <a href="../general/Model_Operations.html">model operations</a>.
+ </p>
+ <p>By default, your container creation tools will be available on all the graphical elements which can contain an instance of the
+ <em>Container Mappings</em> you specified in the tool, and users will see a “forbidden” sign if they try to apply the tool on an incompatible type of element. You can specify a
+ <em>Precondition</em> to forbid the application of the tool on some of the elements where it would normally be allowed. The precondition is evaluated in the context of the
+ <em>view element</em> on which the user has put the mouse. If it returns a false value, the tool’s application will be forbidden. Symmetrically, you can specify
+ <em>Extra Mappings</em> (
+ <em>Advanced</em> section) on which the tool should be applicable, even though these mapping can not contain containers of the type you will create. In this case, the container created by the tool will actually appear elsewhere on the diagram, but it can often help usability to allow users to click on related elements.
+ </p>
+ <p>
+ <strong>Container Drop</strong> You can associate a
+ <em>Container Drop</em> description to your container mappings to react to drag’n’drop operations into the container. The
+ <em>Drag Source</em> property indicates if you want to react to graphical elements from a Sirius representation, to semantic model elements dragged from another Eclipse view (for example from the
+ <em>Model Explorer</em>), or both. The
+ <em>Containers</em> property indicates for which drop kind of container mappings this tool applies. The
+ <em>Mappings</em> property indicates what kinds of graphical elements can be dropped into the specified containers, when the
+ <em>Drag Source</em> is
+ <em>Representation</em> or
+ <em>Both</em>. The body of the tool (the
+ <a href="../general/Model_Operations.html">model operations</a> ) specify how to react when an element is dropped into a container.
+ </p>
+ <p>
+ <i>WARNING</i>: if you choose
+ <em>Model</em> or
+ <em>Both</em> as source, your tool must be prepared to accept any type of source element which can be present in the
+ <em>Model Explorer</em> view, including elements which have no relation to the source mappings you specified for the tool. Use a precondition to check the nature of the element being dragged (available through the
+ <code>element</code> variable) to disable the tool source elements your tool does not support.
+ </p>
+ <p>When drag and dropping workspace resources (files, folders...) from an Eclipse view, some conversions are performed to ease the operations specifications. Depending of the dropped resource, the
+ <code>element</code> variable content in the root operation will be different:
+ </p>
+ <ul>
+ <li>Loadable model: the model will be loaded and added to the semantic resources of the session. The root content of the model will be set as
+ <code>element</code> variable value.
+ </li>
+ <li>File: a
+ <code>DFile</code> instance will be created and set as
+ <code>element</code> variable value.
+ </li>
+ <li>Folder: a
+ <code>DFolder</code> instance will be created and set as
+ <code>element</code> variable value. For each resource contained by the folder, a
+ <code>DResource</code> instance will be created.
+ </li>
+ <li>Project: a
+ <code>DProject</code> instance will be created and set as
+ <code>element</code> variable value. For each resource contained by the folder, a
+ <code>DResource</code> instance will be created.
+ </li>
+ </ul>
+ <p>
+ <code>DFile</code>,
+ <code>DFolder</code>,
+ <code>DProject</code> are instances of
+ <code>DResource</code>. A
+ <code>DResource</code> instance has a
+ <strong>name</strong> and a
+ <strong>path</strong>. The path is the absolute location of the resource.
+ <br/>
+ <code>DFolder</code>,
+ <code>DProject</code> are instances of
+ <code>DResourceContainer</code>. A
+ <code>DResourceContainer</code> instance has
+ <strong>members</strong>, which are
+ <code>DResource</code> instances.
+ </p>
+ <h3 id="bordered_nodes">Bordered Nodes</h3>
+ <p>Bordered nodes are specified using normal
+ <a href="#nodes">node mappings</a>. They can appear inside node mappings (include other node mappings which are bordered nodes) and container mappings. They can have the same styles and tools associated to them as normal node mappings (although they should generally be kept small to avoid weird graphical effects).
+ </p>
+ <h3 id="edges">Edges</h3>
+ <p>Edges are used to define connections between diagram elements. There are two kinds of edges, which are defined using different mappings:</p>
+ <ul>
+ <li>
+ <em>Relation-Based Edges</em> are used to represent a relation between model elements such as containment or reference (including computed references). An example in UML would be the inheritance relationship, which is represented by references between a class and its super-classes. Those would be modeled using a relation-based edge.
+ </li>
+ <li>
+ <em>Element-Based Edges</em> are used when a semantic model element (instead of simply a reference) exists to represent the relation itself. An example in UML would be an association between two classes
+ <em>A</em> and
+ <em>B</em>: it is not represented by a reference between
+ <em>A</em> to
+ <em>B</em>, but by an explicit
+ <em>Association</em> model element which itself references
+ <em>A</em> and
+ <em>B</em>. Such an association would be modeled using a domain-based edge on the
+ <em>Association</em> element.
+ </li>
+ </ul>
+ <h4 id="relation_based_edges">Relation-Based Edges</h4>
+ <p>To specify a
+ <em>Relation-Based Edge</em>, you must fill the
+ <em>Source Mapping</em> and
+ <em>Target Mapping</em> properties. They indicate from what kind of graphical element the edges will start and to what kind of element they go. Both properties can contain several mappings, and some mappings can appear as both source and targets. Note that it is possible to have edges whose source
+ <em>or</em> target is another edge, but not both.
+ </p>
+ <p>You must also specify the
+ <em>Target Finder Expression</em>. It will be evaluated in the context of the semantic target element of a potential source (as defined by
+ <em>Source Mappings</em>) and should return the semantic element(s) of the targets elements to connect with the source. The expression can return zero elements to indicate that no edge starting from this element.
+ </p>
+ <p>An edge (instance of this mapping) will appear between each pair of graphical elements
+ <em>E1</em> and
+ <em>E2</em> on the diagram where:
+ </p>
+ <ul>
+ <li>
+ <em>E1</em>'s mapping is in the
+ <em>Source Mappings</em>.
+ </li>
+ <li>
+ <em>E2</em>'s mapping is in the
+ <em>Target Mappings</em>.
+ </li>
+ <li>The (optional)
+ <em>Precondition Expression</em> (
+ <em>Advanced</em> category) returns true for the semantic element of
+ <em>E1</em>.
+ </li>
+ <li>The semantic element of
+ <em>E2</em> appears in the result of evaluating the
+ <em>Target Finder Expression</em> in the context of
+ <em>E1</em>'s semantic element.
+ </li>
+ </ul>
+ <p>Because a relation-based edge does not represent an actual semantic element but a relation between elements, its own semantic element is the same as its source’s.</p>
+ <p>
+ <strong>Paths.</strong> Edges only exist between one source and one target element. Sometimes such an edge is just one segment of a more complex
+ <em>path</em> which traverses many elements. You can highlight such a complex path using the properties in the
+ <em>Path</em> category.
+ <em>Path Mappings</em> should be the list of mappings considered by the path, and the
+ <em>Path Expression</em> should return the list of semantic elements the edge path should go through, in the order the should be traversed.
+ </p>
+ <h4 id="element_based_edges">Element-Based Edges</h4>
+ <p>
+ <em>Element-Based Edges</em> are configured much like nodes and containers. You must specify the
+ <em>Domain Class</em>,
+ <em>Semantic Candidate Expression</em> and (optionally)
+ <em>Precondition Expression</em> to select the semantic elements the edges will represent. In addition, you must specify:
+ </p>
+ <ul>
+ <li>the
+ <em>Source Mapping</em> and
+ <em>Target Mapping</em> properties, which indicates from what kind of graphical element the edges will start and to what kind of element they go. Both properties can contain several mappings, and some mappings can appear as both source and targets. Note that it is possible to have edges whose source
+ <em>or</em> target is another edge, but not both.
+ </li>
+ <li>the
+ <em>Source Finder Expression</em> and
+ <em>Target Finder Expression</em>, which will be evaluated in the context of the semantic element of the edge, should return the actual elements that the edge connects.
+ </li>
+ </ul>
+ <p>An edge (instance of this mapping) will appear between each pair of graphical elements
+ <em>E1</em> and
+ <em>E2</em> on the diagram where:
+ </p>
+ <ul>
+ <li>
+ <em>E1</em>'s mapping is in the
+ <em>Source Mappings</em>.
+ </li>
+ <li>
+ <em>E2</em>'s mapping is in the
+ <em>Target Mappings</em>.
+ </li>
+ <li>There is a semantic element, selected by the
+ <em>Domain Class</em> and
+ <em>Semantic Candidate Expression</em>, from which the
+ <em>Source Finder Expression</em> returns
+ <em>E1</em> and the
+ <em>Target Finder Expression</em> returns
+ <em>E2</em>.
+ </li>
+ </ul>
+ <p>
+ <strong>Paths.</strong> Edges only exist between one source and one target element. Sometimes such an edge is just one segment of a more complex
+ <em>path</em> which traverses many elements. You can highlight such a complex path using the properties in the
+ <em>Path</em> category.
+ <em>Path Mappings</em> should be the list of mappings considered by the path, and the
+ <em>Path Expression</em> should return the list of semantic elements the edge path should go through, in the order the should be traversed.
+ </p>
+ <h4 id="edges_styles">Edge Style</h4>
+ <p>Both types of edges (relation-based and element-based) share the same style type. It supports conditional style like for other mappings.</p>
+ <p>You can specify the line style (
+ <em>solid</em>,
+ <em>dash</em>,
+ <em>dot</em> or
+ <em>dash-dot</em>), color, width (using the
+ <em>Size Computation Expression</em> in the
+ <em>Advanced Category</em>), and optional decorations (like arrowheads) to be put on the end-points of the edge.
+ </p>
+ <p>The
+ <em>Routing Style</em> can be one of:
+ </p>
+ <ul>
+ <li>
+ <em>Straight</em>: the edge is drawn using straight line segments. When created, only one segment directly connects the source and target elements, except when the source and target are the same elements. End users can create and remove sub-segments, and move the bend-points.
+ </li>
+ <li>
+ <em>Manhattan</em>: the edge is drawn using only vertical and horizontal segments. Otherwise it is similar to
+ <em>Straight</em>.
+ </li>
+ <li>
+ <em>Tree</em>: this style can be seen as a special case of
+ <em>Manhattan</em>, with always two vertical segments and an horizontal one between them. If one graphical element serves as the source for several edges using this style, their first vertical segment (the stem of the tree) will be merged, and their horizontal segments will all appear as a single line.
+ </li>
+ </ul>
+ <table class="table table-striped table-condensed">
+ <tr>
+ <td>
+ <img border="0" src="images/styles/Edge_Style_Straight.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Edge_Style_Manhattan.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/styles/Edge_Style_Tree.png"/>
+ </td>
+ </tr>
+ <tr>
+ <th>Straight</th>
+ <th>Manhattan</th>
+ <th>Tree</th>
+ </tr>
+ </table>
+ <p>Note that end-users can change the routing style of the edges individually, independently of the default style you set in the VSM.</p>
+ <p>
+ <strong>Edge Labels.</strong> Edges can have from zero to three labels. By default they have a single which will be placed at its center. You can delete it and/or add labels to be shown at the beginning (near the source) or end (near the target) of the edge. In all cases, the configuration is
+ <a href="#label_style">the same as for all labels</a>. Note that currently only the center label (if present) is editable if a
+ <em>Direct Edit</em> tool is associated to the edge mapping.
+ </p>
+ <p>
+ <strong>Edge Folding.</strong> It can often be useful, from one end of the edge, to be able to hide the elements at the other end. Think for example when and edge is used to represent some kind of containment relationship between elements and you want to hide the “contents” of an element to concentrate on the rest of the diagram. You can allow end-users to do this be setting a
+ <em>Folding Style</em> on an edge mapping (in the
+ <em>Advanced</em> category). When the
+ <em>Folding Style</em> is set to
+ <em>Source</em> or
+ <em>Target</em>, the element (node or container) at the source or target of the edge will have a small “ - ” sign in its top-left corner. If the user clicks on it, the edges instance of this mapping for which the element is a source (resp. target) will fold: the edges and the elements they are connected to at the other side will disappear from view. The behavior is recursive: if the elements hidden were connected to other elements using this kind edges, those too will be hidden. When an element has been folded, the “ - ” sign becomes a “ + ” sign which can be used to unfold the edges. This is useful when representing trees of elements: if you enable folding, users will be able with a single click to hide or reveal complete sub-hierarchies of elements.
+ </p>
+ <p>
+ <strong id="edgecentering">Edge Centering.</strong> The edge source and edge target are not systematically oriented toward the center of the node, depending on where the edge has been created or moved by the end user. You can specify that an edge end (the source, target or both) will always be centered. The
+ <em>Centered Source Mappings</em> and the
+ <em>Centered Target Mappings</em> (within the edge style description advanced properties tab) lets you select for which mapping the source or the target will be centered. The
+ <em>Ends Centering</em> section (on the same advanced tab) allows you to generalize this behavior for any edge source/target mapping. Note that this behavior can be customized by the end user via the edge style
+ <em>centered</em> attribute.
+ </p>
+ <p>
+ <img border="0" src="images/styles/Edge_Style_Centering.png"/>
+ <br/>The first edge, the highest one, is oriented to the node’s center
+ </p>
+ <h4 id="bracket_edge_style">Bracket Edge Style</h4>
+ <p>The bracket edge figure is designed to be drawn from the middle of a node side to the middle of another node side. The user can move the main segment and rotate the figure (horizontal-> vertical or vertical->horizontal).</p>
+ <p>
+ <img border="0" src="images/styles/Edge_Style_bracketStyle.png"/>
+ </p>
+ <p>The optional decorations (like arrowheads) will be put on the end-points of the main segment. </p>
+ <p>See the
+ <a href="#edges_styles">Edge Style</a> section for the other properties.
+ </p>
+ <h4 id="edge_tools">Edge Tools</h4>
+ <p>See the
+ <a href="#tools">tools</a> section for a general presentation of how tools are defined. This section only presents tools which are specific to edges.
+ </p>
+ <p>
+ <strong>Edge Creation.</strong> This tool is used to create new edges. They work like all the other creation tools. You simply specify the
+ <em>Edge Mappings</em> that this tool can create and specify the behavior of the tool inside the
+ <em>Begin</em> element using all the standard
+ <a href="../general/Model_Operations.html">model operations</a>. The body of the tool will be executed in the context of the semantic element of the source of the new edge.
+ </p>
+ <p>Because edges have two ends, their creation requires users to specify both the source and target elements. By default, the possible sources are all the instances of one of the
+ <em>Source Mappings</em> specified for this kind of edge (and similarly for the possible targets). You can restrict this using the
+ <em>Connection Start Precondition</em> (resp.
+ <em>Connection Complete Precondition</em>) to forbid the use of the tool from (resp. to) some element.
+ </p>
+ <p>
+ <em>Connection Start Precondition</em> expressions can use the following variables to allow/disallow first click for connection creation:
+ </p>
+ <ul>
+ <li>
+ <code>preSourceView</code>: the graphical element which is pointed on the first click.
+ </li>
+ <li>
+ <code>preSource</code>: the semantic element which is pointed on the first click.
+ </li>
+ <li>
+ <code>diagram</code>: the current Diagram.
+ </li>
+ <li>
+ <code>container</code>: the semantic element of the Diagram.
+ </li>
+ </ul>
+ <p>
+ <em>Connection Complete Precondition</em> expressions can use the following variables to allow/disallow second click for connection creation:
+ </p>
+ <ul>
+ <li>
+ <code>preSourceView</code>: the graphical element which is pointed on the first click.
+ </li>
+ <li>
+ <code>preSource</code>: the semantic element which is pointed on the first click.
+ </li>
+ <li>
+ <code>preTargetView</code>: the graphical element which is pointed on the second click.
+ </li>
+ <li>
+ <code>preTarget</code>: the semantic element which is pointed on the second click.
+ </li>
+ <li>
+ <code>diagram</code>: the current Diagram.
+ </li>
+ <li>
+ <code>container</code>: the semantic element of the Diagram.
+ </li>
+ </ul>
+ <p>On the opposite, you can specify
+ <em>Extra Source Mappings</em> and
+ <em>Extra Target Mappings</em> (
+ <em>Advanced</em> category) which the user will be able to select as “virtual” source and targets, even though the real edge created by the tool will not be between these elements.
+ </p>
+ <p>
+ <strong>Reconnect Edge.</strong> The
+ <em>Reconnect Edge</em> tool is used to allow end-users to change the source and/or target of an edge by moving the corresponding end onto another graphical element. If a tool is specified to handle the user’s reconnection attempt, it will be invoked with all the appropriate information so that it can execute the corresponding semantic change. In addition to the
+ <em>Mappings</em> property, which indicate the types of edges supported by the tool, you must specify one
+ <em>Reconnection Kind</em>: a tool can be written to only support reconnection of the source end, the target end, or of both. Tools that handle both cases are complex to write, so it is recommended if possible to write two separate tools: one which handle the source re-connections, and one for the target re-connections.
+ </p>
+ <p>The body of the tool is evaluated on the target semantic element of the edge that the user wants to reconnect, with the following variables available to describe the reconnection:</p>
+ <ul>
+ <li>
+ <code>source</code>: the semantic element which is pointed before the reconnect.
+ </li>
+ <li>
+ <code>target</code>: the semantic element which is pointed after the reconnect.
+ </li>
+ <li>
+ <code>sourceView</code> : the graphical element which is pointed before the reconnect.
+ </li>
+ <li>
+ <code>targetView</code> : the graphical element which is pointed after the reconnect.
+ </li>
+ <li>
+ <code>otherEnd</code> : the edge end (graphical element) that has not changed during the reconnection
+ </li>
+ <li>
+ <code>edgeView</code> : the Edge after the graphical reconnection
+ </li>
+ <li>
+ <code>diagram</code> : the current Diagram.
+ </li>
+ <li>
+ <code>element</code>: the semantic element of the current edge.
+ </li>
+ </ul>
+ <p>Here are illustration to show the values of this variables in a concrete case. Before the reconnection:</p>
+ <p>
+ <img border="0" src="./images/references/reconnect/ReconnectTool_Before.png"/>
+ </p>
+ <p>After the reconnection:</p>
+ <p>
+ <img border="0" src="./images/references/reconnect/ReconnectTool_After.png"/>
+ </p>
+ <ul>
+ <li>The
+ <code>sourceView</code> is the graphical node ‘A’.
+ </li>
+ <li>The
+ <code>targetView</code> is the graphical node ‘B’.
+ </li>
+ <li>The
+ <code>otherEnd</code> is the graphical node ‘C’, that has not changed during the reconnection.
+ </li>
+ <li>
+ <code>edgeView.sourceNode</code> is the graphical node ‘C’.
+ </li>
+ <li>
+ <code>edgeView.targetNode</code> is the graphical node ‘B’.
+ </li>
+ </ul>
+ <p>For the semantic, we will consider that we represent “Box” and the link means “is contained in”:</p>
+ <ul>
+ <li>the
+ <code>source</code> is the box ‘A’.
+ </li>
+ <li>the
+ <code>target</code> is the box ‘B’.
+ </li>
+ <li>
+ <code>element</code> is the link “is contained” between ‘C’ and ‘A’.
+ </li>
+ </ul>
+ <h3 id="decorations">Decorations</h3>
+ <p>Decorations can be used to add small graphical annotations to the elements of a diagram. They are defined directly inside a layer, and they can be either
+ <em>Mapping Based Decorations</em>,
+ <em>Semantic Based Decorations</em> or
+ <em>Generic Decorations</em>.
+ </p>
+ <p>
+ <strong>Mapping Based Decorations</strong> have a list of
+ <em>Mappings</em> to which they may apply.
+ <br/>
+ <img border="0" src="./images/mappingBasedDecoration.png"/>
+ </p>
+ <p>
+ <strong>Semantic Based Decoration</strong> have a
+ <em>Domain Class</em> and will apply to all graphical elements which have an instance of this class as their semantic element, whatever are the mapping(s) used to represent them.
+ <br/>
+ <img border="0" src="./images/semanticBasedDecoration.png"/>
+ </p>
+ <p>
+ <strong>Generic Decoration</strong> is only based on the
+ <em>Precondition Expression</em> to know if it applies on the current graphical Element.
+ </p>
+ <p>The
+ <em>Precondition Expression</em> is evaluated in the context of a candidate semantic element which is the semantic element of the current graphical element (that is
+ <em>DSemanticDecorator.target</em>). If the expression returns true, the decorator will be shown.
+ </p>
+ <h4 id="Decorationdisplay">Decoration display</h4>
+ <p>The
+ <em>Decoration Description</em> has a
+ <em>Position</em> which indicates where the decorator should be placed. The position can be chosen among the four corners (NORTH_WEST, NORTH_EAST, SOUTH_WEST and SOUTH_EAST), the middle of each bounding box sides (NORTH, SOUTH, WEST and EAST) and the CENTER positions.
+ </p>
+ <img align="center" border="0" src="./images/decoration_positions.png"/>
+ <p>Many decorations can be specified at the same
+ <em>Position</em>. To manage that, the decorations are displayed from their defined position along the border of the bounding box according to the
+ <em>Distribution Direction</em>.
+ </p>
+ <ul>
+ <li>For corner decorations, it is possible to choose between vertical or horizontal direction.</li>
+ <li>For NORTH, SOUTH and CENTER positions, the direction is only horizontal from the left to right.</li>
+ <li>For WEST and EAST positions, the direction is only vertical from top to bottom.</li>
+ </ul>
+ <p>Decorations example:
+ <img align="center" border="0" src="./images/decoration_example.png"/>
+ </p>
+ <p>By default the margin between the decoration and the border of the figure is 2 pixels.
+ <br/>When a node contains border nodes, the node decorations are shifted from the border to avoid overlap with border node
+ <br/>Decorations example with border nodes:
+ <img align="center" border="0" src="./images/decoration_borderNode.png"/>
+ </p>
+ <p>The decoration icon is defined with
+ <em>Image Expression</em> which is an InterpretedExpression.
+ <em>Image Expression</em> may be:
+ </p>
+ <ul>
+ <li>a path to an image which can be absolute or relative to the workspace. A workspace path example:
+ <em>/org.eclipse.sirius.tests.sample.component.design/images/square16x16.png</em>
+ </li>
+ <li>an expression that gives a path to an image</li>
+ <li>an expression that provides an instance of
+ <code>org.eclipse.swt.graphics.Image</code>. Provider will have to define a cache of image to optimize memory consumption and performance. For now, there is no mechanism to release the cache.
+ </li>
+ <li>an expression that provides an instance of
+ <code>org.eclipse.draw2d.IFigure</code>. The figure life cycle is managed by Sirius.
+ </li>
+ </ul>
+ <p>The
+ <em>Decoration Description</em> has a
+ <em>TooltipExpression</em> which may be:
+ </p>
+ <ul>
+ <li>a fixed tooltip string</li>
+ <li>an expression that provides a tooltip String</li>
+ <li>an expression that provides an instance of
+ <code>org.eclipse.draw2d.IFigure</code>. The figure life cycle is managed by Sirius.
+ </li>
+ </ul>
+ <p>Decoration tooltip example:
+ <img align="center" border="0" src="./images/decoration_tooltip_example.png"/>
+ </p>
+ <p>Sometimes, according to the graphical element size, the decorations are represented with a
+ <em>list decoration</em> which is a 16x16 pixels frame containing three dots. The tooltip of a
+ <em>list decoration</em> displays as lines, the contained decorations with its tooltip.
+ <br/>Sometimes, the graphical element size can be too small to display all decorations without overlapping. In this condition, decorations will be gathered into one decoration called
+ <em>list decoration</em>. This
+ <em>list decoration</em> is represented with a 16x16 pixels frame containing three dots. The tooltip of a
+ <em>list decoration</em> displays, as lines, the contained decorations with its tooltip.
+ </p>
+ <p>List decoration example:
+ <img align="center" border="0" src="./images/decoration_group_example.png"/>
+ </p>
+ <p>Tooltip example on list decoration:
+ <img align="center" border="0" src="./images/decoration_group_tooltip_example.png"/>
+ </p>
+ <h4 id="Decorationdisplayupdate">Decoration display update</h4>
+ <p>The decorations can be manually and automatically refreshed.</p>
+ <ul>
+ <li>Manually, when the user clicks on the refresh button in the diagram tool bar.</li>
+ <li>Automatically, according to semantic changes when:
+ <ul>
+ <li>the
+ <em>target semantic element</em> of the
+ <code>DDiagramElement</code> (
+ <code>DSemanticDecorator_Target</code> feature) is changed,
+ </li>
+ <li>the
+ <em>semantic elements</em> of the
+ <code>DDiagramElement</code> (
+ <code>DRepresentationElement_SemanticElements</code> feature) are changed. They are defined with
+ <em>Associated Elements Expression</em> on the mapping. It means that a specifier that defined decorations can not add new “semantic element”, dedicated to decorations, that would be listened to for the automatic refresh.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h2 id="styling">Styling</h2>
+ <p>Styles define the graphical appearance of diagram elements. Sirius supports a rich set of possible styles, including conditional styles which can dynamically change depending on the current state of the underlying model elements. Each mapping must define at least one style do be visible on the diagram.</p>
+ <h3 id="conditional_styles">Conditional Styles</h3>
+ <p>Conditional styles make it possible to support different graphical aspects for a single mapping. The actual style used to render an element is determined dynamically depending on the current state of the models elements.</p>
+ <p>To use conditional style, you must first create a non-conditional style, which will be the default. You can then add one or several conditional styles as siblings to the default style. Each conditional style is associated to a condition specified as a predicate. If there are conditional styles on a mapping, their conditions are tested in their order of appearance in the mapping description. The first one for which the condition is
+ <strong>true</strong> is selected. If none of the conditional styles condition is true, the default style is used instead.
+ </p>
+ <ul>
+ <li>NOTE : There is an exception to the rule of Conditional Styles:</li>
+ </ul>
+ <p>if a user customized a Node with a WorkspaceImage style (through the “Set style to workspace image” action), then if a new style is computed through the VSM (e.g. through a Conditional Style appliance), this new style will not override the WorkspaceImage style to preserve this last customization (See
+ <a href="../../user/diagrams/Diagrams.html#styleCustomizations">
+ <em>Style Customizations</em>
+ </a> ).
+ </p>
+ <h3 id="label_style">Label Properties</h3>
+ <p>One of the responsibility of styles is to describe labels which will be displayed and how they will be formated. The following properties are available :</p>
+ <ul>
+ <li>
+ <em>Label Expression</em> is used to compute the text of the label describing the element. It is evaluated in the context of the semantic target element.
+ </li>
+ <li>
+ <em>Label Position</em> is used to set the position of the label relative to nodes (this property is not available for containers and edges). The label can be put on the
+ <em>border</em> of the node (outside), where it can be freely moved around the node’s border, or in the
+ <em>node</em> itself.
+ </li>
+ <li>
+ <em>Label Size</em> indicates the font size to use in points.
+ </li>
+ <li>
+ <em>Label Format</em> is used to specify the font style attributes (
+ <em>Bold</em> and/or
+ <em>Italic</em> and/or
+ <em>Underline</em> and/or
+ <em>Strike through</em>).
+ </li>
+ <li>
+ <em>Label Alignment</em> is used for labels positioned inside node to specify their alignment (note that not all alignment values are supported for all styles). For nodes, this attribute only applies when
+ <strong>Label position</strong> is set to
+ <strong>node</strong> (otherwise, the label is freely movable by the user). For containers, it only applies to the container’s label itself, not its content. This attribute does not apply to edges (again, their label is freely movable by users) and list items.
+ </li>
+ <li>
+ <em>Label border style</em> (only available for a
+ <em>Gradient container style</em>): the specifier can choose a label border style among a list. As a result a border will be drawn or not around the label, this might impact the children content pane configuration.
+ </li>
+ <li>
+ <em>Show icon</em> indicates whether or not the element’s icon should be made visible. If set, the icon used is the one associated with the type of the target element, and is rendered on the left of the label. Note that end-user will always be able to hide such icons by using the
+ <em>Label icons</em> preferences (
+ <em>Window</em>/
+ <em>Preferences</em>/
+ <em>Sirius</em>/
+ <em>Sirius Diagram</em>/
+ <em>Appearance</em>).
+ </li>
+ <li>
+ <em>Hide label by default</em> (not available for edges) is used to configure the label visibility when an element is created.
+ </li>
+ </ul>
+ <p>While not strictly part of the label properties, a
+ <em>Tooltip Expression</em> can be set for most style, and is used to compute the text of the optional tool-tip shown when the user leaves the mouse on an element. It can be seen as an alternate
+ <em>Label Expression</em> which is not visible by default, and can be used to show additional details on an element only when the user requests them, to avoid visual clutter on the diagram.
+ </p>
+ <h3 id="size">Size Properties</h3>
+ <p>Most styles give you some control on the size of the graphical elements. The properties described below are not available for all styles, but when they are they have the same meaning (unless specified for special cases):</p>
+ <ul>
+ <li>
+ <em>Allow resizing</em>: You can decide if end-users are allowed to resize graphical elements
+ <em>Horizontally</em> and/or
+ <em>Vertically</em>. Most styles allow resizing on both directions by default.
+ </li>
+ <li>Initial
+ <em>Width</em> and
+ <em>Height</em> can be specified explicitly. A value of 0 indicates no explicit width or height. The initial value will be taken from the style’s default or from the
+ <em>Size Computation Expression</em> if specified.
+ </li>
+ <li>
+ <em>Size Computation Expression</em>: An expression used to dynamically compute the size of a graphical element. It is evaluated in the context of the target element, and should return an integer.
+ </li>
+ <li>
+ <em>Border Size Computation Expression</em>: An expression which is used to dynamically compute the size of the border of graphical element. It is evaluated in the context of the target element, and should return the border size
+ <em>in pixels</em>.
+ </li>
+ </ul>
+ <h3 id="colors">Colors</h3>
+ <p>Whenever you have to specify colors for a style, you can use either one of the pre-defined system colors or one which you have defined yourself in a
+ <em>Users Color Palette</em>. The palette is created directly inside the
+ <em>Viewpoint</em> element, and its colors can be used by any representation, not just diagram. See
+ <a href="../general/Colors.html">the general section on colors</a> for more details.
+ </p>
+ <h3 id="authorizedsides">Authorized Sides</h3>
+ <p>By default, border node can be located on any side of its parent. It is possible to restrict a border node authorized sides. Thus the end user will not have the possibility to create or to move a border node on a forbidden side. Authorized sides can be specified in the advanced tab of the border node style:
+ <br/>
+ <img border="0" src="images/styles/authorizedSides.png"/>
+ </p>
+ <h2 id="tools">Tools</h2>
+ <p>Tools are used to define the behavior of your modeler. Some tools will appear in the diagram’s palette (e.g. a tool to create a new node), while others are automatically invoked when the user performs certain operations (e.g. a delete tool which is triggered when the user deletes an element from the diagram).</p>
+ <h3 id="tools_organization">Tools Organization</h3>
+ <p>Tools are defined in
+ <em>Tool Sections</em>, which appear directly inside layers. If a tool is defined inside an additional layer, it will be enabled only when the corresponding layer is enabled.
+ </p>
+ <p>The top-level
+ <em>Tool Sections</em> inside a layer are simply used to separate tools definition from mapping definitions and have no impact on how the tools are presented. However, if you create sub-sections inside those top-level section (
+ <em>New Tool... > Section</em>), and if those sections contain tools which appear in the palette, then the sub-sections will be used to group the corresponding tools in expansible sections in the palette. You can also create
+ <em>Groups</em> (
+ <em>New Tools... > Group</em>), which behave like combo-boxes in the palette: only one of the tools defined inside the group is active (and visible) at a time.
+ </p>
+ <p>Tool sections can have
+ <em>Reused Tools</em>, which are defined elsewhere (including in another layer, even from a different representation). They will appear and behave as if they were defined inside the section which reuses them.
+ </p>
+ <p>The
+ <em>Group Extension</em> elements (defined inside a tool section) allow you to add tools in a existing
+ <em>Group</em> defined elsewhere. It can be used for example to merge tools defined in an additional layer into a group of tools defined in the default layer. You must select the existing
+ <em>Group</em> to extend, and any tool declared in a group extension will be added in the targeted group by the ‘group’ attribute.
+ </p>
+ <p>Note that the Tool Section label and Tool label are
+ <a href="../general/Specifying_Viewpoints.html#translatable_messages">
+ <em>Translatable Messages</em>
+ </a> and can therefore be localized.
+ </p>
+ <p>
+ <i>WARNING</i> : It was possible to define a ToolSection directly under a DiagramDescription, outside a layer. Defining tool section outside a layer is discouraged, that’s why this action has been deleted. The tool sections created before are still present but you should move it into the default layer since it is likely to be deleted in the future.
+ </p>
+ <h3 id="tools_specification">Tools Specification</h3>
+ <p>
+ <a href="../general/ToolsSpecification.html">Refer to Tools specification</a>
+ </p>
+ <p><div style="display: none">
+ <br/>
+ <strong>TODO</strong> Study the exact semantic of this and complete the description.
+ <br/></div>
+ </p>
+ <h3 id="tools_reference">Tools Reference</h3>
+ <p>In this section we describe each kind of tool available on a diagram.</p>
+ <h4 id="node_creation">Node Creation</h4>
+ <p>See the description in the
+ <a href="#node_tools">node-specific tools section</a>.
+ </p>
+ <h4 id="container_creation">Container Creation</h4>
+ <p>See the description in the
+ <a href="#container_tools">container-specific tools section</a>.
+ </p>
+ <h4 id="edge_creation">Edge Creation</h4>
+ <p>See the description in the
+ <a href="#edge_tools">edge-specific tools section</a>.
+ </p>
+ <h4 id="container_drop">Container Drop</h4>
+ <p>See the description in the
+ <a href="#container_tools">container-specific tools section</a>.
+ </p>
+ <h4 id="reconnect_edge">Reconnect Edge</h4>
+ <p>See the description in the
+ <a href="#edge_tools">edge-specific tools section</a>.
+ </p>
+ <h4 id="paste_description">Paste</h4>
+ <p>The paste tool aims to define operations to paste the given copied semantic element, accessible through the
+ <em>copiedElement</em> variable, into the semantic paste receiver, accessible through the
+ <em>container</em> variable. The
+ <em>copiedView</em> and
+ <em>containerView</em> variables reference the corresponding graphical element. The
+ <em>Containers</em> property indicates the mappings to which this tool apply.
+ </p>
+ <p>Its semantic target is the copied semantic element. If the copied element was a non domain based element (e.g. relation edge), the semantic element is the original except if it is targeted by a domain based element also selected. When the semantic target is not copied, the tool receive a null copied element.</p>
+ <p>
+ <strong>Warning</strong>: The generic behavior is used only when there is no tool defined on the paste receiver. Otherwise the first tool with a precondition evaluated as true will be chosen and if all defined tools have a false precondition, paste action will be disabled.
+ </p>
+ <p><div style="display: none">
+ <br/>
+ <strong>TODO</strong> Description not clear at all.
+ <br/></div>
+ </p>
+ <h4 id="delete_tool">Delete Element</h4>
+ <p>If you do not associate a
+ <em>Delete</em> tool to a mapping, the default delete behavior when the user deletes a graphical element is to remove the target semantic element and all the associated semantic elements from the semantic model. If you want a different behavior or if you want to forbid the deletion of some elements, you must set an explicit
+ <em>Delete</em> tool. Delete tools are invoked when the user select the
+ <em>Delete from model</em> action (from the context menu, from the tab-bar or using the
+ <em>Delete</em> key). The
+ <em>element</em> variable will be set to the main semantic target element being deleted (excluding any associated semantic elements) while the
+ <em>elementView</em> and
+ <em>containerView</em> tell you which graphical view is being deleted and in which context it is.
+ </p>
+ <p>If you want to completely disable deletion for some elements, you can either create a
+ <em>Delete</em> tool which does nothing for these elements or, if possible, setup the tool’s
+ <em>Precondition</em> to return
+ <em>false</em> for these elements. Setting a precondition is usually preferred as it will mark the
+ <em>Delete</em> action as disabled in the UI (tab-bar and context menu) while a tool which simply does nothing can still be invoked by users, but with no effect. Note however that the
+ <em>Precondition</em> will be evaluated each time the user selects and element to decide whether or not the delete action should be enabled in the UI. A precondition which is complex to evaluate can have a negative impact on the perceived performance of the modeler.
+ </p>
+ <h4 id="direct_edit">Direct Edit Label</h4>
+ <p>The
+ <em>Direct Edit Label</em> tool is used to allow users to directly edit the label of a representation element. It specifies how to interpret the new label value, and which changes to apply to the model element. Users can invoke it using the
+ <em>F2</em> shortcut, through a slow double-click, or directly by starting to type some text when a label is selected.
+ </p>
+ <p>If you want to display a different label during the edition, you can use the
+ <code>input label expression</code>. This expression is evaluated during the invocation of the direct edit and displayed to the end-user instead of the standard label (defined in the style of the mapping).
+ <br/>For example, you can display a class with a stereotype,
+ <code><<utility>> Math</code>, and display only the class name,
+ <code>Math</code>, during the edition.
+ </p>
+ <p>Inside a
+ <em>Direct Edit Label</em> tool, you
+ <em>must</em> specify an
+ <em>Edit Mask Variable</em> element. The mask is used to parse the new label’s value as entered by the user, and to select part of this label as input variables to the editing action’s body. The mask can contain substrings of the form <code>{N}</code> where
+ <code>N</code> is a number. The parts of the new label’s value which corresponds to these substring will be available as variables name
+ <code>argN</code> (strings) in the body of the direct edit action. The default mask is <code>{0}</code>, which means the whole text entered by the user will be available through the variable
+ <code>arg0</code>.
+ </p>
+ <p>
+ <em>Note:</em> Edges can have up to three different labels (one in the center and one at each extremity), but currently if a
+ <em>Direct Edit</em> tool is associated to an
+ <em>Edge</em> mapping, only the center label (if it exists) can be edited. This restriction will probably be lifted in future versions.
+ </p>
+ <h4 id="selection_wizard">Selection Wizard</h4>
+ <p>This tool can be used to open a wizard dialog asking the user to select one or several model elements. The body of the tool is then executed in the context of the element selected by the user.</p>
+ <p>When the tool is selected, the user must first select a diagram element as the tool’s target. Then a dialog box opens with a list of candidate elements to select. The list is computed from the target using expressions you specify in the tool’s description.</p>
+ <p>The
+ <em>Window Title</em>,
+ <em>Icon Path</em>,
+ <em>Windows Image Path</em> and
+ <em>Message</em> can be used to customize the look of the selection window.
+ </p>
+ <p>The
+ <em>Candidates Expression</em> should return a list of elements from which the user can select the variable’s value. By default these candidates are presented as a list. You can also enable the
+ <em>Tree</em> mode to display elements as a tree. In that case, you must specify a
+ <em>Root Expression</em> that will provide elements to be displayed as first level of the tree item in the dialog and a
+ <em>Children Expression</em>, which will be evaluated recursively on each candidate, from the root elements, to build a tree of possible values. Note that
+ <em>Root Expression</em> and
+ <em>Children Expression</em> provides elements that must be included in
+ <em>Candidates Expression</em> elements.
+ <br/>Finally, you can set the
+ <em>Multiple</em> flag to allow users to select several of the candidates instead of a single one.
+ </p>
+ <p><div style="display: none">
+ <br/>
+ <strong>TODO</strong> What is the context where the tool’s body is executed if several elements are selected?
+ <br/></div>
+ </p>
+ <p>
+ <img border="0" src="images/styles/Selection_Tool.png"/>
+ </p>
+ <p>Note that the
+ <em>Window Title</em> label and
+ <em>Message</em> label are
+ <a href="../general/Specifying_Viewpoints.html#translatable_messages">
+ <em>Translatable Messages</em>
+ </a> and can therefore be localized.
+ </p>
+ <h4 id="pane_based_selection_wizard">Pane-Based Selection Wizard</h4>
+ <p>The
+ <em>Pane-Based Selection Wizard</em> is very similar to the
+ <a href="#selection_wizard">Selection Wizard</a>. It differs only in the presentation of the selection window. The pane-based wizard offers two panels: on the left are all the candidates, which corresponds to the contents of the basic
+ <em>Selection Wizard</em>. On the right is the current selection. The user has buttons to add or remove candidates from the left panel into the right one. The
+ <em>Pre Selected Candidates Expression</em> can be used to define the initial content of the right-side panel.
+ </p>
+ <p><div style="display: none">
+ <br/>
+ <strong>TODO</strong> What is the context where the tool’s body is executed if several elements are selected?
+ <br/></div>
+ </p>
+ <p>
+ <img border="0" src="images/styles/Pane-Based_Selection_Tool.png"/>
+ </p>
+ <p>Note that the
+ <em>Window Title</em> label,
+ <em>Message</em> label,
+ <em>Choice of Values Message</em> label and
+ <em>Selected Values Message</em> labels are
+ <a href="../general/Specifying_Viewpoints.html#translatable_messages">
+ <em>Translatable Messages</em>
+ </a> and can therefore be localized.
+ </p>
+ <h4 id="representation_creation">Representation Creation</h4>
+ <p>Each dialect supported by Sirius defines a tool which can be used to create a new representation using this dialect. They are (using the default supported dialects):
+ <em>Diagram Creation</em> description,
+ <em>Table Creation</em> description and
+ <em>Tree Creation</em> description.
+ </p>
+ <p>These tools (one for each kind of representation supported by Sirius) can be used to create (and open) a new representation from an existing diagram element. They will be available to end-users in the
+ <em>Navigate</em> context menu on compatible diagram elements. To configure the tool, simply select in the
+ <em>Mappings</em> property which kinds of elements the tool should appear on (you can be more precise using the
+ <em>Precondition</em> expression if necessary), and select the representation which should be created using the
+ <em>Representation Description</em> property (in practice, one of
+ <em>Diagram Description</em>,
+ <em>Table Description</em> or
+ <em>Tree Description</em> depending on the tool). Normally, the new representation will be created on the semantic element represented by the diagram element on which the user invoked the tool. Sometimes you want the tool to appear on one element, but create a representation on another one. In this case, use the
+ <em>Browse expression</em> (in the
+ <em>Advanced</em> category) to navigate from the element selected to the one one which the new representation should actually be created. The
+ <em>Title Expression</em> (
+ <em>Advanced</em> category) can be used to set the title of the newly created representation. Finally, any operation you specify in the body of the tool will be executed when the tool is invoked; you can use it to initialize the content of the model represented.
+ </p>
+ <h4 id="representation_navigation">Representation Navigation</h4>
+ <p>Each dialect supported by Sirius defines a tool which can be used to navigate to existing representation of this dialect. They are (using the default supported dialects):
+ <em>Diagram Navigation</em> description,
+ <em>Table Navigation</em> description and
+ <em>Tree Navigation</em> description.
+ </p>
+ <p>These tools are very similar to the
+ <a href="#representation_creation">representation creation tools</a>. The only differences is that they allow users to navigate to existing representation instead of creating new ones. If such a tool exists, the
+ <em>Navigate</em> context menu on an element will contains an entry for each corresponding representation which already exists on the element selected (or reachable from the selected element using the
+ <em>Browse expression</em>). You can specify a
+ <em>Navigation name expression</em> (
+ <em>Advanced</em> category) to be used in the menu entry instead of using the title of the existing representation. This can be useful to make it more explicit what the relationship is between the current element and the target tree.
+ </p>
+ <h4 id="double_click_tool">Double-Click</h4>
+ <p>This tool is used to trigger operations when the user double-clicks on an element. The
+ <em>Mappings</em> property indicate for what kinds of element this tool is applicable.
+ </p>
+ <p>Inside the body of the tool, the
+ <em>elementView</em> variable refers to the graphical element the user double-clicked on, while the
+ <em>element</em> variable represents its semantic target element.
+ </p>
+ <h4 id="generic_tool">Generic Tool</h4>
+ <p>This generic tool is used to provide a palette entry which can execute any code describe in the internal tool language, including for example invoking external Java actions.</p>
+ <p>Inside the body of the tool, the
+ <em>elementView</em> variable refers to the graphical element the user invoked the tool on, while the
+ <em>element</em> variable represents its semantic target element.
+ </p>
+ <h4 id="popup_menu">Popup Menu</h4>
+ <p>This tool can be used to define an entry in the context menu which can contain
+ <a href="#operation_action">
+ <em>Operation Actions</em>
+ </a> and
+ <a href="#external_java_action">
+ <em>External Java Action</em>
+ </a> tools. Which ones are visible when the menu is opened depend on the preconditions of these actions, which can thus be activated or not depending on the currently selected element.
+ </p>
+ <h4 id="operation_action">Operation Action</h4>
+ <p>This tool can be used to define an operation which will appear as an entry in the context menu (or in a sub-menu if defined inside a
+ <em>Popup Menu</em> element). When invoked, the body of the action is executed with the
+ <em>views</em> variable referencing all the representation elements which were selected on the diagram.
+ </p>
+ <h4 id="external_java_action">External Java Action</h4>
+ <p>The
+ <em>External Java Action</em> tool simply creates a menu entry in the context menu which directly invokes any
+ <a href="../general/Model_Operations.html#external_java_action">External Java Action</a> you can define.
+ </p>
+ <h4 id="request_description">Request</h4>
+ <p>This tool is for advanced uses only. It requires understanding and extending GMF, the graphical framework used by Sirius to display diagrams. A
+ <em>Request</em> description tool will contribute an item in the palette, and when invoked on a graphical element it will send a GMF request to the corresponding edit part. The type of the request to send is specified as a fixed string in the
+ <em>Type</em> property. The target edit part should have an edit policy capable of understanding and reacting to the request.
+ </p>
+ <p><div style="display: none">
+ <br/>h4(#behavior_tool). Behavior Tool
+ <br/>
+ <strong>TODO</strong> Understand what this does exactly, and decide whether we want to keep it or not. Document it if we keep it.
+ <br/></div>
+ </p>
+ <h2 id="filters">Filters</h2>
+ <p>A diagram can define any number of filters, which can be enabled or disabled dynamically by the user to show or hide some elements of a diagram. Filters differ from layers on three main points:</p>
+ <ul>
+ <li>they are more fine-grained, they can selectively hide or show elements depending on their individual characteristics, whereas layers activate or deactivate whole mapping types.</li>
+ <li>they are purely graphical: even if some representation elements are hidden from the user’s view, they still exist;</li>
+ <li>they have no links with tools, they can not show or hide tools. </li>
+ </ul>
+ <p>To add a filter to a diagram, create a
+ <em>Composite Filter</em> inside the
+ <em>Diagram Description</em> element, specify its
+ <em>Name</em> (a fixed string), and add one or several
+ <em>Mapping Filter</em> or
+ <em>Variable Filter</em> elements inside of it.
+ </p>
+ <h3 id="mapping_filter">Mapping Filter</h3>
+ <p>A mapping filter applies to all the elements instance of some mappings, and can filter some of them according to configurable conditions.</p>
+ <p>The
+ <em>Filter Kind</em> attribute of a
+ <em>Mapping Filter</em> can be
+ <code>HIDE</code>, which will completely remove the element from view, or
+ <code>COLLAPSE</code> which will minimize its size to a small transparent square of 4-by-4 pixels. The collapse mode is useful because the edges which use the filtered element as a source or target are still visible when the element is collapsed, while they disappear when the element is hidden.
+ </p>
+ <p>The
+ <em>Mappings</em> property indicates the list of mappings to which the filter will apply.
+ </p>
+ <p>The
+ <em>Semantic Condition Expression</em> will be evaluated in the context of the target semantic elements of each instances of the specified mapping. It should return
+ <strong>true</strong> if the element should be kept visible, and
+ <strong>false</strong> if it should be hidden/collapsed.
+ </p>
+ <p>The
+ <em>View Condition Expression</em> is similar to the
+ <em>Semantic Condition Expression</em>, but is evaluated on the context of the
+ <em>view element</em> of each instance of the specified mapping. The view element is the model element used by Sirius to represent the graphical element. Using these expressions require some knowledge of the structure of the view model used by Sirius.
+ </p>
+ <p>Both expressions are optional. If none is specified, the filter will have no effect. If both are specified, only the elements for which both expressions return
+ <strong>false</strong> will be hidden/collapsed.
+ </p>
+ <p>The expressions of all active filters are evaluated whenever the diagram is refreshed (in the default
+ <em>Auto-refresh</em> mode, whenever a change occurs in the semantic model), not just when the user enables the filter. This means that the active filters can have a big impact on performance if they perform complex tests, so keep this in mind when writing the condition expressions.
+ </p>
+ <h3 id="variable_filter">Variable Filter</h3>
+ <p>A
+ <em>Variable Filter</em> is similar to a
+ <em>Mapping Filter</em>, except that instead of using a list of mappings to select the candidate elements to filter, all represented elements are candidates but can be filtered with a Semantic Condition Expression.
+ <br/>In that expression, the specifier can use variables that are defined in the variable filter.
+ </p>
+ <ul>
+ <li>Select Model Element Variable : it opens a dialog box from which the user can select a collection of EObjects. The configuration of the dialog box uses the same properties and semantic as the
+ <a href="#selection_wizard">Selection Wizard</a> tool. Refer to its documentation for the details.
+ </li>
+ <li>Typed Variable : see
+ <a href="#filter_with_typed_variable">Filter with Typed Variable</a>
+ </li>
+ </ul>
+ <h4 id="filter_with_typed_variable">Filter with Typed Variable</h4>
+ <p>A Typed Variable is a variable which value type is a
+ <em>EDataType</em> as chosen by the specifier and which value is filled by the user when applying the variable filter.
+ <br/>An interpreted expression allows defining the default value.
+ </p>
+ <p>
+ <img border="0" src="images/typedVariable_PropertyView.png"/>
+ </p>
+ <p>When the user applies a variable filter with typed variables, a dialog box is displayed to allow user entering the values.
+ <br/>This dialog box is prompted after all
+ <em>Select Model Element</em> wizard have been prompted.
+ <br/>It contains as many line as number of typed variables under the variable filter.
+ <br/>The user documentation is displayed as tooltip on question mark.
+ <br/>The default value is the result of the interpreted expression defined on VSM.
+ </p>
+ <p>
+ <img border="0" src="images/dialog_TypedVariableValue.png"/>
+ </p>
+ <p>
+ <strong>EDataType class instantiation</strong>
+ </p>
+ <p>Note that whatever the type of variable is, the field is a text field.</p>
+ <p>In order that the EDataType class is instantiable, the value given by the user should follow rules which depend on how it is triggered by EMF mechanism.
+ <br/>If the EFactory of the EDataType is not overloaded, the class corresponding to the EDataType must have a constructor with a String parameter. At instantiation, the string argument will be the string input by the user. This string argument is translated into the right data in the class constructor for example.
+ <br/>What is done in the constructor described above can also be done overloading the EDataType class EFactory.
+ </p>
+ <p>Example:
+ <br/>If your class represents a point coordinates with two fields x and y of type int, the string input by the user could be
+ <em lang="integer">,[integer]</em>. This kind of information could be given to the user through the
+ <em>User documentation</em>
+ </p>
+ <h2 id="validation">Validation Rules</h2>
+ <p>A diagram description can define custom validation rules which will only be applied when launching a validation on an instance of this diagram (using the
+ <em>Validate</em> operation in the context menu). To define validation rules you must first create a
+ <em>Validation</em> element inside the diagram, and then add one or more
+ <em>Semantic Validation Rule</em> or
+ <em>View Validation Rule</em>. Both kinds of rules are similar, but semantic rules check the structure of the underlying semantic model which view validation rules can check the structure of the representation itself. When a rule is violated, a marker will appear on the diagram on the problematic elements and in the
+ <em>Problems</em> view.
+ </p>
+ <p>Each rule has a
+ <em>Level</em>, which represents its severity when it is violated. It can be
+ <em>Information</em>,
+ <em>Warning</em> or
+ <em>Error</em>. It also has a computed
+ <em>Message</em> expression (evaluated in the context of the checked element) to provide the user an explanation of the problem detected. Semantic validation rules must specify
+ <em>Target Class</em>, and will be checked on all the instances of that class in the semantic model. View validation rules have instead of a list of
+ <em>Targets</em> which are the mappings it applies to.
+ </p>
+ <p>Inside a rule you must define one or more
+ <em>Audit</em>, which perform the actual checks using an
+ <em>Audit Expression</em>. The expression will be evaluated on each (semantic or graphical) element to check, and must return
+ <em>false</em> if the rule is violated. If a rule contains several audits, it is triggered if at least one of them detects an issue.
+ </p>
+ <p>You may also define one or more
+ <em>Fixes</em> inside a rule. When a rule is violated, if it defines fixes they will be available to the end-users in the context menu of the corresponding marker. Each fix has a name and a body. The body is defined in the same way as the body of a tool, using any of the available
+ <a href="../general/Model_Operations.html">model operations</a>. It should perform any required change in the model to fix the issue detected by the validation rule, if possible.
+ </p>
+ <h2 id="extensibility">Diagram Extensibility Features</h2>
+ <p>Sirius has specific support for extending and refining diagram descriptions and mappings without modifying the original. The extensions are applied transparently when the viewpoint they are defined in are enabled, and removed when the viewpoint is disabled.</p>
+ <p>For example, if a base viewpoint
+ <em>V1</em> defines a diagram description
+ <em>D</em>, you can define a separate viewpoint
+ <em>V2</em> (maybe even from inside a different plug-in, you do not need access to the source of
+ <em>V1</em>) and in
+ <em>V2</em> define an extension
+ <em>DE</em> to
+ <em>D</em>. When users enable only
+ <em>V1</em>, they see
+ <em>D</em> as defined in
+ <em>V1</em>. When they enable both
+ <em>V1</em> and
+ <em>V2</em>,
+ <em>D</em> is automatically extended by
+ <em>DE</em>.
+ </p>
+ <p>Note that a given diagram type can be extended by multiple extensions at the same time. However if several extensions try to redefine elements defined in the base diagram (instead of just adding new elements), the result is not specified.</p>
+ <h3 id="diagram_extension">Diagram Extensions</h3>
+ <p>A
+ <em>Diagram Extension</em> is defined directly inside a
+ <em>Viewpoint</em> element, and it must specify precisely which diagram description it extends using the
+ <em>Viewpoint URI</em> and
+ <em>Representation Name</em> properties (the
+ <em>Name</em> property is the name of the extension itself).
+ </p>
+ <p>The
+ <em>Viewpoint URI</em> indicates in which viewpoint the extended diagram is defined. It has the following syntax:
+ <code>viewpoint:/pluginId/ViewpointName</code>, where
+ <code>pluginId</code> is the identifier of the Eclipse plug-in in which the viewpoint is defined, and
+ <code>ViewpointName</code> is the name of the viewpoint. Note that the name must be unique among all the viewpoints defined in all the VSMs contributed by that plug-in.
+ </p>
+ <p>The
+ <em>Representation Name</em> is simply the identifier (
+ <em>Id</em> field) of the diagram to extend, which is defined inside the specified viewpoint.
+ </p>
+ <p>A
+ <em>Diagram Extension</em> can specify the
+ <em>Metamodels</em> of the semantic elements it represents if it supports types of elements which were not represented in the extended diagram. Inside a
+ <em>Diagram Extension</em>, you can define
+ <a href="#validation">validation rules</a>,
+ <a href="#filters">filters</a> and additional
+ <a href="#layers">layers</a>. When the extension is enabled (i.e. when both the viewpoint it is defined in and the one it extends are enabled), the elements defined in the extension will be merged (added) into the base diagram’s definition as if they had been defined directly in the base diagram.
+ </p>
+ <p>The simplest use case of a diagram extension is to simply
+ <em>augment</em> the base diagram with new graphical elements, tools, filters and validation rules. However you can also use the notion of
+ <em>Mapping Import</em> to
+ <em>modify</em> the definition of some of the base diagram’s mappings.
+ <em>Mapping Imports</em> are actually independent of diagram extensions, and can be used inside a normal diagram description as their semantic is defined in terms of layers activation, but their main use case is when using diagram extensions.
+ </p>
+ <p>You can use regular expression in
+ <em>Viewpoint URI</em> and
+ <em>Representation Name</em> fields. This allows to extend several diagrams with one single
+ <em>Diagram Extension</em>. You should use regular expressions only to define a
+ <em>Diagram Extension</em> that contains only
+ <a href="#customization">style customization</a>.
+ <br/>These fields are considered as regular expressions if they contain at least one of these characters : “*”, “[”, “]”, “(”, “)” or “?”.
+ </p>
+ <h3 id="mapping_imports">Mapping Imports</h3>
+ <p>A mapping import is used to
+ <em>specialize</em> (modify) a mapping defined somewhere else (in an other layer, an other graphical representation or an other viewpoint). This feature is only available for diagram kind representations.
+ </p>
+ <p>For example, if a layer
+ <em>L1</em> defines a mapping
+ <em>M1</em> and an other layer
+ <em>L2</em> defines a mapping import
+ <em>M2</em> which imports
+ <em>M1</em>, then
+ <em>M2</em> may override/overload some of the features of
+ <em>M1</em> like a more specific “Semantic Candidate Expression” or a conditional style taking into account other specific aspects. When only
+ <em>L1</em> is activated the normal definition of
+ <em>M1</em> is applied. If
+ <em>L2</em> is also activated,
+ <em>M2</em> is applied instead of
+ <em>M1</em>, the overloaded features in
+ <em>M2</em> replace the ones of
+ <em>M1</em> and the new defined features or sub-elements are added.
+ </p>
+ <p>You can define
+ <em>Node Mapping Imports</em>,
+ <em>Container Mapping Imports</em> or
+ <em>Edge Mapping Imports</em>. They all behave in the same way. For each one you must specify the
+ <em>Imported Mapping</em> (typically from another layer defined in a diagram you are extending or in the same diagram). Mapping imports have all the properties of normal mappings, but when you set an explicit value for a property in a mapping import:
+ </p>
+ <ul>
+ <li>if it is an attribute (for example the
+ <em>Semantic Candidates Expression</em>), the value defined in the mapping import will override the one defined in the imported mapping.
+ </li>
+ <li>if it is a reference (for example the
+ <em>Reused Bordered Node Mappings</em> on a
+ <em>Node Mapping Import</em>), the values defined in the mapping import will be
+ <em>added</em> to the ones defined in the imported mapping.
+ </li>
+ </ul>
+ <p>Two parameters which are specific to import mappings can change this last behavior:</p>
+ <ul>
+ <li>If the
+ <em>Inherits Ancestor Filters</em> flag is set, the
+ <a href="#mapping_filter">mapping filters</a> which apply to the imported mapping will also apply to the import itself. However if you do
+ <strong>not</strong> want to inherit these filters, you can un-check the
+ <em>Inherits Ancestor Filters</em> flag. In that case only the mapping filters which explicitly target the import mapping will apply to it.
+ </li>
+ <li>If the
+ <em>Hide Sub-Mappings</em> flag is set, then when the import mapping is active, only the sub-mappings it defines explicitly (including bordered node mappings) are taken into account. This is different from the standard behavior in which both the sub-mappings defined in the imported mapping and in the import mapping are used. For example, this means that if the imported mapping defines a bordered node mapping, a mapping import can
+ <em>hide</em> these bordered nodes by using this flag and simply not define any bordered node mapping of its own.
+ </li>
+ </ul>
+ <h2 id="customization">Diagram Styles Customization</h2>
+ <p>Diagram elements support conditional styles, which can be used to completely change the appearance of an element depending on some arbitrary condition. However, defining a complete conditional style can be cumbersome when you just want to customize a specific aspect of the element’s style (for example a single color). A more fine grained customization of styles is possible using
+ <em>Style Customization</em> elements.
+ </p>
+ <p>To use this feature, you must first create a
+ <em>Style Customizations</em> element inside a layer (from the
+ <em>New Customization...</em> context sub-menu). Only one such element can exist in a layer, and it serves as a container for all style customizations the layer defines. Inside a
+ <em>Style Customizations</em> you can define any number of individual
+ <em>Style Customization</em> elements, each of which re-groups a set of actual customizations which can be either an
+ <em>Property Customization (by expression)</em> or a
+ <em>Property Customization (by selection)</em>. Both kinds work on the same principle, and you must define:
+ </p>
+ <ul>
+ <li>The style elements to customize, using the
+ <em>Applied On</em> attribute. You can specify multiple styles if the customization should apply to different style elements or to different styles for a given element (e.g. the default and some or all of the conditional styles).
+ </li>
+ <li>The feature to customize, using the
+ <em>Property Name</em> field (you can use completion with
+ <em>Ctrl+Space</em> to see the list of possible values depending on which element(s) you selected in
+ <em>Applied On</em>).
+ </li>
+ <li>And finally the value to set for that feature. For references (
+ <em>Property Customization (by selection)</em>), you must select the actual value from the available choices in the combo box. For attributes (
+ <em>Property Customization (by expression)</em>), the value is computed using an interpreted expression evaluated in the context of the semantic element whose style is being customized.
+ </li>
+ <li>The
+ <strong>Apply on all</strong> option offers the possibility to customize the feature for all styles available in the diagram. That option avoids you to make an exhaustive list of all styles to customize. You can also make your customizations available for several representations by using a regular expression in Viewpoint URI and Representation Name fields (see
+ <a href="#diagram_extension">Diagram Extension Description</a> for more details).
+ </li>
+ </ul>
+ <p>A
+ <em>Style Customization</em> can define a predicate expression to control whether or not it should apply. If defined, the expression is evaluated in the context of a semantic element to determine whether or not the customizations should be applied. If no expression is defined, the customizations will apply. If a
+ <em>Style Customization</em> applies to a given element, the
+ <em>base style</em> that the element would normally have will be modified by applying all the
+ <em>Property Customization</em> (by expression and by reference) defined in the
+ <em>Style Customization</em> , if they are compatible with that base style.
+ </p>
+ <p>A
+ <em>Style Customizations</em> group can also contain
+ <em>Style Customization Reuse</em> elements. These can be used to reuse customizations defined elsewhere in a different context (specified using the
+ <em>Reuse</em> property), and apply them to other elements (specified using the
+ <em>Applied On</em> property). They will behave as if they had been defined locally inside a
+ <em>Style Customization</em> with no precondition.
+ </p>
+ <h3 id="enum_customization">Style Customization of an Enumerator property </h3>
+ <p>To customize a property of type Enumerator, the value expression must return an instance of Enumerator. Here is some examples of value expression:</p>
+ <ul>
+ <li>Examples for sourceArrow property (of kind
+ <code>EdgeArrows</code>):
+ <ul>
+ <li>
+ <code>aql:diagram::EdgeArrows::FillDiamond</code>
+ </li>
+ <li>
+ <code>aql:'FillDiamond'</code> or
+ <code>FillDiamond</code> also works but it is not recommended to use the literal value of an instance of Enumerator.
+ </li>
+ </ul>
+ </li>
+ <li>Examples for labelFormat property (of kind
+ <code>EList<FontFormat></code>):
+ <ul>
+ <li>
+ <code>aql:viewpoint::FontFormat::bold</code> to set a label in bold
+ </li>
+ <li>
+ <code>aql:OrderedSet{viewpoint::FontFormat::bold, viewpoint::FontFormat::italic}</code> to set a label in bold and italic
+ </li>
+ <li>
+ <code>service:fontFormatBold()</code> with a service like
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <pre>public FontFormat fontFormatBold(EObject any) {
+ return FontFormat.BOLD_LITERAL;
+ }
+</pre>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation1.png b/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation1.png
new file mode 100644
index 0000000..97a9a90
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation1.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation2.png b/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation2.png
new file mode 100644
index 0000000..261014a
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation2.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation3.png b/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation3.png
new file mode 100644
index 0000000..4cf6f91
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation3.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/decoration_borderNode.png b/doc/5.1.x/specifier/diagrams/images/decoration_borderNode.png
new file mode 100644
index 0000000..94e7aa9
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/decoration_borderNode.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/decoration_example.png b/doc/5.1.x/specifier/diagrams/images/decoration_example.png
new file mode 100644
index 0000000..860c703
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/decoration_example.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/decoration_group_example.png b/doc/5.1.x/specifier/diagrams/images/decoration_group_example.png
new file mode 100644
index 0000000..6b95ad1
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/decoration_group_example.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/decoration_group_tooltip_example.png b/doc/5.1.x/specifier/diagrams/images/decoration_group_tooltip_example.png
new file mode 100644
index 0000000..2c3d82b
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/decoration_group_tooltip_example.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/decoration_positions.png b/doc/5.1.x/specifier/diagrams/images/decoration_positions.png
new file mode 100644
index 0000000..c933b69
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/decoration_positions.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/decoration_tooltip_example.png b/doc/5.1.x/specifier/diagrams/images/decoration_tooltip_example.png
new file mode 100644
index 0000000..868b351
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/decoration_tooltip_example.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/dialog_TypedVariableValue.png b/doc/5.1.x/specifier/diagrams/images/dialog_TypedVariableValue.png
new file mode 100644
index 0000000..9c22f7e
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/dialog_TypedVariableValue.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/mappingBasedDecoration.png b/doc/5.1.x/specifier/diagrams/images/mappingBasedDecoration.png
new file mode 100644
index 0000000..58935f4
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/mappingBasedDecoration.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/references/reconnect/ReconnectTool_After.png b/doc/5.1.x/specifier/diagrams/images/references/reconnect/ReconnectTool_After.png
new file mode 100644
index 0000000..8e3b1d1
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/references/reconnect/ReconnectTool_After.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/references/reconnect/ReconnectTool_Before.png b/doc/5.1.x/specifier/diagrams/images/references/reconnect/ReconnectTool_Before.png
new file mode 100644
index 0000000..f497672
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/references/reconnect/ReconnectTool_Before.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/semanticBasedDecoration.png b/doc/5.1.x/specifier/diagrams/images/semanticBasedDecoration.png
new file mode 100644
index 0000000..46c845b
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/semanticBasedDecoration.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Gradient.png b/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Gradient.png
new file mode 100644
index 0000000..d08c3da
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Gradient.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Image.png b/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Image.png
new file mode 100644
index 0000000..7f399bf
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Image.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Parallelogram.png b/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Parallelogram.png
new file mode 100644
index 0000000..36af4e5
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Parallelogram.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Containers_on_diagram_or_another_container.png b/doc/5.1.x/specifier/diagrams/images/styles/Containers_on_diagram_or_another_container.png
new file mode 100644
index 0000000..596e867
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Containers_on_diagram_or_another_container.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Containers_with_compartments.png b/doc/5.1.x/specifier/diagrams/images/styles/Containers_with_compartments.png
new file mode 100644
index 0000000..e831e29
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Containers_with_compartments.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Centering.png b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Centering.png
new file mode 100644
index 0000000..47ea6ed
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Centering.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Manhattan.png b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Manhattan.png
new file mode 100644
index 0000000..a079f4f
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Manhattan.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Straight.png b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Straight.png
new file mode 100644
index 0000000..7a7f657
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Straight.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Tree.png b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Tree.png
new file mode 100644
index 0000000..3cdfdc5
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Tree.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_bracketStyle.png b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_bracketStyle.png
new file mode 100644
index 0000000..584ef20
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_bracketStyle.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Bordered_Node.png b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Bordered_Node.png
new file mode 100644
index 0000000..9defb26
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Bordered_Node.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Container.png b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Container.png
new file mode 100644
index 0000000..a22fdca
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Container.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_List_Container.png b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_List_Container.png
new file mode 100644
index 0000000..890dd2b
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_List_Container.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Node.png b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Node.png
new file mode 100644
index 0000000..f83d839
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Node.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/List_container_with_items.png b/doc/5.1.x/specifier/diagrams/images/styles/List_container_with_items.png
new file mode 100644
index 0000000..bd2918a
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/List_container_with_items.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Dot.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Dot.png
new file mode 100644
index 0000000..9b4b8e2
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Dot.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Ring.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Ring.png
new file mode 100644
index 0000000..59a61d1
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Ring.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Square.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Square.png
new file mode 100644
index 0000000..154a111
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Square.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Stroke.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Stroke.png
new file mode 100644
index 0000000..a2bd611
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Stroke.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Triangle.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Triangle.png
new file mode 100644
index 0000000..0d916ed
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Triangle.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Custom.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Custom.png
new file mode 100644
index 0000000..67147a4
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Custom.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Diamond.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Diamond.png
new file mode 100644
index 0000000..f05cfd5
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Diamond.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Ellipse.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Ellipse.png
new file mode 100644
index 0000000..317acca
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Ellipse.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Gauge.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Gauge.png
new file mode 100644
index 0000000..a83278d
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Gauge.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Image.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Image.png
new file mode 100644
index 0000000..108574f
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Image.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Note.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Note.png
new file mode 100644
index 0000000..ed55ba0
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Note.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Square.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Square.png
new file mode 100644
index 0000000..c18323f
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Square.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Pane-Based_Selection_Tool.png b/doc/5.1.x/specifier/diagrams/images/styles/Pane-Based_Selection_Tool.png
new file mode 100644
index 0000000..40da8b4
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Pane-Based_Selection_Tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Selection_Tool.png b/doc/5.1.x/specifier/diagrams/images/styles/Selection_Tool.png
new file mode 100644
index 0000000..3a329fe
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Selection_Tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/authorizedSides.png b/doc/5.1.x/specifier/diagrams/images/styles/authorizedSides.png
new file mode 100644
index 0000000..03d963f
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/authorizedSides.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Horizontal.jpg b/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Horizontal.jpg
new file mode 100644
index 0000000..8d247b2
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Horizontal.jpg
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Square.jpg b/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Square.jpg
new file mode 100644
index 0000000..fb29daa
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Square.jpg
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Vertical.jpg b/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Vertical.jpg
new file mode 100644
index 0000000..fd1882a
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Vertical.jpg
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/typedVariable_PropertyView.png b/doc/5.1.x/specifier/diagrams/images/typedVariable_PropertyView.png
new file mode 100644
index 0000000..d5ccc16
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/typedVariable_PropertyView.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/Colors.html b/doc/5.1.x/specifier/general/Colors.html
new file mode 100644
index 0000000..e35cc0a
--- /dev/null
+++ b/doc/5.1.x/specifier/general/Colors.html
@@ -0,0 +1,95 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Colors</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="DefiningColorPalettes">Defining Color Palettes</h1>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#DefiningColorPalettes">Defining Color Palettes</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#system_colors">System Colors</a>
+ </li>
+ <li>
+ <a href="#fixed_colors">User Fixed Colors</a>
+ </li>
+ <li>
+ <a href="#computed_colors">Computed Colors</a>
+ </li>
+ <li>
+ <a href="#interpolated_colors">Interpolated Colors</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="introduction">Introduction</h2>
+ <p>Whenever you have to specify colors for a style, in any kind of representation supported by Sirius, you can use either one of the pre-defined system colors or one which you have defined yourself in a
+ <em>Users Color Palette</em>. The palette is created directly inside the
+ <em>Viewpoint</em> element, and its colors can be used by any representation.
+ </p>
+ <p>You can define three different kind of colors inside a palette:</p>
+ <ul>
+ <li>
+ <em>User Fixed Colors</em>
+ </li>
+ <li>
+ <em>Computed Colors</em>
+ </li>
+ <li>
+ <em>Interpolated Colors</em>
+ </li>
+ </ul>
+ <p>All have a name, which should be unique. It is useful to give semantic names to the colors (i.e. “Software System” instead of “Navy Blue”) so that they can be easily used consistently across all your representations. This way if you decide to change to color used for some kind of element you can be sure the new color will be applied everywhere.</p>
+ <h2 id="system_colors">System Colors</h2>
+ <p>System colors are not defined in your palette, but are always available.</p>
+ <p>
+ <img border="0" src="images/standard_colors.png"/>
+ </p>
+ <h2 id="fixed_colors">User Fixed Colors</h2>
+ <p>User Fixed Colors are the simplest: they are simply defined by fixed integer values for their
+ <em>Red</em>,
+ <em>Green</em> and
+ <em>Blue</em> components. All components values must be between 0 and 255. You can either specify them numerically or using a color wheel.
+ </p>
+ <h2 id="computed_colors">Computed Colors</h2>
+ <p>Computed color have RGB components values which are dynamically computed. You must specify one expression for each of the
+ <em>Red</em>,
+ <em>Green</em> and
+ <em>Blue</em> components. They will be evaluated in the context of the semantic target element of the graphical element where the color is used. The expressions should return a number between 0 and 255.
+ </p>
+ <h2 id="interpolated_colors">Interpolated Colors</h2>
+ <p>This element is used to specify a custom color which create dynamically a color between two or more
+ <em>Color Steps</em>. Those
+ <em>Color Steps</em> are defined as children of the
+ <em>Interpolated Color</em>.
+ </p>
+ <p>Each
+ <em>Color Step</em> associates a color (from the palette) with a numerical
+ <em>Associated Value</em> (which can be computed). The successive color steps in an interpolated color should have increasing associated values.
+ </p>
+ <p>The
+ <em>Interpolated Color</em> itself has a
+ <em>Color Value Computation Expression</em>, which should return a numeric value.
+ </p>
+ <ul>
+ <li>If the value is below or equal the value associated with the first color step, the final color is the one of the first color step.</li>
+ <li>If the value is above or equal the value associated with the last color step, the final color is the one of the last color step.</li>
+ <li>If the value is between the associated values of two successive color steps
+ <em>S1</em> and
+ <em>S2</em>, the final color is interpolated between the colors of
+ <em>S1</em> and
+ <em>S2</em>. Each of the RGB components is linearly interpolated between the ones of
+ <em>S1</em> and
+ <em>S2</em> according to the distance between the associated values.
+ </li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/general/Model_Operations.html b/doc/5.1.x/specifier/general/Model_Operations.html
new file mode 100644
index 0000000..598893f
--- /dev/null
+++ b/doc/5.1.x/specifier/general/Model_Operations.html
@@ -0,0 +1,437 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Model_Operations</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SpecifyingModelOperations">Specifying Model Operations</h1>
+ <h2 id="introduction">Introduction</h2>
+ <p>Most modelers created with Sirius are not just used to view models, but also to edit them. The edition behavior is specified through different kinds of tools (e.g.
+ <em>Direct Edit</em>,
+ <em>Creation Tool</em>, etc.) which depend on the dialect. The behavior of each tool of each dialect is specified inside the VSM using a small
+ <em>Domain Specific Language</em> of model operations. This document describes all the model operations supported by this language. Unless otherwise specified, model operations can be used/composed for any tool of any dialect.
+ </p>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#SpecifyingModelOperations">Specifying Model Operations</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#flow">Flow Control Operations</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#begin">Begin</a>
+ </li>
+ <li>
+ <a href="#goto">Change Context</a>
+ </li>
+ <li>
+ <a href="#if">If</a>
+ </li>
+ <li>
+ <a href="#switch">Switch/Case</a>
+ </li>
+ <li>
+ <a href="#for">For</a>
+ </li>
+ <li>
+ <a href="#let">Let</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#model_change">Model Change Operations</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#create_instance">Create Instance</a>
+ </li>
+ <li>
+ <a href="#set">Set</a>
+ </li>
+ <li>
+ <a href="#unset">Unset</a>
+ </li>
+ <li>
+ <a href="#remove">Remove</a>
+ </li>
+ <li>
+ <a href="#move">Move</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#representations">Representations Operations</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#create_view">Create View</a>
+ </li>
+ <li>
+ <a href="#created_edge_view">Create Edge View</a>
+ </li>
+ <li>
+ <a href="#delete_view">Delete View</a>
+ </li>
+ <li>
+ <a href="#navigation">Navigation</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#dialogandwizard">Dialog & Wizard</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#dialog">Open Dialog</a>
+ </li>
+ <li>
+ <a href="#wizard">Open Wizard</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#extensions">Java Extensions</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#external_java_action">External Java Action</a>
+ </li>
+ <li>
+ <a href="#external_java_action_call">External Java Action Call</a>
+ </li>
+ <li>
+ <a href="#standard_java_actions">Standard Java Actions</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="flow">Flow Control Operations</h2>
+ <h3 id="begin">Begin</h3>
+ <p>This element has no property. It only serves as an entry point to the specification of a tool’s behavior. Note that a
+ <em>Begin</em> element can only contain a single operation. It is recommended to begin a tool’s specification by creating a no-op
+ <a href="#goto">
+ <em>Change Context</em>
+ </a> operation directly inside the
+ <em>Begin</em>, as a
+ <em>Change Context</em> can contain multiple operations.
+ </p>
+ <h3 id="goto">Change Context</h3>
+ <p>Every model operation is executed in the context of a specific model element (the equivalent of
+ <code>this</code> or
+ <code>self</code> in a programming language). Usually, at the beginning of a tool, the context is the semantic element to which the tool is applied (the actual details can vary from tool to tool, refer to their documentation). The
+ <em>Change Context</em> operation changes the context to a new element and then executes any sub-operations it contains in sequence (in the order of definition).
+ </p>
+ <p>The new context element to go to is specified by the
+ <em>Browse Expression</em> property of the
+ <em>Change Context</em> operation. It is executed in the context element of the
+ <em>Change Context</em> operation itself, and should return another model element (which will become the context for the sub-operations). If the expression does not return any element, it is not an error, but the sub-operations are not executed. If the expression returns several elements, only the first one is retained and used as the context for the sub-operations.
+ </p>
+ <p>
+ <em>Tip:</em> Using a no-op
+ <em>Change Context</em> (with a browse expression like
+ <code>aql:self</code> which does not actually change the context) can be useful to group multiple operations into a single “block”, especially in contexts where only one model operation is supported (e.g. inside a
+ <em>Begin</em> element).
+ </p>
+ <h3 id="if">If</h3>
+ <p>The
+ <em>If</em> operation is used for condition execution. It first evaluates its
+ <em>Condition Expression</em> in the current context, and if the result of this expression (interpreted as a boolean) is true then it executes any sub-operations it contains in sequence (in the order of definition). If the expression returns a false value,
+ <em>If</em> does nothing.
+ </p>
+ <p>
+ <em>Note:</em> “else” and “else if” constructs are not supported directly, but the same effect can be achieved using the
+ <a href="#switch">
+ <em>Switch</em>
+ </a> operation with the appropriate
+ <em>Cases</em>.
+ </p>
+ <h3 id="switch">Switch/Case</h3>
+ <p>A
+ <em>Switch</em> operation is used for branching. It is a generalization of the
+ <em>If</em> constructs which supports multiple conditions. The
+ <em>Switch</em> operation itself has not property; it serves only as a container for one or more
+ <em>Case</em> elements, and an optional
+ <em>Default</em> element. Each
+ <em>Case</em> element has a
+ <em>Condition Expression</em>, and may contain sub-operations. The
+ <em>Default</em> element has no property but may contain sub-operations.
+ </p>
+ <p>When a
+ <em>Switch</em> is executed, the
+ <em>Condition Expressions</em> or each of its
+ <em>Case</em> elements is evaluated (in the current context) until one returns a true value. If one is found, the sub-operations of the
+ <em>Case</em> element are executed in sequence, and the rest of the
+ <em>Switch</em> is ignored (the remaining conditions, if any, are not tested). If none of the
+ <em>Cases</em> has an expression which returns true, then the sub-operations of the
+ <em>Default</em> element, if any, are executed in sequence.
+ </p>
+ <p>A combination of
+ <em>Switch/Case/Default</em> is equivalent to
+ <code>if (...) { ... } elsif (...) { ... } else { ... }</code> in a programming language.
+ </p>
+ <h3 id="for">For</h3>
+ <p>The
+ <em>For</em> element is used to loop over collections of model elements and execute some operations on all of them. The
+ <em>Expression</em> of the
+ <em>For</em> element is executed in the current context, and should return a collection of model elements. The
+ <em>Iterator name</em> property is a fixed string (
+ <code>i</code> by default) which give the name of the variable used for the iteration.
+ </p>
+ <p>After evaluating the
+ <em>Expression</em>, each of the element in the returned collection will be bound in turn to a variable named as specified in
+ <em>Iterator name</em> before the sub-operations of the
+ <em>For</em> element are executed in sequence (once for each of the returned element). Inside the sub-operations, you can access the current element of the iteration using the variable named in
+ <em>Iterator name</em>. The actual syntax will vary depending on the query language you use.
+ </p>
+ <h3 id="let">Let</h3>
+ <p>The
+ <em>Let</em> operation is used in order to create a new variable which can be used by child model operations. The
+ <em>Variable name</em> is a fixed string used to access the variable in child model operation. The
+ <em>Value expression</em> is executed in order to set the value of the variable. The
+ <em>Let</em> operation is similar to a
+ <em>For</em> operation with an expression returning only one element for the iteration. If the
+ <em>Variable name</em> is “self”, the behavior of the
+ <em>Let</em> will be the same as the behavior of a
+ <em>Change Context</em>. It is not recommended to use a
+ <em>Let</em> with the
+ <em>Variable name</em> “self”, prefer the
+ <em>Change Context</em> for a better readability of your odesign.
+ </p>
+ <h2 id="model_change">Model Change Operations</h2>
+ <h3 id="create_instance">Create Instance</h3>
+ <p>The
+ <em>Create Instance</em> operation is used to create new semantic elements to be added into the user’s model. You must specify :
+ </p>
+ <ol>
+ <li>the
+ <em>Type Name</em> (using the same syntax as for
+ <em>Domain Class</em> properties) of the new object to create
+ </li>
+ <li>the
+ <em>Reference Name</em> through which the created element will be attached to the current context.
+ </li>
+ </ol>
+ <p>When the
+ <em>Create Instance</em> operation is executed, say in the context of semantic element
+ <em>S</em>, a new instance of the specified type name is created and then added to
+ <em>S</em>'s reference named in
+ <em>Reference Name</em>. The reference name must correspond to a valid containment reference for the context element of the operation, otherwise the newly created object will not be properly integrated into the semantic model.
+ </p>
+ <p>The
+ <em>Variable Name</em> property can be set to any valid variable name (
+ <code>instance</code> by default). The named variable is assigned with the newly created object, so that it can be accessed from the remaining operations in the tool.
+ </p>
+ <p>Inside the
+ <em>Create Instance</em> element you can add sub-operations, which will be executed in sequence in the context of the newly created element. This is useful to correctly initialize the new object’s properties.
+ </p>
+ <h3 id="set">Set</h3>
+ <p>The
+ <em>Set</em> operation is used to set the value of a feature (attribute or reference) of the current element. When executed, it evaluates the
+ <em>Value Expression</em> in the current context element. The expression’s result is then
+ <em>set</em> as the new value of the feature named in
+ <em>Feature Name</em> of the current context element. The value returned by the expression must be type-compatible with the named feature.
+ </p>
+ <p>Inside the
+ <em>Set</em> element you can add sub-operations, which will be executed in sequence in the same context.
+ </p>
+ <h3 id="unset">Unset</h3>
+ <p>The
+ <em>Unset</em> operation is used to remove elements from a feature (attribute or reference) of the current element. When executed, it evaluates the
+ <em>Element Expression</em> in the current context element, which may return one or more elements. Each of the returned elements are then removed from the feature named in
+ <em>Feature Name</em> of the current context element. It is not an error if some of the returned elements are not actually part of the specified feature, they are simply ignored.
+ </p>
+ <p>Inside the
+ <em>Unset</em> element you can add sub-operations, which will be executed in sequence in the same context.
+ </p>
+ <h3 id="remove">Remove</h3>
+ <p>The
+ <em>Remove</em> operation is used to remove the current element from its parent element. It takes no parameter. When executed, it simply removes the element from its containing feature.
+ </p>
+ <h3 id="move">Move</h3>
+ <p>The
+ <em>Move</em> operation is used to move the current element from its current parent into a new one. The
+ <em>New Container Expression</em> is evaluated in the current context and should return the (single) element in which to move. The
+ <em>Feature Name</em> indicates the containment feature of the new parent in which to add the current element.
+ </p>
+ <h2 id="representations">Representations Operations</h2>
+ <h3 id="create_view">Create View</h3>
+ <p>This operation is specific to diagrams. It can be used to explicitly create a view (graphical representation) of the current element, which is mostly useful when using unsynchronized diagrams and/or mappings.</p>
+ <p>The
+ <em>Container View Expression</em> is evaluated in the context of the current semantic element, and should return the view (
+ <code>DDiagram</code>,
+ <code>DNode</code> or
+ <code>DNodeContainer</code>) in which the new view should appear. The
+ <em>Mapping</em> indicates the kind of view to create. If the container view expression returns an element which can contain a view for the current semantic element and specified mapping (and does not already contain one), the view will be created, even if the diagram and/or mapping is not synchronized.
+ </p>
+ <p>Note that because the
+ <em>Container View Expression</em> is evaluated in the context of a semantic element and must return a view, you must use the cross-referencer to navigate from the semantic model to the view model. Using the Acceleo 3 language you can use the
+ <code>eInverse()</code> service to find which elements point to the current one and then select only those which do it through a reference named
+ <code>target</code> (the views in Sirius diagrams reference their target semantic element through this reference).
+ </p>
+ <p>The
+ <em>Variable Name</em> property can be set to any valid variable name (
+ <code>createdView</code> by default). The named variable is assigned with the newly created view, so that it can be accessed from the remaining operations in the tool.
+ </p>
+ <h3 id="created_edge_view">Create Edge View</h3>
+ <p>This operation is specific to diagrams. It can be used to explicitly create an edge view (graphical representation) of the current element, which is mostly useful when using unsynchronized diagrams and/or mappings.</p>
+ <p>It works similarly to the
+ <a href="#create_view">
+ <em>Create View</em>
+ </a> operation, except that in addition to the
+ <em>Container View Expression</em>, you must also provide a
+ <em>Source Expression</em> and a
+ <em>Target Expression</em>, which should return the semantic elements between which the edge should be created, if source and target views are found regarding the selected edge mapping properties.
+ </p>
+ <h3 id="delete_view">Delete View</h3>
+ <p>This operation is specific to diagrams. It can be used to explicitly remove a view (graphical representation) from the diagram, without deleting the corresponding semantic element. It is mostly useful when using unsynchronized diagrams and/or mappings.</p>
+ <p>It has no parameter and works similarly to the
+ <em>Remove</em> operation; you must already be in the context of the view element you want to delete.
+ </p>
+ <h3 id="navigation">Navigation</h3>
+ <p>This operation is specific to diagrams. It can be used to navigate to another diagram representing the current element. The
+ <em>Diagram Description</em> indicates the type of diagram to open, and the
+ <em>Create if not existent</em> flag indicates whether a new diagram of the specified type should be created on the current element if none exists.
+ </p>
+ <p>The operation does nothing if the current element is not compatible with the specified diagram type or if there is no existing diagram and the
+ <em>Create if not existent</em> flag is not set.
+ </p>
+ <h2 id="dialogandwizard">Dialog & Wizard</h2>
+ <p>
+ <strong>Warning:</strong> The model operations below are provided by the Sirius properties view plugins. To make sure those operations will be available to the end user, you should add the following plugins in your modeler dependencies:
+ </p>
+ <ul>
+ <li>org.eclipse.sirius.properties</li>
+ <li>org.eclipse.sirius.ui.properties</li>
+ </ul>
+ <p>If those plugins are missing at runtime, Open Dialog and Open Wizard operations will not be executable.</p>
+ <h3 id="dialog">Open Dialog</h3>
+ <p>The
+ <em>Open Dialog</em> model operation is used in order to open a new dialog where the end user will be able to see and manipulate some pieces of information. You can change the title of the dialog with the
+ <em>Title expression</em>. This expression must return a string. You can specify one
+ <em>Page</em> with various
+ <em>Groups</em> to specify the content of the dialog. You can leverage existing
+ <em>Pages</em> and
+ <em>Groups</em> from existing definition of your
+ <em>Properties View</em>.
+ </p>
+ <p>A dialog can contain multiple buttons. If you do not specify any button, two will be created by default. The first one, with the label “Cancel”, will close the dialog and rollback any changes made during the execution of the model operation chain. The second one, with the label “OK”, will close the dialog and execute the child model operations of the dialog. </p>
+ <p>You can create
+ <em>Dialog Buttons</em> in a dialog in order to specify the behavior of the buttons. If at least one
+ <em>Dialog Button</em> is specified, the default behavior previously described will not be used anymore. For each
+ <em>Dialog Button</em> description, a button will be added in the user interface of the dialog. The label of the button can be specified with the
+ <em>Label expression</em> which must return a string. The
+ <em>Is Enabled expression</em> is used to determine if the button must be activated or not. This can be used to prevent the end user from finishing an action. This expression must return a boolean. An
+ <em>Initial Operation</em> is available on a
+ <em>Dialog Button</em> in order to specify the behavior to execute when the user will click on the button.
+ </p>
+ <p>The specifier can indicate that a
+ <em>Dialog Button</em> should be considered by default with the
+ <em>default</em> boolean. When a
+ <em>Dialog Button</em> should be used by
+ <em>default</em>, it is focused by default when the dialog is opened. A
+ <em>Dialog Button</em> can also close the dialog by using the property
+ <em>Close Dialog On Click</em>. By specifying
+ <em>false</em> as the value for
+ <em>Close Dialog On Click</em> and by using an
+ <em>Initial Operation</em> on the button, a specifier can easily create a button to restore a default value. Finally, a boolean is available in order to
+ <em>Rollback Changes On Close</em>. By setting this value to true, when the button will be pressed, it will have the same behavior as a regular cancel button by rollbacking the whole model operation chain.
+ </p>
+ <h3 id="wizard">Open Wizard</h3>
+ <p>The
+ <em>Open Wizard</em> model operation is used in order to open a new wizard to let the end user specify some information using multiple
+ <em>Pages</em>. You can configure the title of the window by returning a string with the
+ <em>Window Title</em> expression. You can also configure the title and description of the wizard with the
+ <em>Title</em> and
+ <em>Description</em> expressions. Both expressions should also return a string. You can prevent the end user from finishing early the wizard and from switching to another page by returning false for the
+ <em>Is Page Complete</em> expression. A wizard can be closed only if all
+ <em>Pages</em> are completed.
+ </p>
+ <p>The wizard can also contain various
+ <em>Pages</em> and
+ <em>Groups</em> using the
+ <em>Properties View</em> domain specific langage available in Sirius. You can leverage existing
+ <em>Pages</em> and
+ <em>Groups</em> from existing definition of your
+ <em>Properties View</em>. A wizard can also contain an
+ <em>Initial Operation</em> used to define the child model operations to execute when the user will finish the wizard.
+ </p>
+ <h2 id="extensions">Java Extensions</h2>
+ <p>Beyond the operations which are described above, you can also execute arbitrary Java code in the context of a tool by providing an
+ <em>External Java Action</em> and invoking it with the corresponding operation.
+ </p>
+ <h3 id="external_java_action">External Java Action</h3>
+ <p>When used as a model operation (instead of as a full-blown tool), you only have to specify the
+ <em>Java Action Id</em>. It should correspond to an extension of the
+ <code>org.eclipse.sirius.externalJavaAction</code> extension point which registers a class implementing
+ <code>org.eclipse.sirius.tools.api.ui.IExternalJavaAction</code> to be executed. You may also create
+ <em>External Java Action Parameter</em> elements inside the
+ <em>External Java Action</em> element. Each one has a fixed
+ <em>Key</em> and a computed
+ <em>Value</em>, which will be evaluated before the operation is executed and made available to the Java class through the
+ <code>parameters</code> argument of the
+ <code>execute()</code> method.
+ </p>
+ <p>As the External Java Action uses the Eclipse extension point mechanism, it means you cannot use it in development mode (when the
+ <a href="../../Glossary.html#VSM">
+ <em>Viewpoint Specification Model</em>
+ </a> you are working on is in the workspace).
+ </p>
+ <h3 id="external_java_action_call">External Java Action Call</h3>
+ <p>
+ <em>External Java Action Call</em> is simply a convenience operation to invoke an
+ <em>External Java Action</em> defined elsewhere in the VSM, with potentially different parameters.
+ </p>
+ <h3 id="standard_java_actions">Standard Java Actions</h3>
+ <p>The following External Java Actions are available in standard and can be used in
+ <a href="../../Glossary.html#VSM">
+ <em>Viewpoint Specification Models</em>
+ </a>. Note that if you want to create your own actions, you can implement
+ <code>org.eclipse.sirius.tools.api.ui.IExternalJavaAction</code> directly or inherit from
+ <code>org.eclipse.sirius.business.api.action.AbstractExternalJavaAction</code> which provides some helper methods.
+ </p>
+ <h4 id="org.eclipse.sirius.business.api.action.moveElement">org.eclipse.sirius.business.api.action.moveElement</h4>
+ <p>This external Java action can be used to move an element to a different position inside a many-valued EReference.</p>
+ <p>Action parameters:</p>
+ <ul>
+ <li>
+ <code>referenceOwner</code> (an EObject): the owner of the EReference to edit.
+ </li>
+ <li>
+ <code>referenceName</code> (a string): the name of the EReference of the owner object to edit. This must be a many-valued, changeable reference.
+ </li>
+ <li>
+ <code>element</code> (an EObject): the element to move inside the list. It is an error if the specified element is not in the list.
+ </li>
+ <li>
+ <code>predecessor</code>: the element of the list right before which element must be moved, i.e. after the operation, predecessor will be the direct predecessor of element in the list. May be null to indicate that element should be moved at the front of the list. If not null, it is an error if predecessor is not in the list.
+ </li>
+ </ul>
+ <h4 id="org.eclipse.sirius.business.api.action.printVariables">org.eclipse.sirius.business.api.action.printVariables</h4>
+ <p>This external Java action is designed to help debugging
+ <em>Viewpoint Specification Models</em> by printing (in standard output)
+ <br/>all the variables accessible to model operations at the invocation point.
+ </p>
+ <p>Action parameters:</p>
+ <ul>
+ <li>
+ <code>title</code>: an optional string header to print before the list of variables, for example to distinguish different uses of this action in the same VSM.
+ </li>
+ <li>
+ <code>enabled</code>: an optional boolean (defaults to true) to indicate if the action should be executed or not. This is useful to quickly enable/disable an action with minimal editing of the VSM.
+ </li>
+ </ul>
+ <h4 id="org.eclipse.sirius.ui.business.api.action.openHelpSection">org.eclipse.sirius.ui.business.api.action.openHelpSection</h4>
+ <p>This external Java action can be used to open the Eclipse Help system (or actually any web page) on a specific section from inside a tool (typically a popup menu).</p>
+ <p>Action parameters:</p>
+ <ul>
+ <li>
+ <code>href</code>: the URL of the help resource. To open an Eclipse Help section, use an URI of the form
+ <code>/com.example.pluginName/path/to/document.html#sectionId</code>
+ </li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/general/Specifying_Viewpoints.html b/doc/5.1.x/specifier/general/Specifying_Viewpoints.html
new file mode 100644
index 0000000..2e9806c
--- /dev/null
+++ b/doc/5.1.x/specifier/general/Specifying_Viewpoints.html
@@ -0,0 +1,516 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Specifying_Viewpoints</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SpecifyingViewpoints">Specifying Viewpoints</h1>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#SpecifyingViewpoints">Specifying Viewpoints</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#concepts">Philosophy and Concepts</a>
+ </li>
+ <li>
+ <a href="#vsp">Viewpoint Specification Projects</a>
+ </li>
+ <li>
+ <a href="#vsm">Viewpoint Specification Models</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#vsm_organization">Organization</a>
+ </li>
+ <li>
+ <a href="#common_attributes">Common attributes</a>
+ </li>
+ <li>
+ <a href="#type_names">Type Names</a>
+ </li>
+ <li>
+ <a href="#interpreted_expressions">Interpreted Expressions</a>
+ </li>
+ <li>
+ <a href="#feature_name">Feature Name</a>
+ </li>
+ <li>
+ <a href="#translatable_messages">Translatable Messages</a>
+ </li>
+ <li>
+ <a href="#model_operations">Model Operations</a>
+ </li>
+ <li>
+ <a href="#quick_outline">Quick Outline</a>
+ </li>
+ <li>
+ <a href="#validation">VSM Validation</a>
+ </li>
+ <li>
+ <a href="#dynamic">Dynamic Development</a>
+ </li>
+ <li>
+ <a href="#migration">Migration from Previous Versions</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <p><div style="display: none">
+ <br/> TODO Add a few screenshots to make the document less dry.
+ <br/></div>
+ </p>
+ <p>This document gives a general overview of how viewpoints are specified, tested and deployed.</p>
+ <h2 id="introduction">Introduction</h2>
+ <p>
+ <em>Sirius</em> is a modeling tool which has been originally created in the context of complex systems modeling. The complexity of those systems makes necessary the collaboration of people with different concerns. For the same domain and on the same data, there are different levels of analysis, different roles and different concerns possible. Each of these correspond to a different
+ <em>viewpoint</em> on the same
+ <em>domain model</em>, and Sirius (the system) gives you all the tools to specify the viewpoints which are relevant to your business domain, whatever it is.
+ </p>
+ <p>More pragmatically, Sirius assumes that you
+ <em>domain model</em> is defined using
+ <em>EMF</em> (Eclipse Modeling Framework), which is an industry standard with a rich eco-system. Many existing standards like UML (for software systems) or TOGAF (for Enterprise Architecture) have an implementation based on EMF. You can also easily define your own
+ <em>Domain-Specific Model</em> (sometimes called
+ <em>Domain-Specific Language</em>) to more precisely suit your specific needs and avoid unnecessary complexities. While this part (the domain specification) is not strictly in the scope of Sirius, the system provides a graphical modeler to ease the creation of your own
+ <em>DSM</em> (Domain-Specific Model).
+ </p>
+ <p>Given such a domain model, which defines concepts and their relations in the abstract, Sirius will allow you to easily specify
+ <em>concrete representations</em> of these models. Representations can be diagrams, tables, matrices (cross-tables) or hierarchies (trees). You can define as many of them as you need, some more detailed than others, some customized for certain tasks or roles (e.g. initial design, review, certification, etc.). These representations are not just static: provided you specify the appropriate tools (see below), they can be complete modeling environments where users can create, modify and validate their designs. Representations can be logically organized in
+ <em>viewpoints</em>, and end-users can enable or disable viewpoints at will to work on the same model through different, but logically consistent, points of view.
+ </p>
+ <p>The main strengths of the Sirius platform can be summarized as is:</p>
+ <ul>
+ <li>it is based on an open and widely used
+ <em>industry standard</em> (the Eclipse Modeling Framework);
+ </li>
+ <li>it can
+ <em>adapt itself</em> to any EMF-compatible DSM: it can use standards like UML if they suit your needs, but it does not force you to do so, and you can easily create your own DSM which can thus be simpler and better suited to your specific needs;
+ </li>
+ <li>it provides a
+ <em>strong separation</em> between the semantic models it manipulates, where your business value resides, and the representation models (which deal with, for example, the size and location of graphical shapes on a diagram). This means your domain models have no adherence to Sirius itself, and can be manipulate with any of the other tools in the EMF eco-system (e.g. Acceleo to generate source code or other textual artifacts);
+ </li>
+ <li>it allows you to define many
+ <em>different representations</em> on your domain models: diagrams, tables, trees, showing different levels of details and offering different edition capabilities depending on their usage;
+ </li>
+ <li>it is
+ <em>easy to use</em> and supports
+ <em>very fast</em> development. Once you become familiar with the tool, you will be able to get a simple diagram in a matter of minutes, a prototype suited for a client demonstration in a few hours, and a fully-functional and customized modeler in a few days of work;
+ </li>
+ <li>it is
+ <em>extensible</em>: by integrating in the Eclipse platform and offering open APIs, you can extend and integrate your Sirius modelers with other tools to provide a fully-customized modeling workbench to your users.
+ </li>
+ </ul>
+ <h2 id="concepts">Philosophy and Concepts</h2>
+ <p>As explained in introduction,
+ <em>Sirius</em> allows you to specify dedicated representations and associated tooling. As a
+ <em>specifier</em>, your role will be to configure the generic Sirius platform to provide these representations to your users. This is done by creating and configuring a
+ <a href="../../Glossary.html#VSM">
+ <em>Viewpoint Specification Model</em>
+ </a> which describes the structure, appearance and behavior of your modelers. This document does not deal with the definition of your domain model; you can use a standard one like UML, SysML, BPMN or TOGAF, or create a custom one. The only assumptions Sirius makes is that your model is based on EMF.
+ </p>
+ <p>The main concepts you will work with as a specifier are:</p>
+ <ul>
+ <li>
+ <strong>Viewpoint</strong> A viewpoint is one of the core elements that a specifier defines: it is a logical set of
+ <strong>representation specifications</strong> and
+ <strong>representation extension specifications</strong>.
+ </li>
+ <li>
+ <strong>Representation</strong> A
+ <em>representation</em> is a group of
+ <strong>graphical construction which represent domain data</strong>. A representation describes the structure, appearance and behavior of your modelers. By default, Sirius supports four kinds of representations (called
+ <em>dialects</em>): diagrams, tables, matrices (aka cross-tables), and trees. All follow the same basic principles in their definitions.
+ </li>
+ <li>
+ <strong>Mapping</strong> A
+ <em>mapping</em> identifies a sub-set of the semantic model’s element that should appear in a representation and indicates how they should be represented. Each dialect offers different kinds of mappings. For example, diagrams provide
+ <em>container mappings</em>, which can be used to represent semantic elements with graphical containers, where other elements (specified by other mappings) can appear. A mapping exists inside the
+ <em>Viewpoint Specification Model</em>, but on a concrete representation it will produce
+ <em>instances</em>. If you specify a container mapping to represent, say, divisions in an enterprise, and the model of your enterprise contains four divisions, a concrete diagram will show four containers, each an instance of the same mapping, but associated to a different semantic element.
+ </li>
+ <li>
+ <strong>Style</strong> Each mapping can have one or several
+ <em>styles</em> associated to it, which are used to configure the visual appearance of the elements they represent. For example, for diagram elements this would include their shape and colors.
+ </li>
+ <li>
+ <strong>Tool</strong> Without tools, your representations would be only visualizations, with no edition capabilities. While this can be sometimes useful, most representations will allow users to create, edit and delete elements. Tools are associated to mappings to describe their behaviors. Each kind of user interaction supported by
+ <em>Sirius</em> (e.g. creation or deletion, label editing, edge reconnection...) is specified by a different kind of tool, but they all follow the same principles in their definition.
+ </li>
+ </ul>
+ <h2 id="vsp">Viewpoint Specification Projects</h2>
+ <p>Note: When working as a Sirius specifier, it is recommended to use the
+ <em>Sirius</em> perspective, which provides some additional shortcuts and views. The
+ <em>Modeling</em> perspective is simpler and oriented towards end-users.
+ </p>
+ <p>Viewpoints are specified as models (see below) inside
+ <em>Viewpoint Specification Projects</em>. These
+ <a href="../../Glossary.html#VSP">
+ <em>VSPs</em>
+ </a> are normal Eclipse plug-in project, which happen to contain one or several
+ <code>*.odesign</code> files (the extension used for
+ <a href="../../Glossary.html#VSM">
+ <em>Viewpoint Specification Models</em>
+ </a> ). You can create such a project using the supplied wizard:
+ <em>New > Viewpoint Specification Project</em>.
+ </p>
+ <p>By convention, the VSM (or VSMs) defined in your project are stored inside a
+ <code>description</code> folder. If you want to place them in a different location, make sure to add this location into the plug-in’s
+ <code>build.properties</code> so that it is included in the deployed version.
+ </p>
+ <p>The VSM name is given according to the project name defined when using the previous wizard. If the project name is suffixed with “design”, the VSM name is provided by the last word before this suffix. Otherwise, the VSM name is given by the last word of the project name.</p>
+ <p>Other than that, the project is a normal Java plug-in project. You can add
+ <a href="Writing_Queries.html#service_methods">service classes</a> into it if the query language you use support it, and any other Java code, including Eclipse views, actions, etc.
+ </p>
+ <p>Note that it is recommended to add your domain meta-model(s) plug-ins as dependencies of the project. Java services and some features of query language (like the use of type literals in AQL filter() operations) might require them. </p>
+ <p>
+ <strong>Important:</strong> Any VSM you place in the Eclipse workspace will be immediately available for use and testing, with no deployment. This is to facilitate dynamic and iterative development of viewpoints. However, when you
+ <strong>deploy</strong> your VSMs, they
+ <strong>must</strong> be part of a
+ <em>VSP</em>, and they
+ <strong>must</strong> be registered in the plug-in’s activator class. The activator generated by the
+ <em>VSP</em> wizard is properly configured, but if you rename your
+ <em>VSM</em> or add new ones, be sure to edit the activator class so that all your
+ <em>VSMs</em> are correctly registered inside the Sirius platform when deployed.
+ </p>
+ <h2 id="vsm">Viewpoint Specification Models</h2>
+ <p>The core part of a
+ <em>VSP</em> is the
+ <em>Viewpoint Specification Model</em> (or models) it contains. These are stored in
+ <code>*.odesign</code> files, usually in the
+ <code>description</code> folder of the project. A
+ <em>VSM</em> specifies a set of
+ <em>Viewpoints</em> and their representations (diagrams, trees...).
+ </p>
+ <p>To edit a
+ <em>VSM</em>, simply double-click on it, and a tree editor will open. The editor follows the conventions of standard EMF editors: selecting an element will show its properties in the
+ <em>Properties</em> view, where you can edit them. To create new elements, simply right-click on its parent and choose from one one the
+ <em>New XXX</em> menus. To delete an element and all its sub-elements, simply select it and hit the
+ <em>Delete</em> key or right-click and choose
+ <em>Delete</em>.
+ </p>
+ <h3 id="vsm_organization">Organization</h3>
+ <p>The top-level element of a
+ <em>VSM</em> is a
+ <em>Group</em> element. It has no specific semantics and serves only as a container for the other elements. Note however that once you define its
+ <em>Name</em>, you should never change it as it becomes part of the identification of all the elements inside the
+ <em>VSM</em>. If you change it, any concrete representations created using that
+ <em>VSM</em> will be broken.
+ </p>
+ <p>Inside a
+ <em>Group</em>, you can create an optional
+ <em>User Colors Palette</em>, with shared
+ <a href="Colors.html">color definitions</a>; this is useful to define a uniform color palette for all your viewpoints and representations. You can also, and more importantly, define
+ <em>Viewpoint</em> elements.
+ </p>
+ <p>Besides its
+ <em>Id</em> and
+ <em>Label</em> (see below), a
+ <em>Viewpoint</em> can be associated to one or more
+ <em>Model File Extensions</em>, separated by space. This can be used to restrict the availability of the viewpoint only to modeling projects which contain semantic models of the specified types. For example, to make your viewpoint available to UML and SysML models, you can specify
+ <code>uml sysml</code> (note that the syntax specifies only the file extension,
+ <code>uml</code>, not a pattern like
+ <code>*.uml</code>). You can use a star,
+ <code>*</code>, to make your viewpoint available for
+ <strong>all</strong> models, but it is normally prefered be as specific as possible so as not to interfere with unrelated models and projects.
+ </p>
+ <p>Inside a
+ <em>Viewpoint</em> element, you can create:
+ </p>
+ <ul>
+ <li>
+ <em>Representation Descriptions</em>, for
+ <a href="../diagrams/Diagrams.html">diagrams</a>,
+ <a href="../sequences/Sequence%20Diagrams.html">sequence diagrams</a>,
+ <a href="../tables/Tables.html">tables and cross-tables</a>, and
+ <a href="../trees/Trees.html">trees</a>.
+ </li>
+ <li>
+ <em>Representation Extensions</em>, currently supported only for
+ <a href="../diagrams/Diagrams.html#diagram_extension">diagrams</a>.
+ </li>
+ <li>
+ <a href="../diagrams/Diagrams.html#validation">
+ <em>Validation Rules</em>
+ </a>, which will apply to all representations defined inside this viewpoint.
+ </li>
+ <li>And finally
+ <em>Java Extensions</em>. These refer (through its fully qualified name), to a Java class defined in the
+ <em>Viewpoint Specification Project</em> which defines
+ <a href="Writing_Queries.html#service_methods">service methods</a> and make these services available inside all the representations defined in the viewpoint. If you
+ <a href="Writing_Queries.html#acceleo">use Acceleo 3 to write your expressions</a>, you can also use these elements to declare Acceleo modules in the project that define MTL queries you want to use in your expressions.
+ </li>
+ </ul>
+ <p>To discover all elements in the
+ <em>VSM</em>, it is possible to use the button <img src="images/specifier-guide/expandall.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>, at the top right corner of the editor to expand the
+ <em>VSM</em> tree. Obviously, it is possible to collapse this tree by using the button <img src="images/specifier-guide/collapseall.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>, at the top right corner of the editor.
+ </p>
+ <h3 id="common_attributes">Common attributes</h3>
+ <p>Many of the elements used to specify viewpoint share some common configuration attributes. They are described in general terms in this section, and referenced from the specific element’s sections which used them (sometimes with additional details only relevant for this element).</p>
+ <p><img src="images/common_attributes.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/></p>
+ <ul>
+ <li>
+ <em>Id</em>: The mandatory identifier of the element. This identifier is mostly visible to the specifier in the description editor. It must be unique in the context of the viewpoint it is part of. The
+ <em>Id</em> is used internally to identify the element, and must be kept stable across different versions of the VSM (or it will make representations created with the old
+ <em>Id</em> unusable).
+ </li>
+ <li>
+ <em>Label</em>: The label of the element. It’s used to display this element to the end-user. By default, if this label is blank, the
+ <em>Id</em> is used to display this element to the end user. It can be changed with no impact on existing representation files.
+ </li>
+ </ul>
+ <p><img src="images/documentation_attributes.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/></p>
+ <ul>
+ <li>
+ <em>Documentation</em>: All the elements in a description file contain a
+ <strong>Documentation</strong> attribute available in the
+ <strong>Documentation</strong> category. This attribute can be used by the specifier to add comments and documentation to these elements. The content of this attribute is not visible to the end users of the viewpoints.
+ </li>
+ <li>
+ <em>End-user documentation</em>: This attribute describes this element for the end-user. It’s available in the
+ <strong>Documentation</strong> category. This attribute can be used by the specifier to add comments and documentation to these elements bounds for the end-user.
+ </li>
+ </ul>
+ <p><img src="images/tricks.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>
+ <em>use the <img src="images/questionMarque.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> icon to access the available fields tooltips.</em>
+ </p>
+ <h3 id="type_names">Type Names</h3>
+ <p>Some
+ <em>VSM</em> elements will need you to specify one or more
+ <em>Type Names</em> to configure them, usually types from the semantic domain model being represented (for example the
+ <em>Domain Class</em> for mapping definitions). You can easily identify
+ <em>Type Name</em> fields by their green background in the
+ <em>Properties</em> sheet of an element.
+ </p>
+ <p>
+ <img border="0" src="images/domain_class.png"/>
+ <br/>The syntax for type names are the following:
+ </p>
+ <ul>
+ <li>
+ <strong>minimal syntax:</strong> it is the basic name, like
+ <code>Class</code>,
+ </li>
+ <li>
+ <strong>AQL/OCL syntax:</strong> a qualified name using name of the EMF EPackage which defines the type with the separator
+ <code>::</code> like
+ <code>uml::Class</code>. It is the default and
+ <strong>recommended</strong> syntax, consistent with how qualified type names are written in AQL
+ </li>
+ <li>
+ <strong>legacy qualified name like syntax:</strong> it is a qualified name using name of the EMF EPackage which defines the type, like
+ <code>uml.Class</code>.
+ </li>
+ <li>
+ <strong>fully qualified URI</strong>: like
+ <code>http://www.eclipse.org/uml2/3.0.0/UML#//Class</code>.
+ </li>
+ </ul>
+ <p>Auto-completion is available in these fields using the
+ <em>Ctrl+Space</em> shortcut. It is recommended to explicitly associate a meta-model (or more) to your representations definitions to allow for smarter completion. Otherwise by default it will include all types from any EMF meta-model available.
+ </p>
+ <h3 id="interpreted_expressions">Interpreted Expressions</h3>
+ <p>Many
+ <em>VSM</em> elements require you to specify
+ <em>Interpreted Expressions</em> to configure them. These can be queries to select elements (as in mappings for example), or more general expressions to compute value (like the text to use for the elements' labels).
+ </p>
+ <p>You can easily identify
+ <em>Interpreted Expressions</em> by their yellow background in the
+ <em>Properties</em> sheet of an element. For all such field, you can use any of the supported languages to write the expression. Refer to the
+ <a href="Writing_Queries.html">queries documentation</a> for more details.
+ </p>
+ <p>
+ <img border="0" src="images/interpreted_expressions.png"/>
+ </p>
+ <p>Also, by clicking on the button next to the text field, you can open a dialog with a bigger text area (providing auto-completion too) to type your expression more comfortably. Note that you can add line feeds or tabulations if you want, since they are removed when clicking on the “OK” button.</p>
+ <p>
+ <img border="0" src="images/textAreaDialog.png"/>
+ </p>
+ <h3 id="feature_name">Feature Name</h3>
+ <p>Some
+ <em>VSM</em> elements will need you to specify a
+ <em>Feature Name</em> (or
+ <em>Reference Name</em> on
+ <em>Create Instance</em>) to configure them (Create Instance, Set, Unset, etc.). You can easily identify
+ <em>Feature Name</em> fields by their light green background in the
+ <em>Properties</em> sheet of an element.
+ </p>
+ <p>
+ <img border="0" src="images/featureName.png"/>
+ </p>
+ <p>Auto-completion is available in these fields using the
+ <em>Ctrl+Space</em> shortcut except if the current element type cannot be inferred, usually in the case of a generic tool where the target element will be known only at runtime.
+ <br/>Note that for
+ <em>Create Instance</em>
+ <em>Reference Name</em> field, the completion will display only features that have a type consistent with the one specified in the
+ <em>Type Name</em> field. If no type is specified, all available features will be displayed. In the same way, if a valid
+ <em>Reference Name</em> is set, the completion for the
+ <em>Type Name</em> field will display only types consistent with the feature type.
+ </p>
+ <h3 id="translatable_messages">Translatable Messages</h3>
+ <p>Many
+ <em>VSM</em> elements provide text fields that will be displayed when end-users reference the
+ <em>VSM</em> in a modeling project (Viewpoint name, tools...). Starting from Sirius 4.0, the value shown to the end users can be localized according to the user’s language. Fields which support this feature are called
+ <em>Translatable</em>
+ <em>Messages</em> and can be easily identified by their blue background in the
+ <em>Properties</em> sheet of an element.
+ </p>
+ <p>
+ <img border="0" src="images/common_attributes.png"/>
+ </p>
+ <p>Note that on the previous screenshot, the text in the label field is grayish because no label have been set and the ID is used instead.</p>
+ <p>This feature is available for almost every
+ <em>VSM</em> elements defined in the VSMs which are visible to the end-user of the modeler, like viewpoint and tools names, can now be internationalized, but not to interpreted expressions. Note also that this feature is only available to modelers which are deployed as proper Eclipse plug-ins; it will not work for plain VSMs defined directly in the runtime workspace.
+ </p>
+ <p>To make use of this feature in your modeler, simply replace the names with a
+ <em>translation key</em> reference of the form
+ <code>%myUniqueKey</code> in the VSM, and define the value in the
+ <em>Viewpoint Specification Project</em>'s
+ <code>plugin.properties</code> (for the default value), or
+ <code>plugin_XX.properties</code> for locale
+ <code>XX</code>. Note that the key chosen must be globally unique in the context of a whole
+ <em>Viewpoint Specification Project</em>.
+ </p>
+ <p>
+ <img border="0" src="images/translatable_message1.png"/>
+ </p>
+ <p>The key must be added to the
+ <code>plugin.properties</code> file for each language with the translated message. The default properties file is named
+ <code>plugin.properties</code> and the localized version are identified with a postfixed with the corresponding language code (e.g. for US english
+ <code>plugin_en_US.properties</code>, for french
+ <code>plugin_fr.properties</code>). The underlying mechanism is the same as for Eclipse/OSGi plug-ins, so translations can even be contributed by physically separate plug-in fragments. For the message values to be found at runtime, do not forget to:
+ </p>
+ <ul>
+ <li>include all the
+ <code>plugin*.properties</code> files in the binary build (i.e. check them in the plug-in’s
+ <code>build.properties</code> file);
+ </li>
+ <li>set the
+ <code>Bundle-Localization: plugin</code> header in your project’s
+ <code>MANIFEST.MF</code>.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/translatable_message2.png"/>
+ </p>
+ <p>An Eclipse with localization in english will get the localized messages from
+ <code>plugin_en.properties</code>, while an Eclipse with localization in french will get the localized messages from
+ <code>plugin_fr.properties</code>.
+ </p>
+ <table class="table table-striped table-condensed">
+ <tr>
+ <td>
+ <img border="0" src="images/translatable_message4.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/translatable_message3.png"/>
+ </td>
+ </tr>
+ <tr>
+ <th>English locale</th>
+ <th>French locale (with corresponding translation in
+ <code>plugin_fr.properties</code>
+ </th>
+ </tr>
+ </table>
+ <p>Note that an Eclipse with localization in a language that has no dedicated properties file, will get the localized message from the default
+ <code>plugin.properties</code>.
+ </p>
+ <p>If the ID is not found in the localized properties file or if there is no properties file, the ID will be directly displayed.</p>
+ <p>
+ <img border="0" src="images/translatable_message5.png"/>
+ </p>
+ <p>As the internationalization is optional, if a
+ <em>Translatable</em>
+ <em>Message</em> does not start with a
+ <em>%</em> it will be directly displayed without consideration of the localization.
+ </p>
+ <p>
+ <img border="0" src="images/translatable_message6.png"/>
+ </p>
+ <p>It is still possible to display a non localized label starting with a
+ <em>%</em> however the character needs to be doubled.
+ </p>
+ <p>
+ <img border="0" src="images/translatable_message8.png"/>
+ <br/>
+ <img border="0" src="images/translatable_message9.png"/>
+ </p>
+ <p>
+ <em>Warning</em>:
+ <em>Translatable</em>
+ <em>Messages</em> concern only labels set in the
+ <em>VSM</em> that are displayed to the end-users. Sirius is prepared for internationalization but is only available in English. Therefore, the
+ <em>VSM</em> labels can be available in another language but the labels coming from Sirius will stay in English. Moreover, some labels come from some other frameworks (such as EMF or GMF) and if the localization feature (if existing) is not installed, then the labels will stay in English.
+ </p>
+ <h3 id="model_operations">Model Operations</h3>
+ <p>Whenever a
+ <em>VSM</em> requires you to specify a behavior, for example inside any
+ <em>Tool</em> definition, you can use any of the available
+ <em>Model Operations</em> to do so. Refer to the
+ <a href="Model_Operations.html">Model Operations documentation</a> for more details.
+ </p>
+ <h3 id="quick_outline">Quick Outline</h3>
+ <p>When defining your
+ <em>VSM</em>, a quick outline is available with the shortcut
+ <code>Ctrl</code> +
+ <code>O</code>. This allows you to rapidly search text in the displayed name or the contained String attributes of your
+ <em>VSM</em> elements.
+ </p>
+ <p>The star,
+ <code>*</code>, is a joker character, allowing you to search with more complicated patterns. Regarding this, an element is found if there is a word in its name or one of its attributes that match with the text in the filter, so if you want to search within words too, add
+ <code>*</code> at the start of your pattern. Also, you can navigate along the matching elements with
+ <code>↑</code> and
+ <code>↓</code>, and go to the selected element in your
+ <em>VSM</em> with
+ <code>Enter</code>.
+ </p>
+ <p>
+ <img border="0" src="images/quick_outline.png"/>
+ </p>
+ <h3 id="validation">VSM Validation</h3>
+ <p>It is possible to validate your
+ <a href="../../Glossary.html#VSM">
+ <em>Viewpoint Specification Model</em>
+ </a> , to check that your Representations, Mappings and Tools are correctly specified. It will help you to find missing element or erroneous one (e.g. missing required expression).
+ </p>
+ <p>To validate your VSM, open your
+ <code>odesign</code> file, right-click on the top-level
+ <em>Group</em> element and select
+ <em>Viewpoint specification Editor > Validate</em>. A dialog Box will appear and indicate if the validation succeeded. If not, it will give you details about the detected problems (click on the ‘details’ button of the dialog box). If problems are detected, they will also be added to the Eclipse
+ <em>Problems</em> view. Double-clicking on one of these problems will select the concerned element in the
+ <a href="../../Glossary.html#VSM">
+ <em>Viewpoint Specification Model</em>
+ </a> editor.
+ </p>
+ <p>You can also validate one specific element by right-clicking on it in the
+ <a href="../../Glossary.html#VSM">
+ <em>Viewpoint Specification Models</em>
+ </a> and launching the validation process. All the children of the selected element will be validated too. This fine-grained validation is useful to localize issues in the Specification Model, especially when it contains a lot of elements.
+ </p>
+ <p>It is also possible to use the button <img src="images/specifier-guide/complete_task.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>, at the top right corner of the editor to launch the validation. This icon changes (<img src="images/specifier-guide/validate_model.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>) when we change the VSM to encourage the user to validate the VSM before saving.</p>
+ <h3 id="dynamic">Dynamic Development</h3>
+ <p>Sirius supports dynamic development of your
+ <em>VSM</em> with no need for deployment of your project to test it. If the domain model definition (the EMF meta-model plug-in) is installed in your development environment, and as long as your VSM does not use advanced features which require a deployment (like the definition of new
+ <em>External Java Actions</em> for example), you can test your representations while you are developing them. It is the recommended way to work, especially in the initial development phases, to easily experiment different approaches and see the results immediately.
+ </p>
+ <p>To do this, simply create a modeling project in your development environment, alongside the Viewpoint Specification Project, and add a sample domain model to it. When you open the
+ <em>Viewpoints Selection</em> dialog on the sample project, you will see that all the viewpoints which are being developed in the same workspace are also made available, in addition to the ones installed as plug-ins. Select the ones you want and create sample representations.
+ </p>
+ <p>Keep both your representations and the VSM that define them open at the same time. Whenever you change some definition or add new elements into your VSM, simply save it. Sirius will automatically detect the change, reload the new definition and apply it to your existing representations. This way you can develop your representations iteratively, for example starting from an empty diagram and adding more elements, styles and tools while and testing them immediately.</p>
+ <p><div style="display: none">
+ <br/> TODO Add a screenshot with both a VSM (on the left) and the corresponding diagram (on the right) opened at the same time. Make sure the “Model Explorer” is also visible to show both the VSP and the Modeling project they correspond to.
+ <br/></div>
+ </p>
+ <p>Note that Sirius does its best to take into account any change in the VSM, even for existing and opened representations. Sometimes, if the changes are too complex or in some corner cases not yet supported, you may need to close and reopen your representation, or in extreme case delete it and create a new one, in order to take the VSM changes into account properly.</p>
+ <h3 id="migration">Migration from Previous Versions</h3>
+ <p>The
+ <em>Viewpoint Specification Model</em> can evolve between two versions of Sirius. The migration process is done automatically. That means all VSM are migrated at loading time without any action from the user. While a VSM is not saved, the automatic migration will be replayed at the next opening.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/general/ToolsSpecification.html b/doc/5.1.x/specifier/general/ToolsSpecification.html
new file mode 100644
index 0000000..bc453af
--- /dev/null
+++ b/doc/5.1.x/specifier/general/ToolsSpecification.html
@@ -0,0 +1,123 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>ToolsSpecification</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h3 id="ToolsSpecification">Tools Specification</h3>
+ <p>All tools are specified in roughly the same way. Like most elements inside the VSM, they have an
+ <em>Id</em> and a
+ <em>Label</em>. For elements which will appear to the end-user (in the palette or in menus), make sure the
+ <em>Label</em> is meaningful to them.
+ </p>
+ <p>
+ <strong>Tools Applicability</strong>. Most tools apply to a set of
+ <em>Mappings</em>, sometimes only on certain kinds of mappings (e.g.
+ <em>Container Drop</em> description only makes sense for container mappings). For tools which create new elements, the
+ <em>Mappings</em> correspond to the kinds of elements the tool will create. For other tools, it corresponds to the kinds of element the tool can be applied to.
+ </p>
+ <p>Many tools also support the notion of
+ <em>Extra Mappings</em>. If these are specified, they indicate other kinds of elements than the primary ones on which the tool can be applied.
+ </p>
+ <p>The
+ <em>Precondition</em> of a tool definition can be used to restrict its applicability to only some instances of the
+ <em>Mappings</em> (and
+ <em>Extra Mappings</em>) associated with the tool. When the user tries to invoke the tool on an element, the expression will be evaluated in the context of that element' semantic target, and the tool will be applicable only if the expression returns true. Otherwise the user will have a feedback (typically a change in the mouse cursor’s shape) to indicate the tool can not be applied on this element.
+ </p>
+ <p>
+ <strong>Force Refresh.</strong> Tools have a
+ <em>Force Refresh</em> flag. As most tools only perform a local change in the underlying model, by default Sirius will try to optimize its refresh operation (which synchronizes the graphical view with the state of the underlying semantic model) by only refreshing elements of the mappings explicitly associated with the tool. If you know your tool will have side-effects which can change other parts of the diagram, set the
+ <em>Force Refresh</em> flag to force Sirius to perform a complete refresh of the whole diagram after the tool is executed. This ensures a perfect synchronization of the graphical representation with the state of the underlying model, possibly at the cost of performance and reactivity on big diagrams. The refresh will be effective only on the current diagram and not on all opened diagrams.
+ </p>
+ <p>
+ <strong>Selection after tool execution.</strong> The
+ <em>Elements to select</em> and
+ <em>Inverse Selection Order</em> flags can be used to defined what is selected in the active editor after tool execution.
+ <br/>By default, only the top level created elements are selected.
+ </p>
+ <ul>
+ <li>
+ <code>Elements to select</code>: Expression to list the elements to select after tool execution. There are four possibilities for the list of elements returned by this expression. In any case, if the default list of elements is not empty, the list of elements returned is filtered with the default selected elements. In case of creation tool, the default list contains newly created elements so, the returned list can contain at most that elements.
+ <ul>
+ <li>Empty expression: The default behavior is applied: if graphical elements has been created, these elements will be selected(excluding the sub elements), else, the selection is unchanged.</li>
+ <li>List of
+ <code>DRepresentationElement</code>: All this graphical elements will be selected after the execution of the tool.
+ </li>
+ <li>List of semantic elements: All
+ <code>EObject</code> that are not a
+ <code>DRepresentationElement</code> are considered as semantic elements. All graphical elements corresponding to these semantic elements will be selected after the execution of the tool.
+ </li>
+ <li>Empty list: Nothing is selected after the execution of the tool.</li>
+ <li>List with only the
+ <code>DRepresentation</code>: It will be considered as empty list.
+ </li>
+ <li>List with a mix of
+ <code>DRepresentationElement</code> and non
+ <code>DRepresentationElement</code> is forbidden. A such list will be considered as empty list.
+ </li>
+ </ul>
+ </li>
+ <li>
+ <code>Inverse Selection Order</code> : By default, false, the elements are selected in the order of the list or the default list if existing. It is possible to inverse this order by setting this property to true. To be more precise, the meaning of this property depends on the value of elementsToSelectExpression:
+ <ul>
+ <li>List of
+ <code>DRepresentationElement</code>: The elements are selected in order of the list (first element is selected in first, second element is selected in second, and so on). The last graphical element of the list will be the primary selection. If
+ <code>inverseSelectionOrder</code> is true, the order is reverted.
+ </li>
+ <li>List of semantic elements: The elements are selected in order of the list (the graphical element corresponding to the first semantic element is selected in first, the graphical element corresponding to second semantic element is selected in second, and so on). And if several graphical elements correspond to the same semantic element, they are selected on their default order. The last element is the primary selection. If
+ <code>inverseSelectionOrder</code> is true, the order is reverted (the order of the list AND the order of several graphical elements corresponding to the same semantic element).
+ </li>
+ <li>Empty list or list with only the
+ <code>DRepresentation</code>: The
+ <code>inverseSelectionOrder</code> is ignored in this context.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ <strong>Tools' Body and Variables.</strong> The actual effect of a tool is defined inside its
+ <em>body</em>, which is usually represented by a
+ <em>Begin</em> element (the starting point of the tool’s execution). You can use any of the available
+ <a href="../general/Model_Operations.html">model operations</a> to specify the behavior of your tools, including, if necessary, operations which invoke complex algorithms written in Java. Inside the tools’body, you have access to
+ <em>variables</em>, which are specific to each kind of tools and give you all the necessary information on how the tool was invoked, on which elements, etc. How you access these variables from the expressions inside the tool’s body depend on the query language you use for the expressions.
+ </p>
+ <p>
+ <strong>Static Variables.</strong> The static variables defined by each tool are visible directly inside the tool’s element in the VSM. The exact set of variables available will depend on each tool, but typically you will have access to both
+ <em>semantic variables</em> which reference semantic elements and
+ <em>view variables</em> which reference graphical elements. As an example, in a
+ <em>Node Creation Tool</em>, you have both a
+ <em>container</em> and a
+ <em>containerView</em> variable.
+ <em>containerView</em> will point to the graphical element on which the user invoked the node creation tool (for example a container view) while
+ <em>container</em> will point to that view’s target semantic element. Usually the tools use only the semantic variables, but you may want to use the view variables if the same semantic elements can be represented in different ways on your diagram and you want your tool to behave differently depending on which of these representations the user targeted.
+ </p>
+ <p>
+ <strong>User-Defined Variables.</strong> In addition to the static variables which are pre-defined by Sirius for each kind of tool, you can define your own, which will also be available inside the tool’s body. These user variables are defined as sub-elements of the static variables using the
+ <em>New Variable...</em> context menu. There are two kinds:
+ </p>
+ <ul>
+ <li>
+ <em>Expression Variables</em> have a name and a
+ <em>Computation Expression</em>. When the tool is invoked, the computation expression will be evaluated in the context or the parent variable’s value (i.e. the static variable inside which the
+ <em>Expression Variable</em> is defined).
+ </li>
+ <li>
+ <em>Select Model Element Variables</em> will open a dialog box when the tool is invoked, from which the user can manually select model elements from a list you can configure. The element or elements selected by the user will become the value of the variable. To configure the dialog box, you must set a
+ <em>Message</em> and a
+ <em>Candidates Expression</em> (evaluated in the context of the parent variable’s value). The candidates expression should return a list of elements from which the user can select the variable’s value. By default these candidates are presented as a list. You can also enable the
+ <em>Tree</em> mode, and specify a
+ <em>Children Expression</em>, which will be evaluated recursively on each candidate to build a tree of possible values. Finally, you can set the
+ <em>Multiple</em> flag to allow users to select several of the candidates instead of a single one.
+ </li>
+ </ul>
+ <p>
+ <strong>Tool Filters.</strong> Tool filters can be specified inside a tool to hide a tool in the diagram palette depending on dynamic conditions. The
+ <em>Elements To Listen</em> is evaluated in the context of the diagram’s semantic element, and should return a set of semantic elements. The
+ <em>Precondition</em> is re-evaluated in the context of the diagram whenever a change occurs on
+ <em>Elements To Listen</em>.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/general/Writing_Queries.html b/doc/5.1.x/specifier/general/Writing_Queries.html
new file mode 100644
index 0000000..d2fd0d3
--- /dev/null
+++ b/doc/5.1.x/specifier/general/Writing_Queries.html
@@ -0,0 +1,544 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Writing_Queries</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="WritingQueriesandInterpretedExpressions">Writing Queries and Interpreted Expressions</h1>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#WritingQueriesandInterpretedExpressions">Writing Queries and Interpreted Expressions</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#general">General Rules</a>
+ </li>
+ <li>
+ <a href="#specialized">Using the Specialized interpreters</a>
+ </li>
+ <li>
+ <a href="#aql">Using AQL</a>
+ </li>
+ <li>
+ <a href="#acceleo">Using Acceleo</a>
+ </li>
+ <li>
+ <a href="#ocl">Using Raw OCL</a>
+ </li>
+ <li>
+ <a href="#custom">Providing a Custom Language</a>
+ </li>
+ <li>
+ <a href="#service_methods">Writing Java Services</a>
+ </li>
+ <li>
+ <a href="#standard_services">Standard Services</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#editing_domain_services">Editing Domain Services and EMF Edit Integration</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="introduction">Introduction</h2>
+ <p>Many parts of a
+ <em>VSM</em> require you to provide
+ <em>interpreted expressions</em>, which will be evaluated at runtime to provide a behavior specific to your domain and representations. Some of these expressions return model elements (in which case we call them
+ <em>queries</em>), while others simply produce text (for example the expressions used for labels), but the principles stay the same.
+ </p>
+ <p>Sirius does not force the use of a specific language to write these queries. Currently, three different languages are provided by default, and if you have specific needs, you can extend the system and
+ <a href="#custom">provide your own</a>. You can use several different languages inside the same VSM (but only one in each expression).
+ </p>
+ <p>Whatever the language(s) you use, because they are all optional from Sirius’s point of view, make sure the Viewpoint Specification Project which contains your VSMs explicitly depends on the Sirius plug-in which provides supports for these languages. Otherwise when you modelers are deployed to end-users you can not be sure the proper support will be available. The
+ <em>Viewpoint Specification Projects</em> which are created using the standard wizard are pre-configured to use AQL (
+ <em>Acceleo Query Language</em>), which is the recommended language as of Sirius 3.1. See the sections below for each of the standard languages for the name of the Sirius support plug-ins to depend on if you use the language.
+ </p>
+ <h2 id="general">General Rules</h2>
+ <p>Some general rules are independent of the language details.</p>
+ <p>
+ <strong>Auto-completion.</strong> First, in the
+ <em>VSM</em> editor, any field in the property view which has a yellow background is an interpreted expression. In these fields, auto-completion can be triggered by hitting
+ <em>Ctrl+Space</em>.
+ </p>
+ <p>
+ <img border="0" src="images/emptyFieldAutoCompletion.jpg"/>
+ </p>
+ <p>The completion will correspond to the empty expression for the installed query language (e.g.
+ <b>aql:</b> for AQL). It will also place the cursor at the expected place where it is ready to start typing the expression.
+ </p>
+ <p>
+ <img border="0" src="images/emptyExpressionCursor.jpg"/>
+ </p>
+ <p>When hitting auto-completion on an empty expression, the first completion proposal will correspond to the variables which are available in the expression’s context, and the rest correspond to all the features, services, etc. which are available on the current element.</p>
+ <p>
+ <img border="0" src="images/emptyExpressionAutoCompletion.jpg"/>
+ </p>
+ <p>Sometimes Sirius is not able to statically determine the precise type of the model elements on which an expression will be evaluated. In that case, it assumes a plain
+ <em>EObject</em>. This means you will not get completion proposals specific to your custom types, and that if you use features or services which are not available on
+ <em>EObject</em>, the VSM’s validation will fail. To prevent this, if you know the precise type of the elements and the language supports it, add a cast operation to tell Sirius the actual type (e.g. <code>aql:filter(packageName::ExpectedType).theRestOfTheExpression</code> if using AQL for example.
+ </p>
+ <p>
+ <strong>The Interpreter view.</strong> The
+ <em>Interpreter</em> view can be used to develop complex expressions interactively. The view can work in either the native
+ <em>Acceleo</em> mode (corresponding to Acceleo 3/MTL) or in the
+ <em>Sirius</em> mode. In the
+ <em>Sirius</em> mode, you can use any of the languages supported by Sirius, but you lose the benefits of syntax coloring.
+ </p>
+ <p>To use the
+ <em>Interpreter</em> view, simply open a Sirius representation, select and element in it (for example a shape on a diagram), and type some expression in the view’s upper text field. The result of the expression (a set of model elements or a string) will appear in the lower part of the view. If you select a different element, the result will automatically be re-evaluated in the context of the new element.
+ </p>
+ <p>
+ <img border="0" src="images/viewpoint_interpreter.png"/>
+ </p>
+ <p>
+ <em>Warning:</em> When using the
+ <em>Interpreter</em> view from an element selected in a Sirius representation, the context of the expression is
+ <strong>not</strong> the
+ <em>semantic</em> element, but the
+ <em>view</em> model element used internally by Sirius. To access the semantic element you must use the view’s
+ <code>target</code> reference. More concretely, imagine you have a Sirius diagram representing UML classes with nodes. If you select a class and enter <code>aql:self</code> in the interpreter view, the result will not be a UML
+ <code>Class</code> element, but a
+ <code>DNode</code> (the type used internally by Sirius to represent graphical nodes). To get the UML class, you must enter <code>aql:self.target</code> (or the equivalent in other languages). Keep this in mind when using the
+ <em>Interpreter</em> view to develop expressions you want to use inside a VSM: most expressions defined in the VSM will be evaluated in the context of a semantic element, so you will need to add/remove
+ <code>target</code> references when switching between the two.
+ </p>
+ <p>
+ <strong>Determinism.</strong> In general, you should try to ensure that your queries are deterministic, i.e. from the same input model they should always return the same result, and in the same order (if returning collections of elements). Otherwise, each time a representation is refreshed it might become dirty (as Sirius will see the order difference as a change) or even visually unstable (i.e. elements shown in a different order). There are several things to be aware of in order to ensure determinism in your queries:
+ </p>
+ <ul>
+ <li>At the meta-model level, if you control it, make sure any derived feature always return its values in the same order. If you do not control the meta-model and it has unordered references which can cause problems (UML is an example), you can impose your own ordering by sorting the elements whenever they are used in a Sirius query.</li>
+ <li>At the Sirius query level, make sure you call only operations which are deterministic in the query language(s) you use. Unfortunately, this information is not often documented in the query languages semantics, so some trial and error experimentation is required for now. </li>
+ <li>At the service level, if you create your own
+ <a href="#service_methods">Java services</a>, make sure to use data structures which ensure a fixed iteration order, like
+ <code>LinkedHashSet</code> instead of
+ <code>HashSet</code> for example.
+ </li>
+ </ul>
+ <h2 id="specialized">Using the Specialized interpreters</h2>
+ <p>Sirius provides several specialized interpreters to handle more efficiently some forms of simple expressions which can occur very often in a typical VSM. Each interpreter focuses on a very limited case, and none supports complex expressions. This allows them to be very fast, but it requires that you use them explicitly when possible. All these interpreters are available by default in Sirius, you do not need to declare additional dependencies in your VSM project to be able to use them.</p>
+ <ul>
+ <li>
+ <strong>
+ <code>var:</code>
+ </strong> This interpreter can only do direct access to the value of a named variable. For example, instead of <code>aql:containerView</code> (using AQL), the equivalent using the specialized interpreter would be
+ <code>var:containerView</code>. As a special case, the pseudo-variable
+ <code>self</code> is available to access the current element (the evaluation context):
+ <code>var:self</code> is equivalent to <code>aql:self</code> in AQL.
+ </li>
+ <li>
+ <strong>
+ <code>feature:</code>
+ </strong> This interpreter can only do direct access to a named feature of the current element. For example, instead of <code>aql:self.name</code>, the equivalent using this interpreter would be
+ <code>feature:name</code>. Note that if your metamodel generated code was generated with feature delegation set to Reflective, the feature interpreter will return the raw value of the attribute (as seen by
+ <code>eGet</code>), bypassing any custom getter implementation you provided. This interpreter also supports the following pseudo-features:
+ <ul>
+ <li>
+ <code>feature:eContainer</code> returns the container of the current element (or
+ <code>null</code> if there is none). This is equivalent to <code>aql:self.eContainer()</code>.
+ </li>
+ <li>
+ <code>feature:eContents</code> returns the direct contents of the current element (or an empty collection if there is none). This is equivalent to <code>aql:self.eContents()</code>.
+ </li>
+ <li>
+ <code>feature:eAllContents</code> returns all the elements directly and indirectly contained inside the current element (or an empty collection if there is none). This is equivalent to <code>aql:self.eAllContents()</code>.
+ </li>
+ <li>
+ <code>feature:eCrossReferences</code> returns all the model elements which are directly referenced by the current element (or an empty collection if there is none). This is equivalent to <code>[self.eCrossReferences()/] using Acceleo 3/MTL</code>.
+ </li>
+ </ul>
+ </li>
+ <li>
+ <strong>
+ <code>service:</code>
+ </strong> This interpreter can be used to directly invoke a service method (i.e. a Java method that follows conventions for
+ <a href="#service_methods">service methods</a> ) on the current element. For example, assuming the service class
+ <a href="#ecore_services">
+ <code>EcoreServices</code>
+ </a> has been correctly registered in the VSM, the expression
+ <code>service:getEClasses</code> (note the absence of parenthesis) will invoke the
+ <code>getEClasses</code> on the current element if it is an instance of
+ <code>EPackage</code>.
+ <ul>
+ <li>The service interpreter supports parameters, but only variables can be used as parameter (no literals or complex expressions), for example:
+ <code>service:serviceName(view, diagram)</code>.
+ </li>
+ <li>You can use the service interpreter not only on the current context by using a variable name before calling the service, for example:
+ <code>service:myVariableName.serviceName</code>.
+ </li>
+ <li>For efficiency reasons, if multiple services match the expression, the first one found is used. There is no real polymorphism management.</li>
+ </ul>
+ </li>
+ </ul>
+ <h2 id="aql">Using AQL</h2>
+ <p>Starting from Sirius 3.1,
+ <em>AQL</em> (Acceleo Query Language, first introduced in Sirius 3.0) is the recommended language to write queries/interpreted expressions. AQL is similar to Acceleo 3/MTL, but simpler and provides much better performance in the Sirius context. AQL expressions start with the
+ <code>aql:</code> prefix and have a syntax similar to Acceleo (without the enclosing
+ <code>[../]</code> brackets). The main differences between the two languages are:
+ </p>
+ <ul>
+ <li>Feature access must
+ <strong>always</strong> explicitly specify the target object, even if the target is
+ <code>self</code>. This means an Acceleo expression like <code>[name/]</code> which accesses the
+ <code>name</code> attribute of the current element translates in AQL as
+ <code>aql:self.name</code>. The expression
+ <code>aql:name</code> with no explicit receiver will always be interpreted as an access to the
+ <code>name</code> variable, and may result in an error if the variable in question is not defined.
+ </li>
+ <li>“Lambda” expressions must always declare their parameters and use them explicitly. Again, there is no implicit
+ <code>self</code> in such a context. For example: <code>[self.eContents()->select(name.startsWith('A'))/]</code> becomes <code>aql:self.eContents()->select(i | i.name.startsWith('A'))</code> with an explicit declaration and usage of
+ <code>i</code> in AQL.
+ </li>
+ <li>AQL is more persmissive in terms of missing/empty intermediate results in complex expressions:
+ <code>aql:self.anEmptyReference.somethingElse</code> will not result in an error as the equivalent Acceleo (or OCL) expression would, but simply return an empty result.
+ </li>
+ <li>AQL provides different services/methods by default compared to Acceleo. In general the set of default services in AQL is better suited to the typically use cases encountered in Sirius.</li>
+ </ul>
+ <p>See <a href="https://www.eclipse.org/acceleo/documentation/aql.html" target="_blank">the AQL documentation</a> for more details about the language itself, the full list of standard services, and the differences with Acceleo/MTL.</p>
+ <p>
+ <em>Note:</em> Viewpoint Specification Projects created with the default wizard will be already setup to use it. Otherwise you need to add a dependency to the
+ <code>org.eclipse.sirius.common.acceleo.aql</code> plug-in to ensure AQL support will be available wherever your modelers are used. When
+ <strong>developing</strong> new VSMs which use AQL, it is recommended to have the
+ <code>org.eclipse.sirius.common.acceleo.aql.ide</code> plug-in installed as it provides specification-time features like expression completion. However,
+ <code>org.eclipse.sirius.common.acceleo.aql.ide</code> is not needed at runtime for the resulting modelers to function.
+ </p>
+ <p>
+ <em>Note:</em> Several services like olcIsKindOf() or filter() use type literals and will require to explicitly reference the known meta-models as dependencies to work. It is recommended to add the corresponding meta-models plug-ins to the dependencies of the Viewpoint Specific Project.
+ </p>
+ <h2 id="acceleo">Using Acceleo</h2>
+ <p>Acceleo 3 implements the MTL standard, and provides a query language similar to OCL (with some extensions). It provides relatively good static validation and auto-completion when editing your expressions, but AQL is even better, and faster. For new modelers, prefer AQL over Acceleo/MTL. If you have existing modelers which use Acceleo/MTL, converting them to use AQL is relatively straightforward, see <a href="https://www.eclipse.org/acceleo/documentation/aql.html#MigratingfromMTLqueries" target="_blank">the AQL documentation</a> for details.</p>
+ <p>Acceleo expressions are enclosed in brackets: <code>[theExpression/]</code>. Inside the brackets you can write any valid Acceleo expression, including using
+ <code>if</code> and
+ <code>let</code> statements, for example. See <a href="https://wiki.eclipse.org/Acceleo" target="_blank">the Acceleo documentation</a> for the exact syntax and semantics of the language.
+ </p>
+ <p>Note that Acceleo expressions used inside VSMs
+ <strong>must</strong> be enclosed inside a single bracket. It is not currently possible to mix Acceleo expressions and fixed text (like
+ <code>"prefix[someExpression/]suffix"</code>). Instead, you can use Acceleo’s string manipulation operations to obtain the same result: <code>['prefix' + someExpression + 'suffix'/]</code>). Related to this, auto-completion only works if you are inside a well-formed bracket (i.e. <code>[<cursor>/]</code>); if you have simply opened the bracket but not closed it (i.e. <code>[<cursor></code>), completion will not be available.
+ </p>
+ <p>Acceleo expressions can transparently invoke methods from Java classes which follow the
+ <a href="#service_methods">service methods</a> conventions and have been properly declared in the VSM. Note that currently this only works if the Java service class is in the same project as the
+ <em>VSM</em>. You can also invoke Acceleo
+ <em>queries</em> defined in
+ <code>.mtl</code> files in your Viewpoint Specification Project. For this to work, your Viewpoint Specification Project should be an Acceleo Generator project, you can convert the project with the
+ <em>Configure > Toggle Acceleo Nature</em> contextual menu. If you want to use queries from
+ <code>.mtl</code> files in you Sirius project, the parent
+ <em>Viewpoint</em> element must have a
+ <em>Java Extension</em> element which references the MTL file, using the
+ <code>com::example::domain::design::module</code> syntax (note that the qualified name does not contain the
+ <code>.mtl</code> or
+ <code>.emtl</code> file extension). Also make sure to read <a href="http://www.obeonetwork.com/page/building-an-acceleo-generator" target="_blank">http://www.obeonetwork.com/page/building-an-acceleo-generator</a> to ensure the project is built correctly, or the queries defined in the
+ <code>.mtl</code> files may not be available when the project is deployed as a plug-in.
+ </p>
+ <p>
+ <em>Note:</em> due to an incompatible change in serialization format in EMF 2.9, if you use external
+ <code>.mtl</code> files in your modeler definitions and build your modeler plug-ins using EMF 2.9 or later, the resulting modeler will not work with previous versions of EMF (as the resulting
+ <code>.emtl</code> files will not load correctly with EMF 2.8 and earlier). For reference, EMF 2.9 corresponds to Eclipse 4.3 (Kepler).
+ </p>
+ <p>Acceleo is very precise (and very demanding) about the types of elements your queries are executed on. This generally means you get good auto-completion and useful validation and diagnostics. However sometimes Sirius is not able to statically determine the precise type of the model elements on which an expression will be evaluated. In that case, it assumes a plain
+ <em>EObject</em>. If you know the actual type which will be used, prefix your expression with
+ <code>filter(ExpectedType)</code> to help Sirius. Note that if the actual type at runtime is not compatible with
+ <code>ExpectedType</code>, the rest of your expression will silently be ignored.
+ </p>
+ <p>In the context of Sirius, you have access to a special feature which can be used to follow “back-links” or “cross-references”. From a given model element, this allows you to easily (and efficiently) find all the elements which refer to it in the scope of the models and representations in the same modeling project. This feature is available through the
+ <code>eInverse()</code> method, which can be used on any model element inside an Acceleo expression.
+ </p>
+ <p>Note that in most cases, expressions in Sirius are evaluated in a context where
+ <em>variables</em> are defined. For example, most expressions inside tool definitions have access to variables telling them which elements the tool has been applied on. In some cases, the names of these variable can conflict with names of features in your meta-model. The evaluation rules of Acceleo (OCL actually) give precedence to variables, so it is recommended to always prefix accesses to your meta-model features with
+ <code>self</code> (or another expression) to avoid ambiguity. As a concrete example, say you have an expression
+ <code>"[target/]"</code> that you expect to access the
+ <code>target</code> feature of one of your object. If evaluated in a context where a
+ <code>target</code> variable exist, the value of the expression will be the value of the variable,
+ <em>not</em> the value of the object’s property. To avoid ambiguity, always use expressions of the form
+ <code>"[self.target/]"</code> in such cases.
+ </p>
+ <p>
+ <em>Note:</em> Due to internal changes in the Eclipse Equinox runtime, starting with Eclipse Luna (4.4) it is impossible to evaluate Java services from an Acceleo 3 expression if the Java service is defined directly in the workspace. This only affect specifiers (not end-users). When developing modelers which use Acceleo expressions and rely on Java services, you must launch an Eclipse runtime from your development environement to test the resulting modeler in a context where the service is available as part of a deployed plug-in. Starting with Sirius 3.0 you can also use the AQL language instead, which has a syntax very similar to Acceleo 3/MTL, but does not have this limitation regarding services in the workspace.
+ </p>
+ <h2 id="ocl">Using Raw OCL</h2>
+ <p>Sirius also supports raw OCL expressions, but this support is deprecated and will be removed in future versions. OCL expressions must be prefixed with
+ <code>ocl:</code>. If you use it your Sirius project must declare a dependency to the
+ <code>org.eclipse.sirius.common.ocl</code> plug-in to ensure OCL support will be available wherever your modelers are used.
+ </p>
+ <p>It is highly recommended that you use Acceleo, which implemented the MTL standard and is a super-set of the OCL language, instead of raw OCL.</p>
+ <h2 id="custom">Providing a Custom Language</h2>
+ <p>Sirius allows you to provide your own language implementations, if you have very specific needs or want to reuse an existing custom language. Note that Sirius must be able to syntactically and unambiguously determine from an expression which language it is written in (to send it to the appropriate interpreter). The simplest way to achieve this is to define a prefix (like
+ <code>ocl:</code> for OCL) so that expressions written in your language can be distinguished from expressions written in any of the others.
+ </p>
+ <p>To provide your custom language, you must
+ <em>at least</em> implement the
+ <code>org.eclipse.sirius.common.expressionInterpreter</code> extension point, and provide an implementation of the
+ <code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreter</code> interface. The example below shows how the Acceleo interpreter is registered. The
+ <code>AcceleoMTLInterpreterProvider</code> is the one which implements the
+ <code>IInterpreter</code> interface.
+ </p>
+ <pre><code> <extension point="org.eclipse.sirius.common.expressionInterpreter"
+ id="org.eclipse.sirius.common.acceleo.mtl.AcceleoMTLInterpreter">
+ <expressionInterpreterProvider
+ interpreterProviderClass="org.eclipse.sirius.common.acceleo.mtl.business.internal.interpreter.AcceleoMTLInterpreterProvider" />
+ </extension>
+</code></pre>
+ <p>You can also optionally provide support for auto-completion for your language by implementing the
+ <code>org.eclipse.sirius.common.proposalProvider</code> extension point and providing an implementation of
+ <code>org.eclipse.sirius.common.tools.api.contentassist.IProposalProvider</code> interface. For example, here is how the completion support for Acceleo is registered (
+ <code>AcceleoProposalProvider</code> is the class which implements the
+ <code>IProposalProvider</code> interface):
+ </p>
+ <pre><code> <extension point="org.eclipse.sirius.common.proposalProvider">
+ <proposalProvider
+ class="org.eclipse.sirius.common.acceleo.mtl.ide.AcceleoProposalProvider"
+ interpreter="org.eclipse.sirius.common.acceleo.mtl.AcceleoMTLInterpreter" />
+ </extension>
+</code></pre>
+ <h2 id="service_methods">Writing Java Services</h2>
+ <p>Query languages may support the notion of
+ <em>Java services</em>, which are methods written in Java that can be transparently invoked from interpreted expressions in Sirius. Acceleo 3 includes this support. All you need to do is to create a Java class whose methods follow some conventions (described below) in your Viewpoint Specification Project, and declare the class (using its fully qualified Java name) in the VSM. You can then use the services defined in that class in any of you interpreted expressions written in either Acceleo or another language which supports services (refer to the query language’s documentation for details).
+ </p>
+ <p>A service is simply a public Java methods which follows some conventions:</p>
+ <ul>
+ <li>The class containing the method must be public and have a default constructor which takes no argument.</li>
+ <li>The class can contain many public methods (static or not), each of which will be visible as a service if they follow the right conventions.</li>
+ <li>A service method must take at least one parameter, which should be an EMF type (i.e.
+ <code>EObject</code> or a sub-type of
+ <code>EObject</code>).
+ </li>
+ <li>A service method may take more parameters, which can be:
+ <ul>
+ <li>strings</li>
+ <li>numbers</li>
+ <li>EMF types (i.e.
+ <code>EObject</code> or a sub-type)
+ </li>
+ <li>Java collections of EMF types (note that array types are
+ <strong>not</strong> supported).
+ </li>
+ </ul>
+ </li>
+ <li>A service method may return a value, which can have the same kinds of types as parameters.</li>
+ </ul>
+ <p>
+ <strong>WARNING:</strong> AQL only supports Sequences and Set as collection types. As a result, to get the full benefit from the AQL validation, it is recommended to write services that return a List or a Set as collection type.
+ </p>
+ <p>Here is an example of a Java service:</p>
+ <pre><code id="ecore_services">public class EObjectServices {
+ public List<EClass> getEClasses(EPackage ePackage) {
+ List<EClass> eClasses = new ArrayList<EClass>();
+ // The service code.
+ return eClasses;
+ }
+}
+</code></pre>
+ <p>Once a service has been defined and its class is registered in your VSM, you can invoke it in the expressions of languages which support it like this: <code>[aFamily.getFamiliesContainingParents()/]</code>. (using Acceleo syntax) The invocation looks as if the service was a normal feature of the
+ <code>Family</code> type. When the service is invoked, the model element on which it is invoked is used as the first argument to the Java method. If arguments are passed in the expression, they are mapped to the second, third, etc. parameters of the Java method, assuming the types are compatible. The result of evaluating a service invocation is the result of the Java method.
+ </p>
+ <p>
+ <em>Warning:</em> Java service methods should be stateless. There is no guarantee that two successive invocations of the same service method on two model elements (or even on the same one) will use the same instance of the service class.
+ </p>
+ <p>
+ <em>Warning:</em> There are currently some limitations on the use of Java services from Acceleo:
+ </p>
+ <ul>
+ <li>primitive types can not be used as arguments or return types for service methods invoked from Acceleo 3 expressions. The workaround is to use the corresponding wrapper type (e.g.
+ <code>Integer</code> instead of
+ <code>int</code>).
+ </li>
+ <li>service methods invoked from Acceleo 3 expressions can not return
+ <code>void</code>. You can return any value instead, for example target argument (the service method’s first parameter).
+ </li>
+ </ul>
+ <h2 id="standard_services">Standard Services</h2>
+ <p>Sirius provides some standard services that can be used from any VSM simply by adding the appropriate reference (as a
+ <em>Java Extension</em>) to the implementation class’s fully qualified name. When using such a service class, make sure your
+ <em>Viewpoint Specification Project</em> has a dependency towards the Sirius plug-in which provides said class.
+ </p>
+ <h3 id="editing_domain_services">Editing Domain Services and EMF Edit Integration</h3>
+ <p>Starting from Sirius 4.0, the
+ <code>org.eclipse.sirius.ext.emf.edit</code> plug-in provides the
+ <code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices</code> service class which can be referenced from any VSM (once properly declared). This class provides a large set of methods which give access to many useful features of the
+ <em>EMF Edit</em> framework, in particular all kinds of
+ <em>Item Providers</em>, in a way that is directly accessible as service invocations from interpreted expressions.
+ </p>
+ <h4 id="GeneralEditingDomainrelatedServices">General EditingDomain-related Services</h4>
+ <p>The following general services are made available:</p>
+ <ul>
+ <li>
+ <code>getEditingDomain(EObject)</code>
+ </li>
+ <li>
+ <code>isStale(EObject)</code>
+ </li>
+ <li>
+ <code>isControlled(EObject)</code>
+ </li>
+ <li>
+ <code>getAdapterFactory(EObject)</code>
+ </li>
+ <li>
+ <code>getAdapter(EObject, Class)</code>
+ </li>
+ </ul>
+ <h4 id="ItemProvidersServices">Item Providers Services</h4>
+ <p>Most public methods of the following interfaces are available as services on any
+ <code>EObject</code> (typically from a Sirius session):
+ </p>
+ <ul>
+ <li>
+ <code>org.eclipse.emf.edit.provider.IItemLabelProvider</code>
+ </li>
+ <li>
+ <code>org.eclipse.emf.edit.provider.IItemColorProvider</code>
+ </li>
+ <li>
+ <code>org.eclipse.emf.edit.provider.IItemFontProvider</code>
+ </li>
+ <li>
+ <code>org.eclipse.emf.edit.provider.IStructuredItemContentProvider</code>
+ </li>
+ <li>
+ <code>org.eclipse.emf.edit.provider.ITreeItemContentProvider</code>
+ </li>
+ <li>
+ <code>org.eclipse.emf.edit.provider.ITableItemLabelProvider</code>
+ </li>
+ <li>
+ <code>org.eclipse.emf.edit.provider.ITableItemColorProvider</code>
+ </li>
+ <li>
+ <code>org.eclipse.emf.edit.provider.ITableItemFontProvider</code>
+ </li>
+ </ul>
+ <p>In all cases, a
+ <code>getXXXProvider()</code> service method is also made available (for example
+ <code>getLabelProvider(EObject)</code>, which returns the item provider itself (or
+ <code>null</code>). The item provider is located using the
+ <code>ItemProviderAdapter</code> returned by the
+ <code>AdapterFactory</code> associated to the element’s editing domain. This assumes said domain is an
+ <code>AdapterFactoryEditingDomain</code> (which is true in practice in Sirius, which uses a
+ <code>TransactionalEditingDomain</code> that inherits from this).
+ </p>
+ <p>All service methods return an explicit
+ <code>null</code> value (or
+ <code>false</code> for services that return a boolean) if the corresponding item provider could not be found. Note that this is indistinguishable from an item provider method which actually returns
+ <code>null</code> or
+ <code>false</code>.
+ </p>
+ <h4 id="ItemPropertyRelatedServices">Item Property-Related Services</h4>
+ <p>The
+ <code>IItemPropertySource</code> associated with an element and its
+ <code>IItemPropertyDescriptors</code> can be obtained using the following services:
+ </p>
+ <ul>
+ <li>
+ <code>getItemPropertySource(EObject)</code>
+ </li>
+ <li>
+ <code>getPropertyDescriptors(EObject)</code> to obtain
+ <strong>all</strong> the
+ <code>IItemPropertyDescriptor</code> of the element.
+ </li>
+ <li>
+ <code>getPropertyDescriptorForFeature(EObject, String)</code> to obtain the
+ <code>IItemPropertyDescriptor</code> of an element’s specific feature
+ </li>
+ </ul>
+ <p>The following services, which all take a feature name as a second argument (the first explicit one when invoked as a service) give access to the corresponding methods in the
+ <code>IItemPropertyDescriptor</code> associated to the corresponding element’s feature:
+ </p>
+ <ul>
+ <li>
+ <code>getPropertyDescriptorPropertyValue()</code>
+ </li>
+ <li>
+ <code>isPropertyDescriptorPropertySet()</code>
+ </li>
+ <li>
+ <code>canSetPropertyDescriptorProperty()</code>
+ </li>
+ <li>
+ <code>resetPropertyDescriptorPropertyValue()</code>
+ </li>
+ <li>
+ <code>setPropertyDescriptorPropertyValue()</code>
+ </li>
+ <li>
+ <code>getPropertyDescriptorCategory()</code>
+ </li>
+ <li>
+ <code>getPropertyDescriptorDescription()</code>
+ </li>
+ <li>
+ <code>getPropertyDescriptorDisplayName()</code>
+ </li>
+ <li>
+ <code>getPropertyDescriptorFilterFlags()</code>
+ </li>
+ <li>
+ <code>getPropertyDescriptorHelpContextIds()</code>
+ </li>
+ <li>
+ <code>getPropertyDescriptorId()</code>
+ </li>
+ <li>
+ <code>getPropertyDescriptorLabelProvider()</code>
+ </li>
+ <li>
+ <code>getPropertyDescriptorFeature()</code>
+ </li>
+ <li>
+ <code>isPropertyDescriptorMany()</code>
+ </li>
+ <li>
+ <code>getPropertyDescriptorChoiceOfValues()</code>
+ </li>
+ <li>
+ <code>isPropertyDescriptorMultiLine()</code>
+ </li>
+ <li>
+ <code>isPropertyDescriptorSortChoices()</code>
+ </li>
+ </ul>
+ <h4 id="CommandrelatedServices">Command-related Services</h4>
+ <p>A series of service methods can be used to invoke the standard EMF Commands available from
+ <code>ItemProviderAdapter</code> 's various
+ <code>createXXXCommand()</code> methods. Note that contrary to the
+ <code>createXXXCommand()</code> methods which simply returns a
+ <code>Command</code> instance, the service methods exposed in this class will directly
+ <strong>execute</strong> the command on the editing domains
+ <code>CommandStack</code>.
+ <br/>Their names follow the
+ <code>perfomXXXCommand()</code> pattern to reflect this. They all return the
+ <code>self</code> element (the
+ <code>EObject</code> on which the service was invoked.
+ </p>
+ <p>The command-related services available are:</p>
+ <ul>
+ <li>
+ <code>performSetCommand()</code>
+ </li>
+ <li>
+ <code>performUnsetCommand()</code>
+ </li>
+ <li>
+ <code>performAddCommand()</code>
+ </li>
+ <li>
+ <code>performRemoveCommand()</code>
+ </li>
+ <li>
+ <code>performReplaceCommand()</code>
+ </li>
+ <li>
+ <code>performMoveCommand()</code>
+ </li>
+ </ul>
+ <p>The implementation of these services delegate to the
+ <code>ItemProviderAdapter.createCommand()</code> method, so any customization made in the
+ <code>ItemProviderAdapter</code> 's implementation will be taken into account.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/general/images/common_attributes.png b/doc/5.1.x/specifier/general/images/common_attributes.png
new file mode 100644
index 0000000..8b3de5d
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/common_attributes.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/documentation_attributes.png b/doc/5.1.x/specifier/general/images/documentation_attributes.png
new file mode 100644
index 0000000..8683403
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/documentation_attributes.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/domain_class.png b/doc/5.1.x/specifier/general/images/domain_class.png
new file mode 100644
index 0000000..b6897f6
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/domain_class.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/emptyExpressionAutoCompletion.jpg b/doc/5.1.x/specifier/general/images/emptyExpressionAutoCompletion.jpg
new file mode 100644
index 0000000..e7b2fa6
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/emptyExpressionAutoCompletion.jpg
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/emptyExpressionCursor.jpg b/doc/5.1.x/specifier/general/images/emptyExpressionCursor.jpg
new file mode 100644
index 0000000..e1a8abd
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/emptyExpressionCursor.jpg
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/emptyFieldAutoCompletion.jpg b/doc/5.1.x/specifier/general/images/emptyFieldAutoCompletion.jpg
new file mode 100644
index 0000000..243f581
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/emptyFieldAutoCompletion.jpg
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/featureName.png b/doc/5.1.x/specifier/general/images/featureName.png
new file mode 100644
index 0000000..7ae02b0
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/featureName.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/interpreted_expressions.png b/doc/5.1.x/specifier/general/images/interpreted_expressions.png
new file mode 100644
index 0000000..de3a151
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/interpreted_expressions.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/nn47/.directory b/doc/5.1.x/specifier/general/images/nn47/.directory
new file mode 100644
index 0000000..d3e4e62
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/nn47/.directory
@@ -0,0 +1,6 @@
+[Dolphin]
+ShowPreview=true
+Timestamp=2010,7,27,14,47,37
+
+[Settings]
+ShowDotFiles=true
diff --git a/doc/5.1.x/specifier/general/images/questionMarque.png b/doc/5.1.x/specifier/general/images/questionMarque.png
new file mode 100644
index 0000000..09dda8c
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/questionMarque.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/quick_outline.png b/doc/5.1.x/specifier/general/images/quick_outline.png
new file mode 100644
index 0000000..8df0a0d
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/quick_outline.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/specifier-guide/collapseall.png b/doc/5.1.x/specifier/general/images/specifier-guide/collapseall.png
new file mode 100644
index 0000000..fa9b646
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/specifier-guide/collapseall.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/specifier-guide/complete_task.png b/doc/5.1.x/specifier/general/images/specifier-guide/complete_task.png
new file mode 100644
index 0000000..42e09ca
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/specifier-guide/complete_task.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/specifier-guide/expandall.png b/doc/5.1.x/specifier/general/images/specifier-guide/expandall.png
new file mode 100644
index 0000000..6687a95
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/specifier-guide/expandall.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/specifier-guide/validate_model.png b/doc/5.1.x/specifier/general/images/specifier-guide/validate_model.png
new file mode 100644
index 0000000..49c1feb
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/specifier-guide/validate_model.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/standard_colors.png b/doc/5.1.x/specifier/general/images/standard_colors.png
new file mode 100644
index 0000000..9bbbde9
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/standard_colors.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/textAreaDialog.png b/doc/5.1.x/specifier/general/images/textAreaDialog.png
new file mode 100644
index 0000000..44b49d5
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/textAreaDialog.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message1.png b/doc/5.1.x/specifier/general/images/translatable_message1.png
new file mode 100644
index 0000000..a78e88e
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message1.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message2.png b/doc/5.1.x/specifier/general/images/translatable_message2.png
new file mode 100644
index 0000000..754c7a3
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message2.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message3.png b/doc/5.1.x/specifier/general/images/translatable_message3.png
new file mode 100644
index 0000000..8ac721f
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message3.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message4.png b/doc/5.1.x/specifier/general/images/translatable_message4.png
new file mode 100644
index 0000000..60dc239
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message4.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message5.png b/doc/5.1.x/specifier/general/images/translatable_message5.png
new file mode 100644
index 0000000..c5fb69c
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message5.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message6.png b/doc/5.1.x/specifier/general/images/translatable_message6.png
new file mode 100644
index 0000000..adde570
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message6.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message8.png b/doc/5.1.x/specifier/general/images/translatable_message8.png
new file mode 100644
index 0000000..9608a3d
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message8.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message9.png b/doc/5.1.x/specifier/general/images/translatable_message9.png
new file mode 100644
index 0000000..eb4b84c
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message9.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/tricks.png b/doc/5.1.x/specifier/general/images/tricks.png
new file mode 100644
index 0000000..a0679f0
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/tricks.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/viewpoint_interpreter.png b/doc/5.1.x/specifier/general/images/viewpoint_interpreter.png
new file mode 100644
index 0000000..acd9167
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/viewpoint_interpreter.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/Properties_View_Description.html b/doc/5.1.x/specifier/properties/Properties_View_Description.html
new file mode 100644
index 0000000..55f1ac0
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/Properties_View_Description.html
@@ -0,0 +1,1734 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Properties_View_Description</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SpecifyingPropertiesViews">Specifying Properties Views</h1>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#SpecifyingPropertiesViews">Specifying Properties Views</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#properties_view_description">Properties View Description</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#common_attributes">Common Attributes</a>
+ </li>
+ <li>
+ <a href="#additional_services">Additional Services</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#categories">Categories</a>
+ </li>
+ <li>
+ <a href="#pages">Pages</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#page-toolbar-action">Toolbar Actions</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#groups">Groups</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#group-toolbar-action">Toolbar Actions</a>
+ </li>
+ <li>
+ <a href="#widgets-from-domain-class">Widgets From Domain Class</a>
+ </li>
+ <li>
+ <a href="#group_styles">Group Styles</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#widgets">Widgets</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#text">Text / Text area</a>
+ </li>
+ <li>
+ <a href="#button">Button</a>
+ </li>
+ <li>
+ <a href="#label">Label</a>
+ </li>
+ <li>
+ <a href="#checkbox">Checkbox</a>
+ </li>
+ <li>
+ <a href="#select">Select</a>
+ </li>
+ <li>
+ <a href="#radio_group">Radio Group</a>
+ </li>
+ <li>
+ <a href="#hyperlink">Hyperlink</a>
+ </li>
+ <li>
+ <a href="#reference">Reference</a>
+ </li>
+ <li>
+ <a href="#list">List</a>
+ </li>
+ <li>
+ <a href="#basic_custom_widgets">Basic Custom Widgets</a>
+ </li>
+ <li>
+ <a href="#advanced_custom_widgets">Advanced Custom Widgets</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#dynamic_mappings">Dynamic Mappings</a>
+ </li>
+ <li>
+ <a href="#containers_and_layout">Containers and Layout</a>
+ </li>
+ <li>
+ <a href="#styling">Styling</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#widgets_styles">Widgets styles</a>
+ </li>
+ <li>
+ <a href="#colors">Colors</a>
+ </li>
+ <li>
+ <a href="#conditional_styles">Conditional Styles</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#validation_rules">Validation rules</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#page_semantic_validation_rule">Page semantic validation rule</a>
+ </li>
+ <li>
+ <a href="#group_semantic_validation_rule">Group semantic validation rule</a>
+ </li>
+ <li>
+ <a href="#group_property_validation_rule">Group property validation rule</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#extensibility_features">Extensibility Features</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#extends">Extends</a>
+ </li>
+ <li>
+ <a href="#overrides">Overrides</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#extension_points">Extension Points</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#advanced_custom_widgets_extension_points">Extension Points for Advanced Custom Widgets</a>
+ </li>
+ <li>
+ <a href="#tab_filtering">Tab Filtering</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="introduction">Introduction</h2>
+ <p>Starting from version 4.0, Sirius supports the definition of properties views with many features like complex styling, validation, context etc.</p>
+ <p>Properties views are defined inside the VSM in a way that is similar to other Sirius representations. The configuration elements in the VSM identify a sub-set of the elements in the semantic model to which they apply, and associate to them widgets, which will be visible in the Eclipse
+ <em>Properties View</em> to view and edit the elements’s properties.
+ </p>
+ <p>The configuration
+ <em>maps</em> semantic elements onto some properties view elements. At runtime, each active properties element (pages, groups, widgets) will produce zero or more elements in the properties view, depending on how many semantic elements currently match the properties element’s definition. Whenever the current selection changes Sirius will automatically re-compute which elements should appear in the properties view according to the active widgets, and create or remove the necessary elements in the properties view.
+ </p>
+ <p>Sirius properties view are enabled whenever the selected element is part of an opened session, i.e. any element selected inside a Sirius editor or from the
+ <em>Model Explorer</em> view on an opened session.
+ </p>
+ <p>Note that if you have the (optional) support for Sirius-defined properties views correctly installed but do not specify anything inside your VSMs, Sirius will apply default generic rules to provide a canonical properties view for your model elements. As soon as you specify your own configuration, as described in this document, the default rules will be ignored in favor of yours. See
+ <a href="#default_rules">below</a> for how both approaches can be combined.
+ </p>
+ <p>You can create a
+ <em>Properties View</em> description under the root element of an odesign thanks to three specific menu items.
+ </p>
+ <p>
+ <img border="0" src="images/new-properties.png"/>
+ </p>
+ <ul>
+ <li>The first menu is used to create a blank
+ <em>Properties View</em> description. With this menu, you will start your
+ <em>Property View</em> definition from scratch.
+ </li>
+ <li>The second menu can copy the default rules directly inside of the odesign. While powerful, those default rules can be quite complex for new users.</li>
+ <li>The third menu can create a new
+ <em>Properties View</em> which will extends the default rules. Using this mechanism, you can leverage all the default rules and you have the ability to easily add new rules.
+ </li>
+ </ul>
+ <h2 id="properties_view_description">Properties View Description</h2>
+ <p>Properties view are configured by creating a
+ <em>Properties View Description</em> element (directly under the top-level
+ <a href="../general/Specifying_Viewpoints.html#vsm_organization">
+ <em>Group</em>
+ </a> element of the VSM) and its sub-elements (which describe the widgets, the actions, the layout, etc.).
+ </p>
+ <p>Like many elements inside a
+ <a href="../../Glossary.html#VSM">
+ <em>VSM</em>
+ </a>,
+ <em>View Extension Description</em> have an optional
+ <em>Identifier</em>, which should be unique.
+ </p>
+ <p>Inside a
+ <em>Properties View Description</em> element, you can create:
+ </p>
+ <ul>
+ <li>
+ <a href="#categories">
+ <em>Categories</em>
+ </a>, which exist only for the specifier convenience to order his specification;
+ </li>
+ </ul>
+ <p>Inside a
+ <em>Category</em> element, you can create:
+ </p>
+ <ul>
+ <li>
+ <a href="#pages">
+ <em>Pages</em>
+ </a>, which correspond to “tabs”;
+ </li>
+ <li>
+ <a href="#groups">
+ <em>Groups</em>
+ </a>, which represent named sections inside a page/tab which contain the actual widgets;
+ </li>
+ <li>
+ <a href="#overrides">
+ <em>Overrides</em>
+ </a>, which allows to override part of an existing properties view description.
+ </li>
+ </ul>
+ <p>It is recommended that the
+ <em>Properties View Description</em> be explicitly associated with the meta-model(s) of the semantic elements it will represent. You can add referenced meta-models from different sources in the
+ <em>Metamodels</em> property section of the
+ <em>Properties View Description</em>. Sirius will work even without this association, but setting it explicitly will give you better feedback when validating your
+ <a href="../../Glossary.html#VSM">
+ <em>VSM</em>
+ </a>.
+ </p>
+ <p>The descriptions for all the different types of properties view elements share the same common principles:</p>
+ <ul>
+ <li>Some of the elements of the semantic model are selected, using a combination of configuration attributes (see below). These elements are called
+ <em>targets</em>, and each one has a single widget of this type representing it.
+ </li>
+ <li>The graphical aspect of the properties view is defined by a
+ <em>style</em>. Sirius provides a rich set of possible styles, which are described later in this document.
+ </li>
+ <li>Optionally, a behavior for the properties view element depending on the widget kind can be defined (edition for text field, on click action for hyperlink or buttons...).</li>
+ </ul>
+ <p id="context">
+ <strong>Context.</strong> Each properties view element is defined in a
+ <em>context</em> in the VSM. At runtime, the corresponding
+ <em>context element</em> would be the semantic element associated to the properties view element description. This context element is used as a starting point to determine which instances of a properties view element description should be created on the properties view:
+ </p>
+ <ol>
+ <li>First, the
+ <em>Semantic Candidates Expression</em> of the description is evaluated, starting from the context element. It should return a set (possibly empty) of elements in the semantic model.
+ </li>
+ <li>This list of candidates is then filtered using the
+ <em>Domain Class</em> specified in the description: only the candidates which are instance of the specified class are retained.
+ </li>
+ <li>Finally, the optional
+ <em>Precondition Expression</em> of the element is evaluated, once for each of the remaining candidates. It should return a boolean value. Only the candidates for which the predicate returns a true value are kept and will actually produce an element on the properties view.
+ </li>
+ </ol>
+ <p>This order of evaluation should be kept in mind when specifying properties view. In particular, to avoid performance issues you should:</p>
+ <ul>
+ <li>Limit the number of model elements with
+ <em>Semantic Candidate Expression</em>.
+ </li>
+ <li>Avoid testing instances type in
+ <em>Semantic Candidate Expression</em> (this will be done anyway when filtering the
+ <em>Domain Class</em>).
+ </li>
+ <li>Use the most specific type in
+ <em>Domain Class</em>.
+ </li>
+ <li>Avoid navigation and long computations in
+ <em>Precondition Expression</em>.
+ </li>
+ </ul>
+ <p>
+ <strong>Properties View Elements Definition.</strong> Properties views support several different types of elements, which are described in the following sections. They are:
+ </p>
+ <ul>
+ <li>
+ <a href="#pages">pages</a>, which represent properties view
+ <strong>Tab</strong> that can contain sections.
+ </li>
+ <li>
+ <a href="#groups">groups</a>, which represent properties view
+ <strong>Section</strong> that can contain widgets.
+ </li>
+ <li>
+ <a href="#widgets">widgets</a> describe the different kind of widgets supported, like texts, buttons, labels, checkboxes, radio groups...
+ </li>
+ <li>
+ <a href="#dynamic_mappings">dynamic mappings</a> are used for advanced scenarios where the set of widgets to display can not be known statically, but instead must be computed at runtime.
+ </li>
+ <li>
+ <a href="#containers_and_layout">containers and layout</a> are used to organize and layout multiple related widgets.
+ </li>
+ <li>
+ <a href="#overrides">overrides</a> are used to override the properties view of an existing properties view description.
+ </li>
+ </ul>
+ <p id="default_rules">
+ <strong>Default Properties View Rules.</strong> When no properties view definition is found for an element selected by the user, Sirius will apply default rules which attempt to give a usable (if generic) result for most user models. As soon as you define
+ <em>some</em> custom rules for your modelers,
+ <em>only</em> these custom rules will apply, and the default ones will be ignored. If you want to mix the default rules for some of your elements and custom ones only for some specific types, you can:
+ </p>
+ <ul>
+ <li>Extend the default rules model inside your VSM: from the top-level element of the VSM model, select
+ <em>New Properties> Extend Default Properties View</em>. This will allow you to redefine the behavior of the default rules thanks to the “extension mechanism”#extensibility_features.
+ </li>
+ <li>Import a copy of the default rules model inside your VSM: from the top-level element of the VSM model, select
+ <em>New Properties > Import Default Properties View</em>.
+ </li>
+ <li>Add your custom rules (pages and groups) and optionally update the default ones to not apply for the elements for which you provide more specific views (typically by modifying the
+ <em>Precondition Expression</em> of the default
+ <em>Page</em>), to do so from the top-level element of the VSM model, select
+ <em>New Properties > New Default Properties View</em>.
+ </li>
+ </ul>
+ <p>
+ <strong>Legacy Sirius Tabs.</strong> By default, the legacy
+ <em>Semantic</em> and
+ <em>Default</em> tabs which show the raw properties of the selected element in a plain property grid are still visible even when you have defined custom properties views (the
+ <em>Semantic</em> tab is visible when the selection is from a Sirius representation; the
+ <em>Default</em> tab is shown when selecting from the
+ <em>Model Explorer</em>). If you want to hide these legacy tabs and only show your custom tabs, you can do so by changing the preferences in the
+ <em>Sirius > Sirius Properties View</em> category.
+ </p>
+ <h3 id="common_attributes">Common Attributes</h3>
+ <p>The following attributes are mostly shared by all the properties view element description (page, group, container, widget).</p>
+ <p id="identifier">
+ <strong>Identifier.</strong> Each properties view element description defines an optional attribute
+ <em>Identifier</em>. It can be used to distinguish elements of the same type in the VSM editor, and in advanced customization scenarios where the VSM model is programmatically accessed/modified.
+ </p>
+ <p id="domain_class">
+ <strong>Domain Class.</strong> The optional
+ <em>Domain Class</em> attribute is the type of semantic elements which are represented by the properties view element definition. The syntax for the domain class name can be the basic name, like
+ <code>Package</code>, a qualified name using name of the EMF EPackage which defines the type, like
+ <code>uml.Package</code>, or a fully qualified URI like
+ <code>http://www.eclipse.org/uml2/3.0.0/UML#//Package</code>.
+ <br/>An empty
+ <em>Domain Class</em> means that the element being defined will be applicable to any model element of any type. By default, new properties view elements can be created on
+ <em>any</em> instance of the
+ <em>Domain Class</em>.
+ </p>
+ <p id="precondition_expression">
+ <strong>Precondition Expression.</strong> You can use the
+ <em>Precondition Expression</em> to change this. If such an expression is specified, it will be evaluated in the
+ <a href="#context">context</a> of the semantic element the user has selected, and only if the expression returns
+ <code>true</code> will the properties view element be applied to that semantic element.
+ </p>
+ <p id="label_expression">
+ <strong>Label Expression.</strong> This expression is used to compute the text of the label describing the element (which will typically appear on the left of a widget). The
+ <em>Label expression</em> is evaluated in the context of the semantic element and should return a string. If the expression is not specified, the default label is empty.
+ </p>
+ <p id="help_expression">
+ <strong>Help Expression.</strong> The help text of a properties view element is specified using the
+ <em>Help expression</em>, which is evaluated in the context of the semantic element and should return a string. It will appear as a tooltip on the question-mark icon associated to a widget.
+ </p>
+ <p id="is_enabled_expression">
+ <strong>Is Enabled Expression.</strong> Each widget can be enabled or disabled (making it visible but read-only) . The
+ <em>Is Enabled Expression</em> is evaluated in the context of the semantic element and should return a boolean. It the expression is not specified it defaults to
+ <em>true</em> (meaning the widget is enabled).
+ </p>
+ <p id="semantic_candidate_expression">
+ <strong>Semantic Candidate Expression.</strong> The
+ <em>Semantic Candidate Expression</em> defines the model element represented by the properties view element.
+ </p>
+ <p id="styles">
+ <strong>Styles.</strong> Each kind of properties view element supports a rich set of possible
+ <a href="#styling">styles</a>.
+ </p>
+ <p>To find some documentation for each properties, you can also refer to the tool-tips available directly in the editor on the “question mark” icon of each property.</p>
+ <p>Here is an example of a widget configuration (a single-line
+ <a href="#text">text</a> in this case) which illustrates some of the common attributes:
+ </p>
+ <p>
+ <img border="0" src="images/basic-properties-example-vsm.png"/>
+ </p>
+ <p>The
+ <em>Text Element Name (non-editable)</em> element has the exact same configuration except that its
+ <em>Label Expression</em> is
+ <code>Name (read-only):</code> and its
+ <em>Is Enabled Expression</em> is set to
+ <code>aql:false</code>.
+ </p>
+ <p>Here is the resulting properties view rendered for a diagram element:</p>
+ <p>
+ <img border="0" src="images/basic-properties-example-diagram.png"/>
+ </p>
+ <p>We see both label expressions on the left of each widget, help icons which show the computed
+ <em>Help Expression</em> when the user leaves the mouse pointer on them, and the actual widgets. The second text widget is disabled (visible thanks to the light blue background) because of its
+ <em>Is Enabled Expression</em>.
+ </p>
+ <h3 id="additional_services">Additional Services</h3>
+ <p>Beside
+ <code>self</code>, which represents the current context element on which an expression is evaluated, every expression defined inside a
+ <em>Property View Description</em> has access to an additional special variable named
+ <code>input</code>, which offers some additional services. For a given user selection, the value of
+ <code>input</code> is the same everywhere inside a
+ <em>Property View Description</em>; it corresponds to a descriptor of what the user select and can be used to obtain contextual information.
+ </p>
+ <p>
+ <strong>Services on
+ <code>input</code>.
+ </strong>
+ </p>
+ <ul>
+ <li>
+ <code>input.getOriginalSelection()</code>: returns the original, raw element selected by the user before any unwrapping or interpretation. This may not be a model element; for Sirius diagrams for example this will be an
+ <code>EditPart</code>.
+ </li>
+ <li>
+ <code>input.getSemanticElement()</code>: returns the main semantic element associated with the selection. This will correspond to the
+ <code>self</code> variable inside a
+ <em>Page</em>, but inside a group
+ <code>self</code> may have a different value is
+ <em>Semantic Candidate Expressions</em> were used, so this service can be used to obtain the “original self” from anywhere.
+ </li>
+ <li>
+ <code>input.getAllSemanticElements()</code>: returns
+ <em>all</em> the semantic model elements associated with the selection, not just the main one. This will include additional
+ <code>DRepresentationElement#semanticElements</code> if there are any.
+ </li>
+ <li>
+ <code>input.emfEditServices(EObject)</code>: provides a handle to invoke “EMF Edit”-related services on the model element specified in argument. See below for the list of services that can be called on the result.
+ </li>
+ <li>
+ <code>input.context()</code>: provides a handle to invoke additional services to obtain more information about the overall context of the selection. See below fot the list of services that can be called on the result.
+ </li>
+ </ul>
+ <p>
+ <strong>Services on
+ <code>input.emfEditServices(EObject)</code>.
+ </strong> In the descriptions below,
+ <code>obj</code> designates the
+ <code>EObject</code> instance which was passed to
+ <code>emfEditServices()</code>.
+ </p>
+ <ul>
+ <li>
+ <code>getChoiceOfValues(EStructuralFeature)</code>: returns all the possible values for the specified feature of
+ <code>obj</code>, as defined by its
+ <code>IItemPropertyDescriptor</code>.
+ </li>
+ <li>
+ <code>getDescription(EStructuralFeature)</code>: returns the (textual) description of the specified feature of
+ <code>obj</code>, as defined by its
+ <code>IItemPropertyDescriptor</code>.
+ </li>
+ <li>
+ <code>getEStructuralFeatures()</code>: returns all the features of
+ <code>obj</code> that would be shown in the properties view by default. This ignores transient, derived and containment features.
+ </li>
+ <li>
+ <code>getImage()</code>: returns the image (icon) to use for
+ <code>obj</code>, as defined by its
+ <code>IItemLabelProvider</code>.
+ </li>
+ <li>
+ <code>getText()</code>: returns the textual representation to use for
+ <code>obj</code>, as defined by its
+ <code>IItemLabelProvider</code>.
+ </li>
+ <li>
+ <code>getText(EStructuralFeature)</code>: returns the “display name” of the specified feature of
+ <code>obj</code>, as defined by its
+ <code>IItemPropertyDescriptor</code>, or the textual representation of the feature itself (as defined by its own
+ <code>IItemLabelProvider</code>) if no display name is defined.
+ </li>
+ <li>
+ <code>isMultiline(EStructuralFeature)</code>: checks whether the specified feature of
+ <code>obj</code> (which is assumed to be textual) should be represented on muliple lines, as defined by its
+ <code>IItemPropertyDescriptor.isMultiLine()</code> method.
+ </li>
+ <li>
+ <code>needsCheckboxWidget(EStructuralFeature)</code>: checks whether the specified feature of
+ <code>obj</code> can be represented by a checkbox widget (i.e. it is a single-valued
+ <code>boolean</code> or
+ <code>java.lang.Boolean</code>).
+ </li>
+ <li>
+ <code>needsTextWidget(EStructuralFeature)</code>: checks whether the specified feature of
+ <code>obj</code> can be represented by a text (or text area) widget (i.e. it is a single-valued string, number or date).
+ </li>
+ <li>
+ <code>setValue(EStructuralFeature, Object)</code>: sets the value of the specified feature of
+ <code>obj</code> to the given value. This is a thin wrapper around
+ <code>EObject.eSet()</code> and should only be used inside widget actions as it modifies the model. It only handles basic cases; explicit model operations or custom services should be prefered if possible.
+ </li>
+ </ul>
+ <p>
+ <strong>Services on
+ <code>input.context()</code>.
+ </strong>
+ </p>
+ <ul>
+ <li>
+ <code>mainSemanticElement()</code>: returns the main semantic element associated with the selection. This is equivalent to
+ <code>input.getSemanticElement()</code>.
+ </li>
+ <li>
+ <code>allSemanticElements()</code>: returns
+ <em>all</em> the semantic model elements associated with the selection, not just the main one. This is equivalent to
+ <code>input.getAllSemanticElements()</code>.
+ </li>
+ <li>
+ <code>representation()</code>: returns the
+ <code>DRepresentation</code> instance in which the current input was selected, or
+ <em>null</em> if the element was selected from the
+ <em>Model Explorer</em>.
+ </li>
+ <li>
+ <code>semanticDecorator()</code>: returns the
+ <code>DSemanticDecorator</code> instance which was selected.
+ </li>
+ <li>
+ <code>session()</code>: return the
+ <code>Session</code> in the context of which the selection was done. This is a Java object which can only be used by additional (custom) Java services.
+ </li>
+ </ul>
+ <h2 id="categories">Categories</h2>
+ <p>A
+ <em>Category</em> is used to sort the
+ <a href="#pages">pages</a> and the
+ <a href="#groups">groups</a>. The category does not represent anything in the final user properties view, the category exists only for the specifier convenience to order the specification. For example a
+ <em>Reused</em> category can be created to store all the groups that would be used by different
+ <a href="#pages">pages</a> and
+ <a href="../general/Model_Operations.html#dialogandwizard">dialogs</a>.
+ <br/>Categories can be created
+ </p>
+ <h2 id="pages">Pages</h2>
+ <p>A
+ <em>Page</em> is used to represent a
+ <strong>Tab</strong> in the properties view.
+ </p>
+ <p>
+ <img alt="Properties can be organized in separate tabs, defined by Page Description elements" title="Properties can be organized in separate tabs, defined by Page Description elements" border="0" src="images/pages.png"/>
+ </p>
+ <p>Pages are configured by creating a
+ <em>Page</em> element inside a
+ <em>Properties View Description</em>. In the illustration above, the two pages
+ <em>General</em> and
+ <em>Hierarchy</em> have been defined from the VSM. They appear above the standard tabs provided by Sirius (
+ <em>Semantic</em>,
+ <em>Advanced</em>, etc.).
+ </p>
+ <p>Much like the other properties view elements, you must specify the
+ <a href="#identifier">
+ <em>Identifier</em>
+ </a>,
+ <a href="#domain_class">
+ <em>Domain Class</em>
+ </a>,
+ <a href="#precondition_expression">
+ <em>Precondition Expression</em>
+ </a>,
+ <a href="#label_expression">
+ <em>Label Expression</em>
+ </a>,
+ <a href="#semantic_candidate_expression">
+ <em>Semantic Candidate Expression</em>
+ </a>.
+ </p>
+ <p>The definition of a page follows the general rules described
+ <a href="#properties_view_description">above</a> to determine the semantic elements for which a page should be created.
+ </p>
+ <p>A page’s content is defined by the
+ <a href="#groups">
+ <em>Groups</em>
+ </a> it references, which are defined directly under the
+ <em>Properties View Description</em>. The groups are ordered in the page accordingly to their order in the groups reference list in the VSM.
+ </p>
+ <h3 id="page-toolbar-action">Toolbar Actions</h3>
+ <p>A page can also define toolbar actions which will be used to create buttons in the toolbar of the page to let the end user execute some operations easily. A
+ <em>Toolbar Action</em> can have a tooltip by returning a string for the
+ <em>Tooltip expression</em>. They also contain an
+ <em>Initial Operation</em> used to define the model operations to execute when the user will click on the button. Finally a
+ <em>Toolbar Action</em> can have an image thanks to an
+ <em>Image expression</em>. The
+ <em>Image expression</em> must return a string with the following structure PROJECT_NAME/IMAGE_PATH. For example: org.eclipse.sirius.sample.basicfamily.design/icons/Delete_16x16.gif. If an image is not provided or not found, a default image will be used.
+ </p>
+ <h2 id="groups">Groups</h2>
+ <p>A
+ <em>Group</em> is used to represent a
+ <strong>Section</strong> in a properties view tab.
+ </p>
+ <p>
+ <img alt="Inside a tab, properties can be grouped in foldable sections" title="Inside a tab, properties can be grouped in foldable sections" border="0" src="images/groups.png"/>
+ </p>
+ <p>Groups are configured by creating a
+ <em>Group</em> element inside a
+ <em>Properties View Description</em>. Groups will only be visible inside a tab if they are referenced by the corresponding
+ <em>Page</em>. By default, a newly created
+ <em>Group</em> element is not part of any page, so you
+ <em>must</em> add it explicitly to the
+ <em>Pages</em> where it should appear. A single
+ <em>Group</em> definition can be referenced in as many
+ <em>Page</em> definition as needed; this allows sharing common sections between different pages.
+ </p>
+ <p>Much like the other properties view elements, you must specify the
+ <a href="#identifier">
+ <em>Identifier</em>
+ </a>,
+ <a href="#domain_class">
+ <em>Domain Class</em>
+ </a>,
+ <a href="#precondition_expression">
+ <em>Precondition Expression</em>
+ </a>,
+ <a href="#label_expression">
+ <em>Label Expression</em>
+ </a>,
+ <a href="#semantic_candidate_expression">
+ <em>Semantic Candidate Expression</em>
+ </a>,
+ <a href="#styles">
+ <em>Styles</em>
+ </a>,
+ <a href="#conditional_styles">
+ <em>Conditional Styles</em>
+ </a>.
+ </p>
+ <p>The definition of a group follows the general rules described
+ <a href="#properties_view_description">above</a> to determine the semantic elements for which a group should be created.
+ </p>
+ <p>A group can contain
+ <a href="#widgets">
+ <em>widgets</em>
+ </a>,
+ <a href="#containers_and_layout">
+ <em>containers</em>
+ </a> to organize them, and
+ <a href="#validation_rules">
+ <em>validation rules</em>
+ </a>, all of which are defined inside the group description (
+ <em>New Widget > Container|Text...</em> and
+ <em>New > Group Validations</em>, respectively).
+ </p>
+ <h3 id="group-toolbar-action">Toolbar Actions</h3>
+ <p>A group can also define toolbar actions which will be used to create buttons in the toolbar of the group to let the end user execute some operations easily. A
+ <em>Toolbar Action</em> can have a tooltip by returning a string for the
+ <em>Tooltip expression</em>. They also contain an
+ <em>Initial Operation</em> used to define the model operations to execute when the user will click on the button. Finally a
+ <em>Toolbar Action</em> can have an image thanks to an
+ <em>Image expression</em>. The
+ <em>Image expression</em> must return a string with the following structure PROJECT_NAME/IMAGE_PATH. For example: org.eclipse.sirius.sample.basicfamily.design/icons/Delete_16x16.gif. If an image is not provided or not found, a default image will be used.
+ </p>
+ <h3 id="widgets-from-domain-class">Widgets From Domain Class</h3>
+ <p>
+ <img alt="Create easily a widget for each structural feature of your EClass" title="Create easily a widget for each structural feature of your EClass" border="0" src="images/widget-from-domain-class.png"/>
+ </p>
+ <p>By specifying the
+ <em>Domain Class</em> of a group and by specifying the metamodels on the relevant container of the group (like the Properties View object), you will have access to a new contextual action used to create a default version of a widget for each of the structural features of your
+ <em>Domain Class</em>. You can create all the widgets at once or only the desired ones. The configuration generated in your odesign is heavily inspired by the default rules available, as such all the EString properties will be handled by a text widget, all the EBoolean properties by a checkbox, etc.
+ </p>
+ <h3 id="group_styles">Group Styles</h3>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including
+ <a href="#conditional_styles">conditional styles</a>. This section only presents the aspects which are specific to groups.
+ </p>
+ <p>For groups you can define the following style attributes:</p>
+ <ul>
+ <li>
+ <em>Background Color</em>: You can specify the background color using
+ <a href="#colors">colors</a> from the standard or user-defined palette.
+ </li>
+ <li>
+ <em>Bar Style</em>: Is used to define the section style. There are 3 different styles:
+ <code>TITLE BAR</code>,
+ <code>SHORT TITLE BAR</code>,
+ <code>NO TITLE</code> (see the first table below for illusrations of these styles).
+ </li>
+ <li>
+ <em>Expanded by Default</em>: This flag is used to define if the section should be initialy expanded or collapsed.
+ </li>
+ <li>
+ <em>Font Name Expression</em>: Is used to computes the name of the font to use.
+ </li>
+ <li>
+ <em>Font size Expression</em>: Indicates the font size to use in points.
+ </li>
+ <li>
+ <em>Foreground Color</em>: You can specify the foreground color using
+ <a href="#colors">color</a> from the standard or user-defined palette.
+ </li>
+ <li>
+ <em>Toggle style</em>: Is used to define the style of the toggle. There are 3 different toggles:
+ <code>TWISTIE</code>,
+ <code>TREE NODE</code>,
+ <code>NONE</code> (see the second table below for illusrations of these styles).
+ </li>
+ </ul>
+ <p>The following tables illustrate the different
+ <em>Bar Style</em> and
+ <em>Toggle Style</em> available on groups:
+ </p>
+ <table class="table table-striped table-condensed">
+ <tr>
+ <td>
+ <img border="0" src="images/group-style-titlebar.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/group-style-short-titlebar.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/group-style-no-title.png"/>
+ </td>
+ </tr>
+ <tr>
+ <th>
+ <code>TITLE BAR</code>
+ </th>
+ <th>
+ <code>SHORT TITLE BAR</code>
+ </th>
+ <th>
+ <code>NO TITLE</code>
+ </th>
+ </tr>
+ </table>
+ <table class="table table-striped table-condensed">
+ <tr>
+ <td>
+ <img border="0" src="images/group-style-toggle-twistie.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/group-style-toggle-treenode.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/group-style-toggle-none.png"/>
+ </td>
+ </tr>
+ <tr>
+ <th>
+ <code>TWISTIE</code>
+ </th>
+ <th>
+ <code>TREE NODE</code>
+ </th>
+ <th>
+ <code>NONE</code>
+ </th>
+ </tr>
+ </table>
+ <h2 id="widgets">Widgets</h2>
+ <p>A widget is used to represent model elements in the properties view and, for most of them, to allow users to edit said elements. Widgets can appear directly inside a group, a
+ <a href="#dynamic_mappings">dynamic mapping</a> or inside a
+ <a href="#containers_and_layout">container</a>, in which case you can specify a specific
+ <a href="#containers_and_layout">layout</a> which will be used to graphically organize all the widgets inside the container.
+ </p>
+ <p>The definition of a widget follows the general rules described
+ <a href="#properties_view_description">above</a> to determine the semantic elements for which a widget should be created.
+ </p>
+ <p>Much like the other properties view elements, you can specify the widget’s
+ <a href="#label_expression">
+ <em>Label Expression</em>
+ </a>,
+ <a href="#help_expression">
+ <em>Help Expression</em>
+ </a>,
+ <a href="#is_enabled_expression">
+ <em>Is Enabled Expression</em>
+ </a>,
+ <a href="#styles">
+ <em>Styles</em>
+ </a>,
+ <a href="#conditional_styles">
+ <em>Conditional Styles</em>
+ </a>.
+ </p>
+ <h3 id="text">Text / Text area</h3>
+ <p>A
+ <em>Text</em> widget is used to represent a
+ <strong>single line text</strong> in a
+ <a href="#groups">group</a> or in a
+ <a href="#containers_and_layout">container</a>.
+ </p>
+ <p>
+ <img border="0" src="images/widget-text.png"/>
+ </p>
+ <p>A
+ <em>Text Area</em> is used to represent a
+ <strong>multiple lines text</strong> in a
+ <a href="#groups">group</a> or in a
+ <a href="#containers_and_layout">container</a>.
+ </p>
+ <p>
+ <img border="0" src="images/widget-textarea.png"/>
+ </p>
+ <p>The definition of a text/text area follows the general rules described
+ <a href="#widgets">above</a> to determine the semantic elements for which a text should be created. It is evaluated in the context of the semantic target element.
+ </p>
+ <p>For texts and text areas, you must define the
+ <em>Value Expression</em> which is used to compute the text displayed in the text field and should return a string. If the expression is not specified, the default value is an empty string. The expression is evaluated in the context of the semantic target element.
+ </p>
+ <p>For text areas, you must define the
+ <em>Line Count</em> which represents the height of the text area in number of lines.
+ </p>
+ <h4 id="edit_text">Text Edition</h4>
+ <p>To define the behavior of the text when a change occurs, you simply specify the behavior associated to the edition inside the
+ <em>Begin</em> element directly contained inside the widget, using all the standard
+ <a href="../general/Model_Operations.html">model operations</a>.
+ </p>
+ <p>The operations defined under the
+ <em>Begin</em> can use the
+ <code>newValue</code> variable which represents the value entered by the user (as a string). The root operation is executed in the context of the semantic target element.
+ </p>
+ <p>Sirius automatically invokes the edit operation when the focus leaves the widget. For single-line
+ <em>Text</em> widgets, the edit operation is also triggered when the user hits
+ <em>Enter</em>. Note that if an error occurs while executing the edit operation, the whole effect of the operation on the underlying model is cancelled, and an error is logged.
+ </p>
+ <h4 id="text_styles">Text/Text Area Styles</h4>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including
+ <a href="#conditional_styles">conditional styles</a> and
+ <a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets. This section only presents the aspects which are specific to texts.
+ </p>
+ <p>One of the responsibility of texts styles is to describe how text fields will be formated. The following properties are available :</p>
+ <ul>
+ <li>
+ <em>Font Name Expression</em>: Is used to compute the name of the font to use for the text field.
+ </li>
+ <li>
+ <em>Font Size Expression</em> : Indicates the font size to use in points.
+ </li>
+ <li>
+ <em>Background Color</em>: You can specify the background color of the text field using
+ <a href="#colors">color</a> sub-elements.
+ </li>
+ <li>
+ <em>Foreground Color</em>: You can specify the foreground color of the text field using
+ <a href="#colors">color</a> sub-elements.
+ </li>
+ <li>
+ <em>Font Format</em>: Is used to specify the font style attributes (Bold and/or Italic and/or Underline and/or Strike through).
+ </li>
+ </ul>
+ <p>Here are examples of text and text area widgets with some of their style attributes customized:</p>
+ <p>
+ <img alt="Text and TextArea widgets with customized style" title="Text and TextArea widgets with customized style" border="0" src="images/widget-text-styling.png"/>
+ </p>
+ <h3 id="button">Button</h3>
+ <p>A
+ <em>Button</em> is used to represent a
+ <strong>button</strong> in a
+ <a href="#groups">group</a> or in a
+ <a href="#containers_and_layout">container</a>, that can be used to trigger an arbitrary (configurable) operation on the model.
+ </p>
+ <p>
+ <img alt="Example of a button widget" title="Example of a button widget" border="0" src="images/widget-button.png"/>
+ </p>
+ <p>The definition of a button follows the general rules described
+ <a href="#widgets">above</a> to determine the semantic elements for which a button should be created. It is evaluated in the context of the semantic target element.
+ </p>
+ <p>For buttons, you must define the
+ <em>Button Label Expression</em> which is used to compute the label displayed on the button and should return a string. If the expression is not specified, the default value is the empty string. You can also specify an image with the
+ <em>Image expression</em>. An image can be used instead of a button label or along with it. The
+ <em>Image expression</em> should return a string with the structure PROJECT_NAME/IMAGE_PATH. For example: org.eclipse.sirius.sample.basicfamily.design/icons/Delete_16x16.gif
+ </p>
+ <h4 id="pushed_button">Behavior executed on click</h4>
+ <p>To define the behavior of the button when it is clicked, simply specify the behavior associated to the edition inside the
+ <em>Begin</em> element using all the standard
+ <a href="../general/Model_Operations.html">model operations</a>. The root operation is executed in the context of the semantic target element.
+ </p>
+ <h4 id="button_styles">Button Styles</h4>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including
+ <a href="#conditional_styles">conditional styles</a> and
+ <a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets.
+ </p>
+ <h3 id="label">Label</h3>
+ <p>A
+ <em>Label</em> is used to represent a
+ <strong>non editable text</strong> in a
+ <a href="#groups">group</a> or in a
+ <a href="#containers_and_layout">container</a>.
+ </p>
+ <p>Here is an example which shows two label widgets:</p>
+ <p>
+ <img alt="Examples of label widgets" title="Examples of label widgets" border="0" src="images/widget-label.png"/>
+ </p>
+ <p>The definition of a label follows the general rules described
+ <a href="#widgets">above</a> to determine the semantic elements for which a label should be created. It is evaluated in the context of the semantic target element.
+ </p>
+ <p>For labels, you must define the
+ <em>Value Expression</em> which is used to compute the text displayed in the description. The
+ <em>Value Expression</em> can return any kind of object but the result displayed will be the result of a call to
+ <code>Object.toString()</code>. If you want to customize how the result will be displayed, you can return a string in the value expression or use the
+ <em>Display Expression</em>. The
+ <em>Display Expression</em> will have access to the result of the
+ <em>Value Expression</em> using the variable
+ <code>value</code> and it should return a string. If the expression is not specified, the default value is the empty string.
+ </p>
+ <h4 id="label_actions">Widget Actions</h4>
+ <p>A
+ <em>Label</em> can optionally define one or more
+ <em>Widget Actions</em>, which are created as children element of the
+ <em>Label</em> element (
+ <em>New > Widget Action</em>). Each action has a
+ <em>Label Expression</em> and a behavior defined by
+ <a href="../general/Model_Operations.html">model operations</a> contained inside. If present, actions will be rendered as buttons on the right of the label itself. The button’s text is defined by the
+ <em>Label Expression</em>, and its behavior when pushed by the model operations. You can also specify an image with the
+ <em>Image expression</em>. An image can be used instead of a label or along with it. The
+ <em>Image expression</em> should return a string with the structure PROJECT_NAME/IMAGE_PATH. For example: org.eclipse.sirius.sample.basicfamily.design/icons/Delete_16x16.gif
+ </p>
+ <h4 id="label_styles">Label Styles</h4>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including
+ <a href="#conditional_styles">conditional styles</a> and
+ <a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets. This section only presents the aspects which are specific to texts.
+ </p>
+ <p>One of the responsibility of labels styles is to describe how descriptions will be formated. The following properties are available :</p>
+ <ul>
+ <li>
+ <em>Font Name Expression</em>: Is used to compute the name of the font to use for the description.
+ </li>
+ <li>
+ <em>Font Size Expression</em> : Indicates the font size to use in points.
+ </li>
+ <li>
+ <em>Background Color</em>: You can specify the background color of the description using
+ <a href="#colors">color</a> sub-elements.
+ </li>
+ <li>
+ <em>Foreground Color</em>: You can specify the foreground color of the description using
+ <a href="#colors">color</a> sub-elements.
+ </li>
+ <li>
+ <em>Font Format</em>: Is used to specify the font style attributes (Bold and/or Italic and/or Underline and/or Strike through).
+ </li>
+ </ul>
+ <p>
+ <img alt="Example of labels with customized style" title="Example of labels with customized style" border="0" src="images/widget-label-styling.png"/>
+ </p>
+ <h3 id="checkbox">Checkbox</h3>
+ <p>A
+ <em>Checkbox</em> is used to represent a
+ <strong>checkbox</strong> in a
+ <a href="#groups">group</a> or in a
+ <a href="#containers_and_layout">container</a>.
+ </p>
+ <p>
+ <img alt="Examples of checkbox widgets" title="Examples of checkbox widgets" border="0" src="images/widget-checkbox.png"/>
+ </p>
+ <p>The definition of a checkbox follows the general rules described
+ <a href="#widgets">above</a> to determine the semantic elements for which a checkbox should be created. It is evaluated in the context of the semantic target element.
+ </p>
+ <p>For checkboxes, you must define the
+ <em>Value Expression</em> which is used to compute the checked/unchecked state of the checkbox and so should return a boolean (return
+ <em>true</em> to display the checkbox checked).
+ </p>
+ <h4 id="checkbox_change_value">Change value</h4>
+ <p>To define the behavior of the checkbox when the user clicks on it, you simply specify the behavior associated to the edition inside the
+ <em>Begin</em> element using all the standard
+ <a href="../general/Model_Operations.html">model operations</a>.
+ </p>
+ <p>The operations defined under the
+ <em>Begin</em> can use the
+ <code>newValue</code> variable which represents the value set by the user as a boolean; it will be
+ <em>true</em> if the checkbox was unchecked before, and the user clicked on it to check it,
+ <em>false</em> otherwise. Note that if an error occurs while executing the edit operation, the whole effect of the operation on the underlying model is canelled, and an error is logged.
+ </p>
+ <h4 id="checkbox_styles">Checkbox Styles</h4>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including
+ <a href="#conditional_styles">conditional styles</a> and
+ <a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets.
+ </p>
+ <h3 id="select">Select</h3>
+ <p>A
+ <em>Select</em> is used to represent a
+ <strong>combo box</strong> in a
+ <a href="#groups">group</a> or in a
+ <a href="#containers_and_layout">container</a>.
+ </p>
+ <p>
+ <img alt="Example of a select widget" title="Example of a select widget" border="0" src="images/widget-select.png"/>
+ </p>
+ <p>The definition of a select follows the general rules described
+ <a href="#widgets">above</a> to determine the semantic elements for which a select should be created. It is evaluated in the context of the semantic target element.
+ </p>
+ <p>For selects, you must define :</p>
+ <ul>
+ <li>the
+ <em>Candidates Expression</em> which is used to compute the candidates available in the combo and should return a list of elements from which the user can select the select’s value.
+ </li>
+ <li>the
+ <em>Candidate Display Expression</em> which is used to compute the label displayed for each possible candidate in the combo and so should return a string. The
+ <em>Candidate Display Expression</em> can use the
+ <code>candidate</code> variable which represents the element currently evaluated.
+ </li>
+ <li>the
+ <em>Value Expression</em> which is used to compute the element selected in the combo and should return an object, which should be an element of the collection returned by
+ <em>Candidates Expression</em>.
+ </li>
+ </ul>
+ <h4 id="select_change_value">Change value</h4>
+ <p>To define the behavior of the
+ <em>Select</em> when the user selects a different element, you simply specify the behavior associated to the edition inside the
+ <em>Begin</em> element using all the standard
+ <a href="../general/Model_Operations.html">model operations</a>.
+ </p>
+ <p>The expressions defined under the
+ <em>Begin</em> can use the
+ <code>newValue</code> variable which represents the value selected by the user. Note that if an error occurs while executing the edit operation, the whole effect of the operation on the underlying model is cancelled, and an error is logged.
+ </p>
+ <h4 id="select_styles">Select Styles</h4>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including
+ <a href="#conditional_styles">conditional styles</a> and
+ <a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets.
+ </p>
+ <h3 id="radio_group">Radio Group</h3>
+ <p>A
+ <em>Radio</em> is used to represent a
+ <strong>radio group</strong> in a
+ <a href="#groups">group</a> or in a
+ <a href="#containers_and_layout">container</a>.
+ </p>
+ <p>
+ <img alt="Example of a radio group widget" title="Example of a radio group widget" border="0" src="images/widget-radio.png"/>
+ </p>
+ <p>The definition of a radio group follows the general rules described
+ <a href="#widgets">above</a> to determine the semantic elements for which a radio group should be created. It is evaluated in the context of the semantic target element.
+ </p>
+ <p>For radio groups, you must define :</p>
+ <ul>
+ <li>the
+ <em>Candidates Expression</em> which is used to compute the candidates available in the radio group and should return a list of elements from which the user can select the radio group’s value.
+ </li>
+ <li>the
+ <em>Candidate Display Expression</em> which is used to compute the label displayed for each possible candidate in the radio group and so should return a string. The
+ <em>Candidate Display Expression</em> can use the
+ <code>candidate</code> variable which represents the element currently evaluated.
+ </li>
+ <li>the
+ <em>Value Expression</em> which is used to compute the element selected in the radio group and should return an object, which should be an element of the collection returned by
+ <em>Candidates Expression</em>.
+ </li>
+ </ul>
+ <h4 id="radio_change_value">Change value</h4>
+ <p>To define the behavior of the radio group when the selection changes, you simply specify the behavior associated to the edition inside the
+ <em>Begin</em> element using all the standard
+ <a href="../general/Model_Operations.html">model operations</a>.
+ </p>
+ <p>The expressions defined under the
+ <em>Begin</em> can use the
+ <code>newValue</code> variable which represents the value selected by the user. Note that if an error occurs while executing the edit operation, the whole effect of the operation on the underlying model is cancelled, and an error is logged.
+ </p>
+ <h4 id="radio_styles">Radio Styles</h4>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including
+ <a href="#conditional_styles">conditional styles</a> and
+ <a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets.
+ </p>
+ <h3 id="hyperlink">Hyperlink</h3>
+ <p>A
+ <em>Hyperlink</em> is used to represent an
+ <strong>hyperlink</strong> in a
+ <a href="#groups">group</a> or in a
+ <a href="#containers_and_layout">container</a>.
+ </p>
+ <p>
+ <img alt="Example of an hyperlink widget" title="Example of an hyperlink widget" border="0" src="images/widget-hyperlink.png"/>
+ </p>
+ <p>The definition of an hyperlink follows the general rules described
+ <a href="#widgets">above</a> to determine the semantic elements for which an hyperlink should be created. It is evaluated in the context of the semantic target element.
+ </p>
+ <p>For hyperlinks, you must define the
+ <em>Value Expression</em> which is used to compute the hyperlink displayed. The
+ <em>Value Expression</em> can return any kind of object but the result displayed will be the result of a call to
+ <em>java.lang.Object#toString()</em>. If you want to customize how the result will be displayed, you can return a String in the value expression or use the
+ <em>Display Expression</em>. The
+ <em>Display Expression</em> will have access to the result of the
+ <em>Value Expression</em> using the variable named
+ <code>value</code> and it should return a String.
+ </p>
+ <h4 id="hyperlink_click_on_value">Behavior executed on click</h4>
+ <p>To define the behavior of the hyperlink when it is clicked, you simply specify the behavior associated to the edition inside the
+ <em>Begin</em> element using all the standard
+ <a href="../general/Model_Operations.html">model operations</a>.
+ </p>
+ <h4 id="hyperlink_actions">Widget Actions</h4>
+ <p>A
+ <em>Hyperlink</em> can optionally define one or more
+ <em>Widget Actions</em>, which are created as children element of the
+ <em>Hyperlink</em> element (
+ <em>New > Widget Action</em>). Each action has a
+ <em>Label Expression</em> and a behavior defined by
+ <a href="../general/Model_Operations.html">model operations</a> contained inside. If present, actions will be rendered as buttons on the right of the label itself. The button’s text is defined by the
+ <em>Label Expression</em>, and its behavior when pushed by the model operations. You can also specify an image with the
+ <em>Image expression</em>. An image can be used instead of a button label or along with it. The
+ <em>Image expression</em> should return a string with the structure PROJECT_NAME/IMAGE_PATH. For example: org.eclipse.sirius.sample.basicfamily.design/icons/Delete_16x16.gif
+ </p>
+ <h4 id="hyperlink_styles">Hyperlink Styles</h4>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including
+ <a href="#conditional_styles">conditional styles</a> and
+ <a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets. This section only presents the aspects which are specific to hyperlinks.
+ </p>
+ <p>One of the responsibility of hyperlinks styles is to describe how hyperlinks will be formated. The following properties are available :</p>
+ <ul>
+ <li>
+ <em>Font Name Expression</em>: Is used to compute the name of the font to use for the text field.
+ </li>
+ <li>
+ <em>Font Size Expression</em> : Indicates the font size to use in points.
+ </li>
+ <li>
+ <em>Background Color</em>: You can specify the background color of the text field using
+ <a href="#colors">color</a> sub-elements.
+ </li>
+ <li>
+ <em>Font Format</em>: Is used to specify the font style attributes (Bold and/or Italic and/or Strike through).
+ </li>
+ </ul>
+ <h3 id="reference">Reference</h3>
+ <p>A
+ <em>Reference</em> is used to represent the value of a reference in the model.
+ </p>
+ <p>The configuration of the
+ <em>Reference</em> widget is minimal. Beside the standard properties available on all widgets like
+ <em>Label Expression</em>,
+ <em>Help Expression</em> and
+ <em>Is Enabled Expression</em>, you only need to specify:
+ </p>
+ <ul>
+ <li>
+ <em>Reference Owner Expression</em>: optional, defaults to
+ <code>var:self</code>. If specified, the reference to display will be looked on the element returned by the expression instead of the current one.
+ </li>
+ <li>
+ <em>Reference Name Expression</em>: this should return a string which designates the name of the
+ <em>EReference</em> to display. It can be a fixed string or a computed expression.
+ </li>
+ </ul>
+ <p>The
+ <em>Reference</em> widget’s appearance will depend whether the reference to display is single-valued or multi-valued:
+ </p>
+ <p>
+ <img alt="A Reference widget displaying a single-valued reference" title="A Reference widget displaying a single-valued reference" border="0" src="images/reference-single-value.png"/>
+ </p>
+ <p>
+ <img alt="A Reference widget displaying a multi--valued reference" title="A Reference widget displaying a multi--valued reference" border="0" src="images/reference-multiple-value.png"/>
+ </p>
+ <p>As mentioned above, the configurability of the
+ <em>Reference</em> widget is minimal, it determines all of its behavior using the standard EMF features:
+ </p>
+ <ul>
+ <li>the value of the reference is obtained reflectively using
+ <code>eGet</code>.
+ </li>
+ <li>the textual representation and icon of the value(s) of the reference are determined automatically using the corresponding
+ <code>IItemLabelProvider</code>.
+ </li>
+ <li>the behavior of the action buttons is hard-coded to perform the standard operation when selecting a diffrente value (from an existing element in the model), creating a new instance to set as the value, removing an element, or moving up/down the elements in a multi-valued reference.</li>
+ </ul>
+ <p>If you need more specific behavior, you need to use either an
+ <em>Hyperlink</em> (for single values) or a
+ <em>List</em> widget (for multiple values) with custom actions implementing the required behavior.
+ </p>
+ <p>In a similar fashion as the hyperlink and the list widgets, it is possible to define an
+ <em>Initial Operation</em> on the reference widget in order to execute some model operations when the user will click on the widget. If an
+ <em>Initial Operation</em> is configured, the single-valued version of the widget will use a hyperlink instead of a regular label.
+ </p>
+ <h4 id="reference_styles">Reference Styles</h4>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including
+ <a href="#conditional_styles">conditional styles</a> and
+ <a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets.
+ </p>
+ <h3 id="list">List</h3>
+ <p>A
+ <em>List</em> is used to represent a
+ <strong>list with buttons</strong> in a
+ <a href="#groups">group</a> or in a
+ <a href="#containers_and_layout">container</a>.
+ </p>
+ <p>Depending on the parameters configuration the list widget will be represented thanks to a list and multiple buttons when
+ <a href="#list_actions">
+ <em>Widget Actions</em>
+ </a> are defined.
+ </p>
+ <p>The definition of a list follows the general rules described
+ <a href="#widgets">above</a> to determine the semantic elements for which a list should be created. It is evaluated in the context of the semantic target element.
+ </p>
+ <p>For lists, you must define:</p>
+ <ul>
+ <li>the
+ <em>Value Expression</em> which is used to compute the element to display and should return an object.
+ </li>
+ <li>the
+ <em>Display Expression</em> which is used to compute the text displayed in the text field and should return a string. It is evaluated in the context of the semantic target element and has access to the variable
+ <code>value</code> which corresponds to the element to display.
+ </li>
+ <li>the
+ <a href="#list_actions">
+ <em>Widget Actions</em>
+ </a> are used to associate some buttons to the text field.
+ </li>
+ </ul>
+ <h4 id="list_on_click_operation">Behavior executed on click</h4>
+ <p>To define the behavior, you simply specify the behavior associated to the edition inside the
+ <em>Begin</em> element using all the standard
+ <a href="../general/Model_Operations.html">model operations</a>. A variable named
+ <code>onClickEventKind</code> is available to determine if the operation has been triggered by a single click or double click. In case of a single click, the variable has the value “SINGLE_CLICK” and “DOUBLE_CLICK” in case of a double click.
+ </p>
+ <p>The expressions defined under the
+ <em>Begin</em> can use the
+ <code>selection</code> variable which represents the values selected by the user. This variable will contain the list of the values selected.
+ </p>
+ <h4 id="list_actions">Widget actions</h4>
+ <p>A list can contain
+ <em>actions</em> which represent
+ <strong>buttons</strong> associated to the list field.
+ </p>
+ <p>For actions, you must define the
+ <em>Label Expression</em> which is used to compute the label displayed on the button and should return a string. If the expression is not specified, the default value is equal to
+ <code>...</code>. You can also specify an image with the
+ <em>Image expression</em>. An image can be used instead of a button label or along with it. The
+ <em>Image expression</em> should return a string with the structure PROJECT_NAME/IMAGE_PATH. For example: org.eclipse.sirius.sample.basicfamily.design/icons/Delete_16x16.gif
+ </p>
+ <h4 id="list_action_pushed_button">Action Pushed Button</h4>
+ <p>To define the behavior of the button when is pushed, you simply specify the behavior associated to the edition inside the
+ <em>Begin</em> element using all the standard
+ <a href="../general/Model_Operations.html">model operations</a>.
+ </p>
+ <p>The expressions defined under the
+ <em>Begin</em> can use the
+ <code>selection</code> variable which represents the values selected by the user in the list field. Note that
+ <code>selection</code> is always a collection, even if only a single element is currently selected.
+ </p>
+ <h4 id="list_styles">List Styles</h4>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including
+ <a href="#conditional_styles">conditional styles</a> and
+ <a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets.
+ </p>
+ <h3 id="basic_custom_widgets">Basic Custom Widgets</h3>
+ <p>A
+ <em>Custom Description</em> is used when none of the predefined styles correspond to your need. Custom widgets are implemented in Java and use the
+ <code>org.eclipse.eef.ide.ui.eefLifecycleManagerProvider</code> extension point.
+ </p>
+ <p>The definition of a custom widget follows the general rules described
+ <a href="#widgets">above</a> to determine the semantic elements for which a custom widget should be created. It is evaluated in the context of the semantic target element.
+ </p>
+ <p>For custom widgets, the
+ <em>Identifier</em> is mandatory. It is used to find the widget contributed with the extension point.
+ </p>
+ <p>See
+ <a href="../../developer/extensions-properties_provide_custom_widget_basic.html">the reference documentation</a> for how to actually implement your own basic custom widgets.
+ </p>
+ <h5 id="basic_custom_widgets_expression">Custom Expression/Operation</h5>
+ <p>When you define a custom widget, it is possible to define some custom expression or operation which will be used by the custom widget implementation.
+ <br/>In this case, the
+ <em>Identifier</em> is mandatory. It would be used in the Java code to find the expression/operation contributed with the VSM.
+ </p>
+ <h5 id="basic_custom_widgets_styles">Custom Styles</h5>
+ <p>See the
+ <a href="#styling">styles</a> section for a general presentation of how styles are defined, including
+ <a href="#conditional_styles">conditional styles</a> and
+ <a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets. This section only presents the aspects which are specific to texts.
+ </p>
+ <h3 id="advanced_custom_widgets">Advanced Custom Widgets</h3>
+ <p>Basic custom widgets need to be configured using very generic
+ <em>Custom Expression/Operation</em>, which makes them different and harder to use than the standard ones. Any configuration property which would be directly accessible in the VSM editor’s property sheet on a standard widget will need a specific
+ <em>Custom Expression</em> with the exact expected identifier.
+ </p>
+ <p>It is possible to improve custom widgets to be better integrated with the VSM editor, to the point that their configuration looks and feels like for any of the standard ones. For the specifier point of view, the configuration of these widgets follows the same principles as for the default ones.</p>
+ <p>See
+ <a href="../../developer/extensions-properties_provide_custom_widget_advanced.html">the reference documentation</a> for how to actually implement your own advanced custom widgets.
+ </p>
+ <h2 id="dynamic_mappings">Dynamic Mappings</h2>
+ <p>Dynamic mappings are used for advanced scenarios where the set of widgets to display can not be known statically, but instead must be computed at runtime. A dynamic mapping contains conditional widgets definition, each of which may be instantiated zero or multiple times at runtime.</p>
+ <p>A
+ <em>Dynamic Mapping For</em> can appear directly inside a group description, or inside a
+ <a href="#containers_and_layout">container</a>, in which case you can specify a specific
+ <a href="#containers_and_layout">layout</a>. You must specify an
+ <em>Iterable Expression</em> which computes a list of elements to iterate over. The
+ <em>Iterator</em> property must also be defined and corresponds to the name of the iteration variable that will be accessible inside the
+ <em>For</em>. Inside the
+ <em>Dynamic Mapping For</em> you can create any number of
+ <em>Dynamic Mapping If</em>, which defines a
+ <em>Predicate Expression</em> and can contain
+ <strong>one widget</strong>.
+ </p>
+ <p>At runtime, for a given input element selected by the user, Sirius will evaluate the
+ <em>iterable expression</em>, and then for each of the elements returned will instanciate the widgets defined inside
+ <em>Dynamic Mapping If</em> whose predicate holds true.
+ </p>
+ <p>The dynamic mapping mechanism is the one used by Sirius to provide by default properties view even if you do not specify any
+ <em>Properties View Description</em> in your VSM.
+ <br/>If we take one of the default rules implemented by Sirius we have:
+ </p>
+ <ul>
+ <li>a
+ <em>Dynamic Mapping For</em> defining as
+ <em>Iterable Expression</em> :
+ <code>aql:self.eClass().eAllStructuralFeatures</code> which means get all the structural features available for the current eClass.
+ </li>
+ <li>an
+ <em>Iterator</em> set to
+ <code>eStructuralFeature</code>.
+ <ul>
+ <li>a
+ <em>Dynamic Mapping If</em> with the
+ <em>Predicate Expression</em> equals to
+ <code>aql:eStructuralFeature.eType.instanceTypeName = 'java.lang.String'</code> which means that we just keep the structural features serialized as a String. Notice that in the predicate expression we use the variable
+ <code>eStructuralFeature</code> which was defined as the
+ <em>Iterator</em>.
+ <ul>
+ <li>in this case we will represent the structural feature with a
+ <em>Text widget</em> for which we set:
+ <ul>
+ <li>
+ <em>Label expression</em>:
+ <code>aql:eStructuralFeature.name.toUpperFirst() + ':'</code> which means get the name of the structural feature, capitalize the first letter and add
+ <code>:</code> at the end.
+ </li>
+ <li>
+ <em>Value Expression</em>:
+ <code>aql:self.eGet(eStructuralFeature.name)</code> which means get the value associated to the given structural feature.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>Thanks to this mechanism we defined that all the
+ <code>String</code> elements in our metamodel will be represented with a text field.
+ </p>
+ <p>Some
+ <em>Iterable Expression</em> may return a result which can change depending on the structure of the model, contrary to the example above where the
+ <em>Iterable Expression</em>
+ <code>aql:self.eClass().eAllStructuralFeatures</code> will only use the structure of the metamodel. If an
+ <em>Iterable Expression</em> leverages the state of the model, it may be required to refresh the user interface when the
+ <em>Iterable Expression</em> is executed, as a result for such situation, you can set the boolean
+ <em>Force Refresh</em> to true on the
+ <em>Dynamic Mapping For</em> to indicate that the presence of dynamic mapping should trigger a full refresh.
+ </p>
+ <h2 id="containers_and_layout">Containers and Layout</h2>
+ <p>Sirius provides a default algorithm to perform an automatic layout of all the controls in a properties view. If the default algorithm does not fit your needs, you can specify some parameters for alternate layouts directly inside the VSM. To do this you must first create a
+ <em>Container</em> which will contains all the widgets to which the layout will apply, and then create and configure the layout to be used by the container to organize its children widgets:
+ </p>
+ <p id="fill_layout">
+ <em>Fill layout</em> can organize elements inside the container either horizontally or vertically (configurable on the
+ <em>Fill layout</em> element).
+ </p>
+ <p id="grid_layout">
+ <em>Grid layout</em> can organize elements using a fixed number of column (configurable on the
+ <em>Grid layout</em> element), which can optionally be made to all have the same width.
+ </p>
+ <h2 id="styling">Styling</h2>
+ <p>Styles define the graphical appearance of properties view elements. Sirius supports a rich set of possible styles, including
+ <a href="#conditional_styles">conditional styles</a> which can dynamically change depending on the current state of the underlying model elements. If no style is defined a default style is applied by Sirius.
+ <br/>It is possible to re-define the default style by creating a style under the properties view element description.
+ </p>
+ <h3 id="widgets_styles">Widgets styles</h3>
+ <p>One of the responsibility of widgets styles is to describe how labels will be formated. The following properties are available :</p>
+ <ul>
+ <li>
+ <em>Label Font Name Expression</em>: Is used to compute the name of the font to use for the label.
+ </li>
+ <li>
+ <em>Label Font Size Expression</em> : Indicates the font size to use in points.
+ </li>
+ <li>
+ <em>Label Background Color</em>: You can specify the background color of the label using
+ <a href="#colors">color</a> sub-elements.
+ </li>
+ <li>
+ <em>Label Foreground Color</em>: You can specify the foreground color of the label using
+ <a href="#colors">color</a> sub-elements.
+ </li>
+ <li>
+ <em>Label Font Format</em>: Is used to specify the font style attributes (Bold and/or Italic and/or Underline and/or Strike through).
+ </li>
+ </ul>
+ <p>
+ <img alt="Examples of the style customizations possible on labels" title="Examples of the style customizations possible on labels" border="0" src="images/label-styles.png"/>
+ </p>
+ <h3 id="colors">Colors</h3>
+ <p>Whenever you have to specify colors for a style, you can use either one of the pre-defined system colors or one which you have defined yourself in a
+ <em>Users Color Palette</em>. See
+ <a href="../general/Colors.html">the general section on colors</a> for more details.
+ </p>
+ <h3 id="conditional_styles">Conditional Styles</h3>
+ <p>Conditional styles make it possible to support different graphical aspects for a single properties view element. The actual style used to render an element is determined dynamically depending on the current state of the models elements.</p>
+ <p>To use conditional styling, you must add one or several conditional styles. Each conditional style is associated to a condition specified as a predicate. If there are conditional styles on a properties view element, their conditions are tested in their order of appearance in the description. The first one for which the condition is true is selected. If none of the conditional styles condition is true, the default style is used instead.</p>
+ <h2 id="validation_rules">Validation rules</h2>
+ <p>There are three kind of validation rules that can be specified. The main difference between the various kind of validation rules available is the location of the validation messages (on a page, a group or a widget). All the validation rules can contains audits used to determine if the validation rule has been broken thanks to an
+ <code>auditExpression</code> which should return a boolean indicating if the validation of the rule is a success. The validation rules can also contain fixes in order to fix the issue found. Those validation fixes have a name and a fix expression which will be executed once the end user selects a quick fix. The fix expression does not have to return anything. All of those expressions have access to the variables
+ <code>self</code>, the result of the semantic candidate expression of the page or group and
+ <code>input</code> the input of the view.
+ </p>
+ <h3 id="page_semantic_validation_rule">Page semantic validation rule</h3>
+ <p>The page semantic validation rule is used to define a validation rule linked to a page.</p>
+ <h3 id="group_semantic_validation_rule">Group semantic validation rule</h3>
+ <p>The group semantic validation rule is used to define a validation rule linked to a group.</p>
+ <h3 id="group_property_validation_rule">Group property validation rule</h3>
+ <p>The group property validation rule is used to define a validation rule linked to a specific widget.</p>
+ <h2 id="extensibility_features">Extensibility Features</h2>
+ <p>Sirius has specific support for extending and overriding properties view descriptions without modifying the original one. The purpose is to be able to reuse or modify a part of a properties view. Its exits two different concepts to customize a properties view description: the
+ <a href="#extends">extension</a> and the
+ <a href="#overrides">overriding</a>.
+ </p>
+ <p>Note that both mechanisms can be used to customize properties view descriptions which are defined in other projects. To allow references from you VSM to elements defined in other modelers, you must first
+ <em>load</em> them in your VSM editor, or you will not see the elements you need as targets for extension/overriding. To load an external VSM, right-click anywhere inside the VSM editor, and select
+ <em>Load Resource...</em>. A dialog will appear asking for the URI of the model to load (the
+ <code>.odesign</code> file you want to refer to). Several forms of URIs are possible:
+ </p>
+ <ul>
+ <li>If you don’t have the customized plug-in in your workspace, you must currently enter the URI manually, using the syntax
+ <code>platform:/plugin/<projectName>/<path>/<to>/<example>.odesign</code>, for example
+ <code>platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign</code>.
+ </li>
+ <li>If the VSM you want to extend is already present in your development workspace, you can use the
+ <em>Browse Workspace...</em> button to select it.
+ </li>
+ </ul>
+ <p>Note that in the later case (VSM selected from the workspace), if you want to test your modeler directly from your development environment, in your test session make sure to select the extended VSM
+ <strong>from the workspace</strong>, as this is the one your own VSM refers to, and not the one which may also be avaible from your plug-ins. In the viewpoint selection dialog, the version from the workspace will have a small folder decorator in addition to the normal viewpoint icon. Once everything is deployed as plug-ins, which is the nominal case for end-users, this distinction disappears and everything should work fine.
+ </p>
+ <p>Note also that if you define in your project
+ <em>A</em> customizations for properties views defintions defined in another project
+ <em>B</em>, you should make sure to declare the dependency in project
+ <em>A</em>'s
+ <code>MANIFEST.MF</code>, otherwise it will be possible for users to install
+ <em>A</em> without having
+ <em>B</em> available, which will prevent
+ <em>A</em> from working correctly.
+ </p>
+ <h3 id="extends">Extends</h3>
+ <p>A
+ <a href="#pages">page</a> can extend another page defined somewhere else (in another
+ <a href="#categories">category</a> or in another properties view description). This mechanism is used to
+ <em>specialize</em> (modify or re-use) an existing page. This feature is available for the
+ <a href="#pages">pages</a>, the
+ <a href="#groups">groups</a>, the
+ <a href="#containers_and_layout">containers</a>, the
+ <a href="#dynamic_mappings">dynamic mappings</a> and the
+ <a href="#widgets">widgets</a>.
+ </p>
+ <p>The
+ <code>Extend</code> tab is used to specify:
+ </p>
+ <p id="extends">
+ <strong>Extends.</strong> Is used to specify the inherited element thanks to a combo box it is possible to select an existing element. In the tree editor, the inheritance is visible as the element is named as following :
+ <em>Page A</em>
+ <strong>extends</strong>
+ <em>Page B</em>. Pay attention, the current specification editor allows to select the currently defined element, this will lead to an infinite loop at runtime.
+ <br/>By default, the values of the
+ <code>General</code> tab fields are set with the values coming from the extended element if these fields are not set in the extending element. If one of these attributes is edited in the extending element, then it
+ <strong>overrides</strong> the inherited value. The same behavior is applied for mono valued containment elements. For example, if a
+ <em>Group A</em> defines a
+ <em>Style A</em> and extends a
+ <em>Group B</em> with a
+ <em>Style B</em>, the style used to render the
+ <em>Group A</em> is the one defined under the
+ <em>Group A</em>, i.e
+ <em>Style A</em> and not the one of the
+ <em>Group B</em>.
+ <br/>If the specifier defines in the extending page
+ <code>General</code> tab:
+ </p>
+ <ul>
+ <li>
+ <code>Label Expression</code>,
+ <code>Domain Class</code>,
+ <code>Semantic Candidate Expression</code> or
+ <code>Precondition Expression</code>, these values will
+ <strong>override</strong> the values defined in the extended description. It is worth noting that the expressions are evaluated in the context of the currently extending element, exactly as if you have defined the expressions from the
+ <code>General</code> tab.
+ </li>
+ <li>
+ <code>Groups</code> will
+ <strong>be aggregated</strong> to the groups defined by the referenced
+ <code>Page</code>.
+ </li>
+ <li>
+ <code>Page Validations</code> will
+ <strong>be aggregated</strong> to the validations defined by the referenced
+ <code>Page Description</code>.
+ </li>
+ <li>In the case of a containment, such as a
+ <code>Text</code> contained by a
+ <code>Group</code>, the contained elements are inherited by the extending description.
+ </li>
+ </ul>
+ <p id="filters">
+ <strong>Filter Expressions.</strong> Different filters exist depending on the element kind. These filters are used to
+ <strong>filter</strong> which inherited elements are visible. The
+ <em>Filter expression</em> is evaluated in the context of the semantic element and should return a boolean: true, the inherited element is visible, false it is filtered.
+ <br/>If the expression is not specified, all the inherited elements will be visible.
+ <br/>For each
+ <em>Filter expression</em>, a variable is available which represents the element which could be filtered. It is possible to filter all the inherited elements by just returning
+ <code>false</code> all the time. In this case, the elements defined under the current description
+ <strong>overrides</strong> the elements defined in the extended description.
+ <br/>For example if a
+ <em>Page A</em> extends another
+ <em>Page B</em>, the
+ <code>Extends</code> tab allows to define:
+ </p>
+ <ul>
+ <li>The
+ <code>Filter Groups Expression</code> is used to
+ <strong>filter</strong> which inherited groups are visible under the page. The
+ <code>groupDescription</code> variable can be used to check if a group must be filtered or not.
+ </li>
+ <li>The
+ <code>Filter Validation Rules Expression</code> is used to
+ <strong>filter</strong> which inherited validation rules are used under the page. The
+ <code>validationRuleDescription</code> variable can be used to check if a rule must be filtered or not.
+ </li>
+ </ul>
+ <p>Following some examples of the extension mechanism usage are detailed:</p>
+ <ul>
+ <li>
+ <strong>Reuse widgets</strong>: In this example we want to specify the properties view of a Class and an interface both are defining a name attribute. A
+ <em>Class Name</em> text widget is defined to represent the
+ <em>Name</em> attribute of a
+ <em>Class</em> in the properties view. This widget defines in the
+ <em>General</em> tab:
+ <ul>
+ <li>The
+ <em>Label Expression</em> equals to
+ <code>Name:</code>,
+ </li>
+ <li>The
+ <em>Help Expression</em> equals to
+ <code>The name of the element</code>,
+ </li>
+ <li>The
+ <em>Value Expression</em> equals to
+ <code>aql:self.name</code>,
+ </li>
+ <li>The change value operation sets the
+ <code>name</code> feature with the new entered value.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ <img alt="Example of the inherited text widget definition" title="Example of the inherited text widget definition" border="0" src="images/reuse-widget-general-tab.png"/>
+ </p>
+ <p>An interface has also a
+ <em>Name</em> attribute which must be shown in its properties view, then to define the properties of the interface, we just create a new text widget which extends the
+ <code>Class Name Widget</code>.
+ <br/>No other fields and no change value operation need to be set for the
+ <code>Interface Name Widget</code>, all the values will be inherited from the
+ <code>Class Name Widget</code>.
+ </p>
+ <p>
+ <img alt="Example of the extension definition" title="Example of the extension definition" border="0" src="images/reuse-widget-extends-tab.png"/>
+ </p>
+ <p>
+ <img alt="Example of the reuse of a widget definition" title="Example of the reuse of a widget definition" border="0" src="images/reuse-widget-general2-tab.png"/>
+ </p>
+ <ul>
+ <li>
+ <strong>Reuse pages</strong>: Another usage of the extension mechanism is with combination of
+ <a href="../general/Model_Operations.html#dialogandwizard">the dialogs and the wizards</a>. The purpose is to provide the edition of the properties element from a dialog, the same properties should be available in the dialog and in the properties view. A a property view is defined for all the elements of a metamodel. Then a new tool is defined which opens a dialog when a node mapping is double-clicked from a diagram. This dialog shows the same properties than the ones represented when the element is selected from the diagram. To do this, the dialog defines a page which extends the one defined in the properties view definition.
+ </li>
+ </ul>
+ <p>
+ <img alt="Example of the reuse of a page definition in a dialog" title="Example of the reuse of a page definition in a dialog" border="0" src="images/reuse-page.png"/>
+ </p>
+ <ul>
+ <li>
+ <strong>Customize default rules</strong>: A final example of the extension mechanism is to customize the
+ <a href="#default_rules">default rules</a> provided by Sirius. For this use case, the purpose is to override the content of the default rules in order to rename the tab label from
+ <em>Main</em> to
+ <em>General</em>. It is possible to extends the default rules thanks to the
+ <em>New Properties> Extend Default Properties View</em> menu available from the top-level element of the VSM model. Automatically, this creates a new page which extends the default rules. It is then possible to override the
+ <em>Label Expression</em> of the default rules page to set the expected label
+ <em>General</em> instead of the default one which is
+ <em>Main</em>
+ </li>
+ </ul>
+ <p>
+ <img alt="Example of the extension of default rules" title="Example of the extension of default rules" border="0" src="images/customize-default-rules-extends.png"/>
+ </p>
+ <p>
+ <img alt="Example of the customization of default rules" title="Example of the customization of default rules" border="0" src="images/customize-default-rules-general.png"/>
+ </p>
+ <h3 id="overrides">Overrides</h3>
+ <p>The main difference between the
+ <a href="#extends">extend</a> mechanism and the
+ <a href="#overrides">overrides</a> mechanism is that the extend mechanism allows to reuse some parts of a properties view specification on another hand the
+ <a href="#overrides">override</a> mechanism allows to replace some parts of a properties view specification.
+ <br/>This means that when you define an override description it will completely replace the referenced description, this must be used when it is not possible for the specifier to modify the original description.
+ </p>
+ <p>It is possible to create an override element under a
+ <a href="#categories">category</a> from the
+ <em>New Override</em> menu.
+ </p>
+ <p>A page override can extend another page defined somewhere else (in another
+ <a href="#categories">category</a> or in another properties view description). This mechanism is used to
+ <em>replace</em> an existing page. It is possible to define :
+ </p>
+ <ul>
+ <li>page override: a
+ <em>Page Override</em> is a page and so defines the same features as a
+ <a href="#pages">page</a>,
+ </li>
+ <li>group override: a
+ <em>Group Override</em> is a group and so defines the same features as a
+ <a href="#groups">group</a>,
+ </li>
+ <li>container override: a
+ <em>Container Override</em> is a container and so defines the same features as a
+ <a href="#containers_and_layout">container</a>,
+ </li>
+ <li>dynamic mapping override: a
+ <em>Dynamic Mapping Override</em> is a dynamic mapping and so defines the same features as a
+ <a href="#dynamic_mappings">dynamic mapping</a>,
+ </li>
+ <li>widget override: a
+ <em>Widget Override</em> is a widget and so defines the same features as a
+ <a href="#widgets">widget</a>.
+ </li>
+ </ul>
+ <p>The
+ <code>Override</code> tab is used to specify:
+ </p>
+ <p id="override">
+ <strong>Override.</strong> Is used to specify the overridden element thanks to a combo box it is possible to select an existing element. In the tree editor, the inheritance is visible as the element is named as following :
+ <em>Page A</em>
+ <strong>extends</strong>
+ <em>Page B</em>. Pay attention, the current specification editor allows to select the currently defined element, this will lead to an infinite loop at runtime.
+ <br/>By default, the values of the
+ <code>General</code> tab fields are set with the values coming from the overridden element if these fields are not set in the extending element. If one of these attributes is edited in the extending element, then it
+ <strong>overrides</strong> the inherited value. The same behavior is applied for mono valued containment elements. For example, if a
+ <em>Group A</em> defines a
+ <em>Style A</em> and extends a
+ <em>Group B</em> with a
+ <em>Style B</em>, the style used to render the
+ <em>Group A</em> is the one defined under the
+ <em>Group A</em>, i.e
+ <em>Style A</em> and not the one of the
+ <em>Group B</em>.
+ <br/>If the specifier defines in the extending page
+ <code>General</code> tab:
+ </p>
+ <ul>
+ <li>
+ <code>Label Expression</code>,
+ <code>Domain Class</code>,
+ <code>Semantic Candidate Expression</code> or
+ <code>Precondition Expression</code>, these values will
+ <strong>override</strong> the values defined in the extended description. It is worth noting that the expressions are evaluated in the context of the currently extending element, exactly as if you have defined the expressions from the
+ <code>General</code> tab.
+ </li>
+ <li>
+ <code>Groups</code> will
+ <strong>be aggregated</strong> to the groups defined by the referenced
+ <code>Page</code>.
+ </li>
+ <li>
+ <code>Page Validations</code> will
+ <strong>be aggregated</strong> to the validations defined by the referenced
+ <code>Page Description</code>.
+ </li>
+ <li>In the case of a containment, such as a
+ <code>Text</code> contained by a
+ <code>Group</code>, the contained elements are inherited by the extending description.
+ </li>
+ </ul>
+ <p id="filters">
+ <strong>Filter Expressions.</strong> Different filters exist depending on the element kind. These filters are used to
+ <strong>filter</strong> which inherited elements are visible. The
+ <em>Filter expression</em> is evaluated in the context of the semantic element and should return a boolean: true, the inherited element is visible, false it is filtered.
+ <br/>If the expression is not specified, all the inherited elements will be visible.
+ <br/>For each
+ <em>Filter expression</em>, a variable is available which represents the element which could be filtered. It is possible to filter all the inherited elements by just returning
+ <code>false</code> all the time. In this case, the elements defined under the current description
+ <strong>overrides</strong> the elements defined in the extended description.
+ <br/>For example if a
+ <em>Page A</em> extends another
+ <em>Page B</em>, the
+ <code>Extends</code> tab allows to define:
+ </p>
+ <ul>
+ <li>The
+ <code>Filter Groups Expression</code> is used to
+ <strong>filter</strong> which inherited groups are visible under the page. The
+ <code>groupDescription</code> variable can be used to check if a group must be filtered or not.
+ </li>
+ <li>The
+ <code>Filter Validation Rules Expression</code> is used to
+ <strong>filter</strong> which inherited validation rules are used under the page. The
+ <code>validationRuleDescription</code> variable can be used to check if a rule must be filtered or not.
+ </li>
+ </ul>
+ <p>If an element is overridden by many override definitions, the first encountered in the specification is applied.</p>
+ <h2 id="extension_points">Extension Points</h2>
+ <h3 id="advanced_custom_widgets_extension_points">Extension Points for Advanced Custom Widgets</h3>
+ <p>Integrating and advanced custom widget implementation requires extending several extension points:</p>
+ <ul>
+ <li>
+ <code>org.eclipse.emf.edit.childCreationExtenders</code>: When generating the metamodel for the custom configuration DSL of your widget, make sure EMF’s
+ <code>childCreationExtenders</code> mechanism is properly configured so that the Sirus VSM editor will see your custom widget type and allow them to be created in the
+ <em>New</em> context menu.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.properties.descriptionConverter</code>: This extension point allows you to particpate in the conversion of the Sirius-side VSM model into the EEF DSL. With this mechanism, you can translate for the EEF runtime new elements that you have contributed in the Sirius Properties DSL.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.properties.descriptionLinkResolver</code>: This extension point may be needed in complement to the
+ <code>descriptionConverter</code> if some post-transformation step is needed on your transformed model to perform global link resolution.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.properties.descriptionPreprocessor</code>: This extension point allows you to participate in the preprocessing of the Sirius-side VSM model with
+ <a href="#extensibility_features">extensibility featires</a> into a
+ <em>flatten</em> Sirius-side VSM model.
+ </li>
+ </ul>
+ <p>Please refer to the documentation for each of these for more details. And
+ <a href="../../developer/extensions-properties_provide_custom_widget_advanced.html">the reference documentation</a> for the full details on how to actually implement your own advanced custom widgets.
+ </p>
+ <h3 id="tab_filtering">Tab Filtering</h3>
+ <p>The EEF runtime used internally by Sirius to render the properties views has programmatic support for filtering property tabs that you may want to hide in your context. For example you may want to filter out some legacy tabs defined statically if you provide alternative versions defined dynamically in Sirius.</p>
+ <p>This feature is not currently exposed via the Sirius VSMs, but you can still use it by implementing the
+ <code>org.eclipse.eef.properties.ui.api.IEEFTabDescriptorFilter</code> interface, and registering your implementation in the
+ <code>org.eclipse.eef.properties.ui.eefTabDescriptorFilter</code> extension point defined in EEF.
+ </p>
+ <p>The interface defines a single method
+ <code>boolean filter(IEEFTabDescriptor tabDescriptor)</code> which will be called for each candidate tab to display. If at least one of the
+ <code>IEEFTabDescriptorFilter</code> registered indicates that the tab should be filtered, it will not be displayed.
+ </p>
+ <p>Please refer to the EEF extension point documentation for more details.</p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/properties/images/basic-properties-example-diagram.png b/doc/5.1.x/specifier/properties/images/basic-properties-example-diagram.png
new file mode 100644
index 0000000..142bdbd
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/basic-properties-example-diagram.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/basic-properties-example-vsm.png b/doc/5.1.x/specifier/properties/images/basic-properties-example-vsm.png
new file mode 100644
index 0000000..9aaa50c
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/basic-properties-example-vsm.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/customize-default-rules-extends.png b/doc/5.1.x/specifier/properties/images/customize-default-rules-extends.png
new file mode 100644
index 0000000..8a71c03
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/customize-default-rules-extends.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/customize-default-rules-general.png b/doc/5.1.x/specifier/properties/images/customize-default-rules-general.png
new file mode 100644
index 0000000..1b58cca
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/customize-default-rules-general.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/group-style-no-title.png b/doc/5.1.x/specifier/properties/images/group-style-no-title.png
new file mode 100644
index 0000000..63bb065
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/group-style-no-title.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/group-style-short-titlebar.png b/doc/5.1.x/specifier/properties/images/group-style-short-titlebar.png
new file mode 100644
index 0000000..8641f42
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/group-style-short-titlebar.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/group-style-titlebar.png b/doc/5.1.x/specifier/properties/images/group-style-titlebar.png
new file mode 100644
index 0000000..d6389e2
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/group-style-titlebar.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/group-style-toggle-none.png b/doc/5.1.x/specifier/properties/images/group-style-toggle-none.png
new file mode 100644
index 0000000..2416227
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/group-style-toggle-none.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/group-style-toggle-treenode.png b/doc/5.1.x/specifier/properties/images/group-style-toggle-treenode.png
new file mode 100644
index 0000000..4752eb9
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/group-style-toggle-treenode.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/group-style-toggle-twistie.png b/doc/5.1.x/specifier/properties/images/group-style-toggle-twistie.png
new file mode 100644
index 0000000..d6389e2
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/group-style-toggle-twistie.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/groups.png b/doc/5.1.x/specifier/properties/images/groups.png
new file mode 100644
index 0000000..e68f438
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/groups.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/label-styles.png b/doc/5.1.x/specifier/properties/images/label-styles.png
new file mode 100644
index 0000000..b1dcf16
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/label-styles.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/new-properties.png b/doc/5.1.x/specifier/properties/images/new-properties.png
new file mode 100644
index 0000000..8fae193
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/new-properties.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/pages.png b/doc/5.1.x/specifier/properties/images/pages.png
new file mode 100644
index 0000000..128f0a7
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/pages.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/reference-multiple-value.png b/doc/5.1.x/specifier/properties/images/reference-multiple-value.png
new file mode 100644
index 0000000..5098953
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/reference-multiple-value.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/reference-single-value.png b/doc/5.1.x/specifier/properties/images/reference-single-value.png
new file mode 100644
index 0000000..7e99827
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/reference-single-value.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/reuse-page.png b/doc/5.1.x/specifier/properties/images/reuse-page.png
new file mode 100644
index 0000000..d769a21
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/reuse-page.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/reuse-widget-extends-tab.png b/doc/5.1.x/specifier/properties/images/reuse-widget-extends-tab.png
new file mode 100644
index 0000000..e4bbb22
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/reuse-widget-extends-tab.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/reuse-widget-general-tab.png b/doc/5.1.x/specifier/properties/images/reuse-widget-general-tab.png
new file mode 100644
index 0000000..059ab62
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/reuse-widget-general-tab.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/reuse-widget-general2-tab.png b/doc/5.1.x/specifier/properties/images/reuse-widget-general2-tab.png
new file mode 100644
index 0000000..33271f6
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/reuse-widget-general2-tab.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-button.png b/doc/5.1.x/specifier/properties/images/widget-button.png
new file mode 100644
index 0000000..0c25e12
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-button.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-checkbox.png b/doc/5.1.x/specifier/properties/images/widget-checkbox.png
new file mode 100644
index 0000000..b1b1086
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-checkbox.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-from-domain-class.png b/doc/5.1.x/specifier/properties/images/widget-from-domain-class.png
new file mode 100644
index 0000000..1ea0842
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-from-domain-class.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-hyperlink.png b/doc/5.1.x/specifier/properties/images/widget-hyperlink.png
new file mode 100644
index 0000000..40f997a
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-hyperlink.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-label-styling.png b/doc/5.1.x/specifier/properties/images/widget-label-styling.png
new file mode 100644
index 0000000..7b9d550
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-label-styling.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-label.png b/doc/5.1.x/specifier/properties/images/widget-label.png
new file mode 100644
index 0000000..9049b31
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-label.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-radio.png b/doc/5.1.x/specifier/properties/images/widget-radio.png
new file mode 100644
index 0000000..8061219
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-radio.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-references.png b/doc/5.1.x/specifier/properties/images/widget-references.png
new file mode 100644
index 0000000..48298d7
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-references.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-select.png b/doc/5.1.x/specifier/properties/images/widget-select.png
new file mode 100644
index 0000000..6e3b77a
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-select.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-text-styling.png b/doc/5.1.x/specifier/properties/images/widget-text-styling.png
new file mode 100644
index 0000000..b3541b3
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-text-styling.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-text.png b/doc/5.1.x/specifier/properties/images/widget-text.png
new file mode 100644
index 0000000..76caa83
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-text.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-textarea.png b/doc/5.1.x/specifier/properties/images/widget-textarea.png
new file mode 100644
index 0000000..ee43403
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-textarea.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/Sequence Diagrams.html b/doc/5.1.x/specifier/sequences/Sequence Diagrams.html
new file mode 100644
index 0000000..03e0443
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/Sequence Diagrams.html
@@ -0,0 +1,654 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Sequence Diagrams</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SpecifyingSequenceDiagramEditors">Specifying Sequence Diagram Editors</h1>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#SpecifyingSequenceDiagramEditors">Specifying Sequence Diagram Editors</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#semantics">Sequence Diagrams Semantics</a>
+ </li>
+ <li>
+ <a href="#restrictions">Restrictions and Limitations</a>
+ </li>
+ <li>
+ <a href="#prerequisites">Prerequisites</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#Interaction">Interaction</a>
+ </li>
+ <li>
+ <a href="#LifelineandInstancerole">Lifeline and Instance role</a>
+ </li>
+ <li>
+ <a href="#Execution">Execution</a>
+ </li>
+ <li>
+ <a href="#Message">Message</a>
+ </li>
+ <li>
+ <a href="#SingleEventEndandCompoundEventEnd">SingleEventEnd and CompoundEventEnd</a>
+ </li>
+ <li>
+ <a href="#Ordering">Ordering</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sd_description">Sequence Diagram Description</a>
+ </li>
+ <li>
+ <a href="#DefaultLayer">Default Layer</a>
+ </li>
+ <li>
+ <a href="#mappings">Mappings</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#InstanceRole">Instance Role</a>
+ </li>
+ <li>
+ <a href="#Executions">Executions</a>
+ </li>
+ <li>
+ <a href="#BasicMessages">Basic Messages</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#tools">Tools</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#JavaServices">Java Services</a>
+ </li>
+ <li>
+ <a href="#CreationTools">Creation Tools</a>
+ </li>
+ <li>
+ <a href="#eventReorderTool">Event Reorder Tool</a>
+ </li>
+ <li>
+ <a href="#instanceRoleReorderTool">Instance Role Reorder Tool</a>
+ </li>
+ <li>
+ <a href="#OtherTools">Other Tools</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="introduction">Introduction</h2>
+ <p>This document describes how to specify sequence diagram modelers with Sirius. It has been written for software architects who want to specify sequence diagrams on their own meta-models.</p>
+ <p>This tutorial is based on an example, i.e. the specification of a UML sequence diagram editor. The resulting diagram is available in the
+ <em>Obeo UML Behavioral</em> viewpoint (available for free at <a href="https://github.com/ObeoNetwork/UML-Modeling" target="_blank">https://github.com/ObeoNetwork/UML-Modeling</a> ) which is based on the Eclipse Foundation’s <a href="http://wiki.eclipse.org/MDT-UML2" target="_blank">UML2 meta-model</a>.
+ </p>
+ <h2 id="semantics">Sequence Diagrams Semantics</h2>
+ <p>As their name says, sequence diagrams are meant to represent ordered sequences of elements. Typically, they represent
+ <em>events</em> sent and received between some entities over
+ <em>time</em>. The canonical case is a UML Sequence Diagram (where the notation comes from), which represents the messages exchanged between objects in a software system.
+ </p>
+ <p>The most important consequence of this is that contrary to what happens on a classical diagram,
+ <em>the relative graphical positions of elements on a sequence diagram have strong meaning</em>. This is true for the vertical placement and for the left-to-right order of lifelines. However placing a message above or below another one has a strong implication on the ordering of the events they represent, and thus on the structure of the underlying semantic model which is represented. Sirius works hard to ensure that what you see on you sequence diagram (in terms of vertical ordering of elements and horizontal ordering of lifelines) always correspond to the semantic ordering of the represented events.
+ </p>
+ <p>This works both ways:</p>
+ <ul>
+ <li>Assuming a diagram is synchronized (i.e. you are in
+ <em>Automatic Refresh</em> mode or your manually refreshed it since the last semantic changes), Sirius will always organize the elements on the diagram in a way which is compatible with the semantic ordering of the events: if you see an execution
+ <em>E1</em> placed above another execution
+ <em>E2</em>, you can be sure the events corresponding to
+ <em>E1</em> happen before the events of
+ <em>E2</em> in the semantic model.
+ </li>
+ <li>Symmetrically, and perhaps more importantly,
+ <em>moving</em> elements on a sequence diagram may trigger changes in the underlying semantic model to reflect the new event order implied by the positions you changed. This is very different from what happens in other diagrams, where most graphical repositioning of elements are only cosmetic. Keeping the example above, moving execution
+ <em>E2</em> graphically above
+ <em>E1</em> will trigger changes in the semantic model to move the corresponding event of
+ <em>E2</em> before the events of
+ <em>E1</em>.
+ </li>
+ </ul>
+ <p>Most of the specific features and restrictions of sequence diagrams compared to other diagrams derive from this strong guarantee that at all time, the graphical (vertical) order of the elements you see on the diagram match exactly the semantic order of the events which exist in the underlying model and the horizontal order of the instance roles you see on the diagram match exactly the semantic order of the corresponding elements which exist in the underlying model.</p>
+ <p>From the specifier point of view, this means that sequence diagrams can only be defined on meta-models in which you can provide a total ordering of the events represented, and that you can reorder these elements in a predictable way (see the description of the
+ <a href="#eventReorderTool">Event Reorder Tool</a> and
+ <a href="#instanceRoleReorderTool">Instance Role Reorder Tool</a> for details).
+ </p>
+ <h2 id="restrictions">Restrictions and Limitations</h2>
+ <p>In order to guarantee the strong guarantee described above, some of the features present on normal diagrams are not supported, or even completely disabled on sequence diagrams. Basically, anything which would make it possible on a normal diagram to have meaningful semantic elements not visible on the diagram is forbidden. This would make it impossible for Sirius to keep consistent tracking of the “position” of these invisible elements relative to the ones which are visible.</p>
+ <ul>
+ <li>
+ <em>Layers</em>: sequence diagrams may define optional layers, as long as they do not make graphical elements appear or disappear on the diagram when they are selected or de-selected. Layers which contribute new tools in the palette for example are fine.
+ </li>
+ <li>
+ <em>Filters</em>: filters which may hide elements from a sequence diagram when enabled are not supported.
+ </li>
+ <li>
+ <em>Hide/Reveal</em>: hiding elements explicitly is not supported. The actions are disabled in the UI.
+ </li>
+ <li>
+ <em>Pin/Unpin</em>: pinning graphical elements has no effect on the automatic layout of sequence diagrams. Even if an element has been marked as pinned, Sirius must be able to move it graphically as needed in order to maintain the graphical order of element in sync with the semantic order. The actions are disabled in the UI.
+ </li>
+ </ul>
+ <h2 id="prerequisites">Prerequisites</h2>
+ <p>As with any Sirius diagram, the semantic model used for a sequence diagram defines some elements and relationships that must be mapped to graphical elements in order to be represented on the sequence diagrams. For the UML2 modeler, the semantic model is defined in
+ <code>.uml</code> files and the mapping in the
+ <code>uml2.odesign</code> Viewpoint Specification file.
+ </p>
+ <p>The job of the architect is to map the UML2 interactions, life-lines, executions and messages. Even if the support for sequence diagrams in Sirius is not dedicated to UML2, these four kinds of elements (or similar ones) must be provided by the sequence meta-model in order to be represented as sequence diagrams in Sirius.</p>
+ <h3 id="Interaction">Interaction</h3>
+ <p>The interaction is the semantic container for all the sequence diagram elements.</p>
+ <img border="0" src="images/interaction.png"/>
+ <p>In UML2, the interaction is represented by an element of type
+ <code>Interaction</code>.
+ </p>
+ <h3 id="LifelineandInstancerole">Lifeline and Instance role</h3>
+ <p>The instance role and the lifeline represents one participant in the interaction.</p>
+ <img border="0" src="images/lifeline.png"/>
+ <p>In UML2, the instance role and the lifeline are represented by one element of type
+ <code>Lifeline</code>.
+ </p>
+ <h3 id="Execution">Execution</h3>
+ <p>The execution typically represents a period in the participant’s lifetime when it is active. An execution is composed of three elements:</p>
+ <ul>
+ <li>
+ <em>Execution start</em>: the start occurrence of the execution;
+ </li>
+ <li>
+ <em>Execution</em>: the execution by itself (the duration of the execution);
+ </li>
+ <li>
+ <em>Execution finish</em>: the finish occurrence of the execution.
+ </li>
+ </ul>
+ <img border="0" src="images/execution.png"/>
+ <p>In UML2, the execution is represented by an element of type
+ <code>Execution Specification</code>, the execution start and finish are defined by an abstract type
+ <code>Occurrence Specification</code>.
+ </p>
+ <h3 id="Message">Message</h3>
+ <p>The message represents a kind of communication between lifelines of an interaction. A message is composed by three elements:</p>
+ <ul>
+ <li>
+ <em>Message send</em> (or
+ <em>source</em>): the send occurrence of the message;
+ </li>
+ <li>
+ <em>Message</em>: the message by itself (the kind of communication, e.g. synchronous/asynchronous call);
+ </li>
+ <li>
+ <em>Message receive</em> (or
+ <em>target</em>): the receive occurrence of the message
+ </li>
+ </ul>
+ <img border="0" src="images/message.png"/>
+ <p>In UML2, the message is represented by an element of type
+ <code>Message Specification</code>, the message send and receive are defined by one abstract type
+ <code>Occurrence Specification</code>.
+ </p>
+ <h3 id="SingleEventEndandCompoundEventEnd">SingleEventEnd and CompoundEventEnd</h3>
+ <p>Sirius internally manages a list of start/finish execution occurrences and sender/receiver message occurrences defined for each interaction. All these occurrences are event ends contained in the
+ <code>EventEnds</code> list.
+ </p>
+ <p>An
+ <code>eventEnd</code> contains two properties:
+ </p>
+ <ul>
+ <li>
+ <code>semanticEvent</code>: points to the semantic event which could be a message or an execution,
+ </li>
+ <li>
+ <code>semanticEnd</code>: points to one connection end of the semantic event, i.e. the semantic element which could be a message sender, a message receiver, an execution start or an execution finish.
+ </li>
+ </ul>
+ <p>There are two kinds of
+ <code>EventEnds</code>:
+ </p>
+ <ul>
+ <li>
+ <code>SingleEventEnd</code>: Is an element which is used only as start/send or finish/receive by one execution/message. In UML2, an execution could be started or finished by an
+ <code>Execution Occurrence Specification</code> and a message could be sent or received by a
+ <code>Message occurrence Specification</code>.
+ </li>
+ <li>
+ <code>CompoundEventEnd</code>: Is an element that represents the combination of a message and an execution. This kind of
+ <code>EventEnd</code> exists in order to associate graphically a message to an execution. As the
+ <code>CompoundEventEnd</code> is an
+ <code>EventEnd</code>, it contains the two properties:
+ <ul>
+ <li>
+ <code>semanticEvent</code> which points to a message or an execution.
+ </li>
+ <li>
+ <code>semanticEnd</code> which points to a
+ <code>MixEnd</code> element.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>Depending on how the meta-model is defined, the
+ <code>MixEnd</code> could be represented by:
+ </p>
+ <ul>
+ <li>one
+ <code>SingleEventEnd</code>: This is the case in UML2, the
+ <code>Execution Specification</code> could be defined with a start/finish element of type
+ <code>Execution Occurrence Specification</code> or
+ <code>Message Occurrence Specification</code>
+ </li>
+ <li>two
+ <code>SingleEventEnds</code>: one
+ <code>SingleEventElement</code> which points to the message and one
+ <code>SingleEventElement</code> which points to the execution.
+ </li>
+ </ul>
+ <img border="0" src="images/event_ends.png"/>
+ <p>The
+ <code>Operation_0</code> message ends on the left border of the
+ <code>Operation_0()</code> execution because
+ <code>Operation_0_receiver</code> is associated to the start of the execution. Otherwise, the message would be associated to the lifeline. For example, the
+ <code>Message_3</code> is a simple message not linked to an execution. Consequently, the
+ <code>Message_3_receiver</code> is a
+ <code>SingleEventEnd</code> and is attached to the lifeline.
+ </p>
+ <p>Hence, for an asynchronous call, we get:</p>
+ <ul>
+ <li>one
+ <code>SingleEventEnd</code> for the message sending:
+ <code>Operation_0_sender</code>
+ <ul>
+ <li>
+ <code>semanticEvent</code> =
+ <code>Operation_0</code> message
+ </li>
+ <li>
+ <code>semanticEnd</code> =
+ <code>Operation_0_sender</code> message occurrence specification
+ </li>
+ </ul>
+ </li>
+ <li>one
+ <code>CompoundEventEnd</code> for the
+ <code>Operation_0</code> message receiving and
+ <code>Operation_0</code> execution
+ <code>startingEnd</code> composed by one
+ <code>SingleEventEnd</code> =
+ <code>Operation_receiver</code>
+ <ul>
+ <li>
+ <code>semanticEvent</code> =
+ <code>Operation_0</code> message
+ </li>
+ <li>
+ <code>semanticEnd</code> =
+ <code>Operation_0_receiver</code> message occurrence specification
+ </li>
+ </ul>
+ </li>
+ <li>one
+ <code>SingleEventEnd</code> for the execution finish:
+ <code>Operation_0_finish</code>
+ <ul>
+ <li>
+ <code>semanticEvent</code> =
+ <code>Operation_0</code> execution
+ </li>
+ <li>
+ <code>semanticEnd</code> =
+ <code>Operation_0_finish</code> execution occurrence specification
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h3 id="Ordering">Ordering</h3>
+ <p>In a Sirius sequence diagram, the elements are totally ordered.</p>
+ <p>Internally, Sirius maintains three ordered sets:</p>
+ <ul>
+ <li>two for the vertical ordering : a graphical set which orders the graphical elements, a semantic set which orders the semantic elements.</li>
+ <li>one for the horizontal ordering, a semantic set which orders the semantic instance roles (the graphical ordering of instance roles is available without heavy computation).</li>
+ </ul>
+ <img border="0" src="images/orderings.png"/>
+ <p>To provide a functional diagram, each semantic/graphical orderings couple must always be coherent. Creation tools and reordering tool must manage the semantic orderings. More explanations are given in the next section.</p>
+ <h2 id="sd_description">Sequence Diagram Description</h2>
+ <p>First, in an odesign file, from an existing viewpoint, you have to create a new kind of representation : Sequence Diagram Description.</p>
+ <img border="0" src="images/new_description.png"/>
+ <img border="0" src="images/description_properties.png"/>
+ <p>As for other representations, you define mandatory properties:</p>
+ <ul>
+ <li>
+ <em>Id</em>: unique identifier for the diagram type in Sirius
+ </li>
+ <li>
+ <em>Label</em>: used to display information to end-user
+ </li>
+ <li>
+ <em>Domain class</em>: type of the semantic element representing the sequence diagram container
+ </li>
+ </ul>
+ <p>For a complete description of each property, have a look at the
+ <em>Help > Sirius Specifier Guide > Reference Guide > Representation > Sequence Diagram</em>.
+ </p>
+ <p>The most important properties to understand are the
+ <em>Ends Ordering</em> and
+ <em>Instance Roles Ordering</em>.
+ </p>
+ <img border="0" src="images/ends_ordering.png"/>
+ <p>In a sequence diagram, graphical elements are ordered chronologically and this order is essential. Maintaining and updating the elements global order will be the main purpose of all tools that you will create later. Your tools must keep all the time the order of semantic elements and according to this, Sirius manages the graphical representation order.</p>
+ <p>The ordered elements in a sequence diagram are defined with the
+ <em>Ends Ordering</em> and
+ <em>Instance Roles Ordering</em> fields. These properties will be used by Sirius to automatically order the graphical elements when you open a sequence diagram for an interaction.
+ </p>
+ <p>The
+ <em>Ends Ordering</em> handles the vertical order of events. It specifies with an expression how semantic elements must be ordered. These elements should be execution1 start/finish and message send/receive occurrences.
+ </p>
+ <p>A specific variable exists for this expression:
+ <code>eventEnds</code> . The variable
+ <code>eventEnds</code> contains the list of all
+ <code>EventEnds</code> existing for the current interaction.
+ </p>
+ <p>Pay attention: the evaluation of the
+ <em>Ends Ordering</em> expression should returned only elements contained in the
+ <code>eventEnds</code> list.
+ </p>
+ <p>The
+ <em>Instance Roles Ordering</em> handles the horizontal order of instance roles / lifelines. It specifies with an expression how semantic elements must be ordered. These elements should be the semantic elements which will be represented as instance role.
+ </p>
+ <p>If we have a look at the UML2 meta-model, the fragment reference defined in an
+ <code>Interaction</code> contains all the execution occurrences and the message occurrences. Execution occurrences and messages occurrences are
+ <code>EventEnd</code> elements. But the fragment reference contains also some other types of elements as execution specifications. In order that the
+ <em>Ends Ordering</em> property only references
+ <code>EventEnd</code> elements we need to do an intersection of fragments elements and eventEnds (using either Acceleo or delegating to a Java service using
+ <code>service:</code>)..
+ </p>
+ <p>Furthermore, the lifeline reference defined in an
+ <code>Interaction</code> contains all the
+ <code>Lifeline</code> representing both lifeline and instance role.
+ </p>
+ <img border="0" src="images/ends_ordering_visual.png"/>
+ <p>For the UML Modeler, the
+ <em>Ends Ordering</em> expression will return for the diagram below, the ordered list:
+ <code>[Operation_0_sender, Operation_0_receiver, Operation_0_finish, test_sender, test_receiver, test_reply_sender, test_reply_receiver, Message_3_sender, Message_3 _receiver]</code>.
+ <br/>And the
+ <em>Instance Roles Ordering</em> expression will return for the diagram below, the ordered list:
+ <code>[producers, consumers]</code>.
+ </p>
+ <h2 id="DefaultLayer">Default Layer</h2>
+ <p>When the sequence diagram description is complete, you can add a Default layer.</p>
+ <img border="0" src="images/default_layer.png"/>
+ <p>Next step is to define the mappings and all the tools to manage the interaction elements.</p>
+ <h2 id="mappings">Mappings</h2>
+ <p>We want to represent on a sequence diagram four different elements and then associate a mapping to each element:</p>
+ <ul>
+ <li>
+ <em>Instance</em>: instance role mapping
+ </li>
+ <li>
+ <em>Lifetime</em>: execution mapping
+ </li>
+ <li>
+ <em>Execution</em>: execution mapping
+ </li>
+ <li>
+ <em>Message</em>: basic message mapping
+ </li>
+ </ul>
+ <img border="0" src="images/mappings.png"/>
+ <h3 id="InstanceRole">Instance Role</h3>
+ <p>Firstly, create the instance role mapping. It graphically corresponds to the box at the top of the lifeline.</p>
+ <img border="0" src="images/new_instance_role_mapping.png"/>
+ <p>Set the mandatory properties
+ <em>Id</em>,
+ <em>Label</em> and
+ <em>Domain class</em>:
+ </p>
+ <img border="0" src="images/instance_role_mapping_properties.png"/>
+ <p>The Semantic Candidates Expression is an Acceleo expression returning the semantic elements for which the mapping will be evaluated and then a graphical element will represent the semantic element on the diagram.</p>
+ <p>Don’t forget to create a new Style for the instance role mapping.</p>
+ <img border="0" src="images/instance_role_mapping_style.png"/>
+ <h3 id="Executions">Executions</h3>
+ <p>Execution mappings are used when you have an element which is composed by a start, a duration and a finish element. </p>
+ <p>We will define the execution mappings:</p>
+ <img border="0" src="images/new_execution_mapping.png"/>
+ <p>First, create the execution mapping for the lifeline execution. This represents the dashed line of lifeline.</p>
+ <img border="0" src="images/execution_mapping_properties1.png"/>
+ <p>And create the execution mapping for the execution. This represents the execution square on lifeline or other execution.</p>
+ <img border="0" src="images/execution_mapping_properties2.png"/>
+ <p>Set the mandatory properties:</p>
+ <ul>
+ <li>
+ <em>Id</em>,
+ <em>Label</em>,
+ <em>Domain class</em>
+ </li>
+ <li>
+ <em>Semantic Candidates Expression</em>: expression that returns the first level executions associated to the current execution.
+ </li>
+ </ul>
+ <img border="0" src="images/execution_mappings_visual.png"/>
+ <p>Here, a java service1 executionSemanticCandidates() is called.</p>
+ <ul>
+ <li>
+ <em>Starting End Finder Expression</em>: semantic element defining the execution start
+ </li>
+ <li>
+ <em>Finishing End Finder Expression</em>: semantic element defining the execution finish
+ </li>
+ </ul>
+ <p>The end finder expressions are used by Sirius to graphically link the execution to its start and finish elements and to find during creation and reorder operations where to reattach the dragged element.</p>
+ <p>As an execution could recursively contain other executions, don’t forget to import the mapping on itself by setting the property Reused bordered node mappings :</p>
+ <img border="0" src="images/execution_mapping_reused.png"/>
+ <p>For both execution mappings, don’t forget to create a New Style:</p>
+ <img border="0" src="images/execution_mapping_style.png"/>
+ <h3 id="BasicMessages">Basic Messages</h3>
+ <p>Now, we will define the basic message mapping:</p>
+ <img border="0" src="images/new_message_mapping.png"/>
+ <p>Create the basic message mapping:</p>
+ <img border="0" src="images/new_basic_message_mapping.png"/>
+ <img border="0" src="images/basic_message_mapping_properties.png"/>
+ <p>Set the mandatory properties:</p>
+ <ul>
+ <li>
+ <em>Id</em>,
+ <em>Label</em>,
+ <em>Domain class</em>
+ </li>
+ <li>
+ <em>Semantic Candidates Expression</em>: expression to get all the messages defined in an interaction
+ </li>
+ <li>
+ <em>Semantic Elements</em>: Associates a group of logical semantic elements to the graphical element. For example, here we associate to the graphical message the semantic element of type
+ <code>Message</code>, the message send event of type
+ <code>Message Occurrence Specification</code> and the message receive event of type
+ <code>Message Occurrence Specification</code>. Sirius will use this information to:
+ <ul>
+ <li>show associated semantic elements in properties view,</li>
+ <li>listen for associated elements changes to refresh if necessary,</li>
+ <li>delete associated elements if there is no specific delete tool.</li>
+ </ul>
+ </li>
+ <li>
+ <em>Source/Target mapping</em>: a list of graphical mappings that could be source/target of the message. Several mappings could be defined as source or target mapping for a message. In UML2, Lifeline mapping and Execution mapping can be source/target of message. On the illustration below, the consumers lifeline and the
+ <code>compute()</code> execution can be selected as source for the get message. The producers lifeline and the get execution can be selected as target for the get message.
+ </li>
+ </ul>
+ <img border="0" src="images/basic_message_mapping_visual1.png"/>
+ <ul>
+ <li>
+ <em>Source/Target finder expression</em>: the expression which must return the source/target semantic element, i.e. the source/target context of the message. In UML2, the expression return is the lifeline or the execution for example. On the illustration below, the compute execution is the semantic source element for the message get and the get execution is the semantic target element.
+ </li>
+ </ul>
+ <img border="0" src="images/basic_message_mapping_visual2.png"/>
+ <ul>
+ <li>
+ <em>Sending/Receiving End Finder Expression</em>: expression which must return the semantic element which represents the message sender/receiver.
+ </li>
+ </ul>
+ <img border="0" src="images/basic_message_mapping_visual3.png"/>
+ <h4 id="LostandFoundMessages">Lost and Found Messages</h4>
+ <p>Standard node mappings, direct children of a layer of the current sequence diagram description, can be used to represent the unknown message end. Lost and found messages should be created using a generic tool.</p>
+ <h2 id="tools">Tools</h2>
+ <h3 id="JavaServices">Java Services</h3>
+ <p>To use a java service in an Acceleo expression, service must be define like this in odesign:</p>
+ <img border="0" src="images/java_service.png"/>
+ <h3 id="CreationTools">Creation Tools</h3>
+ <p>Define a new Section to add creation tools:</p>
+ <img border="0" src="images/new_creation_tool_section.png"/>
+ <h4 id="CreateLifeline">Create Lifeline</h4>
+ <p>Lifelines should be created using an Instance Role Creation Tool associated to the instance role mapping.</p>
+ <img border="0" src="images/lifeline_creation_tool.png"/>
+ <p>The
+ <code>predecessor</code> variable represents in the global instance role ordering, the element preceding the new instance role.
+ </p>
+ <h4 id="CreateExecution">Create Execution</h4>
+ <p>An Execution can be created using
+ <em>Execution Creation Tool</em>.
+ </p>
+ <img border="0" src="images/new_execution_creation_tool.png"/>
+ <p>The following variables can be used from inside the tool definition:</p>
+ <ul>
+ <li>
+ <code>container</code>: the element (lifeline or execution) that will contain graphically the new execution, in the example below the container would be the get() execution.
+ </li>
+ <li>
+ <code>startingEndPredecessor</code> and
+ <code>finishingEndPredecessor</code>: represent in the global event ends list, the element preceding the new execution start and the element preceding the new execution finish. To get the corresponding semantic end element associated to event end:
+ <code>startingEndPredecessor.semanticEnd</code> or
+ <code>finishingEndPredecessor.semanticEnd</code>.
+ </li>
+ </ul>
+ <img border="0" src="images/execution_creation_tool_visual.png"/>
+ <p>In the example above, we want to create a new
+ <code>BehaviorExecution_2</code> on the existing get execution. Thus, the
+ <code>startingEndPredecessor</code> and
+ <code>finishingEndPredecessor</code> will point to the
+ <code>get_receiver</code> message occurrence. This variables represent the semantic elements (
+ <code>get_receiver</code>) associated to the graphical element preceding the
+ <code>startingEnd</code> (
+ <code>BehaviorExecution_2_start</code>) and
+ <code>finishingEnd</code> (
+ <code>BehaviorExecution_2_finish</code>) of the new element.
+ </p>
+ <h4 id="MessageCreationTool">Message Creation Tool</h4>
+ <p>A Message can be created using Message Creation Tool.</p>
+ <img border="0" src="images/new_message_creation_tool.png"/>
+ <p>The following variables can be used from inside the tool definition:</p>
+ <ul>
+ <li>
+ <code>source</code>: Semantic element associated to message send;
+ </li>
+ <li>
+ <code>target</code>: Semantic element associated to message receive;
+ </li>
+ <li>
+ <code>startingEndPredecessor</code> and
+ <code>finishingEndPredecessor</code>: represent in the global event ends list, the element preceding the new message send and the element preceding the new message receive.
+ </li>
+ </ul>
+ <img border="0" src="images/message_creation_tool_visual.png"/>
+ <p>In this example, we want to create a new
+ <code>Message_1</code> from the existing compute execution to the producers lifeline. Thus, the
+ <code>startingEndPredecessor</code> and
+ <code>finishingEndPredecessor</code> will point to the
+ <code>get_finish</code> execution occurrence. These variables represent the semantic elements (
+ <code>get_finish</code>) associated to the graphical element preceding the
+ <code>startingEnd</code> (
+ <code>Message_1_sender</code>) and
+ <code>finishingEnd</code> (
+ <code>Message_1_receiver</code>) of the new element.
+ </p>
+ <p>
+ <strong>Precondition.</strong> As for many other tools, it is possible to define a precondition for message creation tools. Depending on the precondition expression, the tool allows the element creation only under certain conditions. The precondition is defined as an interpreted expression.
+ </p>
+ <img border="0" src="images/message_creation_precondition.png"/>
+ <p>A variable is available for the Acceleo expression : $preTarget. This variable is the semantic element associated to graphical element that is currently hovered by the mouse.</p>
+ <h3 id="eventReorderTool">Event Reorder Tool</h3>
+ <p>This tool is called when the user moves or changes the size of graphical elements on the diagram.</p>
+ <p>A single unique event reorder tool can and must be specified for message and execution mappings. The purpose of the tool is to re-synchronize the graphical ordering with the semantic ordering. When the user reorders a graphical element, the global order of graphical elements changes and the tool must then reorder the semantic elements according to these changes.</p>
+ <img border="0" src="images/new_reorder_tool.png"/>
+ <p>This tool has access to the following two variables usable in expressions:</p>
+ <ul>
+ <li>
+ <code>startingEndPredecessorAfter</code>: represents in the global event end list the element preceding the moved element start/send. It is the event which,
+ <strong>after</strong> the move, will be directly
+ <strong>preceding</strong> the
+ <strong>starting end</strong> (top) of the moved element;
+ </li>
+ <li>
+ <code>finishingEndPredecessorAfter</code>: represents in the global event end list the element preceding the moved element finish/receive. It is the event which,
+ <strong>after</strong> the move, will be directly
+ <strong>preceding</strong> the
+ <strong>finishing end</strong> (bottom) of the moved element.
+ </li>
+ </ul>
+ <img border="0" src="images/reorder_tool_visual1.png"/>
+ <p>In this example, we want to move the get execution after the
+ <code>Message_0</code>. Thus, the
+ <code>startingEndPredecessorAfter</code> variable will point to the
+ <code>compute_finish</code> execution occurrence. This variable represents the semantic elements (
+ <code>compute_finish</code>) associated to the graphical element preceding the
+ <code>startingEnd</code> (
+ <code>get_start</code>) after the move of get execution. The
+ <code>finishingEndPredecessorAfter</code> variable will point to the
+ <code>get_start</code> execution occurrence. This variable represents the semantic elements (
+ <code>get_start</code>) associated to the graphical element preceding the
+ <code>finishingEnd</code> (
+ <code>get_finish</code>) after the move of get execution.
+ </p>
+ <p>Now, we will have a look to a more complex reorder operation.</p>
+ <img border="0" src="images/reorder_tool_visual2.png"/>
+ <p>In this example, we want to move the get execution after the
+ <code>Message_1</code>. The get execution is linked to the get synchronous message, thus the get execution
+ <code>startingEnd</code> is a
+ <code>compoundEvent</code> representing the
+ <code>get_receiver</code> message occurrence. When we move the execution, the associated message must be also moved. In this case, the
+ <code>startingEndPredecessorAfter</code> variable will point to the
+ <code>compute_finish</code> execution occurrence. This variable represents the semantic elements (
+ <code>compute_finish</code>) associated to the graphical element preceding the
+ <code>startingEnd</code> (
+ <code>get_send</code>) after the move of get execution. The
+ <code>finishingEndPredecessorAfter</code> variable will point to the
+ <code>get_receiver</code> message occurrence. This variable represents the semantic elements (
+ <code>get_receiver</code>) associated to the graphical element preceding the
+ <code>finishingEnd</code> (
+ <code>get_finish</code>) after the move of get execution.
+ </p>
+ <h3 id="instanceRoleReorderTool">Instance Role Reorder Tool</h3>
+ <p>This tool is called when the user horizontally moves an instance role on the diagram.</p>
+ <p>A single unique event reorder tool can and must be specified for instance role mappings. The purpose of the tool is to re-synchronize the graphical ordering with the semantic ordering. When the user reorders a graphical instance role, the global order of graphical instance roles changes and the tool must then reorder the semantic instance roles according to these changes.</p>
+ <img border="0" src="images/new_instance_role_reorder_tool.png"/>
+ <p>This tool has access to the following two variables usable in expressions:</p>
+ <ul>
+ <li>
+ <code>predecessorBefore</code>: represents in the global instance role ordering the element previously preceding the moved instance role. It is the element which,
+ <strong>before</strong> the move, was directly
+ <strong>preceding</strong> the moved element;
+ </li>
+ <li>
+ <code>predecessorAfter</code>: represents in the global instance role ordering the element preceding the moved instance role. It is the event which,
+ <strong>after</strong> the move, will be directly
+ <strong>preceding</strong> the moved element;
+ </li>
+ </ul>
+ <img border="0" src="images/instance_role_reorder_tool_visual1.png"/>
+ <p>In this example, we want to move the
+ <code>consumers</code> instance role after the
+ <code>producers</code> instance role. Thus, the
+ <code>predecessorAfter</code> variable will point to the
+ <code>producers</code> execution occurrence. This variable represents the semantic elements (
+ <code>producers</code>) associated to the graphical element preceding the
+ <code>consumers</code> instance role after its move. The
+ <code>predecessorBefore</code> variable will be null, because
+ <code>consumers</code> was the first element of the ordering.
+ </p>
+ <h3 id="OtherTools">Other Tools</h3>
+ <p>Nothing specific for deletion tool, edit label tool, diagram creation and diagram navigation tool, have a look at the Sirius Specifier Guide.</p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/sequences/images/basic_message_mapping_properties.png b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_properties.png
new file mode 100644
index 0000000..b36b2d0
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_properties.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual1.png b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual1.png
new file mode 100644
index 0000000..c4fbd19
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual1.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual2.png b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual2.png
new file mode 100644
index 0000000..a941e5e
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual2.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual3.png b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual3.png
new file mode 100644
index 0000000..d93c4fb
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual3.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/default_layer.png b/doc/5.1.x/specifier/sequences/images/default_layer.png
new file mode 100644
index 0000000..2de5da4
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/default_layer.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/description_properties.png b/doc/5.1.x/specifier/sequences/images/description_properties.png
new file mode 100644
index 0000000..8b71604
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/description_properties.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/ends_ordering.png b/doc/5.1.x/specifier/sequences/images/ends_ordering.png
new file mode 100644
index 0000000..2a87b0d
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/ends_ordering.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/ends_ordering_visual.png b/doc/5.1.x/specifier/sequences/images/ends_ordering_visual.png
new file mode 100644
index 0000000..139d05f
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/ends_ordering_visual.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/event_ends.png b/doc/5.1.x/specifier/sequences/images/event_ends.png
new file mode 100644
index 0000000..c901490
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/event_ends.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution.png b/doc/5.1.x/specifier/sequences/images/execution.png
new file mode 100644
index 0000000..6cdaeab
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution_creation_tool_visual.png b/doc/5.1.x/specifier/sequences/images/execution_creation_tool_visual.png
new file mode 100644
index 0000000..87fe8cf
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution_creation_tool_visual.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution_mapping_properties1.png b/doc/5.1.x/specifier/sequences/images/execution_mapping_properties1.png
new file mode 100644
index 0000000..0ed7f2d
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution_mapping_properties1.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution_mapping_properties2.png b/doc/5.1.x/specifier/sequences/images/execution_mapping_properties2.png
new file mode 100644
index 0000000..1dd889f
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution_mapping_properties2.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution_mapping_reused.png b/doc/5.1.x/specifier/sequences/images/execution_mapping_reused.png
new file mode 100644
index 0000000..6b0ae69
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution_mapping_reused.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution_mapping_style.png b/doc/5.1.x/specifier/sequences/images/execution_mapping_style.png
new file mode 100644
index 0000000..abfcea5
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution_mapping_style.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution_mappings_visual.png b/doc/5.1.x/specifier/sequences/images/execution_mappings_visual.png
new file mode 100644
index 0000000..c1a93e9
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution_mappings_visual.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/instance_role_mapping_properties.png b/doc/5.1.x/specifier/sequences/images/instance_role_mapping_properties.png
new file mode 100644
index 0000000..ab4abfb
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/instance_role_mapping_properties.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/instance_role_mapping_style.png b/doc/5.1.x/specifier/sequences/images/instance_role_mapping_style.png
new file mode 100644
index 0000000..078a5d4
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/instance_role_mapping_style.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/instance_role_reorder_tool_visual1.png b/doc/5.1.x/specifier/sequences/images/instance_role_reorder_tool_visual1.png
new file mode 100644
index 0000000..a251dbd
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/instance_role_reorder_tool_visual1.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/interaction.png b/doc/5.1.x/specifier/sequences/images/interaction.png
new file mode 100644
index 0000000..fcab8c2
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/interaction.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/java_service.png b/doc/5.1.x/specifier/sequences/images/java_service.png
new file mode 100644
index 0000000..0331735
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/java_service.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/lifeline.png b/doc/5.1.x/specifier/sequences/images/lifeline.png
new file mode 100644
index 0000000..69a5c8b
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/lifeline.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/lifeline_creation_tool.png b/doc/5.1.x/specifier/sequences/images/lifeline_creation_tool.png
new file mode 100644
index 0000000..50cd3bb
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/lifeline_creation_tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/mappings.png b/doc/5.1.x/specifier/sequences/images/mappings.png
new file mode 100644
index 0000000..0a752f5
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/mappings.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/message.png b/doc/5.1.x/specifier/sequences/images/message.png
new file mode 100644
index 0000000..8a031cd
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/message.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/message_creation_precondition.png b/doc/5.1.x/specifier/sequences/images/message_creation_precondition.png
new file mode 100644
index 0000000..3f12f93
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/message_creation_precondition.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/message_creation_tool_visual.png b/doc/5.1.x/specifier/sequences/images/message_creation_tool_visual.png
new file mode 100644
index 0000000..0dce6ea
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/message_creation_tool_visual.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_basic_message_mapping.png b/doc/5.1.x/specifier/sequences/images/new_basic_message_mapping.png
new file mode 100644
index 0000000..871fc90
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_basic_message_mapping.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_creation_tool_section.png b/doc/5.1.x/specifier/sequences/images/new_creation_tool_section.png
new file mode 100644
index 0000000..5acb4fa
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_creation_tool_section.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_description.png b/doc/5.1.x/specifier/sequences/images/new_description.png
new file mode 100644
index 0000000..809e690
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_description.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_execution_creation_tool.png b/doc/5.1.x/specifier/sequences/images/new_execution_creation_tool.png
new file mode 100644
index 0000000..8e69843
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_execution_creation_tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_execution_mapping.png b/doc/5.1.x/specifier/sequences/images/new_execution_mapping.png
new file mode 100644
index 0000000..19b1c62
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_execution_mapping.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_instance_role_mapping.png b/doc/5.1.x/specifier/sequences/images/new_instance_role_mapping.png
new file mode 100644
index 0000000..590ee42
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_instance_role_mapping.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_instance_role_reorder_tool.png b/doc/5.1.x/specifier/sequences/images/new_instance_role_reorder_tool.png
new file mode 100644
index 0000000..d69b8bf
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_instance_role_reorder_tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_message_creation_tool.png b/doc/5.1.x/specifier/sequences/images/new_message_creation_tool.png
new file mode 100644
index 0000000..7e2c16a
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_message_creation_tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_message_mapping.png b/doc/5.1.x/specifier/sequences/images/new_message_mapping.png
new file mode 100644
index 0000000..871fc90
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_message_mapping.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_reorder_tool.png b/doc/5.1.x/specifier/sequences/images/new_reorder_tool.png
new file mode 100644
index 0000000..ced06ec
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_reorder_tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/orderings.png b/doc/5.1.x/specifier/sequences/images/orderings.png
new file mode 100644
index 0000000..7d8be85
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/orderings.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/reorder_tool_visual1.png b/doc/5.1.x/specifier/sequences/images/reorder_tool_visual1.png
new file mode 100644
index 0000000..0f86cc5
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/reorder_tool_visual1.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/reorder_tool_visual2.png b/doc/5.1.x/specifier/sequences/images/reorder_tool_visual2.png
new file mode 100644
index 0000000..01cd27b
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/reorder_tool_visual2.png
Binary files differ
diff --git a/doc/5.1.x/specifier/tables/Tables.html b/doc/5.1.x/specifier/tables/Tables.html
new file mode 100644
index 0000000..a7c428e
--- /dev/null
+++ b/doc/5.1.x/specifier/tables/Tables.html
@@ -0,0 +1,375 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Tables</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SpecifyingTableEditors">Specifying Table Editors</h1>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#SpecifyingTableEditors">Specifying Table Editors</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#edition_tables">Edition Tables</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#table_tools">Table Tools</a>
+ </li>
+ <li>
+ <a href="#line_mappings">Line Mappings</a>
+ </li>
+ <li>
+ <a href="#feature_column_mapping">Feature Column Mappings</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#cross_tables">Cross Tables</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#cross_table_tools">Table Tools</a>
+ </li>
+ <li>
+ <a href="#element_column_mapping">Element Column Mappings</a>
+ </li>
+ <li>
+ <a href="#intersection_mapping">Intersection Mappings</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="introduction">Introduction</h2>
+ <p>Sirius supports the definition of two kinds of tabular modelers:</p>
+ <ul>
+ <li>
+ <em>Edition Tables</em> are classical tables, where each line represents an element and each column (from a fixed set) represents some (potentially computed) property of the element. Lines can contain sub-lines (recursively) to represent sub-elements, and the end-user can expand/collapse these at will. Provided that you specify the corresponding tools, users can create new lines and delete existing ones.
+ </li>
+ <li>
+ <em>Cross Tables</em> are slightly different, optimized to represent relationship between elements in a matrix-like way. Both lines and columns represent elements, and each call at an intersection if a certain relationship exists between them. Cross tables also support sub-lines, but not sub-columns. However provided the right tools are specified, users can create and/or delete columns in addition to lines.
+ </li>
+ </ul>
+ <p>Both kinds of table share a lot of elements. This document will focus on
+ <a href="#edition_tables">edition tables</a>, which are the most commonly used. The
+ <a href="#cross_tables">section on cross-tables</a> describes them by their differences with edition tables.
+ </p>
+ <img border="0" src="./images/table_description_editor.png"/>
+<em>
+<ul>
+<img src="images/tricks.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>
+ <em>use the <img src="images/questionMarque.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> icon to access the available fields tooltips:</em>
+<ul>
+ <li>
+ <b>Id</b> field: The identifier of this element. Must be unique. Changing this identifier will break existing user models which reference the old identifier.</li>
+ <li>
+ <b>Label</b> field: The label used to display this to the end-user.</li>
+ <li>
+ <b>Domain Class</b> field: Type of the element represented by the Node.</li>
+ <li>
+ <b>Semantic Candidates Expression</b> field: Restrict the list of elements to consider before creating the graphical elements. If it is not set, then all semantic models in session will be browsed and any element of the given type validating the precondition expression will cause the creation of a graphical element. If you set this attribute then only the elements returned by the expression evaluation will be considered.</li>
+</ul>
+</ul>
+</em>
+ <p>
+ <strong>Note</strong>: Advanced features like layers, filters and mapping imports which exist for diagrams are not currently available for tables.
+ </p>
+ <h2 id="edition_tables">Edition Tables</h2>
+ <p>Edition tables are configured by creating an
+ <em>Edition Table Description</em> element (inside a
+ <em>Viewpoint</em>) and its sub-elements (which describe the lines, columns and tools).
+ <em>Edition Table Descriptions</em> are similar to other representation description elements.
+ </p>
+ <p>The mandatory
+ <em>Domain Class</em> attribute is the type of semantic element which are represented by the table. In the
+ <em>Model Explorer</em>, end-users will be able to create new instances of this table on semantic elements of this type (assuming the corresponding viewpoint is enabled in the
+ <em>Modeling Project</em>). The syntax for the domain class name can be the basic name, like
+ <code>Class</code>, a qualified name using name of the EMF EPackage which defines the type, like
+ <code>uml.Class</code>, or a fully qualified URI like
+ <code>http://www.eclipse.org/uml2/3.0.0/UML#//Class</code>.
+ </p>
+ <p>By default, new tables can be created on
+ <em>any</em> instance of the
+ <em>Domain Class</em>. You can use the
+ <em>Precondition Expression</em> (available in the
+ <em>Advanced</em> category) to change this. If such an expression is specified, it will be evaluated in the context of the semantic element the user has selected, and only if the expression returns
+ <code>true</code> will the user be able to create a new table on this element.
+ </p>
+ <p>The default title for newly created table can be specified using the
+ <em>Title expression</em> (
+ <em>Advanced</em> category), which is evaluated in the context of the semantic element on which the table is created, and should return a string. If the expression is not specified, the default title is the label of the table description (of its
+ <em>Id</em> if no
+ <em>Label</em> is set) prefixed with the string
+ <code>"new "</code> (e.g.
+ <code>new Package Contents</code>).
+ </p>
+ <p>It is recommended that the
+ <em>Edition Table Description</em> be explicitly associated with the meta-model(s) of the semantic elements it will represent. You can add referenced meta-models from different sources in the
+ <em>Metamodels</em> property section of the
+ <em>Edition Table Description</em>. Sirius will work even without this association, but setting it explicitly will give you better feedback when validating your
+ <a href="../../Glossary.html#VSM">
+ <em>VSM</em>
+ </a>.
+ </p>
+ <p>The
+ <em>Initialization</em> and
+ <em>Show on startup</em> flags control whether table instances are created and/or opened automatically without user intervention. If
+ <em>Initialization</em> is set, then when the viewpoint which contains this table description is enabled, instances of this table description will be automatically created on all compatible semantic elements. If
+ <em>Show on startup</em> in set, then when a modeling project is opened which contains instances of this table description, they will be opened: if only one such representation exist, it will be opened automatically; is there are more than one, a dialog box will appear to allow the user to select which one(s) to open.
+ </p>
+ <p>Finally, the
+ <em>Initial Header Column Width</em> (
+ <em>Advanced</em> category) is specific to table descriptions (both edition tables and cross tables). It can be used to specify the default size (in pixels) of the left-most column of the table, which contains the labels of the elements represented by each line. If the value if 0 (the default), the column width will be computed from the initial content when the table is created.
+ </p>
+ <h3 id="table_tools">Table Tools</h3>
+ <p>Some tools which apply to the whole table are specified directly inside the
+ <em>Edition Table Description</em>:
+ </p>
+ <ul>
+ <li>
+ <em>Representation Creation Tools</em>: These tools (one for each kind of representation supported by Sirius) can be used to create (and open) a new representation from an existing table element. It will be available to end-users in the
+ <em>Navigate</em> context menu on compatible table elements. To configure the tool, simply select in the
+ <em>Mappings</em> property which kinds of lines the tool should appear on (you can be more precise using the
+ <em>Precondition</em> expression if necessary), and select the kind of representation which should be created using the
+ <em>Representation Description</em> property (in practice, one of
+ <em>Diagram Description</em>,
+ <em>Table Description</em> or
+ <em>Tree Description</em> depending on the tool). Normally, the new representation will be created on the semantic element represented by the tree item on which the user invoked the tool. Sometimes you want the tool to appear on one element, but create a representation on another one. In this case, use the
+ <em>Browse expression</em> (in the
+ <em>Advanced</em> category) to navigate from the element selected to the one one which the new representation should actually be created. Finally, any operation you specify in the body of the tool will be executed when the tool is invoked; you can use it to initialize the content of the model represented.
+ </li>
+ <li>
+ <em>Representation Navigation Tools</em>: These tools (one for each kind of representation supported by Sirius) are very similar to the previous ones. The only differences is that they allow users to navigate to existing representation instead of creating new ones. If such a tool exists, the
+ <em>Navigate</em> context menu on an element will contains an entry for each corresponding representation which already exists on the element selected (or reachable from the selected element using the
+ <em>Browse expression</em>). You can specify a
+ <em>Navigation name expression</em> (
+ <em>Advanced</em> category) to be used in the menu entry instead of using the title of the existing representation. This can be useful to make it more explicit what the relationship is between the current element and the target tree.
+ </li>
+ <li>
+ <em>Line Creation Tools</em> which are directly contained inside the
+ <em>Table Description</em> are used to create root table lines. They are available to end-users through a combo button in the main Eclipse tool-bar. To configure it, simply select the kind of line the tool will create in the
+ <em>Mapping</em> property, and specify the tool’s behavior using normal model operations.
+ </li>
+ </ul>
+ <h4 id="tools_specification">Tools Specification</h4>
+ <p>
+ <a href="../general/ToolsSpecification.html">Refer to Tools specification</a>
+ </p>
+ <h3 id="line_mappings">Line Mappings</h3>
+ <p>The lines which will appear in a table (and their organization in sub-lines) are defined by the
+ <em>Line</em> mapping elements inside the
+ <em>Table Description</em> element. A
+ <em>Table Description</em> contains
+ <em>Line</em> mappings which define which elements will appear as top-level lines of the table, while each
+ <em>Line</em> mapping can contain sub-mappings which define its own direct sub-lines. If an element (the table or a line mapping) contains several sub-mappings, the element’s content will appear in the order of the mappings: first all the instances of the first mapping, then the instances of the second one, etc.
+ </p>
+ <p>A
+ <em>Line</em> mapping is defined by a
+ <em>Domain Class</em> and a
+ <em>Semantic Candidates Expression</em>. The
+ <em>Semantic Candidates Expression</em> indicates where to look in the semantic model for elements which should be represented by the mapping. The expression is evaluated in the context of the parent’s semantic element (the parent being either the table itself or a parent line). It should return a set of semantic elements. Only those which are instances of the specified
+ <em>Domain Class</em> are retained and actually represented as instances of this mapping. The semantic element thus associated to each line is called the line’s
+ <em>target</em> element.
+ </p>
+ <p>You can associate more semantic elements to a line by defining the
+ <em>Associated Elements Expression</em> (in the
+ <em>Advanced Category</em>), which is evaluated in the context of the target and may return more semantic elements. Any change in the target element or one of the associated elements will automatically trigger a refresh of the line.
+ </p>
+ <p>The
+ <em>Header Label Expression</em> (in the
+ <em>Label</em> category) is evaluated in the context of a line’s target and should return the text to be shown for the line in the header column (on the left of the table).
+ </p>
+ <p>A
+ <em>Line</em> mapping may
+ <em>Reuse Sub Lines</em> (see the
+ <em>Import</em> category), including itself, as sub-mappings. The effect is exactly the same as if the reused mapping(s) were created as children if the parent. However because a mapping can reuse itself or one of its parent mapping, this allows to create table of infinite depth (or at least not bounded a priori). The
+ <em>Reused in Mappings</em> property is the symmetrical of
+ <em>Reused Sub Lines</em>: it shows you which line mappings reuse this one as a sub-line.
+ </p>
+ <h4 id="line_style">Line Style</h4>
+ <p>You can create
+ <em>Style</em> elements inside a line mapping to set the default style of all the cells on this line (note that this style override the column mappings one).
+ </p>
+ <p>A
+ <em>Foreground Style</em> element can be used to set the font size, font style (e.g. italic) and text color. A
+ <em>Background Style</em> can be used to set the background color. Both are optional.
+ </p>
+ <p>You can also specify
+ <em>Conditional styles</em> for the foreground. Each one is a normal foreground style wrapped in a predicate expression (evaluated in the context of the line’s semantic element). If conditional styles are specified, their conditions are tested in order, and the first one which matches is used. If no conditional style is defined, the
+ <em>Foreground Style</em> (or the default) is applied.
+ </p>
+ <h4 id="line_tools">Line Tools</h4>
+ <p>There are two kinds of tools which can be created inside line mappings (and apply to all instances of that mapping).</p>
+ <ul>
+ <li>
+ <em>Create Line Tool</em> are used to create a new lines. A mapping can contain several such tools. They appear in the context menu of the instances of the mapping, if the (optional)
+ <em>Precondition</em> of the tool holds for the instance’s target. A creation tool must specify what kind of
+ <em>Mapping</em> it will create. The actual behavior of the creation tool is defined in the tool’s body, using all the standard model operations.
+ </li>
+ <li>
+ <em>Delete Line Tool</em>, used to delete elements. If a line mapping does not define explicitly a deletion tool, the default behavior of the
+ <em>Delete line</em> operation is to remove the line’s semantic
+ <em>target</em> and all
+ <em>associated elements</em> from the semantic model. If you want a specific behavior, you must create a
+ <em>Delete Line Tool</em> explicitly and describe the behavior in the tool’s body. If you want to prevent the deletion of an element, you must create a
+ <em>Delete Line Tool</em> and set a
+ <em>Precondition</em> to return
+ <code>false</code> for the elements which should not be deleted.
+ </li>
+ </ul>
+ <h3 id="feature_column_mapping">Feature Column Mappings</h3>
+ <p>The columns which will appear in an edition table are defined by the
+ <em>Feature Column</em> mapping elements inside the
+ <em>Table Description</em> element. They are named
+ <em>Feature Column</em> mappings because they normally represent a property (maybe computed) of the elements which are represented by the table’s lines, and also to distinguish them from the kind of columns which appear in
+ <a href="#cross_tables">cross tables</a>.
+ </p>
+ <p>A
+ <em>Feature Column</em> mapping is defined by its
+ <em>Feature Name</em>, which should normally be the name of a valid feature (attribute or reference) of the element which appear in the tables' lines. If a line represents a semantic element
+ <em>S1</em> but you want on some column to show a property of an element reachable from
+ <em>S1</em> instead of
+ <em>S1</em> itself, you can use the
+ <em>Feature Parent Expression</em> (
+ <em>Advanced</em> category), which is evaluated in the context of
+ <em>S1</em> and should return an element
+ <em>S2</em>.
+ <em>S2</em> will be considered the
+ <em>target</em> element of the cell at this intersection instead of
+ <em>S1</em>.
+ </p>
+ <p>You can associate more semantic elements to the mapping using the
+ <em>Associated elements expression</em> in the
+ <em>Advanced</em> category. The expression will be evaluated in the context of the target semantic element of the cell.
+ </p>
+ <p>The
+ <em>Label Expression</em> is used to compute the text to show in each cell. It is evaluated for each cell in the context of its target semantic element. If you compute text for elements whose EClass have no common EStructuralFeatures (inherited or with same name), you can use
+ <code>*</code> as
+ <em>Feature Name</em> to skip the feature name validation during the cell creation.
+ </p>
+ <p>In tables, the contents of the cell is editable by default. Even with no direct edit tool specified, Sirius will try to interpret the text entered by the user according to the type of the feature the column represents (as defined by the
+ <em>Feature Name</em>. For example if a column represents a boolean attribute, Sirius will correctly interpret the strings
+ <code>"true"</code> and
+ <code>"false"</code> and set the value accordingly when the user edits a cell. You can disable this behavior by giving a
+ <em>Can Edit</em> expression, which is evaluated in the context of the semantic element of each individual cell. It should return
+ <code>false</code> if that cell should not be editable.
+ </p>
+ <p>Finally, the
+ <em>Header Label Expression</em> is used to compute the header of the column itself, and is evaluated in the context of the table’s target semantic element, and the
+ <em>Initial width</em>, if set to a non-zero value, is used as the initial width of the column.
+ </p>
+ <h4 id="column_styles">Column Styles</h4>
+ <p>Columns can contain style definition to set the style of all the cells on these columns. However, these styles can be overridden by the styles which may be present in the line mappings for the cells of this column. The style definition elements, including support for conditional styles, is the same as for style associated to line mappings. Refer to
+ <a href="#line_style">the corresponding section</a> for more details.
+ </p>
+ <h4 id="column_tools">Column Tools</h4>
+ <p>Column can currently only define a
+ <em>Label edit</em> tool, which will apply to all the cells of the column. It works like all edit The
+ <em>Edit Mask</em> element (contained inside the tool) is used to parse the new label’s value as entered by the user, and to select part of this label as input variables to the editing action’s body. The mask can contain substrings of the form
+ <code>{N}</code> where
+ <em>N</em> is a number. The parts of the new label’s value which correspond to these substring will be available as variables named <code>argN</code>. For example, with an edit mask of <code>{0}:{1}</code> and an input string entered by the user of <code>attr : EString</code>, the tool’s body would be executed with variables <code>arg0</code> set to <code>attr␣</code> and <code>arg1</code> set to <code>␣EString</code>.
+ </p>
+ <h2 id="cross_tables">Cross Tables</h2>
+ <p>
+ <em>Cross Tables</em> are slightly different from edition tables. They are optimized to represent relationship between elements in a matrix-like way. Both lines and columns represent elements, and each call at an intersection if a certain relationship exists between them. Cross tables also support sub-lines, but not sub-columns. However provided the right tools are specified, users can create and/or delete columns in addition to lines.
+ </p>
+ <p>Cross tables are specified using a
+ <em>Cross Table Description</em> element, which works exactly like
+ <a href="#edition_tables">
+ <em>Edition Table Description</em>
+ </a> elements. The differences appear in the type of elements they can contain.
+ </p>
+ <h3 id="cross_table_tools">Table Tools</h3>
+ <p>Cross tables can contain the same kinds of tools as edition tables (see
+ <a href="#table_tools">the corresponding section</a> for details). In addition, they can contain
+ <em>Create Column Tools</em>, which behave exactly like
+ <em>Create Line</em> tools, except that they apply to
+ <a href="#element_column_mapping">
+ <em>Element Column</em> mappings
+ </a> (see below) and are used to create new columns in the table.
+ </p>
+ <h4 id="cross_table_tools_specification">Tools Specification</h4>
+ <p>
+ <a href="../general/ToolsSpecification.html">Refer to Tools specification</a>
+ </p>
+ <h3 id="element_column_mapping">Element Column Mappings</h3>
+ <p>In cross tables, columns represent elements instead of elements' properties (as is the case for edition tables). The set of columns is defined by one or more
+ <em>Element Column</em> mappings. They are almost identical to
+ <a href="#line_mappings">line mappings</a>, except that:
+ </p>
+ <ul>
+ <li>they can not be nested (there are no “sub-columns” like there are sub-lines), and thus can not “reuse” column mappings either;</li>
+ <li>they can have an
+ <em>Initial width</em> (set in the
+ <em>Advanced</em> category).
+ </li>
+ </ul>
+ <p>
+ <em>Element Column</em> mappings can contain a
+ <em>Create Column Tool</em> and a
+ <em>Delete Column Tool</em>, which are specified and behave in a similar way than the
+ <em>Create Line</em> and
+ <em>Delete Line</em>
+ <a href="#line_tools">tools for line mappings</a>.
+ </p>
+ <p>They can also contain style definitions (including conditional style), which apply to all the cells in the column (unless overridden by the intersection mapping or by the line mapping if any).</p>
+ <h3 id="intersection_mapping">Intersection Mappings</h3>
+ <p>The line and element column mappings in a cross table define which lines and columns will be present in the tables, but not the contents of the cells. This is defined by
+ <em>Intersection</em> mappings. The
+ <em>Line Mapping</em> and
+ <em>Column Mapping</em> properties indicate which cells the mapping describes. The
+ <em>Label Expression</em>, evaluated in the context of the cell’s targets semantic element, should return the text to show in the cell, while the
+ <em>Can Edit</em> expression indicates whether or not the cell’s value can be edited by end-users.
+ </p>
+ <p>There are two slightly different use cases for intersection mapping, which use different sub-sets of the remaining properties:</p>
+ <ol>
+ <li>Intersections which represent a relation between the element on a line and the element on a column. For example, if both lines and columns represented UML classes, this could be the “super-class” reference between a class and those it inherits from;</li>
+ <li>Intersections which represent a semantic element (instead of just a relation) which is itself related to both the element on the line and the element on a column. To continue with the UML example, this would be used to represent UML Associations, which are full-blown objects representing a relationship between classes.</li>
+ </ol>
+ <p>If you are familiar with it, this is similar to
+ <em>Relation Based Edges</em> and
+ <em>Element Based Edges</em> in Sirius diagrams.
+ </p>
+ <p>In the first case (“relation-based intersection”), the semantic element of a cell will the the semantic element of the cell’s line. To configure such an intersection, you must only set the
+ <em>Column Finder Expression</em>: from a line’s semantic target element, it should return the semantic element of the column in which the cell should appear.
+ </p>
+ <p>The second use case (“element-based intersection”) is enabled by setting the
+ <em>Use Domain Class</em> flag in the
+ <em>Domain Based</em> category. You must then indicate the
+ <em>Domain Class</em> of the elements which will be represented by the cells, and the
+ <em>Semantic Candidates Expression</em>. The expression will be evaluated in the context of the whole table’s semantic element, and should return all elements (instances of the
+ <em>Domain Class</em>) which should be represented by cells. These elements will be the semantic target element of the cell. You can use the
+ <em>Precondition Expression</em> and
+ <em>Associated elements expression</em> (
+ <em>Advanced</em> category) with the same semantics as for other mappings. Finally, you must set both the
+ <em>Column Finder Expression</em> (
+ <em>General</em> category) and the
+ <em>Line Finder Expression</em> (
+ <em>Domain Based</em> category): they will both be evaluated in the context of the cell’s semantic element, and should return the semantic elements of the column and line at which the intersection should appear. In our example, these would be expressions which, from the
+ <em>Association</em> element, find the source and target classes of the association.
+ </p>
+ <h4 id="intersection_mapping_style">Intersection Style</h4>
+ <p>An
+ <em>Intersection</em> mapping can contain style elements, including conditional styles. If they are present, they override any style set on the corresponding column mapping or line mapping.
+ </p>
+ <h4 id="intersection_mapping_tools">Intersection Tools</h4>
+ <p>Intersection mappings can contain two kinds of tools:</p>
+ <ul>
+ <li>
+ <em>Label Edit</em> tools are standard “direct edit” tools, which allow end-users to edit a cell’s label. You can specify the actual changes in the model in the tool’s body.
+ </li>
+ <li>
+ <em>Create Cell Tools</em> are used when the user edits an initially empty cell, where there is no relation (or element relating) the line and column. It is defined like a
+ <em>Label Edit</em> tool (with an
+ <em>Edit Mask Variable</em> to obtain the text entered by the user), but instead of editing an existing relation, it should create a relation (e.g. add the class in the column as a super-class to the one on the line) or the element relating the line and column (e.g. create an
+ <em>Association</em> which links the classes).
+ </li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/tables/images/questionMarque.png b/doc/5.1.x/specifier/tables/images/questionMarque.png
new file mode 100644
index 0000000..09dda8c
--- /dev/null
+++ b/doc/5.1.x/specifier/tables/images/questionMarque.png
Binary files differ
diff --git a/doc/5.1.x/specifier/tables/images/table_description_editor.png b/doc/5.1.x/specifier/tables/images/table_description_editor.png
new file mode 100644
index 0000000..4a9ab77
--- /dev/null
+++ b/doc/5.1.x/specifier/tables/images/table_description_editor.png
Binary files differ
diff --git a/doc/5.1.x/specifier/tables/images/tricks.png b/doc/5.1.x/specifier/tables/images/tricks.png
new file mode 100644
index 0000000..a0679f0
--- /dev/null
+++ b/doc/5.1.x/specifier/tables/images/tricks.png
Binary files differ
diff --git a/doc/5.1.x/specifier/trees/Trees.html b/doc/5.1.x/specifier/trees/Trees.html
new file mode 100644
index 0000000..ca0ecd5
--- /dev/null
+++ b/doc/5.1.x/specifier/trees/Trees.html
@@ -0,0 +1,290 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Trees</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SpecifyingTreeEditors">Specifying Tree Editors</h1>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#SpecifyingTreeEditors">Specifying Tree Editors</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#tree_description">Tree Descriptions</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#tree_tools">Tree Tools</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#mappings">Tree Item Mappings</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#item_style">Item Style</a>
+ </li>
+ <li>
+ <a href="#item_tools">Item Tools</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="introduction">Introduction</h2>
+ <p>A tree is a representation which provides a hierarchical viewpoint on your data. It can provide a lot of information in a clear and concise way, and can be especially useful to progressively reveal more and more detailed information on a model when the user expands the tree elements to “dig into” the model.</p>
+ <p>Trees are probably the easiest kind of representation to define in Sirius. Do not hesitate to define small tree descriptions, even read-only, to provide alternative and synthetic viewpoints on your data, like type hierarchies, dependencies between elements, etc.</p>
+ <img border="0" src="./images/tree_description_editor.png"/>
+<em>
+<ul>
+<img src="images/tricks.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>
+ <em>use the <img src="images/questionMarque.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> icon to access the available fields tooltips:</em>
+<ul>
+ <li>
+ <b>Id</b> field: The identifier of this element. Must be unique. Changing this identifier will break existing user models which reference the old identifier.</li>
+ <li>
+ <b>Label</b> field: The label used to display this to the end-user.</li>
+ <li>
+ <b>Domain Class</b> field: Type of the element represented by the Node.</li>
+ <li>
+ <b>Semantic Candidates Expression</b> field:
+ <ul>
+ <li>Expected return type: a
+ <code>Collection<EObject></code> or an EObject.</li>
+ <li>vailable variables:
+ <ul>
+ <li> containerView: ecore.EObject | container of the current DTreeElement (variable is available if container is not null).</li>
+ <li> view: sirius.DTreeElement | current DTreeElement.</li>
+ <li> container: ecore.EObject | semantic target of $containerView (if it is a DSemanticDecorator).</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+</ul>
+</ul>
+</em>
+ <p>
+ <strong>Note</strong>: Advanced features like layers, filters and mapping imports which exist for diagrams are not currently available for trees.
+ </p>
+ <h2 id="tree_description">Tree Descriptions</h2>
+ <p>Similar to other kinds of Sirius representations, trees are configured by creating a
+ <em>Tree Description</em> element and its sub-elements inside a
+ <a href="../../Glossary.html#VSM">
+ <em>Viewpoint Specification Model</em>
+ </a>.
+ </p>
+ <p>A
+ <em>Tree Description</em> has a mandatory
+ <em>Id</em>, which must be unique in the context of the viewpoint it is part of, and an optional
+ <em>Label</em>. The
+ <em>Id</em> is used internally to identify the type of tree, and must be kept stable across different versions of the description (or it will make trees created with the old
+ <em>Id</em> unusable). The
+ <em>Label</em> is used in the UI and will be visible to end-users. It can be changed with no impact on existing representation files. If the
+ <em>Label</em> is not specified, the
+ <em>Id</em> is used instead in the UI.
+ </p>
+ <p>The mandatory
+ <em>Domain Class</em> attribute of a
+ <em>Tree Description</em> is the type of semantic element which are represented by the tree. In the
+ <em>Model Explorer</em>, end-users will be able to create new instances of this tree on semantic elements of this type (assuming the corresponding viewpoint is enabled in the
+ <em>Modeling Project</em>). The syntax for the domain class name can be the basic name, like
+ <code>Class</code>, a qualified name using name of the EMF EPackage which defines the type, like
+ <code>uml.Class</code>, or a fully qualified URI like
+ <code>http://www.eclipse.org/uml2/3.0.0/UML#//Class</code>.
+ </p>
+ <p>By default, new trees can be created on
+ <em>any</em> instance of the
+ <em>Domain Class</em>. You can use the
+ <em>Precondition Expression</em> (available in the
+ <em>Advanced</em> category) to change this. If such an expression is specified, it will be evaluated in the context of the semantic element the user has selected, and only if the expression returns
+ <code>true</code> will the user be able to create a new tree on this element.
+ </p>
+ <p>The default title for newly created trees can be specified using the
+ <em>Title expression</em>, which is evaluated in the context of the semantic element on which the tree is created, and should return a string. If the expression is not specified, the default title is the label of the tree description (of its
+ <em>Id</em> if no
+ <em>Label</em> is set) prefixed with the string
+ <code>"new "</code> (e.g.
+ <code>new Class Hierarchy</code>).
+ </p>
+ <p>It is recommended that the
+ <em>Tree Description</em> be explicitly associated with the meta-model(s) of the semantic elements it will represent. You can add referenced meta-models from different sources in the
+ <em>Metamodels</em> property section of the
+ <em>Tree Description</em>. Sirius will work even without this association, but setting it explicitly will give you better feedback when validating your
+ <a href="../../Glossary.html#VSM">
+ <em>VSM</em>
+ </a>.
+ </p>
+ <p>Finally, the
+ <em>Initialization</em> and
+ <em>Show on startup</em> flags control whether tree instances are created and/or opened automatically without user intervention. If
+ <em>Initialization</em> is set, then when the viewpoint which contains this tree description is enabled, instances of this tree description will be automatically created on all compatible semantic elements. If
+ <em>Show on startup</em> in set, then when a modeling project is opened which contains instances of this tree description, they will be opened: if only one such representation exist, it will be opened automatically; is there are more than one, a dialog box will appear to allow the user to select which one(s) to open.
+ </p>
+ <p>The main concepts which define a tree are:</p>
+ <ul>
+ <li>
+ <em>Tree Item</em> mappings, which describe the elements that will appear on this tree, and how they map to the underlying semantic elements they represent;
+ </li>
+ <li>
+ <em>Styles</em>, which describe the graphical appearance of these representation elements;
+ </li>
+ <li>
+ <em>Tools</em>, which describe the actions the end-user can perform on the tree and its items and their effect on the associated semantic elements.
+ </li>
+ </ul>
+ <h3 id="tree_tools">Tree Tools</h3>
+ <p>Some of the tools which can be defined on tree editors are specified directly inside the top-level
+ <em>Tree Description</em> element:
+ </p>
+ <ul>
+ <li>
+ <em>Create</em>: The
+ <em>Create</em> tools which are directly contained inside the
+ <em>Tree Description</em> are used to create root tree items. They are available to end-users through a combo button in the main Eclipse tool-bar. To configure it, simply select the kind of tree item the tool will create in the
+ <em>Mapping</em> property, and specify the tool’s behavior using normal model operations.
+ </li>
+ <li>
+ <em>Drop Tool</em>: When defined directly inside the
+ <em>Tree Description</em>, a
+ <em>Drop Tool</em> specifies what happens when the user drops an element at the root of the tree (i.e. inside the editor, but not on an existing tree item). The
+ <em>Drag source</em> property indicates whether the tool accepts elements dragged from a tree representation (value
+ <em>Tree</em>), from the
+ <em>Model Explorer</em> view (value
+ <em>Model</em>), or both. If such a drop is detected and the
+ <em>Precondition</em> evaluates to
+ <code>true</code>, then the body of the drop tool is executed, with the
+ <code>element</code> variable pointing to the semantic element being dropped and
+ <code>newContainer</code> the semantic element in which it is dropped (in this case the tree’s semantic element).
+ <i>WARNING</i>: if you choose
+ <em>Model</em> or
+ <em>Both</em> as source, your tool must be prepared to accept any type of source element which can be present in the
+ <em>Model Explorer</em> view, including elements which have no relation to the source mappings you specified for the tool. Use a precondition to check the nature of the element being dragged (available through the
+ <code>element</code> variable) to disable the tool source elements your tool does not support.
+ </li>
+ <li>
+ <em>Tree Creation</em>: This tool can be used to create (and open) a new tree from an existing tree item. It will be available to end-users in the
+ <em>Navigate</em> context menu on compatible tree items. To configure the tool, simply select in the
+ <em>Mappings</em> property which kinds of tree items the tool should appear on (you can be more precise using the
+ <em>Precondition</em> expression if necessary), and select which kind of tree should be created using the
+ <em>Tree Description</em> property. Normally, the new tree representation will be created on the semantic element represented by the tree item on which the user invoked the tool. Sometimes you want the tool to appear on one element, but create a representation on another one. In this case, use the
+ <em>Browse expression</em> (in the
+ <em>Advanced</em> category) to navigate from the element selected to the one in which the new tree should actually be created. Finally, any operation you specify in the body of the tool will be executed when the tool is invoked; you can use it to initialize the content of the model represented.
+ </li>
+ <li>
+ <em>Tree Navigation</em>: This tool is very similar to the previous one. The only differences is that it allows users to navigate to existing trees instead of creating new ones. If such a tool exists, the
+ <em>Navigate</em> context menu on an item will contains an entry for each corresponding tree which already exists on the element selected (or reachable from the selected element using the
+ <em>Browse expression</em>). You can specify a
+ <em>Navigation name expression</em> (
+ <em>Advanced</em> category) to be used in the menu entry instead of using the title of the existing tree. This can be useful to make it more explicit what the relationship is between the current element and the target tree.
+ </li>
+ </ul>
+ <h4 id="tools_specification">Tools Specification</h4>
+ <p>
+ <a href="../general/ToolsSpecification.html">Refer to Tools specification</a>
+ </p>
+ <h2 id="mappings">Tree Item Mappings</h2>
+ <p>Trees are recursive by nature. Their contents is specified using a single concept of
+ <em>Tree Item</em> mapping which can be composed recursively. A
+ <em>Tree Description</em> contains
+ <em>Tree Item</em> mappings which define which elements will appear at the top-level of the tree, while each
+ <em>Tree Item</em> mapping can contain sub-mappings which define its own direct content. If an element (the tree or a tree item mapping) contains several sub-mappings, the element’s content will appear in the order of the mappings: first all the instances of the first mapping, then the instances of the second one, etc.
+ </p>
+ <p>A
+ <em>Tree Item</em> mapping is defined by a
+ <em>Domain Class</em>, a
+ <em>Semantic Candidates Expression</em> and an optional
+ <em>Precondition Expression</em> (in the
+ <em>Advanced</em> category). The
+ <em>Semantic Candidates Expression</em> indicates where to look in the semantic model for elements which should be represented by the mapping. The expression is evaluated in the context of the parent’s semantic element (the parent being either the tree itself or the parent item). It should return a set of semantic elements. Only those which are instances of the specified
+ <em>Domain Class</em> and which also validate the optional
+ <em>Precondition expression</em> are retained and actually represented as instances of this mapping. The semantic element thus associated to each tree item is called the item’s
+ <em>target</em> element.
+ </p>
+ <p>You can associate more semantic elements to an item by defining the
+ <em>Associated Elements Expression</em> (in the
+ <em>Advanced Category</em>), which is evaluated in the context of the target and may return more semantic elements. Any change in the target element or one of the associated elements will automatically trigger a refresh of the tree item.
+ </p>
+ <p>A
+ <em>Tree Item</em> mapping may
+ <em>Specialize</em> another mapping, in which case it will inherit all of the specialized mapping’s properties for which it does not specify an explicit value.
+ </p>
+ <p>A
+ <em>Tree Item</em> mapping may
+ <em>Reuse</em> (see the
+ <em>Imports</em> category) existing mappings, including itself, as sub-mappings. The effect is exactly the same as if the reused mapping(s) were created as children of the parent. However because a mapping can reuse itself or one of its parent mapping, this allows to create trees of infinite depth (or at least not bounded a priori).
+ </p>
+ <p>Tree items are created lazily, only when the user expands a parent item. This means that if you define sub-mappings which use costly operations to create, the cost will only be paid when the user actually “digs into” the tree to the corresponding level of details. This also means that through reuse you can create trees of potentially infinite depth (as deep as the user chooses to expand them) without risking an infinite loop. Note however that once created tree items do not disappear if their parent is collapsed. They are only removed if the user explicitly deletes them.</p>
+ <p>The actual appearance of a tree item is defined by its
+ <a href="#item_style">style</a>, while its behavior is defined by the
+ <a href="#item_tools">tools</a> associated to it.
+ </p>
+ <h3 id="item_style">Item Style</h3>
+ <p>An item’s appearance is controlled by one or more
+ <em>Style</em> element(s) defined in the corresponding tree item mapping. Each tree item mapping
+ <em>must</em> contain exactly one default style (which is created automatically when the mapping itself is created), and
+ <em>may</em> contain one or more
+ <em>conditional styles</em>.
+ </p>
+ <p>An item’s style is comprised of a
+ <em>Label expression</em>, evaluated in the context of the item’s semantic target, and which should return the text to show for the item, and several configuration properties to control the font, style, color (both of the text and its background) and icon of the item. The default icon shown for an element (if
+ <em>Show icon</em> is set), is the one defined in the semantic meta-model for the item’s target element. You can specify a different one using the
+ <em>Icon path</em> property (in the
+ <em>Advanced</em> category). This is especially useful if you have several items which represent different aspects of the same semantic element and thus share the same target.
+ </p>
+ <p>
+ <em>Tree Item</em> mappings can have one ore more
+ <em>Conditional Style</em>. They are normal style elements with the same properties as described above, but wrapped in a
+ <em>Conditional Style</em> element which defines a boolean expression. If an item mapping contains such styles, then for each instance of the mapping, the conditional styles will first be tried, in the order of their definitions. The first style whose condition returns
+ <code>true</code> for the item’s target is used (and the remaining ones are not tested). If none of the conditional style apply, the default one is used. Note that because the conditions are tested in the order of definition, you should order them from the most likely to the least likely to optimize performance.
+ </p>
+ <h3 id="item_tools">Item Tools</h3>
+ <p>The behavior of a tree item is defined by the tools which are associated to its mapping. The tools which should apply to a tree item mapping are simply created inside the mapping itself. They can be:</p>
+ <ul>
+ <li>
+ <em>Creation Tool</em>, which is used to create a new Tree Item. A mapping can contain several such tools. They appear in the context menu of the instances of the mapping, if the (optional)
+ <em>Precondition</em> of the tool holds for the instance’s target. A creation tool must specify what kind of
+ <em>Mapping</em> it will create. The actual behavior of the creation tool is defined in the tool’s body, using all the standard model operations.
+ </li>
+ <li>
+ <em>Deletion Tool</em>, used to delete elements. If a mapping does not define explicitly a deletion tool, the default behavior of the
+ <em>Delete tree item</em> operation is to remove the item’s semantic
+ <em>target</em> and all
+ <em>associated elements</em> from the semantic model. If you want a specific behavior, you must create a
+ <em>Deletion tool</em> explicitly and describe the behavior in the tool’s body. If you want to prevent the deletion of an element, you must create a
+ <em>Deletion tool</em> and set a
+ <em>Precondition</em> to return
+ <code>false</code> for the elements which should not be deleted.
+ </li>
+ <li>
+ <em>Direct Edit Tool</em>, used to allow end-users to directly edit the label of a Tree Item (by double-clicking or pressing
+ <em>F2</em> or
+ <em>Return</em> on a Tree Item). It specifies how to interpret the new label value, and which changes to apply to the model element. The
+ <em>Edit Mask</em> element (contained inside the tool) is used to parse the new label’s value as entered by the user, and to select part of this label as input variables to the editing action’s body. The mask can contain substrings of the form
+ <code>{N}</code> where
+ <em>N</em> is a number. The parts of the new label’s value which correspond to these substring will be available as variables named <code>argN</code>. For example, with an edit mask of <code>{0}:{1}</code> and an input string entered by the user of <code>attr : EString</code>, the tool’s body would be executed with variables <code>arg0</code> set to <code>attr␣</code> and <code>arg1</code> set to <code>␣EString</code>.
+ </li>
+ <li>
+ <em>Drop Tool</em>: When defined inside a
+ <em>Tree Item</em> mapping, a
+ <em>Drop Tool</em> specifies what happens when the user drops an element onto an instance of the mapping. The
+ <em>Drag source</em> property indicates whether the tool accepts elements dragged from a tree representation (value
+ <em>Tree</em>), from the
+ <em>Model Explorer</em> view (value
+ <em>Model</em>), or both. If such a drop is detected and the
+ <em>Precondition</em> evaluates to
+ <code>true</code>, then the body of the drop tool is executed, with the
+ <code>element</code> variable pointing to the semantic element being dropped and
+ <code>newContainer</code> the semantic element in which it is dropped (in this case the tree’s semantic element).
+ </li>
+ <li>
+ <em>Pop-up menus</em> are used to add new menus and actions to the context menu associated to any Tree Item.
+ </li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/trees/images/questionMarque.png b/doc/5.1.x/specifier/trees/images/questionMarque.png
new file mode 100644
index 0000000..09dda8c
--- /dev/null
+++ b/doc/5.1.x/specifier/trees/images/questionMarque.png
Binary files differ
diff --git a/doc/5.1.x/specifier/trees/images/tree_description_editor.png b/doc/5.1.x/specifier/trees/images/tree_description_editor.png
new file mode 100644
index 0000000..f10692a
--- /dev/null
+++ b/doc/5.1.x/specifier/trees/images/tree_description_editor.png
Binary files differ
diff --git a/doc/5.1.x/specifier/trees/images/tricks.png b/doc/5.1.x/specifier/trees/images/tricks.png
new file mode 100644
index 0000000..a0679f0
--- /dev/null
+++ b/doc/5.1.x/specifier/trees/images/tricks.png
Binary files differ
diff --git a/doc/5.1.x/user/Sirius User Manual.html b/doc/5.1.x/user/Sirius User Manual.html
new file mode 100644
index 0000000..3a6c8be
--- /dev/null
+++ b/doc/5.1.x/user/Sirius User Manual.html
@@ -0,0 +1,58 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Sirius User Manual</title>
+ <link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SiriusUserManual">Sirius User Manual</h1>
+ <p>This document describes how to use modelers created using Sirius. This includes graphical, tabular and hierarchical (tree) modelers. The Sirius system includes everything necessary to easily
+ <em>define</em> these modelers (on any standard or Domain Specific Model/Language) and then
+ <em>use</em> them to create and manipulate actual models. This document is targeted to end users who will use already defined modelers. If you want to learn how to define your own, refer to the
+ <a href="../specifier/Sirius%20Specifier%20Manual.html">
+ <strong>Sirius Specifier Manual</strong>
+ </a>.
+ </p>
+ <p>Note that each specific modeler will have its own set of features, and not all of the make use of all the possibilities of Sirius while others may contain custom extensions. However they all share the same common behaviors, which are described here.</p>
+ <p>You will find the following sections:</p>
+ <ul>
+ <li>
+ <a href="general/Modeling%20Project.html">
+ <strong>Modeling Project</strong>
+ </a> explains how to use the simple UI to create and manage your models and their representations.
+ </li>
+ <li>
+ <a href="general/Aird_Editor.html">
+ <strong>Aird editor</strong>
+ </a> describes the Sirius entry point editor gathering all functionalities allowing to create and manage your models and representations and to enable/disable available viewpoints in a unified easy to use UI.
+ </li>
+ <li>
+ <a href="diagrams/Diagrams.html">
+ <strong>Diagrams</strong>
+ </a> shows all the common features of graphical modelers made with Sirius.
+ </li>
+ <li>
+ <a href="sequences/Sequence%20Diagrams.html">
+ <strong>Sequence Diagrams</strong>
+ </a> are a special case of diagram with some specific behaviors which are described here.
+ </li>
+ <li>
+ <a href="tables/Tables.html">
+ <strong>Tables</strong>
+ </a> covers how to use the two kinds of tabular representations supported by Sirius: edition tables and cross-tables.
+ </li>
+ <li>
+ <a href="trees/Trees.html">
+ <strong>Trees</strong>
+ </a> describes the behavior of tree (hierarchical) editors built with Sirius.
+ </li>
+ <li>
+ <a href="properties/Properties%20View.html">
+ <strong>Properties Views</strong>
+ </a> describes behaviors specific to Sirius-defined properties views.
+ </li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/diagrams/Diagrams.html b/doc/5.1.x/user/diagrams/Diagrams.html
new file mode 100644
index 0000000..a041d5d
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/Diagrams.html
@@ -0,0 +1,1594 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Diagrams</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="DiagramEditors">Diagram Editors</h1>
+ <p>This document explains how to use diagram editors/modelers supported by Sirius which allow to view and manipulate data in a graphical way.</p>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#DiagramEditors">Diagram Editors</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#features_overview">Features Overview</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#Creatingdiagrams">Creating diagrams</a>
+ </li>
+ <li>
+ <a href="#ManagingDiagrams">Managing Diagrams</a>
+ </li>
+ <li>
+ <a href="#Movingthediagram">Moving the diagram</a>
+ </li>
+ <li>
+ <a href="#zooming_diagram_id">Zooming the diagram</a>
+ </li>
+ <li>
+ <a href="#Resizingelements">Resizing elements</a>
+ </li>
+ <li>
+ <a href="#Movingelements">Moving elements</a>
+ </li>
+ <li>
+ <a href="#Manageedges">Manage edges</a>
+ </li>
+ <li>
+ <a href="#distribute">Distribute elements</a>
+ </li>
+ <li>
+ <a href="#reset_origin">Reset Diagram or Container Origin</a>
+ </li>
+ <li>
+ <a href="#Hidingelements">Hiding elements</a>
+ </li>
+ <li>
+ <a href="#Validatingthemodel">Validating the model</a>
+ </li>
+ <li>
+ <a href="#Filters">Filters</a>
+ </li>
+ <li>
+ <a href="#Exportingimages">Exporting images</a>
+ </li>
+ <li>
+ <a href="#Batchimagesexport">Batch images export</a>
+ </li>
+ <li>
+ <a href="#PortshiftingPortDragandDrop">Port shifting - Port Drag and Drop</a>
+ </li>
+ <li>
+ <a href="#copy_paste_format">Copy/paste of format</a>
+ </li>
+ <li>
+ <a href="#diagram_element_pinning">Diagram element pinning</a>
+ </li>
+ <li>
+ <a href="#Layoutingmodearrangeyourdiagramswithoutmodifyingsemanticmodels">Layouting mode: arrange your diagrams without modifying semantic models</a>
+ </li>
+ <li>
+ <a href="#synchronized_diagram">Synchronized/Unsynchronized diagram</a>
+ </li>
+ <li>
+ <a href="#UsingRegularExpressionstoFindDiagramElements">Using Regular Expressions to Find Diagram Elements</a>
+ </li>
+ <li>
+ <a href="#quick_outline">Quick Outline</a>
+ </li>
+ <li>
+ <a href="#styleCustomizations">Style customizations </a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#reference">Reference</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#GraphicalArea">Graphical Area</a>
+ </li>
+ <li>
+ <a href="#Palette">Palette</a>
+ </li>
+ <li>
+ <a href="#ref_tabbar">Tab-bar</a>
+ </li>
+ <li>
+ <a href="#PropertiesView">Properties View</a>
+ </li>
+ <li>
+ <a href="#Outline">Outline</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#preferences">Preferences</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#GlobalPreferences">Global Preferences</a>
+ </li>
+ <li>
+ <a href="#Appearance">Appearance</a>
+ </li>
+ <li>
+ <a href="#Printing">Printing</a>
+ </li>
+ <li>
+ <a href="#RulersAndGrid">Rulers And Grid</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="introduction">Introduction</h2>
+ <p>Sirius provides support for diagrammatic representations, which represent information in a graphical way. Diagrams are the main and most sophisticated type of representations supported by Sirius.</p>
+ <p>
+ <img border="0" src="images/diagram_sample1.png"/>
+ </p>
+ <p><div style="display:none">
+ <strong>TODO</strong> Add other sample screenshots showing various kinds of diagrams.</div>
+ </p>
+ <p>A diagram editor is divided in three areas:</p>
+ <ol>
+ <li>the
+ <span style="color:orange">main graphical</span> area, which shows the elements and supports direct interaction with them;
+ </li>
+ <li>the
+ <span style="color:red">palette</span>, which gives access to additional tools (for example creation tools to add new elements to the diagram);
+ </li>
+ <li>the
+ <span style="color:green">
+ <em>tabbar</em>
+ </span> at the top of the graphical area, which provides additional, more global operations.
+ </li>
+ </ol>
+ <p>
+ <img border="0" src="images/diagram_sample_annotated.png"/>
+ </p>
+ <p>In addition to these areas which are immediately visible inside the diagram editor, it is also possible to interact with the diagram and its elements through the
+ <em>Properties View</em> and through
+ <em>contextual menus</em> available on the graphical elements themselves and on the diagram’s background. When the current editor is a Sirius diagram, the Eclipse
+ <em>Outline</em> view shows a graphical overview of the diagram which can be used to navigate inside it if the whole diagram is not visible in the main area.
+ </p>
+ <p>This document is structured in three parts.
+ <a href="#features_overview">The first part</a> gives an overview of all the main features, and is organized from a functional perspective. For example it contains a section which explains the different ways available to control which elements are hidden or not on a diagram, with links to the corresponding parts of the reference section.
+ <a href="#reference">The second part</a> is a reference and describes all the features available by looking at each of the main areas of the diagram editors (the palette, the tab-bar etc.). Finally,
+ <a href="#preferences">the last part</a> gives a reference on all the preferences and configuration parameters which can affect the look and feel of diagrams.
+ </p>
+ <p>Note that as always with Sirius, some of the features described below may or may not be available with all specific kinds of diagrams. It all depends on which features the person who
+ <em>specified</em> (configured) the diagram decided to support. For example, the names and effect of the tools available in the palette will be different for each graphical modeler. Refer to the documentation of the specific modeler if available for more precise details.
+ </p>
+ <h2 id="features_overview">Features Overview</h2>
+ <h3 id="Creatingdiagrams">Creating diagrams</h3>
+ <p>Creating new diagrams works in the same as for any other kinds of representation in Sirius. There are three main ways:</p>
+ <ol>
+ <li>In the
+ <em>Model Explorer</em> view, find the semantic element you want to create a diagram on (it must be part of a semantic model inside a
+ <em>Modeling Project</em>), and in the context menu (available with a right click), select the
+ <em>New representation...</em> sub-menu. It will give you a list of all the representations which can be created on this object, some of which may be diagrams (there may be other kinds of representations available too, like tables for example). Just select the type of diagram you want, and enter the name of the new diagram in the dialog box which appears then. The newly created diagram will automatically open.
+ </li>
+ <li>In the
+ <em>Model Explorer</em> view, right-click on the
+ <em>Modeling Project</em> which contains the semantic element to represent and select
+ <em>Create Representation</em>. In the wizard which appears, first select the type of diagram to create (if diagrams are available), and in the next page, select the semantic element to create it on. Only the semantic elements which are compatible with the selected diagram type will be available. Just select the element you want to represent, finish the wizard, and enter the name of the new diagram in the dialog box which appears then. The newly created diagram will automatically open.
+ </li>
+ <li>Finally, on some representations (diagrams or other kinds), it may be possible to create new diagrams directly from the context menu of the element on which you want to create the diagram. If this is possible (this depends on the representations' configuration), it will be available in the
+ <em>Navigate</em> category of the element’s context menu, with a name starting with
+ <em>New detail:</em>. Once again, after selecting the type of diagram to create, enter the name of the new diagram in the dialog box which appears. The newly created diagram will automatically open.
+ </li>
+ </ol>
+ <p>Note that the set of diagrams you can create will depend both on the type of the selected element and on the set of viewpoints which are currently enabled.</p>
+ <p>When you create a new diagram, unless you have unchecked the
+ <a href="#synchronized_diagram">
+ <em>Synchronized mode for new diagrams</em>
+ </a> preference, it will be initially populated with graphical elements according to its configuration and the current state of the semantic model(s) it represent. If the preference is checked, the diagram will be created empty, and only the elements you ask explicitly to be represented (through tools, which will be specific to each kind of diagram) will appear on the diagram.
+ </p>
+ <h3 id="ManagingDiagrams">Managing Diagrams</h3>
+ <p>Opening existing diagrams and renaming or deleting them works exactly as for any other kind of representation. Refer to the general documentation about the
+ <em>Modeling Project</em> UI for details.
+ </p>
+ <h4 id="RulersGrid">Rulers & Grid</h4>
+ <p>Several behaviors concerning the diagram elements editing is conditioned by properties of the diagram accessible through the
+ <em>Rulers & Grid</em> tab of the
+ <em>Properties</em> view of the diagram.
+ <br/>
+ <img border="0" src="images/properties_view_rulers_and_grid_tab.png"/>
+ </p>
+ <h5 id="ShowRuler">Show Ruler</h5>
+ <p>
+ <em>Display/Show Ruler</em>: Display an horizontal and vertical ruler according to
+ <em>Measurement/Ruler Units</em> property.
+ </p>
+ <h5 id="ShowGrid">Show Grid </h5>
+ <p>
+ <em>Display/Show Grid</em>: Display a grid in background of the diagram according to
+ <em>Measurement/Grid Spacing</em> and
+ <em>Grid Line</em> properties. This grid can be in front of all figures if the property
+ <em>Grid In Front</em> is enabled.
+ </p>
+ <h5 id="Snaptogrid">Snap to grid</h5>
+ <p>Capability to allow edit parts to snap to the grid when editing (during creation, moving or resizing). It is also possible to have connection bendpoints snap to it. Grid snapping and visibility are two distinct properties, and it is possible to enable one without the other.</p>
+ <h5 id="snap_to_shapes">Snap to shapes</h5>
+ <p>The
+ <em>Snap to shapes</em> feature allows you to quickly align parts being dragged or resized to other parts in the diagram or that share the same parent (e.g: edit parts inside a compartment can only snap to each other). The snap is effective on top, bottom, right, left and center of the figure. Feedback is shown in the form of a gray line when a part is being attached to another part.
+ <br/>This drag part of this feature is also available on border nodes since Sirius 4.1.0. Note: For border nodes, the snap is effective only on the center of the figure. This is why the resize part is not handled for border nodes.
+ <br/>
+ <img border="0" src="images/snap_to_shape.png"/>
+ </p>
+ <p>By pressing the <kdb>F4</kdb> shortcut key, it is possible to temporarily enable the snap to all shapes currently visible on the diagram. Some screenshots of this feature are shown below.
+ <br/>
+ <img border="0" src="images/snap_to_all_shapes.png"/>
+ <br/>
+ <img border="0" src="images/snap_to_all_shapes_2.png"/>
+ </p>
+ <h3 id="Movingthediagram">Moving the diagram</h3>
+ <p>When the diagram is larger than the editor area, you can move it in all directions by pressing the middle-button and dragging the mouse (keeping the button pressed).</p>
+ <p><video height="240" src="videos/moveInAllDirections.mp4" target="_self" autoplay="autoplay" loop="loop"></video></p>
+ <h3 id="zooming_diagram_id">Zooming the diagram</h3>
+ <p>The zoom on a diagram can be done by using the tools in the palette like explained in
+ <a href="#standardToolId">Chapter Standard Tools</a>.
+ <br/>Or by using the combination of the keyboard key
+ <em>CTRL</em> and the mouse wheel. Since Sirius 4.1.0, in this case, the zoom is done on the mouse location instead of the center of the editor.
+ </p>
+ <h3 id="Resizingelements">Resizing elements</h3>
+ <p>If the specifier has authorized it, it is possible to resize a shape by dragging them until they are the size that you want.</p>
+ <p>There are specific shortcuts to change the resize behavior:</p>
+ <ul>
+ <li>CTRL (or ALT for Mac users): Centered resize (expands the shape on both opposite sides)</li>
+ <li>SHIFT: Resize that keeps the ratio</li>
+ <li>ALT (or CTRL for Mac users): Resize without snap (temporarily disables the snap during the resize if it is activated). </li>
+ <li>F3: Resize with children location relative to the parent. If the shape is resized to the left, upwards, or both, the children (contained nodes for container and border nodes for all shapes) are moved with the same offset than the resize.</li>
+ <li>F4: Resize with snap to all shapes (if the
+ <a href="#snap_to_shapes">Snap to shapes</a> is already activated for the current diagram)
+ </li>
+ </ul>
+ <h4 id="Compartments">Compartments</h4>
+ <p>The resize of compartments might evolve in future versions. The current behavior is to redistribute space between adjacent compartments and to resize the first/last compartment when the compartmented container is resized from top/bottom for a vertical stack and left/right for an horizontal one.</p>
+ <p>When resizing a compartmented container or a compartment from the top or from the left, the F3 shortcut configures the same behaviors than on standard containers (see previous section). </p>
+ <p>On
+ <em>experimental</em> structures of containers with compartmented compartments, the F3 shortcut also allows to disable the resize propagation to manually correct the computed layout and remove empty space (
+ <em>experimental</em>). This might occur when there are several levels of compartments without the same number of compartments on each level. The corrective resize can be done on the last compartments of each compartmented container (from bottom for vertical stacks and from right for horizontal stacks).
+ </p>
+ <h3 id="Movingelements">Moving elements</h3>
+ <p>There are specific shortcuts to change the move behavior:</p>
+ <ul>
+ <li>SHIFT: Constrained move (only vertical or horizontal move is authorized at once).</li>
+ <li>ALT (or CTRL for Mac users): Ignore snap while dragging (temporarily disables the snap during the move if it is activated).</li>
+ <li>F3: Move the edge source and target if pressed during the edge move. See the “Move edge group” subsection below for more details. </li>
+ <li>F4: Move with snap to all shapes (if the
+ <a href="#snap_to_shapes">Snap to shapes</a> is already activated for the current diagram)
+ </li>
+ </ul>
+ <h3 id="Manageedges">Manage edges</h3>
+ <h4 id="Snapbackedgelabels">Snap back edge labels</h4>
+ <p>All visible edge labels can be snapped back to their default position by using the action
+ <em>Snap back label(s)</em>. This action is available within the edge contextual menu under the format section
+ <em>Format/Snap back label(s)</em>:
+ <br/>
+ <img border="0" src="images/snap-back-label.png"/>
+ </p>
+ <p>The result of this action is visible here:
+ <br/>
+ <img border="0" src="images/snapped-back-label.png"/>
+ </p>
+ <p>This action is also available individually for each visible label of an edge. To use it, you have to use the action
+ <em>Snap Back</em> under the label contextual menu
+ <em>Format/Snap Back</em>:
+ <br/>
+ <img border="0" src="images/snap-back-label-from-label.png"/>
+ </p>
+ <p>The result of this action is visible here: </p>
+ <p>
+ <img border="0" src="images/snapped-back-label-from-label.png"/>
+ </p>
+ <h4 id="Movebendpoints">Move bend-points</h4>
+ <p>It is possible to snap the bend-points to all shapes by pressing <kdb>F4</kdb> shortcut key during the move. This feature is only available if the
+ <a href="#snap_to_shapes">Snap to shapes</a> is already activated for the current diagram. As for
+ <em>Snap to grid</em>, and unlike to snap for node, there is no guide drawn during the move.
+ </p>
+ <h4 id="RemoveBendpoints">Remove Bend-points</h4>
+ <p>You can define some bend-points (or inflection points) on an edge. It is possible to remove bend-points to retrieve simple edge.
+ <br/>For oblique edges, all bend-points will be removed to retrieve the original Straight edge.
+ </p>
+ <p>The edge state just after its creation:
+ <br/>
+ <img border="0" src="images/beforeBendpoints.png"/>
+ </p>
+ <p>The user defines some bend-points:
+ <br/>
+ <img border="0" src="images/withBendpoints.png"/>
+ </p>
+ <p>The user executes the “Remove Bend-points” action:
+ <br/>
+ <img border="0" src="images/afterRemoveBendpoints.png"/>
+ </p>
+ <p>For rectilinear edges, bend-points will be removed to retrieve a rectilinear edge with source and target connection points centered on the middle of the source or target node appropriate side. One additional bend-point is inserted if source side and target side are in opposite direction. Two intermediates bend-points are inserted if source side and target side are in the same direction.
+ <br/>If number of bend-points can not be reduced, remove action will be inefficient (for example, case when the rectilinear edge is straight).
+ </p>
+ <p>The rectilinear edge after defining some bend-points:
+ <br/>
+ <img border="0" src="images/rectilinearWithBendpoints.png"/>
+ </p>
+ <p>The user executes the “Remove Bend-points” action:
+ <br/>
+ <img border="0" src="images/rectilinearAfterRemoveBendpoints.png"/>
+ </p>
+ <p>This action is available within the edge context menu or by using the shortcut “Ctrl” + “Shift” + “-” and it is not available on edges with a “Tree” routing style.</p>
+ <h4 id="straighten_an_edge">Straighten edges</h4>
+ <h5 id="Straightenasingleedge">Straighten a single edge</h5>
+ <p>There are eight actions to straighten an edge, i.e. to transform an edge to an horizontal, or vertical, straight edge (with only one starting point and one ending point).
+ <br/>If the edge is connected to a border node, the border node is moved too.
+ </p>
+ <p>These actions can be triggered on edge contextual menu
+ <em>Layout/Straighten</em>:
+ </p>
+ <p>
+ <img border="0" src="images/straightenToMenu.png"/>
+ </p>
+ <p>and also in the tabbar if at least one edge is selected: </p>
+ <p>
+ <img border="0" src="images/straightenToTabbarButton.png"/>
+ </p>
+ <p>There are two distinct kinds of straightening actions. The following examples show how they can be used.</p>
+ <p>Example for horizontal cases of result with the same initial state (the moved nodes are in red): </p>
+ <ul>
+ <li>Result after
+ <em>Straighten to top</em> action:
+ <img border="0" src="images/straightenToTop.png"/>
+ </li>
+ <li>Result after
+ <em>Straighten with left side pinned</em> action:
+ <img border="0" src="images/straightenWithLeftPinned.png"/>
+ </li>
+ <li>Result after
+ <em>Straighten with right side pinned</em> action:
+ <img border="0" src="images/straightenWithRightPinned.png"/>
+ </li>
+ <li>Result after
+ <em>Straighten to bottom</em> action:
+ <img border="0" src="images/straightenToBottom.png"/>
+ </li>
+ </ul>
+ <p>Example of initial state of vertical cases:
+ <img border="0" src="images/straightenVerticalInitialState.png"/>
+ </p>
+ <ul>
+ <li>Result after
+ <em>Straighten to left</em> or
+ <em>Straighten with bottom side pinned</em> action:
+ <img border="0" src="images/straightenToRight.png"/>
+ </li>
+ <li>Result after
+ <em>Straighten to right</em> or
+ <em>Straighten with top side pinned</em> action:
+ <img border="0" src="images/straightenToLeft.png"/>
+ </li>
+ </ul>
+ <p>The action can be disabled (grayed menu) in some conditions:</p>
+ <ul>
+ <li>The action is not possible because it does not respect the source or target node boundaries.</li>
+ <li>The source and the target of the edge are not on the same “axis” (left and right sides, or, top and bottom sides).</li>
+ <li>After the action, the border node (source or target) would be overlapped by another border node.</li>
+ <li>A straighten action will be disabled if the
+ <a href="../../specifier/diagrams/Diagrams.html#edgecentering">edge centering</a> constraint will be violated. For oblique edges, the action is disabled if at least one side is centered. For rectilinear edges, the action is disabled if the moved side is centered. There is an exception to this rule when the edge centering is activated on both source and target, and both source and target are border nodes.
+ </li>
+ <li>The source or the target of the edge is another edge.</li>
+ <li>The source and the target is the same element.</li>
+ </ul>
+ <p>The action is available (menu is displayed) if the selection contains at least one edge (note, labels and text attachments are not considered as edges). The menu will show all actions available for all edges in the selection. So if a straighten to top is available on one edge and straighten to left on another, both action will be available. Their execution will only affects the edges compatible with it.</p>
+ <h5 id="Straightenmanyedges">Straighten many edges</h5>
+ <p>The straighten actions can be triggered on one edge but also in case of a multi-selection containing more than one edges.</p>
+ <p>In this case the straighten actions available will be the union of actions available for each edges of the selection. I.e if an edge can be only straighten to top and another edge in the selection can be only straighten to top, then available actions on the selection of both edges will be both the top and left actions.</p>
+ <p>When executing a straighten action, only edges from the selection that can be affected by this action will be impacted (if a constraint prevent an edge to be straighten to the direction of the executed action, then it is untouched). </p>
+ <h4 id="move_edge_group">Move edge group</h4>
+ <p>In specific cases, we can find edges connected to border nodes. For example in a diagram representing data flows, exchanges are connected to port in and port out. When the user wants to move an exchange on a layouted diagram, he has to move the source port, then the target port and possibly move some bendpoints of the edge.
+ <br/>This feature aims to move the group {edge, labels, ports} in a single
+ <i>drag like</i> operation when using the F3 shortcut and drag/move the edge. The F3 key has no effect if you attempt a reconnect by moving the first or last edge end.
+ </p>
+ <p>Example when activating the tool and moving the second edge toward the top:
+ <br/>
+ <img border="0" src="images/moveEdgeGroup1.png"/>
+ </p>
+ <p>The final result:
+ <br/>
+ <img border="0" src="images/moveEdgeGroup2.png"/>
+ </p>
+ <p>The edge group moving is authorized only if these conditions are met:</p>
+ <ul>
+ <li>A border node as source.</li>
+ <li>A border node as target.</li>
+ <li>Source node has only one connection: the moved edge.</li>
+ <li>Target node has only one connection: the moved edge.</li>
+ <li>Source and target are on the same “axis”:
+ <ul>
+ <li>located on west or east sides of their respective parent (could be the same).</li>
+ <li>located on north or south sides of their respective parent (could be the same).</li>
+ </ul>
+ </li>
+ </ul>
+ <p>Examples of authorized moving:
+ <br/>
+ <img border="0" src="images/compoundmoves2.png"/>
+ </p>
+ <p>Furthermore, since Sirius 4.1, it is possible to move several edge groups at once. However, the selection needs to validate the following rules:</p>
+ <ul>
+ <li>each selected elements must be an edge with border nodes as source and target.</li>
+ <li>each edge groups must be horizontal (source and target on the west or east border) or vertical (source and target on the north or south border).</li>
+ <li>each edge groups must remain in its source and target parent bounds at the end of the move. Therefore, the move is not limited by the primary selection only (the edge that is grabbed to move the whole selection) but by each edge group.</li>
+ </ul>
+ <p>Note that an edge group new location corresponding to the former location of another edge group in the selection is valid.</p>
+ <h4 id="edge_label_attachment">Display attachment link between edge and its labels</h4>
+ <p>It is possible to display an attachment link between an edge and its labels when edge or label is selected. This is not the default behavior but it can be activated by a preference in
+ <em>Sirius/Sirius Diagram/Connections</em> preference page.
+ </p>
+ <p>
+ <img border="0" src="images/edgeLabelAttachment_preference.png"/>
+ </p>
+ <p>If the edge is selected, one attachment is displayed for all associated labels. </p>
+ <p>
+ <img border="0" src="images/edgeLabelAttachment_edgeSelected.png"/>
+ </p>
+ <p>If a label is selected, only the attachment between the edge and this label is displayed.</p>
+ <p>
+ <img border="0" src="images/edgeLabelAttachment_labelSelected.png"/>
+ </p>
+ <h3 id="distribute">Distribute elements</h3>
+ <p>Four new actions allow to distribute shapes: </p>
+ <p>
+ <img border="0" src="images/distribute_initialState.png"/>
+ </p>
+ <ul>
+ <li>Distribute centers horizontally: Distributes the selected shapes so that the gap between horizontal centers of each selected shapes will be the same.</li>
+ </ul>
+ <p>
+ <img border="0" src="images/distribute_Centers.png"/>
+ </p>
+ <ul>
+ <li>Distribute gaps horizontally: Distributes the selected shapes so that the gap between the left side and the right side of each consecutive shapes will be the same.</li>
+ </ul>
+ <p>
+ <img border="0" src="images/distribute_WithUniformGap.png"/>
+ </p>
+ <ul>
+ <li>Distribute centers vertically: Distributes the selected shapes so that the gap between vertical centers of each selected shapes will be the same.</li>
+ </ul>
+ <ul>
+ <li>Distribute gaps vertically: the gap between the bottom side and the top side of each consecutive shapes will be the same.</li>
+ </ul>
+ <p>These new actions are also available in contextual menu
+ <em>Format/Distribute</em> or in menu bar _ Diagram/Distribute_.
+ </p>
+ <p>Only the top level shapes of the selection are retained for these actions: if inner shapes, border labels or edges are selected, they are ignored.
+ <br/>These actions are enabled only if the selected shapes have the same direct parent. At least 3 shapes should be selected to enable distribute actions.
+ <br/>For border nodes, they will be enabled only if all selected border nodes have the same parent and are on the same axis (top and bottom sides for horizontal actions, left and right for vertical actions). The overlap is forbidden for border nodes, so in some conditions (location already used), these actions may not have accurate results.
+ </p>
+ <h4 id="Firstandlastshapes">First and last shapes</h4>
+ <p>For all distribute actions, the first and the last shapes do not move. The first and last shapes do not depend on the selection order. They depend on the location of each selected shapes and the chosen action.</p>
+ <p>For horizontal distribution with uniform gaps:</p>
+ <ul>
+ <li>the first shape is the leftmost one (with the minimum x location). If several shapes have the same x location, the highest one is the first.</li>
+ <li>the last shape is the rightmost one (with the right side with the maximum x coordinate). If several shapes are aligned to the right, the lowest one is the last.</li>
+ </ul>
+ <p>For horizontal centered distribution:</p>
+ <ul>
+ <li>the first shape is the leftmost one (with its center at the minimum x coordinate). If several shapes are aligned on center, the one with the highest center is the first.</li>
+ <li>the last shape is the rightmost one (with its center at the maximum x coordinate). If several shapes are aligned by center, the one with the lowest center is the last.</li>
+ </ul>
+ <p>For vertical distribution with uniform gaps:</p>
+ <ul>
+ <li>the first shape is the highest one (with the minimum y location). If several shapes have the same y location, the leftmost one is the first.</li>
+ <li>the last shape is the lowest one (with the bottom side with the maximum y coordinate). If several shapes are aligned to the bottom, the rightmost one is the last.</li>
+ </ul>
+ <p>For vertical centered distribution:</p>
+ <ul>
+ <li>the first shape is the highest one (with its center at the minimum y coordinate). If several shapes are aligned on middle, the leftmost one is the first.</li>
+ <li>the last shape is the lowest one (with the bottom side with the maximum y coordinate). If several shapes are aligned by middle, the rightmost one is the last.</li>
+ </ul>
+ <h3 id="reset_origin">Reset Diagram or Container Origin</h3>
+ <p>This action is available within the diagram or containers contextual menu (“Reset Origin”) or via “M1” + “HOME” shortcut.
+ <br/>The diagram (or container) bounds (the rectangle formed by the highest, the leftmost, the lowest and the rightmost elements) can have a negative origin or can be shifted toward the bottom-right with a blank zone at the top-left.
+ <br/>This action aims to move all diagram (or container) elements so that the diagram (or container) retrieves its origin while keeping the element layout.
+ </p>
+ <p>This action can be launched on several containers at same time.</p>
+ <p>This is an example of a diagram with a blank zone between the origin location and the figures bounds:
+ <br/>
+ <img border="0" src="images/reset_origin_before.png"/>
+ </p>
+ <p>After applying the action, the diagram figures are moved toward the top-left origin location:
+ <br/>
+ <img border="0" src="images/reset_origin_after.png"/>
+ </p>
+ <h4 id="Specificcases">Specific cases</h4>
+ <ul>
+ <li>Elements hidden by the user are not considered to compute the shift size but are shifted as the other shapes. That means if an hidden element is located at the top-left corner, the diagram coordinates will turn negative if the user reveals it after having executed the “Reset Origin” action.</li>
+ <li>Edges hidden because of a masked source or target are taken in account to compute the diagram bounds:</li>
+ </ul>
+ <p>
+ <img border="0" src="images/reset_origin_visible_edge.png"/>
+ <br/>After having scrolled the container, one of the edge end is masked so the edge is hidden. This one will be considered to compute the diagram bounds:
+ <br/>
+ <img border="0" src="images/reset_origin_masked_edge.png"/>
+ </p>
+ <h3 id="Hidingelements">Hiding elements</h3>
+ <p>Every graphical element on a diagram except compartments can be hidden explicitly. To do that, simply right click on the graphical element (or elements if you want to hide several elements at once) you want to hide. Then, choose
+ <i>Show/Hide</i> /
+ <i>Hide Element</i>. The graphical element is now hidden from view.
+ </p>
+ <p>The icon in the tool-bar changes showing a “check box” on it as soon as at least one element has been hidden, to remind you that what you see is not a complete view of the model being represented:</p>
+ <p>
+ <img border="0" src="images/diagram_editor11.png"/>
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor12.png"/>
+ </p>
+ <p>The element can also be hidden from the tool-bar using the
+ <i>Hide element</i> button.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor11_tabbar.png"/>
+ </p>
+ <p>It is also possible to hide an element from the outline view. Choose outline mode to see the semantic model in a tree viewer. You can now right click on an element and choose
+ <em>Hide element</em>.
+ </p>
+ <p>There are two ways to reveal hidden elements:</p>
+ <ul>
+ <li>on the outline view, in outline mode, you can see every model element. The elements that are hidden have their names displayed in italic style and their icon is decorated with a yellow dot in the top left corner. To reveal one of this element, simply right click on it and choose
+ <i>Show element</i>.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/diagram_editor13.png"/>
+ </p>
+ <ul>
+ <li>Show/Hide elements using a tree viewer</li>
+ </ul>
+ <p>When there is no selected element on the diagram, the tab bar provides the button
+ <em>Show/Hide</em>.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_show_hide_dialog1.png"/>
+ </p>
+ <p>This button opens a dialog to manage the shown and hidden elements on the diagram with a tree view, using various selection buttons (Check all, Uncheck all, Expand All and Collapse all) and various filters (All element, only checked elements and only unchecked elements).</p>
+ <p>
+ <img border="0" src="images/diagram_editor_show_hide_dialog2.png"/>
+ </p>
+ <p>Some elements might be grayed in this tree (compartments, Sequence diagram elements, ..), their selection will have no effect. Their grayed status indicates that they can not be hidden from the wizard but their children might support it.</p>
+ <p>You can also use
+ <a href="#UsingRegularExpressionstoFindDiagramElements">regular expressions</a> to easily retrieve the elements you want to hide/reveal.
+ </p>
+ <h4 id="Hidinglabels">Hiding labels</h4>
+ <p>It is also possible to hide the label of graphical elements (see the node labels section for nodes supported case).</p>
+ <p>The approach is the same as for other elements, except that there are a specific menus named “Hide/Show Label”. It is possible to call this menu directly on the label or on its element.</p>
+ <p>
+ <img border="0" src="images/diagram_editor_hide_label_1.png"/>
+ </p>
+ <p>The tool-bar button
+ <em>Hide label</em> can also be used.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_hide_label_tabbar.png"/>
+ </p>
+ <p>It is also possible to hide or reveal a label from the outline view, in outline mode. The elements whose label is hidden have their names displayed in italic style and their icon is decorated with a
+ <i>L</i> in the bottom right corner. To reveal a label, simply right click on it and choose
+ <i>Show label</i>.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_hide_label_outline.png"/>
+ </p>
+ <p>When there is no selected element on the diagram,
+ <em>Show/Hide</em> tab bar button allows to manage the labels too.
+ </p>
+ <h5 id="ContainersListsandcompartmentslabels">Containers, Lists and compartments labels</h5>
+ <p>Labels of containers, lists and compartment might be hidden by default. You can choose to display them using the outline, contextual menu or
+ <em>Show/Hide</em> tree view.
+ </p>
+ <h5 id="Nodeslabels">Nodes labels</h5>
+ <p>It is possible to hide the node label only if it is on the border of its node. Those nodes can have their label hidden by default. You can choose to display them using the outline, contextual menu or
+ <em>Show/Hide</em> tree view.
+ </p>
+ <h5 id="Edgeslabels">Edges labels</h5>
+ <p>It is also possible to hide the edge labels. </p>
+ <p>The approach is the same than the nodes labels with the specific menus “Hide/Show Label” called from the edge or its label.</p>
+ <p>
+ <img border="0" src="images/diagram_editor_hide_edge_label_1.png"/>
+ </p>
+ <p>Note that if a label of an edge is hidden (center, begin or end), all the labels of the edge will be hidden. Same behavior for the reveal action, if a label of an edge is revealed (center, begin or end), all the labels of the edge will be revealed.</p>
+ <h4 id="HidingiconsoflabelsonShapesorConnectors">Hiding icons of labels on Shapes or Connectors</h4>
+ <p>When working on
+ <em>big</em> diagrams, you may want to hide the icons of the labels on all shapes or connectors, in order to improve the readability of your representations. To do so, open the Eclipse Preferences (
+ <em>Window</em>/
+ <em>Preferences</em>), and select the “Appearance” category (
+ <em>Sirius</em>/
+ <em>Sirius Diagram</em>/
+ <em>Appearance</em>).
+ </p>
+ <p>The options
+ <em>"Hide label icons on shapes"</em> and
+ <em>"Hide label icons on connectors"</em> will allow you to do so.
+ </p>
+ <p>By default, no shapes neither connectors are hidden :</p>
+ <p>
+ <img border="0" src="images/diagram_editor_hide_label_icon_1.png"/>
+ </p>
+ <p>If you check both "
+ <em>Hide label icons on shapes</em>" and "
+ <em>Hide label icons on connectors</em>", next time you will open your diagram, all label icons of shapes and connectors will be hidden :
+ </p>
+ <img border="0" src="images/diagram_editor_hide_label_icon_2.png"/>
+ <h4 id="Collapsingcompartments">Collapsing compartments</h4>
+ <p>When working with compartmented containers, you may want to collapse the compartments. Select a compartment and collapse/expand it using the handle visible on the following illustration. The collapse handle’s location varies depending on the label alignment to avoid overlapping (depending on the list elements alignment for a list with an hidden label).</p>
+ <p>
+ <img border="0" src="images/compartments_collapse3.png"/>
+ </p>
+ <h3 id="Validatingthemodel">Validating the model</h3>
+ <p>On a diagram, you can have validation rules. These rules were previously created by the architect who created the diagram’s configuration. As a user of the modeler, you can validate these rules on your model.</p>
+ <p>To validate the rules open the context menu of the diagram itself (by right-clicking on its background) and choose the
+ <i>Validate</i> action.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor16.png"/>
+ </p>
+ <p><div style="display:none">
+ <br/>TODO fix the family.odesign validation rules on Persons diagram before update this screenshot
+ <br/>
+ <img border="0" src="images/diagram_editor17.png"/>
+ <br/></div>
+ </p>
+ <h3 id="Filters">Filters</h3>
+ <p>Filters are created by the architect who created the diagram’s configuration. Applying a filter on a diagram will hide the graphical elements which match the filter’s criterion. To apply a filter, open the
+ <a href="#ref_tabbar_diagram">
+ <em>Filters</em> menu in the tab-bar
+ </a> to select which filters should be enabled or disabled.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor18.png"/>
+ </p>
+ <p>To see more easily if one or more filters are activated, the icon in the tab-bar changes, showing a small check mark if at least one filter is activated.</p>
+ <p>
+ <img border="0" src="images/diagram_editor_filter_toolbar_activated.png"/>
+ </p>
+ <h3 id="Exportingimages">Exporting images</h3>
+ <p>You can export a diagram to an image file. To do that right-click on the diagram and choose the menu
+ <i>Export diagram as image.</i> or on this icon present in the tab-bar
+ <img border="0" src="images/diagram_export_image_tabbar.png"/> . After selecting the file path, you can choose the image format and if you want to overwrite an existing file without warning.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor19.png"/>
+ </p>
+ <p>On the first export of diagram as image the name is set by default with the representation name. After there is an history to select the last export.</p>
+ <p>
+ <img border="0" src="images/diagram_export_history.png"/>
+ </p>
+ <p>If you do not specify the file extension, the extension is determined from the selected image format. You can choose the directory in which to create the file using the
+ <em>Browse</em> button.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_export_one_image.png"/>
+ </p>
+ <p>If you enter a path with an unsupported extension the file path is created with the wrong extension with selected extension in image format append to.</p>
+ <p>
+ <img border="0" src="images/diagram_export_wrong_extension.png"/>
+ </p>
+ <p>Two checkboxes are available to customize the export:</p>
+ <ul>
+ <li>
+ <em>Export decorations</em>: if checked, some decorations which can appear in diagram elements and are declared as transient in the modeler definition (for example validation errors) are exported in the image.
+ </li>
+ <li>
+ <em>Export to HTLM</em>: if checked, the export will produce a
+ <code>.html</code> file which references the exported image in addition to the image file itself.
+ </li>
+ </ul>
+ <p>Besides, an image size control is available to determine the size level of exported diagrams. If
+ <em>Image Size</em> is set to
+ <em>Max</em>, diagram will be exported with the maximum possible size (limited by system-specific limitations) while keeping its aspect ratio. This can produce higher resolution images (but also larger files and so long export time). If
+ <em>Image Size</em> is set to level
+ <em>Nominal</em>, diagram will be exported with nominal size (quality will be lower but export time will be shorter).
+ </p>
+ <p>For example, on this Family diagram:
+ <br/>
+ <img border="0" src="images/exportSampleSource.png"/>
+ <br/>You can observe these different quality, file size and time generation with nominal size, max size and between both of them:
+ <br/>
+ <img border="0" src="images/exportSample.png"/>
+ </p>
+ <p>
+ <em>
+ <strong>Note:</strong>
+ </em> Due to some technical limitations, not all export format support all the features of diagrams. For example, exporting to PNG files will not show gradients on diagram elements. The JPG format is the one which currently produces the best result in terms of fidelity to what you see in the diagram editors.
+ </p>
+ <h3 id="Batchimagesexport">Batch images export</h3>
+ <p>It is possible to export all diagram of a representations file at once. To do that, select your representations file (
+ <code>aird</code> file) and right-click on it. Then choose the menu
+ <i>Export diagrams as image...</i>. On the opened pop-up select the path of the folder where the images will be exported.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor20.png"/>
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor21.png"/>
+ </p>
+ <p>The same functionality is available on every semantic elements which has representations from the
+ <em>Model Explorer</em> view. In this case, only the diagrams of the selected element will be exported.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor20b.png"/>
+ </p>
+ <h3 id="PortshiftingPortDragandDrop">Port shifting – Port Drag and Drop</h3>
+ <p>Drag and drop is a feature which can be enabled by the specifier in the Viewpoint Specification Model. It is turned off by default.</p>
+ <h4 id="Selectionhandles">Selection handles</h4>
+ <p>If the resize of the port is disabled by the specifier in the Viewpoint Specification Model, there is 4 selection handles to indicate the selection, one at each corner of the figure. Only the shifting is authorized.</p>
+ <p>
+ <img border="0" src="images/port_selection_handles1.png"/>
+ <img border="0" src="images/port_selection_handles2.png"/>
+ </p>
+ <p>If the resize of the port is enabled by the specifier in the Viewpoint Specification Model, there is more than 4 selection handles to indicate the selection. To shift the port, you should not click on one of this handles.</p>
+ <p>
+ <img border="0" src="images/port_selection_handles3.png"/>
+ <img border="0" src="images/port_selection_handles4.png"/>
+ </p>
+ <h4 id="Portshiftinganddraganddrop">Port shifting and 'drag and drop'</h4>
+ <p>Ports are special shapes because they are linked to a parent container, but are sometimes laid out over two containers.</p>
+ <p>When you try to shift a port, if you click over the port at a location where it is not over the parent container, a virtual area is built around the parent container. This virtual area is not visible and its size is calculated to cover the container and the port itself.</p>
+ <p>
+ <img border="0" src="images/diagram_editor_dnd01.png"/>
+ <img border="0" src="images/diagram_editor_dnd02a.png"/>
+ <img border="0" src="images/diagram_editor_dnd03a.png"/>
+ </p>
+ <p>The port shifting is protected against unexpected drag and drop in the container above mouse location.</p>
+ <p>If you want to drag and drop the port in a new container, just drag the port with the mouse beyond this virtual area (e.g., on screenshots, drag farther than right edge of port).</p>
+ <p>
+ <img border="0" src="images/diagram_editor_dnd01.png"/>
+ <img border="0" src="images/diagram_editor_dnd02b.png"/>
+ <img border="0" src="images/diagram_editor_dnd03b.png"/>
+ </p>
+ <p>The port is dropped in the container above the mouse location and linked to its closest edge.</p>
+ <h3 id="copy_paste_format">Copy/paste of format</h3>
+ <p>It is possible to duplicate format of diagram elements, that is to say to replicate mutual organization and style of diagram elements from one diagram to another. This replication only applies to the same semantic elements between diagrams.
+ <br/>By default, this copy/paste replicates the layout (x, y width and height) AND the style (colors, font, ...).
+ </p>
+ <p>But it is also possible to only
+ <em>Paste Layout</em> or only
+ <em>Paste Style</em>. The initial copy is always a
+ <em>Copy Format</em> in all cases.
+ </p>
+ <p>The next picture shows a partial view of a diagram. The tool to replicate the format is called “Copy Format” and can be activated from the tab-bar when the diagram elements are selected, from the contextual menu (see
+ <em>Edit</em> section) or through the
+ <em>Ctrl+Alt+Shift+C</em> shortcut. In this picture, format of John Doe and Earvin Johnson persons will be replicated to another diagram.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_copy_format.png"/>
+ </p>
+ <h4 id="PasteLayout">Paste Layout</h4>
+ <p>The next picture shows the diagram where the layout will be replicated. The tool to paste layout is called “Paste Layout” and can be activated from the tab-bar or from the contextual menu (see
+ <em>Edit</em> section).
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_paste_layout1.png"/>
+ </p>
+ <p>The layout applies to John Doe and Earvin Johnson and is exactly the same as the original one (compare John Doe and Earvin Johnson each other positions with first screenshot).</p>
+ <p>
+ <img border="0" src="images/diagram_editor_paste_layout2.png"/>
+ </p>
+ <p>
+ <strong>Warning</strong> : This copy/paste operation copies exactly what you see on a diagram. When using low zoom level, some diagram elements can be twisted and the paste operation will duplicate theses twistings on the other diagram. Please, zoom in to reduce twistings.
+ </p>
+ <h4 id="PasteStyle">Paste Style</h4>
+ <p>The next picture shows the diagram where the layout will be replicated. The tool to paste style is called “Paste Style” and can be activated from the tab-bar or from the contextual menu (see
+ <em>Edit</em> section).
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_paste_style1.png"/>
+ </p>
+ <p>The red font applies to John Doe.</p>
+ <p>
+ <img border="0" src="images/diagram_editor_paste_style2.png"/>
+ </p>
+ <h4 id="PasteFormat">Paste Format</h4>
+ <p>The next picture shows the diagram where the layout will be replicated. The tool to paste format is called “Paste Format” and can be activated from the tab-bar when the diagram is selected, from the contextual menu (see
+ <em>Edit</em> section) or through the
+ <em>Ctrl+Alt+Shift+V</em> shortcut.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_paste_format1.png"/>
+ </p>
+ <p>The result is the same as applying
+ <em>Paste Format</em> and
+ <em>Paste Style</em>.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_paste_format2.png"/>
+ </p>
+ <h3 id="diagram_element_pinning">Diagram element pinning</h3>
+ <h4 id="Introduction">Introduction</h4>
+ <p>It is possible to mark specific elements in a diagram as having a fixed location so that they are not moved by the
+ <i>Arrange All</i> action.
+ </p>
+ <p>Diagram element pinning allows you to combine both methods: manually arranging the position and size of elements when it is important while still being able to call
+ <i>Arrange All</i> for the rest, without the risk of destroying your manual layouts.
+ </p>
+ <h4 id="Pinunpinactions">Pin/unpin actions</h4>
+ <p>The next picture shows a diagram with three persons.</p>
+ <p>
+ <img border="0" src="images/diagram_editor_pin01.png"/>
+ </p>
+ <p>
+ <i>Arrange All</i> action lays out all diagram elements in order to produce the “best” layout. As we can see on the next picture, all diagram elements are moved.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_pin02.png"/>
+ </p>
+ <p>But we would like to have a fixed location for
+ <i>John Doe</i> and
+ <i>Jane Smith</i>. So theses elements must be marked as pinned thanks to the contextual menu.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_pin03.png"/>
+ </p>
+ <p>Now
+ <i>John Doe</i> and
+ <i>Jane Smith</i> are pinned, a new
+ <i>Arrange All</i> action will preserve their locations.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_pin04.png"/>
+ </p>
+ <p>It is also possible to pin/unpin diagram elements thanks to the palette. Multiple element selections can be achieved by holding simultaneously
+ <i>Ctrl + Mouse-left-click</i> on each diagram elements to pin or unpin.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_pin05.png"/>
+ </p>
+ <p>Notes:</p>
+ <ul>
+ <li>Pin/unpin information are persistent and saved in
+ <i>.aird</i> session file.
+ </li>
+ <li>it is not possible to pin/unpin edges or compartments.</li>
+ </ul>
+ <h4 id="Configuration">Configuration</h4>
+ <p>Every diagram elements that you move will be pinned by default and will need an unpin operation to be “moveable” again.</p>
+ <p>This default behavior can be changed in Eclipse preferences, as can be seen in the next picture.</p>
+ <p>
+ <img border="0" src="images/diagram_editor_pin_configuration01.png"/>
+ </p>
+ <h4 id="PinUnpinonNotes">Pin/Unpin on Notes</h4>
+ <p>The notes can be pinned if they are attached to a pinned diagram element. If a note is attached to several elements of which at least one is pinned then the note is pinned.</p>
+ <p>Otherwise for notes linked to any elements, it’s possible to use the preferences “Move unlinked notes during layout”. By default, this preference is disabled, in this case the unlinked notes are pinned.</p>
+ <p>This default behavior can be changed in Eclipse preferences, as can be seen in the next picture.</p>
+ <p>
+ <img border="0" src="images/diagram_editor_note_pin_configuration01.png"/>
+ </p>
+ <h4 id="PinUnpinelementsusingatreeviewer">Pin/Unpin elements using a tree viewer</h4>
+ <p>When there is no selected element on the diagram, the tab bar provides the button
+ <em>Pin/Unpin</em>.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_pin_dialog1.png"/>
+ </p>
+ <p>This button opens a dialog to manage the pinned and unpinned elements of the diagram with a tree view, using various selection buttons (Check all, Uncheck all, Expand All and Collapse all) and various filters (All element, only checked elements and only unchecked elements).</p>
+ <p>
+ <img border="0" src="images/diagram_editor_pin_dialog2.png"/>
+ </p>
+ <p>Some elements might be grayed in this tree (compartments, Sequence diagram elements, ..), their selection will have no effect. Their grayed status indicates that they do not support the Pin/Unpin but their displayed children might support it. Edges will not be shown as they will never have children in this tree.</p>
+ <p>You can also use
+ <a href="#UsingRegularExpressionstoFindDiagramElements">RegularExpressions</a> to easily retrieve the elements you want to pin/unpin.
+ </p>
+ <p>To see more easily if one or more graphical elements are pinned, the icon in the toolbar change, showing a “checked” if an element is pinned.</p>
+ <p>
+ <img border="0" src="images/diagram_editor_pin_toolbar_activated.png"/>
+ </p>
+ <h3 id="Layoutingmodearrangeyourdiagramswithoutmodifyingsemanticmodels">Layouting mode: arrange your diagrams without modifying semantic models</h3>
+ <p>When you only want to do layout operations (e.g. arrange a diagram by moving nodes or edges), you may modify the semantic models without paying attention. For example, when organizing bordered nodes, you may change the container of the semantic element, without wanting do so.</p>
+ <p>When this mode is enabled, the following operations are changed:</p>
+ <ul>
+ <li>direct edit is disabled on all elements;</li>
+ <li>moving elements by dragging them can be used to change their position, but will never trigger a drag and drop operation;</li>
+ <li>moving the extremity of an edge to adjust its connection point (to the source or target element) is possible, but will never trigger a reconnection operation.</li>
+ </ul>
+ <p>Note that other operations which can change the semantic model are still possible. Only the operations listed above, which are easy to misuse, are disabled/modified.
+ <strong>Layout Mode is not a “read-only” mode and does not guarantee that the semantic model is not modified when it is enabled.</strong>
+ </p>
+ <p>
+ <strong>Layouting mode</strong> can be activated/disabled on a diagram through the tab bar (when there is no selected element) :
+ </p>
+ <p>
+ <img border="0" src="images/layouting_mode_tabbar_activate.png"/>
+ </p>
+ <p>The diagram’s status line then indicates that the diagram is currently in
+ <em>Layouting mode</em> :
+ </p>
+ <p>
+ <img border="0" src="images/layoutingMode_forbidden_dnd.png"/>
+ </p>
+ <p>In this example, as
+ <em>Layouting mode</em> is activated, reconnecting the Edge from
+ <em>Abstrat Customer</em> to
+ <em>Company</em> is forbidden. You can arrange this edge (change start location, add bending points...) without risking to modify the underlying semantic model.
+ </p>
+ <p>When a diagram is closed, the
+ <em>Layouting mode</em> is automatically disabled.
+ </p>
+ <h3 id="synchronized_diagram">Synchronized/Unsynchronized diagram</h3>
+ <p>The contextual menu on the background of the diagram provides an action to toggle between
+ <i>Synchronized</i> /
+ <i>Unsynchronized</i> modes.
+ </p>
+ <p>
+ <img border="0" src="images/synchronized_diagram1.png"/>
+ </p>
+ <p>When the action is checked, the mode is
+ <i>Unsynchronized</i>. Otherwise, the mode is
+ <i>Synchronized</i>.
+ <br/>When the editor is activated, the status bar informs if the diagram is
+ <i>Synchronized</i> or
+ <i>Unsynchronized</i> (according to preference
+ <a href="#show_status_line">
+ <em>Sirius/Sirius Diagram/Show status line</em>
+ </a> ).
+ <br/>
+ <img border="0" src="images/synchronized_diagram_statusbar.png"/>
+ <br/>It is also possible to see this status with a decorator at the bottom-right corner of the diagram (according to preference
+ <a href="#show_sync_decorator">_Sirius/Sirius Diagram/Show synchronize status decorator on diagram</a> )
+ <br/>
+ <img border="0" src="images/decoratorsSyncStatus.png"/>
+ </p>
+ <p>With
+ <i>Synchronized</i> mode, the displayed diagram represents what is provided by the modeler. However, with
+ <i>Unsynchronized</i> mode, the diagram may not display all elements provided by the modeler, but only the elements that the user selected.
+ </p>
+ <p>For instance, we will consider having a semantic model with a root element that contains a child element. In the Viewpoint Specification Model, the feature
+ <i>Synchronization</i> (See the Common Attributes section of the specifier guide) of the mapping for the elements is defined as
+ <i>Not synchronized</i> and the edge mapping specifies an
+ <i>Unsynchronizable</i> behavior (default feature). To start we only have the root displayed.
+ </p>
+ <p>
+ <img border="0" src="images/synchronized_diagram3.png"/>
+ </p>
+ <p>Then, we will drag and drop the child element from
+ <i>Model Explorer</i> view. With
+ <i>Synchronized</i> mode, the edges related to this dropped element will be displayed.
+ </p>
+ <p>
+ <img border="0" src="images/synchronized_diagram4.png"/>
+ </p>
+ <p>Note: If the edge mapping was defined as
+ <i>Synchronized</i>, the result will be the same. But if it is
+ <i>Not synchronized</i>, the edges will not be displayed.
+ </p>
+ <p>However, with
+ <i>Unsynchronized</i> mode, only the dropped element will be displayed.
+ </p>
+ <p>
+ <img border="0" src="images/synchronized_diagram5.png"/>
+ </p>
+ <p>Note: If the edge mapping was defined as
+ <i>Not Synchronized</i>, the result will be the same. But if it is
+ <i>Synchronized</i>, the edges will be displayed.
+ </p>
+ <p>The
+ <i>Synchronized</i> /
+ <i>Unsynchronized</i> status of a diagram on creation can be set by default with a preference in the preferences. You can access it by menu
+ <i>Window</i> /
+ <i>Preferences...</i> /
+ <i>Sirius</i> /
+ <i>Sirius Diagram</i>. The property is
+ <i>Synchronized mode for new diagrams</i>. If you want your new diagrams be
+ <i>unsynchronized</i>, uncheck this property.
+ </p>
+ <p>
+ <img border="0" src="images/synchronized_diagram2.png"/>
+ </p>
+ <h3 id="UsingRegularExpressionstoFindDiagramElements">Using Regular Expressions to Find Diagram Elements</h3>
+ <h4 id="Rules">Rules</h4>
+ <p>Several dialogs of the Diagram Editor (like the
+ <em>Pin/Unpin</em> or
+ <em>Hide/Reveal</em> dialogs) allow you to filter Diagram elements using regular expressions.
+ </p>
+ <p>Those regular expressions support only the
+ <em>'*'</em> and
+ <em>'?'</em> wild-cards.
+ </p>
+ <ol>
+ <li>All Diagram elements which name is
+ <strong>beginning</strong> with the given regular expression is conform to this regular expression ;
+ </li>
+ <li>Case is not relevant (i.e.
+ <em>'a'</em> and
+ <em>'A'</em> are strictly equivalent);
+ </li>
+ <li>A ‘?’ wild-card can be used to replace exactly 1 character in the search ;</li>
+ <li>A ‘*’ wild-card can be used to replace exactly 0 or more characters in the search.</li>
+ </ol>
+ <h4 id="Examples">Examples</h4>
+ <p>Consider that you have a Diagram containing the following Diagram elements :</p>
+ <ul>
+ <li>myPackage (Package)</li>
+ <li>myClass1 (Class)</li>
+ <li>MyClass2 (Class)</li>
+ <li>myAttribute1 (Attribute)</li>
+ <li>myAttribute2 (Attribute)</li>
+ <li>isaBot (Attribute)</li>
+ <li>isaBoot (Attribute)</li>
+ <li>isaBT (Attribute)</li>
+ </ul>
+ <p>Elements matching the regular expression
+ <em>"m"</em> are all elements that starts with the letter
+ <em>'m'</em> (any case) :
+ </p>
+ <ul>
+ <li>myPackage</li>
+ <li>myClass1</li>
+ <li>MyClass2</li>
+ <li>myAttribute1</li>
+ <li>myAttribute2</li>
+ </ul>
+ <p>Notice that you will obtain the same result with
+ <em>"my"</em>.
+ </p>
+ <p>Elements matching the regular expression
+ <em>"isab?t"</em> are the following elements :
+ </p>
+ <ul>
+ <li>isaBot</li>
+ </ul>
+ <p>As ‘?’ stands for
+ <strong>exactly</strong> one character,
+ <em>isaBoot</em> and
+ <em>isaBt</em> aren’t matching this regular expression.
+ </p>
+ <p>Elements matching the regular expression
+ <em>"*1"</em> are all elements that contain the
+ <em>'1'</em> character :
+ </p>
+ <ul>
+ <li>myClass1</li>
+ <li>myAttribute1</li>
+ </ul>
+ <p>Elements matching the regular expression _"my*a*2" are the following elements :</p>
+ <ul>
+ <li>myClass2</li>
+ <li>myAttribute2</li>
+ </ul>
+ <p>Here you can notice that for
+ <em>myAttribute2</em> the first
+ <em>'*'</em> represents no character.
+ </p>
+ <h3 id="quick_outline">Quick Outline</h3>
+ <p>A quick outline is available with the shortcut
+ <code>Ctrl</code> +
+ <code>O</code>. This allows you to rapidly search text in the displayed name or the contained String attributes of your diagram elements elements.
+ </p>
+ <p>The star,
+ <code>*</code>, is a joker character, allowing you to search with more complicated patterns. Regarding this, an element is found if there is a word in its name or one of its attributes that match with the text in the filter, so if you want to search within words too, add
+ <code>*</code> at the start of your pattern. Also, you can navigate along the matching elements with the “Up” and “Down” arrow keys, and go to the selected element in your editor with
+ <code>Enter</code>.
+ </p>
+ <h3 id="styleCustomizations">Style customizations </h3>
+ <p>Although the style of the diagram elements is defined in the VSM, it can be customized for each diagram elements. This customization can be applied from the tool bar, from the “Style” and “Appearance” tab of the property view, from the “Diagram” menu or from the contextual menu Format.</p>
+ <p>You have the possibility to customize :</p>
+ <ul>
+ <li>in container style : the background color, the background style, the border size, the foreground color, the label alignment, the label size and the label format.</li>
+ <li>in node style: the border size, the color, the label alignment, format, position and size.</li>
+ <li>in edge style: the folding style, the color, the label alignment, format, position and size, the line and routing style, the size and the target and source arrow.</li>
+ </ul>
+ <p>Theses customizations can be reset by the “Reset style customization” button available in the “Appearance” tab of the property view and in the diagram editor tool bar.</p>
+ <p>NOTE: in case a user customized a Node with a WorkspaceImage style (through the “Set style to workspace image” action), it is considered in its whole customized then it can’t be updated by the refresh action, only the “Reset style properties to default values” action can update it by reset it.</p>
+ <h4 id="routingStylePref">Customize edge routing style from preferences</h4>
+ <p>You have the possibility to customize the routing style of all new edges from the preferences. In the preference page
+ <em>Sirius/Sirius Diagram/Connections</em>, you can enable
+ <em>user specific default values</em> and select a default routing style for all new edges.
+ </p>
+ <p>
+ <img border="0" src="images/preferences_sirius_diagram_connections.png"/>
+ </p>
+ <p>For example:</p>
+ <ul>
+ <li>The
+ <em>user specific default values</em> is enabled and the line style is set to
+ <em>Rectilinear</em>.
+ </li>
+ <li>You create a new edge.</li>
+ <li>The routing style is set to
+ <em>Rectilinear</em> (regardless of the value specified in the VSM) and the
+ <em>routingStyle</em> is considered as custom.
+ </li>
+ <li>If you call the action
+ <em>Reset style to default value</em> on this edge, then it keeps its routing style (because the preference is considered as the default value).
+ </li>
+ </ul>
+ <h2 id="reference">Reference</h2>
+ <p>This section describes all the features which are (or can be) available on graphical modelers</p>
+ <h3 id="GraphicalArea">Graphical Area</h3>
+ <h3 id="Palette">Palette</h3>
+ <p>All Sirius diagrams have a palette of tools, which by default is docked on the right hand side of the main graphical area. The top row of the palette contains some general tools which are available on all Sirius diagrams, while the rest contains tools specific to each graphical modeler.</p>
+ <h4 id="ManagingThePalette">Managing The Palette</h4>
+ <p>By default, the palette appears with a pre-defined size on the right hand side of the diagram.</p>
+ <p>
+ <i>Resizing</i>. You can resize it to take more or less horizontal space by dragging the vertical separator between the palette and the diagram with your mouse.
+ </p>
+ <p>
+ <img border="0" src="images/palette_resizing.png"/>
+ </p>
+ <p>
+ <i>Folding</i>. You can also fold the palette to hide it almost completely by clicking on the triangular icon in the corner of the palette header. When folded, you can restore it by clicking again on the same triangular icon. You can also keep it folded except when needed: when it is folded, a single click in the vertical folded area will reveal the palette temporarily so that you can select a tool. It will automatically hide again if you select a tool or click elsewhere.
+ </p>
+ <p>
+ <img border="0" src="images/palette_folding.png"/>
+ </p>
+ <p>
+ <i>Moving</i>. If you prefer, you can move the palette to the left side of the diagram editor by dragging the palette’s header with the mouse, or right-clicking on the header and choosing
+ <em>Dock On > Left</em> or
+ <em>Dock On > Right</em>.
+ </p>
+ <p>
+ <img border="0" src="images/palette_moving.png"/>
+ </p>
+ <h4 id="standardToolId">Standard Tools</h4>
+ <p>A few general tools are available in standard on all Sirius diagrams. They appear in the top row of the palette, just below the header.</p>
+ <p>
+ <img border="0" src="images/palette_tools.png"/>
+ </p>
+ <p>
+ <i>Selection</i>. The
+ <em>selection</em> tool is the default one initially selected when you open a diagram. To select an element on a diagram while this tool is active, simply click on it. To select several elements at the same time, you can either draw a rectangle on the diagram, or click on each element individually while keeping the
+ <em>Ctrl</em> key pressed. When selecting elements which are already selected using this method, by clicking on them or drawing a rectangle around them, they are removed from the selection. You can combine both methods (de/selection by single click or by zone) to build complex selection incrementally by always keeping the
+ <em>Ctrl</em> key pressed.
+ <br/>The selection of several elements by drawing a rectangle has 2 modes:
+ </p>
+ <ul>
+ <li>Selection from left to right: all the elements completely contained in the rectangle will get selected</li>
+ <li>Selection from right to left: all the elements that intersect the rectangle will get selected (except the container under the initial mouse location)</li>
+ </ul>
+ <p>To allow selection by drawing a rectangle on a container, you must simultaneously press the ALT key (otherwise the container is drag’n’dropped).</p>
+ <p>Selected elements have an outline and anchors drawn on their border. Note that when a selection contains multiple elements, exactly one of them has black selection anchors; the rest have white anchors. The element with the black anchors is called the primary selection, and some tools treat it differently than the others (for example alignment tools).</p>
+ <p>
+ <i>Zoom</i>. Next in the palette come two buttons to control the zoom level of the main diagram area. When the
+ <em>Zoom in</em> (resp.
+ <em>Zoom out</em>) button is active, clicking anywhere on the diagram will increment (resp. decrement) the zoom level by 25%. The current zoom level is visible in the tabbar when no diagram element is selected (see the section on the tabbar buttons for more ways to control the zoom level).
+ </p>
+ <p id="notes">
+ <i>Notes and note attachments</i>. All Sirius diagrams support the creation of notes and text elements, which can be attached to diagram elements. These elements are purely graphical annotations, and have no effect on the semantic model. The three tools used to create them are available in a combo-box in the palette’s top row. By default, the
+ <em>Note</em> tool (represented by a yellow sticky note) is selected. If you click on the small arrow next to the sticky note, a menu appears where you can select which of the three tools to enable:
+ <em>Note</em>,
+ <em>Text</em> or
+ <em>Note attachment</em>.
+ </p>
+ <p>
+ <em>Notes</em> and
+ <em>Text</em> elements are created in a similar way: either a single click somewhere on the diagram (which creates an element with a default size), or a click-drag to create the element with a custom initial size. Once created, one can edit the text inside the note or text zone usual the standard “direct edit” behavior (
+ <em>F2</em>, a slow double click, or by directly starting to enter alpha-numeric text). The only difference between notes and text zones is the visual presentation; notes have a yellow background (by default) and a border which represents a sticky not with a folded top-right corner.
+ </p>
+ <p>
+ <em>Note attachments</em> can be created to link either notes or text zone to diagram elements (including other notes and text attachments). To create an attachment, activate the tool and then click once on the source element and once on the target element. You can also click and drag from the source to the target elements.
+ </p>
+ <p id="pinning">
+ <i>Pin/Unpin</i>. The final standard tools which are available in the top row of all the palette allow to mark or unmark diagram elements as
+ <em>pinned</em>. Pinning an element on the diagram means that when an automatic layout of the diagram is requested (see the
+ <i>Arrange All</i> action), the element will not be moved or resized: it will stay at the exact same position as you placed it. Pinned element can still be moved manually. To pin or unpin an element, simply select the appropriate tool (using the arrow right next to the icon to make the menu appear), and when the tool is active, click on the element to mark as pinned or un-pinned.
+ </p>
+ <h4 id="PaletteContents">Palette Contents</h4>
+ <p>Below the palette’s header, which contains the general tools described above, you will find all the custom tools which have been configured for your modeler. Note that depending on which
+ <em>Viewpoints</em> and
+ <em>Layers</em> are currently enabled, some tools may or may not be visible for a given modeler. Refer to your specific designer/modeler’s documentation for details about which tools are available and how they are organized.
+ </p>
+ <p>
+ <em>Tool Drawers</em>. Tools in the palette may be organized in expandable
+ <em>drawers</em> to group them by category. To expand a drawer and show its content, simply click once in the drawer’s header. Click again to fold it back and hide its tools. When you expand a drawer, some others may be folded automatically if there is not enough space to show all of them. To prevent this, you can “pin” a drawer opened by clicking on the “pin” icon in the drawer’s title area when it is expanded. This will force it to be kept opened, and its tools available, at all times.
+ </p>
+ <p>
+ <img border="0" src="images/palette_tool_drawer.png"/>
+ </p>
+ <p>
+ <em>Tool Groups</em>. Most entries in the palette correspond to a single tool, but some of them represent tool groups. Tool groups are identified by a small right-facing arrow on the left of the tool’s icon. They behave like combo-boxes: click on the arrow to expand the group and reveal all the tools available in this group. Click on the tool you want to activate to make it the default and close the group. You can then use the selected tool as any other, but you have to re-open the popup menu if you want to enable a different one. When the group is expanded, you can click on the “pin” icon to the right to of the top-most tool to force the group to stay expanded, so that you can easily have access to all the tools.
+ </p>
+ <p>
+ <img border="0" src="images/palette_tool_group.png"/>
+ </p>
+ <h4 id="UsingTheToolsFromThePalette">Using The Tools From The Palette</h4>
+ <p>There are different interaction modes possible for the tools available in the palette. The basic pattern is to select the tool in the palette with a simple left-click on in it the palette, and then apply it once on the diagram.</p>
+ <p>Normally, when you have used a tool once, it does not stay selected; if you want to reuse it a second time, you have to re-select it in the palette. If you want to apply the same tool several times in a row, simply hold the
+ <em>Ctrl</em> key pressed while using it; it will stay “armed” until you release the
+ <em>Ctrl</em> key or select another tool.
+ </p>
+ <p>To deselect a tool without executing it, simply press the
+ <em>Esc</em> key, or select another one (for example the default
+ <em>Selection</em> tool).
+ </p>
+ <p>When a tool is selected and you move the mouse on the diagram, you will notice that the mouse cursor’s shape changes depending on where it is, to indicate whether or not the selected tool can be applied at this particular location. For example some elements can only be created at the top-level of the diagram (in the diagram’s background itself), and not inside other elements. For such a tool, if you put the cursor on top of another diagram element, the mouse cursor will change to indicate the action is not allowed. Note that the exact shape of the mouse cursor depends on the operating system.</p>
+ <p>
+ <em>Direct Action Tools</em>. Direct action tools are the simplest and most common one. They require a single click somewhere on the diagram (as long as it is allowed). The most common direct action tools are element creation tools.
+ </p>
+ <p>
+ <em>Edge Creation Tools</em>. Edge creation tools are a little more complex, in that they require the specification of both the source and target element of the new edge. Once the tool is selected, there are two possible usage modes:
+ </p>
+ <ol>
+ <li>First do a single click on the source element, then move the mouse to the target element (which may be the same) and click a second time to finish the edge creation.</li>
+ <li>Alternatively, you can click on the source element, keep the mouse button pressed, move the mouse to the target element and release it there. Both methods are equivalent.</li>
+ </ol>
+ <p>
+ <em>Tools With Selection Dialog</em>. Some complex tools require additional information to perform their jobs. In particular, tools with selection dialogs will open a dialog box when you use them on a diagram element to ask for more information. The details will vary from tool to tool, but to complete the interaction simply select the requested information and finish the dialog/wizard.
+ </p>
+ <p>
+ <em>Other Tools</em>. Finally, because Sirius is an extremely extensible system, graphical modelers may be configured with tools which have more complex interaction patterns. These will usually be custom tools very specific to a particular domain or modeler. Refer to their documentation for details.
+ </p>
+ <h3 id="ref_tabbar">Tab-bar</h3>
+ <p>The top area of all Sirius diagram editors is filled with the
+ <em>tab-bar</em>, which provides access to many operations on diagrams and their elements. The content of the tab-bar will depend on whether the current selection is the diagram itself (i.e. no element is selected) or one or several diagram elements.
+ </p>
+ <h4 id="ref_tabbar_diagram">Tab-bar Actions Available on Diagram</h4>
+ <p>
+ <img border="0" src="images/tabbar01.png"/>
+ </p>
+ <p>When the diagram itself (and not a specific element) is selected, the tab-bar contains the following buttons:</p>
+ <p>
+ <img border="0" src="images/tabbar_automatic_layout_tools.png"/>
+ <em>Automatic Layout Tools</em>. The first group of tools are used to trigger an automatic layout of the elements on the diagram. Automatic layout uses a generic algorithm which tries to arrange the position and sizes of the elements on the diagram in a nice, readable way. In particular it makes sure, unless specific constraints prevent it, that no elements overlap each other, and that elements which contain others (i.e. containers) are large enough to show all their contents. It also tries to minimize the crossing of edges. The two ways to invoke the automatic layout algorithms are available as a drop-down menu on the left-most icon in the tab-bar.
+ </p>
+ <ul>
+ <li>
+ <em>Arrange All</em>. This is the action available by default. It launches the layout algorithm on all the elements in the diagram. Note that elements which have been
+ <em>pinned</em> to their position will
+ <strong>not</strong> be moved by the algorithm.
+ </li>
+ <li>
+ <em>Arrange Linked Border Nodes</em> This special action will only concerns nodes which are on the border of another element and which are either the source or the target of at least one edge. When invoked, the action will try to move these bordered nodes on the border of their parent on the most “natural” side of their parent element depending on the direction of the edge. For example if a border node is on the top side of an element but has an edge which goes down to a target element below its parent, this action will move the border node to the bottom side so that the edge does not cross the parent element.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/tabbar_selection_tools.png"/>
+ <em>Selection Tools</em>. The next group of tab-bar tools, also organized in a drop-down menu, can be used to select groups of diagram elements in a single operation.
+ </p>
+ <ul>
+ <li>
+ <em>Select All</em>. This is the default operation and will select all the elements visible on the diagram. It is also available via the
+ <em>Ctrl+A</em> keyboard shortcut.
+ </li>
+ <li>
+ <em>Select All Connectors</em>. This action will select all connectors (aka
+ <em>edges</em>) between diagram elements which are visible on the diagram, and only them.
+ </li>
+ <li>
+ <em>Select All Shapes</em>. This action will select all diagram elements which are not connectors/edges which are visible on the diagram.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/tabbar_refresh.png"/>
+ <em>Refresh</em>. This operation, which can also be invoked with the
+ <em>F5</em> keyboard shortcut, will force an update of the diagram’s content according to the latest version of the underlying semantic model. The default operational mode for Sirius is to automatically refresh the diagram’s content whenever any relevant change is detected in the semantic model. This can be disabled using the
+ <em>Automatic Refresh</em> preference (see
+ <em>Window > Preferences > Sirius</em>). When in manual refresh mode (i.e.
+ <em>Automatic Refresh</em> is unchecked), you must manually use the
+ <em>Refresh</em> operation whenever you want the diagram to take into account changes in the model. Even in automatic refresh mode, it may be sometimes necessary to invoke an explicit, manual refresh using this operation if Sirius got confused.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_layers_selection.png"/>
+ <em>Layers Selection</em>. The various kinds of elements which can appear on a diagram, and the tools which are available to manipulate them, are organized in
+ <em>Layers</em>. Each diagram has a default layer which is always enabled, but may also have additional layers. Additional layers can be optional or not. You can enable or disable the optional layers at will, to hide or reveal new kinds of elements. Note that the list of layers available to you on a diagram may depend on which
+ <em>Viewpoints</em> are currently enabled in the
+ <em>Modeling Project</em>, as some viewpoints can contribute additional layers to diagrams. The set of layers currently enabled can be controlled using the drop-down menu in the tab-bar. Note that mandatory layers can not be disabled and are not displayed in this menu. Simply click on the button to reveal the menu, and check or un-check the optional layers you want to have enabled or disabled. A tick-mark is visible on the tab-bar button if at least one optional layer is currently enabled.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor7.png"/>
+ </p>
+ <p id="transientLayer">Transient layers are displayed, in the drop down menu, after the non transients’s. They are separated with an horizontal separator.
+ <br/>
+ <img border="0" src="images/diagram_editor_transient_layer.png"/>
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_filters_selection.png"/>
+ <em>Filters Selection</em>. Diagram configurations may define
+ <em>filters</em>, than you can enable or disable to hide (or show) diagram elements depending on semantic conditions. For example on a UML class diagram, a filter may be defined to hide all abstract classes and interfaces, so that only concrete classes are visible. The set of filters currently enabled can be controlled using the drop-down menu in the tab-bar. Simply click on the button to reveal the menu, and check or un-check the filters you want to have enabled or disabled. A tick-mark is visible on the tab-bar button if at least one filter is currently enabled.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor8.png"/>
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_show_hide.png"/>
+ <em>Show/Hide</em>. You can chose to hide (or reveal) specific diagram elements (or just their labels) independently of the conditions in pre-defined filters. This can be useful if you want to concentrate on specific parts of your model, or if you want hide parts which are not relevant to simplify communication with other people. You can hide elements from their context menu (using the
+ <em>Show/Hide</em> sub-menu) or more globally by using the
+ <em>Show/Hide</em> button in the tab-bar. This button opens a dialog box which presents all the elements visible on the diagram, organized in a hierarchical way which corresponds to their graphical organization. Note that because a single semantic element may have multiple representations on the diagram, they may appear multiple times in the dialog box. Making one representation hidden will not hide the other graphical representations of the same element. You can chose which elements should be visible (resp. hidden) on the diagram by checking (resp. unchecking) them in the dialog. For some elements (e.g. compartments), the hide is not supported and is disabled, these elements will be grayed in the dialog box and checking them will have no effect. The top area of the dialog box contains various buttons to help you find the elements you want, by show only the checked (i.e. visible) or unchecked (i.e. hidden) elements, by expanding or collapsing the tree viewer, or by checking or un-checking all elements at once. You can also search for elements by their name using the search box. For some elements (e.g. edges), you can hide the label (or labels) while keeping the element itself visible. When this is possible, the label is presented as a sub-item of the element in the dialog box, with its own check-box.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_show_hide_dialog2.png"/>
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_pin_unpin.png"/>
+ <em>Pin/Unpin</em>. You can chose to pin (or unpin) elements on the diagram. Pinned elements are kept in their position by the automatic layout algorithms (see
+ <em>Arrange All</em>), while unpinned elements can be moved and resized. You can pin/unpin elements from their context menu (using the
+ <em>Layout</em> sub-menu) or more globally by using the
+ <em>Pin/Unpin</em> button in the tab-bar. This button opens a dialog box which presents all the elements on the diagram, organised in a hierarchical way which corresponds to their graphical organization. Note that because a single semantic element may have multiple representations on the diagram, they may appear multiple times in the dialog box. Making one representation pinned will not pin the other graphical representations of the same element. You can chose which elements should be pinned (resp. unpinned) on the diagram by checking (resp. unchecking) them in the dialog. The top area of the dialog box contains various buttons to help you find the elements you want, by show only the checked (i.e. visible) or unchecked (i.e. hidden) elements, by expanding or collapsing the tree viewer, or by checking or un-checking all elements at once. You can also search for elements by their name using the search box. Note that pinning has currently no effect on edges.
+ </p>
+ <p>
+ <img border="0" src="images/diagram_editor_pin_dialog2.png"/>
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_paste_layout.png"/>
+ <em>Paste Layout</em>. This button is only enabled if you have previously copied the layout of some elements in the clipboard, using the
+ <em>Copy layout</em> action (only visible in the tab-bar when elements are select).
+ <em>Paste layout</em> will apply the same size and positions which were copied in the clipboard to the corresponding elements in the current diagram. For the purpose of this command, the “corresponding elements” are the graphical elements which represent the same semantic objects.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_zoom.png"/>
+ <em>Zoom Controls</em>. Next in the tab-bar is a set of buttons to control the zoom level. The
+ <em>Zoom in</em> and
+ <em>Zoom out</em> buttons behave similarly to their equivalents in the palette. The combo-box shows the current zoom level and allows you to choose among some pre-defined levels. You can also manually enter a specific zoom level (e.g. “42”) and hit
+ <em>Return</em> to apply it.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_export_image.png"/>
+ <em>Export As Image</em>. This button can be used to export the current diagram as an image file stored on disk. When you select it, a dialog box appears
+ <img border="0" src="images/diagram_export_one_image.png"/>
+ <br/>in which you can chose the file’s destination and format. Note that not all formats are currently equally supported; they may not all produce the same result. For diagrams which are tool large to export as a single image, the
+ <em>Export to HTML</em> check-box can be used: when it is checked, instead of exporting a single image Sirius will split it in a matrix of smaller images, and produce an HTML file while loads them all arranged in a table to reproduce the original image.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_layouting_mode.png"/>
+ <em>Layout Mode</em>. This button enables a special “layout mode”, in which some operations are prevented from having an effect on the semantic model. It can be used when you want to tweak the layout of a diagram and want to be sure to only make graphical changes, and not semantic ones by mistake. Click on the button to enable the “layout mode”, and click again when finished to return to the normal model. When this mode is enabled, the following operations are changed:
+ </p>
+ <ul>
+ <li>direct edit is disabled on all elements;</li>
+ <li>moving elements by dragging them can be used to change their position, but will never trigger a drag and drop operation;</li>
+ <li>moving the extremity of an edge to adjust its connection point (to the source or target element) is possible, but will never trigger a reconnection operation.</li>
+ </ul>
+ <p>Note that other operations which can change the semantic model are still possible. Only the operations listed above, which are easy to misuse, are disabled/modified.
+ <strong>Layout Mode is not a “read-only” mode and does not guarantee that the semantic model is not modified when it is enabled.</strong>
+ </p>
+ <p>The diagram’s status line indicates when
+ <em>Layouting mode</em> is enabled:
+ </p>
+ <p>
+ <img border="0" src="images/layoutingMode_forbidden_dnd.png"/>
+ </p>
+ <p>When a diagram is closed, the
+ <em>Layouting mode</em> is automatically disabled.
+ </p>
+ <h4 id="ref_tabbar_element">Tab-bar Actions Available on Diagram Elements</h4>
+ <p>The tab-bar contains a different set of actions when at least one element is selected.</p>
+ <p>
+ <img border="0" src="images/tabbar02.png"/>
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_arrange_selection.png"/>
+ <em>Arrange Selection</em>. This action launches the layout algorithm only for the diagram elements which are selected (and not pinned). All the other elements on the diagram, whether pinned or not, will not be moved. Note that edges may be re-arranged if one of their ends is part of the selection.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_alignment_control.png"/>
+ <em>Alignment Control</em>. This menu contains several operations which can be used to align several graphical elements in various ways. The actions in this menu are only enabled when several elements are selected.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_distribute_actions.png"/>
+ <em>Distribute Elements</em>. This menu contains several actions which can be used to distribute the selected diagram elements horizontally/vertically with a same space between their centers or their bounds. The actions in this menu are enabled only for selected nodes with same direct parent. At least 3 shapes should be selected to enable distribute actions.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_pin_unpin_02.png"/>
+ <em>Pin/Unpin</em>. These two buttons can be used to mark all the selected elements as pinned or not.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_copy_layout.png"/>
+ <em>Copy Layout</em>. This tool can be used to duplicate the layout of some diagram elements from this diagram into another. This replication only applies to the same semantic elements between diagrams. First, select the set of elements of interest, and use this
+ <em>Copy layout</em> action. Then go to the target diagram, and choose the
+ <em>Paste layout</em> action from the tab-bar there.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_hide.png"/>
+ <em>Hide</em>. This button hides all the selected elements from view. It can also be invoked with the
+ <em>Ctrl+H</em> keyboard shortcut. To reveal elements which have been hidden, you can for example deselect all element, and in the diagram’s tab-bar, choose the
+ <em>Show/Hide</em> button, which opens a dialog box to control the elements' visibility.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_hide_label.png"/>
+ <em>Hide</em>. This button hides the label of the selected elements. It can also be invoked with the
+ <em>Ctrl+L</em> keyboard shortcut. To reveal hidden labels, you can for example deselect all element, and in the diagram’s tab-bar, choose the
+ <em>Show/Hide</em> button, which opens a dialog box to control the elements' visibility. You can also select an element without label and use the
+ <em>Show/Hide / Show label</em> menu.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_delete_from_diagram.png"/>
+ <em>Delete from Diagram</em>. This action removes the selected graphical element from the diagram, but does not delete the corresponding semantic elements. It is only available on un-synchronized diagrams or element types.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_delete_from_model.png"/>
+ <em>Delete from Model</em>. This action removes both the selected graphical element and the corresponding semantic elements. The exact effect of deletion on the semantic model depends on how the diagram was configured, and may have other consequences (i.e. removing or modifying other parts of the model to keep everything consistent).
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_font_controls.png"/>
+ <em>Font Controls</em>. The next set of buttons can be used to control the font attributes (bold or italic), the font color, and the font to use itself, for the labels of the select elements. Note that all font-related attributes
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_color_style_controls.png"/>
+ <em>Color and Visual Style Controls</em>. The next group of buttons can be used to control some graphical attributes of the selected elements: fill color, line color and line style. The
+ <em>Workspace image</em> button can be used to replace the graphical representation of an element by an image that you can select from anyware in your Eclipse workspace.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_cancel_custom_style.png"/>
+ <em>Cancel Custom Style</em>. As soon as you modify manually any of the graphical properties of an element, the element’s style is marked as
+ <em>customized</em>, and is not refreshed if its definition changes. The
+ <em>Cancel Custom Style</em> button resets all the style attributes of an element to its default values and un-marks it as customized.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_apply_style.png"/>
+ <em>Apply Style</em>. Use this button to reproduce the visual style of an element onto others. This action will apply the style of the last selected element to the others. When you click on this button, all the visual attributes from the last element which can are compatible with the other elements will be applied to them.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_make_same_size.png"/>
+ <em>Make Same Size</em>. When multiple elements are selected, clicking on this tool will resize all of them to have the same size (both width and height). The element used for reference to decide the size to apply is the last selected. For region containers, if the selected region containers have the same number of regions, the regions will have the same size. If the region container used for reference has more regions than the other(s), the last region of others will have the size of all remaining regions in the one used for reference. If the region container used for reference has less region than the other(s), the action has no effect.
+ </p>
+ <p>
+ <img border="0" src="images/tabbar_auto_size.png"/>
+ <em>Auto-Size</em>. This button marks the selected elements as auto-sized. Auto-sized elements will adjust their width an height dynamically according to their contents.
+ </p>
+ <h4 id="ref_tabbar_4x">Tab-bar in Eclipse 4.2 and 4.3</h4>
+ <p>Due to a current limitation, on Eclipse 4.2 and 4.3, the tab-bar content does not depend on the current selection and extensibility is not available:
+ <br/>
+ <img border="0" src="images/tabbar4x01.png"/>
+ </p>
+ <p>The tab-bar content enablement changes when at least one element is selected:
+ <br/>
+ <img border="0" src="images/tabbar4x02.png"/>
+ </p>
+ <p>See the previous sections for content description.</p>
+ <h3 id="PropertiesView">Properties View</h3>
+ <p>In the Properties view, you will find several tabs which will not be the same if an element is selected on the diagram or not.</p>
+ <p>If an element is selected on the diagram, you will have on the
+ <i>Properties</i> view the following tabs:
+ </p>
+ <ul>
+ <li>Semantic : This tab shows the properties of the semantic element selected. You will find the same informations as in the properties view of an Ecore editor.</li>
+ <li>Style : This tab presents the properties about the graphical representation of the element. You will find informations like label size and format, shape of the graphical object, background and foreground colors...</li>
+ <li>Appearance : This tab allows to choose the style and size of text fields contained by the element.</li>
+ </ul>
+ <p>
+ <img border="0" src="images/diagram_editor3.png"/>
+ </p>
+ <p>If you do not select an element, you will have in the
+ <i>Properties view</i> the properties of the diagram itself :
+ </p>
+ <ul>
+ <li>Semantic : The diagram has a semantic element which is the element on which we have created the diagram in the
+ <i>Model Explorer</i> view. The content is the same as presented previously.
+ </li>
+ <li>Filters : You can apply filters on your diagram. Filters will be presented in a following part.</li>
+ <li>Documentation : This tab provides a text area for the current diagram documentation.</li>
+ <li>Rulers & Grid : Allow the user to display vertical and horizontal rulers and also a grid on the diagram. You can choose how is displayed the grid (Solid style, Dash style, Dot style...).</li>
+ <li>Appearance : This tab allows to choose the style and size of text fields of every elements of diagram which have not been specifically set on the Representation Diagram.</li>
+ </ul>
+ <p>
+ <img border="0" src="images/diagram_editor4.png"/>
+ </p>
+ <h3 id="Outline">Outline</h3>
+ <p>The outline view has two display modes that you can select in its upper toolbar:</p>
+ <ul>
+ <li>In
+ <em>Outline</em> mode, it shows the content of the model in a tree view:
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/diagram_editor5.png"/>
+ </p>
+ <p>To hide/reveal an element or its label in the editor, simply right click an element in the tree and choose one of the
+ <i>Hide element</i>,
+ <i>Hide label</i>,
+ <i>Show element</i>,
+ <i>Show label</i> menus. The availability of the menus depends on the state of each element and its support of the “Show/Hide” feature.
+ </p>
+ <p>The hidden elements have their label displayed in italic style and their icon is decorated with a yellow dot in the top left corner.
+ <br/>The elements whose label is hidden have their label displayed in italic style and their icon is decorated with a
+ <i>L</i> in the bottom right corner.
+ </p>
+ <ul>
+ <li>In
+ <em>Overview</em> mode, it shows a complete overview of the active diagram. If the diagram is too big to be seen entirely on the diagram modeler, the overview is an easy way to navigate on the active diagram.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/diagram_editor6.png"/>
+ </p>
+ <h2 id="preferences">Preferences</h2>
+ <p>Some preferences and configuration parameters are available for you to customize your experience. They can affect either the look or the behavior of diagrams. </p>
+ <h3 id="GlobalPreferences">Global Preferences</h3>
+ <p>Global preferences are global to a Sirius installation, or more precisely to an Eclipse workspace. If you change them, they will affect all the modeling projects and all their diagrams for the current workspace. They are available through the standard Eclipse preference UI (menu
+ <em>Window > Preferences</em>), under the category
+ <em>Sirius > Sirius Diagram</em> and its sub-categories:
+ </p>
+ <img border="0" src="images/preferences_sirius_diagram.png"/>
+ <p>The illustration above shows the default value of all these preferences.</p>
+ <ul>
+ <li>
+ <em>Show connector handles:</em> This has no effect for Sirius diagram (it is inherited from the standard GMF settings).
+ </li>
+ <li>
+ <em>Show popup bars:</em> If checked, and if the diagram’s configuration supports this feature, then when you keep the mouse cursor still for a small delay on a diagram element, a
+ <em>popup bar</em> will appear with buttons corresponding to all the tools which can be applied in this context. The tools which appear are the same as the ones available on the palette, but it can be more convenient sometimes to use the popup bar instead of going back to the palette to select the tool:
+ </li>
+ </ul>
+ <img align="center" border="0" src="images/popup_bar.png"/>
+ <ul>
+ <li>
+ <em>Enable animated layout:</em> If checked, then when you launch an automatic layout (
+ <em>Arrange all</em>), the shapes will move smoothly to their final location. This makes the arrangement operation take a little longer, but it is easier to follow where your elements have been moved.
+ </li>
+ <li>
+ <em>Enable animated zoom:</em> If checked, when you change the zoom value, Sirius will show intermediate steps to smooth the change.
+ </li>
+ <li>
+ <em>Enable anti-aliasing:</em> If checked, the graphics on the diagram will use anti-aliasing. This preference does not take effect on all platforms.
+ </li>
+ <li>
+ <span id="show_status_line">
+ <em>Show status line:</em>
+ </span> This allows to display the GMF status line. It is used in Sirius to display the synchronize status of the diagram..
+ </li>
+ </ul>
+ <ul>
+ <li>
+ <em>Auto-size containers during arrange-all action:</em> Container elements which have an explicit size are normally not resized during an
+ <em>Arrange All</em>. This can be problematic if the elements they contain are re-arranged so that the container’s size is not appropriate anymore. When this preference is enabled, the arrange all action will treat all containers as if they are “auto-sized”, and adjust their size to the computed arrangement for their content. After the arrange all action is finished, the containers which had an explicit size before will still have an explicit size (although potentially different); they are only switched to auto-size mode during the arrange all action.
+ </li>
+ <li>
+ <em>Move unlinked notes during layout:</em> If checked, then the
+ <em>Arrange all</em> will consider all
+ <a href="#notes">notes</a> on the diagram and arrange them. If unchecked, only the notes which are attached to non-note diagram elements are moved by the layout; the rest (which are considered just comments on the diagram itself), are not touched.
+ </li>
+ <li>
+ <em>Automatically mark moved elements as pinned:</em> If checked, then as soon as you explicitly move a element (node or container) on the diagram, Sirius will mark it as
+ <a href="#pinning">pinned</a> and consider it should not be moved by the automatic layout. You can still explicitly
+ <a href="#pinning">unpin</a> these elements.
+ </li>
+ <li>
+ <span id="synchronized_preference">
+ <em>Synchronized mode for new diagrams:</em>
+ </span> If checked, all newly created diagrams will initially be in
+ <a href="#synchronized_diagram">synchronized</a> mode. You can still change the mode manually after the diagram is created.
+ </li>
+ <li>
+ <span id="show_sync_decorator">
+ <em>Show synchronize status decorator on diagram:</em>
+ </span> If checked, a decorator in the bottom-right corner of the diagram is displayed to show the
+ <a href="#synchronized_diagram">synchronize</a> status of the diagram. A value change of this preference will be applied on the next status changed for already opened diagrams.
+ </li>
+ <li>
+ <em>Remove/hide note when the annotated element is removed/hidden:</em> If checked, then notes attached to a diagram element will be deleted if the element is deleted, or hidden if the element is hidden.
+ </li>
+ <li>
+ <em>Export as image Scaling</em>: determines default level of scaling when exporting diagrams as image and its initial value in the
+ <em>Export as image</em> dialog.
+ <em>Max</em> level means an optimal quality export whereas
+ <em>nominal</em> means nominal quality export.
+ </li>
+ </ul>
+ <h3 id="Appearance">Appearance</h3>
+ <p>The
+ <em>Appearance</em> preferences page (see below) gives you two preferences to control whether or not to show the labels on shapes (nodes, containers, bordered nodes) and connectors (edges). It also allows you to customize the default font and colors used for some basic diagram elements. Diagram configurations already specify default values for these style attributes, so in practice these preferences are mostly useful for notes.
+ </p>
+ <img border="0" src="images/preferences_sirius_diagram_appearance.png"/>
+ <p>The
+ <em>Authorize decoration overlapping</em> preference lets, if checked, the decorations of different positions overlapping each other or displaying outside the diagram element bounding. If unchecked, decorations may be grouped in a
+ <em>list decorator</em> to avoid overlapping.
+ </p>
+ <h3 id="Printing">Printing</h3>
+ <p>The
+ <em>Printing</em> page (see below) gives you various preferences related to page layout for layout printing.
+ </p>
+ <img border="0" src="images/preferences_sirius_diagram_printing.png"/>
+ <p>The
+ <em>Print decoration</em> preference allows to print decorations displayed on diagram graphical elements.
+ </p>
+ <h3 id="RulersAndGrid">Rulers And Grid</h3>
+ <p>Finally, the
+ <em>Rulers And Grid</em> page (see below) contains preferences to control whether or not new diagrams should initially show the rulers and/or grids, and whether to enable the
+ <em>Snap to grid</em> and
+ <em>Snap to shapes</em> behavior by default. The preferences on this page are only taken into account as starting values for new diagrams. Each diagram has its own configuration of rulers and grid which can be modified in the
+ <em>Rulers & Grid</em> section of the
+ <em>Properties</em> view of the diagram itself.
+ </p>
+ <img border="0" src="images/preferences_sirius_diagram_rulers_grid.png"/>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/diagrams/images/afterRemoveBendpoints.png b/doc/5.1.x/user/diagrams/images/afterRemoveBendpoints.png
new file mode 100644
index 0000000..051e9b5
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/afterRemoveBendpoints.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/beforeBendpoints.png b/doc/5.1.x/user/diagrams/images/beforeBendpoints.png
new file mode 100644
index 0000000..96d8da3
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/beforeBendpoints.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/compartments_collapse3.png b/doc/5.1.x/user/diagrams/images/compartments_collapse3.png
new file mode 100644
index 0000000..8da9f22
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/compartments_collapse3.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/compoundmoves2.png b/doc/5.1.x/user/diagrams/images/compoundmoves2.png
new file mode 100644
index 0000000..2a074f0
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/compoundmoves2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/decoratorsSyncStatus.png b/doc/5.1.x/user/diagrams/images/decoratorsSyncStatus.png
new file mode 100644
index 0000000..63ada92
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/decoratorsSyncStatus.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor11.png b/doc/5.1.x/user/diagrams/images/diagram_editor11.png
new file mode 100644
index 0000000..119b25f
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor11.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor11_tabbar.png b/doc/5.1.x/user/diagrams/images/diagram_editor11_tabbar.png
new file mode 100644
index 0000000..92f16da
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor11_tabbar.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor12.png b/doc/5.1.x/user/diagrams/images/diagram_editor12.png
new file mode 100644
index 0000000..674600b
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor12.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor13.png b/doc/5.1.x/user/diagrams/images/diagram_editor13.png
new file mode 100644
index 0000000..01ab782
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor13.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor16.png b/doc/5.1.x/user/diagrams/images/diagram_editor16.png
new file mode 100644
index 0000000..69a9c16
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor16.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor17.png b/doc/5.1.x/user/diagrams/images/diagram_editor17.png
new file mode 100644
index 0000000..cdb33a9
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor17.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor18.png b/doc/5.1.x/user/diagrams/images/diagram_editor18.png
new file mode 100644
index 0000000..78370d6
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor18.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor19.png b/doc/5.1.x/user/diagrams/images/diagram_editor19.png
new file mode 100644
index 0000000..6a928fa
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor19.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor20.png b/doc/5.1.x/user/diagrams/images/diagram_editor20.png
new file mode 100644
index 0000000..9d26489
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor20.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor20b.png b/doc/5.1.x/user/diagrams/images/diagram_editor20b.png
new file mode 100644
index 0000000..199ca05
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor20b.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor21.png b/doc/5.1.x/user/diagrams/images/diagram_editor21.png
new file mode 100644
index 0000000..ba1df55
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor21.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor3.png b/doc/5.1.x/user/diagrams/images/diagram_editor3.png
new file mode 100644
index 0000000..4115f93
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor3.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor4.png b/doc/5.1.x/user/diagrams/images/diagram_editor4.png
new file mode 100644
index 0000000..345f660
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor4.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor5.png b/doc/5.1.x/user/diagrams/images/diagram_editor5.png
new file mode 100644
index 0000000..d63906d
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor5.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor6.png b/doc/5.1.x/user/diagrams/images/diagram_editor6.png
new file mode 100644
index 0000000..46d7c5e
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor6.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor7.png b/doc/5.1.x/user/diagrams/images/diagram_editor7.png
new file mode 100644
index 0000000..e366b0c
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor7.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor8.png b/doc/5.1.x/user/diagrams/images/diagram_editor8.png
new file mode 100644
index 0000000..5fc04a1
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor8.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_copy_format.png b/doc/5.1.x/user/diagrams/images/diagram_editor_copy_format.png
new file mode 100644
index 0000000..f695bb5
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_copy_format.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_dnd01.png b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd01.png
new file mode 100644
index 0000000..bd885a8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd01.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_dnd02a.png b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd02a.png
new file mode 100644
index 0000000..c748aa4
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd02a.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_dnd02b.png b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd02b.png
new file mode 100644
index 0000000..3b8d433
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd02b.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_dnd03a.png b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd03a.png
new file mode 100644
index 0000000..2a15980
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd03a.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_dnd03b.png b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd03b.png
new file mode 100644
index 0000000..cd87f6b
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd03b.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_filter_toolbar_activated.png b/doc/5.1.x/user/diagrams/images/diagram_editor_filter_toolbar_activated.png
new file mode 100644
index 0000000..f14d385
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_filter_toolbar_activated.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_hide_edge_label_1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_edge_label_1.png
new file mode 100644
index 0000000..49311ac
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_edge_label_1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_1.png
new file mode 100644
index 0000000..756782a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_icon_1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_icon_1.png
new file mode 100644
index 0000000..42bac1e
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_icon_1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_icon_2.png b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_icon_2.png
new file mode 100644
index 0000000..56d4580
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_icon_2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_outline.png b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_outline.png
new file mode 100644
index 0000000..07d213d
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_outline.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_tabbar.png b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_tabbar.png
new file mode 100644
index 0000000..2c9a087
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_tabbar.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_note_pin_configuration01.png b/doc/5.1.x/user/diagrams/images/diagram_editor_note_pin_configuration01.png
new file mode 100644
index 0000000..b8445da
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_note_pin_configuration01.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_paste_format1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_format1.png
new file mode 100644
index 0000000..e03e459
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_format1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_paste_format2.png b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_format2.png
new file mode 100644
index 0000000..398999f
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_format2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_paste_layout1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_layout1.png
new file mode 100644
index 0000000..94d8a9a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_layout1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_paste_layout2.png b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_layout2.png
new file mode 100644
index 0000000..9147270
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_layout2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_paste_style1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_style1.png
new file mode 100644
index 0000000..bb55dcf
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_style1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_paste_style2.png b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_style2.png
new file mode 100644
index 0000000..18c2b4a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_style2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin01.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin01.png
new file mode 100644
index 0000000..b76fb2b
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin01.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin02.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin02.png
new file mode 100644
index 0000000..6abf974
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin02.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin03.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin03.png
new file mode 100644
index 0000000..c82edd8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin03.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin04.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin04.png
new file mode 100644
index 0000000..9770450
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin04.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin05.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin05.png
new file mode 100644
index 0000000..9a30c06
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin05.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin_configuration01.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_configuration01.png
new file mode 100644
index 0000000..0c1ae42
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_configuration01.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin_dialog1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_dialog1.png
new file mode 100644
index 0000000..5bff512
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_dialog1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin_dialog2.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_dialog2.png
new file mode 100644
index 0000000..33ba02b
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_dialog2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin_toolbar_activated.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_toolbar_activated.png
new file mode 100644
index 0000000..4487bc6
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_toolbar_activated.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_show_hide_dialog1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_show_hide_dialog1.png
new file mode 100644
index 0000000..90421f3
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_show_hide_dialog1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_show_hide_dialog2.png b/doc/5.1.x/user/diagrams/images/diagram_editor_show_hide_dialog2.png
new file mode 100644
index 0000000..996d84f
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_show_hide_dialog2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_transient_layer.png b/doc/5.1.x/user/diagrams/images/diagram_editor_transient_layer.png
new file mode 100644
index 0000000..a133501
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_transient_layer.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_export_history.png b/doc/5.1.x/user/diagrams/images/diagram_export_history.png
new file mode 100644
index 0000000..1305006
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_export_history.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_export_image_tabbar.png b/doc/5.1.x/user/diagrams/images/diagram_export_image_tabbar.png
new file mode 100644
index 0000000..bf12106
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_export_image_tabbar.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_export_one_image.png b/doc/5.1.x/user/diagrams/images/diagram_export_one_image.png
new file mode 100644
index 0000000..a69284d
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_export_one_image.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_export_wrong_extension.png b/doc/5.1.x/user/diagrams/images/diagram_export_wrong_extension.png
new file mode 100644
index 0000000..397362a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_export_wrong_extension.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_sample1.png b/doc/5.1.x/user/diagrams/images/diagram_sample1.png
new file mode 100644
index 0000000..03dfbe9
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_sample1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_sample_annotated.png b/doc/5.1.x/user/diagrams/images/diagram_sample_annotated.png
new file mode 100644
index 0000000..53e10a7
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_sample_annotated.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/distribute_Centers.png b/doc/5.1.x/user/diagrams/images/distribute_Centers.png
new file mode 100644
index 0000000..74c50d8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/distribute_Centers.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/distribute_WithUniformGap.png b/doc/5.1.x/user/diagrams/images/distribute_WithUniformGap.png
new file mode 100644
index 0000000..21944de
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/distribute_WithUniformGap.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/distribute_initialState.png b/doc/5.1.x/user/diagrams/images/distribute_initialState.png
new file mode 100644
index 0000000..33e0439
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/distribute_initialState.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_edgeSelected.png b/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_edgeSelected.png
new file mode 100644
index 0000000..6afb62c
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_edgeSelected.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_labelSelected.png b/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_labelSelected.png
new file mode 100644
index 0000000..5c7c57e
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_labelSelected.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_preference.png b/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_preference.png
new file mode 100644
index 0000000..fd731fa
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_preference.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/exportSample.png b/doc/5.1.x/user/diagrams/images/exportSample.png
new file mode 100644
index 0000000..7ac6ce3
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/exportSample.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/exportSampleSource.png b/doc/5.1.x/user/diagrams/images/exportSampleSource.png
new file mode 100644
index 0000000..82dcde1
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/exportSampleSource.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/layoutingMode_forbidden_dnd.png b/doc/5.1.x/user/diagrams/images/layoutingMode_forbidden_dnd.png
new file mode 100644
index 0000000..c82aeef
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/layoutingMode_forbidden_dnd.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/layouting_mode_tabbar_activate.png b/doc/5.1.x/user/diagrams/images/layouting_mode_tabbar_activate.png
new file mode 100644
index 0000000..c6e8330
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/layouting_mode_tabbar_activate.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/moveEdgeGroup1.png b/doc/5.1.x/user/diagrams/images/moveEdgeGroup1.png
new file mode 100644
index 0000000..e621e64
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/moveEdgeGroup1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/moveEdgeGroup2.png b/doc/5.1.x/user/diagrams/images/moveEdgeGroup2.png
new file mode 100644
index 0000000..fce0889
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/moveEdgeGroup2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/palette_folding.png b/doc/5.1.x/user/diagrams/images/palette_folding.png
new file mode 100644
index 0000000..15101a8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/palette_folding.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/palette_moving.png b/doc/5.1.x/user/diagrams/images/palette_moving.png
new file mode 100644
index 0000000..a31b2ff
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/palette_moving.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/palette_resizing.png b/doc/5.1.x/user/diagrams/images/palette_resizing.png
new file mode 100644
index 0000000..9890cc4
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/palette_resizing.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/palette_tool_drawer.png b/doc/5.1.x/user/diagrams/images/palette_tool_drawer.png
new file mode 100644
index 0000000..86efacd
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/palette_tool_drawer.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/palette_tool_group.png b/doc/5.1.x/user/diagrams/images/palette_tool_group.png
new file mode 100644
index 0000000..e50ee39
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/palette_tool_group.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/palette_tools.png b/doc/5.1.x/user/diagrams/images/palette_tools.png
new file mode 100644
index 0000000..c2f234f
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/palette_tools.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/popup_bar.png b/doc/5.1.x/user/diagrams/images/popup_bar.png
new file mode 100644
index 0000000..ac15be9
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/popup_bar.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/port_selection_handles1.png b/doc/5.1.x/user/diagrams/images/port_selection_handles1.png
new file mode 100644
index 0000000..b94a613
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/port_selection_handles1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/port_selection_handles2.png b/doc/5.1.x/user/diagrams/images/port_selection_handles2.png
new file mode 100644
index 0000000..2fb3099
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/port_selection_handles2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/port_selection_handles3.png b/doc/5.1.x/user/diagrams/images/port_selection_handles3.png
new file mode 100644
index 0000000..75734b9
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/port_selection_handles3.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/port_selection_handles4.png b/doc/5.1.x/user/diagrams/images/port_selection_handles4.png
new file mode 100644
index 0000000..4bbd81b
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/port_selection_handles4.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram.png b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram.png
new file mode 100644
index 0000000..60ca1b7
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_appearance.png b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_appearance.png
new file mode 100644
index 0000000..fa5fc45
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_appearance.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_connections.png b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_connections.png
new file mode 100644
index 0000000..f0e0835
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_connections.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_pathmaps.png b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_pathmaps.png
new file mode 100644
index 0000000..e2328f1
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_pathmaps.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_printing.png b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_printing.png
new file mode 100644
index 0000000..2ab091d
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_printing.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_rulers_grid.png b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_rulers_grid.png
new file mode 100644
index 0000000..263ec95
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_rulers_grid.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/properties_view_rulers_and_grid_tab.png b/doc/5.1.x/user/diagrams/images/properties_view_rulers_and_grid_tab.png
new file mode 100644
index 0000000..0b0fc9f
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/properties_view_rulers_and_grid_tab.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/rectilinearAfterRemoveBendpoints.png b/doc/5.1.x/user/diagrams/images/rectilinearAfterRemoveBendpoints.png
new file mode 100644
index 0000000..eb55619
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/rectilinearAfterRemoveBendpoints.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/rectilinearWithBendpoints.png b/doc/5.1.x/user/diagrams/images/rectilinearWithBendpoints.png
new file mode 100644
index 0000000..0f0cf4d
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/rectilinearWithBendpoints.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/reset_origin_after.png b/doc/5.1.x/user/diagrams/images/reset_origin_after.png
new file mode 100644
index 0000000..6c375ce
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/reset_origin_after.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/reset_origin_before.png b/doc/5.1.x/user/diagrams/images/reset_origin_before.png
new file mode 100644
index 0000000..be33cd1
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/reset_origin_before.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/reset_origin_masked_edge.png b/doc/5.1.x/user/diagrams/images/reset_origin_masked_edge.png
new file mode 100644
index 0000000..647ab4f
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/reset_origin_masked_edge.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/reset_origin_visible_edge.png b/doc/5.1.x/user/diagrams/images/reset_origin_visible_edge.png
new file mode 100644
index 0000000..99dd0a3
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/reset_origin_visible_edge.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snap-back-label-from-label.png b/doc/5.1.x/user/diagrams/images/snap-back-label-from-label.png
new file mode 100644
index 0000000..0d64ad8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snap-back-label-from-label.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snap-back-label.png b/doc/5.1.x/user/diagrams/images/snap-back-label.png
new file mode 100644
index 0000000..b26db27
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snap-back-label.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snap_to_all_shapes.png b/doc/5.1.x/user/diagrams/images/snap_to_all_shapes.png
new file mode 100644
index 0000000..a02d8f6
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snap_to_all_shapes.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snap_to_all_shapes_2.png b/doc/5.1.x/user/diagrams/images/snap_to_all_shapes_2.png
new file mode 100644
index 0000000..ad76b93
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snap_to_all_shapes_2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snap_to_shape.png b/doc/5.1.x/user/diagrams/images/snap_to_shape.png
new file mode 100644
index 0000000..dba8a12
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snap_to_shape.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snapped-back-label-from-label.png b/doc/5.1.x/user/diagrams/images/snapped-back-label-from-label.png
new file mode 100644
index 0000000..2ceb5a0
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snapped-back-label-from-label.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snapped-back-label.png b/doc/5.1.x/user/diagrams/images/snapped-back-label.png
new file mode 100644
index 0000000..912b3c7
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snapped-back-label.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenHorizontalInitialState.png b/doc/5.1.x/user/diagrams/images/straightenHorizontalInitialState.png
new file mode 100644
index 0000000..40546d9
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenHorizontalInitialState.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenToBottom.png b/doc/5.1.x/user/diagrams/images/straightenToBottom.png
new file mode 100644
index 0000000..9c71f08
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenToBottom.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenToLeft.png b/doc/5.1.x/user/diagrams/images/straightenToLeft.png
new file mode 100644
index 0000000..3c579ca
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenToLeft.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenToMenu.png b/doc/5.1.x/user/diagrams/images/straightenToMenu.png
new file mode 100644
index 0000000..d686ea1
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenToMenu.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenToRight.png b/doc/5.1.x/user/diagrams/images/straightenToRight.png
new file mode 100644
index 0000000..a92f59c
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenToRight.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenToTabbarButton.png b/doc/5.1.x/user/diagrams/images/straightenToTabbarButton.png
new file mode 100644
index 0000000..2173ddb
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenToTabbarButton.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenToTop.png b/doc/5.1.x/user/diagrams/images/straightenToTop.png
new file mode 100644
index 0000000..ccc9eee
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenToTop.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenVerticalInitialState.png b/doc/5.1.x/user/diagrams/images/straightenVerticalInitialState.png
new file mode 100644
index 0000000..6917350
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenVerticalInitialState.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenWithLeftPinned.png b/doc/5.1.x/user/diagrams/images/straightenWithLeftPinned.png
new file mode 100644
index 0000000..74bad50
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenWithLeftPinned.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenWithRightPinned.png b/doc/5.1.x/user/diagrams/images/straightenWithRightPinned.png
new file mode 100644
index 0000000..0f5c24a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenWithRightPinned.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/synchronized_diagram1.png b/doc/5.1.x/user/diagrams/images/synchronized_diagram1.png
new file mode 100644
index 0000000..39d6d61
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/synchronized_diagram1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/synchronized_diagram2.png b/doc/5.1.x/user/diagrams/images/synchronized_diagram2.png
new file mode 100644
index 0000000..6877a48
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/synchronized_diagram2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/synchronized_diagram3.png b/doc/5.1.x/user/diagrams/images/synchronized_diagram3.png
new file mode 100644
index 0000000..4a95bc8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/synchronized_diagram3.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/synchronized_diagram4.png b/doc/5.1.x/user/diagrams/images/synchronized_diagram4.png
new file mode 100644
index 0000000..7b195af
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/synchronized_diagram4.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/synchronized_diagram5.png b/doc/5.1.x/user/diagrams/images/synchronized_diagram5.png
new file mode 100644
index 0000000..2690c09
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/synchronized_diagram5.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/synchronized_diagram_statusbar.png b/doc/5.1.x/user/diagrams/images/synchronized_diagram_statusbar.png
new file mode 100644
index 0000000..6436527
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/synchronized_diagram_statusbar.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar01.png b/doc/5.1.x/user/diagrams/images/tabbar01.png
new file mode 100644
index 0000000..6a71098
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar01.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar02.png b/doc/5.1.x/user/diagrams/images/tabbar02.png
new file mode 100644
index 0000000..ca5cf92
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar02.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar4x01.png b/doc/5.1.x/user/diagrams/images/tabbar4x01.png
new file mode 100644
index 0000000..4128e20
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar4x01.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar4x02.png b/doc/5.1.x/user/diagrams/images/tabbar4x02.png
new file mode 100644
index 0000000..e5c53cd
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar4x02.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_alignment_control.png b/doc/5.1.x/user/diagrams/images/tabbar_alignment_control.png
new file mode 100644
index 0000000..86bc077
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_alignment_control.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_apply_style.png b/doc/5.1.x/user/diagrams/images/tabbar_apply_style.png
new file mode 100644
index 0000000..dab7fd9
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_apply_style.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_arrange_selection.png b/doc/5.1.x/user/diagrams/images/tabbar_arrange_selection.png
new file mode 100644
index 0000000..6b3c5d2
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_arrange_selection.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_auto_size.png b/doc/5.1.x/user/diagrams/images/tabbar_auto_size.png
new file mode 100644
index 0000000..7d39ddc
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_auto_size.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_automatic_layout_tools.png b/doc/5.1.x/user/diagrams/images/tabbar_automatic_layout_tools.png
new file mode 100644
index 0000000..230c0e5
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_automatic_layout_tools.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_cancel_custom_style.png b/doc/5.1.x/user/diagrams/images/tabbar_cancel_custom_style.png
new file mode 100644
index 0000000..da854ab
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_cancel_custom_style.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_color_style_controls.png b/doc/5.1.x/user/diagrams/images/tabbar_color_style_controls.png
new file mode 100644
index 0000000..e365bef
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_color_style_controls.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_copy_layout.png b/doc/5.1.x/user/diagrams/images/tabbar_copy_layout.png
new file mode 100644
index 0000000..0f5f9b5
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_copy_layout.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_delete_from_diagram.png b/doc/5.1.x/user/diagrams/images/tabbar_delete_from_diagram.png
new file mode 100644
index 0000000..a9f3beb
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_delete_from_diagram.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_delete_from_model.png b/doc/5.1.x/user/diagrams/images/tabbar_delete_from_model.png
new file mode 100644
index 0000000..65bcca1
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_delete_from_model.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_distribute_actions.png b/doc/5.1.x/user/diagrams/images/tabbar_distribute_actions.png
new file mode 100644
index 0000000..e370d93
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_distribute_actions.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_export_image.png b/doc/5.1.x/user/diagrams/images/tabbar_export_image.png
new file mode 100644
index 0000000..c64e78a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_export_image.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_filters_selection.png b/doc/5.1.x/user/diagrams/images/tabbar_filters_selection.png
new file mode 100644
index 0000000..df398c8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_filters_selection.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_font_controls.png b/doc/5.1.x/user/diagrams/images/tabbar_font_controls.png
new file mode 100644
index 0000000..9f31faa
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_font_controls.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_hide.png b/doc/5.1.x/user/diagrams/images/tabbar_hide.png
new file mode 100644
index 0000000..2e44d15
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_hide.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_hide_label.png b/doc/5.1.x/user/diagrams/images/tabbar_hide_label.png
new file mode 100644
index 0000000..5fff9cd
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_hide_label.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_layers_selection.png b/doc/5.1.x/user/diagrams/images/tabbar_layers_selection.png
new file mode 100644
index 0000000..2d59363
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_layers_selection.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_layouting_mode.png b/doc/5.1.x/user/diagrams/images/tabbar_layouting_mode.png
new file mode 100644
index 0000000..7043991
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_layouting_mode.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_make_same_size.png b/doc/5.1.x/user/diagrams/images/tabbar_make_same_size.png
new file mode 100644
index 0000000..1281c23
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_make_same_size.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_paste_layout.png b/doc/5.1.x/user/diagrams/images/tabbar_paste_layout.png
new file mode 100644
index 0000000..50e7fe3
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_paste_layout.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_pin_unpin.png b/doc/5.1.x/user/diagrams/images/tabbar_pin_unpin.png
new file mode 100644
index 0000000..5bcb47e
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_pin_unpin.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_pin_unpin_02.png b/doc/5.1.x/user/diagrams/images/tabbar_pin_unpin_02.png
new file mode 100644
index 0000000..3ea18e5
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_pin_unpin_02.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_refresh.png b/doc/5.1.x/user/diagrams/images/tabbar_refresh.png
new file mode 100644
index 0000000..a80361a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_refresh.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_selection_tools.png b/doc/5.1.x/user/diagrams/images/tabbar_selection_tools.png
new file mode 100644
index 0000000..f3e792a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_selection_tools.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_show_hide.png b/doc/5.1.x/user/diagrams/images/tabbar_show_hide.png
new file mode 100644
index 0000000..804f768
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_show_hide.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_zoom.png b/doc/5.1.x/user/diagrams/images/tabbar_zoom.png
new file mode 100644
index 0000000..e13cbda
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_zoom.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/withBendpoints.png b/doc/5.1.x/user/diagrams/images/withBendpoints.png
new file mode 100644
index 0000000..c4fc32a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/withBendpoints.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/videos/moveInAllDirections.mp4 b/doc/5.1.x/user/diagrams/videos/moveInAllDirections.mp4
new file mode 100644
index 0000000..2c64e83
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/videos/moveInAllDirections.mp4
Binary files differ
diff --git a/doc/5.1.x/user/general/Aird_Editor.html b/doc/5.1.x/user/general/Aird_Editor.html
new file mode 100644
index 0000000..2bd0a5c
--- /dev/null
+++ b/doc/5.1.x/user/general/Aird_Editor.html
@@ -0,0 +1,440 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Aird_Editor</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="AirdEditor">Aird Editor</h1>
+ <p>This document describes the new form-based editor for
+ <code>aird</code> files introduced in version 5.0. This editor is associated to
+ <code>*.aird</code> files (which contains Sirius representations data) and provides end-users complete overview of their models and representations, and direct access to the most common operations.
+ </p>
+ <p>This document assumes you are already faimiliar with the vocabulary associated with Sirius; if that is not the case, please refer to
+ <a href="Modeling%20Project.html">the Modeling Project documentation</a> which describes in details the more “traditional” Sirius UI and the associated concepts.
+ </p>
+ <p>
+ <em>Note:</em> This new editor has been introduced with Sirius 5.0. While it is already functional, it should be considered as a first iteration, and its UI is subject to change without warnings in later versions based on experience and user feedback.
+ </p>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#AirdEditor">Aird Editor</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#overview">Overview</a>
+ </li>
+ <li>
+ <a href="#opening">Opening the Aird Editor</a>
+ </li>
+ <li>
+ <a href="#closing">Closing the Aird Editor and unloading models</a>
+ </li>
+ <li>
+ <a href="#semantic_models">Managing the Semantic Models</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#LoadinganExistingModel">Loading an Existing Model</a>
+ </li>
+ <li>
+ <a href="#model_creation_wizard">Creating New Models</a>
+ </li>
+ <li>
+ <a href="#removing_model">Removing Model Dependencies And Representations From The Aird Editor</a>
+ </li>
+ <li>
+ <a href="#removing_representation">Removing Representations From The Aird Editor</a>
+ </li>
+ <li>
+ <a href="#quick_editing">Models Quick Editing</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#representations">Managing Representations and Viewpoints</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#visualize_viewpoints_representations">Visualizing Viewpoints and Representations</a>
+ </li>
+ <li>
+ <a href="#enable_disable_viewpoints">Enabling and Disabling Viewpoints</a>
+ </li>
+ <li>
+ <a href="#create_remove_representations">Creating and Removing Representations</a>
+ </li>
+ <li>
+ <a href="#open_representation">Opening a Sirius Modeler From a Representation</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="overview">Overview</h2>
+ <p>The traditional Sirius UI is centered on the
+ <em>Modeling</em> perspective, and in particular on the
+ <em>Model Explorer</em> view. For some use cases, especially when Sirius representations are not the primary focus of the user but only a secondary feature to support their main task, this reliance on a specific perspective or view can be inconvenient. The Aird editor is designed to provide an alternative UI to interact with Sirius that is better suited for these use cases. Because the editor is available from any perspective and directly exposes the most common user operations inside its UI, it makes it more convenient to use Sirius in a variety of contexts.
+ </p>
+ <p>Note that most of the features available from the aird editor are also available from the
+ <em>Model Explorer</em>'s UI; the editor simply provides alternative ways to use them that can be more convenient in some contexts. There are two exceptions, described in more details below, which are currently specific to the Aird editor: the generic
+ <a href="#model_creation_wizard">model creation wizard</a> and the ability to
+ <a href="#quick_editing">add/remove elements directly</a> from the semantic models.
+ </p>
+ <p>Using Sirius to display and manipulate your domain models requires telling Sirius:</p>
+ <ul>
+ <li>which are the models (files) your are interested in;</li>
+ <li>which of the compatible representation types you want to make use of.</li>
+ </ul>
+ <p>Representation types are defined in plug-ins which extend Sirius and that you need to install in your environment. Which ones will be available to you depend on what concrete modelers you have installed. Sirius-based modelers can provide many alternative representation types for the same semantic models, and organize them in
+ <em>viewpoints</em>, which corresponds to the different activities or point of views that can be applied to the models.
+ </p>
+ <p>This organization is reflected in the editor, which presents two main blocks:</p>
+ <p>
+ <img border="0" src="images/aird_editor_full.png"/>
+ </p>
+ <p>On the left, the
+ <em>Models</em> block shows the raw semantic models, which can come from multiple files (resources), and allows you to configure which models should be loaded, to navigate inside them, to perform some basic editing tasks, and finally to create and manage Sirius representations on them.
+ </p>
+ <p>On the right the
+ <em>Representations</em> block displays all the types of representations available and all the concrete ones already created, organized by viewpoint (by default). It also allows you to manage the representations and viewpoints. The representation types available to you will depend both on the kind of models you have loaded and which modeler plug-ins you have installed in your environment. For example if you have installed
+ <a href="http://www.umldesigner.org/">UML Designer</a>
+ <strong>and</strong> have at least one
+ <code>*.uml</code> model loaded, you will find there the different kinds of UML diagrams implemented in
+ <em>UML Designer</em>.
+ </p>
+ <h2 id="opening">Opening the Aird Editor</h2>
+ <p>The Aird editor is the default editor associated to the
+ <code>*.aird</code> files in Eclipse. In some perspectives (e.g.
+ <em>Java</em>), double-clicking on an
+ <code>aird</code> file will open the editor and automatically load all the files/models needed if that it not already the case. In other contexts where double-click performs a different operation you may need to open the context menu and select
+ <i>Open With > Aird Editor</i>.
+ </p>
+ <p>It is also possible to configure Sirius to automatically open the Aird editor when an
+ <code>*.aird</code> file is first loaded. When this mode is enabled, opening/expanding a
+ <em>Modeling Project</em> from the
+ <em>Model Explorer</em>, which triggers the loading of the models, will also open the editor. This behavior can be enabled via the Sirius preference
+ <strong>
+ <i>Automatically open the aird editor when an aird file is loaded</i>
+ </strong>:
+ </p>
+ <p>
+ <img border="0" src="images/aird_editor_pref.png"/>
+ </p>
+ <p>When this preference is activated, then aird editor is opened automatically in the following situations:</p>
+ <ul>
+ <li>After clicking
+ <i>Finish</i> button of the
+ <i>Create a modeling project</i> wizard, the project is created as well as its aird file. The newly created aird file is automatically opened in the editor.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/aird_editor_modeling_project_creation_wizard.png"/>
+ </p>
+ <ul>
+ <li>When a project with the
+ <em>Modeling</em> nature is opened from
+ <i>Model Explorer</i> or
+ <i>Project Explorer</i>, the aird editor is also automatically opened if it contains a main aird file.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/aird_editor_open_project_modeling_explorer.png"/>
+ </p>
+ <ul>
+ <li>When the aird file is first expanded from a project with
+ <em>Modeling</em> nature from
+ <i>Model Explorer</i> or
+ <i>Project Explorer</i> view, the aird editor is also opened automatically.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/aird_editor_expand_aird_file.png"/>
+ </p>
+ <h2 id="closing">Closing the Aird Editor and unloading models</h2>
+ <p>You have four different ways to close the aird editor. But not all the ways have the same behaviour.</p>
+ <p>There is one thing to take in consideration when it comes to close the aird editor:</p>
+ <ul>
+ <li>An opened aird editor has all its referenced models loaded in memory as well as any representation opened in a Sirius editor. For big models and big representations, this can have a big memory footprint. So when you want to close the aird editor you must ask yourself if you want to free the memory used by the loaded aird or not. Then you have to choose the right way to close the editor accordingly. Indeed some way to close the editor will not free this memory and some others will.</li>
+ </ul>
+ <p>The closing mechanism which does not unload models and representations is the following:</p>
+ <ul>
+ <li>Clicking on the editor white cross on the top right corner of editor’s tab. This will only close the aird editor and will not free memory used by loaded models and representations opened in Sirius editors.</li>
+ </ul>
+ <p>
+ <img border="0" src="images/aird_editor_close_editor_with_cross.png"/>
+ </p>
+ <p>The closing mechanisms which do unload models and representations from memory are the following:</p>
+ <ul>
+ <li>If your aird editor refers to an aird file on a
+ <em>Modeling Project</em>, the only way to unload models and representations from memory is to close it.
+ </li>
+ </ul>
+ <ul>
+ <li>If your aird editor does not refer to an aird file on a
+ <em>Modeling Project</em>, a button
+ <em>Unload models</em> is provided by the editor and allows to close the aird editor and free memory used by loaded models and representations.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/aird_editor_close_editor_with_button.png"/>
+ </p>
+ <ul>
+ <li>When aird editor is not in a
+ <em>Modeling Project</em>,
+ <em>Close</em> action in contextual menu of the aird file is available. This action is reachable in any view showing the aird as an IFile like
+ <em>Model Explorer</em>,
+ <em>Package Explorer</em> etc...
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/aird_editor_close_editor_with_right_click.png"/>
+ </p>
+ <h2 id="semantic_models">Managing the Semantic Models</h2>
+ <p>This section describes how to manage the semantic models associated to your aird file, which are visible in the
+ <em>Models</em> block on the left side of the editor:
+ </p>
+ <p>
+ <img border="0" src="images/aird_editor_models_block.png"/>
+ </p>
+ <p>The
+ <em>Models</em> block displays a tree showing all semantic models associated to the aird file, organized in two categories:
+ </p>
+ <ul>
+ <li>The models located in the same workspace project as the one containing the aird file from which editor has been opened. These are visible as root items on the graphical tree.</li>
+ </ul>
+ <ul>
+ <li>The models located in a project that is different from the project containing the aird file from which the editor has been opened. These models are visible under the
+ <em>Project Dependencies</em> category.
+ </li>
+ </ul>
+ <p>For example:</p>
+ <p>
+ <img border="0" src="images/aird_editor_model_loading.png"/>
+ </p>
+ <p>Regardless of the category they appear in, all the semantic models associated with an aird file are fully loaded, and you can expand the tree elements to navigate inside your models. The tree can be filtered on the elements labels using the search box at the top to quickly locate specific model elements:</p>
+ <p>
+ <img border="0" src="images/aird_editor_filter_models_elements.png"/>
+ </p>
+ <p>In addition to the actual semantic elements, this view also includes all existing representations (diagrams, tables, trees). As in the case of the
+ <em>Model Explorer</em>, the representations are available directly below the semantic element they represent, and can be opened by double-clicking on them.
+ </p>
+ <h3 id="LoadinganExistingModel">Loading an Existing Model</h3>
+ <p>To be able to edit a semantic model with a Sirius modeler, you must first tell the aird it can edit that model. There are two mechanisms to do so:</p>
+ <ul>
+ <li>An automatic one were, if your project has
+ <em>Modeling</em> nature, any model file added inside the project will be automaticall added to the aird file.
+ </li>
+ <li>A manual one were you have two different buttons in the editor:
+ <ul>
+ <li>The
+ <strong>
+ <i>New...</i>
+ </strong> button, which opens a wizard allowing to create a new model from any registered package and in any project you want (see the next section for more details on the wizard). The newly created model will be loaded automatically in the aird file.
+ </li>
+ <li>The
+ <strong>
+ <i>Add</i>
+ </strong> button, which allows to load into the aird file an already existing model either from the same project or from another one.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>Note that you can also add a new semantic model to a session by simply drag and dropping the model file from the workpace (from any Eclipse view) into the
+ <em>Models</em> block on the left side of the editor.
+ </p>
+ <h3 id="model_creation_wizard">Creating New Models</h3>
+ <p>The aird editor features a generic model creation wizard that can be used to create new models files of any kind supported in the environement (i.e. instances of any installed meta-model). To create a new model, select the
+ <i>New...</i> button. It opens a creation wizard:
+ </p>
+ <ul>
+ <li>The first page asks you to select which kind of model you want to create. It will present you all the EMF metamodels available in your installation (e.g. UML or BPMN). You can use the text field to filter among all the meta-models available (in large installations, there may be hundreds of them).</li>
+ </ul>
+ <p>
+ <img border="0" src="images\aird_editor_create_new_model.png"/>
+ </p>
+ <ul>
+ <li>Once the metamodel is selected, the second page asks for the type of the root element in the new model file. By default Sirius will try to infer good candidates for this root element type, and show only those. You can deselect the
+ <em>Show only suggested root types</em> checkbox to reveal
+ <strong>all</strong> the concrete types defined in the metamodel you selected.
+ </li>
+ <li>Finally, the third page of the wizard will ask you for the name and location of the new file to create. By default, the file will be created in the same project as the
+ <code>aird</code> file and have a generated name.
+ </li>
+ </ul>
+ <h3 id="removing_model">Removing Model Dependencies And Representations From The Aird Editor</h3>
+ <p>To remove
+ <strong>models dependencies</strong>, you must select the root model items and click on the
+ <strong>
+ <i>Remove</i>
+ </strong> button:
+ </p>
+ <p>
+ <img border="0" src="images/aird_editor_remove_semantic_model.png"/>
+ </p>Note that this action does not delete the physical model file.
+ <p>The removal can be applied only if some rules are respected. If they are not, the remove button will still be active and its activation, will inform you of the reasons why you cannot proceed the removal.</p>
+ <p>The rules regarding models dependencies removal are the following :</p>
+ <ul>
+ <li>A model dependency cannot be removed if at least one of its element contains a representation. Note that the representation can be invisible if the viewpoint providing it is not enabled.</li>
+ </ul>
+ <p>
+ <img border="0" src="images/aird_editor_remove_semantic_model_representation.png"/>
+ </p>
+ <ul>
+ <li>A model dependency cannot be removed if you are working inside a project with the
+ <em>Modeling</em> nature and the semantic model is located inside this project. Indeed, the
+ <em>Modeling</em> nature ensures that all model files stored inside the project are always loaded in the project’s
+ <code>aird</code> file.
+ </li>
+ </ul>
+ <ul>
+ <li>A model dependency cannot be removed if it is a fragment of a model. In this situation you need to use the
+ <strong>
+ <i>Uncontrol</i>
+ </strong> action to remove it.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/aird_editor_remove_semantic_model_uncontrol.png"/>
+ </p>
+ <h3 id="removing_representation">Removing Representations From The Aird Editor</h3>
+ <p>To remove a
+ <strong>representation</strong> from the aird file, you can either select it in the editor and use the right click contextual action
+ <strong>
+ <i>Delete</i>
+ </strong> or the
+ <strong>
+ <i>DEL</i>
+ </strong> keyboard key.
+ </p>
+ <h3 id="quick_editing">Models Quick Editing</h3>
+ <p>The normal way to display and edit models with Sirius is to do it through one or several Sirius-defined representations (
+ <em>modelers</em>), which define domain-specific ways to represent and manipulate the data, and ensure some level of consistency.
+ </p>
+ <p>In some situations you may need to manipulate the model elements more directly, even if no Sirius-based modeler or tool has been defined to support your use case. The
+ <em>aird editor</em> provides support for “quick editing” of the semantic models independently of a Sirius representation. It works like any generic EMF models editor:
+ </p>
+ <ul>
+ <li>You can right-click on a semantic element to create new children inside, or to delete it. </li>
+ <li>When you have selected an element, you can use the
+ <em>Properties</em> view to edit its features. Note that the content of this view depends on which
+ <em>viewpoints</em> are currently enabled. If you have enabled viewpoints which define specific properties views for your elements, these will be used instead of a generic one, so not all direct model operations may be available.
+ </li>
+ </ul>
+ <p>Keep in mind that editing the semantic models this way bypasses any high-level restrictions and rules that may be brought by Sirius modelers. Depending on the semantic models, these direct manipulation may break domain constraints. Use with care.</p>
+ <h2 id="representations">Managing Representations and Viewpoints</h2>
+ <p>To use a Sirius modeler to edit a model element, you need to create a graphical representation for it. This representation is then editable with a Sirius modeler that can be a diagram, a tree or a table editor. Concrete representations are created from a
+ <em>representation type</em>, which are provided by Sirius-based modelers, and organized by
+ <em>viewpoints</em>.
+ </p>
+ <p>In addition to providing representation types from which representation can be created, viewpoints can also provide extensions to other viewpoints' representation types, adding for example new tools to them.</p>
+ <p>The following sections describe how to create/remove representations and the related functionalities.</p>
+ <h3 id="visualize_viewpoints_representations">Visualizing Viewpoints and Representations</h3>
+ <p>The aird editor has a block named
+ <em>Representation</em> which displays all the available viewpoints (compatible with the semantic models loaded), the representation types they define, and the actual concrete representations that have been created. All these elements are organized in a tree:
+ </p>
+ <p>
+ <img border="0" src="images/aird_editor_representations_block.png"/>
+ </p>
+ <p>This
+ <em>Representations</em> block is separated in two parts:
+ </p>
+ <ul>
+ <li>The left is the tree showing viewpoints with their representations types (showing the number of representations it contains) and representations.</li>
+ <li>The right part shows the documentation of the viewpoint of the selected element. It allows to find what viewpoint provides the representation type providing Sirius modeler functionalities fitting your needs to edit graphically your models.</li>
+ </ul>
+ <p>To the bottom of these two parts are two checkboxes, that can be used to control which elements are displayed:</p>
+ <ul>
+ <li>
+ <strong>
+ <i>Group representations by viewpoint</i>
+ </strong>: when active (the default), viewpoints items are shown in the tree. When deactivated, only representation types and their representations are shown.
+ </li>
+ <li>
+ <strong>
+ <i>Show disabled viewpoints</i>
+ </strong>: when active (the default),
+ <strong>all</strong> the available viewpoints (and their content) which apply to the semantic elements currently loaded are displayed, even if they are currently disabled. This is useful when starting a new project as it shows you immediatly all the features that are available to you, even if you have not yet enabled any. Once you have enabled the viewpoints you need, you may want to hide the others to help focus.
+ </li>
+ </ul>
+ <p>A viewpoint is grayed out if it is disabled. Otherwise it is enabled in the aird file.</p>
+ <p>The viewpoints shown are all the viewpoints available in your environment that are compatible with the models loaded in the aird file. So if your environment does not contain any viewpoint compatible with your models or if you have no models loaded, then the graphical representations component will be empty.</p>
+ <p>Representations can also be seen directly in the models graphical component of the aird editor under the associated model’s element if the viewpoint containing the representation type used to create the representation is activated. If not the representation will not be visible.</p>
+ <p>
+ <img border="0" src="images/aird_editor_rep_under_model.png"/>
+ </p>
+ <p>To open an exisiting representation, simply double-click on it (this works both in the
+ <em>Representations</em> tree and in the
+ <em>Semantics</em> tree).
+ </p>
+ <h3 id="enable_disable_viewpoints">Enabling and Disabling Viewpoints</h3>
+ <p>A viewpoint provides representation types and/or extension for other representation types. In some cases you want need to disable functionalities brought by these extensions or on the contrary to enable them. </p>
+ <p>To enable/disable a viewpoint, you can either:</p>
+ <ul>
+ <li>double click on a viewpoint item on the representations graphical component of the aird editor. It will enable or disable the viewpoint depending on its current state.</li>
+ <li>use the
+ <strong>
+ <i>Enable</i>
+ </strong>
+ <strong>
+ <i>Disable</i>
+ </strong> buttons after having selected one or more viewpoints.
+ </li>
+ <li>create a new representation defined in a previously disabled viewpoint. It will activate the viewpoint of the corresponding representation type.</li>
+ </ul>
+ <p>Some viewpoints have dependencies to another ones. Enabling a viewpoint will automatically enable all its dependencies. Disabling a viewpoint that is a dependency of another one will ask you to confirm its disabling as well as the ones depending on it.</p>
+ <h3 id="create_remove_representations">Creating and Removing Representations</h3>
+ <p>After having identified the representation type providing Sirius modeler functionalities you need, three methods are available to create a new representation from it and a model element to edit its content:</p>
+ <ul>
+ <li>First you can double click on a representation type from the representations graphical component of the aird editor. It opens the
+ <strong>
+ <i>Create a new representation</i>
+ </strong> wizard. You then have to select a model element compatible with the description from which the new representation will be created.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/aird_editor_create_rep_double_click.png"/>
+ </p>
+ <ul>
+ <li>Second you can click on the
+ <strong>
+ <i>New</i>
+ </strong> button of the representations graphical component of the aird editor. It opens the wizard were you have first to select the representation type from which you want to create a representation before choosing the model element.
+ </li>
+ </ul>
+ <ul>
+ <li>The last method is to use the contextual menu action
+ <strong>
+ <i>New representation</i>
+ </strong> available on right click on a model element from the models graphical component:
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/aird_editor_new_rep_menu.png"/>
+ </p>
+ <p>The menu shows only representation types compatible with the selected model element and that belong to activated viewpoints. When choosing
+ <strong>
+ <i>Other...</i>
+ </strong> the wizard to create new representation is opened and show the representation types compatible with the selected element whether they belong to a viewpoint activated or deactivated. If you create a representation defined in a viewpoint that was previously disabled, it will be enabled automatically.
+ </p>
+ <p>You can
+ <em>remove</em> a representation either from the representations or models graphical components of the aird editor by:
+ </p>
+ <ul>
+ <li>using the
+ <i>Remove</i> action in the representation’s context menu;
+ </li>
+ <li>using the
+ <i>Remove</i> button of representations block when the representation to remove is selected there;
+ </li>
+ <li>select the representation and hit the
+ <i>Del</i> key.
+ </li>
+ </ul>
+ <h3 id="open_representation">Opening a Sirius Modeler From a Representation</h3>
+ <p>To open a representation to edit graphically the model’s element it is associated to, you just have to double-click on it either in the models or representations graphical component of the aird editor. </p>
+ <p>If you double click on a representation in the
+ <em>Representations</em> block that belong to a disabled viewpoint, this viewpoint will automatically be enabled before opening the representation.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/general/Modeling Project.html b/doc/5.1.x/user/general/Modeling Project.html
new file mode 100644
index 0000000..ae3fb17
--- /dev/null
+++ b/doc/5.1.x/user/general/Modeling Project.html
@@ -0,0 +1,574 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Modeling Project</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="ModelingProjectsandRepresentations">Modeling Projects and Representations</h1>
+ <p>In this document you will learn how to create and manage Modeling Projects, which are used in Sirius to organize your models and their representations (diagrams, tables, etc.).</p>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#ModelingProjectsandRepresentations">Modeling Projects and Representations</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#Introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#FormerUsers">Note to Users of Previous Versions</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#Migration">Migration of Existing Representation Files</a>
+ </li>
+ <li>
+ <a href="#UICHanges">User Interface Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#ModelingPerspective">The Modeling Perspective</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#ModelExplorer">The Model Explorer View</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#MP">Modeling Projects</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#MPCreation">Creating a New Modeling Project</a>
+ </li>
+ <li>
+ <a href="#MPConversion">Converting an Existing Project into a Modeling Project</a>
+ </li>
+ <li>
+ <a href="#MPConversionReverse">Removing the Modeling Nature from a Project</a>
+ </li>
+ <li>
+ <a href="#ViewpointSelection">Selecting Which Viewpoints to Enable</a>
+ </li>
+ <li>
+ <a href="#ProjectDependencies">Project Dependencies</a>
+ </li>
+ <li>
+ <a href="#ModelsInMP">Models in Modeling Projects</a>
+ </li>
+ <li>
+ <a href="#ModelActions">Actions Available on Model Elements</a>
+ </li>
+ <li>
+ <a href="#AirdFiles">Representations Files</a>
+ </li>
+ <li>
+ <a href="#AirdStructure">Structure of a _Representations File_</a>
+ </li>
+ <li>
+ <a href="#repair">Repair action</a>
+ </li>
+ <li>
+ <a href="#MPConstraints">Constraints</a>
+ </li>
+ <li>
+ <a href="#Lifecycle">Modeling Project Lifecycle</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#Representations">Representations</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#ReprCreation">Creating a Representation</a>
+ </li>
+ <li>
+ <a href="#ReprManagement">Managing Representations</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#LegacyMode">Legacy Mode </a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="Introduction">Introduction</h2>
+ <p>The Sirius system is used to create, visualize and edit your
+ <em>models</em> using interactive editors called
+ <em>modelers</em>. These modelers can be of different kinds, depending on the type of visual representations. Out of the box, Sirius supports three different
+ <em>dialects</em> (kinds of representations)
+ <em>diagrams</em> (graphical modelers),
+ <em>tables</em>, and
+ <em>trees</em> (hierarchical representations). New dialects can be added through programming.
+ </p>
+ <p>Provided with the right configuration file (something called a
+ <em>Viewpoint Specification Model</em> or
+ <em>VSM</em> for short), Sirius can represent any model which is compatible with EMF (the de facto standard for modeling tools in the Eclipse world). This includes standards like UML, SysML, TOGAF etc., but also any
+ <em>Domain Specific Model</em> (
+ <em>DSM</em>) which you can create to better suit your specific needs. For one kind of model (e.g. TOGAF, which is used to describe Enterprise Architectures), several Sirius configurations can be created, each one specific to a particular
+ <em>viewpoint</em>. Different kinds of users can thus see the same model through different viewpoints, each adapted to his preoccupations: from the same TOGAF model, the
+ <acronym title="Chief Executing Officer">CEO</acronym> will want to see a general overview of how the company is organized, the
+ <acronym title="Chief Operating Officer">COO</acronym> may want a view more oriented towards processes, and a system administrator will need a view on just the parts which concern software systems put in place to implement these processes.
+ </p>
+ <p>Sirius makes it easy for architects to create
+ <em>Viewpoint Specification Model</em> suited for any kind of model. These are then packaged as Eclipse plug-ins that you can install to use their modelers. Note that Sirius itself must also be installed for the viewpoints to run (they are not self-sufficient).
+ </p>
+ <p>As an end-user, you will use already configured modelers specially adapted to your needs. If you want to create your own modelers, please refer to the
+ <a href="../../specifier/Sirius%20Specifier%20Manual.html">Sirius Specifier Manual</a>. Simple modelers do not require any programming to create, and once you know the basics, a new graphical modeler can be created from scratch in less than an hour.
+ </p>
+ <p>To use already existing modelers (assuming the plug-ins which provide them are installed), you will need to know the following notions (see also
+ <a href="../../Glossary.html">the Glossary</a> ):
+ </p>
+ <ul>
+ <li>a
+ <em>resource</em> is a file (in your workspace or inside a plug-in) which contains a model;
+ </li>
+ <li>the
+ <em>semantic model</em> is the model (or models) which contains your business data. It can be stored in one of several resources (files) which can reference each other. The type of semantic model can be different for each user. It can be based on a standard (for example
+ <code>.uml</code> files for UML models) or based on a
+ <em>Domain Specific Model</em> (sometimes called
+ <em>Domain Specific Language</em>) which was specially created for your needs.
+ </li>
+ <li>a
+ <em>dialect</em> is a kind of representation supported by Sirius. Out of the box, Sirius supports three dialects: diagrams, tables, and trees. Sequence diagrams and cross-tables, which are special kinds of diagrams (resp. tables) can also be considered of as dialects, although technically they are not.
+ </li>
+ <li>a
+ <em>representation</em> is a particular diagram, table, or tree which you created on your semantic model. It is simply a more general term than “diagram” which is also usable for other dialects.
+ </li>
+ <li>a
+ <em>representation file</em> is a file in which Sirius stores all informations related to which representations you created, what appears on them, the positions and colors of the elements, etc. This files have a
+ <code>.aird</code> extension (typically
+ <code>representations.aird</code>). Representation files reference the semantic model(s) they contain representations for, but you semantic models are kept unaware (and unpolluted) of any Sirius-specific data.
+ </li>
+ <li>a
+ <em>viewpoint</em> is a set of representation descriptions which provide a specific point of view on some kind of semantic model. For example we could have a
+ <em>UML Structural</em> viewpoint, which describes the sub-set of all the standard UML diagrams which deal only with structural aspects of UML models (as opposed to behavioral or requirements aspects). Viewpoints are defined in
+ <em>Viewpoint Specification Models</em> and packaged as Eclipse plug-ins. Once you install such a plug-in, the viewpoints it defines will be available to you (with all the representations they define) on all compatible semantic models.
+ </li>
+ <li>a
+ <em>modeling project</em> is a special kind of project in your workspace which makes it easy to manipulate representation files and semantic models in a consistent way.
+ </li>
+ </ul>
+ <p>The rest of this document explains how you can use the Sirius UI to create and manipulate representations of your semantic models. Each viewpoint and representation is specific. We will use the
+ <em>Family</em> example for illustration purpose, but note that not all features may be available with all kinds of models and all viewpoints.
+ </p>
+ <h2 id="FormerUsers">Note to Users of Previous Versions</h2>
+ <p>New users can skip this section safely. For users of previous version who have existing models, this section explains the required steps to use their models with this version, and gives an overview of the main UI changes. See also the
+ <a href="../../Release_Notes.html">release notes</a> for more details.
+ </p>
+ <h3 id="Migration">Migration of Existing Representation Files</h3>
+ <p>Representation files are now automatically migrated when opened. This migration is transparent for the end-user. While a representation file is not saved, the automatic migration will be replayed at the next opening.</p>
+ <h3 id="UICHanges">User Interface Changes</h3>
+ <p>You will notice some radical changes in the user interface. The most important change is the disappearance of the
+ <em>Model Content</em> view. It has been replaced with a streamlined UI which integrates directly into the Eclipse explorer view. The notion of “Local Session” has disappeared from the user interface; its management has been made as transparent as possible so you do not have to deal with it except in some very specific circumstances.
+ </p>
+ <p>The recommended way to use Sirius is now to use the new notion of
+ <em>Modeling Project</em> described below. If you already have existing Sirius representation files (
+ <code>aird</code> files), a
+ <a href="#MPConversion">conversion</a> is necessary. Modeling projects have some constraints on how the files are organized. If you do not want or can not convert your models to the new recommended way, a
+ <a href="#LegacyMode">legacy mode</a> is provided which does not require any change to your projects organisation (beyond the files' migration). Note that the support for this legacy mode is not guaranteed to be maintained in all future versions of Sirius.
+ </p>
+ <h2 id="ModelingPerspective">The Modeling Perspective</h2>
+ <p>When you first start Sirius, it opens on the
+ <em>Modeling</em> perspective. This new perspective provides all the required views, wizards and menus to exploit designers as an end user.
+ </p>
+ <img border="0" src="images/modeling_perspective.png"/>
+ <p>The Modeling perspective provides the following views by default:</p>
+ <ul>
+ <li>A
+ <a href="#ModelExplorer">
+ <em>Model Explorer</em>
+ </a>, which is the main UI to interact with your models. (For users of previous versions, this explorer includes directly all the features which were found in the “Model Content” view before).
+ </li>
+ <li>An
+ <em>Outline</em> view, which provides a structural overview of the document or model currently opened. For diagrams, it shows a miniature view of the whole diagram on which you can easily navigate to other parts of the diagram for large ones.
+ </li>
+ <li>The
+ <em>Properties</em> view gives detailed information about the currently selected element. Depending on the nature of the selected element, some of these properties can be edited directly in the
+ <em>Properties</em> view with immediate effect.
+ </li>
+ <li>The
+ <em>Problems</em> view contains information markers of different severities (information only, warnings, or errors). This is where you will find validation errors on your models for example.
+ </li>
+ </ul>
+ <p>This perspective also provides useful actions available by right-clicking in the view
+ <a href="#ModelExplorer">
+ <em>Model Explorer</em>
+ </a>.
+ </p>
+ <p>As usual in Eclipse, this perspective can be customized at will by adding, moving or removing views, shortcuts, etc.</p>
+ <h3 id="ModelExplorer">The Model Explorer View</h3>
+ <p>The
+ <em>Model Explorer</em> view shows all the projects in you workspace and the files they contain. It adds some special capabilities to
+ <em>Modeling Projects</em>, to allow you to view and manipulate your semantic models and their Sirius representations directly inside the explorer.
+ </p>
+ <p>For instance, inside the
+ <em>Model Explorer</em>, semantic models and representation files which are part of a
+ <em>Modeling Project</em> or model files can be expanded to display their content directly:
+ </p>
+ <img border="0" src="images/model_explorer_view.png"/>
+ <p>In the example above, the
+ <code>example</code> modeling project (note the blue “M” decorator on the project icon) contains a single semantic model, the
+ <code>example.ecore</code> file, and a single representation file
+ <code>representations.aird</code>. Both can be expanded directly from inside the
+ <em>Model Explorer</em> view, to discover the structure of the semantic model and the graphical representations which already exist.
+ </p>
+ <p>The
+ <em>Model Explorer</em> supports the “Link with Editor” feature, which can be enabled by pressing the icon in the top right corner of the view (the one with two horizontal arrows, pressed in the screenshot above). When this mode is enabled, if you have a representation opened, clicking anywhere on it will automatically select the corresponding semantic element(s) inside the
+ <em>Model Explorer</em> (expanding the project and files if necessary). Conversely, if you select one or several semantic element(s) from one of your semantic models in the
+ <em>Model Explorer</em> view and if these elements are represented somewhere on the opened editor, they will be automatically selected. This can be very useful when you have many projects and representation or large representations to avoid getting lost.
+ </p>
+ <p>The
+ <em>Model Explorer</em> also supports filtering of elements from inside
+ <em>Modeling Projects</em> (and only these elements): if you enter some text in the search box at the top of the view, the view will filter out all the elements which do not match your text. For example if you enter
+ <code>Element</code> in the search box, only the model elements whose name starts with
+ <code>Element</code> will be shown. You can use the
+ <code>*</code> and
+ <code>?</code> special characters in your search string to mean respectively “any text” (including none) and “any single character”. For example the search string
+ <code>*Element</code> will show all elements whose name
+ <em>contains</em> the string
+ <code>Element</code> anywhere.
+ </p>
+ <p>The
+ <em>Model Explorer</em> allows to group tree items with an intermediary level. This feature clearly enhances the expand time on huge models.
+ <br/>
+ <img border="0" src="images/groupItems.png"/>
+ <br/>You can customize this feature with three preferences:
+ </p>
+ <ul>
+ <li>Enable/disable this feature globally</li>
+ <li>Increase/decrease the threshold that triggers the intermediary level</li>
+ <li>Increase/decrease the group size</li>
+ </ul>
+ <img border="0" src="images/groupItems_1.png"/>
+ <p>
+ <strong>Note:</strong> We see that this feature need to be enabled and have a hierarchy context above the threshold to be triggered.
+ <br/>In another hand, to keep a consistency, the threshold and group size value need to follow these rules:
+ </p>
+ <ul>
+ <li>The threshold needs to be higher or equal to the group size. Otherwise the threshold value will be ignored and the group size value will be used instead.</li>
+ <li>The group size value needs to be higher than zero.</li>
+ </ul>
+ <p>When you update these preferences, you need to make a refresh (F5) on all resources already expanded to get an updated tree items.</p>
+ <p>
+ <img border="0" src="images/groupItems_2.png"/>
+ </p>
+ <p>This feature is also enabled on tree selection wizards in Sirius diagram tools.</p>
+ <p>
+ <img border="0" src="images/groupItems_3.png"/>
+ </p>
+ <h2 id="MP">Modeling Projects</h2>
+ <p>Modeling Projects, which are used in Sirius to organize and manage your models and their representations (diagrams, tables, etc.).</p>
+ <p>Modeling projects are responsible for storing the representation data (diagrams, tables, etc.) in special
+ <em>representation files</em> with the extension
+ <code>.aird</code>. Modeling projects can also be used to store the semantic data of your models but this is not mandatory. Semantic data can be stored anywhere, but representation data
+ <strong>must be stored in
+ <code>aird</code> files within modeling projects
+ </strong> (the only exception is the
+ <a href="#LegacyMode">legacy mode</a> supported for compatibility with previous versions).
+ </p>
+ <p>Moreover, modeling projects provide
+ <em>actions to manage viewpoints and representations</em>: viewpoints are associated to a modeling project, so the viewpoints that will be available for a given Modeling Project’s representations are the one attached to this project. Viewpoints selection is made by right-clicking on a Modeling Project and choosing
+ <em>Viewpoints Selection</em>.
+ </p>
+ <h3 id="MPCreation">Creating a New Modeling Project</h3>
+ <p>To create a new
+ <em>Modeling Project</em>, simply right-click in the
+ <a href="#ModelExplorer">Model Explorer</a> (or use the
+ <em>File > New...</em> menu) and select
+ <em>New > Modeling Project</em>.
+ </p>
+ <img border="0" src="images/new_project1.png"/>
+ <p>A wizard opens, asking for a mandatory project name. Entering an invalid project name will result in an error message. By default, the modeling project will be created in the workspace’s location, but this can be changed: just uncheck “Use default location” and enter the path to the location where you want your modeling project to be created.</p>
+ <img border="0" src="images/new_project2.png"/>
+ <p>When you are done, click
+ <em>Finish</em> to actually create the modeling project. It will appear in the
+ <em>Model Explorer</em>, and by default contains two elements:
+ </p>
+ <ul>
+ <li>
+ <em>Project Dependencies</em>, where you can add external dependencies you rely on, i.e. models you will depend on but which are stored oustide of the project;
+ </li>
+ <li>
+ <code>representations.aird</code>, which is the top-level representation file for the project.
+ </li>
+ </ul>
+ <img border="0" src="images/new_project3.png"/>
+ <h3 id="MPConversion">Converting an Existing Project into a Modeling Project</h3>
+ <p>It can be useful to convert an existing project into a Modeling Project, since it is necessary for example to be able to create representations in it. An action is available to do this. Right-click on any project, then select
+ <em>Configure... > Convert to Modeling Project</em>.
+ </p>
+ <img border="0" src="images/convert_to_modeling_project1.png"/>
+ <p>This action does not alter in any way the nature of the project. For example, if the project was a Java project, it will still be a Java project afterwards. The action just adds the
+ <em>Modeling Project</em> nature to the selected project.
+ </p>
+ <img border="0" src="images/convert_to_modeling_project2.png"/>
+ <p>If there is a suitable representation file, it will be considered to be the top-level representation file for the converted project. Otherwise, a new representation file named
+ <em>representations.aird</em> will be created automatically at the root of the project.
+ </p>
+ <h3 id="MPConversionReverse">Removing the Modeling Nature from a Project</h3>
+ <p>If for some reason you want to revert the conversion of a project into a
+ <em>Modeling Project</em>, you can use the
+ <em>Configure... > Remove Modeling Project Nature</em> action on the context menu of the project.
+ </p>
+ <p>The action will simply remove the nature from the project itself, but will not remove or alter the representation files stored inside. You will still be able to use your representations using the
+ <a href="#LegacyMode">legacy mode</a>.
+ </p>
+ <h3 id="ViewpointSelection">Selecting Which Viewpoints to Enable</h3>
+ <p>Each modeling project has a set of viewpoints which are
+ <em>enabled</em>. This controls what kind of representations you can create on the semantic models inside the project. The set of viewpoints which are available to you will depend on what plug-ins you have installed, and on the type of semantic models which are inside the modeling projects. For example, even if you have installed the <a href="http://marketplace.obeonetwork.com/module/uml" target="_blank">UML Designer</a>, you will only be able to enable to corresponding viewpoints if your project contains UML models (
+ <code>.uml</code> files).
+ </p>
+ <p>To select which viewpoints are enable on your project, simply use the
+ <em>Viewpoints Selection</em> action in the context menu of the project itself. A dialog box will open which will show you all the viewpoints which are compatible with your project (depending on the kind of models it contains). You can check or un-check each viewpoint individually to enable or disable it, and click
+ <em>OK</em> to validate your choice. Note that some viewpoints depend on other ones (especially viewpoints which extend other ones). If your selection of viewpoints does not include all the required dependencies, a message will be shown to indicate which dependencies are not resolved. You can then adjust your selection and re-validate it.
+ </p>
+ <img border="0" src="images/viewpoint_selection1.png"/>
+ <img border="0" src="images/viewpoint_selection2.png"/>
+ <h3 id="ProjectDependencies">Project Dependencies</h3>
+ <p>A modeling project will always have an element called
+ <em>Project Dependencies</em> available. This is used to import external models, which are stored outside of the modeling project but used in it, for instance for certain representations of the project.
+ </p>
+ <p>To use a semantic model stored outside of the current modeling project, it must be added to the project dependencies. That will not change its location but will simply allow access to its content.
+ <br/>To add an external model to a modeling project, right-click on
+ <em>Project Dependencies</em> then select
+ <em>Add Model</em>.
+ <br/>Project dependencies can contain both semantic models and graphical models (
+ <em>i.e. representations files</em>)
+ </p>
+ <img border="0" src="images/project_dependencies1.png"/>
+ <p>A wizard page opens, allowing you to enter the URI of the model to add. If the model is in the workspace, you can use the button
+ <em>Browse Workspace</em> to look for it. If the model in in the file system, you can use the button
+ <em>Browse File System...</em> to find it. Otherwise, you must enter the model’s URI manually.
+ </p>
+ <img border="0" src="images/project_dependencies2.png"/>
+ <p>Once the model’s URI is entered, click
+ <em>OK</em>. The model is added under
+ <em>Project Dependencies</em> and a pop-up window is displayed to allow you to select the viewpoints you need. Just select or unselect the viewpoints you want and click
+ <em>OK</em> when you’re done.
+ </p>
+ <img border="0" src="images/project_dependencies3.png"/>
+ <p>Referenced models can be removed if they are not used, just right-click on the model in the
+ <em>Model Dependencies</em> and select
+ <em>Remove</em>.
+ </p>
+ <img border="0" src="images/remove_dependencies1.png"/>
+ <p>
+ <strong>Note:</strong> If the referenced model is a non-modeling project in the workspace, the corresponding file will be decorated with an
+ <em>M</em> in the upper right corner to indicate that this model is used in a Modeling Project. This decorator disappears if the modeling projects that use this model are closed.
+ </p>
+ <img border="0" src="images/decorated_model1.png"/>
+ <h3 id="ModelsInMP">Models in Modeling Projects</h3>
+ <p>Any model available in a modeling project, whether physically located in the modeling project or just referenced by it (
+ <em>via</em> the
+ <em>Project Dependencies</em>), will be expandable. This means that the content of any model used or referenced in a modeling project can be browse directly in the modeling project, in the view
+ <a href="#ModelExplorer">Model Explorer</a>.
+ </p>
+ <img border="0" src="images/models_content1.png"/>
+ <h3 id="ModelActions">Actions Available on Model Elements</h3>
+ <p>When browsing a model in a modeling project, several actions can be accessed by right-clicking on a model element:</p>
+ <ul>
+ <li>
+ <em>New Representation</em> allows you to create a new representation. The availability of this action depends on the kind of model and selected viewpoints, the action being displayed only when it makes sense;
+ </li>
+ <li>
+ <em>Export diagrams as images</em> allows you to export the diagrams related to this element (those that are displayed directly under this element) in image files.
+ </li>
+ </ul>
+ <h3 id="AirdFiles">Representations Files</h3>
+ <p>Representations files are used to store representations. They have the extension
+ <code>.aird</code>.
+ <br/>Such files contain the data needed to display the diagrams (or other kinds of representations) but they do not contain semantic data, which are stored by the models themselves.
+ <br/>Representations files located in modeling projects can be unfolded to browse their content.
+ </p>
+ <h3 id="AirdStructure">Structure of a
+ <em>Representations File</em>
+ </h3>
+ <p>The content of a
+ <em>representations file</em> is structured in three levels:
+ </p>
+ <ul>
+ <li>Viewpoint 1
+ <ul>
+ <li>Representation Type 1.1
+ <ul>
+ <li>Representation 1.1.1</li>
+ <li>Representation 1.1.2</li>
+ </ul>
+ </li>
+ <li>Representation Type 1.2
+ <ul>
+ <li>Representation 1.2.1</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li>Viewpoint 2
+ <ul>
+ <li>Representation Type 2.1
+ <ul>
+ <li>Representation 2.1.1</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>The first level displays the available viewpoints, which match the viewpoints selected on the
+ <em>modeling project</em>.
+ <br/>The second level, inside a given viewpoint, displays
+ <em>representation types</em>. Only
+ <em>representation types</em> for which at least one representation exists are displayed.
+ <br/>The third level, inside a
+ <em>representation type</em>, displays the representations actually present for this type.
+ </p>
+ <img border="0" src="images/aird_unfolded1.png"/>
+ <h3 id="repair">Repair action</h3>
+ <p>A repair action is available in representations file context menu
+ <br/>In some case, you will need to execute a repair action on your representations file, especially when you have modified the VSM (odesign file).
+ </p>
+ <h4 id="Operationsdoneduringrepairexecution">Operations done during repair execution</h4>
+ <ul>
+ <li>Deleting representations without semantic target.</li>
+ <li>Deactivating behavior, filter, rules that no longer exist in VSM.</li>
+ <li>Saving all diagram elements state (such as style, bounds, expended bounds for collapsed node).</li>
+ <li>Deleting diagram elements that will be recreated by refresh.</li>
+ <li>Refresh all representations.</li>
+ <li>Restore diagram elements state.</li>
+ </ul>
+ <h4 id="Caseswhereusingrepairaction">Cases where using repair action</h4>
+ <ul>
+ <li>After removing behavior, rules or filter into VSM.</li>
+ <li>After removing or updating some mapping.</li>
+ <li>After removing some semantic elements.</li>
+ </ul>
+ <p>In most of case, a simple refresh of representation should be enough. Note that repair action could take some time depending on representations file size.</p>
+ <h3 id="MPConstraints">Constraints</h3>
+ <p>There is one important constraint regarding
+ <em>modeling projects</em>. They can only contain
+ <strong>one</strong> top-level
+ <em>representations file</em>.
+ </p>
+ <p>A top-level
+ <em>representations file</em> is a file that stores representations. Such files can be modularized, which means they can be split in several files, but there is always one
+ <em>master</em> file which references the others and is referenced by none. This file is the top-level file, and there can be only one per
+ <em>modeling project</em>.
+ <br/>To say this differently: If you want to have several independent
+ <em>representations files</em>, each of them must be placed in its own
+ <em>modeling project</em>.
+ </p>
+ <h3 id="Lifecycle">Modeling Project Lifecycle</h3>
+ <p>As mentioned before, models in a
+ <em>Modeling Project</em> are automatically loaded when first needed. They are not unloaded automatically. If you want them to be unloaded (and retreive the associated memory), you must close the modeling project itself.
+ </p>
+ <p>Besides, all representations of a given
+ <em>modeling project</em> are part of the same model. Any modification to one of these representations will cause all of them to go dirty (which means that a little * symbol will be displayed in the editor title to indicate that the file contains unsaved modifications). Conversely, saving any representation of a
+ <em>modeling project</em> saves all of them. What is actually saved is the
+ <em>representations file</em>, which contains all the representations.
+ </p>
+ <h2 id="Representations">Representations</h2>
+ <p>Representations are stored in
+ <code>*.aird</code> files. An
+ <code>*.aird</code> file is called a
+ <a href="#AirdFiles">
+ <strong>Representations File</strong>
+ </a>.
+ <br/>A representation can be a diagram, a table, a cross-table, a tree, etc.
+ </p>
+ <p>
+ <strong>Note:</strong>
+ <em>Representations files</em> located in
+ <em>modeling projects</em> are loaded automatically.
+ </p>
+ <h3 id="ReprCreation">Creating a Representation</h3>
+ <p>There are two ways of creating a representation. Both take place in the
+ <em>Model Explorer</em>.
+ </p>
+ <p>The first way of creating a representation is to navigate in a model to an element for which you know there is a
+ <em>representation type</em> available. Right-click on this element, then select
+ <em>New Representation > <Representation type></em>.
+ </p>
+ <img border="0" src="images/create_representation1.png"/>
+ <p>The other way consists in right-clicking on the
+ <em>Modeling Project</em> itself. Select
+ <em>Create Representation</em>.
+ </p>
+ <img border="0" src="images/create_representation1_alt.png"/>
+ <p>This opens a wizard that displays available viewpoints and available
+ <em>representation types</em> in these viewpoints.
+ <br/>Just select the type of representation you want to create and click
+ <em>Next ></em>.
+ </p>
+ <img border="0" src="images/create_representation2.png"/>
+ <p>The wizard then displays the available models (those that are in the current modeling project and those that are imported). When you browse the content of these models, you will notice that their content is filtered to display only elements that are relevant for the selected representation type.
+ <br/>Select the element for which you want to create a representation and click
+ <em>Finish</em>.
+ </p>
+ <img border="0" src="images/create_representation3.png"/>
+ <p>Either way, a pop-up window appears, where you can enter a name for the new representation. A default name is proposed. Click
+ <em>OK</em>.
+ </p>
+ <img border="0" src="images/create_representation4.png"/>
+ <p>If there are several
+ <em>representations files</em> in the current
+ <em>modeling project</em>, a pop-up window appears before the actual creation to allow you to select the
+ <em>representations file</em> that will contain the representation.
+ </p>
+ <img border="0" src="images/create_representation5.png"/>
+ <p>The representation is then created and opened.</p>
+ <h3 id="ReprManagement">Managing Representations</h3>
+ <p>Available representations can be accessed by browsing
+ <em>representation files</em> to the third level. Right-clicking on a representation then offers several actions:
+ </p>
+ <img border="0" src="images/managing_representation1.png"/>
+ <ul>
+ <li>
+ <strong>Open</strong> opens the representation in the relevant editor. You can also open the representation by double-click on it;
+ </li>
+ <li>
+ <strong>Delete</strong> deletes the representation: Del key can be used as shortcut (
+ <strong>Warning:</strong> this cannot be undone);
+ </li>
+ <li>
+ <strong>Rename</strong> opens a pop-up window where you can enter a new name for the representation: F2 key can be used as shortcut;
+ </li>
+ <li>
+ <strong>Copy</strong> duplicates the representation, opening a pop-up window where you can enter the name of the copy;
+ </li>
+ <li>
+ <strong>Move</strong> (only if there are several
+ <em>representations files</em> in the current
+ <em>modeling project</em>) allows you to move a representation to another
+ <em>representations file</em>;
+ </li>
+ <li>
+ <strong>Extract to .aird file ...</strong> extracts the selected element to another
+ <em>representations file</em>, which will be located in the workspace. A pop-up window opens to let you select the destination file, and the new file is automatically added to the project’s dependencies if needed;
+ </li>
+ <li>
+ <strong>Export Diagrams as images</strong> allows you to export all the diagrams stored inside a representation file in one operation. You can choose the destination folder and image format..
+ </li>
+ </ul>
+ <h2 id="LegacyMode">Legacy Mode </h2>
+ <p>The legacy UI mode is made available for users of previous versions of Sirius who can not or do not want to convert their projects into
+ <em>Modeling Projects</em>. As such, it works with all existing representation files (provided they have been migrated if required), even if they are inside non-Modeling projects or if there are several top-level representation files inside the same project.
+ </p>
+ <p>When using the legacy mode, you must explicitly
+ <em>open</em> a representation file using the
+ <em>Open</em> action in the context menu of the file. This is equivalent to opening a
+ <em>session</em> in previous versions of Sirius. Once the representation file is open, you can expand it, and inside you will find all the same elements that you would find inside a normal
+ <em>Modeling Project</em>: the semantic model(s) associated to the representation file, and the representations themselves.
+ </p>
+ <img border="0" src="images/legacy_mode1.png"/>
+ <p>All the actions which are normally performed on the modeling project itslef, like selecting which viewpoints are enabled, are available in the context menu of the representation file itself:</p>
+ <img border="0" src="images/legacy_mode2.png"/>
+ <p>Note that the
+ <em>Project dependencies</em> entry is not available in legacy mode. To associate new semantic models to the representation file, use the
+ <em>Add model</em> action directly on the representation file.
+ </p>
+ <p>Once you have finished using the models and or representations, you must explitly close it (equivalent to closing the
+ <em>session</em> in previous versions) by using the
+ <em>Close</em> action on the top-level representation file.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/general/images/aird_editor_close_editor_with_button.png b/doc/5.1.x/user/general/images/aird_editor_close_editor_with_button.png
new file mode 100644
index 0000000..f455f51
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_close_editor_with_button.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_close_editor_with_cross.png b/doc/5.1.x/user/general/images/aird_editor_close_editor_with_cross.png
new file mode 100644
index 0000000..138801f
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_close_editor_with_cross.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_close_editor_with_right_click.png b/doc/5.1.x/user/general/images/aird_editor_close_editor_with_right_click.png
new file mode 100644
index 0000000..666b7eb
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_close_editor_with_right_click.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_create_new_model.png b/doc/5.1.x/user/general/images/aird_editor_create_new_model.png
new file mode 100644
index 0000000..c9ad149
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_create_new_model.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_create_rep_double_click.png b/doc/5.1.x/user/general/images/aird_editor_create_rep_double_click.png
new file mode 100644
index 0000000..dfa3b84
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_create_rep_double_click.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_expand_aird_file.png b/doc/5.1.x/user/general/images/aird_editor_expand_aird_file.png
new file mode 100644
index 0000000..c5eff57
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_expand_aird_file.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_filter_models_elements.png b/doc/5.1.x/user/general/images/aird_editor_filter_models_elements.png
new file mode 100644
index 0000000..ea2a0c8
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_filter_models_elements.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_full.png b/doc/5.1.x/user/general/images/aird_editor_full.png
new file mode 100644
index 0000000..878376c
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_full.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_model_loading.png b/doc/5.1.x/user/general/images/aird_editor_model_loading.png
new file mode 100644
index 0000000..271a68c
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_model_loading.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_modeling_project_creation_wizard.png b/doc/5.1.x/user/general/images/aird_editor_modeling_project_creation_wizard.png
new file mode 100644
index 0000000..c99457c
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_modeling_project_creation_wizard.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_models_block.png b/doc/5.1.x/user/general/images/aird_editor_models_block.png
new file mode 100644
index 0000000..f4a4297
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_models_block.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_new_rep_menu.png b/doc/5.1.x/user/general/images/aird_editor_new_rep_menu.png
new file mode 100644
index 0000000..d3c532c
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_new_rep_menu.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_open_project_modeling_explorer.png b/doc/5.1.x/user/general/images/aird_editor_open_project_modeling_explorer.png
new file mode 100644
index 0000000..e976f1e
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_open_project_modeling_explorer.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_pref.png b/doc/5.1.x/user/general/images/aird_editor_pref.png
new file mode 100644
index 0000000..6709410
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_pref.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model.png b/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model.png
new file mode 100644
index 0000000..71348e2
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model_representation.png b/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model_representation.png
new file mode 100644
index 0000000..f5cbddd
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model_representation.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model_uncontrol.png b/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model_uncontrol.png
new file mode 100644
index 0000000..9d8993b
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model_uncontrol.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_rep_under_model.png b/doc/5.1.x/user/general/images/aird_editor_rep_under_model.png
new file mode 100644
index 0000000..4afc08c
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_rep_under_model.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_representations_block.png b/doc/5.1.x/user/general/images/aird_editor_representations_block.png
new file mode 100644
index 0000000..06c07d9
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_representations_block.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_unfolded1.png b/doc/5.1.x/user/general/images/aird_unfolded1.png
new file mode 100644
index 0000000..40c3a5d
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_unfolded1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/convert_to_modeling_project1.png b/doc/5.1.x/user/general/images/convert_to_modeling_project1.png
new file mode 100644
index 0000000..8e48753
--- /dev/null
+++ b/doc/5.1.x/user/general/images/convert_to_modeling_project1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/convert_to_modeling_project2.png b/doc/5.1.x/user/general/images/convert_to_modeling_project2.png
new file mode 100644
index 0000000..45c1d73
--- /dev/null
+++ b/doc/5.1.x/user/general/images/convert_to_modeling_project2.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/create_representation1.png b/doc/5.1.x/user/general/images/create_representation1.png
new file mode 100644
index 0000000..5d80afd
--- /dev/null
+++ b/doc/5.1.x/user/general/images/create_representation1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/create_representation1_alt.png b/doc/5.1.x/user/general/images/create_representation1_alt.png
new file mode 100644
index 0000000..63092ff
--- /dev/null
+++ b/doc/5.1.x/user/general/images/create_representation1_alt.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/create_representation2.png b/doc/5.1.x/user/general/images/create_representation2.png
new file mode 100644
index 0000000..c755aad
--- /dev/null
+++ b/doc/5.1.x/user/general/images/create_representation2.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/create_representation3.png b/doc/5.1.x/user/general/images/create_representation3.png
new file mode 100644
index 0000000..a6eb546
--- /dev/null
+++ b/doc/5.1.x/user/general/images/create_representation3.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/create_representation4.png b/doc/5.1.x/user/general/images/create_representation4.png
new file mode 100644
index 0000000..b2afd2a
--- /dev/null
+++ b/doc/5.1.x/user/general/images/create_representation4.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/create_representation5.png b/doc/5.1.x/user/general/images/create_representation5.png
new file mode 100644
index 0000000..6c00d19
--- /dev/null
+++ b/doc/5.1.x/user/general/images/create_representation5.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/decorated_model1.png b/doc/5.1.x/user/general/images/decorated_model1.png
new file mode 100644
index 0000000..e78e1d4
--- /dev/null
+++ b/doc/5.1.x/user/general/images/decorated_model1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/groupItems.png b/doc/5.1.x/user/general/images/groupItems.png
new file mode 100644
index 0000000..89a7ea3
--- /dev/null
+++ b/doc/5.1.x/user/general/images/groupItems.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/groupItems_1.png b/doc/5.1.x/user/general/images/groupItems_1.png
new file mode 100644
index 0000000..284fcbf
--- /dev/null
+++ b/doc/5.1.x/user/general/images/groupItems_1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/groupItems_2.png b/doc/5.1.x/user/general/images/groupItems_2.png
new file mode 100644
index 0000000..be72a13
--- /dev/null
+++ b/doc/5.1.x/user/general/images/groupItems_2.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/groupItems_3.png b/doc/5.1.x/user/general/images/groupItems_3.png
new file mode 100644
index 0000000..acca274
--- /dev/null
+++ b/doc/5.1.x/user/general/images/groupItems_3.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/legacy_mode1.png b/doc/5.1.x/user/general/images/legacy_mode1.png
new file mode 100644
index 0000000..ce97022
--- /dev/null
+++ b/doc/5.1.x/user/general/images/legacy_mode1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/legacy_mode2.png b/doc/5.1.x/user/general/images/legacy_mode2.png
new file mode 100644
index 0000000..80ed150
--- /dev/null
+++ b/doc/5.1.x/user/general/images/legacy_mode2.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/managing_representation1.png b/doc/5.1.x/user/general/images/managing_representation1.png
new file mode 100644
index 0000000..81aa0a1
--- /dev/null
+++ b/doc/5.1.x/user/general/images/managing_representation1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/model_explorer_view.png b/doc/5.1.x/user/general/images/model_explorer_view.png
new file mode 100644
index 0000000..3af361a
--- /dev/null
+++ b/doc/5.1.x/user/general/images/model_explorer_view.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/modeling_perspective.png b/doc/5.1.x/user/general/images/modeling_perspective.png
new file mode 100644
index 0000000..d1e6b4c
--- /dev/null
+++ b/doc/5.1.x/user/general/images/modeling_perspective.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/models_content1.png b/doc/5.1.x/user/general/images/models_content1.png
new file mode 100644
index 0000000..04111ca
--- /dev/null
+++ b/doc/5.1.x/user/general/images/models_content1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/new_project1.png b/doc/5.1.x/user/general/images/new_project1.png
new file mode 100644
index 0000000..2326e62
--- /dev/null
+++ b/doc/5.1.x/user/general/images/new_project1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/new_project2.png b/doc/5.1.x/user/general/images/new_project2.png
new file mode 100644
index 0000000..8b60a28
--- /dev/null
+++ b/doc/5.1.x/user/general/images/new_project2.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/new_project3.png b/doc/5.1.x/user/general/images/new_project3.png
new file mode 100644
index 0000000..5553ccf
--- /dev/null
+++ b/doc/5.1.x/user/general/images/new_project3.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/open_aird__modeling_project.png b/doc/5.1.x/user/general/images/open_aird__modeling_project.png
new file mode 100644
index 0000000..3a42e04
--- /dev/null
+++ b/doc/5.1.x/user/general/images/open_aird__modeling_project.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/project_dependencies1.png b/doc/5.1.x/user/general/images/project_dependencies1.png
new file mode 100644
index 0000000..b69d17e
--- /dev/null
+++ b/doc/5.1.x/user/general/images/project_dependencies1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/project_dependencies2.png b/doc/5.1.x/user/general/images/project_dependencies2.png
new file mode 100644
index 0000000..33f2c98
--- /dev/null
+++ b/doc/5.1.x/user/general/images/project_dependencies2.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/project_dependencies3.png b/doc/5.1.x/user/general/images/project_dependencies3.png
new file mode 100644
index 0000000..c6bfd56
--- /dev/null
+++ b/doc/5.1.x/user/general/images/project_dependencies3.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/remove_dependencies1.png b/doc/5.1.x/user/general/images/remove_dependencies1.png
new file mode 100644
index 0000000..fc9b9e1
--- /dev/null
+++ b/doc/5.1.x/user/general/images/remove_dependencies1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/viewpoint_selection1.png b/doc/5.1.x/user/general/images/viewpoint_selection1.png
new file mode 100644
index 0000000..e75177a
--- /dev/null
+++ b/doc/5.1.x/user/general/images/viewpoint_selection1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/viewpoint_selection2.png b/doc/5.1.x/user/general/images/viewpoint_selection2.png
new file mode 100644
index 0000000..ec5404a
--- /dev/null
+++ b/doc/5.1.x/user/general/images/viewpoint_selection2.png
Binary files differ
diff --git a/doc/5.1.x/user/properties/Properties View.html b/doc/5.1.x/user/properties/Properties View.html
new file mode 100644
index 0000000..febdafa
--- /dev/null
+++ b/doc/5.1.x/user/properties/Properties View.html
@@ -0,0 +1,66 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Properties View</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="PropertiesViews">Properties Views</h1>
+ <p>This document describes behaviors specific to Sirius-defined properties views.</p>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#PropertiesViews">Properties Views</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#preferences">Preferences</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#LegacySemanticPropertiesTabs">Legacy Semantic Properties Tabs</a>
+ </li>
+ <li>
+ <a href="#SiriusDefaultTabs">Sirius Default Tabs</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="preferences">Preferences</h2>
+ <p>Some preferences and configuration parameters are available for you to customize your experience. They can affect the look of the properties view.</p>
+ <p>
+ <img border="0" src="./images/PropertiesViewPreferencePage.png"/>
+ </p>
+ <h3 id="LegacySemanticPropertiesTabs">Legacy Semantic Properties Tabs</h3>
+ <p>This group contains preferences to show or hide tabs provided by Sirius which display the raw properties of all semantic elements currently selected in a representation or in the
+ <em>Model Explorer</em>. Starting from version 4.0, Sirius provides better alternatives for showing these semantic properties, but the legacy tabs are still available if needed.
+ </p>
+ <ul>
+ <li>
+ <em>Show Default Tab:</em> This checkbox allows to hide the
+ <code>Default</code> tab which is visible by default when you select an element from the
+ <em>Model Explorer</em>.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="./images/DefaultTabPreference.png"/>
+ </p>
+ <ul>
+ <li>
+ <em>Show Semantic Tab:</em> This checkbox allows to hide the
+ <code>Semantic</code> tab which is visible by default when you select an element from a Sirius representation.
+ </li>
+ </ul>
+ <h3 id="SiriusDefaultTabs">Sirius Default Tabs</h3>
+ <p>This group contains preferences to modify the behavior of the tabs rendered by the Sirius properties view default rules. Note that this will only apply to the generic properties views which are used when a modeler does not provide custom ones. </p>
+ <ul>
+ <li>
+ <em>Maximum size of tabs name:</em> This field defines the maximal length of tabs names. This is used to shorten the tabs names when the default rules are used to render the properties view. The default is 20 characters.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="./images/MaxTabNamePreference.png"/>
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/properties/images/DefaultTabPreference.png b/doc/5.1.x/user/properties/images/DefaultTabPreference.png
new file mode 100644
index 0000000..8bbdc20
--- /dev/null
+++ b/doc/5.1.x/user/properties/images/DefaultTabPreference.png
Binary files differ
diff --git a/doc/5.1.x/user/properties/images/MaxTabNamePreference.png b/doc/5.1.x/user/properties/images/MaxTabNamePreference.png
new file mode 100644
index 0000000..423d211
--- /dev/null
+++ b/doc/5.1.x/user/properties/images/MaxTabNamePreference.png
Binary files differ
diff --git a/doc/5.1.x/user/properties/images/PropertiesViewPreferencePage.png b/doc/5.1.x/user/properties/images/PropertiesViewPreferencePage.png
new file mode 100644
index 0000000..45222f4
--- /dev/null
+++ b/doc/5.1.x/user/properties/images/PropertiesViewPreferencePage.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/Sequence Diagrams.html b/doc/5.1.x/user/sequences/Sequence Diagrams.html
new file mode 100644
index 0000000..095f483
--- /dev/null
+++ b/doc/5.1.x/user/sequences/Sequence Diagrams.html
@@ -0,0 +1,313 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Sequence Diagrams</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="SequenceDiagramsEditors">Sequence Diagrams Editors</h1>
+ <p>This document explains how to use sequence diagrams editors/modelers. Sequence diagrams share most of the functionalities of normal diagrams, but they have some specificities and restrictions.</p>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#SequenceDiagramsEditors">Sequence Diagrams Editors</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#semantics">Sequence Diagrams Semantics</a>
+ </li>
+ <li>
+ <a href="#restrictions">Restrictions and Limitations</a>
+ </li>
+ <li>
+ <a href="#layout">Automatic Layout</a>
+ </li>
+ <li>
+ <a href="#elements">Sequence Diagram Elements</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#Lifelines">Life-lines</a>
+ </li>
+ <li>
+ <a href="#lifelines_header">Life-lines header</a>
+ </li>
+ <li>
+ <a href="#Executions">Executions</a>
+ </li>
+ <li>
+ <a href="#BasicMessages">Basic Messages</a>
+ </li>
+ <li>
+ <a href="#ComplexMessages">Complex Messages</a>
+ </li>
+ <li>
+ <a href="#CreationandDestructionMessages">Creation and Destruction Messages</a>
+ </li>
+ <li>
+ <a href="#Lostandfoundmessages">Lost and found messages</a>
+ </li>
+ <li>
+ <a href="#InteractionUsesandStates">Interaction Uses and States</a>
+ </li>
+ <li>
+ <a href="#CombinedFragmentsandOperands">Combined Fragments and Operands</a>
+ </li>
+ <li>
+ <a href="#ConstraintsandObservationPoints">Constraints and Observation Points</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="introduction">Introduction</h2>
+ <p>Sirius supports a special kind of diagrams which reuse the notations and conventions of UML Sequence Diagrams, but can be applied to other domains than just UML. Here is an example which illustrates most of the graphical constructions which can appear on these diagrams:</p>
+ <img border="0" src="images/full_sequence_example.png"/>
+ <p>These diagrams behave mostly like normal Sirius diagrams, but in order to ensure the consistency of the model they represent, they have some restrictions. They also support some additional features or change the classical behavior of some features.</p>
+ <p>This document only describes the specificities of sequence diagrams. Unless otherwise stated here, all the features of normal Sirius diagrams apply also to sequence diagrams, so you can refer to
+ <a href="../diagrams/Diagrams.html">the general diagrams user manual</a> for more information.
+ </p>
+ <p>
+ <strong>IMPORTANT WARNING</strong>: To work correctly, Sirius sequence diagrams must have a tight control on where the graphical elements are placed on the diagram and on their synchronization with the underlying semantic model. This means that to use sequence diagrams you
+ <em>must</em>:
+ </p>
+ <ol>
+ <li>Disable the
+ <em>Snap to Grid</em> and the
+ <em>Snap to Shapes</em> behaviors. For an existing diagram, this is available in the
+ <em>Rulers & Grid</em> section of the
+ <em>Properties</em> view when the diagram itself is selected. You can also disable it for all future diagrams in the preferences:
+ <em>Sirius > Sirius Diagram > Rulers and Grid</em>, un-check the
+ <em>Snap to grid for new diagrams</em> and
+ <em>Snap to shapes for new diagrams</em> check boxes. Since Sirius 3.1.0, the snap features are automatically disabled in Sequence diagram editors and the user can not reactivate them.
+ </li>
+ <li>Enable Sirius’s
+ <em>Automatic Refresh</em> (in the main
+ <em>Sirius</em> preferences page) to ensure the diagram is always kept in synch with the underlying semantic model.
+ </li>
+ </ol>
+ <h2 id="semantics">Sequence Diagrams Semantics</h2>
+ <p>As their name says, sequence diagrams are meant to represent ordered sequences of elements. Typically, they represent
+ <em>events</em> sent and received between some entities over
+ <em>time</em>. The canonical case is a UML Sequence Diagram (where the notation comes from), which represents the messages exchanged between objects in a software system.
+ </p>
+ <p>The most important consequence of this is that contrary to what happens on a classical diagram,
+ <em>the relative graphical positions of elements on a sequence diagram have strong meaning</em>. This is true for the vertical placement and for the left-to-right order of lifelines. However placing a message above or below another one has a strong implication on the ordering of the events they represent, and thus on the structure of the underlying semantic model which is represented. Sirius works hard to ensure that what you see on your sequence diagram (in terms of vertical ordering of elements and horizontal ordering of lifelines) always correspond to the semantic ordering of the represented events.
+ </p>
+ <p>This works both ways:</p>
+ <ul>
+ <li>Assuming your diagram is synchronized (i.e. you are in
+ <em>Automatic Refresh</em> mode or your manually refreshed it since the last semantic changes), Sirius will always organize the elements on the diagram in a way which is compatible with the semantic ordering of the events: if you see an execution
+ <em>E1</em> placed above another execution
+ <em>E2</em>, you can be sure the events corresponding to
+ <em>E1</em> happen before the events of
+ <em>E2</em> in the semantic model.
+ </li>
+ <li>Symmetrically, and perhaps more importantly,
+ <em>moving</em> elements on a sequence diagram may trigger changes in the underlying semantic model to reflect the new event order implied by the positions you changed. This is very different from what happens in other diagrams, where most graphical repositioning of elements are only cosmetic. Keeping the example above, moving execution
+ <em>E2</em> graphically above
+ <em>E1</em> will trigger changes in the semantic model to move the corresponding event of
+ <em>E2</em> before the events of
+ <em>E1</em>.
+ </li>
+ </ul>
+ <p>Most of the specific features and restrictions of sequence diagrams compared to other diagrams derive from this strong guarantee that at all time, the graphical (vertical) order of the elements you see on the diagram match exactly the semantic order of the events which exist in the underlying model.</p>
+ <h2 id="restrictions">Restrictions and Limitations</h2>
+ <p>In order to guarantee the strong guarantee described above, some of the features present on normal diagrams are not supported, or even completely disabled on sequence diagrams. Basically, anything which would make it possible on a normal diagram to have meaningful semantic elements not visible on the diagram is forbidden. This would make it impossible for Sirius to keep consistent tracking of the “position” of these invisible elements relative to the ones which are visible.</p>
+ <ul>
+ <li>
+ <em>Layers</em>: sequence diagrams may define optional layers, as long as they do not make graphical elements appear or disappear on the diagram when they are selected or de-selected. Layers which contribute new tools in the palette for example are fine.
+ </li>
+ <li>
+ <em>Filters</em>: filters which may hide elements from a sequence diagram when enabled are not supported.
+ </li>
+ <li>
+ <em>Hide/Reveal</em>: hiding elements explicitly is not supported. The actions are disabled in the UI.
+ </li>
+ <li>
+ <em>Pin/Unpin</em>: pinning graphical elements has no effect on the automatic layout of sequence diagrams. Even if an element has been marked as pinned, Sirius must be able to move it graphically as needed in order to maintain the graphical order of element in sync with the semantic order. The actions are disabled in the UI.
+ </li>
+ </ul>
+ <h2 id="layout">Automatic Layout</h2>
+ <p>The
+ <em>Arrange All</em> command which launches an automatic layout of all the elements on a diagram has been completely customized for sequence diagrams. Arranging a sequence diagram will keep the relative positions of all the elements, but reduce any un-needed vertical or horizontal spaces. All elements will be resized to the minimum size necessary, and “packed” towards the top-left corner of the diagram. This results in a diagram which uses the minimum space required to present all the elements, while keeping enough white-space between them to be easy to read.
+ </p>
+ <h2 id="elements">Sequence Diagram Elements</h2>
+ <p>This section presents each type of elements specific to sequence diagrams which are supported by Sirius, and their specificities (if any). Note that not all sequence diagrams will support all kinds of elements; this depends on the diagram’s configuration.</p>
+ <h3 id="Lifelines">Life-lines</h3>
+ <p>Life-lines represent the entities which interact (by exchanging events) on a sequence diagrams. They can be many different things depending on the domain being modeled: software objects, machines, people, etc. They are represented by a node (often a rectangle) at the top, and a thin vertical line attached to the bottom side of the node (always horizontally centered on it). There may be another node (generally small) at the bottom of the lifeline, representing the end of the life-line.</p>
+ <p>The example below shows three life-lines, named
+ <code>a</code>,
+ <code>b</code> and
+ <code>c</code>. Then end of
+ <code>a</code> and
+ <code>c</code> is a small grey circle at the bottom of the life-lines, while the end of
+ <code>b</code>, which is explicitly destroyed by the
+ <code>m_destroy2</code> message, is a black cross.
+ </p>
+ <img border="0" src="images/lifelines.png"/>
+ <p>Life-lines can be moved horizontally, but their vertical placement can not be controlled directly. It is determined automatically by Sirius using the following rules:</p>
+ <ol>
+ <li>Life-lines which are not explicitly created by a
+ <a href="#CreationandDestructionMessages">
+ <em>creation messages</em>
+ </a> are assumed to exist from the beginning of the sequence, and are all aligned at the top of the diagram. In the example,
+ <code>a</code> and
+ <code>c</code> are aligned at the top of the diagram.
+ </li>
+ <li>Life-lines which are explicitly created by a
+ <em>creation messages</em> have their top node vertically aligned with the creation message. In the example,
+ <code>b</code> is aligned with the
+ <code>m_create1</code> creation message. Moving that message vertically would also move the top of the
+ <code>b</code> life-line to stay aligned.
+ </li>
+ </ol>
+ <p>The vertical size of life-lines can be controlled, following some rules:</p>
+ <ol>
+ <li>Life-lines which are not explicitly destroyed by a
+ <a href="#CreationandDestructionMessages">
+ <em>destruction message</em>
+ </a> are assumed to exist until (at least) the end of the sequence. They all finish at the same vertical position, which is always after the last event on the whole sequence. If life-lines have a node at their bottom (this depends on the configuration), these nodes can be dragged to resize all the life-lines which are not explicitly destroyed (as long as their new end position is after all events). In the example, dragging the grey circles at the bottom of
+ <code>a</code> or
+ <code>c</code> would resize both life-lines (but not
+ <code>b</code>).
+ </li>
+ <li>Life-lines which are explicitly destroyed by a
+ <em>drestruction message</em> have the bottom node vertically aligned with the destruction message. In the example,
+ <code>b</code> ends when it receives the
+ <code>m_destroy2</code> message. Moving either the destruction message or the black cross which represents
+ <code>b</code>'s destruction would resize the life-line (but only
+ <code>b</code>).
+ </li>
+ </ol>
+ <p>Empty life-lines have a default size large enough that you can add several elements to them without the need for resizing. In the example,
+ <code>a</code> and
+ <code>c</code> have the default size.
+ </p>
+ <p>When you move life-lines horizontally, you can change their left-to-right order. If required, the system may move some other life-lines to ensure there is always some minimal horizontal blank space between two consecutive life-lines.</p>
+ <h3 id="lifelines_header">Life-lines header</h3>
+ <p>When a scenario diagram is higher than the displayed area, reading the last messages of the diagram makes the instance role of the life-lines not visible and does not help to locate the source and the target of a message. You can keep life-line header visible by activating “Display header” into
+ <code>Preferences > Sirius > Sirius Diagram > Appearance</code>. This preference is enabled by default.
+ </p>
+ <p>
+ <img border="0" src="images/header.png"/>
+ </p>
+ <p>The optimum height is automatically computed during the creation of a new sequence diagram. You can change the height manually by:</p>
+ <ul>
+ <li>Double-clicking on the separator between header and diagram. This computes again the optimum height according to current labels and width.</li>
+ <li>Moving the separator between header and diagram.</li>
+ </ul>
+ <p>The height is stored in the diagram. The next time you open the diagram, the header will be the same size.</p>
+ <h3 id="Executions">Executions</h3>
+ <p>Executions usually represent a time interval during which one of the participants in the sequence is active. They are represented by vertical rectangles superposed to the corresponding life-line, or to another execution (recursively).</p>
+ <p>The example below show a single life-line with five executions on it: two are top-level executions directly on the life-line itself, while the rest are sub-executions of others.</p>
+ <img border="0" src="images/executions.png"/>
+ <p>Note that not all sequence diagram modelers will allow for the creation of “raw” executions like these, which are not connected to messages. This all depends on the semantics of the underlying models and of the diagram’s configuration.</p>
+ <h3 id="BasicMessages">Basic Messages</h3>
+ <p>Basic messages represent some form of communication between lifelines. They are represented by horizontal arrows between lifelines (or executions on lifelines).</p>
+ <p>The example below shows three lifelines and three messages. Note that the last one,
+ <code>m3</code>, is a
+ <em>reflective</em> message which is received by the same lifeline which sent it.
+ </p>
+ <img border="0" src="images/basic_messages.png"/>
+ <p>Note that not all sequence diagram modelers will allow for the creation of basic message like these, which are not connected the beginning or end of an execution. This all depends on the semantics of the underlying models and of the diagram’s configuration.</p>
+ <h3 id="ComplexMessages">Complex Messages</h3>
+ <p>Most sequence diagrams (including UML) will support some sort of
+ <em>complex messages</em>, which include both executions and basic messages combined in special ways. This is used for example to represent
+ <em>synchronous messages</em> in UML, where the first message sent triggers the execution of some behavior on the target lifeline, behavior which produces a return value sent back to the origin when the execution terminates.
+ </p>
+ <p>In the example below, the lifeline
+ <code>a</code> sends a message
+ <code>m1</code> to
+ <code>b</code>, which triggers the execution of a complex behavior before
+ <code>b</code> can send the result value back to
+ <code>a</code>. During the execution of the behavior in
+ <code>b</code>, it sends another message to
+ <code>c</code>, waits for the answer, and then sends a message to itself which executes a sub-behavior (but does not return any useful value).
+ </p>
+ <img border="0" src="images/complex_messages.png"/>
+ <h3 id="CreationandDestructionMessages">Creation and Destruction Messages</h3>
+ <p>Two special kinds of messages are used to represent the creation of a lifeline or its destruction by another participant.
+ <em>Creation messages</em> are represented as normal messages, except that the top of the lifeline they target is always vertically aligned with the message (representing the fact that this lifeline did not exist before the message created it). Similarly,
+ <em>destruction messages</em> are normal messages except that the bottom of the lifeline they target is aligned with the message. It is customary that the
+ <em>End of Life</em> marker at the bottom of the lifeline (used to resize it) uses a different visual style (often a black cross) to represent the fact that the lifeline is destroyed by the message and does not exist afterwards.
+ </p>
+ <p>The figure below shows one example of each of these special kinds of messages: lifeline
+ <code>a</code> first sends message
+ <code>m_create1</code> which creates lifeline
+ <code>b</code>, and then sends destruction message
+ <code>m_destroy2</code> which provokes the destruction of
+ <code>c</code>.
+ </p>
+ <img border="0" src="images/creation_destruction_messages.png"/>
+ <h3 id="Lostandfoundmessages">Lost and found messages</h3>
+ <p>Lost and found messages are messages with an end which does not cover any lifeline. </p>
+ <ul>
+ <li>Lost messages are messages with known send, but the reception of the message does not happen.</li>
+ <li>Found messages are messages with knwon receiver, but the sending of the message is not described.</li>
+ </ul>
+ <p>The figure below shows one example of lost and found message for each of the different kinds of messages: lifeline
+ <code>e</code> first receives found message
+ <code>m_create7</code> which creates the lifeline, and then sends lost messages
+ <code>m1</code> which should triggers the execution of a complex behavior, creation message
+ <code>m_create2</code> which should create another lifeline, destruction message
+ <code>m_destroy3</code> which could provoke its destruction,
+ <code>m4</code> which could be linked to a lifeline not represented on the current diagram. Lifeline
+ <code>e</code> finally receive three found messages:
+ <code>m9</code> which triggers the execution of a complex behavior,
+ <code>m8</code> which is a simple message and
+ <code>m_destroy8</code> which provokes the destruction of
+ <code>e</code>.
+ </p>
+ <img border="0" src="images/found_lost_ends.png"/>
+ <p>A lost/found message can be moved vertically like other messages. Align commands are available for lost and found message ends.</p>
+ <h3 id="InteractionUsesandStates">Interaction Uses and States</h3>
+ <p>
+ <em>Interaction Uses</em> are constructions which usually represent “shortcuts”, indicating that some complex interaction, which may be defined in another sequence diagrams, occurs at some point without cluttering the current diagram. They are represented by rectangles centered on the lifeline(s) which are concerned. They can contain a label in the top-left corner, indicating what kind of shortcut they represent, and another label (not editable directly) centered in the rectangle. Interaction uses may
+ <em>cover</em> several lifelines.
+ </p>
+ <p>
+ <em>States</em> are more general annotations which are typically used to indicate that some condition regarding the state of a participant is true at this point in the sequence. They are represented by simple nodes centered on the single lifeline they concern.
+ </p>
+ <p>The figure below shows two interaction uses, one which covers only
+ <code>a</code> and the other covering both
+ <code>a</code> and
+ <code>b</code>. It also shows a simple state
+ <code>s1</code> on
+ <code>b</code>, which is represented by a blue oval in this diagram.
+ </p>
+ <img border="0" src="images/iu_states.png"/>
+ <h3 id="CombinedFragmentsandOperands">Combined Fragments and Operands</h3>
+ <p>
+ <em>Combined Fragments</em> and
+ <em>Operands</em> are the most complex constructions on sequence diagrams. They are used to regroup other constructions (including other
+ <em>Combined Fragments</em>) into blocks. A
+ <em>combined fragment</em> is represented in a way similar to interaction uses (a rectangle which can cover several lifelines), except that it can contain one or more
+ <em>operands</em>, separated by a dotted horizontal line. Operands can contain almost all the other constructions supported by sequence diagrams, with the restriction that they must be self-contained: a message which starts inside an operand must end inside the operand (i.e. on a lifeline which is covered by the parent combined fragment), and an execution which starts in an operand must end in the same (it can not end in another operand below).
+ </p>
+ <p>The figure below shows a top-level combined fragment named
+ <code>alt</code>, which represent
+ <em>alternatives</em> (the semantics is just an example, it is entirely dependent on the diagram’s configuration and underlying model). It contains three operands, labeled
+ <code>x < 0</code>,
+ <code>x > 0</code> and
+ <code>x == 0</code>. Here, the content of each operand represent the alternative which would be executed if the corresponding condition was true. Note that the last operand,
+ <code>x == 0</code>, contains a sub-fragment, named
+ <code>par</code>, with two operands. Here the intended semantics is that for the
+ <code>x == 0</code> case, we execute both
+ <code>step1</code> and
+ <code>step2</code> in
+ <code>par</code>-allel.
+ </p>
+ <img border="0" src="images/cfc_cfo.png"/>
+ <h3 id="ConstraintsandObservationPoints">Constraints and Observation Points</h3>
+ <p>The elements displayed on a sequence diagram are delimited with some events which belong to the diagram semantic (chronological and global) ordering. An observation point is a node representing (gray dots on the following picture) those events, they are automatically placed and allow to create and display constraints between the events.</p>
+ <p>The figure below shows observation points as grayed dots on each sequence diagram element and several constraints with bracket style created between them. </p>
+ <p>
+ <img border="0" src="images/constraints.png"/>
+ </p>
+ <p>The main segment of the constraint can be moved and rotated. The other segments cannot be moved, the constraint is attached to observation points which are placed by the automatic layout. So move commands are disabled on observation points, but resize commands activation depends on the resize kind defined in the Viewpoint Specification Model.</p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/sequences/images/basic_messages.png b/doc/5.1.x/user/sequences/images/basic_messages.png
new file mode 100644
index 0000000..c318ddc
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/basic_messages.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/cfc_cfo.png b/doc/5.1.x/user/sequences/images/cfc_cfo.png
new file mode 100644
index 0000000..d0445e9
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/cfc_cfo.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/complex_messages.png b/doc/5.1.x/user/sequences/images/complex_messages.png
new file mode 100644
index 0000000..9faa9fe
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/complex_messages.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/constraints.png b/doc/5.1.x/user/sequences/images/constraints.png
new file mode 100644
index 0000000..e2570a6
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/constraints.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/creation_destruction_messages.png b/doc/5.1.x/user/sequences/images/creation_destruction_messages.png
new file mode 100644
index 0000000..2791d76
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/creation_destruction_messages.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/executions.png b/doc/5.1.x/user/sequences/images/executions.png
new file mode 100644
index 0000000..ea995ea
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/executions.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/found_lost_ends.png b/doc/5.1.x/user/sequences/images/found_lost_ends.png
new file mode 100644
index 0000000..30f72e4
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/found_lost_ends.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/full_sequence_example.png b/doc/5.1.x/user/sequences/images/full_sequence_example.png
new file mode 100644
index 0000000..de24e1a
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/full_sequence_example.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/header.png b/doc/5.1.x/user/sequences/images/header.png
new file mode 100644
index 0000000..7ec9429
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/header.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/iu_states.png b/doc/5.1.x/user/sequences/images/iu_states.png
new file mode 100644
index 0000000..8575b94
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/iu_states.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/lifelines.png b/doc/5.1.x/user/sequences/images/lifelines.png
new file mode 100644
index 0000000..29962fa
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/lifelines.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/Tables.html b/doc/5.1.x/user/tables/Tables.html
new file mode 100644
index 0000000..72da77a
--- /dev/null
+++ b/doc/5.1.x/user/tables/Tables.html
@@ -0,0 +1,194 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Tables</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="TableEditors">Table Editors</h1>
+ <p>This document explains how to use the two kinds of tabular editors/modelers supported by Sirius: normal edition tables and cross-tables.</p>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#TableEditors">Table Editors</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#managing">Creating, Renaming and Deleting Tables</a>
+ </li>
+ <li>
+ <a href="#refresh">Refreshing Tables</a>
+ </li>
+ <li>
+ <a href="#lines_columns">Adding and Removing Lines and Columns</a>
+ </li>
+ <li>
+ <a href="#HidingLinesandColumns">Hiding Lines and Columns</a>
+ </li>
+ <li>
+ <a href="#ChangingtheWidthofaColumn">Changing the Width of a Column</a>
+ </li>
+ <li>
+ <a href="#sorting">Sorting by Column</a>
+ </li>
+ <li>
+ <a href="#SortingbyLine">Sorting by Line</a>
+ </li>
+ <li>
+ <a href="#editing">Editing Cell Values</a>
+ </li>
+ <li>
+ <a href="#quick_outline">Quick Outline</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="introduction">Introduction</h2>
+ <p>Sirius provides support for tabular representations. Tables allow to present information in structured forms. There are two kinds of tables:</p>
+ <ul>
+ <li>
+ <em>Edition tables</em> show one element per line, and one property (potentially computed) per column. Each cell shows the value of the property for the corresponding element, and may be editable.
+ </li>
+ <li>
+ <em>Cross tables</em> are designed to show relationships between elements. Both lines and columns represent elements. The cell at an intersection represent the relationship between the elements on the line and column (it may be empty if there is no relationships). These cells may also be editable to change the relationships between the elements.
+ </li>
+ </ul>
+ <img border="0" src="images/tables_representations1.png"/>
+ <p>Both kinds of tables can also support sub-lines (and sub-sub-lines, etc.), which can be expanded or folded to show/hide some details, and share the same kinds of interactions. Unless otherwise stated, the rest of this document applies to both kinds of tables.</p>
+ <p>Note that as always with Sirius, some of the features described below may or may not be available with all specific kinds of tables. Some tables are designed to only present information but do not allow edition for example. It all depends on which features the person who
+ <em>specified</em> (configured) the table decided to support.
+ </p>
+ <h2 id="managing">Creating, Renaming and Deleting Tables</h2>
+ <p>Tables are managed in the same way as the other kinds or representations supported by Sirius (diagrams, trees...). They are created either through the
+ <em>New Representation</em> context menu on a semantic element, or through the
+ <em>Create Representation</em> action on the context menu of a
+ <em>Modeling Project</em>. Newly created tables are automatically opened. To open an existing table, simply double-click on it in the
+ <em>Model Explorer</em>: it will appear both inside the representation file (
+ <code>aird</code> file) and under the semantic element it represents inside the semantic model.
+ </p>
+ <p>You can rename, duplicate or delete a table by choosing the corresponding action (resp.
+ <em>Rename</em>,
+ <em>Copy</em> or
+ <em>Delete</em>) in the context menu on the table element in the
+ <em>Model Explorer</em>.
+ </p>
+ <h2 id="refresh">Refreshing Tables</h2>
+ <p>Depending on the value of the
+ <i>Automatic refresh</i> Sirius preference (accessible through
+ <i>Window</i> /
+ <i>Preferences...</i> /
+ <i>Sirius</i>), the contents of opened tables may or may not be automatically updated when the underlying semantic model changes. In
+ <em>manual refresh</em> mode (when
+ <i>Automatic refresh</i> is unchecked), you can explicitly request a refresh of the whole table by using the
+ <em>Refresh</em> button in the main Eclipse toolbar, as shown below:
+ </p>
+ <img border="0" src="images/table_refresh1.png"/>
+ <h2 id="lines_columns">Adding and Removing Lines and Columns</h2>
+ <p>If the table’s configuration has defined tools to create new lines and columns, they will appear in the context menu of table elements. The name of the creation tools depends entirely on the table’s configuration, so it will be different for each tabular modeler. Note that you must have a table element selected for the creation tools to appear in the context menu; the behavior of the tool may depend on the selected element. If the table is completely empty and you have no element to select, you can still create elements (if supported by the table’s configuration) by using the drop-down menus in the main Eclipse toolbar (see screenshot).</p>
+ <p>Note that both kinds of tables can support line creation, but only cross tables support the creation of new columns.</p>
+ <img border="0" src="images/table_create_item1.png"/>
+ <img border="0" src="images/table_create_item2.png"/>
+ <h2 id="HidingLinesandColumns">Hiding Lines and Columns</h2>
+ <p>You can control the visibility on individual lines and columns using the
+ <i>Show/Hide</i> context menu, available on every table cell.
+ </p>
+ <p>Selecting a cell and choosing
+ <i>Show/Hide > Hide line</i> will hide the corresponding line. To reveal a hidden line, you can use either
+ <i>Show/Hide > Hide/Show Lines</i>, and select individually which lines should be visible or hidden. You can also use the
+ <i>Show/Hide > Show Hidden Lines</i>, which makes all the hidden lines visible again in one operation.
+ </p>
+ <img border="0" src="images/table_show_hide1.png"/>
+ <img border="0" src="images/table_show_hide2.png"/>
+ <p>The same operations can be performed on column using the corresponding operations in the
+ <i>Show/Hide</i> menu for columns.
+ </p>
+ <p>Note that the visibility status of lines and columns are persisted: if you save and close a table with lines and/or columns hidden, they will still be hidden when you re-open the table later.</p>
+ <h2 id="ChangingtheWidthofaColumn">Changing the Width of a Column</h2>
+ <p>It is possible to change the width of a column by placing the cursor between two column headers and moving the separator. The columns' width is persisted: if you save and close your table, re-opening it later will restore the widths you set.</p>
+ <h2 id="sorting">Sorting by Column</h2>
+ <p>To sort the lines of a table by the values in a specific column, select one of the cells of the desired column, and in the context menu (right click), select the
+ <i>Sort by column</i> entry. You can also click directly on the column’s header.
+ </p>
+ <p>The sorting is performed in the lexicographical order of the labels in the sort column. If a table contains sub-lines, the lines are sorted level by level: top-level lines are sorted relative to each other, then direct sub-lines of each line are sorted among themselves, etc.</p>
+ <p>The initial order of lines (when no sorting is active) is the “intrinsic” order of the elements, as defined by the table’s configuration. When you first activate sorting, lines are sorted in ascending order. If you sort a second time, they are sorted in descending order. Any operation which refreshes the table’s content (a manual refresh or a model change when in automatic refresh mode) resets the lines' ordering to the intrinsic order and disabled any sorting.</p>
+ <img border="0" src="images/table_sort_by1.png"/>
+ <table>
+ <tr>
+ <th>Sorted Ascending</th>
+ <th>Sorted Descending</th>
+ <th>Unsorted</th>
+ </tr>
+ <tr>
+ <td>
+ <img border="0" src="images/table_sort_ascending.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/table_sort_descending.png"/>
+ </td>
+ <td>
+ <img border="0" src="images/table_sort_unsorted.png"/>
+ </td>
+ </tr>
+ </table>
+ <h2 id="SortingbyLine">Sorting by Line</h2>
+ <p>This kind of sorting is only available for cross table. It is symmetrical to the “Sort by column” feature, but sorts the columns of a cross table according to the values on a given line.</p>
+ <p>It is triggered in a similar way, by using the
+ <i>Sort by line</i> item in the context menu on a cell in the cross table, and follows the same cycling rules (first ascending order, then descending if activated twice, and reset by a refresh).
+ </p>
+ <p>On a cross table, it is possible to combine sorting by line and columns.</p>
+ <h2 id="editing">Editing Cell Values</h2>
+ <p>When you select a cell in a table, the
+ <i>Properties</i> will contain a tab named
+ <i>Semantic</i> (normally the first one). This tab shows all the properties of all the semantic elements associated to the cell (there may be several elements), and you can edit each property individually. Note that because this tab shows all the raw properties of the semantic elements, it may be dangerous to edit them directly. Depending on how the table was configured, tabs with more user-oriented property sheets may also be available.
+ </p>
+ <p>Depending on the table’s configuration, it may also be possible to edit elements directly in the cells (this is called
+ <em>direct edit</em>). To activate the edition of a cell, select it and then either:
+ </p>
+ <ul>
+ <li>hit the
+ <em>Return</em> key;
+ </li>
+ <li>hit the
+ <em>F2</em> key;
+ </li>
+ <li>double-click on it;</li>
+ <li>or type any alpha-numeric character (for text edition only).</li>
+ </ul>
+ <p>The editor offered depends on the contents of the cell. It may be:</p>
+ <ul>
+ <li>a combo-box if the content can only be a value in a pre-defined list (enumeration);</li>
+ <li>a check-box if the content is a boolean;</li>
+ <li>a text editor in all the other cases;</li>
+ <li>a dialog box for many-valued references.</li>
+ </ul>
+ <p>For combo-boxes, you can start typing the beginning of the value to filter the content of the combo-box.</p>
+ <p>For check-boxes, you can either click or use the space key to directly change the value of the check-box.</p>
+ <p>For plain text edition, to facilitate the mass data entry you can begin to directly enter the desired value without first start editing. If the first character typed is alpha-numeric, the text editor will be directly activated. If the property edited with the cell is declared as multi-line, a multi-line text editor is proposed for editing the content of the cell. There is a difference between Windows and Linux for this feature.</p>
+ <ul>
+ <li>On Linux, the height of the line fits its content. So if the text of one of the cells of a line is 4 lines high, the height is calculated accordingly. When editing, the editor appears on the location of the cell, several lines are visible at the same time.</li>
+ <li>On Windows, a restriction requires that all lines have the same height. So all the text will be shown on one line.When editing, a single line is visible and you must use the up/down arrow to display the other lines.</li>
+ </ul>
+ <p>
+ <img border="0" src="images/table_multiline_edit_windows.png"/>
+ </p>
+ <p>Under all systems, to finish the edition of a multi-line text, you need to use
+ <em>Ctrl+Return</em>. Hitting
+ <em>Return</em> will simply add a new line.
+ </p>
+ <h2 id="quick_outline">Quick Outline</h2>
+ <p>A quick outline is available with the shortcut
+ <code>Ctrl</code> +
+ <code>O</code>. This allows you to rapidly search text in the displayed name or the contained String attributes of your table elements elements.
+ </p>
+ <p>The star,
+ <code>*</code>, is a joker character, allowing you to search with more complicated patterns. Regarding this, an element is found if there is a word in its name or one of its attributes that match with the text in the filter, so if you want to search within words too, add
+ <code>*</code> at the start of your pattern. Also, you can navigate along the matching elements with
+ <code>↑</code> and
+ <code>↓</code>, and go to the selected element in your editor with
+ <code>Enter</code>.
+ </p>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/tables/images/table_create_item1.png b/doc/5.1.x/user/tables/images/table_create_item1.png
new file mode 100644
index 0000000..1eac7dd
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_create_item1.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_create_item2.png b/doc/5.1.x/user/tables/images/table_create_item2.png
new file mode 100644
index 0000000..fa5c6c5
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_create_item2.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_multiline_edit_windows.png b/doc/5.1.x/user/tables/images/table_multiline_edit_windows.png
new file mode 100644
index 0000000..4bcace1
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_multiline_edit_windows.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_refresh1.png b/doc/5.1.x/user/tables/images/table_refresh1.png
new file mode 100644
index 0000000..015c68d
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_refresh1.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_show_hide1.png b/doc/5.1.x/user/tables/images/table_show_hide1.png
new file mode 100644
index 0000000..23ce738
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_show_hide1.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_show_hide2.png b/doc/5.1.x/user/tables/images/table_show_hide2.png
new file mode 100644
index 0000000..449f131
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_show_hide2.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_sort_ascending.png b/doc/5.1.x/user/tables/images/table_sort_ascending.png
new file mode 100644
index 0000000..012cd3b
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_sort_ascending.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_sort_by1.png b/doc/5.1.x/user/tables/images/table_sort_by1.png
new file mode 100644
index 0000000..5d7eae7
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_sort_by1.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_sort_descending.png b/doc/5.1.x/user/tables/images/table_sort_descending.png
new file mode 100644
index 0000000..7e0db46
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_sort_descending.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_sort_unsorted.png b/doc/5.1.x/user/tables/images/table_sort_unsorted.png
new file mode 100644
index 0000000..bfcf477
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_sort_unsorted.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/tables_representations1.png b/doc/5.1.x/user/tables/images/tables_representations1.png
new file mode 100644
index 0000000..38e8234
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/tables_representations1.png
Binary files differ
diff --git a/doc/5.1.x/user/trees/Trees.html b/doc/5.1.x/user/trees/Trees.html
new file mode 100644
index 0000000..bf8c416
--- /dev/null
+++ b/doc/5.1.x/user/trees/Trees.html
@@ -0,0 +1,118 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Trees</title>
+ <link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+ <link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+ </head>
+ <body>
+ <h1 id="TreeEditors">Tree Editors</h1>
+ <p>This document explains how to use Sirius tree editors/modelers which allow to view and manipulate data in a hierarchical way.</p>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#TreeEditors">Tree Editors</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#introduction">Introduction</a>
+ </li>
+ <li>
+ <a href="#managing">Creating, Renaming and Deleting Trees</a>
+ </li>
+ <li>
+ <a href="#refresh">Refreshing Trees</a>
+ </li>
+ <li>
+ <a href="#items">Adding and Removing Tree Items</a>
+ </li>
+ <li>
+ <a href="#editing">Editing Tree Items</a>
+ </li>
+ <li>
+ <a href="#dragndrop">Tree Items Drag and Drop</a>
+ </li>
+ <li>
+ <a href="#quick_outline">Quick Outline</a>
+ </li>
+ <li>
+ <a href="#font_override">Overriding Tree Items Font</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="introduction">Introduction</h2>
+ <p>Sirius provides support for hierarchical representations called
+ <em>trees</em>, which represent information in a hierarchical way.
+ </p>
+ <img border="0" src="images/tree_representation1.png"/>
+ <p>Note that as always with Sirius, some of the features described below may or may not be available with all specific tree editors. Some tree editors are configured to only display information but do not allow edition for example. It all depends on which features the person who
+ <em>specified</em> (configured) the tree decided to support.
+ </p>
+ <h2 id="managing">Creating, Renaming and Deleting Trees</h2>
+ <p>Trees are managed in the same way as the other kinds or representations supported by Sirius (diagrams, tables...). They are created either through the
+ <em>New Representation</em> context menu on a semantic element, or through the
+ <em>Create Representation</em> action on the context menu of a
+ <em>Modeling Project</em>. Newly created trees are automatically opened. To open an existing tree, simply double-click on it in the
+ <em>Model Explorer</em>: it will appear both inside the representation file (
+ <code>aird</code> file) and under the semantic element it represents inside the semantic model.
+ </p>
+ <p>You can rename, duplicate or delete a tree by choosing the corresponding action (resp.
+ <em>Rename</em>,
+ <em>Copy</em> or
+ <em>Delete</em>) in the context menu on the tree element in the
+ <em>Model Explorer</em>.
+ </p>
+ <h2 id="refresh">Refreshing Trees</h2>
+ <p>Depending on the value of the
+ <i>Automatic refresh</i> Sirius preference (accessible through
+ <i>Window</i> /
+ <i>Preferences...</i> /
+ <i>Sirius</i>), the contents of opened trees may or may not be automatically updated when the underlying semantic model changes. In
+ <em>manual refresh</em> mode (when
+ <i>Automatic refresh</i> is unchecked), you can explicitly request a refresh of the whole tree by using the
+ <em>Refresh</em> button in the main Eclipse toolbar, as shown below:
+ </p>
+ <img border="0" src="images/tree_representation2.png"/>
+ <h2 id="items">Adding and Removing Tree Items</h2>
+ <p>If the tree’s configuration has defined tools to create new element (tree items), they will appear in the context menu of existing tree items. The name of the creation tools is not fixed; it depend on the tree’s configuration, so it will be different for each tree modeler. Note that you must have a tree element selected for the creation tools to appear in the context menu, and the behavior of the tool may depend on the selected element. </p>
+ <img border="0" src="images/tree_representation3.png"/>
+ <p>If the tree is completely empty and you have no element to select, you can still create elements (if supported by the tree’s configuration) by using the drop-down menus in the main Eclipse toolbar (see screenshot).</p>
+ <img border="0" src="images/tree_representation4.png"/>
+ <h2 id="editing">Editing Tree Items</h2>
+ <p>There are several ways to activate the edition of a tree item:</p>
+ <ul>
+ <li>F2 key, </li>
+ <li>Double-click, </li>
+ <li>Any alpha-numeric character key (for text edition only).</li>
+ </ul>
+ <p>Once the edit mode is enabled, simply enter your text and hit
+ <em>Return</em> to validate. The expected format of the edit string and its interpretation depends on how the tree’s configuration has been set up to interpret the text you enter.
+ </p>
+ <h2 id="dragndrop">Tree Items Drag and Drop</h2>
+ <p>Drag and drop is a feature which can be enabled by the specifier in the tree configuration. It is turned off by default.</p>
+ <p>Simply select the Tree Items you would like to drag, and drop them inside an other Tree Item. Most of the time, this will result in the dropped element being added to the new location, but the exact effect of the operation is entirely dependent on how the tree was configured by its specifier.</p>
+ <p>Notice that it may also possible to drag elements from other Eclipse views. Again, this depends on how the tree was configured.</p>
+ <h2 id="quick_outline">Quick Outline</h2>
+ <p>A quick outline is available with the shortcut
+ <code>Ctrl</code> +
+ <code>O</code>. This allows you to rapidly search text in the displayed name or the contained String attributes of your table elements elements.
+ </p>
+ <p>The star,
+ <code>*</code>, is a joker character, allowing you to search with more complicated patterns. Regarding this, an element is found if there is a word in its name or one of its attributes that match with the text in the filter, so if you want to search within words too, add
+ <code>*</code> at the start of your pattern. Also, you can navigate along the matching elements with
+ <code>↑</code> and
+ <code>↓</code>, and go to the selected element in your editor with
+ <code>Enter</code>.
+ </p>
+ <h2 id="font_override">Overriding Tree Items Font</h2>
+ <p>The tree editor always specify a font and text size to use when displaying tree items. If these do not render well on your machine for any reason, you can tell Sirius to use the default font from your environment instead.</p>
+ <p>To do so, go to “Window>Preferences”. In the preference window: </p>
+ <ul>
+ <li>select the Sirius Tree preferences and check the preference “Always use standard font”.</li>
+ </ul>
+ <img border="0" src="images/runtime_font_preference.png"/>
+ <ul>
+ <li>reopen all the tree editors currently opened. The font used is now your runtime one.</li>
+ </ul>
+ </body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/trees/images/runtime_font_preference.png b/doc/5.1.x/user/trees/images/runtime_font_preference.png
new file mode 100644
index 0000000..b67d123
--- /dev/null
+++ b/doc/5.1.x/user/trees/images/runtime_font_preference.png
Binary files differ
diff --git a/doc/5.1.x/user/trees/images/tree_representation1.png b/doc/5.1.x/user/trees/images/tree_representation1.png
new file mode 100644
index 0000000..8f9f441
--- /dev/null
+++ b/doc/5.1.x/user/trees/images/tree_representation1.png
Binary files differ
diff --git a/doc/5.1.x/user/trees/images/tree_representation2.png b/doc/5.1.x/user/trees/images/tree_representation2.png
new file mode 100644
index 0000000..5cfbda0
--- /dev/null
+++ b/doc/5.1.x/user/trees/images/tree_representation2.png
Binary files differ
diff --git a/doc/5.1.x/user/trees/images/tree_representation3.png b/doc/5.1.x/user/trees/images/tree_representation3.png
new file mode 100644
index 0000000..dd99944
--- /dev/null
+++ b/doc/5.1.x/user/trees/images/tree_representation3.png
Binary files differ
diff --git a/doc/5.1.x/user/trees/images/tree_representation4.png b/doc/5.1.x/user/trees/images/tree_representation4.png
new file mode 100644
index 0000000..913d62b
--- /dev/null
+++ b/doc/5.1.x/user/trees/images/tree_representation4.png
Binary files differ
diff --git a/doc/viewpoint-eef.html b/doc/5.1.x/viewpoint-eef.html
similarity index 100%
rename from doc/viewpoint-eef.html
rename to doc/5.1.x/viewpoint-eef.html
diff --git a/doc/Release_Notes.html b/doc/Release_Notes.html
index 8ab17e1..934c130 100644
--- a/doc/Release_Notes.html
+++ b/doc/Release_Notes.html
@@ -13,35 +13,32 @@
<a href="#ReleaseNotesforSirius">Release Notes for Sirius</a>
<ol style="list-style: disc;">
<li>
- <a href="#sirius5.1.1">Changes in Sirius 5.1.1</a>
+ <a href="#sirius6.0.0">Changes in Sirius 6.0.0</a>
<ol style="list-style: disc;">
<li>
<a href="#UserVisibleChanges">User-Visible Changes</a>
</li>
<li>
+ <a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
+ </li>
+ <li>
<a href="#DeveloperVisibleChanges">Developer-Visible Changes</a>
</li>
</ol>
</li>
<li>
- <a href="#sirius5.1.0">Changes in Sirius 5.1.0</a>
+ <a href="#sirius5.1.1">Changes in Sirius 5.1.1</a>
<ol style="list-style: disc;">
<li>
<a href="#UserVisibleChanges2">User-Visible Changes</a>
</li>
<li>
- <a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
- </li>
- <li>
<a href="#DeveloperVisibleChanges2">Developer-Visible Changes</a>
</li>
</ol>
</li>
<li>
- <a href="#sirius5.0.1">Changes in Sirius 5.0.1</a>
- </li>
- <li>
- <a href="#sirius5.0.0">Changes in Sirius 5.0.0</a>
+ <a href="#sirius5.1.0">Changes in Sirius 5.1.0</a>
<ol style="list-style: disc;">
<li>
<a href="#UserVisibleChanges3">User-Visible Changes</a>
@@ -55,7 +52,10 @@
</ol>
</li>
<li>
- <a href="#sirius4.1.2">Changes in Sirius 4.1.2</a>
+ <a href="#sirius5.0.1">Changes in Sirius 5.0.1</a>
+ </li>
+ <li>
+ <a href="#sirius5.0.0">Changes in Sirius 5.0.0</a>
<ol style="list-style: disc;">
<li>
<a href="#UserVisibleChanges4">User-Visible Changes</a>
@@ -63,45 +63,9 @@
<li>
<a href="#DeveloperVisibleChanges4">Developer-Visible Changes</a>
</li>
- </ol>
- </li>
- <li>
- <a href="#sirius4.1.1">Changes in Sirius 4.1.1</a>
- <ol style="list-style: disc;">
- <li>
- <a href="#UserVisibleChanges5">User-Visible Changes</a>
- </li>
- <li>
- <a href="#DeveloperVisibleChanges5">Developer-Visible Changes</a>
- </li>
- </ol>
- </li>
- <li>
- <a href="#sirius4.1.0">Changes in Sirius 4.1.0</a>
- <ol style="list-style: disc;">
- <li>
- <a href="#UserVisibleChanges6">User-Visible Changes</a>
- </li>
<li>
<a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
</li>
- <li>
- <a href="#DeveloperVisibleChanges6">Developer-Visible Changes</a>
- </li>
- </ol>
- </li>
- <li>
- <a href="#sirius4.0.0">Changes in Sirius 4.0.0</a>
- <ol style="list-style: disc;">
- <li>
- <a href="#UserVisibleChanges7">User-Visible Changes</a>
- </li>
- <li>
- <a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
- </li>
- <li>
- <a href="#DeveloperVisibleChanges7">Developer-Visible Changes</a>
- </li>
</ol>
</li>
</ol>
@@ -110,9 +74,209 @@
<p>This document contains the release notes for recent major releases of Sirius. See also
<a href="Release_Notes_Previous.html">the release notes from previous versions</a> for details about older releases.
</p>
- <h2 id="sirius5.1.1">Changes in Sirius 5.1.1</h2>
+ <h2 id="sirius6.0.0">Changes in Sirius 6.0.0</h2>
<h3 id="UserVisibleChanges">User-Visible Changes</h3>
<ul>
+ <li><span class="label label-success">Added</span> A new feature allows user to insert vertical blank space in sequence diagram. You can refer to the
+ <a href="user/sequences/Sequence%20Diagrams.html#insert_vertical_blank_space">user documentation </a> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> A new feature called “Generic Edge Creation Tool” allows to create an edge by starting to select the source and the target before choosing the concrete edge creation tool. That allows to restrict the list of possible edge creation tools (possibly only one edge or no one) according to the selected source and target.</li>
+ </ul>
+ <p>
+ <img border="0" src="images/genericEdgeCreationTool.png"/>
+ </p>
+ <ul>
+ <li> <span class="label label-success">Added</span> A new feature called “Link Note” has been added. It is a special kind of note which references any existing representation in the project. It is possible to navigate to the target representation by double clicking on a link note. You can refer to the
+ <a href="user/diagrams/Diagrams.html#notes">user documentation</a> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> The color palette for text, line and fill buttons, in appearance tab in properties view, has been enhanced. Before, when clicking on text, line or fill buttons, the available colors were only 12 arbitrary colors. Now, there are 50 maximum colors distributed in 10 columns. The displayed colors are
+ <ul>
+ <li>a shading of black to white then,</li>
+ <li>all fixed colors defined in VSM of all selected viewpoints and </li>
+ <li>the Sirius fixed colors following the colors of the rainbow.</li>
+ </ul>
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="images/color_palette.png"/>
+ </p>
+ <h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> An action is added in main toolbar to reload the VSM of installed plug-ins that may have changed. Refer to the
+ <a href="specifier/general/Specifying_Viewpoints.html#reloadVSM">specifier documentation</a> for details.
+ </li>
+ <li><span class="label label-success">Added</span> In the VSM editor, when the cursor is inside an interpreted expression at a location which corresponds to a Java service invocation, hitting
+ <strong>F3</strong> will navigate to the service implementation in a Java editor. See
+ <a href="specifier/general/Writing_Queries.html#service_navigation">the documentation</a> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> Specifier can now define a background color for a diagram representation. It is possible by specifying color in the
+ <em>Background</em> property section of the
+ <em>Diagram Description</em>. Pre-defined system colors and colors from the
+ <em>User Color Palette</em> are supported. See
+ <a href="specifier/diagrams/Diagrams.html#diagram_description">the documentation</a> for details.
+ </li>
+ <li><span class="label label-info">Modified</span> Warning: Java service throwing an
+ <code>OperationCanceledException</code> with a message containing the specific key word "
+ <code>-RT-</code>" has now a specific behavior. In this case, the
+ <code>OperationCanceledException</code> is rethrown to rollback the command if this Java service is called from an AQL expression or through the service interpreter. You can refer to
+ <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=531487">bugzilla 531487</a> for more details.
+ </li>
+ </ul>
+ <h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-info">Modified</span> The SWTBot test framework version has been upgraded toward SWTBot 2.6. The main impacts are described below:
+ <ul>
+ <li>The way we retrieved some views by using
+ <code>bot.viewByTitle</code> (like “Problems” or “Error Log”) may not work anymore. Use
+ <code>bot.viewByPartName</code> instead.
+ </li>
+ <li>
+ <code>org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot.contextMenu(String)</code> raise a
+ <code>WidgetNotFoundException</code> instead of a
+ <code>TimeoutException</code>.
+ </li>
+ <li>The
+ <code>org.eclipse.sirius.tests.swtbot.support.utils.dnd.DndUtil</code> has been updated to be compatible with Oxygen and Photon platforms. Some methods may not work anymore on Neon platform.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-info">Modified</span> Some changes have been done in the image export tooling. Main impacts are described below:
+ <ul>
+ <li>The export of images, methods
+ <code>org.eclipse.sirius.ui.tools.api.actions.export.ExportAction.execute</code> and
+ <code>org.eclipse.sirius.ui.tools.api.actions.export.ExportAction.createImageFiles</code>, do not open UI Dialogs anymore. It throws an
+ <code>java.lang.reflect.InvocationTargetException</code> that wraps the real cause of the error (
+ <code>org.eclipse.sirius.ui.tools.api.actions.export.SizeTooLargeException</code> or
+ <code>java.lang.OutOfMemoryError</code>). Callers have to handle properly the exception.
+ </li>
+ <li>The mechanism allowing to authorize or forbid the export of an image, method
+ <code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService.isTooBig</code>, can now handle very large images that previously leads to incorrect exports.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-danger">Removed</span> Since Sirius 5.0.0,
+ <code>org.eclipse.sirius.ext.jface.viewers.IToolTipProvider</code> is not used anymore to provide a tooltip on diagram element decorations defined in the VSM. The tooltip is defined directly with an interpreted expression on
+ <code>GenericDecorationDescription</code>,
+ <code>MappingBasedDecoration</code> and
+ <code>SemanticBasedDecoration</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common">Changes in
+ <code>org.eclipse.sirius.common</code>
+ </h4>
+ <ul>
+ <li><span class="label label-danger">Removed</span> The interface
+ <code>org.eclipse.sirius.common.tools.api.interpreter.IExpressionProposal</code> and its only implementation
+ <code>DefaultExpressionProposal</code> (in the same package) have been removed. They were not used anywhere, expression completion API is actually defined in package
+ <code>org.eclipse.sirius.common.tools.api.contentassist</code> which has its own types.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.business.api.componentization.ViewpointRegistry.reloadAllFromPlugins()</code> has been added to reload, from the runtime, all the VSMs of installed plug-ins and have the effect dynamically in the runtime.
+ </li>
+ <li><span class="label label-info">Modified</span> The class
+ <code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryImpl()</code> has been moved to
+ <code>org.eclipse.sirius.business.internal.componentization</code> package.
+ </li>
+ <li><span class="label label-danger">Removed</span> The whole
+ <code>contribution</code> metamodel, which lived in package
+ <code>org.eclipse.sirius.description.contribution</code>, has been removed. It corresponded to an experimental feature which has been abandonned long ago.
+ </li>
+ <li><span class="label label-danger">Removed</span> The whole
+ <code>DRefreshable.refresh()</code> EOperation has been removed from the metamodel, along with all its implementations. Client code that needs the functionality can use either
+ <code>DialectManager.refresh()</code> for
+ <code>DRepesentations</code> or the new
+ <code>org.eclipse.sirius.diagram.tools.api.command.view.RefreshSiriusElement.refresh(DRefreshable)</code> static method for diagram elements (
+ <code>DRefreshable.refresh()</code> was a no-op for elements of other dialects).
+ </li>
+ <li><span class="label label-danger">Removed</span> The
+ <code>org.eclipse.sirius.viewpointSpecificationModel</code> extension point has been removed. It was part of the same experimental feauture and not actually used in practice.
+ </li>
+ <li><span class="label label-danger">Removed</span> In
+ <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper</code>, the method
+ <code>getViewpointSelection()</code> has been removed. It used an internal type as argument which has also been removed.
+ </li>
+ <li><span class="label label-danger">Removed</span> In
+ <code>org.eclipse.sirius.business.api.helper.SiriusResourceHelper</code>, the method
+ <code>getCorrespondingViewpoint(Session session, URI, boolean)</code> has been removed. It was not used anywhere, the real one is
+ <code>getCorrespondingViewpoint(Session, Viewpoint)</code> in the same class.
+ </li>
+ <li><span class="label label-danger">Removed</span> In
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices</code> (and all its implementations), the method
+ <code>refreshEffectiveRepresentationDescription(DRepresentation, IProgressMonitor)</code> has been removed. It corresponded to an experimental feature which has been abandonned long ago.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram">Changes in
+ <code>org.eclipse.sirius.diagram</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.tools.api.preferences.SiriusDiagramPreferencesKeys.PREF_DISPLAY_GENERIC_EDGE_CREATION_TOOL</code> has been added to make to possible to hide the new generic edge creation tool. See the
+ <em>User-Visible Changes</em> or the user documentation for more details.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor.createStraightenContribution()</code> has been added to make accessible the creation of the Straighten To tabbar contribution item.
+ </li>
+ </ul>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.customLayoutAlgorithmProvider</code> extension point has been added. It allows to contribute layout algorithms that can be configured directly in the VSM. This extension point comes with the following classes as API:
+ <code>org.eclipse.sirius.diagram.ui.api.layout.CustomLayoutAlgorithmProvider</code>,
+ <code>org.eclipse.sirius.diagram.ui.api.layout.CustomLayoutAlgorithm</code>,
+ <code>org.eclipse.sirius.diagram.ui.api.layout.EnumChoice</code> and
+ <code>org.eclipse.sirius.diagram.ui.api.layout.LayoutOptionFactory</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-danger">Removed</span> The class
+ <code>org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelectionDialog</code> has been removed.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in
+ <code>org.eclipse.sirius.tests.junit.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tests.support.api.TestsUtil.isBeforeOxygenPlatform()</code> has been added to detect if the current platform corresponds to a version before Oxygen.
+ </li>
+ <li><span class="label label-info">Modified</span> A
+ <code>String</code> parameter has been added to the method
+ <code>org.eclipse.sirius.tests.support.api.TestsUtil.setTargetPlatform()</code>. This new parameter corresponds to the plug-in name from where the tests are currently launched (for example
+ <code>org.eclipse.sirius.tests.swtbot.Activator.PLUGIN_ID</code>). It avoids to build a wrong target platform containing each Sirius plug-ins twice.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support">Changes in
+ <code>org.eclipse.sirius.tests.swtbot.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-danger">Removed</span> The method
+ <code>org.eclipse.sirius.tests.swtbot.support.utils.dnd.DndUtil#dragAndDrop(AbstractSWTBot<? extends Widget>, AbstractSWTBot<? extends Widget>)</code> has been removed. When explicit drop coordinates are not needed, use the standard SWTbot
+ <code>org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot.dragAndDrop(AbstractSWTBot<? extends Widget>)</code> method instead.
+ </li>
+ </ul>
+ <h4 id="Migrations">Migrations</h4>
+ <ul>
+ <li><span class="label label-success">Added</span> A migration participant has been added to fix diagram with note attachment corrupted (see
+ <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=533177">bugzilla #533177</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is
+ <em>13.0.0.201804031646</em>.
+ </li>
+ </ul>
+ <h4 id="TranslationKeysChanges">Translation Keys Changes</h4>
+ <h2 id="sirius5.1.1">Changes in Sirius 5.1.1</h2>
+ <h3 id="UserVisibleChanges2">User-Visible Changes</h3>
+ <ul>
<li><span class="label label-info">Modified</span> When exporting a diagram as an image, it is now possible to choose an image size level. Before this, a preference called
<em>AutoScale</em> was available and when it was enable, the diagram was scaled to the maximum size safely allowed by the system. Now, a new preference named
<em>Size of exported images</em> is available in the
@@ -134,16 +298,8 @@
<a href="user/diagrams/Diagrams.html#standardToolId">Standard Tools</a> chapter for more details on this tool.
</li>
</ul>
- <h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
- <ul>
- <li><span class="label label-danger">Removed</span> Since Sirius 5.0.0,
- <code>org.eclipse.sirius.ext.jface.viewers.IToolTipProvider</code> is not used anymore to provide a tooltip on diagram element decorations defined in the VSM. The tooltip is defined directly with an interpreted expression on
- <code>GenericDecorationDescription</code>,
- <code>MappingBasedDecoration</code> and
- <code>SemanticBasedDecoration</code>.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius">Changes in
+ <h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
+ <h4 id="Changesinorg.eclipse.sirius2">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -157,7 +313,7 @@
<code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder.getReferencingSiriusElements(Collection<EObject>, SearchScope)</code>. The SearchScope.LOADED_REPRESENTATIONS_SCOPE scope covers the search and result scope. Then, no additional resource will be loaded using this scope.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in
<code>org.eclipse.sirius.diagram.ui</code>
</h4>
<ul>
@@ -181,7 +337,7 @@
<pre>SiriusEditPlugin.getPlugin().getPreferenceStore().setDefault(SiriusUIPreferencesKeys.PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT.name(),0);
</pre>
- <h4 id="Changesinorg.eclipse.sirius.ui">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ui2">Changes in
<code>org.eclipse.sirius.ui</code>
</h4>
<ul>
@@ -193,7 +349,7 @@
<code>org.eclipse.sirius.ui.business.api.dialect.ExportFormat</code> has a new attribute representing the scaling level to use for diagram export. It is defined by an integer type. Refer to the JavaDoc for details on its meaning.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in
<code>org.eclipse.sirius.tests.junit.support</code>
</h4>
<ul>
@@ -204,7 +360,7 @@
</ul>
<p>testcase.</p>
<h2 id="sirius5.1.0">Changes in Sirius 5.1.0</h2>
- <h3 id="UserVisibleChanges2">User-Visible Changes</h3>
+ <h3 id="UserVisibleChanges3">User-Visible Changes</h3>
<ul>
<li><span class="label label-success">Added</span> When exporting a diagram as an image, it is now possible to choose whether or not the diagram should be scaled. If disabled, the diagram will be exported with its normal size (equivalent to a 100% zoom level). If auto-scaling is enabled, the diagram will be scaled to the maximum size safely allowed by the system (this can be different on different OSes). Note that when auto-scaling is enabled, the image files produced may be larger than without. When exporting very large diagrams it is also possible that the diagram will be scaled
<em>down</em> (i.e. with a zoom level smaller than 100%). Enabling auto-scaling can be chosen on a case by case basis from the export dialog; the initial value in the dialog can be controlled by a new preference available in the
@@ -253,7 +409,7 @@
<a href="developer/extensions-provide_custom_bundled_image_shape.html#bundleImageShape">bundleImageShape</a> ), opening or refreshing a diagram will not display exception anymore when the bundleImageShape extension is not valid. A warning is now displayed in the Error Log view to inform user of which attribute of the extension is not correct.
</li>
</ul>
- <h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+ <h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
<ul>
<li><span class="label label-success">Added</span> An
<a href="./user/general/Modeling%20Project.html#Migration">automatic migration</a> has been added in this version to fix diagram with edge labels corrupted (see
@@ -282,8 +438,8 @@
<em>Reference Name</em> field (if a valid feature has been specified).
</li>
</ul>
- <h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
- <h4 id="Migrations">Migrations</h4>
+ <h3 id="DeveloperVisibleChanges3">Developer-Visible Changes</h3>
+ <h4 id="Migrations2">Migrations</h4>
<ul>
<li><span class="label label-success">Added</span> A migration has been added to fix diagram with edge labels corrupted (see
<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=518870">bugzilla #518870</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is
@@ -308,7 +464,7 @@
<em>12.1.0.201708031200</em>.
</li>
</ul>
- <h4 id="TranslationKeysChanges">Translation Keys Changes</h4>
+ <h4 id="TranslationKeysChanges2">Translation Keys Changes</h4>
<p>See
<a href="i18n_changes.html#sirius51">this document</a> for the complete list of message keys added or removed in Sirius 5.0.
</p>
@@ -317,7 +473,7 @@
<code>createLocalRepresentationInSeparateResource</code> at true. For more detail, see the developer documentation:
<a href="./developer/representations_lazy_loading.html">Representations lazy loading (experimental)</a>.
</p>
- <h4 id="Changesinorg.eclipse.sirius2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius3">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -391,7 +547,7 @@
<code>DialectManagerImpl</code>.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.common">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.common2">Changes in
<code>org.eclipse.sirius.common</code>
</h4>
<ul>
@@ -403,7 +559,7 @@
<code>getFilesFromWorkspace(Collection<IContainer>, String)</code> to be more generic.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in
<code>org.eclipse.sirius.diagram</code>
</h4>
<ul>
@@ -413,7 +569,7 @@
<code>DDiagram.getActivatedLayers</code> in several cases if you directly use it.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in
<code>org.eclipse.sirius.diagram.ui</code>
</h4>
<ul>
@@ -462,7 +618,7 @@
<a href="./specifier/general/Writing_Queries.html#service_methods">specifier documentation</a>, it is recommended to use List or Set instead of Collection in java services signature.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ui2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ui3">Changes in
<code>org.eclipse.sirius.ui</code>
</h4>
<ul>
@@ -528,7 +684,7 @@
<a href="user/general/Aird_Editor.html">the aird editor</a>.
</p>
<h2 id="sirius5.0.0">Changes in Sirius 5.0.0</h2>
- <h3 id="UserVisibleChanges3">User-Visible Changes</h3>
+ <h3 id="UserVisibleChanges4">User-Visible Changes</h3>
<ul>
<li><span class="label label-success">Added</span> An new
<em>aird editor</em> is available on
@@ -552,7 +708,8 @@
</li>
<li><span class="label label-info">Modified</span> Decorators on diagram elements are drawn on top of other figures. If there is an overlap between a decorator of a figure A and another figure B that is over figure A, when user clicks on the decorator, the figure B is now selected (before it was the parent figure A).</li>
</ul>
- <h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
+ <h3 id="DeveloperVisibleChanges4">Developer-Visible Changes</h3>
+ <h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
<ul>
<li><span class="label label-success">Added</span> It is now possible to automatically create one or several pre-configured widget(s) in a group if its domain class and if the meta-models of the properties view containing it have been specified. The widget(s) created will be infered from the features in the domain class (e.g. a properly configured
<em>Checkbox</em> widget will be created for boolean attributes).
@@ -605,18 +762,17 @@
<em>Properties</em> DSL can now have an identifier, a label and some documentation.
</li>
</ul>
- <h3 id="DeveloperVisibleChanges3">Developer-Visible Changes</h3>
- <h4 id="Migrations2">Migrations</h4>
+ <h4 id="Migrations3">Migrations</h4>
<ul>
<li><span class="label label-success">Added</span> A migration is added in this version to fix the alignment of the text in notes (as explained in user visible changes). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is
<em>12.0.0.201704070000</em>.
</li>
</ul>
- <h4 id="TranslationKeysChanges2">Translation Keys Changes</h4>
+ <h4 id="TranslationKeysChanges3">Translation Keys Changes</h4>
<p>See
<a href="i18n_changes.html#sirius50">this document</a> for the complete list of message keys added or removed in Sirius 5.0.
</p>
- <h4 id="Changesinorg.eclipse.sirius.common2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.common3">Changes in
<code>org.eclipse.sirius.common</code>
</h4>
<ul>
@@ -640,7 +796,7 @@
<code>org.eclipse.emf.edit.ui.celleditor.FeatureEditorDialog</code> equivalent provided by EMF directly instead.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius3">Changes in
+ <h4 id="Changesinorg.eclipse.sirius4">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -774,7 +930,7 @@
<code>RepresentationElementIdentifier</code>) have been removed.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ui3">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ui4">Changes in
<code>org.eclipse.sirius.ui</code>
</h4>
<ul>
@@ -867,7 +1023,7 @@
<em>Model Request Interpreter</em> view is still present if needed during the transition, but not exposed or used anywhere. It will be removed in a future version.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in
<code>org.eclipse.sirius.diagram</code>
</h4>
<ul>
@@ -896,7 +1052,7 @@
<code>NodeStyleIdentifier</code>) have been removed.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in
<code>org.eclipse.sirius.diagram.ui</code>
</h4>
<ul>
@@ -1057,7 +1213,7 @@
<code>AbstractMetamodelPropertySectionSpec</code>. Those classes are now used for the edition of the metamodels of both the Properties view description and the various representations.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support3">Changes in
<code>org.eclipse.sirius.tests.junit.support</code>
</h4>
<ul>
@@ -1068,7 +1224,7 @@
<code>org.eclipse.sirius.tests.support.api.OpenedSessionsCondition</code> has been extracted from a junit test to be used by multiple junit tests. It allows to wait until a session is in opened state.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support2">Changes in
<code>org.eclipse.sirius.tests.swtbot.support</code>
</h4>
<ul>
@@ -1115,1065 +1271,6 @@
// are not really redrawn and the rest of the test is not reliable.
SWTBotUtils.waitAllUiEvents();
-
</pre>
- <h2 id="sirius4.1.2">Changes in Sirius 4.1.2</h2>
- <h3 id="UserVisibleChanges4">User-Visible Changes</h3>
- <ul>
- <li><span class="label label-success">Added</span> A new preference named
- <em>Maximum size of tabs name</em> is available in the Sirius Properties View preference page. This preference is used to shorten the tabs names when the default rules are used to render the properties view.
- </li>
- </ul>
- <p>
- <img border="0" src="./images/PreferencePageMaxTabName.png"/>
- </p>
- <h3 id="DeveloperVisibleChanges4">Developer-Visible Changes</h3>
- <ul>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> class has been added to handle copy/paste format with mapping information when an element target of a format pasting has many source diagram format corresponding to its key. In this case, we use the mapping information to get the more precise data format. And if no result matched, then we return the first found by using the key.
- </li>
- </ul>
- <ul>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.getFormatData(FormatDataKey, RepresentationElementMapping)</code> method has been added to retrieve during format pasting the data format corresponding to the given key and mapping when more than one result correspond to the key. If no result matches the mapping, then the first result found by using the key is returned.
- </li>
- </ul>
- <ul>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> method has been added to allow data format manager to register data format with mapping information when copying format.
- </li>
- </ul>
- <ul>
- <li><span class="label label-success">Deprecated</span></li>
- </ul>
- <p>
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager.getFormatData(FormatDataKey)</code> It is replaced by
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.getFormatData(FormatDataKey, RepresentationElementMapping)</code> to better handle copy/paste format cases.
- </p>
- <ul>
- <li><span class="label label-success">Deprecated</span></li>
- </ul>
- <p>
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager.addFormatData(FormatDataKey, AbstractFormatData)</code> It is replaced by
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> to better handle copy/paste format cases.
- </p>
- <h2 id="sirius4.1.1">Changes in Sirius 4.1.1</h2>
- <h3 id="UserVisibleChanges5">User-Visible Changes</h3>
- <ul>
- <li><span class="label label-info">Modified</span>The “straighten to” actions were previously disabled when an edge is connected to border nodes that have several edges. It is now allowed.</li>
- </ul>
- <h3 id="DeveloperVisibleChanges5">Developer-Visible Changes</h3>
- <ul>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.table.business.api.helper.TableHelper.getEStructuralFeature(DLine, DColumn)</code> method has been added to retrieve the EStructuralFeature associated to a table column.
- </li>
- </ul>
- <h2 id="sirius4.1.0">Changes in Sirius 4.1.0</h2>
- <h3 id="UserVisibleChanges6">User-Visible Changes</h3>
- <ul>
- <li><span class="label label-success">Added</span> Copy/Paste Layout has been completed with Copy/Paste Style and Copy/Paste Format.
- <em>Paste Format</em> is equivalent to paste
- <em>Layout</em> and
- <em>Style</em> action. See chapter
- <a href="./user/diagrams/Diagrams.html#copy_paste_format">
- <em>Copy/paste of format</em>
- </a> in
- <em>User Manual</em> for more details.
- </li>
- <li><span class="label label-success">Added</span> The
- <a href="./user/diagrams/Diagrams.html#snap_to_shapes">snap to shape</a> feature is now available on border nodes.
- </li>
- <li><span class="label label-success">Added</span> It is now possible to display an attachment link between an edge and its labels when label or edge is selected. This is not the default behavior but it can be activated by a preference in
- <em>Sirius/Sirius Diagram/Connections</em> preference page. See chapter
- <a href="./user/diagrams/Diagrams.html#edge_label_attachment">
- <em>Display attachment link between edge and its labels</em>
- </a> in
- <em>User Manual</em> for more details.
- </li>
- <li><span class="label label-success">Added</span> It is now possible to straighten an edge to top, bottom, left or right. These actions are available on edge contextual menu
- <em>Layout/Straighten</em>. See chapter
- <a href="./user/diagrams/Diagrams.html#straighten_an_edge">
- <em>Straighten an edge</em>
- </a> in
- <em>User Manual</em> for more details.
- </li>
- <li><span class="label label-success">Added</span> It is now possible to disable the
- <em>Default</em> and
- <em>Semantic</em> properties tabs (visible when selecting and element from the
- <em>Model Explorer</em> or from a Sirius editor, respectively) when using modelers which provide fully-functional replacements defined directly with Sirius. This is controled in the new
- <em>Sirius > Sirius Properties View</em> preference page.
- </li>
- <li><span class="label label-success">Added</span> Sirius-defined properties view are now enabled for semantic elements selected directly from inside the
- <em>Model Explorer</em> (as long as the selected element is from inside an open Sirius session/project). Previously only elements selected from inside a Sirius editor were supported.
- </li>
- <li><span class="label label-info">Modified</span> In the Sirius-provided
- <em>Properties View</em>, the edition of a text field is only taken into account when pressing
- <em>Enter</em> or leaving the field. Previously it was triggered asynchronously after a small delay without activity, which could be confusing.
- </li>
- <li><span class="label label-info">Modified</span> When trying to open a session which holds a representation resource or a VSP which was saved using a more recent version of Sirius than the one you are using, the session will be automatically closed displaying an error message. You can overload this behavior by providing you own implementation of
- <code>UICallBack</code> in which you can have an UI feedback letting you choose if you want to open the session anyway. Warning: if you choose to proceed, there is no guarantee that the resulting session will be usable. It may even lead to data loss or corruption; use at your own risk.
- </li>
- </ul>
- <p>If a viewpoint has been defined with a more recent version of Sirius than the one you are using, the
- <code>ViewpointRegistry</code> will not register it and a warning is logged in the error log view to inform the user.
- </p>
- <ul>
- <li><span class="label label-info">Modified</span> The
- <a href="./user/diagrams/Diagrams.html#move_edge_group">move edge group</a> feature now also work for a selection of edge group.
- </li>
- <li><span class="label label-info">Modified</span> In a diagram editor, the zoom with mouse wheel is now zooming on mouse location instead of center of the editor. See
- <a href="./user/diagrams/Diagrams.html#zooming_diagram_id">user documentation</a> .
- </li>
- <li><span class="label label-info">Modified</span> The direct edit on a Note or Text is now accessible by a slow double click like any other diagram element.</li>
- <li><span class="label label-info">Modified</span> The shortcut
- <em>Ctrl+&</em>, for
- <a href="./user/diagrams/Diagrams.html#reset_origin">
- <em>Reset Origin</em>
- </a> action, has been replaced by
- <em>Ctrl+HOME</em>.
- </li>
- </ul>
- <h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
- <ul>
- <li><span class="label label-success">Added</span> It is now possible to inline a copy of the default Properties Views model inside the VSM. This is a copy of the model Sirius would use if no
- <em>Properties View Description</em> was specified. It can be used as a starting point for manual customization, or as a complement for elements for which you do not provide any custom rules.
- </li>
- <li><span class="label label-success">Added</span> In the definition of the Properties view, hyperlink and label widgets can now have widget actions.</li>
- <li><span class="label label-success">Added</span> Hyperlink and label widgets now have a
- <code>displayExpression</code>, if blank the result of the value expression will be used after a call to the method
- <code>java.lang.Object#toString()</code>.
- </li>
- <li><span class="label label-success">Added</span> Hyperlink and label widgets now support optional associated actions (visible as buttons on the right of the widget).</li>
- <li><span class="label label-success">Added</span> A new widget named List with the same behavior as the multiple reference widget.</li>
- <li><span class="label label-success">Added</span>
- <em>Page</em> and
- <em>Group</em> descriptions in
- <em>Properties View</em> models now support a
- <code>preconditionExpression</code>, which behaves in the same way as preconditions for mappings on representation descriptions.
- </li>
- <li><span class="label label-info">Modified</span> The rules concerning the layout of compartments have been changed/completed. You can have a look at the
- <a href="specifier/diagrams/Diagrams.html#compartments_layout">dedicated chapter</a> in the specifier documentation for more details.
- </li>
- <li><span class="label label-info">Modified</span> In the VSM editor, all dialogs which ask for selecting elements from the VSM will now show the fully qualified path of each element, instead of just their name, to allow distinguishing elements with the same name appearing in different places.</li>
- <li><span class="label label-info">Modified</span> The properties
- <code>fontSize</code> and
- <code>labelFontSize</code> have been renamed into
- <code>fontSizeExpression</code> and
- <code>labelFontSizeExpression</code> since both of them were already treated as expression.
- </li>
- <li><span class="label label-info">Modified</span> In the VSM editor, the
- <em>Identifier</em> attribute of many
- <em>Prroperties View</em> related elements has been moved into the
- <em>Advanced</em> tab and renamed
- <em>Extension Id</em>, as it is not actually required on common use cases but only for extensibility purposes.
- </li>
- <li><span class="label label-info">Modified</span> The property
- <code>Domain Class Expression</code> in
- <code>DynamicMappingFor</code> elements (in properties views definitions) has been renamed into
- <code>Iterable Expression</code>.
- </li>
- <li><span class="label label-info">Modified</span> The
- <em>Properties View</em> widget which was named
- <em>Reference</em> in Sirius 4.0 has been renamed as
- <em>List</em>, as it corresponds to an arbitrary list of elements with customizable buttons for acting on them. A new
- <em>Reference</em> widget was added for handling plain
- <em>EReference</em> edition with minimal configuration needed.
- </li>
- <li><span class="label label-info">Modified</span> When opening a VSM, the editor now automatically expands the first few levels to immediatly reveal the interesting elements (representation descriptions).</li>
- <li><span class="label label-warning">Deprecated</span> The extension point
- <code>org.eclipse.sirius.diagram.ui.layoutDataManager</code> is deprecated. It is replaced by the new extension point
- <code>org.eclipse.sirius.diagram.ui.formatDataManager</code>. The deprecated extension point will be removed in the next 5.0 Sirius major release. Several classes associated with this deprecated extension point are also deprecated (see Developer-Visible Changes for details).
- </li>
- </ul>
- <h3 id="DeveloperVisibleChanges6">Developer-Visible Changes</h3>
- <ul>
- <li><span class="label label-success">Added</span> As the first step to save the DRepresentation in its own resource,
- <code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()</code> has been added as a wrapper of the
- <code>DRepresentation</code>. The
- <code>DRepresentationDescriptor</code> is contained by the
- <code>DView</code> and the
- <code>DRepresentationDescriptor</code> have a reference to the
- <code>DRepresentation</code>. In this step, the main impact is that the Sirius common navigator does not display the
- <code>DRepresentation</code> anymore but the
- <code>DRepresentationDescriptor</code> instead. All the actions and commands are then based on
- <code>DRepresentationDescriptor</code>.
- </li>
- <li><span class="label label-success">Added</span> As the second step to save the DRepresentation in its own resource,
- <code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentations()</code> has been removed. The
- <code>DRepresentation</code> is now created as root element of the representations resource. The main impact is on the core of Sirius but also potentially on client Sirius customization. Each peace of code that makes the supposition that the
- <code>DView</code> is the container of the
- <code>DRepresentation</code> must be reworked. The code using methods in the following list may be concerned by the rework:
- <ul>
- <li>
- <code>EObject.eContainer()</code>. If the object is a
- <code>DRepresentation</code>, its container is now null.
- </li>
- <li>
- <code>EcoreUtil.getRootContainer(xxx)</code>. The root container of a DDiagramElement is the
- <code>DRepresentation</code> and not the
- <code>DAnalysis</code> any more.
- </li>
- <li>
- <code>EcoreUtil.isAncestor(xxx)</code>. the
- <code>DView</code> is not an ancestor of a
- <code>DRepresentation</code> (or its content) anymore.
- </li>
- </ul>
- </li>
- <li><span class="label label-success">Added</span> As a developer, the followings utility methods will help you to migrate your code following the second step described above:
- <ul>
- <li>
- <code>org.eclipse.sirius.business.api.query.DViewQuery.getLoadedRepresentations()</code> replaces the removed
- <code>DView.getOwnedRepresentations()</code> method. It provides all the loaded representations holds by a
- <code>DView</code>. In this step, all that representations are always loaded as they are into the .aird resource.
- </li>
- <li>
- <code>org.eclipse.sirius.business.api.query.DViewQuery.getAllContentInRepresentations(final Predicate<? super EObject>)</code> provides the content of a
- <code>DView</code> according to a predicate.
- </li>
- <li>
- <code>org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()</code> provides the
- <code>DRepresentationDescriptor</code> which references the
- <code>DRepresentation</code>.
- </li>
- <li>
- <code>org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()</code> allows to retrieve a DAnalysis from a
- <code>DRepresentationElement</code>
- </li>
- </ul>
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius4">Changes in
- <code>org.eclipse.sirius</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> A new extension point named
- <code>org.eclipse.sirius.interpretedExpressionQueryProvider</code> (with the associated new interface
- <code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionQueryProvider</code>) allows external contribution of
- <code>IInterpretedExpressionQuery</code> specific to some particular expression occurrences in the VSM. This is used in particular for VSM extensions which do not fit well into the hard-coded assumptions about
- <code>IInterpretedExpressionQuery</code>. In Sirius 4.1, this is used to add completion and validation support for expressions used in properties views descriptions.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.business.api.migration.AirdResourceVersionMismatchException</code> exception has been added to cancel Sirius session opening due to an .aird version mismatch, i.e. when one the of the loaded Representation resources is coming from a newer Sirius release.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()</code> has been added as the first step to save the DRepresentation in its own resource. In this step, the DRepresentationDescriptor life cycle is the same as the associated DRepresentation.
- <ul>
- <li>
- <code>org.eclipse.sirius.business.api.dialect.command.RenameRepresentationCommand</code>
- </li>
- <li>
- <code>org.eclipse.sirius.business.api.dialect.command.DeleteRepresentationCommand</code>
- </li>
- <li>
- <code>org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand</code>
- </li>
- <li>
- <code>org.eclipse.sirius.business.api.dialect.command.CopyRepresentationCommand</code>
- </li>
- </ul>
- </li>
- <li><span class="label label-success">Added</span>
- <code>getAvailableRepresentationDescriptions(Collection<Viewpoint>, EObject)</code>,
- <code>getAllRepresentationDescriptors(Session )</code>,
- <code>getRepresentationDescriptors(EObject, Session)</code> and
- <code>getRepresentationDescriptors(RepresentationDescription, Session )</code> have been added in
- <code>org.eclipse.sirius.business.api.dialect.DialectServices</code> and implemented in
- <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices</code>. These methods are used, instead of their equivalent with DRepresentation, for every functionality which relies on
- <code>DRepresentationDescriptor</code> instead of
- <code>DRepresentation</code> such as actions, wizards or views.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isSupported(DRepresentationDescriptor)</code> has been added because actions, wizards or views that were related to
- <code>DRepresentation</code> are now related to
- <code>DRepresentationDescriptor</code>.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.canHandle(DRepresentationDescriptor)</code> has been added because actions, wizards or views that were related to
- <code>DRepresentation</code> are now related to
- <code>DRepresentationDescriptor</code>.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIManager.canExport(DRepresentationDescriptor, ExportFormat)</code> has been added because actions, wizards or views that were related to
- <code>DRepresentation</code> are now related to
- <code>DRepresentationDescriptor</code>.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()</code> has been added to retrieve the
- <code>DRepresentationDescriptor</code> that references the
- <code>DRepresentation</code>.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR_FROM_DESCRIPTION</code> and
- <code>org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR</code> have been added. They are used to get or put
- <code>DRepresentationDescriptor</code> in the model managed by the
- <code>Session</code> through the
- <code>org.eclipse.sirius.business.api.session.SessionService.putCustomData(String, EObject, EObject)</code> and
- <code>SessionService.getCustomData(String, EObject)</code> methods.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()</code> has been added to retrieve a DAnalysis from a
- <code>DRepresentationElement</code>
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code> has been changed to
- <code>findDViewForRepresentationDescription(DAnalysis , final RepresentationDescription)</code> because that API was previously badly defined.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.business.api.dialect.DialectServices.deleteRepresentation(DRepresentation, Session)</code> has been changed to
- <code>deleteRepresentation(DRepresentationDescriptor, Session)</code> because now the
- <code>DRepresentationDescriptor</code> is the entry point to delete the
- <code>DRepresentation</code> and itself.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>DRepresentationDescriptor</code> is now the entry point to move, control or uncontrol a
- <code>DRepresentation</code> instead of the
- <code>DRepresentation</code> itself. Accordingly, the return type or parameter of the followings have changed to switch from
- <code>DRepresentation</code> to
- <code>DRepresentationDescriptor</code>
- <ul>
- <li>constructors of
- <code>org.eclipse.sirius.business.api.control.SiriusControlCommand</code>
- </li>
- <li>the constructor
- <code>org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand.MoveRepresentationCommand(Session, DAnalysis, Collection<DRepresentationDescriptor>)</code>
- </li>
- <li>the method
- <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSession.moveRepresentation(DAnalysis, DRepresentationDescriptor)</code>
- </li>
- </ul>
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.updateModelsReferences(DView)</code> has replaced
- <code>updateModelsReferences(DAnalysis, Iterator<DSemanticDecorator>)</code> because it is more suited to the client needs.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.ui4">Changes in
- <code>org.eclipse.sirius.ui</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> The class
- <code>org.eclipse.sirius.ui.business.api.dialect.HierarchyLabelProvider</code> has been added to provide a generic label provider for VSM model element giving hierarchical label. This label provider replaces the one returned by deprecated method
- <code>DialectUIServices.getHierarchyLabelProvider()</code>.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>AbstractSWTCallback</code> provides a default implementation of
- <code>UICallBack.askSessionReopeningWithResourceVersionMismatch()</code> method to give feedback about version mismatch and give the choice to reopen session despite a potential corruption.
- </li>
- <li><span class="label label-info">Modified</span> The method
- <code>org.eclipse.sirius.ui.tools.api.control.SiriusControlHandler.getRepresentationsToMove(Shell, Session, EObject)</code> and
- <code>SiriusControlHandler.collectExistingRepresentations</code> have been renamed to
- <code>getRepresentationDescriptorsToMove(Shell, Session, EObject)</code> and
- <code>SiriusControlHandler.collectExistingRepresentationDescriptors</code>. The return type of both that methods and
- <code>SiriusControlHandler.askUserWhichRepresentationToSplit</code> has been changed to
- <code>DRepresentationDescriptor</code> as
- <code>DRepresentationDescriptor</code> is the entry point to work with a
- <code>DRepresentation</code> instead of DRepresentation itself.
- </li>
- <li><span class="label label-warning">Deprecated</span> The method
- <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.getHierarchyLabelProvider()</code> has been deprecated in favor of generic label provider
- <code>HierarchyLabelProvider</code>.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in
- <code>org.eclipse.sirius.diagram</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.allowsCopyPasteFormat(DSemanticDecorator)</code> has been added in replacement of
- <code>allowsCopyPasteLayout(DSemanticDecorator)</code> that is now deprecated. This 2 methods must return the same result.
- <code>allowsCopyPasteLayout(DSemanticDecorator)</code> will be removed in the new major version.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in
- <code>org.eclipse.sirius.diagram.ui</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> The constant
- <code>EDGE_SNAP_BACK</code> has been added in class
- <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>. It corresponds to the new snap back label action id that is present on edges.
- </li>
- <li><span class="label label-success">Added</span> 2 methods are added in
- <code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager</code> (and also in
- <code>org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager</code>):
- <ul>
- <li>
- <code>applyFormat(IGraphicalEditPart)</code>: Apply the current format data (layout data and style data) to the given edit part.
- </li>
- <li>
- <code>applyStyle(IGraphicalEditPart)</code>: Apply the current style data to the give edit part.
- </li>
- </ul>
- </li>
- <li><span class="label label-success">Added</span> 2 methods are added in
- <code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code>:
- <ul>
- <li>
- <code>createCopyFormatContribution(IDiagramWorkbenchPart)</code>: In replacement of
- <code>createCopyLayoutContribution(IDiagramWorkbenchPart)</code> that is now deprecated.
- </li>
- <li>
- <code>createPasteFormatContribution(IDiagramWorkbenchPart)</code>: In replacement of
- <code>createPasteLayoutContribution(IDiagramWorkbenchPart)</code> that is now deprecated.
- </li>
- </ul>
- </li>
- <li><span class="label label-success">Added</span> New action ids have been added in
- <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>:
- <ul>
- <li>
- <code>COPY_FORMAT</code>: Action contribution id for the copy format. It replaces the old
- <code>COPY_LAYOUT</code>.
- </li>
- <li>
- <code>PASTE_FORMAT</code>: Action contribution id for the paste format. It does not replace the old
- <code>PASTE_LAYOUT</code>. The paste format paste the layout and the style. The paste layout only paste layout.
- </li>
- <li>
- <code>PASTE_STYLE</code>: Action contribution id for the paste style.
- </li>
- </ul>
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.ui.business.api.query.NodeQuery.isDescendantOf(View)</code> has been added to know if a view is a descendant of another view.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery.getAncestor(int...)</code> has been added to retrieve the first ancestor of the view, or itself, that has at least one of the visualID passed as parameter.
- </li>
- <li><span class="label label-success">Added</span> The new preference key
- <code>PREF_SHOW_LINK_EDGE_LABEL_ON_SELECTION</code> has been added in
- <code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>. It corresponds to the preference shown in
- <em>Sirius/Sirius Diagram/Connections</em> Eclipse preferences.
- </li>
- <li><span class="label label-success">Added</span> The new figure
- <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SiriusWrapLabelWithAttachment</code> is a specific
- <code>SiriusWrapLabel</code> that allows to show an attachment between the label and its edge.
- </li>
- <li><span class="label label-success">Added</span> A new kind of request,
- <code>org.eclipse.sirius.diagram.ui.tools.api.requests.StraightenToRequest</code>, has been added to handle the new
- <em>Straighten to</em> actions. The corresponding id has also been added:
- <code>org.eclipse.sirius.diagram.ui.tools.api.requests.RequestConstants.REQ_STRAIGHTEN</code>.
- </li>
- <li><span class="label label-success">Added</span> 4 action ids have been added in
- <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>:
- <ul>
- <li>
- <code>STRAIGHTEN_TO_TOP</code>: For
- <em>Straighten to top</em> action,
- </li>
- <li>
- <code>STRAIGHTEN_TO_BOTTOM</code>: For
- <em>Straighten to bottom</em> action,
- </li>
- <li>
- <code>STRAIGHTEN_TO_LEFT</code>: For
- <em>Straighten to left</em> action,
- </li>
- <li>
- <code>STRAIGHTEN_TO_RIGHT</code>: For
- <em>Straighten to right</em> action.
- </li>
- </ul>
- </li>
- <li><span class="label label-success">Added</span> Constants have been added in
- <code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath</code> for the icon path of the four new straighten actions.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager</code> is deprecated, use
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.AbstractSiriusFormatDataManager</code> instead.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.layout.ILayoutDataManagerProvider</code> is deprecated, use
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.IFormatDataManagerProvider</code> instead.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataHelper</code> is deprecated, use
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataHelper</code> instead.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataKey</code> is deprecated, use
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataKey</code> instead.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager</code> is deprecated, use
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> instead.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManagerForSemanticElementsFactory</code> is deprecated, use
- <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerForSemanticElementsFactory</code> instead.
- </li>
- <li><span class="label label-info">Moved</span> The translation key
- <code>HierarchyLabelProvider_elementWihtoutNameLabel</code> has been removed from the
- <code>org.eclipse.sirius.diagram.ui</code> plug-in’s
- <code>Messages</code> class, and moved into the
- <code>org.eclipse.sirius.ui</code>'s
- <code>Messages</code> class.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime">Changes in
- <code>org.eclipse.sirius.ext.gmf.runtime</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> The class
- <code>SiriusSnapFeedbackPolicy</code> has been copied from
- <code>org.eclipse.sirius.ext.gef.editpolicies</code> to
- <code>org.eclipse.sirius.ext.gmf.runtime.editpolicies</code>. The old class in plug-in
- <code>org.eclipse.sirius.ext.gef</code> is deprecated and will be removed in the next version.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.tests.junit.support3">Changes in
- <code>org.eclipse.sirius.tests.junit.support</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> The utility methods
- <code>getRepresentationDescriptors(final String)</code>,
- <code>getRepresentationDescriptors(final String , final Session )</code> and
- <code>getRepresentationDescriptorFromRepresentation(DRepresentation)</code> have been added in class
- <code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> to adapt tests considering the
- <code>DView.ownedRepresentationDescriptors</code> addition.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support2">Changes in
- <code>org.eclipse.sirius.tests.swtbot.support</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> The utility method
- <code>mouseScrollWithKey(int, int, int, int)</code>, has been added in classes
- <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor</code>,
- <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer</code> and
- <code>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas</code> to allow testing events occurring after a mouse scroll combined to a keyboard key pressed at a given absolute position.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.properties">Changes in
- <code>org.eclipse.sirius.properties</code>
- </h4>
- <ul>
- <li><span class="label label-info">Modified</span> The property
- <code>domainClassExpression</code> has been renamed into
- <code>iterableExpression</code>.
- </li>
- <li><span class="label label-info">Modified</span> The properties
- <code>fontSize</code> and
- <code>labelFontSize</code> have been renamed into
- <code>fontSizeExpression</code> and
- <code>labelFontSizeExpression</code> since both of them were already treated as expression.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.ui.properties2">Changes in
- <code>org.eclipse.sirius.ui.properties</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> Four utility classes have been added as API in the package
- <code>org.eclipse.sirius.ui.properties.api</code> in order to help with the transformation of the description of custom widgets. The class
- <code>AbstractDescriptionConverter</code> can now be used as superclass for all the converters. The classes
- <code>DefautDescriptionConverter</code>,
- <code>DefautStyleDescriptionConverter</code> and
- <code>DefautDescriptionWithInitialOperationConverter</code>, now accessible, should handle most of the use cases.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.ecore.extender">Changes in
- <code>org.eclipse.sirius.ecore.extender</code>
- </h4>
- <ul>
- <li><span class="label label-info">Modified</span> The message
- <code>org.eclipse.sirius.ecore.extender.business.api.permission.exception.LockedInstanceException.PERMISSION_ISSUE_MESSAGE</code> has been modified. You should now use the
- <code>MessageFormat</code>. Example:
- <code>LockedInstanceException.PERMISSION_ISSUE_MESSAGE + getText(lockedElements)</code> must be replaced by
- <code>MessageFormat.format(LockedInstanceException.PERMISSION_ISSUE_MESSAGE, getText(lockedElements))</code>.
- </li>
- <li><span class="label label-info">Modified</span> The
- <code>org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessorsRegistry</code> has been refactored to avoid problem with
- <code>ModelAccessor</code> lifecycle. The constructor has no longer a parameter.
- </li>
- </ul>
- <h2 id="sirius4.0.0">Changes in Sirius 4.0.0</h2>
- <h3 id="UserVisibleChanges7">User-Visible Changes</h3>
- <ul>
- <li><span class="label label-success">Added</span> The user can now filter elements according to a Typed variable (String, Integer, EEnum or any EDataType). If a user applies a filter containing Typed Variables, a dialog is displayed to allow user entering the Typed Variable values. That values can be used as variables in the Condition Expression of the Variable Filter.</li>
- <li><span class="label label-success">Added</span> When the diagram is larger than the editor, you can move it in all directions pressing the middle-button and dragging the mouse (keeping the button pressed).</li>
- <li><span class="label label-info">Modified</span> Now if an object is locked and cannot be modified according to
- <code>IPermissionAuthority</code>, the properties view will not be editable if this locked object is selected from the Model Explorer view.
- </li>
- <li><span class="label label-info">Modified</span> When trying to reconnect an edge end on another edge, the edge is now highlighted only if a reconnect tool is found (the precondition of the tool is not tested here).</li>
- <li><span class="label label-info">Modified</span> List items now have the same margin whichever their parent is a simple list or a compartmentalized list. The margin in compartmentalized list was incorrectly set to 0 pixel.</li>
- <li><span class="label label-info">Modified</span> The wizard to ask the new representation name has been changed. These concerns the title of the wizard and the input label. Example with a new Entities diagram for EcoreTools:</li>
- </ul>
- <p>
- <img border="0" src="images/representationNameWizardChange.png"/>
- </p>
- <ul>
- <li><span class="label label-info">Modified</span> The export of diagram as image handles the gradient color for container background for BMP, JPG, PNG and SVG formats. Before, it only works for JPG format.</li>
- <li><span class="label label-info">Modified</span> The <img src="images/ApplyAppearanceProperties.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>
- <code>Apply Appearance Properties</code> action has been modified to use the last selected element as base style instead of the first one.
- </li>
- </ul>
- <h3 id="SpecifierVisibleChanges4">Specifier-Visible Changes</h3>
- <ul>
- <li><span class="label label-success">Added</span> Sirius 4.0 introduces
- <strong>experimental</strong> support for specifying the properties views of your modelers directly from inside the VSM. This feature uses the same dynamic approach as for specifying diagrams, tables and trees, with a very flexible configuration language and no code generation involved (including live preview of any change). As of Sirius 4.0, this feature should be considered in an experimental state with details subject to changes until Sirius 4.1, and is not installed by default. To install it, make sure either
- <a href="http://download.eclipse.org/releases/neon">the Eclipse Neon repositry</a> or the
- <a href="http://download.eclipse.org/sirius/updates/releases/4.0.0/neon">Sirius 4.0</a> and
- <a href="http://download.eclipse.org/modeling/emft/eef/updates/releases/1.6.0">EEF 1.6</a> repositories are available, and then to install the following features (from in the
- <em>Modeling</em> category of Neon, or
- <em>Sirius Experimental Features</em> of the Sirius repository ):
- <ul>
- <li>
- <em>Sirius Properties Views – Runtime Support</em> (
- <code>org.eclipse.sirius.properties.feature.feature.group</code>): needed at runtime for deployed modelers which have properties views defined in their specification.
- </li>
- <li>
- <em>Sirius Properties Views – Specifier Support</em> (
- <code>org.eclipse.sirius.specifier.properties.feature.feature.group</code>): provides support for editing the configuration model directly inside the VSM editor and the specifier documentation.
- </li>
- </ul>
- </li>
- </ul>
- <p>Once this is done, you can find the actual documentation in the
- <em>Sirius Specifier Manual</em>, under the
- <a href="specifier/properties/Properties_View_Description.html">
- <em>Properties View</em>
- </a> section.
- </p>
- <ul>
- <li><span class="label label-success">Added</span> All static strings defined in the VSMs which are visible to the end-user of the modeler, like viewpoint and tools names, can now be internationalized. Simply replace the name with a translation key reference of the form
- <code>%myUniqueKey</code> in the VSM, and define the value in the
- <em>Viewpoint Specification Project</em>'s
- <code>plugin.properties</code> (for the default value), or
- <code>plugin_XX.properties</code> for locale
- <code>XX</code>. The underlying mechanism is the same as for Eclipse/OSGi plug-ins, so translations can even be contributed by physically separate plug-in fragments. See
- <a href="specifier/general/Specifying_Viewpoints.html#translatable_messages">the corresponding section</a> in the documentation for more details.
- </li>
- <li><span class="label label-success">Added</span> It is possible to create
- <a href="specifier/diagrams/Diagrams.html#filter_with_typed_variable">Typed Variable</a> under Variable Filter.
- </li>
- <li><span class="label label-success">Added</span> A new class
- <code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices</code> (from plug-in
- <code>org.eclipse.sirius.ext.emf.edit</code>) has been added with a complete set of service methods to leverage most of the features of the “EMF Edit” framework, for example the various
- <em>Item Providers</em> associated to semantic elements. See
- <a href="specifier/general/Writing_Queries.html#editing_domain_services">the documentation</a> for details.
- </li>
- <li><span class="label label-success">Added</span> The specifier can now restrict the border node authorized sides. This new option is available in the advanced tab of the border node style. See the
- <a href="specifier/diagrams/Diagrams.html#authorizedsides">specifier documentation</a> for more details.
- </li>
- <li><span class="label label-info">Modified</span> The use of type literals in operations like
- <code>filter()</code> or
- <code>oclIsKindOf()</code> requires to explicitly add the domain meta-models plug-ins to the dependencies of the
- <em>Viewpoint Specification Project</em>. The documentation has been modified to recommend this.
- </li>
- <li><span class="label label-info">Modified</span>
- <strong>Warning</strong>: Before this version, a style customization of an
- <code>EEnum</code> attribute, like
- <code>labelFormat</code>, worked with a value expression using a Java service returning a
- <code>EEnumLiteral</code>. It is now forbidden. You must return an
- <code>Enumerator</code>. The documentation about
- <a href="specifier/diagrams/Diagrams.html#enum_customization">Styles Customization</a> now details this case.
- </li>
- <li><span class="label label-info">Modified</span> The
- <code>BorderSizeComputationExpression</code> migration has been corrected to recursively handle the sub container mappings. VSM created or migrated with Sirius 3.1.0, 3.1.1 or 3.1.2 might require a manual modification for the style descriptions of sub container mappings with border size computation equals to 0 as we cannot determine if they were added (or updated) after or before the migration: starting with Sirius 3.1.0, no border will be displayed for a 0 pixel value whereas with older version container always had at least a 1 pixel border.
- </li>
- <li><span class="label label-info">Modified</span> The variable under VariableFilter, previously named “Variable”, is renamed to “Select Model Element Variable”. It is functionally equivalent.</li>
- </ul>
- <h3 id="DeveloperVisibleChanges7">Developer-Visible Changes</h3>
- <ul>
- <li><span class="label label-success">Added</span> It is now possible to provide a full customized tab-bar by implementing the
- <code>ITabbarContributor</code> through the
- <code>org.eclipse.sirius.diagram.ui.tabbarContributor</code> extension-point. See the
- <a href="developer/extensions-provide_tabbar_extensions.html#contributeFullTabbar">developer documentation</a> for more details.
- </li>
- <li><span class="label label-success">Added</span> It is now possible to provide new shapes for basic shape styles through the
- <code>org.eclipse.sirius.diagram.bundledImageShape</code> extension-point. See the
- <a href="developer/extensions-provide_custom_bundled_image_shape.html">developer documentation</a> for more details.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius5">Changes in
- <code>org.eclipse.sirius</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> The method
- <code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getStatus()</code> has been added to have the status about session opening, i.e. if it has been correctly opened, cancelled or an exception has occurred.
- </li>
- <li><span class="label label-success">Added</span> A new variant of
- <code>org.eclipse.sirius.business.api.helper.task.TaskHelper.buildTaskFromModelOperation(EObject, ModelOperation)</code> has been added, which does not require to specify a
- <code>DRepresentation</code> in the context. It allows the creation of a task which executes a behavior specified by
- <code>ModelOperations</code> outside of the context of a specific representation, provided the
- <code>ModelOperations</code> work in that context.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.viewpoint.description.TypedVariable</code> has been created.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code> has been created as tag interface for variables that require user interaction to be valued.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForTypedVariable(List<TypedVariable>, List<String>)</code> has been created.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.tools.api.command.ui.NoUICallback.askForTypedVariable(List<TypedVariable>, List<String>)</code> has been created.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.business.api.dialect.DialectServices.getRequiredViewpoints(DRepresentation)</code> has been added to have mean to get required viewpoints to use a representation.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.getRequiredViewpoints(DRepresentation)</code> has been added to have a default implementation of
- <code>DialectServices.getRequiredViewpoints(DRepresentation)</code> method.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isRelatedViewpointSelected(Session, RepresentationDescription)</code> protected method has been added to check if a
- <code>RepresentationDescription</code> is usable in the context of the specified session.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String, String)</code> method has been added to replace the deprecated
- <code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String)</code>. This method now uses the description name as title for the wizard. This new method has been implemented by
- <code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback</code> and
- <code>org.eclipse.sirius.tools.api.command.ui.NoUICallback</code>.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.loadAndOpenRepresentationsFile(URI, boolean)</code> has been added to specify if job used to open a session must be considered as launched by the user or not, because by default with
- <code>ModelingProjectManager.loadAndOpenRepresentationsFile(URI)</code> the job was not considered as launched by the user.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable</code> now implements
- <code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code>.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.viewpoint.description.tool.AbstractVariable</code> has been moved to
- <code>org.eclipse.sirius.viewpoint.description.AbstractVariable</code>.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.viewpoint.description.tool.SubVariable</code> has been moved to
- <code>org.eclipse.sirius.viewpoint.description.SubVariable</code>.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.getMainRepresentationsFileURI()</code> methods no more update workspace resource about markers, now this must be done in caller on IllegalArgumentException catch in a workspace aware operation.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand.canExecute()</code> now returns false if a
- <code>DRepresentation</code> cannot be refreshed, by calling
- <code>DialectManager.canRefresh(DRepresentation)</code>.
- </li>
- <li><span class="label label-info">Modified</span> Several methods of
- <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper</code> now return a
- <code>fr.obeo.dsl.viewpoint.DView</code> instead of a
- <code>fr.obeo.dsl.viewpoint.DRepresentationContainer</code>: *
- <code>findContainer(EObject, Viewpoint, Collection<DAnalysis>, DAnalysisSelector)</code>,
- <ul>
- <li>
- <code>findContainerForAddedRepresentation(EObject, Viewpoint, Collection<DAnalysis>, DAnalysisSelector, DRepresentation)</code>,
- </li>
- <li>
- <code>findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code>,
- <code>findFreeContainer(Viewpoint, Collection<DAnalysis>, DAnalysisSelector)</code>
- </li>
- <li>
- <code>findFreeContainer(Viewpoint, Collection<DAnalysis>, DAnalysisSelector)</code>.
- </li>
- </ul>
- </li>
- <li><span class="label label-danger">Removed</span> The
- <code>org.eclipse.sirius.viewpoint.DRepresentationContainer</code> EClass have been removed. It used to be the only implementation of
- <code>org.eclipse.sirius.viewpoint.DView</code>, the
- <code>models</code> derived transient reference has been moved to
- <code>DView</code>. An automatic migration has been added during the loading of the representation to handle this change.
- </li>
- <li><span class="label label-danger">Removed</span> The class
- <code>org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2</code> has been deleted and is now
- <code>MetamodelDescriptorProvider</code>.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.common3">Changes in
- <code>org.eclipse.sirius.common</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> A method
- <code>getInferredVariableTypes(Boolean value)</code> in
- <code>org.eclipse.sirius.common.tools.api.interpreter.ValidationResult</code> so that
- <code>IInterpreter</code> implementations able to infer more specific types based on predicates result provides this information to Sirius which will then use it for validating other expressions. You might want to look at
- <code>org.eclipse.sirius.common.acceleo.aql.business.internal.AQLSiriusInterpreter</code> which is an implementation providing this type inference.
- </li>
- <li><span class="label label-success">Added</span> A helper
- <code>org.eclipse.sirius.common.tools.api.util.MessageTranslator</code> providing
- <code>getMessage(EObject, String)</code> and
- <code>getMessage(Bundle, String)</code> service dedicated into processing a translatable message to return the translation in the active language when available. This service returns the String without modification if not translatable or no translation is available.
- </li>
- <li><span class="label label-success">Added</span> The “INFO” severity has been added to
- <code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterStatus</code> to reflect all kind of language validation severity (of AQL for example).
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram4">Changes in
- <code>org.eclipse.sirius.diagram</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.VariableValue</code>,
- <code>org.eclipse.sirius.diagram.TypedVariableValue</code> and
- <code>org.eclipse.sirius.diagram.EObjectVariableValue</code> has been created.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()</code> has been created to indicate that variables have to be computed again.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.description.style.Side</code> EEnum has been added to define a border node side on the parent.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.description.style.NodeStyleDescription#forbiddenSides</code> attribute has been added to set the border node forbidden sides on the parent.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.business.api.query.DNodeQuery.getForbiddenSide()</code> has been added to retrieve the forbidden sides of a DNode (make sense only for Border Nodes).
- </li>
- <li><span class="label label-info">Modified</span> The type of
- <code>org.eclipse.sirius.diagram.description.filter.VariableFilter.ownedVariable</code> has been changed to
- <code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code>.
- </li>
- <li><span class="label label-info">Modified</span> The type of
- <code>org.eclipse.sirius.diagram.FilterVariableHistory.ownedValues</code> has been changed to
- <code>org.eclipse.sirius.diagram.VariableValue</code>.
- </li>
- <li><span class="label label-info">Modified</span> The return type of
- <code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil.findRepresentationContainer(DDiagram)</code> has been changed from
- <code>org.eclipse.sirius.viewpoint.DRepresentationContainer</code> to
- <code>org.eclipse.sirius.viewpoint.DView</code>.
- </li>
- <li><span class="label label-danger">Removed</span>
- <code>org.eclipse.sirius.diagram.description.filter.FilterVariable</code> has been removed. It is replaced by
- <code>org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable</code>.
- </li>
- <li><span class="label label-danger">Removed</span>
- <code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.setFilterContext()</code> has been removed. This method was, in part, useless and is replaced by
- <code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()</code>.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.ui5">Changes in
- <code>org.eclipse.sirius.ui</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback.askForTypedVariable(List<TypedVariable>, List<String>)</code> has been created.
- </li>
- <li><span class="label label-success">Added</span> The new internationalizable label
- <code>Messages_createRepresentationInputDialog_DefaultRepresentationDescName</code> has been added (available through
- <code>org.eclipse.sirius.ui.tools.api.Messages.createRepresentationInputDialog_DefaultRepresentationDescName</code>. Its value is “Representation”.
- </li>
- <li><span class="label label-info">Modified</span> The internationalizable label
- <code>Messages_createRepresentationInputDialog_NewRepresentationNameLabel</code> has been replaced by “Name:” (previous value was “Representation name:”).
- </li>
- <li><span class="label label-info">Modified</span> The internationalizable label
- <code>Messages_createRepresentationInputDialog_RepresentationDescriptionLabel</code> has been replaced by “Representation description: {0}” (previous value was “Representation description: ”).
- </li>
- <li><span class="label label-info">Modified</span> The internationalizable label
- <code>Messages_createRepresentationInputDialog_Title</code> has been replaced by “New {0}” (previous value was “New Representation”).
- </li>
- <li><span class="label label-danger">Removed</span> The internationalizable label
- <code>org.eclipse.sirius.viewpoint.provider.Messages.OpenRepresentationsFileJob_initModelingProjectsTask</code> has been removed as this message is no more used.
- </li>
- <li><span class="label label-danger">Removed</span> The class
- <code>org.eclipse.sirius.ui.business.api.editor.SpecificSessionManager</code> has been removed.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram.ui5">Changes in
- <code>org.eclipse.sirius.diagram.ui</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> A new system property named
- <code>org.eclipse.sirius.diagram.ui.svg.maxCacheSizeMB</code> has been added. It can be used to tweak the maximum size (in megabytes) of pre-rendered SVG images to keep in cache. The default is 50, corresponding to 50MB of bitmaps of 4 8-bit channels. Increasing the limit can improve performance when using diagrams with a lot of SVG images, at the cost of increased memory usage.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.ITabbarContributor</code> interface has been added to provide a customized tab-bar for a specific selection.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code> is an abstract implementation of
- <code>ITabbarContributor</code> that allows reusing one or several of the default Sirius contribution items.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.editor.properties.sections.style.bundledimagedescription.BundledImageDescriptionShapePropertySectionSpec</code> has been added to have a custom display in the VSM for provided basic shape.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramBorderNodeEditPart.createNodeFigure()</code> has been created to factorize the
- <code>DNode2EditPart</code> and
- <code>DNode4EditPart</code> constructors.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.setForbiddenSides(int...)</code> has been added to set the figure forbidden sides on its parent.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.getAuthorizedSides()</code> has been added to retrieve the figure authorized side (by default all sides).
- </li>
- <li><span class="label label-success">Added</span> The following protected methods have been added to
- <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code> :
- <code>String getKey(Graphics)</code>,
- <code>Image getImage(Rectangle, Graphics)</code>,
- <code>static boolean doRemoveFromCache(String)</code>.
- </li>
- <li><span class="label label-success">Added</span> 2 methods are added in
- <code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService</code> to manage gradient color in export to PNG or SVG formats:
- <code>DiagramEditPartService.saveSVGToFile(IPath, SiriusDiagramSVGGenerator, IProgressMonitor)</code> and
- <code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService.saveToFile(IPath, SiriusDiagramSVGGenerator, ImageFileFormat, IProgressMonitor)</code>. These 2 methods are copy of parent methods with
- <code>SiriusDiagramSVGGenerator</code> as parameter instead of a
- <code>DiagramSVGGenerator</code>.
- </li>
- <li><span class="label label-success">Added</span> The method
- <code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getGradientPaintFromValue(int, int, int, int, Color, Color)</code> has been added to handle a cache for
- <code>java.awt.GradientPaint</code> as it is the case for
- <code>org.eclipse.swt.graphics.Pattern</code> with
- <code>getPatternFromValue()</code>.
- </li>
- <li><span class="label label-success">Added</span> Methods have been added in
- <code>org.eclipse.sirius.diagram.ui.tools.api.figure.GradientHelper</code> to handle
- <code>java.awt.GradientPaint</code> as
- <code>org.eclipse.swt.graphics.Pattern</code>:
- <code>getGradientPaintDiag(Rectangle, Color, Color)</code>,
- <code>getGradientPaintLeftToRight(Rectangle, Color, Color)</code>,
- <code>getGradientPaintTopToBottom(Rectangle, Color, Color)</code> and
- <code>getGradientPaint(int, Rectangle, Color, Color)</code>.
- </li>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ACTION_SIRIUS_COPY_APPEARANCE_PROPERTIES</code> has been added to identify the new
- <em>Sirius Copy Appearence Properties</em> action.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.figure.BundleImageFigure</code> now overrides the method
- <code>setBorder(Border border)</code>. It also provides the accessors for the new field
- <code>mainBorderSize</code>.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.figure.BundledImageFigure</code> now inherits directly from
- <code>SVGFigure</code> instead of
- <code>AbstractCachedSVGFigure</code>.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure</code> now inherits directly from
- <code>SVGFigure</code> instead of
- <code>AbstractCachedSVGFigure</code>.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code> now implements interfaces
- <code>StyledFigure</code>,
- <code>ITransparentFigure</code> and
- <code>ImageFigureWithAlpha</code>.
- </li>
- <li><span class="label label-danger">Removed</span> The following mehtods have been removed from
- <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code>:
- <code>NodeList getNodes(String)</code>,
- <code>Color getColor(Element, String)</code>,
- <code>void updateRenderingHints(Graphics)</code>,
- <code>staticImage toSWT(Device, BufferedImage)</code>,
- <code>boolean checkContentAvailable()</code>,
- <code>Rectangle2D getAreaOfInterest()</code>,
- <code>void setAreaOfInterest(Rectangle2D)</code>,
- <code>boolean isSpecifyCanvasWidth()</code>,
- <code>void setSpecifyCanvasWidth(boolean)</code>,
- <code>boolean isSpecifyCanvasHeight()</code>,
- <code>void setSpecifyCanvasHeight(boolean)</code>,
- <code>boolean getSpecifyCanvasWidth()</code>,
- <code>boolean getSpecifyCanvasHeight()</code>.
- </li>
- <li><span class="label label-danger">Removed</span> The class
- <code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractCachedSVGFigure</code> has been removed. Its functionality was merged directly into
- <code>SVGFigure</code>.
- </li>
- <li><span class="label label-danger">Removed</span> The static
- <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure.createImageFigure(ContainerStyle)</code> method has been removed; it was broken and not called anywhere.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.ext.emf.ui">Changes in
- <code>org.eclipse.sirius.ext.emf.ui</code>
- </h4>
- <ul>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.ext.emf.ui.properties.ExtensiblePropertySource.collector</code> field is now in protected visibility to be modifiable and accessible by subclass.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime2">Changes in
- <code>org.eclipse.sirius.ext.gmf.runtime</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> The interface
- <code>org.eclipse.sirius.ext.gmf.runtime.diagram.ui.tools.MoveInDiagramDragTracker</code> has been added to declare states used by all DragTrackers which manage move in diagram using mouse middle click.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.ui6">Changes in
- <code>org.eclipse.sirius.ui</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span>
- <code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertyDescriptor</code> has been added to provide a specific
- <code>ExtensiblePropertyDescriptor</code> which test
- <code>IPermissionAuthority</code> to make properties view editable or not.
- </li>
- <li><span class="label label-info">Modified</span>
- <code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource</code> has been modified to use
- <code>SiriusExtensiblePropertyDescriptor</code> to provide not editable properties view when the object, selected from the Model Explorer view, cannot be modified.
- </li>
- <li><span class="label label-danger">Removed</span> The
- <code>org.eclipse.sirius.ui</code>, and thus the whole
- <code>org.eclipse.sirius.runtime</code> feature no longer depends on the JDT (technically the dependency towards
- <code>org.eclipse.jdt.core</code> has been removed). If you need the JDT Core in your environment, you will need to add the dependency explicitly. The Sirius specification environment (
- <code>org.eclipse.sirius.editor</code>) still depends on PDE (and thus indirectly the JDT too).
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.tests.junit.support4">Changes in
- <code>org.eclipse.sirius.tests.junit.support</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> The class
- <code>org.eclipse.sirius.tests.support.api.DefaultTestMemento</code> has been created. It help to simulate a real
- <code>IMemento</code> for editor restoration.
- </li>
- <li><span class="label label-success">Added</span> The method
- <code>SiriusTestCase.initViewpoint(String, Session, boolean)</code> has been added to allow viewpoint activation without creating representations.
- </li>
- <li><span class="label label-success">Added</span> The methods
- <code>initLoggers()</code> and
- <code>disposeLoggers()</code> of class
- <code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> have now a protected visibility (instead of private) to allow subclasses to use this logger without all the
- <code>genericSetUp</code> behavior.
- </li>
- <li><span class="label label-warning">Deprecated</span> The method
- <code>SiriusTestCase.initViewpoint(String, Session, EObject)</code> has been deprecated because the last parameter is useless to activate a viewpoint.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support3">Changes in
- <code>org.eclipse.sirius.tests.swtbot.support</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> The method
- <code>getTreeItem(final SWTBotTreeItem[], final String)</code> has been added in
- <code>org.eclipse.sirius.tests.swtbot.support.utils</code> to retrieve recursively a
- <code>SWTBotTreeItem</code> in a
- <code>SWTBotTreeItem</code> array.
- </li>
- <li><span class="label label-success">Added</span> The class
- <code>org.eclipse.sirius.tests.swtbot.support.api.condition.ShellChangedCondition</code> has been added to wait until the current active shell has changed.
- </li>
- <li><span class="label label-success">Added</span> The class
- <code>org.eclipse.sirius.tests.swtbot.support.api.condition.TreeItemWithImageCondition</code> has been added to wait until the given treeItem has the expected image.
- </li>
- <li><span class="label label-info">Modified</span> A second
- <code>String</code> parameter has been added to the method
- <code>org.eclipse.sirius.tests.swtbot.support.api.business.UILocalSession.newDiagramRepresentation(String, String)</code>. This parameter is the label of the representation description. It is necessary since the change of the wizard to ask the new representation name (see User-Visible Changes for detail).
- </li>
- <li><span class="label label-info">Modified</span> A third
- <code>String</code> parameter has been added to the constructor of
- <code>org.eclipse.sirius.tests.swtbot.support.api.business.UINewRepresentationBuilder</code> for the same above reasons.
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.common.xtext">Changes in
- <code>org.eclipse.sirius.common.xtext</code>
- </h4>
- <ul>
- <li><span class="label label-info">Modified</span> The dependency from
- <code>org.eclipse.sirius.common.xtext</code> to the JDT plug-in
- <code>org.eclipse.jdt.core</code> is now optional. If you need the JDT Core in your environment, you will need to add the dependency explicitly. The Sirius specification environment (
- <code>org.eclipse.sirius.editor</code>) still depends on PDE (and thus indirectly the JDT too).
- </li>
- </ul>
- <h4 id="Changesinorg.eclipse.sirius.editor">Changes in
- <code>org.eclipse.sirius.editor</code>
- </h4>
- <ul>
- <li><span class="label label-success">Added</span> The method
- <code>bindCompletionProcessor(AbstractPropertySection, IAssistContentProvider, Text)</code> has been added to the class
- <code>org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider</code> to allow to bind a specific IAssistContentProvider to the text.
- </li>
- </ul>
</body>
</html>
\ No newline at end of file
diff --git a/doc/Release_Notes_Previous.html b/doc/Release_Notes_Previous.html
index 915b8a2..3e9ccd8 100644
--- a/doc/Release_Notes_Previous.html
+++ b/doc/Release_Notes_Previous.html
@@ -13,43 +13,93 @@
<a href="#ReleaseNotesforOlderVersionofSirius">Release Notes for Older Version of Sirius</a>
<ol style="list-style: disc;">
<li>
- <a href="#sirius3.1.0">Changes in Sirius 3.1.0</a>
+ <a href="#sirius4.1.2">Changes in Sirius 4.1.2</a>
<ol style="list-style: disc;">
<li>
<a href="#UserVisibleChanges">User-Visible Changes</a>
</li>
<li>
- <a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
- </li>
- <li>
<a href="#DeveloperVisibleChanges">Developer-Visible Changes</a>
</li>
</ol>
</li>
<li>
- <a href="#sirius3.0.0">Changes in Sirius 3.0.0</a>
+ <a href="#sirius4.1.1">Changes in Sirius 4.1.1</a>
<ol style="list-style: disc;">
<li>
<a href="#UserVisibleChanges2">User-Visible Changes</a>
</li>
<li>
- <a href="#SpecifierVisibleChanges2">Specifier-Visible Changes</a>
- </li>
- <li>
<a href="#DeveloperVisibleChanges2">Developer-Visible Changes</a>
</li>
</ol>
</li>
<li>
- <a href="#sirius2.0.0">Changes in Sirius 2.0.0</a>
+ <a href="#sirius4.1.0">Changes in Sirius 4.1.0</a>
<ol style="list-style: disc;">
<li>
<a href="#UserVisibleChanges3">User-Visible Changes</a>
</li>
<li>
+ <a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#DeveloperVisibleChanges3">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius4.0.0">Changes in Sirius 4.0.0</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges4">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#SpecifierVisibleChanges2">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#DeveloperVisibleChanges4">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius3.1.0">Changes in Sirius 3.1.0</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges5">User-Visible Changes</a>
+ </li>
+ <li>
<a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
</li>
<li>
+ <a href="#DeveloperVisibleChanges5">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius3.0.0">Changes in Sirius 3.0.0</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges6">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#DeveloperVisibleChanges6">Developer-Visible Changes</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#sirius2.0.0">Changes in Sirius 2.0.0</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#UserVisibleChanges7">User-Visible Changes</a>
+ </li>
+ <li>
+ <a href="#SpecifierVisibleChanges5">Specifier-Visible Changes</a>
+ </li>
+ <li>
<a href="#APIChanges">API Changes</a>
</li>
</ol>
@@ -58,10 +108,10 @@
<a href="#sirius1.0.0">Changes in Sirius 1.0.0 (from Sirius 1.0.0M7)</a>
<ol style="list-style: disc;">
<li>
- <a href="#UserVisibleChanges4">User-Visible Changes</a>
+ <a href="#UserVisibleChanges8">User-Visible Changes</a>
</li>
<li>
- <a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
+ <a href="#SpecifierVisibleChanges6">Specifier-Visible Changes</a>
</li>
<li>
<a href="#APIChanges2">API Changes</a>
@@ -72,7 +122,7 @@
<a href="#sirius1.0M7">Changes in Sirius 1.0.0M7 (from Sirius 1.0M6)</a>
<ol style="list-style: disc;">
<li>
- <a href="#SpecifierVisibleChanges5">Specifier-Visible Changes</a>
+ <a href="#SpecifierVisibleChanges7">Specifier-Visible Changes</a>
</li>
<li>
<a href="#APIChanges3">API Changes</a>
@@ -91,7 +141,7 @@
<a href="#sirius1.0M5">Changes in Sirius 1.0.0M5 (from Sirius 1.0M4)</a>
<ol style="list-style: disc;">
<li>
- <a href="#UserVisibleChanges5">User-Visible Changes</a>
+ <a href="#UserVisibleChanges9">User-Visible Changes</a>
</li>
<li>
<a href="#APIChanges5">API Changes</a>
@@ -102,7 +152,7 @@
<a href="#sirius1.0M4">Changes in Sirius 1.0.0M4 (from Sirius 0.9)</a>
<ol style="list-style: disc;">
<li>
- <a href="#UserVisibleChanges6">User-Visible Changes</a>
+ <a href="#UserVisibleChanges10">User-Visible Changes</a>
</li>
<li>
<a href="#APIChanges6">API Changes</a>
@@ -128,10 +178,10 @@
<a href="#OtherAPIChanges">Other API Changes</a>
</li>
<li>
- <a href="#SpecifierVisibleChanges6">Specifier-Visible Changes</a>
+ <a href="#SpecifierVisibleChanges8">Specifier-Visible Changes</a>
</li>
<li>
- <a href="#UserVisibleChanges7">User-Visible Changes</a>
+ <a href="#UserVisibleChanges11">User-Visible Changes</a>
</li>
</ol>
</li>
@@ -139,9 +189,1067 @@
</li>
</ol>
<p>This document contains the release notes for older versions of of Sirius.</p>
- <h2 id="sirius3.1.0">Changes in Sirius 3.1.0</h2>
+ <h2 id="sirius4.1.2">Changes in Sirius 4.1.2</h2>
<h3 id="UserVisibleChanges">User-Visible Changes</h3>
<ul>
+ <li><span class="label label-success">Added</span> A new preference named
+ <em>Maximum size of tabs name</em> is available in the Sirius Properties View preference page. This preference is used to shorten the tabs names when the default rules are used to render the properties view.
+ </li>
+ </ul>
+ <p>
+ <img border="0" src="./images/PreferencePageMaxTabName.png"/>
+ </p>
+ <h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> class has been added to handle copy/paste format with mapping information when an element target of a format pasting has many source diagram format corresponding to its key. In this case, we use the mapping information to get the more precise data format. And if no result matched, then we return the first found by using the key.
+ </li>
+ </ul>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.getFormatData(FormatDataKey, RepresentationElementMapping)</code> method has been added to retrieve during format pasting the data format corresponding to the given key and mapping when more than one result correspond to the key. If no result matches the mapping, then the first result found by using the key is returned.
+ </li>
+ </ul>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> method has been added to allow data format manager to register data format with mapping information when copying format.
+ </li>
+ </ul>
+ <ul>
+ <li><span class="label label-success">Deprecated</span></li>
+ </ul>
+ <p>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager.getFormatData(FormatDataKey)</code> It is replaced by
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.getFormatData(FormatDataKey, RepresentationElementMapping)</code> to better handle copy/paste format cases.
+ </p>
+ <ul>
+ <li><span class="label label-success">Deprecated</span></li>
+ </ul>
+ <p>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager.addFormatData(FormatDataKey, AbstractFormatData)</code> It is replaced by
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> to better handle copy/paste format cases.
+ </p>
+ <h2 id="sirius4.1.1">Changes in Sirius 4.1.1</h2>
+ <h3 id="UserVisibleChanges2">User-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-info">Modified</span>The “straighten to” actions were previously disabled when an edge is connected to border nodes that have several edges. It is now allowed.</li>
+ </ul>
+ <h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.table.business.api.helper.TableHelper.getEStructuralFeature(DLine, DColumn)</code> method has been added to retrieve the EStructuralFeature associated to a table column.
+ </li>
+ </ul>
+ <h2 id="sirius4.1.0">Changes in Sirius 4.1.0</h2>
+ <h3 id="UserVisibleChanges3">User-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> Copy/Paste Layout has been completed with Copy/Paste Style and Copy/Paste Format.
+ <em>Paste Format</em> is equivalent to paste
+ <em>Layout</em> and
+ <em>Style</em> action. See chapter
+ <a href="./user/diagrams/Diagrams.html#copy_paste_format">
+ <em>Copy/paste of format</em>
+ </a> in
+ <em>User Manual</em> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> The
+ <a href="./user/diagrams/Diagrams.html#snap_to_shapes">snap to shape</a> feature is now available on border nodes.
+ </li>
+ <li><span class="label label-success">Added</span> It is now possible to display an attachment link between an edge and its labels when label or edge is selected. This is not the default behavior but it can be activated by a preference in
+ <em>Sirius/Sirius Diagram/Connections</em> preference page. See chapter
+ <a href="./user/diagrams/Diagrams.html#edge_label_attachment">
+ <em>Display attachment link between edge and its labels</em>
+ </a> in
+ <em>User Manual</em> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> It is now possible to straighten an edge to top, bottom, left or right. These actions are available on edge contextual menu
+ <em>Layout/Straighten</em>. See chapter
+ <a href="./user/diagrams/Diagrams.html#straighten_an_edge">
+ <em>Straighten an edge</em>
+ </a> in
+ <em>User Manual</em> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> It is now possible to disable the
+ <em>Default</em> and
+ <em>Semantic</em> properties tabs (visible when selecting and element from the
+ <em>Model Explorer</em> or from a Sirius editor, respectively) when using modelers which provide fully-functional replacements defined directly with Sirius. This is controled in the new
+ <em>Sirius > Sirius Properties View</em> preference page.
+ </li>
+ <li><span class="label label-success">Added</span> Sirius-defined properties view are now enabled for semantic elements selected directly from inside the
+ <em>Model Explorer</em> (as long as the selected element is from inside an open Sirius session/project). Previously only elements selected from inside a Sirius editor were supported.
+ </li>
+ <li><span class="label label-info">Modified</span> In the Sirius-provided
+ <em>Properties View</em>, the edition of a text field is only taken into account when pressing
+ <em>Enter</em> or leaving the field. Previously it was triggered asynchronously after a small delay without activity, which could be confusing.
+ </li>
+ <li><span class="label label-info">Modified</span> When trying to open a session which holds a representation resource or a VSP which was saved using a more recent version of Sirius than the one you are using, the session will be automatically closed displaying an error message. You can overload this behavior by providing you own implementation of
+ <code>UICallBack</code> in which you can have an UI feedback letting you choose if you want to open the session anyway. Warning: if you choose to proceed, there is no guarantee that the resulting session will be usable. It may even lead to data loss or corruption; use at your own risk.
+ </li>
+ </ul>
+ <p>If a viewpoint has been defined with a more recent version of Sirius than the one you are using, the
+ <code>ViewpointRegistry</code> will not register it and a warning is logged in the error log view to inform the user.
+ </p>
+ <ul>
+ <li><span class="label label-info">Modified</span> The
+ <a href="./user/diagrams/Diagrams.html#move_edge_group">move edge group</a> feature now also work for a selection of edge group.
+ </li>
+ <li><span class="label label-info">Modified</span> In a diagram editor, the zoom with mouse wheel is now zooming on mouse location instead of center of the editor. See
+ <a href="./user/diagrams/Diagrams.html#zooming_diagram_id">user documentation</a> .
+ </li>
+ <li><span class="label label-info">Modified</span> The direct edit on a Note or Text is now accessible by a slow double click like any other diagram element.</li>
+ <li><span class="label label-info">Modified</span> The shortcut
+ <em>Ctrl+&</em>, for
+ <a href="./user/diagrams/Diagrams.html#reset_origin">
+ <em>Reset Origin</em>
+ </a> action, has been replaced by
+ <em>Ctrl+HOME</em>.
+ </li>
+ </ul>
+ <h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> It is now possible to inline a copy of the default Properties Views model inside the VSM. This is a copy of the model Sirius would use if no
+ <em>Properties View Description</em> was specified. It can be used as a starting point for manual customization, or as a complement for elements for which you do not provide any custom rules.
+ </li>
+ <li><span class="label label-success">Added</span> In the definition of the Properties view, hyperlink and label widgets can now have widget actions.</li>
+ <li><span class="label label-success">Added</span> Hyperlink and label widgets now have a
+ <code>displayExpression</code>, if blank the result of the value expression will be used after a call to the method
+ <code>java.lang.Object#toString()</code>.
+ </li>
+ <li><span class="label label-success">Added</span> Hyperlink and label widgets now support optional associated actions (visible as buttons on the right of the widget).</li>
+ <li><span class="label label-success">Added</span> A new widget named List with the same behavior as the multiple reference widget.</li>
+ <li><span class="label label-success">Added</span>
+ <em>Page</em> and
+ <em>Group</em> descriptions in
+ <em>Properties View</em> models now support a
+ <code>preconditionExpression</code>, which behaves in the same way as preconditions for mappings on representation descriptions.
+ </li>
+ <li><span class="label label-info">Modified</span> The rules concerning the layout of compartments have been changed/completed. You can have a look at the
+ <a href="specifier/diagrams/Diagrams.html#compartments_layout">dedicated chapter</a> in the specifier documentation for more details.
+ </li>
+ <li><span class="label label-info">Modified</span> In the VSM editor, all dialogs which ask for selecting elements from the VSM will now show the fully qualified path of each element, instead of just their name, to allow distinguishing elements with the same name appearing in different places.</li>
+ <li><span class="label label-info">Modified</span> The properties
+ <code>fontSize</code> and
+ <code>labelFontSize</code> have been renamed into
+ <code>fontSizeExpression</code> and
+ <code>labelFontSizeExpression</code> since both of them were already treated as expression.
+ </li>
+ <li><span class="label label-info">Modified</span> In the VSM editor, the
+ <em>Identifier</em> attribute of many
+ <em>Prroperties View</em> related elements has been moved into the
+ <em>Advanced</em> tab and renamed
+ <em>Extension Id</em>, as it is not actually required on common use cases but only for extensibility purposes.
+ </li>
+ <li><span class="label label-info">Modified</span> The property
+ <code>Domain Class Expression</code> in
+ <code>DynamicMappingFor</code> elements (in properties views definitions) has been renamed into
+ <code>Iterable Expression</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <em>Properties View</em> widget which was named
+ <em>Reference</em> in Sirius 4.0 has been renamed as
+ <em>List</em>, as it corresponds to an arbitrary list of elements with customizable buttons for acting on them. A new
+ <em>Reference</em> widget was added for handling plain
+ <em>EReference</em> edition with minimal configuration needed.
+ </li>
+ <li><span class="label label-info">Modified</span> When opening a VSM, the editor now automatically expands the first few levels to immediatly reveal the interesting elements (representation descriptions).</li>
+ <li><span class="label label-warning">Deprecated</span> The extension point
+ <code>org.eclipse.sirius.diagram.ui.layoutDataManager</code> is deprecated. It is replaced by the new extension point
+ <code>org.eclipse.sirius.diagram.ui.formatDataManager</code>. The deprecated extension point will be removed in the next 5.0 Sirius major release. Several classes associated with this deprecated extension point are also deprecated (see Developer-Visible Changes for details).
+ </li>
+ </ul>
+ <h3 id="DeveloperVisibleChanges3">Developer-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> As the first step to save the DRepresentation in its own resource,
+ <code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()</code> has been added as a wrapper of the
+ <code>DRepresentation</code>. The
+ <code>DRepresentationDescriptor</code> is contained by the
+ <code>DView</code> and the
+ <code>DRepresentationDescriptor</code> have a reference to the
+ <code>DRepresentation</code>. In this step, the main impact is that the Sirius common navigator does not display the
+ <code>DRepresentation</code> anymore but the
+ <code>DRepresentationDescriptor</code> instead. All the actions and commands are then based on
+ <code>DRepresentationDescriptor</code>.
+ </li>
+ <li><span class="label label-success">Added</span> As the second step to save the DRepresentation in its own resource,
+ <code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentations()</code> has been removed. The
+ <code>DRepresentation</code> is now created as root element of the representations resource. The main impact is on the core of Sirius but also potentially on client Sirius customization. Each peace of code that makes the supposition that the
+ <code>DView</code> is the container of the
+ <code>DRepresentation</code> must be reworked. The code using methods in the following list may be concerned by the rework:
+ <ul>
+ <li>
+ <code>EObject.eContainer()</code>. If the object is a
+ <code>DRepresentation</code>, its container is now null.
+ </li>
+ <li>
+ <code>EcoreUtil.getRootContainer(xxx)</code>. The root container of a DDiagramElement is the
+ <code>DRepresentation</code> and not the
+ <code>DAnalysis</code> any more.
+ </li>
+ <li>
+ <code>EcoreUtil.isAncestor(xxx)</code>. the
+ <code>DView</code> is not an ancestor of a
+ <code>DRepresentation</code> (or its content) anymore.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span> As a developer, the followings utility methods will help you to migrate your code following the second step described above:
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.business.api.query.DViewQuery.getLoadedRepresentations()</code> replaces the removed
+ <code>DView.getOwnedRepresentations()</code> method. It provides all the loaded representations holds by a
+ <code>DView</code>. In this step, all that representations are always loaded as they are into the .aird resource.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.query.DViewQuery.getAllContentInRepresentations(final Predicate<? super EObject>)</code> provides the content of a
+ <code>DView</code> according to a predicate.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()</code> provides the
+ <code>DRepresentationDescriptor</code> which references the
+ <code>DRepresentation</code>.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()</code> allows to retrieve a DAnalysis from a
+ <code>DRepresentationElement</code>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> A new extension point named
+ <code>org.eclipse.sirius.interpretedExpressionQueryProvider</code> (with the associated new interface
+ <code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionQueryProvider</code>) allows external contribution of
+ <code>IInterpretedExpressionQuery</code> specific to some particular expression occurrences in the VSM. This is used in particular for VSM extensions which do not fit well into the hard-coded assumptions about
+ <code>IInterpretedExpressionQuery</code>. In Sirius 4.1, this is used to add completion and validation support for expressions used in properties views descriptions.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.migration.AirdResourceVersionMismatchException</code> exception has been added to cancel Sirius session opening due to an .aird version mismatch, i.e. when one the of the loaded Representation resources is coming from a newer Sirius release.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()</code> has been added as the first step to save the DRepresentation in its own resource. In this step, the DRepresentationDescriptor life cycle is the same as the associated DRepresentation.
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.business.api.dialect.command.RenameRepresentationCommand</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.dialect.command.DeleteRepresentationCommand</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.business.api.dialect.command.CopyRepresentationCommand</code>
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>getAvailableRepresentationDescriptions(Collection<Viewpoint>, EObject)</code>,
+ <code>getAllRepresentationDescriptors(Session )</code>,
+ <code>getRepresentationDescriptors(EObject, Session)</code> and
+ <code>getRepresentationDescriptors(RepresentationDescription, Session )</code> have been added in
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices</code> and implemented in
+ <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices</code>. These methods are used, instead of their equivalent with DRepresentation, for every functionality which relies on
+ <code>DRepresentationDescriptor</code> instead of
+ <code>DRepresentation</code> such as actions, wizards or views.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isSupported(DRepresentationDescriptor)</code> has been added because actions, wizards or views that were related to
+ <code>DRepresentation</code> are now related to
+ <code>DRepresentationDescriptor</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.canHandle(DRepresentationDescriptor)</code> has been added because actions, wizards or views that were related to
+ <code>DRepresentation</code> are now related to
+ <code>DRepresentationDescriptor</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIManager.canExport(DRepresentationDescriptor, ExportFormat)</code> has been added because actions, wizards or views that were related to
+ <code>DRepresentation</code> are now related to
+ <code>DRepresentationDescriptor</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()</code> has been added to retrieve the
+ <code>DRepresentationDescriptor</code> that references the
+ <code>DRepresentation</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR_FROM_DESCRIPTION</code> and
+ <code>org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR</code> have been added. They are used to get or put
+ <code>DRepresentationDescriptor</code> in the model managed by the
+ <code>Session</code> through the
+ <code>org.eclipse.sirius.business.api.session.SessionService.putCustomData(String, EObject, EObject)</code> and
+ <code>SessionService.getCustomData(String, EObject)</code> methods.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()</code> has been added to retrieve a DAnalysis from a
+ <code>DRepresentationElement</code>
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code> has been changed to
+ <code>findDViewForRepresentationDescription(DAnalysis , final RepresentationDescription)</code> because that API was previously badly defined.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.deleteRepresentation(DRepresentation, Session)</code> has been changed to
+ <code>deleteRepresentation(DRepresentationDescriptor, Session)</code> because now the
+ <code>DRepresentationDescriptor</code> is the entry point to delete the
+ <code>DRepresentation</code> and itself.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>DRepresentationDescriptor</code> is now the entry point to move, control or uncontrol a
+ <code>DRepresentation</code> instead of the
+ <code>DRepresentation</code> itself. Accordingly, the return type or parameter of the followings have changed to switch from
+ <code>DRepresentation</code> to
+ <code>DRepresentationDescriptor</code>
+ <ul>
+ <li>constructors of
+ <code>org.eclipse.sirius.business.api.control.SiriusControlCommand</code>
+ </li>
+ <li>the constructor
+ <code>org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand.MoveRepresentationCommand(Session, DAnalysis, Collection<DRepresentationDescriptor>)</code>
+ </li>
+ <li>the method
+ <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSession.moveRepresentation(DAnalysis, DRepresentationDescriptor)</code>
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.updateModelsReferences(DView)</code> has replaced
+ <code>updateModelsReferences(DAnalysis, Iterator<DSemanticDecorator>)</code> because it is more suited to the client needs.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.ui.business.api.dialect.HierarchyLabelProvider</code> has been added to provide a generic label provider for VSM model element giving hierarchical label. This label provider replaces the one returned by deprecated method
+ <code>DialectUIServices.getHierarchyLabelProvider()</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>AbstractSWTCallback</code> provides a default implementation of
+ <code>UICallBack.askSessionReopeningWithResourceVersionMismatch()</code> method to give feedback about version mismatch and give the choice to reopen session despite a potential corruption.
+ </li>
+ <li><span class="label label-info">Modified</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.control.SiriusControlHandler.getRepresentationsToMove(Shell, Session, EObject)</code> and
+ <code>SiriusControlHandler.collectExistingRepresentations</code> have been renamed to
+ <code>getRepresentationDescriptorsToMove(Shell, Session, EObject)</code> and
+ <code>SiriusControlHandler.collectExistingRepresentationDescriptors</code>. The return type of both that methods and
+ <code>SiriusControlHandler.askUserWhichRepresentationToSplit</code> has been changed to
+ <code>DRepresentationDescriptor</code> as
+ <code>DRepresentationDescriptor</code> is the entry point to work with a
+ <code>DRepresentation</code> instead of DRepresentation itself.
+ </li>
+ <li><span class="label label-warning">Deprecated</span> The method
+ <code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.getHierarchyLabelProvider()</code> has been deprecated in favor of generic label provider
+ <code>HierarchyLabelProvider</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram">Changes in
+ <code>org.eclipse.sirius.diagram</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.allowsCopyPasteFormat(DSemanticDecorator)</code> has been added in replacement of
+ <code>allowsCopyPasteLayout(DSemanticDecorator)</code> that is now deprecated. This 2 methods must return the same result.
+ <code>allowsCopyPasteLayout(DSemanticDecorator)</code> will be removed in the new major version.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The constant
+ <code>EDGE_SNAP_BACK</code> has been added in class
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>. It corresponds to the new snap back label action id that is present on edges.
+ </li>
+ <li><span class="label label-success">Added</span> 2 methods are added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager</code> (and also in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager</code>):
+ <ul>
+ <li>
+ <code>applyFormat(IGraphicalEditPart)</code>: Apply the current format data (layout data and style data) to the given edit part.
+ </li>
+ <li>
+ <code>applyStyle(IGraphicalEditPart)</code>: Apply the current style data to the give edit part.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span> 2 methods are added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code>:
+ <ul>
+ <li>
+ <code>createCopyFormatContribution(IDiagramWorkbenchPart)</code>: In replacement of
+ <code>createCopyLayoutContribution(IDiagramWorkbenchPart)</code> that is now deprecated.
+ </li>
+ <li>
+ <code>createPasteFormatContribution(IDiagramWorkbenchPart)</code>: In replacement of
+ <code>createPasteLayoutContribution(IDiagramWorkbenchPart)</code> that is now deprecated.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span> New action ids have been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>:
+ <ul>
+ <li>
+ <code>COPY_FORMAT</code>: Action contribution id for the copy format. It replaces the old
+ <code>COPY_LAYOUT</code>.
+ </li>
+ <li>
+ <code>PASTE_FORMAT</code>: Action contribution id for the paste format. It does not replace the old
+ <code>PASTE_LAYOUT</code>. The paste format paste the layout and the style. The paste layout only paste layout.
+ </li>
+ <li>
+ <code>PASTE_STYLE</code>: Action contribution id for the paste style.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.business.api.query.NodeQuery.isDescendantOf(View)</code> has been added to know if a view is a descendant of another view.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery.getAncestor(int...)</code> has been added to retrieve the first ancestor of the view, or itself, that has at least one of the visualID passed as parameter.
+ </li>
+ <li><span class="label label-success">Added</span> The new preference key
+ <code>PREF_SHOW_LINK_EDGE_LABEL_ON_SELECTION</code> has been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>. It corresponds to the preference shown in
+ <em>Sirius/Sirius Diagram/Connections</em> Eclipse preferences.
+ </li>
+ <li><span class="label label-success">Added</span> The new figure
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SiriusWrapLabelWithAttachment</code> is a specific
+ <code>SiriusWrapLabel</code> that allows to show an attachment between the label and its edge.
+ </li>
+ <li><span class="label label-success">Added</span> A new kind of request,
+ <code>org.eclipse.sirius.diagram.ui.tools.api.requests.StraightenToRequest</code>, has been added to handle the new
+ <em>Straighten to</em> actions. The corresponding id has also been added:
+ <code>org.eclipse.sirius.diagram.ui.tools.api.requests.RequestConstants.REQ_STRAIGHTEN</code>.
+ </li>
+ <li><span class="label label-success">Added</span> 4 action ids have been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>:
+ <ul>
+ <li>
+ <code>STRAIGHTEN_TO_TOP</code>: For
+ <em>Straighten to top</em> action,
+ </li>
+ <li>
+ <code>STRAIGHTEN_TO_BOTTOM</code>: For
+ <em>Straighten to bottom</em> action,
+ </li>
+ <li>
+ <code>STRAIGHTEN_TO_LEFT</code>: For
+ <em>Straighten to left</em> action,
+ </li>
+ <li>
+ <code>STRAIGHTEN_TO_RIGHT</code>: For
+ <em>Straighten to right</em> action.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-success">Added</span> Constants have been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath</code> for the icon path of the four new straighten actions.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager</code> is deprecated, use
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.AbstractSiriusFormatDataManager</code> instead.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.ILayoutDataManagerProvider</code> is deprecated, use
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.IFormatDataManagerProvider</code> instead.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataHelper</code> is deprecated, use
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataHelper</code> instead.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataKey</code> is deprecated, use
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataKey</code> instead.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager</code> is deprecated, use
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> instead.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManagerForSemanticElementsFactory</code> is deprecated, use
+ <code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerForSemanticElementsFactory</code> instead.
+ </li>
+ <li><span class="label label-info">Moved</span> The translation key
+ <code>HierarchyLabelProvider_elementWihtoutNameLabel</code> has been removed from the
+ <code>org.eclipse.sirius.diagram.ui</code> plug-in’s
+ <code>Messages</code> class, and moved into the
+ <code>org.eclipse.sirius.ui</code>'s
+ <code>Messages</code> class.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime">Changes in
+ <code>org.eclipse.sirius.ext.gmf.runtime</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The class
+ <code>SiriusSnapFeedbackPolicy</code> has been copied from
+ <code>org.eclipse.sirius.ext.gef.editpolicies</code> to
+ <code>org.eclipse.sirius.ext.gmf.runtime.editpolicies</code>. The old class in plug-in
+ <code>org.eclipse.sirius.ext.gef</code> is deprecated and will be removed in the next version.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in
+ <code>org.eclipse.sirius.tests.junit.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The utility methods
+ <code>getRepresentationDescriptors(final String)</code>,
+ <code>getRepresentationDescriptors(final String , final Session )</code> and
+ <code>getRepresentationDescriptorFromRepresentation(DRepresentation)</code> have been added in class
+ <code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> to adapt tests considering the
+ <code>DView.ownedRepresentationDescriptors</code> addition.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support">Changes in
+ <code>org.eclipse.sirius.tests.swtbot.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The utility method
+ <code>mouseScrollWithKey(int, int, int, int)</code>, has been added in classes
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor</code>,
+ <code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer</code> and
+ <code>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas</code> to allow testing events occurring after a mouse scroll combined to a keyboard key pressed at a given absolute position.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.properties">Changes in
+ <code>org.eclipse.sirius.properties</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span> The property
+ <code>domainClassExpression</code> has been renamed into
+ <code>iterableExpression</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The properties
+ <code>fontSize</code> and
+ <code>labelFontSize</code> have been renamed into
+ <code>fontSizeExpression</code> and
+ <code>labelFontSizeExpression</code> since both of them were already treated as expression.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui.properties">Changes in
+ <code>org.eclipse.sirius.ui.properties</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> Four utility classes have been added as API in the package
+ <code>org.eclipse.sirius.ui.properties.api</code> in order to help with the transformation of the description of custom widgets. The class
+ <code>AbstractDescriptionConverter</code> can now be used as superclass for all the converters. The classes
+ <code>DefautDescriptionConverter</code>,
+ <code>DefautStyleDescriptionConverter</code> and
+ <code>DefautDescriptionWithInitialOperationConverter</code>, now accessible, should handle most of the use cases.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ecore.extender">Changes in
+ <code>org.eclipse.sirius.ecore.extender</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span> The message
+ <code>org.eclipse.sirius.ecore.extender.business.api.permission.exception.LockedInstanceException.PERMISSION_ISSUE_MESSAGE</code> has been modified. You should now use the
+ <code>MessageFormat</code>. Example:
+ <code>LockedInstanceException.PERMISSION_ISSUE_MESSAGE + getText(lockedElements)</code> must be replaced by
+ <code>MessageFormat.format(LockedInstanceException.PERMISSION_ISSUE_MESSAGE, getText(lockedElements))</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessorsRegistry</code> has been refactored to avoid problem with
+ <code>ModelAccessor</code> lifecycle. The constructor has no longer a parameter.
+ </li>
+ </ul>
+ <h2 id="sirius4.0.0">Changes in Sirius 4.0.0</h2>
+ <h3 id="UserVisibleChanges4">User-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> The user can now filter elements according to a Typed variable (String, Integer, EEnum or any EDataType). If a user applies a filter containing Typed Variables, a dialog is displayed to allow user entering the Typed Variable values. That values can be used as variables in the Condition Expression of the Variable Filter.</li>
+ <li><span class="label label-success">Added</span> When the diagram is larger than the editor, you can move it in all directions pressing the middle-button and dragging the mouse (keeping the button pressed).</li>
+ <li><span class="label label-info">Modified</span> Now if an object is locked and cannot be modified according to
+ <code>IPermissionAuthority</code>, the properties view will not be editable if this locked object is selected from the Model Explorer view.
+ </li>
+ <li><span class="label label-info">Modified</span> When trying to reconnect an edge end on another edge, the edge is now highlighted only if a reconnect tool is found (the precondition of the tool is not tested here).</li>
+ <li><span class="label label-info">Modified</span> List items now have the same margin whichever their parent is a simple list or a compartmentalized list. The margin in compartmentalized list was incorrectly set to 0 pixel.</li>
+ <li><span class="label label-info">Modified</span> The wizard to ask the new representation name has been changed. These concerns the title of the wizard and the input label. Example with a new Entities diagram for EcoreTools:</li>
+ </ul>
+ <p>
+ <img border="0" src="images/representationNameWizardChange.png"/>
+ </p>
+ <ul>
+ <li><span class="label label-info">Modified</span> The export of diagram as image handles the gradient color for container background for BMP, JPG, PNG and SVG formats. Before, it only works for JPG format.</li>
+ <li><span class="label label-info">Modified</span> The <img src="images/ApplyAppearanceProperties.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>
+ <code>Apply Appearance Properties</code> action has been modified to use the last selected element as base style instead of the first one.
+ </li>
+ </ul>
+ <h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> Sirius 4.0 introduces
+ <strong>experimental</strong> support for specifying the properties views of your modelers directly from inside the VSM. This feature uses the same dynamic approach as for specifying diagrams, tables and trees, with a very flexible configuration language and no code generation involved (including live preview of any change). As of Sirius 4.0, this feature should be considered in an experimental state with details subject to changes until Sirius 4.1, and is not installed by default. To install it, make sure either
+ <a href="http://download.eclipse.org/releases/neon">the Eclipse Neon repositry</a> or the
+ <a href="http://download.eclipse.org/sirius/updates/releases/4.0.0/neon">Sirius 4.0</a> and
+ <a href="http://download.eclipse.org/modeling/emft/eef/updates/releases/1.6.0">EEF 1.6</a> repositories are available, and then to install the following features (from in the
+ <em>Modeling</em> category of Neon, or
+ <em>Sirius Experimental Features</em> of the Sirius repository ):
+ <ul>
+ <li>
+ <em>Sirius Properties Views – Runtime Support</em> (
+ <code>org.eclipse.sirius.properties.feature.feature.group</code>): needed at runtime for deployed modelers which have properties views defined in their specification.
+ </li>
+ <li>
+ <em>Sirius Properties Views – Specifier Support</em> (
+ <code>org.eclipse.sirius.specifier.properties.feature.feature.group</code>): provides support for editing the configuration model directly inside the VSM editor and the specifier documentation.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <p>Once this is done, you can find the actual documentation in the
+ <em>Sirius Specifier Manual</em>, under the
+ <a href="specifier/properties/Properties_View_Description.html">
+ <em>Properties View</em>
+ </a> section.
+ </p>
+ <ul>
+ <li><span class="label label-success">Added</span> All static strings defined in the VSMs which are visible to the end-user of the modeler, like viewpoint and tools names, can now be internationalized. Simply replace the name with a translation key reference of the form
+ <code>%myUniqueKey</code> in the VSM, and define the value in the
+ <em>Viewpoint Specification Project</em>'s
+ <code>plugin.properties</code> (for the default value), or
+ <code>plugin_XX.properties</code> for locale
+ <code>XX</code>. The underlying mechanism is the same as for Eclipse/OSGi plug-ins, so translations can even be contributed by physically separate plug-in fragments. See
+ <a href="specifier/general/Specifying_Viewpoints.html#translatable_messages">the corresponding section</a> in the documentation for more details.
+ </li>
+ <li><span class="label label-success">Added</span> It is possible to create
+ <a href="specifier/diagrams/Diagrams.html#filter_with_typed_variable">Typed Variable</a> under Variable Filter.
+ </li>
+ <li><span class="label label-success">Added</span> A new class
+ <code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices</code> (from plug-in
+ <code>org.eclipse.sirius.ext.emf.edit</code>) has been added with a complete set of service methods to leverage most of the features of the “EMF Edit” framework, for example the various
+ <em>Item Providers</em> associated to semantic elements. See
+ <a href="specifier/general/Writing_Queries.html#editing_domain_services">the documentation</a> for details.
+ </li>
+ <li><span class="label label-success">Added</span> The specifier can now restrict the border node authorized sides. This new option is available in the advanced tab of the border node style. See the
+ <a href="specifier/diagrams/Diagrams.html#authorizedsides">specifier documentation</a> for more details.
+ </li>
+ <li><span class="label label-info">Modified</span> The use of type literals in operations like
+ <code>filter()</code> or
+ <code>oclIsKindOf()</code> requires to explicitly add the domain meta-models plug-ins to the dependencies of the
+ <em>Viewpoint Specification Project</em>. The documentation has been modified to recommend this.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <strong>Warning</strong>: Before this version, a style customization of an
+ <code>EEnum</code> attribute, like
+ <code>labelFormat</code>, worked with a value expression using a Java service returning a
+ <code>EEnumLiteral</code>. It is now forbidden. You must return an
+ <code>Enumerator</code>. The documentation about
+ <a href="specifier/diagrams/Diagrams.html#enum_customization">Styles Customization</a> now details this case.
+ </li>
+ <li><span class="label label-info">Modified</span> The
+ <code>BorderSizeComputationExpression</code> migration has been corrected to recursively handle the sub container mappings. VSM created or migrated with Sirius 3.1.0, 3.1.1 or 3.1.2 might require a manual modification for the style descriptions of sub container mappings with border size computation equals to 0 as we cannot determine if they were added (or updated) after or before the migration: starting with Sirius 3.1.0, no border will be displayed for a 0 pixel value whereas with older version container always had at least a 1 pixel border.
+ </li>
+ <li><span class="label label-info">Modified</span> The variable under VariableFilter, previously named “Variable”, is renamed to “Select Model Element Variable”. It is functionally equivalent.</li>
+ </ul>
+ <h3 id="DeveloperVisibleChanges4">Developer-Visible Changes</h3>
+ <ul>
+ <li><span class="label label-success">Added</span> It is now possible to provide a full customized tab-bar by implementing the
+ <code>ITabbarContributor</code> through the
+ <code>org.eclipse.sirius.diagram.ui.tabbarContributor</code> extension-point. See the
+ <a href="developer/extensions-provide_tabbar_extensions.html#contributeFullTabbar">developer documentation</a> for more details.
+ </li>
+ <li><span class="label label-success">Added</span> It is now possible to provide new shapes for basic shape styles through the
+ <code>org.eclipse.sirius.diagram.bundledImageShape</code> extension-point. See the
+ <a href="developer/extensions-provide_custom_bundled_image_shape.html">developer documentation</a> for more details.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius2">Changes in
+ <code>org.eclipse.sirius</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getStatus()</code> has been added to have the status about session opening, i.e. if it has been correctly opened, cancelled or an exception has occurred.
+ </li>
+ <li><span class="label label-success">Added</span> A new variant of
+ <code>org.eclipse.sirius.business.api.helper.task.TaskHelper.buildTaskFromModelOperation(EObject, ModelOperation)</code> has been added, which does not require to specify a
+ <code>DRepresentation</code> in the context. It allows the creation of a task which executes a behavior specified by
+ <code>ModelOperations</code> outside of the context of a specific representation, provided the
+ <code>ModelOperations</code> work in that context.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.viewpoint.description.TypedVariable</code> has been created.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code> has been created as tag interface for variables that require user interaction to be valued.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForTypedVariable(List<TypedVariable>, List<String>)</code> has been created.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tools.api.command.ui.NoUICallback.askForTypedVariable(List<TypedVariable>, List<String>)</code> has been created.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.dialect.DialectServices.getRequiredViewpoints(DRepresentation)</code> has been added to have mean to get required viewpoints to use a representation.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.getRequiredViewpoints(DRepresentation)</code> has been added to have a default implementation of
+ <code>DialectServices.getRequiredViewpoints(DRepresentation)</code> method.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isRelatedViewpointSelected(Session, RepresentationDescription)</code> protected method has been added to check if a
+ <code>RepresentationDescription</code> is usable in the context of the specified session.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String, String)</code> method has been added to replace the deprecated
+ <code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String)</code>. This method now uses the description name as title for the wizard. This new method has been implemented by
+ <code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback</code> and
+ <code>org.eclipse.sirius.tools.api.command.ui.NoUICallback</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.loadAndOpenRepresentationsFile(URI, boolean)</code> has been added to specify if job used to open a session must be considered as launched by the user or not, because by default with
+ <code>ModelingProjectManager.loadAndOpenRepresentationsFile(URI)</code> the job was not considered as launched by the user.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable</code> now implements
+ <code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.viewpoint.description.tool.AbstractVariable</code> has been moved to
+ <code>org.eclipse.sirius.viewpoint.description.AbstractVariable</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.viewpoint.description.tool.SubVariable</code> has been moved to
+ <code>org.eclipse.sirius.viewpoint.description.SubVariable</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.getMainRepresentationsFileURI()</code> methods no more update workspace resource about markers, now this must be done in caller on IllegalArgumentException catch in a workspace aware operation.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand.canExecute()</code> now returns false if a
+ <code>DRepresentation</code> cannot be refreshed, by calling
+ <code>DialectManager.canRefresh(DRepresentation)</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> Several methods of
+ <code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper</code> now return a
+ <code>fr.obeo.dsl.viewpoint.DView</code> instead of a
+ <code>fr.obeo.dsl.viewpoint.DRepresentationContainer</code>: *
+ <code>findContainer(EObject, Viewpoint, Collection<DAnalysis>, DAnalysisSelector)</code>,
+ <ul>
+ <li>
+ <code>findContainerForAddedRepresentation(EObject, Viewpoint, Collection<DAnalysis>, DAnalysisSelector, DRepresentation)</code>,
+ </li>
+ <li>
+ <code>findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code>,
+ <code>findFreeContainer(Viewpoint, Collection<DAnalysis>, DAnalysisSelector)</code>
+ </li>
+ <li>
+ <code>findFreeContainer(Viewpoint, Collection<DAnalysis>, DAnalysisSelector)</code>.
+ </li>
+ </ul>
+ </li>
+ <li><span class="label label-danger">Removed</span> The
+ <code>org.eclipse.sirius.viewpoint.DRepresentationContainer</code> EClass have been removed. It used to be the only implementation of
+ <code>org.eclipse.sirius.viewpoint.DView</code>, the
+ <code>models</code> derived transient reference has been moved to
+ <code>DView</code>. An automatic migration has been added during the loading of the representation to handle this change.
+ </li>
+ <li><span class="label label-danger">Removed</span> The class
+ <code>org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2</code> has been deleted and is now
+ <code>MetamodelDescriptorProvider</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common">Changes in
+ <code>org.eclipse.sirius.common</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> A method
+ <code>getInferredVariableTypes(Boolean value)</code> in
+ <code>org.eclipse.sirius.common.tools.api.interpreter.ValidationResult</code> so that
+ <code>IInterpreter</code> implementations able to infer more specific types based on predicates result provides this information to Sirius which will then use it for validating other expressions. You might want to look at
+ <code>org.eclipse.sirius.common.acceleo.aql.business.internal.AQLSiriusInterpreter</code> which is an implementation providing this type inference.
+ </li>
+ <li><span class="label label-success">Added</span> A helper
+ <code>org.eclipse.sirius.common.tools.api.util.MessageTranslator</code> providing
+ <code>getMessage(EObject, String)</code> and
+ <code>getMessage(Bundle, String)</code> service dedicated into processing a translatable message to return the translation in the active language when available. This service returns the String without modification if not translatable or no translation is available.
+ </li>
+ <li><span class="label label-success">Added</span> The “INFO” severity has been added to
+ <code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterStatus</code> to reflect all kind of language validation severity (of AQL for example).
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in
+ <code>org.eclipse.sirius.diagram</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.VariableValue</code>,
+ <code>org.eclipse.sirius.diagram.TypedVariableValue</code> and
+ <code>org.eclipse.sirius.diagram.EObjectVariableValue</code> has been created.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()</code> has been created to indicate that variables have to be computed again.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.description.style.Side</code> EEnum has been added to define a border node side on the parent.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.description.style.NodeStyleDescription#forbiddenSides</code> attribute has been added to set the border node forbidden sides on the parent.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.business.api.query.DNodeQuery.getForbiddenSide()</code> has been added to retrieve the forbidden sides of a DNode (make sense only for Border Nodes).
+ </li>
+ <li><span class="label label-info">Modified</span> The type of
+ <code>org.eclipse.sirius.diagram.description.filter.VariableFilter.ownedVariable</code> has been changed to
+ <code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The type of
+ <code>org.eclipse.sirius.diagram.FilterVariableHistory.ownedValues</code> has been changed to
+ <code>org.eclipse.sirius.diagram.VariableValue</code>.
+ </li>
+ <li><span class="label label-info">Modified</span> The return type of
+ <code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil.findRepresentationContainer(DDiagram)</code> has been changed from
+ <code>org.eclipse.sirius.viewpoint.DRepresentationContainer</code> to
+ <code>org.eclipse.sirius.viewpoint.DView</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.diagram.description.filter.FilterVariable</code> has been removed. It is replaced by
+ <code>org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span>
+ <code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.setFilterContext()</code> has been removed. This method was, in part, useless and is replaced by
+ <code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()</code>.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui2">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback.askForTypedVariable(List<TypedVariable>, List<String>)</code> has been created.
+ </li>
+ <li><span class="label label-success">Added</span> The new internationalizable label
+ <code>Messages_createRepresentationInputDialog_DefaultRepresentationDescName</code> has been added (available through
+ <code>org.eclipse.sirius.ui.tools.api.Messages.createRepresentationInputDialog_DefaultRepresentationDescName</code>. Its value is “Representation”.
+ </li>
+ <li><span class="label label-info">Modified</span> The internationalizable label
+ <code>Messages_createRepresentationInputDialog_NewRepresentationNameLabel</code> has been replaced by “Name:” (previous value was “Representation name:”).
+ </li>
+ <li><span class="label label-info">Modified</span> The internationalizable label
+ <code>Messages_createRepresentationInputDialog_RepresentationDescriptionLabel</code> has been replaced by “Representation description: {0}” (previous value was “Representation description: ”).
+ </li>
+ <li><span class="label label-info">Modified</span> The internationalizable label
+ <code>Messages_createRepresentationInputDialog_Title</code> has been replaced by “New {0}” (previous value was “New Representation”).
+ </li>
+ <li><span class="label label-danger">Removed</span> The internationalizable label
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.OpenRepresentationsFileJob_initModelingProjectsTask</code> has been removed as this message is no more used.
+ </li>
+ <li><span class="label label-danger">Removed</span> The class
+ <code>org.eclipse.sirius.ui.business.api.editor.SpecificSessionManager</code> has been removed.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in
+ <code>org.eclipse.sirius.diagram.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> A new system property named
+ <code>org.eclipse.sirius.diagram.ui.svg.maxCacheSizeMB</code> has been added. It can be used to tweak the maximum size (in megabytes) of pre-rendered SVG images to keep in cache. The default is 50, corresponding to 50MB of bitmaps of 4 8-bit channels. Increasing the limit can improve performance when using diagrams with a lot of SVG images, at the cost of increased memory usage.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.ITabbarContributor</code> interface has been added to provide a customized tab-bar for a specific selection.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code> is an abstract implementation of
+ <code>ITabbarContributor</code> that allows reusing one or several of the default Sirius contribution items.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.editor.properties.sections.style.bundledimagedescription.BundledImageDescriptionShapePropertySectionSpec</code> has been added to have a custom display in the VSM for provided basic shape.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramBorderNodeEditPart.createNodeFigure()</code> has been created to factorize the
+ <code>DNode2EditPart</code> and
+ <code>DNode4EditPart</code> constructors.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.setForbiddenSides(int...)</code> has been added to set the figure forbidden sides on its parent.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.getAuthorizedSides()</code> has been added to retrieve the figure authorized side (by default all sides).
+ </li>
+ <li><span class="label label-success">Added</span> The following protected methods have been added to
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code> :
+ <code>String getKey(Graphics)</code>,
+ <code>Image getImage(Rectangle, Graphics)</code>,
+ <code>static boolean doRemoveFromCache(String)</code>.
+ </li>
+ <li><span class="label label-success">Added</span> 2 methods are added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService</code> to manage gradient color in export to PNG or SVG formats:
+ <code>DiagramEditPartService.saveSVGToFile(IPath, SiriusDiagramSVGGenerator, IProgressMonitor)</code> and
+ <code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService.saveToFile(IPath, SiriusDiagramSVGGenerator, ImageFileFormat, IProgressMonitor)</code>. These 2 methods are copy of parent methods with
+ <code>SiriusDiagramSVGGenerator</code> as parameter instead of a
+ <code>DiagramSVGGenerator</code>.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getGradientPaintFromValue(int, int, int, int, Color, Color)</code> has been added to handle a cache for
+ <code>java.awt.GradientPaint</code> as it is the case for
+ <code>org.eclipse.swt.graphics.Pattern</code> with
+ <code>getPatternFromValue()</code>.
+ </li>
+ <li><span class="label label-success">Added</span> Methods have been added in
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.GradientHelper</code> to handle
+ <code>java.awt.GradientPaint</code> as
+ <code>org.eclipse.swt.graphics.Pattern</code>:
+ <code>getGradientPaintDiag(Rectangle, Color, Color)</code>,
+ <code>getGradientPaintLeftToRight(Rectangle, Color, Color)</code>,
+ <code>getGradientPaintTopToBottom(Rectangle, Color, Color)</code> and
+ <code>getGradientPaint(int, Rectangle, Color, Color)</code>.
+ </li>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ACTION_SIRIUS_COPY_APPEARANCE_PROPERTIES</code> has been added to identify the new
+ <em>Sirius Copy Appearence Properties</em> action.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.BundleImageFigure</code> now overrides the method
+ <code>setBorder(Border border)</code>. It also provides the accessors for the new field
+ <code>mainBorderSize</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.BundledImageFigure</code> now inherits directly from
+ <code>SVGFigure</code> instead of
+ <code>AbstractCachedSVGFigure</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure</code> now inherits directly from
+ <code>SVGFigure</code> instead of
+ <code>AbstractCachedSVGFigure</code>.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code> now implements interfaces
+ <code>StyledFigure</code>,
+ <code>ITransparentFigure</code> and
+ <code>ImageFigureWithAlpha</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span> The following mehtods have been removed from
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code>:
+ <code>NodeList getNodes(String)</code>,
+ <code>Color getColor(Element, String)</code>,
+ <code>void updateRenderingHints(Graphics)</code>,
+ <code>staticImage toSWT(Device, BufferedImage)</code>,
+ <code>boolean checkContentAvailable()</code>,
+ <code>Rectangle2D getAreaOfInterest()</code>,
+ <code>void setAreaOfInterest(Rectangle2D)</code>,
+ <code>boolean isSpecifyCanvasWidth()</code>,
+ <code>void setSpecifyCanvasWidth(boolean)</code>,
+ <code>boolean isSpecifyCanvasHeight()</code>,
+ <code>void setSpecifyCanvasHeight(boolean)</code>,
+ <code>boolean getSpecifyCanvasWidth()</code>,
+ <code>boolean getSpecifyCanvasHeight()</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span> The class
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractCachedSVGFigure</code> has been removed. Its functionality was merged directly into
+ <code>SVGFigure</code>.
+ </li>
+ <li><span class="label label-danger">Removed</span> The static
+ <code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure.createImageFigure(ContainerStyle)</code> method has been removed; it was broken and not called anywhere.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.emf.ui">Changes in
+ <code>org.eclipse.sirius.ext.emf.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.ext.emf.ui.properties.ExtensiblePropertySource.collector</code> field is now in protected visibility to be modifiable and accessible by subclass.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime2">Changes in
+ <code>org.eclipse.sirius.ext.gmf.runtime</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The interface
+ <code>org.eclipse.sirius.ext.gmf.runtime.diagram.ui.tools.MoveInDiagramDragTracker</code> has been added to declare states used by all DragTrackers which manage move in diagram using mouse middle click.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.ui3">Changes in
+ <code>org.eclipse.sirius.ui</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span>
+ <code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertyDescriptor</code> has been added to provide a specific
+ <code>ExtensiblePropertyDescriptor</code> which test
+ <code>IPermissionAuthority</code> to make properties view editable or not.
+ </li>
+ <li><span class="label label-info">Modified</span>
+ <code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource</code> has been modified to use
+ <code>SiriusExtensiblePropertyDescriptor</code> to provide not editable properties view when the object, selected from the Model Explorer view, cannot be modified.
+ </li>
+ <li><span class="label label-danger">Removed</span> The
+ <code>org.eclipse.sirius.ui</code>, and thus the whole
+ <code>org.eclipse.sirius.runtime</code> feature no longer depends on the JDT (technically the dependency towards
+ <code>org.eclipse.jdt.core</code> has been removed). If you need the JDT Core in your environment, you will need to add the dependency explicitly. The Sirius specification environment (
+ <code>org.eclipse.sirius.editor</code>) still depends on PDE (and thus indirectly the JDT too).
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in
+ <code>org.eclipse.sirius.tests.junit.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.tests.support.api.DefaultTestMemento</code> has been created. It help to simulate a real
+ <code>IMemento</code> for editor restoration.
+ </li>
+ <li><span class="label label-success">Added</span> The method
+ <code>SiriusTestCase.initViewpoint(String, Session, boolean)</code> has been added to allow viewpoint activation without creating representations.
+ </li>
+ <li><span class="label label-success">Added</span> The methods
+ <code>initLoggers()</code> and
+ <code>disposeLoggers()</code> of class
+ <code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> have now a protected visibility (instead of private) to allow subclasses to use this logger without all the
+ <code>genericSetUp</code> behavior.
+ </li>
+ <li><span class="label label-warning">Deprecated</span> The method
+ <code>SiriusTestCase.initViewpoint(String, Session, EObject)</code> has been deprecated because the last parameter is useless to activate a viewpoint.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support2">Changes in
+ <code>org.eclipse.sirius.tests.swtbot.support</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>getTreeItem(final SWTBotTreeItem[], final String)</code> has been added in
+ <code>org.eclipse.sirius.tests.swtbot.support.utils</code> to retrieve recursively a
+ <code>SWTBotTreeItem</code> in a
+ <code>SWTBotTreeItem</code> array.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.tests.swtbot.support.api.condition.ShellChangedCondition</code> has been added to wait until the current active shell has changed.
+ </li>
+ <li><span class="label label-success">Added</span> The class
+ <code>org.eclipse.sirius.tests.swtbot.support.api.condition.TreeItemWithImageCondition</code> has been added to wait until the given treeItem has the expected image.
+ </li>
+ <li><span class="label label-info">Modified</span> A second
+ <code>String</code> parameter has been added to the method
+ <code>org.eclipse.sirius.tests.swtbot.support.api.business.UILocalSession.newDiagramRepresentation(String, String)</code>. This parameter is the label of the representation description. It is necessary since the change of the wizard to ask the new representation name (see User-Visible Changes for detail).
+ </li>
+ <li><span class="label label-info">Modified</span> A third
+ <code>String</code> parameter has been added to the constructor of
+ <code>org.eclipse.sirius.tests.swtbot.support.api.business.UINewRepresentationBuilder</code> for the same above reasons.
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.common.xtext">Changes in
+ <code>org.eclipse.sirius.common.xtext</code>
+ </h4>
+ <ul>
+ <li><span class="label label-info">Modified</span> The dependency from
+ <code>org.eclipse.sirius.common.xtext</code> to the JDT plug-in
+ <code>org.eclipse.jdt.core</code> is now optional. If you need the JDT Core in your environment, you will need to add the dependency explicitly. The Sirius specification environment (
+ <code>org.eclipse.sirius.editor</code>) still depends on PDE (and thus indirectly the JDT too).
+ </li>
+ </ul>
+ <h4 id="Changesinorg.eclipse.sirius.editor">Changes in
+ <code>org.eclipse.sirius.editor</code>
+ </h4>
+ <ul>
+ <li><span class="label label-success">Added</span> The method
+ <code>bindCompletionProcessor(AbstractPropertySection, IAssistContentProvider, Text)</code> has been added to the class
+ <code>org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider</code> to allow to bind a specific IAssistContentProvider to the text.
+ </li>
+ </ul>
+ <h2 id="sirius3.1.0">Changes in Sirius 3.1.0</h2>
+ <h3 id="UserVisibleChanges5">User-Visible Changes</h3>
+ <ul>
<li><span class="label label-success">Added</span> A new feature allows to snap to all shapes (instead of just to snap to sibling shapes). The <kdb>F4</kdb> shortcut key activates this mode when you resize a node, move a node or move a bendpoint of an edge, see
<a href="./user/diagrams/Diagrams.html#snap_to_shapes">the documentation</a> for details.
</li>
@@ -179,7 +1287,7 @@
<em>Arrange Linked Border Nodes</em> as it is border nodes which are layouted and not bordered nodes.
</li>
</ul>
- <h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+ <h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
<ul>
<li><span class="label label-info">Modified</span> The
<em>Acceleo Query Language</em> (AQL) interpreter has been improved. AQL, and its support in Sirius, is no longer considered experimental, and instead is now the recommended query language to use for new VSMs. Improvements mostly concern better completion and validation, and more precise error reporting. In particular AQL expressions will now be able to display warnings and errors in the Interpreter view. The message displayed in the Interpreter view after an evaluation has also been improved to display the qualified name of the type of the value computed (
@@ -226,7 +1334,7 @@
<code>IPermissionAuthority</code>) of the potential to delete objects. This is the reverse order of what was done before, and can have performance impacts if the precondition is slow. The specifier will to take care to ensure a good performance for the precondition expression of the delete tool.
</li>
</ul>
- <h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
+ <h3 id="DeveloperVisibleChanges5">Developer-Visible Changes</h3>
<h4 id="Partialsupportforinternationalization">Partial support for internationalization</h4>
<p>Sirius 3.1 introduces partial support for internationalization: all literal strings from the runtime part of Sirius are now externalized and can be localized by third parties by providing the appropriate “language packs” as OSGi fragments. Note that this does not concern the VSM editor’s UI, the VSMs themselves, or the parts of the UI inherited from Eclipse/EMF/GEF/GMF and other libraries and frameworks used by Sirius.</p>
<p>Some API changes were required to enable this. While technically breaking changes if interpreting strictly the OSGi versioning rules, the major version number of the impacted bundles was not incremented as the changes only concern classes that should not impact the vast majority of users. Most breaking changes concern the plug-in/activator classes from each bundle. They are:</p>
@@ -437,7 +1545,7 @@
</ul>
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.common">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.common2">Changes in
<code>org.eclipse.sirius.common</code>
</h4>
<ul>
@@ -467,7 +1575,7 @@
<code>org.eclipse.sirius.common.tools.api.contentassist.ContentProposalBuilder</code> used to build the content proposals with their various parameters more easily.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius">Changes in
+ <h4 id="Changesinorg.eclipse.sirius3">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -506,7 +1614,7 @@
<code>org.eclipse.sirius.tools.api.command.IUndoableCommand</code> interface removed because it is useless since undo/redo is managed by EMF Transaction.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ui">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ui4">Changes in
<code>org.eclipse.sirius.ui</code>
</h4>
<ul>
@@ -528,7 +1636,7 @@
<code>IEditorPart</code> through the navigation history view.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in
<code>org.eclipse.sirius.diagram.ui</code>
</h4>
<ul>
@@ -592,7 +1700,7 @@
<code>RefreshPlan</code> in parameter to have more informations to say if children must be synchronized.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support3">Changes in
<code>org.eclipse.sirius.tests.junit.support</code>
</h4>
<ul>
@@ -614,7 +1722,7 @@
</ul>
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support3">Changes in
<code>org.eclipse.sirius.tests.swtbot.support</code>
</h4>
<ul>
@@ -673,7 +1781,7 @@
<code>org.eclipse.sirius.ext.jface.viewers.IToolTipProvider</code> has been copied from JFace 3.10 from Luna, so that we can use it with Juno and Kepler too.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime3">Changes in
<code>org.eclipse.sirius.ext.gmf.runtime</code>
</h4>
<ul>
@@ -684,7 +1792,7 @@
</li>
</ul>
<h2 id="sirius3.0.0">Changes in Sirius 3.0.0</h2>
- <h3 id="UserVisibleChanges2">User-Visible Changes</h3>
+ <h3 id="UserVisibleChanges6">User-Visible Changes</h3>
<ul>
<li><span class="label label-success">Added</span> The ability to print table representations has been re-introduced.</li>
<li><span class="label label-success">Added</span> The quick outline feature has been added for tree and table editors, see documentation for details.</li>
@@ -709,7 +1817,7 @@
<em>Viewpoint Selection</em> dialog and wizard page, the “plug-in” decorator for viewpoints loaded from plug-ins is removed, and a “Folder” decorator for viewpoints loaded from the current workspace has been added. This makes the icons more visible in the most common where viewpoints come from installed plug-ins.
</li>
</ul>
- <h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
+ <h3 id="SpecifierVisibleChanges4">Specifier-Visible Changes</h3>
<ul>
<li><span class="label label-success">Added</span> <span class="label label-info">Experimental</span> Optional support for the experimental
<em>Acceleo Query Language</em> (AQL) has been added to write interpreted expressions. It is provided by the
@@ -783,7 +1891,7 @@
<em>EStructuralFeature</em> (inherited or with same name).
</li>
</ul>
- <h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
+ <h3 id="DeveloperVisibleChanges6">Developer-Visible Changes</h3>
<p>The most important and impacting changes in this release are (details below in plug-in specific sections):</p>
<ul>
<li><span class="label label-success">Added</span> The new extension point
@@ -860,7 +1968,7 @@
<li><span class="label label-success">Added</span> Sirius now provides an <a href="http://www.eclipse.org/oomph" target="_blank">Oomph</a> setup file to automatically create a fully configured Eclipse installation ready for contributing patches to Sirius. The latest version can be obtained <a href="http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/plain/releng/org.eclipse.sirius.settings/Sirius.setup" target="_blank">here</a>.</li>
<li><span class="label label-success">Added</span> New patches proposed by contributors on the <a href="https://git.eclipse.org/r/#/admin/projects/sirius/org.eclipse.sirius" target="_blank">Sirius Gerrit</a> now automatically trigger a sub-set of the Sirius automated test suites, which give a good feedback on the absence of regressions introduced by the proposed patch.</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.common2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.common3">Changes in
<code>org.eclipse.sirius.common</code>
</h4>
<ul>
@@ -979,7 +2087,7 @@
<code>org.eclipse.sirius.common.ui.ext</code>.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius4">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -1115,7 +2223,7 @@
<code>org.eclipse.sirius.viewpoint.DContainer</code> has been removed.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ui2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ui5">Changes in
<code>org.eclipse.sirius.ui</code>
</h4>
<ul>
@@ -1149,7 +2257,7 @@
<code>org.eclipse.sirius.ui.ext</code>.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ecore.extender">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ecore.extender2">Changes in
<code>org.eclipse.sirius.ecore.extender</code>
</h4>
<ul>
@@ -1166,7 +2274,7 @@
<code>org.eclipse.sirius.ecore.extender.IllegalURIException</code> has been removed. It was not actually thrown anywhere in the code.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.editor">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.editor2">Changes in
<code>org.eclipse.sirius.editor</code>
</h4>
<ul>
@@ -1175,7 +2283,7 @@
<code>org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider.bindCompletionProcessor(AbstractPropertySection, Text)</code>, the difference is that it binds the completion processors available in plugins to the text.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in
<code>org.eclipse.sirius.diagram</code>
</h4>
<ul>
@@ -1216,7 +2324,7 @@
<code>ComputedStyleDescriptionRegistry.computedStyleDescriptions</code> list.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in
<code>org.eclipse.sirius.diagram.ui</code>
</h4>
<ul>
@@ -1522,7 +2630,7 @@
</ul>
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.tests.junit.support4">Changes in
<code>org.eclipse.sirius.tests.junit.support</code>
</h4>
<ul>
@@ -1567,7 +2675,7 @@
<code>org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper.setReadOnlyStatus(boolean, IResource...)</code> can be used instead.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support4">Changes in
<code>org.eclipse.sirius.tests.swtbot.support</code>
</h4>
<ul>
@@ -1628,7 +2736,7 @@
<code>org.eclipse.sirius.xxx.ui.ext</code>, allowing them not have all that functionalities they may not want.
</p>
<h2 id="sirius2.0.0">Changes in Sirius 2.0.0</h2>
- <h3 id="UserVisibleChanges3">User-Visible Changes</h3>
+ <h3 id="UserVisibleChanges7">User-Visible Changes</h3>
<ul>
<li>It is now possible to select element that intersects the selection rectangle and not that is completely contained by the selection rectangle. This new behavior is enabled when user selects elements from right to left. The normal mode (previous mode) remains when the user selects elements from left to right.</li>
<li>The edges appearance is now kept, as much as possible, when one of its extremity is moved. A move of an extremity should move only the closest segment of the edge.</li>
@@ -1679,7 +2787,7 @@
<li>Reconnection of an edge will only now move the minimum necessary bendpoints instead of reseting it to default.</li>
<li>A new action has been added to reset the diagram (or container) origin: the diagram (or container) bounds (the rectangle formed by the highest, the leftmost, the lowest and the rightmost children elements) can have a negative origin or can be shifted toward the bottom-right with a blank zone at the top-left. This action aims to move all diagram (or container) elements so that the it retrieves its origin while keeping elements layout.</li>
</ul>
- <h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
+ <h3 id="SpecifierVisibleChanges5">Specifier-Visible Changes</h3>
<ul>
<li>The specifier can now choose to hold the edge ends toward the center of the source, target or both. New fields within the “advance” tab of EdgeStyle description have been added to choose for which source or target mappings an edge should be centered. See
<a href="specifier/diagrams/Diagrams.html#edges_styles">Edges Styles > Edge Centering</a> in the specifier manual for more details.
@@ -1690,7 +2798,7 @@
<li>“Lozenge” is replaced by “Diamond” in diagram style.</li>
</ul>
<h3 id="APIChanges">API Changes</h3>
- <h4 id="Changesinorg.eclipse.sirius3">Changes in
+ <h4 id="Changesinorg.eclipse.sirius5">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -1765,7 +2873,7 @@
<code>org.eclipse.gmf.runtime.emf.core.util.CrossReferenceAdapter</code>. However considering the way Sirius uses GMF, this adapter is not needed.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ui3">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ui6">Changes in
<code>org.eclipse.sirius.ui</code>
</h4>
<ul>
@@ -1779,7 +2887,7 @@
<code>findViewpointByName()</code> to correct a wrong rebranding.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.common3">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.common4">Changes in
<code>org.eclipse.sirius.common</code>
</h4>
<ul>
@@ -1817,7 +2925,7 @@
<code>IServiceLocator.getService()</code> on the site.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram4">Changes in
<code>org.eclipse.sirius.diagram</code>
</h4>
<ul>
@@ -1848,7 +2956,7 @@
<code>org.eclipse.sirius.diagram.description.CenteringStyle</code>, to determine whether the edge target or source ends should be centered.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui5">Changes in
<code>org.eclipse.sirius.diagram.ui</code>
</h4>
<ul>
@@ -1946,7 +3054,7 @@
<code>org.eclipse.sirius.synchronizer.ModelToModelSynchronizer.update(CreatedOutput, boolean)</code> has been added to specify if we want partial refresh or not.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ecore.extender2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ecore.extender3">Changes in
<code>org.eclipse.sirius.ecore.extender</code>
</h4>
<ul>
@@ -1960,7 +3068,7 @@
<code>EObject</code> from its container after a check by the permission authority that all changeable feature to modify can be edited.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime2">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime4">Changes in
<code>org.eclipse.sirius.ext.gmf.runtime</code>
</h4>
<ul>
@@ -2011,7 +3119,7 @@
</ul>
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support3">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support5">Changes in
<code>org.eclipse.sirius.tests.swtbot.support</code>
</h4>
<ul>
@@ -2053,11 +3161,11 @@
</li>
</ul>
<h2 id="sirius1.0.0">Changes in Sirius 1.0.0 (from Sirius 1.0.0M7)</h2>
- <h3 id="UserVisibleChanges4">User-Visible Changes</h3>
+ <h3 id="UserVisibleChanges8">User-Visible Changes</h3>
<ul>
<li>The ability to print table representations has been disabled for the 1.0.0 release due to an external dependency issue (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=435204" target="_blank">bug #435204</a> for the details).</li>
</ul>
- <h3 id="SpecifierVisibleChanges4">Specifier-Visible Changes</h3>
+ <h3 id="SpecifierVisibleChanges6">Specifier-Visible Changes</h3>
<ul>
<li>
<em>Node</em>,
@@ -2072,7 +3180,7 @@
</li>
</ul>
<h3 id="APIChanges2">API Changes</h3>
- <h4 id="Changesinorg.eclipse.sirius4">Changes in
+ <h4 id="Changesinorg.eclipse.sirius6">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -2091,7 +3199,7 @@
<code>computeResourcesToSave()</code> method.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui6">Changes in
<code>org.eclipse.sirius.diagram.ui</code>
</h4>
<ul>
@@ -2103,7 +3211,7 @@
<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramListEditPart.createLayoutEditPolicy</code> implementation has been removed.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram.ui5">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram.ui7">Changes in
<code>org.eclipse.sirius.diagram.ui</code>
</h4>
<ul>
@@ -2117,7 +3225,7 @@
</li>
</ul>
<h2 id="sirius1.0M7">Changes in Sirius 1.0.0M7 (from Sirius 1.0M6)</h2>
- <h3 id="SpecifierVisibleChanges5">Specifier-Visible Changes</h3>
+ <h3 id="SpecifierVisibleChanges7">Specifier-Visible Changes</h3>
<ul>
<li>The default value of the
<em>Semantic Candidates Expression</em> for Tree Items has changed from an empty string (meaning “any compatible element in the session”) to
@@ -2336,7 +3444,7 @@
</ul>
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.common4">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.common5">Changes in
<code>org.eclipse.sirius.common</code>
</h4>
<ul>
@@ -2348,7 +3456,7 @@
<code>Predicate</code> tested on the key.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius5">Changes in
+ <h4 id="Changesinorg.eclipse.sirius7">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -2456,7 +3564,7 @@
<code>getSavingPolicy()</code> method which gives access to the currently configured saving policy.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram5">Changes in
<code>org.eclipse.sirius.diagram</code>
</h4>
<ul>
@@ -2564,7 +3672,7 @@
<code>org.eclipse.sirius.diagram.sequence.template.Transformer</code> interface instead, which is functionally equivalent.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ui4">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ui7">Changes in
<code>org.eclipse.sirius.ui</code>
</h4>
<ul>
@@ -2583,7 +3691,7 @@
<code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.initializeAfterLoad()</code> method has been removed. There is no replacement for this method documented as “Not intended to be used by client”.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ecore.extender3">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ecore.extender4">Changes in
<code>org.eclipse.sirius.ecore.extender</code>
</h4>
<ul>
@@ -2734,7 +3842,7 @@
<p>if
<code>element</code> is a Diagram concept.
</p>
- <h4 id="Changesinorg.eclipse.sirius6">Changes in
+ <h4 id="Changesinorg.eclipse.sirius8">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -2780,7 +3888,7 @@
<code>new org.eclipse.sirius.business.api.query.EObjectQuery(element).getParentDiagram()</code> instead.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ui5">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ui8">Changes in
<code>org.eclipse.sirius.ui</code>
</h4>
<ul>
@@ -2795,7 +3903,7 @@
<code>org.eclipse.sirius.ui.tools.api.dialogs.ExportSeveralRepresentationsAsImagesDialog</code> instead.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram4">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram6">Changes in
<code>org.eclipse.sirius.diagram</code>
</h4>
<ul>
@@ -2822,7 +3930,7 @@
</li>
</ul>
<h2 id="sirius1.0M5">Changes in Sirius 1.0.0M5 (from Sirius 1.0M4)</h2>
- <h3 id="UserVisibleChanges5">User-Visible Changes</h3>
+ <h3 id="UserVisibleChanges9">User-Visible Changes</h3>
<ul>
<li>The table csv export has been improved to handle cropped label. In some specific cases, the cell label is automatically cropped and ‘...’ is concatenated to the resulting value. This cropped displayed label was previously exported, now the complete semantic value is exported.</li>
</ul>
@@ -2898,7 +4006,7 @@
<code>viewpoint/diagram/description/concern</code>
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius7">Changes in
+ <h4 id="Changesinorg.eclipse.sirius9">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -2948,7 +4056,7 @@
<code>DCellQuery.getExportableLabel()</code> to compute the cell labels used in HTML export.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ui6">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ui9">Changes in
<code>org.eclipse.sirius.ui</code>
</h4>
<ul>
@@ -2958,13 +4066,13 @@
</li>
</ul>
<h2 id="sirius1.0M4">Changes in Sirius 1.0.0M4 (from Sirius 0.9)</h2>
- <h3 id="UserVisibleChanges6">User-Visible Changes</h3>
+ <h3 id="UserVisibleChanges10">User-Visible Changes</h3>
<ul>
<li>The ability to print table representations, which had been disabled for the 0.9 release, has been re-enabled.</li>
</ul>
<h3 id="APIChanges6">API Changes</h3>
<p>Sirius 1.0.0M4 includes a lots of API-breaking changes, as part of a global effort to improve the quality of the Sirius internals. In this milestone in particular, most of the APIs which were marked as deprecated in previous versions of Sirius (and before that of Viewpoint) have been either removed (if a replacement exists) or marked as non-deprecated (if no replacement exists yet).</p>
- <h4 id="Changesinorg.eclipse.sirius.common5">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.common6">Changes in
<code>org.eclipse.sirius.common</code>
</h4>
<ul>
@@ -2990,7 +4098,7 @@
<code>org.eclipse.sirius.table.tools.api.interpreter.IInterpreterSiriusTableVariables</code> instead.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius8">Changes in
+ <h4 id="Changesinorg.eclipse.sirius10">Changes in
<code>org.eclipse.sirius</code>
</h4>
<ul>
@@ -3177,7 +4285,7 @@
<code>DiagramDescription</code> has been removed from the viewpoint.ecore meta-model. This reference always returns empty list.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.diagram5">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.diagram7">Changes in
<code>org.eclipse.sirius.diagram</code>
</h4>
<ul>
@@ -3186,7 +4294,7 @@
<code>AbstractDiagramEdgeEditPart.refreshPath()</code> have been removed. It is not called in Sirius code anymore
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ecore.extender4">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ecore.extender5">Changes in
<code>org.eclipse.sirius.ecore.extender</code>
</h4>
<ul>
@@ -3198,7 +4306,7 @@
<code>ECrossReferenceAdapter</code> can be null.
</li>
</ul>
- <h4 id="Changesinorg.eclipse.sirius.ui7">Changes in
+ <h4 id="Changesinorg.eclipse.sirius.ui10">Changes in
<code>org.eclipse.sirius.ui</code>
</h4>
<ul>
@@ -3534,7 +4642,7 @@
void removeSelectedView(DView view);
</pre>
- <h3 id="SpecifierVisibleChanges6">Specifier-Visible Changes</h3>
+ <h3 id="SpecifierVisibleChanges8">Specifier-Visible Changes</h3>
<p>New variables are available for
<code>sizeComputationExpression</code> to compute the size of edges on
<code>EdgeStyleDescription</code> and
@@ -3556,7 +4664,7 @@
<em>targetView</em>: the target view of the current edge.
</li>
</ul>
- <h3 id="UserVisibleChanges7">User-Visible Changes</h3>
+ <h3 id="UserVisibleChanges11">User-Visible Changes</h3>
<ul>
<li>The ability to print table representations has been disabled for the 0.9 release due to an external dependency issue (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=422223" target="_blank">bug #422223</a>: for the details). It should be re-introduced in 1.0.</li>
</ul>
diff --git a/doc/developer/Architecture_Overview.html b/doc/developer/Architecture_Overview.html
index efa27fb..2e20e5d 100644
--- a/doc/developer/Architecture_Overview.html
+++ b/doc/developer/Architecture_Overview.html
@@ -20,7 +20,7 @@
</li>
</ol>
<p>The general architecture of Sirius is illustrated in the figure below and reflects this split:</p>
- <img style="box-shadow: 0 0 0 0" border="0" src="images/Sirius - High-Level Architecture Overview.png"/>
+ <img style="box-shadow: 0 0 0 0" border="0" src="images/Sirius_High-Level_Architecture_Overview.png"/>
<p>On top of Eclipse and EMF, Sirius is made of two main parts.</p>
<p>The Sirius
<strong>tooling</strong> (on the right hand of the figure), is the part used by architects. It provides an environment in which they can specify the modeler(s) they want to give to their end-users. This specification is done in a declarative way, by configuring a
@@ -50,7 +50,7 @@
<em>interact</em> with his models as represented, but only in the ways configured by the architect. When the user interacts with the representation in the editor, some interactions (e.g. dragging and dropping and element on a diagram) can trigger behaviors defined by the architect, which will modify the underlying business model in ways that are consistent with the business rules. Whenever the business model is modified, Sirius re-launches the refresh algorithm, which is incremental: instead of creating a new representation model for the updated business model’s state, it updates the existing model and only changes the parts that need it. The ends-user can then see the effect of his changes immediately in the editor.
</p>
<p>
- <img style="box-shadow: 0 0 0 0" border="0" src="images/Sirius - Representation Refresh-Sync.png"/>
+ <img style="box-shadow: 0 0 0 0" border="0" src="images/Sirius_Representation_Refresh-Sync.png"/>
</p>
<p>An important property of the refresh algorithm(s) is that they are not only incremental in terms of changes in the business model, but also in terms of changes in the modeler description model itself. This gives rise to one of the most important and distinctive features of Sirius: support for dynamic and incremental development of modelers by architects, with real-time feedback. In practice, this means that when an architect is developing a new modeler definition (or changing an existing one), he can have both the modeler’s definition open (using the Sirius Tooling) and an example representation also open alongside, and whenever he changes the modeler’s definition and saves it, the updated definition is automatically picked-up by the runtime and taken into account instantaneously by issuing a refresh.</p>
<p>In addition to the
diff --git a/doc/developer/extensions-provide_custom-arrange-all.html b/doc/developer/extensions-provide_custom-arrange-all.html
index 8dfdcde..46b5190 100644
--- a/doc/developer/extensions-provide_custom-arrange-all.html
+++ b/doc/developer/extensions-provide_custom-arrange-all.html
@@ -7,25 +7,82 @@
<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
</head>
<body>
- <h1 id="Provideacustomarrangeall">Provide a custom arrange-all</h1>
- <h2 id="Goals">Goals</h2>
- <p>One of the main issues of visual modelers is the global arrangement of all elements. GMF provides a default implementation of an "Arrange All" algorithm to solve this issue but it happens that this default behavior is not adapted for some diagrams. Imagine a diagram representing the hierarchy between a program classes, the "natural" representation a human thinks about is that of a tree. When you add associations on such diagrams, GMF won’t keep the tree representation of the diagram. Sirius provides an API to arrange diagrams according to custom business rules.</p>
- <h2 id="ThearrangeallconceptasimplementedbyGMF">The arrange all concept as implemented by GMF</h2>
- <p>GMF provides basic API and implementations to ease the customization of the "Arrange All" mechanism. It also implements a complete algorithm that is based on the graphical elements.</p>
+ <h1 id="ProvidingacustomdiagramlayoutalgorithmArrangeAll">Providing a custom diagram layout algorithm (“Arrange All”)</h1>
+ <ol class="toc" style="list-style: disc;">
+ <li>
+ <a href="#ProvidingacustomdiagramlayoutalgorithmArrangeAll">Providing a custom diagram layout algorithm ("Arrange All")</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#TheArrangeAllfunctionalityinshort">The Arrange All functionality in short</a>
+ </li>
+ <li>
+ <a href="#TheArrangeAllconceptasimplementedbyGMF">The Arrange All concept as implemented by GMF</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#Theviewsandeditparts">The views and edit parts</a>
+ </li>
+ </ol>
+ </li>
+ <li>
+ <a href="#SiriusLayoutingAPI">Sirius Layouting API</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#siriusLayoutProviders">Sirius Layout providers</a>
+ </li>
+ <li>
+ <a href="#Theviewordering">The view ordering</a>
+ </li>
+ <li>
+ <a href="#Writeyourcustomlayoutalgorithm">Write your custom layout algorithm</a>
+ </li>
+ <li>
+ <a href="#IntegrateyourcustomlayoutalgorithmtoSirius">Integrate your custom layout algorithm to Sirius </a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ <h2 id="TheArrangeAllfunctionalityinshort">The Arrange All functionality in short</h2>
+ <p>The arrange-all functionality is available in Sirius diagram editors in the form of a button and a context menu:</p>
+ <p>
+ <img border="0" src="images/arrange-all/arrange-all-ui.png"/>
+ </p>
+ <p>Its effect is to layout the selected diagram elements (or the whole diagram if no elements are selected) based on the layout algorithm defined for the diagram, or using a default, generic algorithm if nothing is specified. </p>
+ <p>By default, there are two different layout algorithm that can be configured in the VSM for a diagram:</p>
+ <ul>
+ <li>The
+ <code>Ordered Tree Layout</code> algorithm: useful to represent elements in a hierarchical way.
+ </li>
+ <li>The
+ <code>Composite Layout</code> algorithm: used to customize specific aspects of the default algorithm, i.e. the general layout orientation and the padding between elements.
+ </li>
+ </ul>
+ <img border="0" src="images/arrange-all/arrange-all-vsm.png"/>
+ <p>If none of these algorithms fit your needs, Sirius provides two extension points
+ <code>org.eclipse.sirius.diagram.ui.layoutProvider</code> and
+ <code>org.eclipse.sirius.diagram.ui.viewOrderingProvider</code> as well as an API to ease the writing of your own layout algorithms and their usage in Sirius diagram editors.
+ </p>
+ <p>This API reuse the GMF “Arrange All” API and augments it with features needed by Sirius layout algorithms like:</p>
+ <ul>
+ <li>The need to take in consideration pinned diagram elements</li>
+ <li>The need to take in consideration bordered nodes connected to edges</li>
+ </ul>
+ <h2 id="TheArrangeAllconceptasimplementedbyGMF">The Arrange All concept as implemented by GMF</h2>
+ <p>GMF provides basic API and implementations to ease the customization of the “Arrange All” mechanism. It also implements a complete algorithm that is based on the graphical elements.</p>
<p>The top level type of this this API is
- <code>ILayoutNodeProvider</code>
+ <code>ILayoutNodeProvider</code> :
</p>
- <p>
- <img border="0" src="images/arrange-all/arrange-all-tlinterface.jpg"/>
+ <img border="0" src="images/arrange-all/arrange-all-iproviderApi.png"/>
+ <p>This interface is very generic, but GMF provides abstract classes that handle the low-level work while letting you define only the layouting business rules:</p>
+ <img border="0" src="images/arrange-all/arrange-all-ilayoutNodeproviderApi.png"/>
+ <p>This can be done by creating a component inheriting the abstract class
+ <code>AbstractLayoutEditPartProvider</code> and implementing its methods:
</p>
- <p>As you can see, this interface is designed for genericity. Fortunately, GMF provides abstract classes that handle the low-level work while letting you define the business rules:</p>
- <p>
- <img border="0" src="images/arrange-all/arrange-all-ls.jpg"/>
- </p>
- <p>This can be done by implementing three operations:</p>
<ul>
<li>
- <code>boolean provides(IOperation operation)</code>
+ <code>boolean provides(IOperation operation)</code> from
+ <code>IProvider</code> super interface
</li>
<li>
<code>Command layoutEditParts(GraphicalEditPart containerEditPart, IAdaptable layoutHint)</code>
@@ -35,318 +92,794 @@
</li>
</ul>
<p>The
- <code>provides</code> operation is meant to return true if the class can arrange the diagram for the specified operation.
+ <code>provides</code> operation is meant to return true if the class can arrange the diagram for the specified operation.
</p>
<p>The
- <code>layoutEditParts</code> operations will return the commands that will actually be in charge of arranging the diagrams' edit parts. The first one takes the main container that is to be arranged while the latter accepts a list of edit parts to arrange.
+ <code>layoutEditParts</code> operations will return the commands that will actually be in charge of arranging the diagrams' edit parts. The first one takes the main container that is to be arranged while the latter accepts a list of edit parts to arrange.
</p>
- <h2 id="TheLayoutProvidersasprovidedbySirius">The LayoutProviders as provided by Sirius</h2>
- <p>The class
- <code>AbstractLayoutEditPartProvider</code> is the simplest one. Sirius provides utility classes to ease the implementation of "Arrange All" algorithms:
+ <p>The implementation of those three methods forms your layout algorithm.</p>
+ <p>With this API comes an extension point
+ <code>org.eclipse.gmf.runtime.diagram.ui.layoutProviders</code>. It allows your own
+ <code>AbstractLayoutEditPart</code> layout algorithm to be used.
</p>
+ <h3 id="Theviewsandeditparts">The views and edit parts</h3>
+ <p>When doing layouting with GMF based tools like Sirius you will hear about views and edit parts. It is important to understand what they are.</p>
+ <p>The views are persisted model elements that when interpreted represent your diagram visually. You have the
+ <code>Node</code>,
+ <code>Edge</code>,
+ <code>Style</code>, etc...
+ </p>
+ <p>They contain all visual information like the position, the size of the element, its color, etc...
+ <br/>Edit parts ties the model (the views) to a visual representation with a one on one relationship. One edit part points at one view. They are responsible for making changes to the model and interpret and display graphically the view.
+ </p>
+ <h2 id="SiriusLayoutingAPI">Sirius Layouting API</h2>
+ <p>The Sirius Layouting API simplifies the writing of a custom layout algorithm by providing different layout providers specific to Sirius context that you can reuse easily in addition of your own layout algorithm if it does not conflict with these. </p>
+ <p>It also provides utility methods that you can find useful</p>
+ <p>The Sirius API for layouting Sirius diagrams is the following:</p>
<p>
- <img border="0" src="images/arrange-all/arrange-all-air.jpg"/>
+ <img border="0" src="images/arrange-all/arrange-all-layoutingAPI.png"/>
</p>
- <p>Here is a list of all provided layout providers and a basic description of each:</p>
+ <h3 id="siriusLayoutProviders">Sirius Layout providers</h3>
+ <p>Sirius defines and already uses various different layout providers in different contexts.</p>
+ <p>Here is a list of all of those with a basic description of each:</p>
+ <h5 id="DefaultLayoutProvider">DefaultLayoutProvider</h5>
+ <p>It is used by Sirius as entry point to dispatch arrange requests on a Sirius diagram to registered layout providers. The dispatch takes in consideration layout algorithm specified in the VSM and layout providers provided from the Sirius extension point
+ <code>org.eclipse.sirius.diagram.ui.layoutProvider</code>.
+ </p>
+ <h5 id="LineLayoutProvider">LineLayoutProvider</h5>
+ <p>Lays out all views on a single line (either vertical or horizontal). </p>
+ <h5 id="GridLayoutProvider">GridLayoutProvider</h5>
+ <p>Lays out all views as a grid.</p>
+ <h5 id="InlineEdgeLayoutProvider">InlineEdgeLayoutProvider</h5>
+ <p>Lays out connections alongside their source and target nodes (useful on the sequence diagram for example).</p>
+ <h5 id="ArrangeSelectionLayoutProvider">ArrangeSelectionLayoutProvider</h5>
+ <p>This provider only purpose is to delegate arrangement to attached layout provider after having added information about not selected parts in the layout hint. </p>
+ <p>It is used for example with our composite layout providers to keep fixed the not selected parts and to avoid putting other selected parts on it when layouting. </p>
+ <p>It is used primary by default provider whenever the arrange-all action is called because the arrangement can be done on a selection and not on all diagram elements.</p>
+ <h5 id="ArrangeAllOnlyLayoutProvider">ArrangeAllOnlyLayoutProvider</h5>
+ <p>This provider is used to delegate layouting to attached provider only when an arrange-all is done on a diagram and not an arrange selection. </p>
+ <p>When used as primary provider, the arrange selection action is not available in the menu of a Sirius editor using this provider. </p>
+ <p>It is used for example in the
+ <code>OrderedTreeLayoutProvider</code> where it does not make sense to make a tree of just some elements because the all concept is to have a complete tree representation.
+ </p>
+ <h5 id="PinnedElementLayoutProvider">PinnedElementLayoutProvider</h5>
+ <p>This provider is designed to work with another layout provider. When its attached layout provider has done its layouting part, this provider iterates on all diagram elements that are pinned (should not have its position changes by an automatic layout) to put it back at its original position. In case of visual overlap conflict with a non-pinned element, the non-pinned element is move near the pinned one where no overlap is visible.</p>
+ <h5 id="CompoundLayoutProvider">CompoundLayoutProvider</h5>
+ <p>This provider allows to compose different layout providers into a compound one. It is useful to reuse some layouting rules that does not conflict with others needed ones.</p>
+ <p>For example the providers
+ <code>CompositeDownTopLayoutProvider</code> and
+ <code>PinnedElementLayoutProvider</code> can be attached to a compound instance. Then those providers are called in their attach order one after another to do their layouting parts. It avoids the composite provider to duplicate code to handle pinned elements.
+ </p>
+ <h5 id="BorderedItemAwareLayoutProvider">BorderedItemAwareLayoutProvider</h5>
+ <p>This provider arranges all the bordered nodes which are connected to one edge. It reduces the path of the edge between each extremity. For example:</p>
+ <img border="0" src="images/arrange-all/arrange-all-border1.png"/>
+ <p>Becomes </p>
+ <img border="0" src="images/arrange-all/arrange-all-border2.png"/>
+ <h3 id="Theviewordering">The view ordering</h3>
+ <h4 id="API">API</h4>
+ <p>The view ordering is an API used by layout algorithms provided by Sirius. It allows to define a sub class of
+ <code>ViewOrdering</code> that will sort children views of a parent view. The layouting will be done on sorted views instead of the original order in the layout provider.
+ </p>
+ <p>For example, if I use the
+ <code>LineLayoutProvider</code> with default view ordering component in a diagram with two elements, views will be aligned in their natural iteration order:
+ </p>
+ <img border="0" src="images/arrange-all/arrange-all-viewOrdering.png"/>
+ <p>If I define a view ordering component that reorder view in the lexicographic order, views will be aligned accordingly:</p>
+ <img border="0" src="images/arrange-all/arrange-all-viewOrdering2.png"/>
+ <p>This mechanism avoid to rewrite a layout provider if the only thing that should be changed is the order the layout provider lays out its views.</p>
+ <p>Its architecture is the following:</p>
+ <img border="0" src="images/arrange-all/arrange-all-viewOrderingArchitecture.png"/>
+ <h4 id="Compatibleproviders">Compatible providers</h4>
+ <p>Layout providers need to sort view by using the view ordering framework so your view ordering component can be used. The Sirius providers using this framework are the following:</p>
<ul>
<li>
- <code>LineLayoutProvider</code>: lays out all views on a single line (either vertical or horizontal).
+ <code>GridLayoutProvider</code>
</li>
<li>
- <code>GrigLayoutProvider</code>: lays out all views as a grid.
+ <code>InlineEdgeLAyoutProvider</code>
</li>
<li>
- <code>InlineEdgeLayoutProvider</code>: lays out connections alongside their source and target nodes (useful on the sequence diagram for example).
+ <code>LineLAyoutProvider</code>
</li>
</ul>
- <h2 id="TheViewOrderings">The ViewOrderings</h2>
- <h3 id="TheAPI">The API</h3>
- <p>
- <img border="0" src="images/arrange-all/viewordering.jpg"/>
+ <h4 id="WritingaViewOrdering">Writing a ViewOrdering</h4>
+ <p>To contribute a
+ <code>ViewOrdering</code> that should be used in a Sirius provider, you have to create a sub class of
+ <code>AbstractViewOrdering</code> or
+ <code>AbstractViewOrdering</code> or
+ <code>ViewOrdering</code> if you need to do an ordering different from what Sirius offers with its abstract classes.
+ <br/>Sirius abstract classes offers ordering only on Node views by default.
</p>
- <p>All
- <code>LayoutProvider</code> provided by Sirius can be used with a
- <code>ViewOrdering</code> which has the responsibility of actually ordering the views.
- </p>
- <p>The aim of all these classes is to order the GMF views and to provide this result to an
- <code>AbstractLayoutProvider</code>.
- </p>
- <h3 id="Sample">Sample</h3>
- <p>Here is a sample ordering all views to get a tree from a list of UML2 packages :</p>
- <pre>/**
- * Orders packages.
- */
-public class PackageTreeOrdering extends SemanticTreeOrdering {
+ <p>For example the lexicographic view ordering component would be the following:</p>
+ <pre><code>public class LexicographicViewOrdering extends AbstractViewOrdering {
- public List getSemanticChildren(EObject semanticParent, List candidates) {
- List result = Collections.EMPTY_LIST;
- if (semanticParent instanceof Package) {
- result = new LinkedList&lt;Package&gt;(((Package) semanticParent).getNestedPackages());
- result.retainAll(candidates);
+ @Override
+ protected List<View> sortViews(List<View> views) {
+ Comparator<View> comparing = Comparator.comparing(new Function<View, String>() {
+ @Override
+ public String apply(View t) {
+ DDiagramElement element = (DDiagramElement) t.getElement();
+ return element.getName();
+ }
+ });
+ Collections.sort(views, comparing);
+ return views;
}
- return result;
}
- public List getSemanticRoots(List objects) {
- List&lt;Package&gt; roots = new LinkedList&lt;Package&gt;();
- for (Object object : objects) {
- EObject semantic = (EObject) object;
- if (semantic instanceof Package) {
- Package package_ = (Package) semantic;
- if (package_.eContainer() == null || !objects.contains(package_.eContainer())) {
- roots.add(package_);
- }
- }
- }
- return roots;
+</code></pre>
+ <h4 id="ContributingyourViewOrderingwithextensionpoint">Contributing your ViewOrdering with extension point</h4>
+ <p>Once your view ordering component has been written you have to make Sirius aware of it so it can be used.
+ <br/>To do that Sirius provides an extension point
+ <code>org.eclipse.sirius.diagram.viewOrderingProvider</code>.
+ <br/>It allows to register a
+ <code>ViewOrderingProvider</code> that will provide your view ordering component:
+ </p>
+ <img border="0" src="images/arrange-all/arrange-all-viewOrderingProvider.png"/>
+ <p>It contains the following methods:
+ <br/>-
+ <code>provides</code>: tell Sirius if your ordering component should be used when layouting views associated to the given mapping.
+ <br/>-
+ <code>getViewOrdering</code>: tell Sirius what view ordering component to use to order views when the provides method returns true.
+ </p>
+ <p>For example with the lexicographic you will have:</p>
+ <img border="0" src="images/arrange-all/arrange-all-viewOrderingExtensionPoint.png"/>
+ <pre><code><extension point="org.eclipse.sirius.diagram.viewOrderingProvider">
+ <viewOrderingProvider providerClass="org.eclipse.sirius.diagram.ui.tools.internal.providers.LexicographicViewOrderingProvider" />
+</extension>
+
+
+</code></pre>
+ <p>The
+ <code>LexicographicViewOrderingProvider</code> code would be:
+ </p>
+ <pre><code>public class LexicographicViewOrderingProvider implements ViewOrderingProvider {
+
+ public LexicographicViewOrderingProvider() {
+ }
+
+ @Override
+ public boolean provides(DiagramElementMapping mapping) {
+ return true;
+ }
+
+ @Override
+ public ViewOrdering getViewOrdering(DiagramElementMapping mapping) {
+ return new LexicographicViewOrdering();
+ }
+}
+
+
+</code></pre>
+ <h3 id="Writeyourcustomlayoutalgorithm">Write your custom layout algorithm</h3>
+ <p>To create your own layout algorithm with Sirius API you have to subclass one Sirius abstract class depending on what you need to use:</p>
+ <h5 id="DefaultLayoutProvider2">DefaultLayoutProvider</h5>
+ <p>This provider is the recommended one to use if you don’t need the liberty of composition of others below. If you want to have the capability for specifiers to be able to configure your layout algorithm directly in the VSM you must use this provider.</p>
+ <p>For example the ELK layout algorithms if installed are using it:</p>
+ <pre><code>/**
+ * Layout node provider allowing to apply an ELK layout algorithm while
+ * arranging diagram elements.
+ *
+ * @author <a href=mailto:pierre.guilet@obeo.fr>Pierre Guilet</a>
+ *
+ */
+public class ELKLayoutNodeProvider extends DefaultLayoutProvider {
+
+ @Override
+ public Command layoutEditParts(final List selectedObjects, final IAdaptable layoutHint) {
+ Injector injector = LayoutConnectorsService.getInstance().getInjector(null, selectedObjects);
+ ElkDiagramLayoutConnector connector = injector.getInstance(ElkDiagramLayoutConnector.class);
+ LayoutMapping layoutMapping = connector.buildLayoutGraph(null, selectedObjects);
+ connector.layout(layoutMapping);
+ connector.transferLayout(layoutMapping);
+ return connector.getApplyCommand(layoutMapping);
}
}
-This tells us how to order the packages. We must notify Sirius that this @ViewOrdering@ has to be used for the Package Hierarchy diagram.
-
-</pre>
- <h3 id="TheViewOrderingProvider">The
- <code>ViewOrderingProvider</code>
- </h3>
- <p>Here is the implementation of a
- <code>ViewOrderingProvider</code> for an UML2 modeler :
+</code></pre>
+ <h5 id="AbstractLayoutEditPartProvider">AbstractLayoutEditPartProvider</h5>
+ <p>This class should be extended if you do not need what AbstractLayoutProvider provides.
+ <br/>Its API is:
</p>
- <pre>/**
- * The view ordering provider for UML2 modeler.
- */
-public class Uml2ViewOrderingProvider implements ViewOrderingProvider {
+ <p>
+ <img border="0" src="images/arrange-all/arrange-all-abstractLayoutEditPart.png"/>
+ </p>
+ <p>Only the abstract methods
+ <code>layoutEditParts</code> should be override. It is these methods that do the layouting by providing commands modifying underlying views information.
+ </p>
+ <h5 id="AbstractLayoutProvider">AbstractLayoutProvider</h5>
+ <p>This class should be extended if your layouting algorithm is meant to be used in addition to others during a same layouting pass and if you need to be aware of the bound changes produced by the other algorithms. It also should be used if you need all the utility methods regarding view bounds manipulation provided by this abstract class.</p>
+ <p>When sub classing this one, you only have to implement
+ <code>layoutEditParts(List, IAdaptable)</code> and to override
+ <code>provides(IOperation)</code> methods.
+ </p>
+ <p>For example the
+ <code>LineLayoutProvider</code> have the following code:
+ </p>
+ <pre><code>public class LineLayoutProvider extends AbstractLayoutProvider {
- /** The classifier ordering. */
- private ClassifierTreeOrdering classifierOrdering = new ClassifierTreeOrdering();
+ /** The default padding. */
+ private static final Insets DEFAULT_PADDING = new Insets(30, 30, 30, 30);
- public Uml2ViewOrderingProvider() {
- classifierOrdering.setUserAwareCapable(true);
+ /**
+ * <code>true</code> if the line is horizontal, <code>false</code> if the line is vertical.
+ */
+ private boolean horizontal = true;
+
+ /**
+ * <code>true</code> if the line is horizontal, <code>false</code> if the line is vertical.
+ *
+ * @param horizontal
+ * <code>true</code> if the line is horizontal, <code>false</code> if the line is vertical.
+ */
+ public void setHorizontal(final boolean horizontal) {
+ this.horizontal = horizontal;
}
- public ViewOrdering getViewOrdering(DiagramElementMapping mapping) {
- return (ViewOrdering) getMappingToViewOrdering().get(getMappingName(mapping));
- }
-
- public boolean provides(DiagramElementMapping mapping) {
- return getMappingToViewOrdering().containsKey(getMappingName(mapping));
- }
-
- private String getMappingName(DiagramElementMapping mapping) {
- String result = null;
- if (mapping instanceof NodeMapping) {
- result = ((NodeMapping) mapping).getName();
- } else if (mapping instanceof EdgeMapping) {
- result = ((EdgeMapping) mapping).getName();
- } else if (mapping instanceof ContainerMapping) {
- result = ((ContainerMapping) mapping).getName();
+ @Override
+ public Command layoutEditParts(final List selectedObjects, final IAdaptable layoutHint) {
+ final Iterator<?> iterEditParts = selectedObjects.iterator();
+ final List<View> views = new ArrayList<View>(selectedObjects.size());
+ final Map<View, ShapeEditPart> viewsToEditPartMap = new HashMap<View, ShapeEditPart>();
+ while (iterEditParts.hasNext()) {
+ final Object next = iterEditParts.next();
+ if (next instanceof ShapeEditPart && !(next instanceof IBorderItemEditPart)) {
+ final ShapeEditPart shapeEditPart = (ShapeEditPart) next;
+ final View view = shapeEditPart.getNotationView();
+ viewsToEditPartMap.put(view, shapeEditPart);
+ views.add(view);
+ } else {
+ iterEditParts.remove();
+ }
}
- return result;
+ ViewOrdering viewOrdering = ViewOrderingHint.getInstance().consumeViewOrdering(getContainerEditPart(selectedObjects).getNotationView());
+ if (viewOrdering == null) {
+ // use a simple view ordering ... too bad.
+ viewOrdering = new SimpleViewOrdering();
+ }
+
+ viewOrdering.setViews(views);
+ final List<View> sortedViews = viewOrdering.getSortedViews();
+ final List<ShapeEditPart> sortedEditParts = new ArrayList<ShapeEditPart>(sortedViews.size());
+ final Iterator<View> iterSortedViews = sortedViews.listIterator();
+ while (iterSortedViews.hasNext()) {
+ final View currentView = iterSortedViews.next();
+ final ShapeEditPart currentEditPart = viewsToEditPartMap.get(currentView);
+ sortedEditParts.add(currentEditPart);
+ }
+ return createNodeChangeBoundCommands(sortedEditParts);
}
/**
- * Returns a map : MappingName(String) -&gt; ViewOrdering.
- *
- * @return a map : MappingName(String) -&gt; ViewOrdering.
+ * Create the change bounds commands.
+ *
+ * @param sortedNodes
+ * the nodes to move.
+ * @return the change bounds command.
*/
- private Map getMappingToViewOrdering() {
- Map result = new HashMap();
- result.put(Uml2Constants.LIFELINE_MAPPING_NAME, new LifelineOrdering());
- result.put(Uml2Constants.MESSAGE_MAPPING_NAME, new MessageOrdering());
- result.put(Uml2Constants.CLASS_MAPPING_NAME, this.classifierOrdering);
- result.put(Uml2Constants.INTERFACE_MAPPING_NAME, this.classifierOrdering);
+ protected Command createNodeChangeBoundCommands(final List<ShapeEditPart> sortedNodes) {
+ final CompoundCommand result = new CompoundCommand();
+ final Iterator<ShapeEditPart> iterEditParts = sortedNodes.iterator();
+ int currentX = 0;
+ while (iterEditParts.hasNext()) {
+ final ShapeEditPart shapeEditPart = iterEditParts.next();
+ if (!(shapeEditPart instanceof IBorderItemEditPart)) {
+
+ final View view = shapeEditPart.getNotationView();
+ // the zoom.
+ double scale = 1.0;
+ if (shapeEditPart.getRoot() instanceof DiagramRootEditPart) {
+ final ZoomManager zoomManager = ((DiagramRootEditPart) shapeEditPart.getRoot()).getZoomManager();
+ scale = zoomManager.getZoom();
+ }
+ //
+ // Compute request data.
+ final Point ptOldLocation = shapeEditPart.getFigure().getBounds().getLocation();
+ // shapeEditPart.getFigure().translateToAbsolute(ptOldLocation);
+ final int locationX = horizontal ? currentX + this.getPadding().left : this.getPadding().left;
+ final int locationY = horizontal ? this.getPadding().top : currentX + this.getPadding().top;
+ final Point ptLocation = new Point(locationX, locationY);
+ final Dimension delta = ptLocation.getDifference(ptOldLocation);
+
+ final Object existingRequest = this.findRequest(view, org.eclipse.gef.RequestConstants.REQ_MOVE);
+ int step = 0;
+ if (existingRequest == null) {
+ final ChangeBoundsRequest request = new ChangeBoundsRequest(org.eclipse.gef.RequestConstants.REQ_MOVE);
+ request.setEditParts(shapeEditPart);
+ request.setMoveDelta(new PrecisionPoint(delta.width * scale, delta.height * scale));
+ request.setLocation(new PrecisionPoint(ptLocation.x * scale, ptLocation.y * scale));
+ step = this.horizontal ? getBounds(shapeEditPart).width : getBounds(shapeEditPart).height;
+
+ final Command cmd = this.buildCommandWrapper(request, shapeEditPart);
+ if (cmd != null && cmd.canExecute()) {
+ result.add(cmd);
+ // this.getViewsToChangeBoundsRequest().put(view,
+ // request);
+ }
+ } else if (existingRequest instanceof ChangeBoundsRequest) {
+ final ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) existingRequest;
+ changeBoundsRequest.setMoveDelta(new PrecisionPoint(delta.width * scale, delta.height * scale));
+ changeBoundsRequest.setLocation(new PrecisionPoint(ptLocation.x * scale, ptLocation.y * scale));
+
+ step = this.horizontal ? getBounds(shapeEditPart).width : getBounds(shapeEditPart).height;
+ }
+ currentX += horizontal ? step + getPadding().right + getPadding().left : step + this.getPadding().bottom + this.getPadding().top;
+
+ // check the size of the container.
+ EditPart container = shapeEditPart.getParent();
+ while (container instanceof CompartmentEditPart) {
+ container = container.getParent();
+ }
+ if (container instanceof ShapeEditPart) {
+ final ShapeEditPart containerEditPart = (ShapeEditPart) container;
+
+ // The minimum witdh
+ final int minWidth = this.horizontal ? ((getPadding().left + getPadding().right) * sortedNodes.size()) + (getNodeMaxWidth(sortedNodes) * sortedNodes.size())
+ : getPadding().left + getNodeMaxWidth(sortedNodes) + getPadding().right;
+ // The minimum height
+ final int minHeight = this.horizontal ? getPadding().top + this.getNodeMaxHeight(sortedNodes) + this.getPadding().bottom
+ : ((getPadding().top + getPadding().bottom) * sortedNodes.size()) + (this.getNodeMaxHeight(sortedNodes) * sortedNodes.size());
+
+ final Dimension minDimension = new Dimension(minWidth, minHeight);
+
+ final Dimension difference = minDimension.getShrinked(containerEditPart.getFigure().getBounds().getSize());
+ if (difference.width > 0 || difference.height > 0) {
+ final Object existingContainerRequest = this.findRequest(containerEditPart, org.eclipse.gef.RequestConstants.REQ_RESIZE); // ;this.getViewsToChangeBoundsRequest().get(containerEditPart.getNotationView());
+ createChangeBoundsCommand(result, existingContainerRequest, containerEditPart, difference, scale);
+ }
+
+ }
+
+ }
+ }
return result;
}
-}
+ private void createChangeBoundsCommand(final CompoundCommand compoundCommand, final Object existingContainerRequest, final ShapeEditPart containerEditPart, final Dimension difference,
+ final double scale) {
-
-</pre>
- <p>Once this has been implemented, we need to add the extension to the plugin.xml :</p>
- <p>
- <img border="0" src="images/arrange-all/arrange-all-provider-extension.png"/>
- </p>
- <pre><code><extension point="org.eclipse.sirius.diagram.viewOrderingProvider">
- <viewOrderingProvider providerClass="com.example.uml2.specific.provider.Uml2ViewOrderingProvider" />
-</extension>
-</code></pre>
- <h2 id="HowtomapaLayoutProviderwithaDiagram">How to map a Layout Provider with a Diagram</h2>
- <p>Now, we know how to both order and arrange views. We still need to let Sirius know that we want to use a custom Layout Provider for a specific Diagram.</p>
- <p>
- <img border="0" src="images/arrange-all/airlayoutprovider.jpg"/>
- </p>
- <p>Here is a provider designed for an UML2 modeler:</p>
- <pre>public class Uml2LayoutProvider implements LayoutProvider {
-
- /** The GMF layout provider. */
- private CompoundLayoutProvider layoutProvider;
-
- /** The class diagram layout provider. */
- private GridLayoutProvider classDiagramLayoutProvider;
-
- /** The package hierarchy layout provider. */
- private GridLayoutProvider packageHierarchyLayoutProvider;
-
-
- public AbstractLayoutEditPartProvider getLayoutNodeProvider(IGraphicalEditPart container) {
- if (isSequenceDiagram(container)) {
- if (this.layoutProvider == null) {
- this.layoutProvider = new CompoundLayoutProvider();
- LineLayoutProvider lineLayoutProvider = new LineLayoutProvider();
- lineLayoutProvider.getPadding().right = 80;
- lineLayoutProvider.setHorizontal(true);
- this.layoutProvider.addProvider(lineLayoutProvider);
- inlineEdgeLayoutProvider inlineEdgeLayoutProvider = new InlineEdgeLayoutProvider();
- inlineEdgeLayoutProvider.setSide(PositionConstants.EAST_WEST);
- inlineEdgeLayoutProvider.setStart(PositionConstants.RIGHT);
- inlineEdgeLayoutProvider.setAlignment(PositionConstants.VERTICAL);
- inlineEdgeLayoutProvider.setChangeNodeHeight(true);
- inlineEdgeLayoutProvider.setChangeNodeWidth(true);
- inlineEdgeLayoutProvider.getPaddings().top = 50;
- this.layoutProvider.addProvider(inlineEdgeLayoutProvider);
+ if (existingContainerRequest == null) {
+ final ChangeBoundsRequest changeBoundsRequest = new ChangeBoundsRequest();
+ changeBoundsRequest.setEditParts(containerEditPart);
+ changeBoundsRequest.setResizeDirection(PositionConstants.SOUTH_EAST);
+ changeBoundsRequest.setSizeDelta(new Dimension((int) (difference.width * scale), (int) (difference.height * scale)));
+ changeBoundsRequest.setLocation(new Point(0, 0));
+ changeBoundsRequest.setType(org.eclipse.gef.RequestConstants.REQ_RESIZE);
+ final Command cmd = this.buildCommandWrapper(changeBoundsRequest, containerEditPart);
+ if (cmd.canExecute()) {
+ compoundCommand.add(cmd);
+ // this.getViewsToChangeBoundsRequest().put(containerEditPart.getNotationView(),
+ // changeBoundsRequest);
}
- return this.layoutProvider;
- } else if (isClassDiagram(container)) {
- return this.getClassDiagramLayoutProvider();
- } else if (isPackageHierarchyDiagram(container)) {
- return this.getPackageHierarchyLayoutProvider();
+ } else if (existingContainerRequest instanceof ChangeBoundsRequest) {
+ final ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) existingContainerRequest;
+ changeBoundsRequest.setResizeDirection(PositionConstants.SOUTH_EAST);
+ changeBoundsRequest.setSizeDelta(new Dimension((int) (difference.width * scale), (int) (difference.height * scale)));
+ }
+ }
+
+ /**
+ * Return the maximum width of all nodes (instances of {@link ShapeEditPart} ) that are in the specified list.
+ *
+ * @param nodes
+ * the nodes.
+ * @return the maximum width of all nodes that are in the specified list.
+ */
+ protected int getNodeMaxWidth(final List<ShapeEditPart> nodes) {
+ int max = -1;
+ for (final ShapeEditPart shapeEditPart : nodes) {
+ final Object existingRequest = this.getViewsToChangeBoundsRequest().get(shapeEditPart.getNotationView());
+ int width = shapeEditPart.getFigure().getBounds().width;
+ if (existingRequest instanceof ChangeBoundsRequest) {
+ width = width + ((ChangeBoundsRequest) existingRequest).getSizeDelta().width;
+ }
+ if (width > max) {
+ max = width;
+ }
+ }
+ return max;
+ }
+
+ /**
+ * Return the maximum height of all nodes (instances of {@link ShapeEditPart}) that are in the specified list.
+ *
+ * @param nodes
+ * the nodes.
+ * @return the maximum width of all nodes that are in the specified list.
+ */
+ protected int getNodeMaxHeight(final List<ShapeEditPart> nodes) {
+ int max = -1;
+ for (final ShapeEditPart shapeEditPart : nodes) {
+ final int height = this.getBounds(shapeEditPart).height;
+ if (height > max) {
+ max = height;
+ }
+ }
+ return max;
+ }
+
+ @Override
+ public boolean provides(final IOperation operation) {
+ final View cview = getContainer(operation);
+ if (cview == null) {
+ return false;
+ }
+ final IAdaptable layoutHint = ((ILayoutNodeOperation) operation).getLayoutHint();
+ final String layoutType = layoutHint.getAdapter(String.class);
+ return LayoutType.DEFAULT.equals(layoutType);
+ }
+
+ /**
+ * Return the padding to use.
+ *
+ * @return the padding to use.
+ */
+ public Insets getPadding() {
+ return DEFAULT_PADDING;
+ }
+
+ /**
+ * Get the container edit part of an object list. Currently the function takes only the first object of the list
+ *
+ * @param selectedObjects
+ * the selected object
+ * @return the container edit part
+ */
+ protected IGraphicalEditPart getContainerEditPart(final List<EditPart> selectedObjects) {
+ if (selectedObjects != null && !selectedObjects.isEmpty()) {
+ return (IGraphicalEditPart) (selectedObjects.iterator().next()).getParent();
}
return null;
}
- public boolean provides(IGraphicalEditPart container) {
- return (isClassDiagram(container) &amp;&amp; isAbleToLayoutClassDiagram(container)) || isSequenceDiagram(container) || isPackageHierarchyDiagram(container);
- }
-
- private boolean isSequenceDiagram(IGraphicalEditPart container) {
- if (container instanceof AbstractDDiagramEditPart) {
- AbstractDDiagramEditPart editPart = (AbstractDDiagramEditPart) container;
- if (editPart.resolveSemanticElement() instanceof DDiagram) {
- DDiagram diagram = (DDiagram) editPart.resolveSemanticElement();
- if (viewPoint.getDescription() != null) {
- DiagramDescription diagramDescription = diagram.getDescription();
- return Uml2Constants.SEQUENCE_DIAGRAM_DESCRIPTION_NAME.equals(diagramDescription.getName());
- }
- }
+}
+</code></pre>
+ <h4 id="Allowvieworderingcustomization">Allow view ordering customization</h4>
+ <p>If you want to add the capability for other developers to customize the order the views are laid out in your layout algorithm, you have to use the Sirius view ordering API. For example you will have in your
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.provider.LineLayoutProvider.layoutEditParts(List, IAdaptable)</code> method of your layout provider the following code:
+ </p>
+ <pre><code>ViewOrdering viewOrdering = ViewOrderingHint.getInstance().consumeViewOrdering(getContainerEditPart(selectedObjects).getNotationView());
+ if (viewOrdering == null) {
+ //Use the default one that return the same order.
+ viewOrdering = new SimpleViewOrdering();
}
- return false;
- }
- private boolean isClassDiagram(IGraphicalEditPart container) {
- if (container instanceof AbstractDDiagramEditPart) {
- AbstractDDiagramEditPart editPart = (AbstractDDiagramEditPart) container;
- if (editPart.resolveSemanticElement() instanceof ViewPoint) {
- DDiagram diagram = (DDaiagram) editPart.resolveSemanticElement();
- if (diagram.getDescription() != null) {
- DiagramDescription diagramDescription = diagram.getDescription();
- return Uml2Constants.CLASS_DIAGRAM_DESCRIPTION_NAME.equals(diagramDescription.getName());
- }
- }
+ viewOrdering.setViews(views);
+ final List<View> sortedViews = viewOrdering.getSortedViews();
+</code></pre>
+ <p>with the method
+ <code>getContainerEditPart</code> that would be :
+ </p>
+ <pre><code>protected IGraphicalEditPart getContainerEditPart(final List<EditPart> selectedObjects) {
+ if (selectedObjects != null && !selectedObjects.isEmpty()) {
+ return (IGraphicalEditPart) (selectedObjects.iterator().next()).getParent();
}
- return false;
+ return null;
}
+</code></pre>
+ <p>Then you will apply your layout algorithm on those ordered views.</p>
+ <h3 id="IntegrateyourcustomlayoutalgorithmtoSirius">Integrate your custom layout algorithm to Sirius </h3>
+ <p>Three extension points are available to provide your custom algorithms.</p>
+ <ul>
+ <li>the GMF one
+ <code>org.eclipse.gmf.runtime.diagram.ui.layoutProviders</code> is the high level one. It does not contains specificities linked to Sirius API. You will have to handle those on your own.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.layoutProvider</code> is the oldest Sirius extension point. It avoids you to handle specificities linked to Sirius API.
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.customLayoutAlgorithmProvider</code> is the new one used by ELK it avoids you to handle specificities linked to Sirius API. It also allows you to let specifiers configure your layout algorithm directly in the VSM. The layout algorithm from PinnedElementLayoutProvider and BorderedItemAwareLayoutProvider will be applied after your layouting pass. You should use this one if it fits your needs.
+ </li>
+ </ul>
+ <h4 id="org.eclipse.sirius.diagram.ui.customLayoutAlgorithmProvider">org.eclipse.sirius.diagram.ui.customLayoutAlgorithmProvider</h4>
+ <p>This extension point requires a sub class of
+ <code>CustomLayoutAlgorithmProvider</code> that will provide your layout algorithm(s) as
+ <code>CustomLayoutAlgorithm</code> based on
+ <code>DefaultLayoutProvider</code> class.
+ </p>
+ <p>When provided, Sirius will expose your algorithm in the VSM like for ELK integration:</p>
+ <img border="0" src="images/arrange-all/arrange-all-siriusVSMIntegration.png"/>
+ <p>The API is the following: </p>
+ <img border="0" src="images/arrange-all/arrange-all-customLayoutAlgorithmProvider.png"/>
+ <h5 id="CustomLayoutAlgorithmProvider">CustomLayoutAlgorithmProvider</h5>
+ <p>This interface contains one method to implement: </p>
+ <ul>
+ <li>
+ <code>List<CustomLayoutAlgorithm> getCustomLayoutAlgorithms()</code> It must returns a
+ <code>CustomLayoutAlgorithm</code> per layout algorithm you want to provide to the Sirius environment.
+ </li>
+ </ul>
+ <h5 id="CustomLayoutAlgorithm">CustomLayoutAlgorithm</h5>
+ <p>Allows you to provide an instance of the layout algorithm to be used by Sirius as well as all the options to configure it and that will be available from the VSM.
+ <br/>The API is the following:
+ </p>
+ <img border="0" src="images/arrange-all/arrange-all-customLayoutAlgorithm.png"/>
+ <p>You will have to provide it by using the constructor: </p>
+ <ul>
+ <li>an id for your algorithm. This id should be unique.</li>
+ <li>a label that will be used when displaying information about your algorithm in Sirius.</li>
+ <li>a
+ <code>Supplier<DefaultLayoutProvider></code> that will allow Sirius to instantiate your layout algorithm when needed.
+ </li>
+ <li>a map of
+ <code>Map<String, LayoutOption></code> that will contain the options allowing to configure your algorithm and that will be readable by Sirius. To create option you must use the
+ <code>LayoutOptionFactory</code> described below. Option type supported are the following:
+ <ul>
+ <li>
+ <code>Boolean</code>
+ </li>
+ <li>
+ <code>Integer</code>
+ </li>
+ <li>
+ <code>String</code>
+ </li>
+ <li>
+ <code>Double</code>
+ </li>
+ <li>
+ <code>Enum</code>
+ </li>
+ <li>
+ <code>EnumSet</code>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <h5 id="LayoutOptionFactory">LayoutOptionFactory</h5>
+ <p>The
+ <code>LayoutOptionFactory</code> must be used to create an option to give to a
+ <code>CustomLayoutAlgorithm</code>. This option will be readable by Sirius and offered to VSM specifiers.
+ </p>
+ <pre><code>LayoutOptionFactory layoutOptionFactory = new LayoutOptionFactory();
- private boolean isPackageHierarchyDiagram(IGraphicalEditPart container) {
- if (container instanceof AbstractDDiagramEditPart) {
- AbstractDDiagramEditPart editPart = (AbstractDDiagramEditPart) container;
- if (editPart.resolveSemanticElement() instanceof DDiagram) {
- DDiagram diagram = (DDiagram) editPart.resolveSemanticElement();
- if (viewPoint.getDescription() != null) {
- DiagramDescription diagramDescription = diagram.getDescription();
- return Uml2Constants.PACKAGE_HIERARCHY_DIAGRAM_DESCRIPTION_NAME.equals(diagramDescription.getName());
- }
- }
- }
- return false;
- }
+</code></pre>
+ <p>This factory contains a method per option type handled. The created option will have:</p>
+ <ul>
+ <li>An
+ <strong>id</strong> to identify it. Should be unique.
+ </li>
+ <li>A
+ <strong>label</strong> to be display in the Sirius environment.
+ </li>
+ <li>A
+ <strong>description</strong> that will be available to Sirius specifier when modifying it.
+ </li>
+ <li>The available
+ <strong>value(s)</strong> to select for enum and enum set.
+ </li>
+ </ul>
+ <p>For example, the ELK integration is the following:</p>
+ <pre><code>public class ELKAlgorithmProvider implements CustomLayoutAlgorithmProvider {
- private boolean isAbleToLayoutClassDiagram(IGraphicalEditPart container) {
- if (container instanceof DiagramEditPart) {
- int nbNoInherance = 0;
- int nbInheritance = 0;
- Iterator iterConnections = ((DiagramEditPart) container).getConnections().iterator();
- while (iterConnections.hasNext()) {
- ConnectionEditPart connectionEditPart = (ConnectionEditPart) iterConnections.next();
- EObject semantic = connectionEditPart.resolveSemanticElement();
- if (semantic != null &amp;&amp; semantic instanceof DecorateSemanticElement) {
- EObject realSemantic = ((DecorateSemanticElement) semantic).getTarget();
- if (realSemantic instanceof Generalization) {
- nbInheritance++;
- } else {
- nbNoInherance++;
+ @Override
+ public List<CustomLayoutAlgorithm> getCustomLayoutAlgorithms() {
+ List<CustomLayoutAlgorithm> layoutAlgorithms = new ArrayList<>();
+ // we fill the Sirius layout algorithm registry with all ELK algorithms.
+ Collection<LayoutAlgorithmData> algorithmData = LayoutMetaDataService.getInstance().getAlgorithmData();
+ for (LayoutAlgorithmData layoutAlgorithmData : algorithmData) {
+
+ List<LayoutOptionData> optionDatas = LayoutMetaDataService.getInstance().getOptionData(layoutAlgorithmData, Target.PARENTS);
+ Map<String, LayoutOption> layoutOptions = new HashMap<>();
+ LayoutOptionFactory layoutOptionFactory = new LayoutOptionFactory();
+ for (LayoutOptionData layoutOptionData : optionDatas) {
+ if (!CoreOptions.ALGORITHM.getId().equals(layoutOptionData.getId()) && !layoutOptionData.getVisibility().equals(Visibility.HIDDEN)) {
+ switch (layoutOptionData.getType()) {
+ case STRING:
+ layoutOptions.put(layoutOptionData.getId(), layoutOptionFactory.createStringOption((String) layoutOptionData.getDefault(), layoutOptionData.getId(),
+ layoutOptionData.getDescription(), layoutOptionData.getName()));
+ break;
+ case BOOLEAN:
+ layoutOptions.put(layoutOptionData.getId(), layoutOptionFactory.createBooleanOption((Boolean) layoutOptionData.getDefault(), layoutOptionData.getId(),
+ layoutOptionData.getDescription(), layoutOptionData.getName()));
+ break;
+ case INT:
+ layoutOptions.put(layoutOptionData.getId(), layoutOptionFactory.createIntegerOption((Integer) layoutOptionData.getDefault(), layoutOptionData.getId(),
+ layoutOptionData.getDescription(), layoutOptionData.getName()));
+ break;
+ case DOUBLE:
+ layoutOptions.put(layoutOptionData.getId(), layoutOptionFactory.createDoubleOption((Double) layoutOptionData.getDefault(), layoutOptionData.getId(),
+ layoutOptionData.getDescription(), layoutOptionData.getName()));
+ break;
+ case ENUMSET:
+ case ENUM:
+
+ String[] choices = layoutOptionData.getChoices();
+ List<EnumChoice> choicesList = new ArrayList<>();
+ for (int i = 0; i < choices.length; i++) {
+ String choiceId = choices[i];
+ choicesList.add(new EnumChoice(choiceId, ""));
+
+ }
+ String defaultValue = null;
+ Object defaultObject = layoutOptionData.getDefaultDefault();
+ if (defaultObject instanceof Enum) {
+ defaultValue = ((Enum<?>) defaultObject).name();
+ }
+ if (layoutOptionData.getType() == Type.ENUM) {
+ layoutOptions.put(layoutOptionData.getId(),
+ layoutOptionFactory.createEnumOption(choicesList, layoutOptionData.getId(), layoutOptionData.getDescription(), layoutOptionData.getName(), defaultValue));
+ } else {
+ layoutOptions.put(layoutOptionData.getId(),
+ layoutOptionFactory.createEnumSetOption(choicesList, layoutOptionData.getId(), layoutOptionData.getDescription(), layoutOptionData.getName()));
+ }
+
+ break;
+ default:
+ break;
}
- } else {
- nbNoInherance++;
}
}
- return nbInheritance &gt; nbNoInherance;
+ layoutAlgorithms.add(new CustomLayoutAlgorithm(layoutAlgorithmData.getId(), layoutAlgorithmData.getName(), () -> new ELKLayoutNodeProvider(), layoutOptions));
+ }
+ return layoutAlgorithms;
+ }
+
+}
+
+</code></pre>
+ <h5 id="DefaultLayoutProvider3">DefaultLayoutProvider</h5>
+ <p>This class contains the core layout algorithm. When a user calls an arrange-all on a diagram that will be configured to use your layout algorithm, an instance of this class is created. You will be given the parts to layout. Then it is your job to layout it as you want. </p>
+ <p>For example, the ELK integration have the following:</p>
+ <pre><code>public class ELKLayoutNodeProvider extends DefaultLayoutProvider {
+
+ @Override
+ public Command layoutEditParts(final List selectedObjects, final IAdaptable layoutHint) {
+ Injector injector = LayoutConnectorsService.getInstance().getInjector(null, selectedObjects);
+ ElkDiagramLayoutConnector connector = injector.getInstance(ElkDiagramLayoutConnector.class);
+ LayoutMapping layoutMapping = connector.buildLayoutGraph(null, selectedObjects);
+ connector.layout(layoutMapping);
+ connector.transferLayout(layoutMapping);
+ return connector.getApplyCommand(layoutMapping);
+ }
+
+}
+
+
+</code></pre>
+ <h4 id="org.eclipse.sirius.diagram.ui.layoutProvider">org.eclipse.sirius.diagram.ui.layoutProvider</h4>
+ <p>To be used, your custom algorithm should be declared to Sirius with the provided extension point
+ <code>org.eclipse.sirius.diagram.ui.layoutProvider</code>. This extension point requires a sub class of
+ <code>LayoutProvider</code> that will provide your layout algorithm. Its API is the following:
+ </p>
+ <img border="0" src="images/arrange-all/arrange-all-layoutProvider.png"/>
+ <p>The
+ <code>LayoutProvider</code> interface contains the following methods:
+ </p>
+ <ul>
+ <li>
+ <code>isDiagramLayoutProvider</code>: This method should return true if the provided layout algorithm can handle layouting from root diagram part when this part is layout action’s target. It means your provider will be called with
+ <code>org.eclipse.gmf.runtime.diagram.ui.services.layout.AbstractLayoutEditPartProvider.layoutEditParts(GraphicalEditPart, IAdaptable)</code> in this case. The call will only be done if your provider inherits from
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.provider.AbstractLayoutProvider</code>. If not or if
+ <code>isDiagramLayoutProvider</code> returns false, then the method
+ <code>org.eclipse.sirius.diagram.ui.tools.api.layout.provider.DefaultLayoutProvider.layoutEditParts(List, IAdaptable)</code> is called and will delegate to the method
+ <code>layoutEditParts(List, IAdaptable)</code> of your provider.
+ </li>
+ <li>
+ <code>provides</code>: Should return true if your
+ <code>LayoutProvider</code> do provide a layout algorithm for the view associated to the given edit part and should be used. False otherwise.
+ </li>
+ <li>
+ <code>getLayoutNodeProvider</code>: Return the layout algorithm component to use to lay out the diagram elements target of the layout action.
+ </li>
+ </ul>
+ <p>For example the left right composite providers is declared as followed:</p>
+ <pre><code>public class CompositeLeftRightProvider implements LayoutProvider {
+ /** The delegated GMF provider. */
+ private AbstractLayoutEditPartProvider layoutNodeProvider;
+ public AbstractLayoutEditPartProvider getLayoutNodeProvider(final IGraphicalEditPart container) {
+ if (this.layoutNodeProvider == null) {
+ final CompoundLayoutProvider clp = new CompoundLayoutProvider();
+ final CompositeLeftRightLayoutProvider cdtp = new CompositeLeftRightLayoutProvider();
+ clp.addProvider(cdtp);
+ clp.addProvider(new PinnedElementsLayoutProvider(cdtp));
+ if (ENABLE_BORDERED_NODES_ARRANGE_ALL) {
+ // ArrangeSelectionLayoutProvider wrap all providers to manage
+ // the selected diagram element on diagram "Arrange all"
+ AbstractLayoutProvider abstractLayoutProvider = BorderItemAwareLayoutProviderHelper.createBorderItemAwareLayoutProvider(clp);
+ this.layoutNodeProvider = new ArrangeSelectionLayoutProvider(abstractLayoutProvider);
+ } else {
+ this.layoutNodeProvider = new ArrangeSelectionLayoutProvider(clp);
+ }
+ }
+ return this.layoutNodeProvider;
+ }
+
+ public boolean provides(final IGraphicalEditPart container) {
+ return isInDDiagramWithConfiguredLeftRightLayout(container.getNotationView());
+ }
+
+ private boolean isInDDiagramWithConfiguredLeftRightLayout(final View view) {
+ final Layout foundLayout = DiagramLayoutCustomization.findLayoutSettings(view);
+ if (foundLayout instanceof CompositeLayout) {
+ return ((CompositeLayout) foundLayout).getDirection() == LayoutDirection.LEFT_TO_RIGHT;
}
return false;
}
- /**
- * Returns the class diagram layout provider.
- *
- * @return the class diagram layout provider.
- */
- public GridLayoutProvider getClassDiagramLayoutProvider() {
- if (classDiagramLayoutProvider == null) {
- classDiagramLayoutProvider = new GridLayoutProvider();
- classDiagramLayoutProvider.setColumnSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
- classDiagramLayoutProvider.setLineSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
- classDiagramLayoutProvider.getPadding().top = 20;
- classDiagramLayoutProvider.getPadding().bottom = 20;
- classDiagramLayoutProvider.getPadding().left = 20;
- classDiagramLayoutProvider.getPadding().right = 20;
- }
- return classDiagramLayoutProvider;
- }
-
- public GridLayoutProvider getPackageHierarchyLayoutProvider() {
- if (packageHierarchyLayoutProvider == null) {
- packageHierarchyLayoutProvider = new GridLayoutProvider();
- packageHierarchyLayoutProvider.setColumnSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
- packageHierarchyLayoutProvider.setLineSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
- packageHierarchyLayoutProvider.getPadding().top = 20;
- packageHierarchyLayoutProvider.getPadding().bottom = 20;
- packageHierarchyLayoutProvider.getPadding().left = 30;
- packageHierarchyLayoutProvider.getPadding().right = 30;
- }
- return packageHierarchyLayoutProvider;
- }
-
public boolean isDiagramLayoutProvider() {
- return false;
+ return true;
}
-
}
-</pre>
- <p>Finally, we add the extension in the plug-in file :</p>
- <p>
+</code></pre>
+ <p>The layout algorithm provided by this
+ <code>LayoutProvider</code> will be used if the view to layout is associated to a Sirius mapping contained by a diagram mapping declaring the left right composite provider in the VSM.
+ </p>
+ <p>After this provider creation, you have to registered it with the extension point:
+ <br/>
<img border="0" src="images/arrange-all/arrange-all-layoutprovider-extension.png"/>
</p>
- <pre><code><extension point="org.eclipse.sirius.diagram.layoutProvider">
- <layoutProvider priority="high" providerClass="com.example.uml2.specific.provider.Uml2LayoutProvider">
- </layoutProvider>
-</extension>
+ <p>A priority can be set. If two layout providers provide layouting for a same object, the one with the higher priority will be used.</p>
+ <h5 id="Composingyourlayoutproviders">Composing your layout providers</h5>
+ <p>You may want to reuse some of the Sirius layout providers in addition of your own layout provider to avoid code rewrite or duplication if the layouting you are doing does not conflict with the layouting other providers are doing.</p>
+ <p>To do that, Sirius offers a
+ <code>CompoundLayoutProvider</code> allowing to trigger layouting of many compatible providers in their insertion order. The compatible providers are:
+ </p>
+ <ul>
+ <li>The PinnedElementsLayoutProvider</li>
+ <li>The LineLayoutProvider</li>
+ <li>The GridLayoutProvider</li>
+ </ul>
+ <p>Also some providers are not compatible with the compound one but instead use a wrapping mechanism. They wrap another provider. Then their layouting code is called before or after the wrapped’s code:</p>
+ <ul>
+ <li>The ArrangeSelectionLayoutProvider is called before wrapped provider</li>
+ <li>The ArrangeAllOnlyLayoutProvider is called before wrapped provider</li>
+ <li>The BorderItemAwareLayoutProvider is called after wrapped provider. Its initialization is done with the code </li>
+ </ul>
+ <pre><code>BorderItemAwareLayoutProviderHelper.createBorderItemAwareLayoutProvider(clp);
</code></pre>
- <h2 id="EnabletheborderednodeslayoutonacustomLayoutProvider">Enable the bordered nodes layout on a custom LayoutProvider</h2>
- <p>The bordered nodes layout arranges all the bordered nodes which are connected to one edge. This arrange reduces the path of the edge between each extremity.</p>
- <p>Currently, the layout of the bordered nodes is activated on the default Layout Provider (CompositeDownTopProvider, CompositeLeftRightProvider and OrderedTreeLayoutProvider. To enable the bordered nodes layout on a new LayoutProvider, in the method getLayoutNodeProvider(IGraphicalEditPart), you must create a new BorderItemAwareLayoutProvider with your own LayoutProvider in parameter. This new BorderItemAwareLayoutProvider must be return instead of your own.</p>
- <p>Example of the OrderedTreeLayoutProvider</p>
- <pre><code>public AbstractLayoutEditPartProvider getLayoutNodeProvider(IGraphicalEditPart container) {
- if (isDDiagramWithConfiguredOrderedTreeLayout(container)) {
- //Get the expected layout provider
- AbstractLayoutProvider layoutNodeProvider = getGridLayoutProvider();
- //Create new BorderItemAwareLayoutProvider
- layoutNodeProvider = BorderItemAwareLayoutProviderHelper.createBorderItemAwareLayoutProvider(layoutNodeProvider);
- //Return the BorderItemAwareLayoutProvider which wrap the previous one
- return layoutNodeProvider;
- } else {
- return null;
+ <p>
+ <code>PinnedElementsLayoutProvider</code> should always do its layouting before BorderItemAwareLayoutProvider but after any other layouting.
+ <br/>
+ <code>BorderItemAwareLayoutProvider</code> should always do its layouting at the end.
+ <br/>To know more about these providers you can read the section
+ <a href="#siriusLayoutProviders">Sirius Layout Providers</a>.
+ </p>
+ <p>The
+ <code>CompoundLayoutProvider</code> API is the following:
+ </p>
+ <img border="0" src="images/arrange-all/arrange-all-CompoundLayoutProvider.png"/>
+ <p>The
+ <code>provides</code> and
+ <code>layoutEditParts</code> methods delegate to registered providers. You should not override those.
+ <br/>You only have to add all the providers that should be used to layout with method
+ <code>addProvider</code>.
+ </p>
+ <h6 id="Example">Example</h6>
+ <p>Compound and wrapping providers are used for example by the composite providers that can be used from a VSM declaration:</p>
+ <pre><code>public AbstractLayoutEditPartProvider getLayoutNodeProvider(final IGraphicalEditPart container) {
+ if (this.layoutNodeProvider == null) {
+ final CompoundLayoutProvider clp = new CompoundLayoutProvider();
+ final CompositeDownTopLayoutProvider cdtp = new CompositeDownTopLayoutProvider();
+ clp.addProvider(cdtp);
+ clp.addProvider(new PinnedElementsLayoutProvider(cdtp));
+ AbstractLayoutProvider abstractLayoutProvider = BorderItemAwareLayoutProviderHelper.createBorderItemAwareLayoutProvider(clp);
+ this.layoutNodeProvider = new ArrangeSelectionLayoutProvider(abstractLayoutProvider);
+ }
+ return this.layoutNodeProvider;
}
-}
</code></pre>
+ <p>We see that this composite provider is composed with the
+ <code>PinnedElementsLayoutProvider</code> in a compound provider. The composite provider does its layouting first but does not handle pinned elements. The pinned one restore pinned elements to their original position and fix potential overlaps.
+ <br/>Then the compound provider is wrapped in a
+ <code>BorderItemAwareLayoutProvider</code> that is also wrapped in the
+ <code>ArrangeSelectionLayoutProvider</code>.
+ <br/>The layout execution flow is the following:
+ <br/>
+ <code>ArrangeSelectionLayoutProvider</code> is called first. Then
+ <code>CompoundLayoutProvider</code> is called and delegates to
+ <code>CompositeDownTopLayoutProvider</code> first and
+ <code>PinnedElementsLayoutProvider</code> second. Lastly
+ <code>BorderItemAwareLayoutProvider</code> is called.
+ </p>
+ <h4 id="ProvideacustomlayoutalgorithmwithGMFextensionpoint">Provide a custom layout algorithm with GMF extension point</h4>
+ <p>This extension point provided by GMF can be used to provide your custom layout algorithm in Sirius diagram editors if you don’t need any of the features and implementation ease brought by Sirius API.</p>
+ <p>To do that, your layout algorithm in the form of an
+ <code>AbstractLayoutEditPartProvider</code> can be declared in GMF extension point
+ <code>org.eclipse.gmf.runtime.diagram.ui.layoutProviders</code>.
+ </p>
+ <p>The priority of the default one used by Sirius is medium. To be override your priority must be lowest than medium.</p>
</body>
</html>
\ No newline at end of file
diff --git a/doc/developer/images/Sirius - High-Level Architecture Overview.png b/doc/developer/images/Sirius_High-Level_Architecture_Overview.png
similarity index 100%
copy from doc/developer/images/Sirius - High-Level Architecture Overview.png
copy to doc/developer/images/Sirius_High-Level_Architecture_Overview.png
Binary files differ
diff --git a/doc/developer/images/Sirius - High-Level Architecture Overview.svg b/doc/developer/images/Sirius_High-Level_Architecture_Overview.svg
similarity index 100%
copy from doc/developer/images/Sirius - High-Level Architecture Overview.svg
copy to doc/developer/images/Sirius_High-Level_Architecture_Overview.svg
diff --git a/doc/developer/images/Sirius - Representation Refresh-Sync.png b/doc/developer/images/Sirius_Representation_Refresh-Sync.png
similarity index 100%
copy from doc/developer/images/Sirius - Representation Refresh-Sync.png
copy to doc/developer/images/Sirius_Representation_Refresh-Sync.png
Binary files differ
diff --git a/doc/developer/images/Sirius - Representation Refresh-Sync.svg b/doc/developer/images/Sirius_Representation_Refresh-Sync.svg
similarity index 100%
copy from doc/developer/images/Sirius - Representation Refresh-Sync.svg
copy to doc/developer/images/Sirius_Representation_Refresh-Sync.svg
diff --git a/doc/developer/images/arrange-all/arrange-all-CompoundLayoutProvider.png b/doc/developer/images/arrange-all/arrange-all-CompoundLayoutProvider.png
new file mode 100644
index 0000000..1186d4d
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-CompoundLayoutProvider.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-abstractLayoutEditPart.png b/doc/developer/images/arrange-all/arrange-all-abstractLayoutEditPart.png
new file mode 100644
index 0000000..f046f71
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-abstractLayoutEditPart.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-border1.png b/doc/developer/images/arrange-all/arrange-all-border1.png
new file mode 100644
index 0000000..572ffcc
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-border1.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-border2.png b/doc/developer/images/arrange-all/arrange-all-border2.png
new file mode 100644
index 0000000..ce54f9e
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-border2.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-customLayoutAlgorithm.png b/doc/developer/images/arrange-all/arrange-all-customLayoutAlgorithm.png
new file mode 100644
index 0000000..d33165a
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-customLayoutAlgorithm.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-customLayoutAlgorithmProvider.png b/doc/developer/images/arrange-all/arrange-all-customLayoutAlgorithmProvider.png
new file mode 100644
index 0000000..b0a8cb0
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-customLayoutAlgorithmProvider.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-ilayoutNodeproviderApi.png b/doc/developer/images/arrange-all/arrange-all-ilayoutNodeproviderApi.png
new file mode 100644
index 0000000..97485c8
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-ilayoutNodeproviderApi.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-iproviderApi.png b/doc/developer/images/arrange-all/arrange-all-iproviderApi.png
new file mode 100644
index 0000000..66d9771
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-iproviderApi.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-layoutProvider.png b/doc/developer/images/arrange-all/arrange-all-layoutProvider.png
new file mode 100644
index 0000000..d0b2e7c
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-layoutProvider.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-layoutingAPI.png b/doc/developer/images/arrange-all/arrange-all-layoutingAPI.png
new file mode 100644
index 0000000..c62e9ac
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-layoutingAPI.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-layoutprovider-extension.png b/doc/developer/images/arrange-all/arrange-all-layoutprovider-extension.png
index db453d3..3c501d7 100644
--- a/doc/developer/images/arrange-all/arrange-all-layoutprovider-extension.png
+++ b/doc/developer/images/arrange-all/arrange-all-layoutprovider-extension.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-siriusVSMIntegration.png b/doc/developer/images/arrange-all/arrange-all-siriusVSMIntegration.png
new file mode 100644
index 0000000..d8252f7
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-siriusVSMIntegration.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-ui.png b/doc/developer/images/arrange-all/arrange-all-ui.png
new file mode 100644
index 0000000..ef38c70
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-ui.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-viewOrdering.png b/doc/developer/images/arrange-all/arrange-all-viewOrdering.png
new file mode 100644
index 0000000..2608531
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-viewOrdering.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-viewOrdering2.png b/doc/developer/images/arrange-all/arrange-all-viewOrdering2.png
new file mode 100644
index 0000000..3b869bf
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-viewOrdering2.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-viewOrderingArchitecture.png b/doc/developer/images/arrange-all/arrange-all-viewOrderingArchitecture.png
new file mode 100644
index 0000000..fa8a978
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-viewOrderingArchitecture.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-viewOrderingExtensionPoint.png b/doc/developer/images/arrange-all/arrange-all-viewOrderingExtensionPoint.png
new file mode 100644
index 0000000..2dfa5bf
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-viewOrderingExtensionPoint.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-viewOrderingProvider.png b/doc/developer/images/arrange-all/arrange-all-viewOrderingProvider.png
new file mode 100644
index 0000000..5318995
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-viewOrderingProvider.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-vsm.png b/doc/developer/images/arrange-all/arrange-all-vsm.png
new file mode 100644
index 0000000..2008f93
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-vsm.png
Binary files differ
diff --git a/doc/i18n_changes.html b/doc/i18n_changes.html
index 3e9430d..1edd5d5 100644
--- a/doc/i18n_changes.html
+++ b/doc/i18n_changes.html
@@ -11,68 +11,388 @@
<p>This document lists the changes in
<code>TranslatableMessage</code> used for Sirius internationalization in each Sirius version.
</p>
- <h2 id="sirius51">Translation Keys Changes in Sirius 5.1 (from Sirius 5.0)</h2>
+ <h2 id="sirius60">Translation Keys Changes in Sirius 6.0 (from Sirius 5.1)</h2>
<h3 id="MessageKeysAdded">Message Keys Added</h3>
<ul>
- <li>`org.eclipse.sirius.diagram.sequence.Messages.Range_wrongArgument`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.BundledImageShape_attributeAbsent`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_scaleDiagramOnExport`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_showSynchronizeStatusDecoratorLabel`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.RepairGMFbendpointsMigrationParticipant_edgesModified`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.RepairGMFbendpointsMigrationParticipant_title`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SiriusStatusLineContributionItemProvider_diagramSynchronized`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SiriusStatusLineContributionItemProvider_diagramUnsynchronized`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_nodesMoved`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_oneLabelSnapBacked`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_severalLabelsSnapBacked`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_title`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_BottomSidePinnedLabel`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_BottomSidePinnedTooltip`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_LeftSidePinnedLabel`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_LeftSidePinnedTooltip`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_RightSidePinnedLabel`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_RightSidePinnedTooltip`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_TopSidePinnedLabel`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_TopSidePinnedTooltip`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeStatusFigure_diagSynchronized`</li>
- <li>`org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeStatusFigure_diagUnsynchronized`</li>
- <li>`org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_closeSession_action_label`</li>
- <li>`org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_closeSession_action_tooltip`</li>
- <li>`org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_addModelButton_tooltip`</li>
- <li>`org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_newModelButton_tooltip`</li>
- <li>`org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_removeModelButton_tooltip`</li>
- <li>`org.eclipse.sirius.ui.editor.Messages.PluginPageProviderRegistry_badClassType`</li>
- <li>`org.eclipse.sirius.ui.editor.Messages.PluginPageProviderRegistry_classInitialization`</li>
- <li>`org.eclipse.sirius.ui.editor.Messages.SessionEditor_PageActivation_Failure`</li>
- <li>`org.eclipse.sirius.ui.editor.Messages.SessionEditor_PageCommand_Integrity_Error`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractExportRepresentationsAsImagesDialog_autoScaleDiagram`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_message`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_message_plural`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_title`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_title_plural`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_disableViewpointButton_tooltip`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_enableViewpointButton_tooltip`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_newRepresentationButton_tooltip`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_removeRepresentationButton_tooltip`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Active_Representation_Message`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Controlled_Resources_Message`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Error_Removal_Title`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Not_External_Dependency_Message`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.UpdateRepresentationsLocationHandler_errorMsg`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.UpdateRepresentationsLocationHandler_label`</li>
- <li>`org.eclipse.sirius.viewpoint.Messages.DRepresentationDescriptorToDRepresentationLinkManager_repLoading`</li>
- <li>`org.eclipse.sirius.viewpoint.Messages.ModelOperationToTask_cannotCreateTaskWarningMsg`</li>
- <li>`org.eclipse.sirius.viewpoint.Messages.SessionFactoryImpl_ResourceTypeErrorMsg`</li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_sizeGroupLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.GenericConnectionCreationTool_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.InsertBlankSpace_cmdName</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.LayoutAlgorithmProviderRegistry_badClassType</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.LayoutAlgorithmProviderRegistry_classInitialization</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.SetShowingModeCommandAndUpdateActionImage_activateLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.SetShowingModeCommandAndUpdateActionImage_deactivateLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.ShowingModeSwitchingAction_activate</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.ShowingModeSwitchingAction_deactivate</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.ShowingModeSwitchingAction_statusOn</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StandardDiagramServices_expressionMessage</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StandardDiagramServices_expressionTitle</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StandardDiagramServices_expressionTooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StandardDiagramServices_sameETypeMessage</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StandardDiagramServices_sameETypeTitle</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StandardDiagramServices_sameETypeTooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.Messages.NoteAttachmentWithoutSourceOrTargetMigrationParticipant_edgesRemoved</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.Messages.NoteAttachmentWithoutSourceOrTargetMigrationParticipant_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.Messages.UndoRedoCapableEMFCommandFactory_insertHorizontalBlankSpaceNotImplemented</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.Messages.UndoRedoCapableEMFCommandFactory_insertVerticalBlankSpaceNotImplemented</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.workflow.internal.Messages.WorkflowMenuBuilder_NewWorkflow_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.workflow.internal.Messages.WorkflowMenuBuilder_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.AddOptionOverridePropertySection_dialogTitle</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.AddOptionOverridePropertySection_overrideButtonLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.CustomSiriusEditor_failedNavigationExceptionMessage</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.CustomSiriusEditor_failedNavigationMessage</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.CustomSiriusEditor_failedNavigationTitle</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.LayoutOptionValue_defaultLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.OptionOverrideEditorDialog_filteringLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.OptionOverrideEditorDialog_optionDefaultValueColumnLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.OptionOverrideEditorDialog_optionDescriptionLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.OptionOverrideEditorDialog_optionNameColumnLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.OptionOverrideEditorDialog_optionTypeColumnLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.OptionOverrideEditorDialog_tableLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.ServiceNavigator_serviceNavigationDialog_description</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.ServiceNavigator_serviceNavigationDialog_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.editor.Messages.ServiceNavigator_targetInitialization_error</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ext.ide.internal.Messages.DescriptorRegistryEventListener_cannotInstantiateExtension</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ext.ide.internal.Messages.DescriptorRegistryEventListener_extensionAlreadyContributed</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ext.ide.internal.Messages.DescriptorRegistryEventListener_missingAttribute</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.server.internal.Messages.SiriusServerManager_cannotStartServer</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.server.internal.Messages.SiriusServerManager_cannotStopServer</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractExportRepresentationsAsImagesDialog_scalingLevelDiagramLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ExportAction_invalidLevel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ExportAsImage_dialogSizeGroupName</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ExportAsImage_maxLevelLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ExportAsImage_nominalLevelLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ExportAsImage_sizeTooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.No_Browser_Error_Message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.OpenViewpointSelectionBrowser_Error_Message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.SingleRepresentationTreeSelectionDialog_Title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.workflow.ui.page.Messages.WorkflowPage_header_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.workflow.ui.page.Messages.WorkflowPage_tab_name</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.InvalidModelingProjectMarkerUpdaterJob_updateMarkers</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.ModelingModelProvider_addAnotherRepresentationFile</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.ModelingModelProvider_addAnotherRepresentationFileSeveralProjects</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.ModelingModelProvider_mainRepresentationFileDeleted</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.ModelingModelProvider_mainRepresentationFilesOfSomeProjectsDeleted</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.ModelingModelProvider_satusUnsaveDataWillBeLostWithProjectNames</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.ModelingModelProvider_satusUnsavedDataWillBeLost</code>
+ </li>
</ul>
<h3 id="MessageKeysRemoved">Message Keys Removed</h3>
<ul>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_message`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_message_plural`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_title`</li>
- <li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_title_plural`</li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_scaleDiagramOnExport</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractExportRepresentationsAsImagesDialog_autoScaleDiagram</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.InvalidModelingProjectMarkerUpdaterJob_updateMarkers</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ModelingModelProvider_addAnotherRepresentationFile</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ModelingModelProvider_addAnotherRepresentationFileSeveralProjects</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ModelingModelProvider_mainRepresentationFileDeleted</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ModelingModelProvider_mainRepresentationFilesOfSomeProjectsDeleted</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ModelingModelProvider_satusUnsaveDataWillBeLostWithProjectNames</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.ModelingModelProvider_satusUnsavedDataWillBeLost</code>
+ </li>
+ </ul>
+ <h2 id="sirius51">Translation Keys Changes in Sirius 5.1 (from Sirius 5.0)</h2>
+ <h3 id="MessageKeysAdded2">Message Keys Added</h3>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.diagram.sequence.Messages.Range_wrongArgument</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.BundledImageShape_attributeAbsent</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_scaleDiagramOnExport</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_showSynchronizeStatusDecoratorLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.RepairGMFbendpointsMigrationParticipant_edgesModified</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.RepairGMFbendpointsMigrationParticipant_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.SiriusStatusLineContributionItemProvider_diagramSynchronized</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.SiriusStatusLineContributionItemProvider_diagramUnsynchronized</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_nodesMoved</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_oneLabelSnapBacked</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_severalLabelsSnapBacked</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_BottomSidePinnedLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_BottomSidePinnedTooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_LeftSidePinnedLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_LeftSidePinnedTooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_RightSidePinnedLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_RightSidePinnedTooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_TopSidePinnedLabel</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_TopSidePinnedTooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeStatusFigure_diagSynchronized</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeStatusFigure_diagUnsynchronized</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_closeSession_action_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_closeSession_action_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_addModelButton_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_newModelButton_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_removeModelButton_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.PluginPageProviderRegistry_badClassType</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.PluginPageProviderRegistry_classInitialization</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.SessionEditor_PageActivation_Failure</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.ui.editor.Messages.SessionEditor_PageCommand_Integrity_Error</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractExportRepresentationsAsImagesDialog_autoScaleDiagram</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_message_plural</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_title_plural</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_disableViewpointButton_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_enableViewpointButton_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_newRepresentationButton_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_removeRepresentationButton_tooltip</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Active_Representation_Message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Controlled_Resources_Message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Error_Removal_Title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Not_External_Dependency_Message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.UpdateRepresentationsLocationHandler_errorMsg</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.UpdateRepresentationsLocationHandler_label</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.DRepresentationDescriptorToDRepresentationLinkManager_repLoading</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.ModelOperationToTask_cannotCreateTaskWarningMsg</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.Messages.SessionFactoryImpl_ResourceTypeErrorMsg</code>
+ </li>
+ </ul>
+ <h3 id="MessageKeysRemoved2">Message Keys Removed</h3>
+ <ul>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_message</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_message_plural</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_title</code>
+ </li>
+ <li>
+ <code>org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_title_plural</code>
+ </li>
</ul>
<h2 id="sirius50">Translation Keys Changes in Sirius 5.0 (from Sirius 4.1)</h2>
- <h3 id="MessageKeysAdded2">Message Keys Added</h3>
+ <h3 id="MessageKeysAdded3">Message Keys Added</h3>
<ul>
<li>
<code>org.eclipse.sirius.common.acceleo.aql.business.Messages.AQLInterpreter_errorWithExpression</code>
@@ -465,7 +785,7 @@
<code>org.eclipse.sirius.viewpoint.Messages.SessionInterpreter_evaluationError</code>
</li>
</ul>
- <h3 id="MessageKeysRemoved2">Message Keys Removed</h3>
+ <h3 id="MessageKeysRemoved3">Message Keys Removed</h3>
<ul>
<li>
<code>org.eclipse.sirius.editor.properties.Messages.ImportingDefaultPropertiesViewDescriptionCommand_text</code>
diff --git a/doc/images/color_palette.png b/doc/images/color_palette.png
new file mode 100644
index 0000000..f6691c3
--- /dev/null
+++ b/doc/images/color_palette.png
Binary files differ
diff --git a/doc/images/genericEdgeCreationTool.png b/doc/images/genericEdgeCreationTool.png
new file mode 100644
index 0000000..f750891
--- /dev/null
+++ b/doc/images/genericEdgeCreationTool.png
Binary files differ
diff --git a/doc/index.html b/doc/index.html
index 9c68e8a..45f2879 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -109,7 +109,7 @@
</div>
<div class="clear"></div>
- <p><em>Note:</em> This documentation refers to the latest major release of Sirius, version 5.1. For documentation corresponding to previous releases, see <a href="5.0.x/index.html">5.0.x</a>, <a href="4.1.x/index.html">4.1.x</a>, <a href="4.0.x/index.html">4.0.x</a>, <a href="3.1.x/index.html">3.1.x</a>, see <a href="3.0.x/index.html">3.0.x</a>, <a href="2.0.x/index.html">2.0.x</a>, <a href="1.0.x/index.html">1.0.x</a>, or <a href="0.9/index.html">0.9</a>.</p>
+ <p><em>Note:</em> This documentation refers to the latest major release of Sirius, version 6.0. For documentation corresponding to previous releases, see <a href="5.1.x/index.html">5.1.x</a> <a href="5.0.x/index.html">5.0.x</a>, <a href="4.1.x/index.html">4.1.x</a>, <a href="4.0.x/index.html">4.0.x</a>, <a href="3.1.x/index.html">3.1.x</a>, see <a href="3.0.x/index.html">3.0.x</a>, <a href="2.0.x/index.html">2.0.x</a>, <a href="1.0.x/index.html">1.0.x</a>, or <a href="0.9/index.html">0.9</a>.</p>
<div class="clear"></div>
<p>For further information, please visit our website at <a href="http://www.eclipse.org/sirius/" target="_blank">www.eclipse.org/sirius</a>.</p>
</body>
diff --git a/doc/specifier/diagrams/Diagrams.html b/doc/specifier/diagrams/Diagrams.html
index f2786d9..3e693bf 100644
--- a/doc/specifier/diagrams/Diagrams.html
+++ b/doc/specifier/diagrams/Diagrams.html
@@ -185,6 +185,13 @@
<em>Enable Popup Bars</em> flag is set, then when the end-user leaves the mouse pointer still on a diagram (or diagram element) for a small time, a
<em>popup bar</em> will appear with shortcut buttons to all the tools which can be applied in this context. It can be useful to create elements without going to the palette to select tools, but it can also become visually distracting if too many tools are available in the popup bar.
</p>
+ <p>By default, diagrams are displayed with white background. In the
+ <em>Background</em> property section of the
+ <em>Diagram Description</em>, you can add either one of the pre-defined system colors or one which you have defined yourself in a
+ <em>Users Color Palette</em>. See
+ <a href="../general/Colors.html">the general section on colors</a> on colors for more details on dynamic and computed color of the
+ <em>Users Color Palette</em>. Note that when dynamic/computed colors are re-computed because of model change for example, background color is refreshed.
+ </p>
<p>The content of the
<em>Diagram Description</em> is mostly made of
<a href="#graphical_elements">graphical elements mappings</a>, organized in
@@ -214,6 +221,9 @@
<em>Ordered Tree Layout</em> enables one to lay out nodes as an ordered tree. The manner to retrieve children for each node should be specified.
</p>
<p>NOTE: these layout algorithms manage only nodes connected by edges, other nodes are layouted from left to right as usual.</p>
+ <p>Additional layout algorithms can be available if you have installed the ELK integration with Sirius. Please refers to the
+ <a href="https://www.eclipse.org/elk/reference/algorithms.html">ELK documentation</a> if you want details about these algorithms. All these algorithms exclude pinned element from the layouting and shorten edges between border nodes in addition to their core algorithm.
+ </p>
<p>If you need to go beyond that, you can provide your own layout algorithm programmatically (see the
<a href="../../developer/Sirius%20Developer%20Manual.html">developer documentation</a> for details).
</p>
diff --git a/doc/specifier/general/Specifying_Viewpoints.html b/doc/specifier/general/Specifying_Viewpoints.html
index 2e9806c..56d15d0 100644
--- a/doc/specifier/general/Specifying_Viewpoints.html
+++ b/doc/specifier/general/Specifying_Viewpoints.html
@@ -508,6 +508,22 @@
<br/></div>
</p>
<p>Note that Sirius does its best to take into account any change in the VSM, even for existing and opened representations. Sometimes, if the changes are too complex or in some corner cases not yet supported, you may need to close and reopen your representation, or in extreme case delete it and create a new one, in order to take the VSM changes into account properly.</p>
+ <h4 id="reloadVSM">Reload installed VSM</h4>
+ <p>Even though having your VSP in the runtime environment workspace is the best way to do dynamic development of your VSM, if your VSP is in the installed runtime plug-ins (that is the VSP plug-in is in the development environment workspace), you have the ability the reload it from your runtime to take external changes into account.
+ <br/>This is done with the
+ <em>Reload installed VSM</em> action from the main Eclipse tool bar.
+ <br/>Click on
+ <em>Reload installed VSM</em> will have automatically effects in opened representations(depending on refresh options).
+ </p>
+ <p>
+ <em>Limitations</em>:
+ </p>
+ <ul>
+ <li>The action is available only if specifier plug-ins are installed.</li>
+ <li>The action is available only if the Eclipse Runtime is a started from PDE (that is, is not a stand alone application).</li>
+ <li>Only the VSM is reloaded. The Java classes that may have been changed in the VSP are updated as normal Java classes managed in debug mode.</li>
+ <li>If you delete the VSP in the host Eclipse, you may encounter unexpected exceptions.</li>
+ </ul>
<h3 id="migration">Migration from Previous Versions</h3>
<p>The
<em>Viewpoint Specification Model</em> can evolve between two versions of Sirius. The migration process is done automatically. That means all VSM are migrated at loading time without any action from the user. While a VSM is not saved, the automatic migration will be replayed at the next opening.
diff --git a/doc/specifier/general/Writing_Queries.html b/doc/specifier/general/Writing_Queries.html
index d2fd0d3..1e9501a 100644
--- a/doc/specifier/general/Writing_Queries.html
+++ b/doc/specifier/general/Writing_Queries.html
@@ -37,6 +37,9 @@
<a href="#service_methods">Writing Java Services</a>
</li>
<li>
+ <a href="#service_navigation">Accessing Java service implementations from interpreted expression or Java extension</a>
+ </li>
+ <li>
<a href="#standard_services">Standard Services</a>
<ol style="list-style: disc;">
<li>
@@ -333,7 +336,11 @@
}
}
</code></pre>
- <p>Once a service has been defined and its class is registered in your VSM, you can invoke it in the expressions of languages which support it like this: <code>[aFamily.getFamiliesContainingParents()/]</code>. (using Acceleo syntax) The invocation looks as if the service was a normal feature of the
+ <p>After defining a service, you have to register it in your VSM with a Java extension:</p>
+ <p>
+ <img border="0" src="images/serviceVsmRegistration.png"/>
+ </p>
+ <p>Then you can invoke it in the expressions of languages which support it like this: <code>[aFamily.getFamiliesContainingParents()/]</code>. (using Acceleo syntax) The invocation looks as if the service was a normal feature of the
<code>Family</code> type. When the service is invoked, the model element on which it is invoked is used as the first argument to the Java method. If arguments are passed in the expression, they are mapped to the second, third, etc. parameters of the Java method, assuming the types are compatible. The result of evaluating a service invocation is the result of the Java method.
</p>
<p>
@@ -351,6 +358,25 @@
<code>void</code>. You can return any value instead, for example target argument (the service method’s first parameter).
</li>
</ul>
+ <h2 id="service_navigation">Accessing Java service implementations from interpreted expression or Java extension</h2>
+ <p>If you want to see the service implementation(s) used in an interpreted expression in the Java editor, you just have to put your cursor on the service and press the
+ <strong>F3</strong> keyboard key. Three scenarios can occur after hitting F3:
+ </p>
+ <ul>
+ <li>Nothing happens if your service does not exist in any services class defined in the VSM or if the expression is not complete (missing parenthesis and parameters).</li>
+ <li>If only one implementation matches your service, it is open directly in Java editor.</li>
+ <li>If many implementations match your service call, a wizard is opened and allows you to choose the Java class containing the service implementation you wish to see:</li>
+ </ul>
+ <p>
+ <img border="0" src="images/serviceNavigation.png"/>
+ </p>
+ <p>
+ <em>Warning:</em> This functionnality works only with
+ <code>service:</code> and
+ <code>aql:</code> interpreters, not with the Acceleo 3/MTL
+ <code>[/]</code> interpreter.
+ </p>
+ <p>You also can open the service class specified in a Java extension by a double click on it in the VSM. It will open a Java editor if the qualified name corresponds to an existing implementation. </p>
<h2 id="standard_services">Standard Services</h2>
<p>Sirius provides some standard services that can be used from any VSM simply by adding the appropriate reference (as a
<em>Java Extension</em>) to the implementation class’s fully qualified name. When using such a service class, make sure your
diff --git a/doc/specifier/general/images/serviceNavigation.png b/doc/specifier/general/images/serviceNavigation.png
new file mode 100644
index 0000000..dc11d93
--- /dev/null
+++ b/doc/specifier/general/images/serviceNavigation.png
Binary files differ
diff --git a/doc/specifier/general/images/serviceVsmRegistration.png b/doc/specifier/general/images/serviceVsmRegistration.png
new file mode 100644
index 0000000..50489d1
--- /dev/null
+++ b/doc/specifier/general/images/serviceVsmRegistration.png
Binary files differ
diff --git a/doc/user/diagrams/Diagrams.html b/doc/user/diagrams/Diagrams.html
index a041d5d..bdd4ce0 100644
--- a/doc/user/diagrams/Diagrams.html
+++ b/doc/user/diagrams/Diagrams.html
@@ -1155,20 +1155,30 @@
<em>Zoom out</em>) button is active, clicking anywhere on the diagram will increment (resp. decrement) the zoom level by 25%. The current zoom level is visible in the tabbar when no diagram element is selected (see the section on the tabbar buttons for more ways to control the zoom level).
</p>
<p id="notes">
- <i>Notes and note attachments</i>. All Sirius diagrams support the creation of notes and text elements, which can be attached to diagram elements. These elements are purely graphical annotations, and have no effect on the semantic model. The three tools used to create them are available in a combo-box in the palette’s top row. By default, the
- <em>Note</em> tool (represented by a yellow sticky note) is selected. If you click on the small arrow next to the sticky note, a menu appears where you can select which of the three tools to enable:
+ <i>Notes, Link Notes and Note attachments</i>. All Sirius diagrams support the creation of notes and text elements, which can be attached to diagram elements. These elements are purely graphical annotations, and have no effect on the semantic model. The tools used to create them are available in a combo-box in the palette’s top row. By default, the
+ <em>Note</em> tool (represented by a yellow sticky note) is selected. If you click on the small arrow next to the sticky note, a menu appears where you can select one of the available tools:
<em>Note</em>,
+ <em>Link Note</em>,
<em>Text</em> or
<em>Note attachment</em>.
</p>
<p>
- <em>Notes</em> and
+ <em>Notes</em>,
+ <em>Link Notes</em> and
<em>Text</em> elements are created in a similar way: either a single click somewhere on the diagram (which creates an element with a default size), or a click-drag to create the element with a custom initial size. Once created, one can edit the text inside the note or text zone usual the standard “direct edit” behavior (
<em>F2</em>, a slow double click, or by directly starting to enter alpha-numeric text). The only difference between notes and text zones is the visual presentation; notes have a yellow background (by default) and a border which represents a sticky not with a folded top-right corner.
</p>
+ <p>A
+ <em>Link Note</em> is a special kind of note which references any existing representation in the project. When creating a link note, a the target representation must be selected from a dialog. The link note displays the name of the target representation and its icon as the note header. It is possible to navigate to the target representation by double clicking on a link note. When the targeted representation is deleted, all link notes that reference it are deleted automatically. Just like normal notes, link notes have a text field for free text and can be attached to other elements with the note attachment tool. It is also possible to set a new target representation for an existing link note by selecting
+ <em>Set target representation ...</em> from the link note’s context menu.
+ </p>
<p>
<em>Note attachments</em> can be created to link either notes or text zone to diagram elements (including other notes and text attachments). To create an attachment, activate the tool and then click once on the source element and once on the target element. You can also click and drag from the source to the target elements.
</p>
+ <p>
+ <em>Generic Edge Creation Tool</em> allows to create an edge by selecting first the source and the target before choosing the concrete edge creation tool. That allows to restrict the list of possible edge creation tools between two elements. The tool is allowed when the mouse is hovering the first element if at least one edge creation tool is applicable from this element. the same is applies for the target.
+ <br/>If only one edge creation tool is available, the tool will be applied once the source and target have been selected. If several edge creation tools are applicable, a menu displaying the list of possible tools makes possible to select which one to apply.
+ </p>
<p id="pinning">
<i>Pin/Unpin</i>. The final standard tools which are available in the top row of all the palette allow to mark or unmark diagram elements as
<em>pinned</em>. Pinning an element on the diagram means that when an automatic layout of the diagram is requested (see the
diff --git a/doc/user/diagrams/images/edgeLabelAttachment_preference.png b/doc/user/diagrams/images/edgeLabelAttachment_preference.png
index fd731fa..a1eeacf 100644
--- a/doc/user/diagrams/images/edgeLabelAttachment_preference.png
+++ b/doc/user/diagrams/images/edgeLabelAttachment_preference.png
Binary files differ
diff --git a/doc/user/diagrams/images/palette_tools.png b/doc/user/diagrams/images/palette_tools.png
index c2f234f..c41215f 100644
--- a/doc/user/diagrams/images/palette_tools.png
+++ b/doc/user/diagrams/images/palette_tools.png
Binary files differ
diff --git a/doc/user/sequences/Sequence Diagrams.html b/doc/user/sequences/Sequence Diagrams.html
index 095f483..7a0349d 100644
--- a/doc/user/sequences/Sequence Diagrams.html
+++ b/doc/user/sequences/Sequence Diagrams.html
@@ -24,6 +24,11 @@
</li>
<li>
<a href="#layout">Automatic Layout</a>
+ <ol style="list-style: disc;">
+ <li>
+ <a href="#insert_vertical_blank_space">Manually insert vertical blank space</a>
+ </li>
+ </ol>
</li>
<li>
<a href="#elements">Sequence Diagram Elements</a>
@@ -135,6 +140,16 @@
<p>The
<em>Arrange All</em> command which launches an automatic layout of all the elements on a diagram has been completely customized for sequence diagrams. Arranging a sequence diagram will keep the relative positions of all the elements, but reduce any un-needed vertical or horizontal spaces. All elements will be resized to the minimum size necessary, and “packed” towards the top-left corner of the diagram. This results in a diagram which uses the minimum space required to present all the elements, while keeping enough white-space between them to be easy to read.
</p>
+ <h3 id="insert_vertical_blank_space">Manually insert vertical blank space</h3>
+ <p>It is also possible to manually insert vertical blank space to facilitate the organization of messages or to add new events in a sequence diagram. This feature is available on the vertical ruler by dragging the mouse with the Ctrl key pressed.
+ <br/>Below, an example where user inserts blank space before message m3:
+ <br/>
+ <img alt="Example where user inserts blank space before message m3" title="Example where user inserts blank space before message m3" border="0" src="images/insert_vertical_blank_space.png"/>
+ </p>
+ <p>To show ruler, you need to check the option
+ <em>Show Ruler</em> as explained in
+ <a href="../diagrams/Diagrams.html#RulersGrid">Rulers & Grid</a> chapter.
+ </p>
<h2 id="elements">Sequence Diagram Elements</h2>
<p>This section presents each type of elements specific to sequence diagrams which are supported by Sirius, and their specificities (if any). Note that not all sequence diagrams will support all kinds of elements; this depends on the diagram’s configuration.</p>
<h3 id="Lifelines">Life-lines</h3>
diff --git a/doc/user/sequences/images/insert_vertical_blank_space.png b/doc/user/sequences/images/insert_vertical_blank_space.png
new file mode 100644
index 0000000..6aeb0ce
--- /dev/null
+++ b/doc/user/sequences/images/insert_vertical_blank_space.png
Binary files differ