<?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.0">Changes in Sirius 3.1.0</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius3.0.0">Changes in Sirius 3.0.0</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges2">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges2">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges2">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius2.0.0">Changes in Sirius 2.0.0</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges3">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#APIChanges">API Changes</a>
							</li>
						</ol>
					</li>
				</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.0">Changes in Sirius 3.1.0</h2>
		<h3 id="UserVisibleChanges">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> A new feature allows to snap to all shapes (instead of just to snap to brother shapes). The <kdb>F4</kdb> shortcut key activates this mode when you resize a node, move a node or move a bendpoint of edge, see 
				<a href="./user/diagrams/Diagrams.html#snap_to_shapes">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/draging. 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-info">Modified</span> The 
				<em>Snap to Grid</em> and 
				<em>Snap to Shapes</em> are now automatically disabled on Sequence diagrams. As indicated in the user documentation, 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. see 
				<a href="./user/sequences/Sequence%20Diagrams.html#introduction">documentation</a> for details. Previously, the user has to explicitely disable the snap features.
			</li>
			<li><span class="label label-info">Modified</span> The Link with Editor behavior has changed. The link with editor was previously unidirectional from the Common Navigator (Model Explorer view or Project view) toward the active representation. By 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 &#171;Arrange Linked Bordered Nodes&#187; tabbar action has been renamed to &#171;Arrange Linked Border Nodes&#187; as it is border nodes which are layouted and not bordered nodes.</li>
		</ul>
		<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
		<ul>
			<li><span class="label label-info">Modified</span> You have now really 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 is 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 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 now ready to have its experimental state removed. 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> The 
				<em>Acceleo Query Language</em> (AQL) interpreter  has been improved. It 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 (ePackageName::eClassName). The improvements realized can be viewed by clicking on the image below.
			</li>
		</ul>
		<p>
			<a href="images/improvedsiriusinterpreter.png">
				<img border="0" src="images/improvedsiriusinterpreter_thumbnail.png"/>
			</a>
		</p>
		<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
		<h4 id="Partialsupportforinternationalization">Partial support for internationalization</h4>
		<p>Sirius 3.1 introduces partial support for internationalization: all literal strings from the runtime part of Sirius are now externalized and can be localized by third parties by providing the appropriate &#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.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.eef.adapters</code>
					</li>
					<li>
						<code>org.eclipse.sirius.interpreter</code>
					</li>
					<li>
						<code>org.eclipse.sirius.tree</code>
					</li>
					<li>
						<code>org.eclipse.sirius.tree.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 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 &#171;aql:self.na&#187; and if he selects the content proposal &#171;name&#187;, it can replace the existing part of the expression &#171;na&#187; to write &#171;aql:self.name&#187; instead of just appending &#171;name&#187; to create &#171;aql:self.naname&#187;.
			</li>
			<li><span class="label label-success">Added</span> The new class 
				<code>org.eclipse.sirius.common.tools.api.contentassist.ContentProposalBuilder</code> used to build the content proposals with their various parameters more easily.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.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.gmf.runtime">Changes in 
			<code>org.eclipse.sirius.ext.gmf.runtime</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> 2 new 
				<code>getIntersection</code> methods have been added in org.eclipse.sirius.ext.gmf.runtime.editparts.GraphicalHelper. 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>
		<h4 id="Changesinorg.eclipse.sirius">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The method 
				<code>addEvaluateSelectionExpressionTask</code> has been added in class 
				<code>org.eclipse.sirius.tools.api.command.AbstractCommandFactory</code> to allow selection after tool execution.
			</li>
			<li><span class="label label-success">Added</span> The class 
				<code>org.eclipse.sirius.common.tools.api.interpreter.StandardServices</code> has been added. This class owns methods used for service: interpreter.
			</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 more inherits of 
				<code>IUndoableCommand</code> because useless 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.common2">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>
		<h4 id="Changesinorg.eclipse.sirius.ui">Changes in 
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getInput()</code> method has been added to get the real input for a 
				<code>DRepresentation</code>.
			</li>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getSession(boolean)</code> method has been added to let the caller choose to create and open a new 
				<code>Session</code> or not when the known session is closed or does not exist. The 
				<code>getSession</code> method calls getSession(true).
			</li>
			<li><span class="label label-warning">Deprecated</span>  
				<code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.dispose()</code> method has been deprecated as a 
				<code>IEditorInput</code> can be reused by several instances of 
				<code>IEditorPart</code> through the navigation history view.
			</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>
		</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> 
				<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-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.tests.support">Changes in 
			<code>org.eclipse.sirius.tests.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>It inherits from 
						<code>AbstractToolDescriptionTestCase</code> 
					</li>
					<li>The method 
						<code>applyContainerCreationTool(String,DDiagram,EObject)</code> has been added.
					</li>
					<li>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 so 
				<code>SWTBotSiriusGefViewer.dragWithKey</code> and 
				<code>SWTBotSiriusFigureCanvas.mouseDragWithKey</code>), has an additional parameter, compared to 
				<code>drag(int, int, int, int)</code> method, to precise the key code to press during the drag&#8217;n&#8217;drop. It is possible to call this method with SWT.None to retrieve 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>
		</ul>
		<h2 id="sirius3.0.0">Changes in Sirius 3.0.0</h2>
		<h3 id="UserVisibleChanges2">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> The ability to print table representations has been re-introduced.</li>
			<li><span class="label label-success">Added</span> The quick outline feature has been added for tree and table editors, see documentation for details.</li>
			<li><span class="label label-success">Added</span> The label of a list or container can now be hidden by the user from the outline, the tabbar or the contextual menu.</li>
			<li><span class="label label-success">Added</span> In the 
				<em>Appearance</em> tab, in addition to 
				<em>Bold</em> and 
				<em>Italic</em>, it is now possible to set the font formatting style to 
				<em>Underline</em> and 
				<em>Strike through</em> (or any combination of these).
			</li>
			<li><span class="label label-success">Added</span> Container elements on diagrams now support vertical and horizontal compartments layout (this is only visible if the modeler configuration makes use of this new feature). </li>
			<li><span class="label label-success">Added</span> In table and tree editors, a 
				<em>Refresh</em> can now be launched by hitting <kbd>F5</kbd> like in diagrams (previously the only way was to click on the 
				<em>Refresh</em> icon or menu item).
			</li>
			<li><span class="label label-success">Added</span> In table editors, hitting the <kdb>Del</kdb> key is now equivalent to selecting 
				<em>Delete Line</em> in the context menu.
			</li>
			<li><span class="label label-success">Added</span> On diagrams, it is now possible to set a custom background image on list containers.</li>
			<li><span class="label label-info">Modified</span> In the 
				<em>Viewpoint Selection</em> dialog and wizard page, the &#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="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> <span class="label label-info">Experimental</span> Optional support for the experimental 
				<em>Acceleo Query Language</em> (AQL) has been added to write interpreted expressions.  It is provided by the 
				<code>org.eclipse.sirius.common.acceleo.aql</code> (required for evaluating the expressions) and 
				<code>org.eclipse.sirius.common.acceleo.aql.ide</code>  (optional, only needed to provide specification-time features like expression completion) plug-ins. AQL is similar to Acceleo 3/MTL, but simpler and provides much better performance in the Sirius context. If you make use of this feature, be aware that some details may still change in future releases, including 3.0.x maintenance releases. See 
				<a href="https://www.eclipse.org/acceleo/documentation/aql.html">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="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
		<p>The most important and impacting changes in this release are (details below in plug-in specific sections):</p>
		<ul>
			<li><span class="label label-success">Added</span>  The new extension point 
				<code>org.eclipse.sirius.ui.siriuspropertiescelleditor</code>, defined in 
				<code>org.eclipse.sirius.ui</code>, can be used to provide customized cell editors for semantic element&#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.common3">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.sirius2">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code> has been added to return a 
				<code>DRepresentationContainer</code> from the 
				<code>DAnalysis</code> parameter and the added 
				<code>DRepresentation</code>.
			</li>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.business.api.migration.IMigrationParticipant.updateCreatedObject(EObject newObject, String loadedVersion)</code> has been added to update object values in VSM before loading this objects from XML file.
			</li>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.tools.api.ui.RefreshEditorsPrecommitListener.disable()</code> has been added to disable the next refresh attempt in the current precommit loop iteration.
			</li>
			<li><span class="label label-success">Added</span> The new constant 
				<code>org.eclipse.sirius.business.api.helper.SiriusUtil.ENVIRONMENT_URI_SCHEME</code> declares environment URI scheme.
			</li>
			<li><span class="label label-success">Added</span> The new constant 
				<code>org.eclipse.sirius.business.api.helper.SiriusUtil.VIEWPOINT_ENVIRONMENT_RESOURCE_URI</code> declares 
				<code>environment:/viewpoint</code> resource URI.
			</li>
			<li><span class="label label-success">Added</span> The new constant 
				<code>org.eclipse.sirius.viewpoint.description.util.DescriptionResourceImpl.OPTION_SIRIUS_USE_URI_FRAGMENT_AS_ID</code> added to define a option to enable the use of a id map for odesign resource, id being uri&#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.ui2">Changes in 
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.completeToolTipText(String, EObject, EStructuralFeature)</code> has been added to customize the tooltip displayed in the VSM editor by using the feature of the current object. The old method 
				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.completeToolTipText(String, EObject)</code> has been deprecated.
			</li>
			<li><span class="label label-success">Added</span> The class 
				<code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource</code> has been added. It allows developers to make their properties views CellEditor customizable by using the new extension point 
				<code>org.eclipse.sirius.ui.siriuspropertiescelleditor</code>
			</li>
			<li><span class="label label-success">Added</span> The interface 
				<code>org.eclipse.sirius.ext.emf.ui.ICellEditorProvider</code> has been added to allow clients to provide their own 
				<code>CellEditor</code> - in the Sirius semantic properties views &#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.synchronizer">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.support">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="UserVisibleChanges3">User-Visible Changes</h3>
		<ul>
			<li>It is now possible to select element that intersects the selection rectangle and not that is completely contained by the selection rectangle. This new behavior is enabled when user selects elements from right to left. The normal mode (previous mode) remains when the user selects elements from left to right.</li>
			<li>The edges appearance is now kept, as much as possible, when one of its extremity is moved. A move of an extremity should move only the closest segment of the edge.</li>
			<li>The edges appearance is kept as much as possible when a node (container or not) is moved. A move of a node now impacts only the closest segment of the linked edges.</li>
		</ul>
		<p>
			<img border="0" src="images/moveNode-edgeImpact-changedBehavior.gif"/>
		</p>
		<ul>
			<li>When a node, container or not, is resized to the left, upwards, or both, the location of its children (elements inside a container and border nodes) is not changed. It is possible to retrieve the previous behavior by pressing the F3 function key during the resize.</li>
		</ul>
		<p>
			<img border="0" src="images/containerResize-changedBehavior.gif"/>
		</p>
		<ul>
			<li>The &#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="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
		<ul>
			<li>The specifier can now choose to hold the edge ends toward the center of the source, target or both. New fields within the &#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.sirius3">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.business.api.session.ViewpointSelector</code> class has been added, with easy-to-use methods to select/deselect viewpoint in a given session.
			</li>
			<li>The 
				<code>VIEWPOINT_REGISTRY_INITIAL_SIZE</code> preference and 
				<code>VIEWPOINT_REGISTRY_INITIAL_SIZE_DEFAULT_VALUE</code> default value has been removed from 
				<code>org.eclipse.sirius.tools.api.preferences.DCorePreferences</code>.
			</li>
			<li>The method 
				<code>org.eclipse.sirius.business.api.query.DRepresentationQuery.isDanglingRepresentation()</code> has been added to introduce the possibility to check if a representation is a dangling representation, ie. if its a DSemanticDecorator, its target is null or does not belong to a session.
			</li>
			<li>
				<code>org.eclipse.sirius.ecore.extender.business.api.permission.exception.LockedInstanceException</code> now can take several EObjects in constructor and a method 
				<code>LockedInstanceException.getLockedElements()</code> has been added to get all EObjects put in constructor.
			</li>
		</ul>
		<p>
			<code>org.eclipse.sirius.tools.api.command.InvalidPermissionCommand</code> now can take several EObjects in constructor to throw a 
			<code>LockedInstanceException</code> with several EObjects.
		</p>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.business.api.helper.task.AbstractDeleteDRepresentationElementTask</code> class has been renamed into 
				<code>DeleteEObjectTask</code>.
			</li>
			<li>The interface 
				<code>org.eclipse.sirius.tools.api.command.listener.IChangeListener</code> and all classes related to this mechanism (
				<code>ChangeListenerFactory</code>, 
				<code>TriggerOperation</code>) have been removed as this mechanism proves to be inefficient. It can be replaced by a pre/post commit listener or a 
				<code>org.eclipse.sirius.business.api.session.ModelChangeTrigger</code>
			</li>
			<li>The 
				<code>org.eclipse.sirius.tools.api.ui.IExternalAction2</code> interface has been removed. It was created to disable some 
				<code>IChangeListener</code> when the action indicates it will not delete elements.
			</li>
			<li>
				<code>org.eclipse.sirius.business.api.dialect.DialectServices.refresh(DRepresentation, boolean, IProgressMonitor</code> has been added to specify if we want partial refresh or not. By default partial refresh is done. full refresh is only implements for tree dialect.
			</li>
			<li>
				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.refresh(DRepresentation, IProgressMonitor)</code> has been added to call by default 
				<code>DialectServices.refresh(DRepresentation, false, IProgressMonitor)</code> to do a partial refresh.
			</li>
			<li>
				<code>org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand.RefreshRepresentationsCommand(TransactionalEditingDomain, boolean, IProgressMonitor, DRepresentation...)</code> and 
				<code>RefreshRepresentationsCommand(TransactionalEditingDomain, boolean, IProgressMonitor, Collection&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.ui3">Changes in 
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li>In 
				<code>org.eclipse.sirius.ui.business.api.session.UserSession</code>, the methods 
				<code>selectSirius()</code>, 
				<code>selectOnlySirius()</code> and 
				<code>findSiriusByName()</code> have been renamed into 
				<code>selectViewpoint()</code>, 
				<code>selectOnlyViewpoint()</code> and 
				<code>findViewpointByName()</code> to correct a wrong rebranding.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.common4">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.synchronizer2">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.support2">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>