<?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="#sirius3.1.5">Changes in Sirius 3.1.5</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges">User-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius3.1.3">Changes in Sirius 3.1.3</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="#DeveloperVisibleChanges">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius3.1.1">Changes in Sirius 3.1.1</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#SpecifierVisibleChanges2">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges2">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="#UserVisibleChanges3">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges3">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="#UserVisibleChanges4">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges4">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="#UserVisibleChanges5">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges5">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#APIChanges">API 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="sirius3.1.5">Changes in Sirius 3.1.5</h2>
		<h3 id="UserVisibleChanges">User-Visible Changes</h3>
		<ul>
			<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>
		</ul>
		<h2 id="sirius3.1.3">Changes in Sirius 3.1.3</h2>
		<h3 id="UserVisibleChanges2">User-Visible Changes</h3>
		<ul>
			<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, as it is the case for selection from dialect editors.
			</li>
		</ul>
		<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
		<ul>
			<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 (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 alwyas had at least a 1 pixel border. 
			</li>
		</ul>
		<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
		<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.ui">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>
		</ul>
		<h2 id="sirius3.1.1">Changes in Sirius 3.1.1</h2>
		<h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
		<ul>
			<li><span class="label label-info">Modified</span> The use of type literals in operations like filter() or oclIsKindOf() requires to explicitly add the domain meta-models plug-ins to the dependencies of the Viewpoint Specification Project. The documentation has been modified to recommend this.</li>
		</ul>
		<h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
		<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.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>
		</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.DefaultTestMemento</code> has been created. It help to simulate a real 
				<code>IMemento</code> for editor restoration.
			</li>
		</ul>
		<h2 id="sirius3.1.0">Changes in Sirius 3.1.0</h2>
		<h3 id="UserVisibleChanges3">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&#8217;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="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 (
				<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="DeveloperVisibleChanges3">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 &#171;language packs&#187; as OSGi fragments. Note that this does not concern the VSM editor&#8217;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.sirius2">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 prefered instead of implementing 
				<code>MetamodelDescriptorProvider</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-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.ui2">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&lt;DRepresentationElement&gt;)</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.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.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&#8217;n&#8217;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="UserVisibleChanges4">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 &#171;plug-in&#187; decorator for viewpoints loaded from plug-ins is removed, and a &#171;Folder&#187; 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="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 
				<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">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 &#171;live mode&#187;, 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&#8217;s name and properties for quick, keyboard-only navigation in complex VSMs.</li>
			<li><span class="label label-success">Added</span> The &#171;hide label by default capability&#187; 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 &#171;Lozenge&#187; is now called &#171;Diamond&#187;.</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&#8217;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()-&gt;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&#8217;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="DeveloperVisibleChanges4">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&#8217;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&#8217;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&#8217;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&#8217;s 
				<code>CrossReferenceAdapter</code> on session resources (
				<code>*.aird</code>). If your code relied on GMF&#8217;s implementation to find inverse references, it can use the Sirius session&#8217;s 
				<code>Session.getSemanticCrossReferencer()</code> instead, which provides the same service (and more) and avoids the redundant installation of GMF&#8217;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">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">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">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&lt;?&gt;, 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&lt;String, VariableType&gt;</code> for the accessible variables instead of a 
				<code>Map&lt;String, String&gt;</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.sirius3">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&#8217;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&lt;EReference&gt;)</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&lt;Notification&gt;, 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.ui3">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 &#8211; 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&lt;IFigure&gt;, List&lt;IFigure&gt;)</code> now takes a 
						<code>Rectangle</code> instead a 
						<code>Point</code>: 
						<code>locateOnBorder(Rectangle, int, int, IFigure, Collection&lt;IFigure&gt;, List&lt;IFigure&gt;)</code>;
					</li>
					<li>
						<code>locateOnSouthBorder</code>, 
						<code>locateOnNorthBorder</code>, 
						<code>locateOnWestBorder</code> and 
						<code>locateOnEastBorder</code> signatures is now 
						<code>(Rectangle, int, IFigure, Collection&lt;IFigure&gt;, List&lt;IFigure&gt;)</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&lt;IFigure&gt;, List&lt;IFigure&gt;)</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.support3">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&lt;URI&gt;, List&lt;URI&gt;, 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&#8217;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="UserVisibleChanges5">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 &#171;snap to shapes&#187; is now enabled by default (see  
				<em>Sirius &gt; Sirius Diagram &gt; Rulers and Grid</em> preference page). This is true only for new diagrams. The existing diagrams are not impacted.
			</li>
			<li>The &#171;Navigate&#187; 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 &#171;New&#187;, which lists only the available actions to create new representations on the selected element.</li>
					<li>One named &#171;Open&#187;, 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 &#171;Remove Bend-points&#187; or by using the shortcut &#171;Ctrl&#187; + &#171;Shift&#187; + &#171;-&#187;.</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="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 &#171;advance&#187; 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 &gt; 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 &gt; Viewpoint Specification Project</em>, the VSM name is now given according to the project name. If the project name is suffixed with &#171;design&#187;, 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>&#171;Lozenge&#187; is replaced by &#171;Diamond&#187; in diagram style.</li>
		</ul>
		<h3 id="APIChanges">API Changes</h3>
		<h4 id="Changesinorg.eclipse.sirius4">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&lt;DRepresentation&gt;)</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&#8217;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&#8217;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.ui4">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&#8217;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&lt;String&gt;, Set&lt;String&gt;)</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>
	</body>
</html>