<?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="#sirius6.3.0">Changes in Sirius 6.3.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="#sirius6.2.2">Changes in Sirius 6.2.2</a>
					</li>
					<li>
						<a href="#sirius6.2.1">Changes in Sirius 6.2.1</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#DeveloperVisibleChanges2">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius6.2.0">Changes in Sirius 6.2.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="#DeveloperVisibleChanges3">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius6.1.2">Changes in Sirius 6.1.2</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges3">User-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges4">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius6.1.1">Changes in Sirius 6.1.1</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#Changesinorg.eclipse.sirius.diagram4">Changes in  @org.eclipse.sirius.diagram@</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius6.1.0">Changes in Sirius 6.1.0</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges4">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges5">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius6.0.0">Changes in Sirius 6.0.0</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges5">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges6">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius5.1.1">Changes in Sirius 5.1.1</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges6">User-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges7">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius5.1.0">Changes in Sirius 5.1.0</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges7">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges5">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges8">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
				</ol>
			</li>
		</ol>
		<p>This document contains the release notes for recent major releases of Sirius. See also 
			<a href="Release_Notes_Previous.html">the release notes from previous versions</a> for details about older releases.
		</p>
		<h2 id="sirius6.3.0">Changes in Sirius 6.3.0</h2>
		<h3 id="UserVisibleChanges">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> It is now possible to move labels on border of node, or border node, all around the node. Before, for label larger than the node, only centered location was authorized on North or South side.</li>
			<li><span class="label label-info">Modified</span> The GIF and BMP formats which are currently supported when exporting diagrams as images should be considered 
				<em>deprecated</em>. Their support may be removed in a future version, as they cause various issues depending on the platform and increase the maintenance costs for little value. If you really need diagram images in these formats, you can export in PNG (which is lossless), and convert the image into the required format using an external tool.
			</li>
		</ul>
		<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> A new column 
				<code>Target</code> has been added in the dialog allowing to choose layout options to override for ELK layout algorithms. It describes the element to which the option applies. The filter textfield in that dialog also applies on columns&amp; 
				<code>Name</code>, 
				<code>Targets</code> and 
				<code>Type</code>.
			</li>
		</ul>
		<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
		<ul>
			<li><span class="label label-info">Modified</span> Upgraded ELK version from 0.4.1 to 0.5.0, see the 
				<a href="https://projects.eclipse.org/projects/modeling.elk/releases/0.5.0">ELK documentation</a> for the list of changes in that version.
			</li>
			<li><span class="label label-info">Modified</span> Upgraded EEF version from 2.1.2 to 2.1.3 (which contains a single bugfix, for 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=550436">#550436</a> ).
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius">Changes in  
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> A new EAttribute 
				<code>changeId</code> has been added in 
				<code>DRepresentationDescriptor</code>. It allows to know if two 
				<code>DRepresentation</code>(each associated to one DRepresentationDescriptor) are the same and have the exact same content. It can be useful to not load the representation if not needed. The methods 
				<code>updateChangeId(DRepresentationDescriptor)</code> and 
				<code>areRepresentationIdentical(DRepresentationDescriptor, DRepresentationDescriptor)</code> have been added in 
				<code>org.eclipse.sirius.business.api.helper.RepresentationHelper</code> to get change id information and to update it if needed in DRepresentationDescriptor.
			</li>
		</ul>
		<p>In case of migration the method 
			<code>org.eclipse.sirius.business.api.migration.AbstractRepresentationsFileMigrationParticipant.updateChangeId(DAnalysis, DRepresentation)</code> is available to update change id. New migration participants created after this Sirius version must update the change id of the DRepresentationDescriptor of the DRepresentation they change. The API to do that is described in MigrationParticpant 
			<a href="developer/extensions-provide_migrate_contribution.html#MigrationParticipantsImplem">documentation:</a> .
		</p>
		<ul>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.business.api.query.DViewQuery.getLoadedRepresentationsDescriptors()</code> has been added and allows to retrieve all loaded 
				<code>DRepresentationDescriptor</code> in a 
				<code>DView</code>.
			</li>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.business.api.session.AbstractSavingPolicy.hasDifferentSerialization(Resource, Map)</code> has been extracted from internal subclasses. It is able to tell whether a save operation on a resource can succeed or not, and if the resulting file will change. It should be used with care as it basically saves the resource in a temporary resource to know whether it will change the file or not.
			</li>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.business.api.query.DRepresentationQuery.findDescriptorFromAnalysis(DAnalysis)</code> has been added to provide a way to look up for a 
				<code>DRepresentationDescriptor</code> in a given 
				<code>DAnalysis</code>.
			</li>
			<li><span class="label label-info">Modified</span> The method 
				<code>org.eclipse.sirius.business.api.dialect.DialectServices.copyRepresentation(DRepresentation, String, Session, IProgressMonitor)</code> is now deprecated. It is recommended to use the  new alternative, 
				<code>org.eclipse.sirius.business.api.dialect.DialectServices.copyRepresentation(DRepresentationDescriptor, String, Session, IProgressMonitor)</code> which is identical except that it take a 
				<code>DRepresentationDescriptor</code> instead of a 
				<code>DRepresentation</code>. Also the constructor of 
				<code>org.eclipse.sirius.business.api.dialect.command.CopyRepresentationCommand</code> has been modified. Its parameter 
				<code>Collection&lt;DRepresentation&gt; representations</code> has been replaced by 
				<code>Collection&lt;DRepresentationDescriptor&gt; representationDescriptors</code>. Theses changes were made  to be able to copy the name that is now only in 
				<code>DRepresentationDescriptor</code>.
			</li>
			<li><span class="label label-info">Modified</span> The 
				<code>DocumentedElement</code> interface providing a description for the representation implemented by 
				<code>DRepresentation</code> is now implemented by 
				<code>DRepresentationDescriptor</code>. Also the 
				<code>name</code> EAttribute in 
				<code>DRepresentation</code> has been added to 
				<code>DRepresentationDescriptor</code>. These changes allows to use these information without loading associated representation. The 
				<code>name</code> and 
				<code>description</code> attributes on 
				<code>DREpresentation</code> are now transient and volatile and computed from 
				<code>DRepresentationDescriptor</code>
			</li>
			<li><span class="label label-info">Modified</span>The class 
				<code>org.eclipse.sirius.business.api.helper.SiriusHelper</code> has been renamed into 
				<code>org.eclipse.sirius.business.api.helper.RepresentationHelper</code>.
			</li>
			<li><span class="label label-danger">Removed</span> In 
				<code>org.eclipse.sirius.business.api.session.CustomDataConstants</code>, the constants 
				<code>DREPRESENTATION</code> and 
				<code>DREPRESENTATION_DESCRIPTOR</code> has been removed because they are not available anymore in custom data.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.common">Changes in  
			<code>org.eclipse.sirius.common</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> A cache has been added to optimize the way the uri fragments are computed in 
				<code>org.eclipse.sirius.common.tools.api.util.EqualityHelper</code>, it is managed with the 
				<code>setUriFragmentCacheEnabled(boolean)</code> method. The cache is currently used in three locations: 
				<code>org.eclipse.sirius.diagram.business.internal.sync.DDiagramSynchronizer.refreshOperation(IProgressMonitor)</code>, 
				<code>org.eclipse.sirius.diagram.business.internal.helper.display.DisplayServiceImpl.refreshAllElementsVisibility(DDiagram)</code> and in the hidden elements lookup phase of 
				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDDiagramEditPart.activate()</code>. This optimization is enabled by default, it can be disabled by setting the system property 
				<code>org.eclipse.sirius.common.enableUriFragmentOptimization</code> to 
				<code>false</code>.
			</li>
			<li><span class="label label-danger">Removed</span> The classes 
				<code>org.eclipse.sirius.common.tools.api.util.LazyCrossReferencer</code>, 
				<code>org.eclipse.sirius.common.tools.api.util.ECrossReferenceAdapterWithUnproxyCapability</code> have been merged in 
				<code>org.eclipse.sirius.business.internal.session.danalysis.SessionLazyCrossReferencer</code> to reduce complexity.
			</li>
			<li><span class="label label-danger">Removed</span> The class 
				<code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapterImpl</code> has been merged in 
				<code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapter</code>.
			</li>
			<li><span class="label label-danger">Removed</span> The 
				<code>org.eclipse.sirius.business.internal.session.danalysis.LocalResourceCollector</code> has been merged in 
				<code>SiriusCrossReferenceAdapter</code> to have only one instance of a cross referencer for a Sirius session. This implies that resource collector is no more installed on all resourceSet resources by default but only on those managed by the Sirius session semantic cross reference. But if the getRefencing/ed services are used, it will install itself on a non managed resource and then return the references for all resources on which it is installed.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram">Changes in  
			<code>org.eclipse.sirius.diagram</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> A cache has been added to optimize the way Sirius checks that a mapping is in the activated layers of a diagram. The cache is currently used in three locations: 
				<code>org.eclipse.sirius.diagram.business.internal.sync.DDiagramSynchronizer.refreshOperation(IProgressMonitor)</code>, 
				<code>org.eclipse.sirius.diagram.business.internal.helper.display.DisplayServiceImpl.refreshAllElementsVisibility(DDiagram)</code> and in the hidden elements lookup phase of 
				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDDiagramEditPart.activate()</code>. This optimization is enabled by default, it can be disabled by setting the system property 
				<code>org.eclipse.sirius.diagram.enableActiveParentLayerOptimization</code> to 
				<code>false</code>.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.elk">Changes in  
			<code>org.eclipse.sirius.diagram.elk</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The 
				<code>org.eclipse.sirius.diagram.elk.layout.extension</code> experimental extension-point has been added to make it possible to extend the ELK layout with pre end post operations. See the extension-point associated documentation and 
				<code>org.eclipse.sirius.diagram.elk.IELKLayoutExtension</code> interface for more details.
			</li>
		</ul>
		<h4 id="Migrations">Migrations</h4>
		<ul>
			<li><span class="label label-success">Added</span> A migration participant has been added to move the name and documentation from the representations to their descriptors (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=548631">bugzilla #548631</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>14.3.0.201908071200</em>.
			</li>
			<li><span class="label label-success">Added</span> A migration participant has been added to change the GMF coordinates of the labels that are:</li>
		</ul>   * on border of its node or border node
		    * larger that its node or border node
		    * on the North or South side.
		The goal of this migration participant is to keep centered labels visually fixed compared to previous version (see 
		<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=549887">bugzilla #550382</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
		<em>14.3.0.201908231800</em>.
		<ul>
			<li><span class="label label-success">Added</span> A migration participant has been added to sort the already activated filters. The activated filters list is now sorted on each filter activation, the sorted result is stored in the model whereas in older version the list was sorted on almost each use of those activated filters (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=550663">bugzilla #550663</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>14.3.0.201909031200</em>.
			</li>
		</ul>
		<h2 id="sirius6.2.2">Changes in Sirius 6.2.2</h2>
		<p>There are no user-visible changes in Sirius 6.2.2 compared to 6.2.1. The only changes are internal and related either to the build process or to the automated tests.</p>
		<h2 id="sirius6.2.1">Changes in Sirius 6.2.1</h2>
		<h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
		<h4 id="Changesinorg.eclipse.sirius2">Changes in  
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> Added a constructor 
				<code>org.eclipse.sirius.business.api.query.DRepresentationQuery.DRepresentationQuery(DRepresentation, Session)</code> to compute queries directly from the given session instead of computing it.
			</li>
			<li><span class="label label-success">Added</span> In 
				<code>viewpoint.ecore</code>, the 
				<code>UIState</code> class has a new 
				<code>subDiagramDecorationDescriptors</code> attribute. It is used as a cache to speed up sub diagram decorations computing.
			</li>
			<li><span class="label label-success">Added</span> It is now possible to consider that some specific graphical changes need a refresh of the representation. Before Sirius 6.1.3, only semantic changes triggers a refresh. Now you can use 
				<code>RefreshHelper.registerImpactingNotification(Predicate&lt;Notification&gt;)</code> to consider a specific graphical changes. An example is the possibility to launch a refresh when the region container is collapsed or expanded. See 
				<a href="developer/trigger-refresh-graphical-changes.html">Trigger a Sirius refresh on specific graphical changes</a> in the developer documentation for more details.
			</li>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.tools.api.ui.RefreshHelper.isAutoRefresh()</code> has been added to know if Sirius is in automatic refresh mode or in manual mode.
			</li>
			<li><span class="label label-success">Added</span> The methods 
				<code>org.eclipse.sirius.tools.api.ui.RefreshHelper.registerImpactingNotification(Predicate&lt;Notification&gt;)</code> and 
				<code>org.eclipse.sirius.tools.api.ui.RefreshHelper.unregisterImpactingNotification(Predicate&lt;Notification&gt;)</code> have been added to allow to consider some graphical modifications as requiring a refresh. By default, only semantic changes are considered as requiring a refresh.  
			</li>
			<li><span class="label label-danger">Removed</span> The 
				<code>org.eclipse.sirius.business.api.helper.task.NotificationTask</code> class has been removed. It was not used anywhere.
			</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-info">Modified</span> The 
				<code>org.eclipse.sirius.diagram.ui.business.api.image.ImageSelector.IMAGES_RESOURCE_NAME</code> constant has been deprecated. It was present in the initial commit of Sirius but has never been used in its open source components.
			</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>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas.mouseMoveLeftClick(int, int, boolean, int[])</code>, 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer.click(int, int, boolean, int[])</code>, 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.clickWithKeys(String, int...)</code>, have been added to make a mouse click with key modifiers for a multi selection for example.
			</li>
		</ul>
		<ul>
			<li><span class="label label-success">Added</span>  The method 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusHelper.selectPropertyTabItem(String, SWTBot)</code> has been added. It allows to look for property tab from a given bot. The bot corresponding to the property view should be given otherwise the search could fail starting from Eclipse 2019-06.
			</li>
		</ul>
		<ul>
			<li><span class="label label-success">Added</span>The method 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusHelper.getShellBot(String)</code> has been added and allows to retrieve a bot related to a shell with the given label.
			</li>
		</ul>
		<ul>
			<li><span class="label label-success">Added</span>The method 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusHelper.menu(SWTBot, String)</code> has been added and allows to retrieve a menu even when the active shell is null. Should be used over 
				<code>SWTBot.menu(String)</code> method.
			</li>
		</ul>
		<h2 id="sirius6.2.0">Changes in Sirius 6.2.0</h2>
		<h3 id="UserVisibleChanges2">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> On sequence diagrams, it is now possible to remove vertical blank spaces on standard edition mode by dragging the mouse from bottom to top anywhere in the canvas with the Ctrl+Shift keys pressed. This 
				<a href="user/sequences/Sequence%20Diagrams.html#remove_vertical_blank_space">feature</a> was here since version 6.0.0 but was only accessible through the ruler.
			</li>
		</ul>
		<h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> It is now possible to add action/group in the &#8220;New&#8221; contextual menu of diagram elements. This menu was missed in Sirius 6.1.0. It is now documented in the 
				<a href="specifier/diagrams/Diagrams.html#group">corresponding documentation</a> .
			</li>
		</ul>
		<h3 id="DeveloperVisibleChanges3">Developer-Visible Changes</h3>
		<h4 id="Changesinorg.eclipse.sirius.common2">Changes in 
			<code>org.eclipse.sirius.common</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> A new interface 
				<code>org.eclipse.sirius.common.tools.api.interpreter.IConverter</code> has been added: it encapsulates the coercion rules used to convert raw results returned by interpreted expressions into the types expected by Sirius (depending on the context of use of the expression).
			</li>
			<li><span class="label label-success">Added</span> In interface 
				<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreter</code>, a new method 
				<code>getConverter()</code> has been added to obtain the 
				<code>IConverter</code> for a given interpreter.
			</li>
			<li><span class="label label-success">Added</span> A new class 
				<code>org.eclipse.sirius.common.tools.api.interpreter.EvaluationResult</code> has been added. It serves as a default implementation of 
				<code>IEvaluationResult</code>. It provides static factory methods for common cases (successful evaluation or failure).
			</li>
			<li><span class="label label-info">Modified</span> In 
				<code>org.eclipse.sirius.common.tools.api.interpreter.TypeName</code>, the methods 
				<code>getJavaClass()</code> and 
				<code>getPackagePrefix()</code> which used to return a 
				<code>org.eclipse.sirius.ext.base.Option&lt;T&gt;</code> now return standard 
				<code>java.util.Optional&lt;T&gt;</code> instead.
			</li>
			<li><span class="label label-info">Modified</span> In 
				<code>org.eclipse.sirius.common.tools.api.profiler.ProfilerTaskRegistry</code>, the method 
				<code>get(String)</code> which used to return a 
				<code>org.eclipse.sirius.ext.base.Option&lt;T&gt;</code> now return standard 
				<code>java.util.Optional&lt;T&gt;</code> instead.
			</li>
			<li><span class="label label-info">Modified</span> In 
				<code>org.eclipse.sirius.common.tools.api.query.NotifierQuery</code>, the method 
				<code>getAdapter(Class&lt;?&gt;)</code> which used to return a 
				<code>org.eclipse.sirius.ext.base.Option&lt;T&gt;</code> now return standard 
				<code>java.util.Optional&lt;T&gt;</code> instead.
			</li>
			<li><span class="label label-info">Modified</span> In 
				<code>org.eclipse.sirius.common.tools.api.resource.ResourceSetSync</code>, the method 
				<code>getResourceSetSync(TransactionalEditingDomain)</code> which used to return a 
				<code>org.eclipse.sirius.ext.base.Option&lt;T&gt;</code> now return standard 
				<code>java.util.Optional&lt;T&gt;</code> instead.
			</li>
			<li><span class="label label-info">Modified</span> In 
				<code>org.eclipse.sirius.common.tools.api.util.MarkerUtil</code>, the method 
				<code>addMarkerFor(IResource, String, int, String)</code> which used to return a 
				<code>org.eclipse.sirius.ext.base.Option&lt;T&gt;</code> now return standard 
				<code>java.util.Optional&lt;T&gt;</code> instead.
			</li>
			<li><span class="label label-info">Modified</span> In 
				<code>org.eclipse.sirius.common.tools.api.util.ReflectionHelper</code>, all the following methods which used to return a 
				<code>org.eclipse.sirius.ext.base.Option&lt;T&gt;</code> now return standard 
				<code>java.util.Optional&lt;T&gt;</code> instead: 
				<code>setConstructorVisibleWithoutException(Class&lt;? extends Object&gt;, Class&lt;?&gt;...)</code>
			</li>
		</ul>
		<p>
			<code>setFieldVisibleWithoutException(Class&lt;? extends Object&gt;, String)</code>, 
			<code>getClassForNameWithoutException(String)</code>, 
			<code>instantiateWithoutException(String, Class&lt;?&gt;[], Object[])</code>, 
			<code>getFieldValueWithoutException(Object, String)</code>, 
			<code>getFieldValueWithoutException(Class&lt;? extends Object&gt;, String)</code>, and 
			<code>getFieldValueWithoutException(Object, String, Class&lt;? extends Object&gt;)</code>.
		</p>
		<ul>
			<li><span class="label label-info">Modified</span> The interface 
				<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterWithDiagnostic.IEvaluationResult</code> has been promoted as a top-level type as 
				<code>org.eclipse.sirius.common.tools.api.interpreter.IEvaluationResult</code>. In the process it has gained several methods to check for success and coerce the raw evaluation result into any of the types that are used by Sirius (depending on the usage context).
			</li>
			<li><span class="label label-danger">Removed</span> In interface 
				<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreter</code> (and all its implementations shipped with Sirius), the methods 
				<code>addVariableStatusListener()</code> and 
				<code>removeVariableStatusListener()</code> have been removed, along with the corresponding type 
				<code>org.eclipse.sirius.common.tools.api.interpreter.IVariableStatusListener</code>. These correspond to obsolete and unused mechanisms.
			</li>
			<li><span class="label label-danger">Removed</span> The 
				<code>interface org.eclipse.sirius.common.tools.api.interpreter.IInterpreterWithDiagnostic</code> has been removed. The single method it defined, 
				<code>evaluateExpression()</code>, is now implemented directly by the main 
				<code>IInterpreter</code> interface. In effect, all 
				<code>IInterpreter</code> are now &#8220;with diagnostic&#8221;. 
			</li>
			<li><span class="label label-danger">Removed</span> The interface 
				<code>org.eclipse.sirius.tools.api.interpreter.context.SiriusInterpreterContextFactory</code> has been removed from the API (it has been moved into an internal package): it should only be needed by Sirius itself and has no reason to be exposed as public API.
			</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-info">Modified</span> In 
				<code>org.eclipse.sirius.common.ui.tools.api.dialog.quickoutline.QuickOutlineDescriptor</code>, the methods 
				<code>getFirstPage()</code> and 
				<code>getNextPage(QuickOutlinePageDescriptor)</code> which used to return a 
				<code>org.eclipse.sirius.ext.base.Option&lt;T&gt;</code> now return standard 
				<code>java.util.Optional&lt;T&gt;</code> instead.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.layoutdata">Changes in  
			<code>org.eclipse.sirius.diagram.layoutdata</code>
		</h4>
		<ul>
			<li><span class="label label-danger">Removed</span> This plugin has been removed and fully replaced by  
				<code>org.eclipse.sirius.diagram.formatdata</code>
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in  
			<code>org.eclipse.sirius.diagram</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The message 
				<code>org.eclipse.sirius.diagram.Messages.SynchronizeGMFModelCommand_label</code> has been added. It replaces 
				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeGMFModelCommand_label</code>.
			</li>
			<li><span class="label label-success">Added</span> In 
				<code>org.eclipse.sirius.diagram.business.api.query.DragAndDropTargetQuery</code>, a new method 
				<code>getLogicalChildren()</code> has been added. It makes it easy to iterate over the logical structure of diagram elements. A static factory method 
				<code>on()</code> was also added to provide a more fluent API, e.g. 
				<code>DragAndDropTargetQuery.on(container).getLogicalChildren()</code>.
			</li>
			<li><span class="label label-success">Added</span> The extension point org.eclipse.sirius.diagram.customBundledImageShape has been created in order to provide custom shape to the bundled image style. This extension point offers more flexibility on the specification of the svg tags and attributes holding the color, border color and border size information than the extension point org.eclipse.sirius.diagram.bundledImageShape.</li>
			<li><span class="label label-info">Modified</span> The extension point org.eclipse.sirius.diagram.bundledImageShape has been marked as deprecated. Shapes provided by this extension point still work.</li>
			<li><span class="label label-info">Modified</span> The method 
				<code>org.eclipse.sirius.diagram.tools.api.command.IDiagramCommandFactory.buildInsertVerticalBlankSpaceCommand(DDiagram, int, int)</code> has been renamed to 
				<code>org.eclipse.sirius.diagram.tools.api.command.IDiagramCommandFactory.buildInsertOrRemoveVerticalBlankSpaceCommand(DDiagram, int, int)</code> because it handles now both addition and removal.
			</li>
			<li><span class="label label-info">Modified</span> Method 
				<em>getAllEdgeMappings</em> defined in 
				<code>org.eclipse.sirius.diagram.business.internal.metamodel.helper.ContentHelper</code> has been moved in a new class called 
				<code>org.eclipse.sirius.diagram.business.internal.metamodel.helper.ContentLayerHelper</code> to ensure method to be independent from pure Sirius code. 
			</li>
			<li><span class="label label-danger">Removed</span> EOperations and features have been removed from the metamodel 
				<code>diagram.ecore</code>. This is the ones that are computed outside of EMF environment with dependencies to IInterpreter or that are deprecated. The following EOperations have been removed/replaced: 
				<ul>
					<li>
						<code>DEdge.isRootFolding</code> has been removed
					</li>
					<li>
						<code>DDiagram.getNodesFromMapping</code> has been replaced by 
						<code>DDiagramSpecOperations.getNodesFromMapping</code>
					</li>
					<li>
						<code>DDiagram.getEdgesFromMapping</code> has been replaced by 
						<code>DDiagramSpecOperations.getEdgesFromMapping</code>
					</li>
					<li>
						<code>DDiagram.getContainersFromMapping</code> has been replaced by 
						<code>DDiagramSpecOperations.getEdgesFromMapping</code>
					</li>
					<li>
						<code>DiagramElementMapping.checkPrecondition</code> has been replaced by 
						<code>SiriusElementMappingSpecOperations.checkPrecondition</code>
					</li>
					<li>
						<code>DiagramElementMapping.getAllMappings</code> has been replaced by 
						<code>MappingHelper.getAllMappings</code>
					</li>
					<li>
						<code>DiagramElementMapping.isFrom</code> has been replaced by 
						<code>SiriusElementMappingSpecOperations.isFrom</code>
					</li>
					<li>
						<code>AbstractNodeMapping.clearDNodesDone</code> has been replaced by 
						<code>NodeMappingHelper.clearDNodesDone</code>
					</li>
					<li>
						<code>AbstractNodeMapping.addDoneNode</code> has been replaced by 
						<code>NodeMappingHelper.addDoneNode</code>
					</li>
					<li>
						<code>AbstractNodeMapping.getAllBorderedNodeMappings</code> has been replaced by 
						<code>MappingHelper.getAllBorderedNodeMappings</code>
					</li>
					<li>
						<code>NodeMapping.createNode</code> has been replaced by 
						<code>NodeMappingHelper.createNode</code>. You must verify that 
						<code>NodeMapping</code> is an 
						<code>INodeMappingExt</code> before calling this method. Previously, in other cases, when a 
						<code>NodeMapping</code> is not 
						<code>INodeMappingExt</code>, an 
						<code>UnsupportedOperationException</code> was thrown.
					</li>
					<li>
						<code>NodeMapping.updateNode</code> has been replaced by 
						<code>NodeMappingHelper.updateNode</code>
					</li>
					<li>
						<code>NodeMapping.updateListElement</code> has been replaced by 
						<code>NodeMappingHelper.updateListElement</code>
					</li>
					<li>
						<code>NodeMapping.getNodesCandidates(semanticOrigin,container)</code> has been replaced by 
						<code>NodeMappingHelper.getNodesCandidates(semanticOrigin,container)</code>
					</li>
					<li>
						<code>NodeMapping.getNodesCandidates(semanticOrigin,container,containerView)</code> has been replaced by 
						<code>NodeMappingHelper.getNodesCandidates(semanticOrigin,container,containerView)</code>
					</li>
					<li>
						<code>ContainerMapping.getBestStyle</code> has been replaced by 
						<code>ContainerMappingWithInterpreterHelper.getBestStyle</code>
					</li>
					<li>
						<code>EdgeMapping.createEdge(source,target,semanticTarget)</code> has been replaced by 
						<code>EdgeMappingHelper.createEdge(EdgeMapping, EdgeTarget, EdgeTarget, EObject, EObject)</code>
					</li>
					<li>
						<code>EdgeMapping.createEdge(source,target,container,semanticTarget)</code> has been replaced by 
						<code>EdgeMappingHelper.createEdge(EdgeMapping, EdgeTarget, EdgeTarget, EObject, EObject)</code>
					</li>
					<li>
						<code>EdgeMapping.getBestStyle</code> has been replaced by 
						<code>MappingWithInterpreterHelper.getBestStyle</code>
					</li>
					<li>
						<code>EdgeMapping.updateEdge</code> has been replaced by 
						<code>EdgeMappingHelper.updateEdge</code>
					</li>
					<li>
						<code>EdgeMapping.getEdgeTargetCandidates(semanticOrigin,viewPoint)</code> has been replaced by 
						<code>EdgeMappingHelper.getEdgeTargetCandidates</code>
					</li>
					<li>
						<code>EdgeMapping.getEdgeSourceCandidates</code> has been replaced by 
						<code>EdgeMappingHelper.getEdgeSourceCandidates</code>
					</li>
					<li>
						<code>EdgeMapping.getEdgeTargetCandidates(semanticOrigin,container,containerView)</code> has been replaced by 
						<code>EdgeMappingHelper.getEdgeTargetCandidates</code>
					</li>
					<li>
						<code>EdgeCreationDescription.getBestMapping</code> has been removed because it is never used.
					</li>
					<li>
						<code>ContainerDropDescription.getBestMapping</code> has been replaced by 
						<code>ContainerMappingWithInterpreterHelper.getBestMapping</code>
					</li>
					<li>
						<code>Filter.isVisible</code> has been replaced by 
						<code>FilterService.isVisible(Filter, DDiagramElement)</code>
					</li>
					<li>
						<code>VariableFilter.resetVariables</code> has been replaced by 
						<code>VariableFilterWrapper.resetVariables</code>
					</li>
				</ul>
			</li>
			<li><span class="label label-info">Modified</span> The following features have been removed/replaced:
				<ul>
					<li>
						<code>DiagramDescription.allNodeMappings</code> has been replaced by 
						<code>ContentHelper.getAllNodeMappings</code> (with 
						<code>false</code> value for parameter 
						<code>withoutOptionalLayers</code>)
					</li>
					<li>
						<code>DiagramDescription.allContainerMappings</code> has been replaced by 
						<code>ContentHelper.getAllContainerMappings</code> (with 
						<code>false</code> value for parameter 
						<code>withoutOptionalLayers</code>)
					</li>
					<li>
						<code>DiagramDescription.allLayers</code> has been replaced by 
						<code>LayerHelper.getAllLayers</code>
					</li>
					<li>
						<code>ContainerMapping.allNodeMappings</code> has been replaced by 
						<code>ContainerMappingHelper.getAllNodeMappings</code>
					</li>
					<li>
						<code>ContainerMapping.allContainerMappings</code> has been replaced by 
						<code>ContainerMappingHelper.getAllContainerMappings</code>
					</li>
					<li>
						<code>Layer.allEdgeMappings</code> has been replaced by 
						<code>ContentLayerHelper.getAllEdgeMappings</code>
					</li>
				</ul>
			</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> The method 
				<code>org.eclipse.sirius.diagram.ui.business.api.query.EditPartQuery.getDDiagram()</code> has been added to retrieve the  
				<code>DDiagram</code> associated to the edit part or to one of its ancestor.
			</li>
			<li><span class="label label-danger">Removed</span> The message 
				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeGMFModelCommand_label</code> has been removed. It has been replaced in 
				<code>org.eclipse.sirius.diagram.Messages</code>.
			</li>
			<li><span class="label label-danger">Removed</span> The extension point 
				<code>layoutDataManager</code>, deprecated since Sirius 4.1.0, has been removed. The corresponding plug-in 
				<code>org.eclipse.sirius.diagram.layoutdata</code> has also been removed.
			</li>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.diagram.ui.business.api.query.ConnectionEditPartQuery.getCenteredAnchorsAbsoluteLocation(Rectangle)</code> has been added in order to compute the location of the anchor of a connection centered on its target or source.
			</li>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.diagram.ui.business.api.query.ConnectionQuery.getAbsolutePointList(RelativeBendpoints, PrecisionPoint, PrecisionPoint)</code> has been added to compute the absolute coordinates of the bendpoints of a connection.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ui.editor">Changes in 
			<code>org.eclipse.sirius.ui.editor</code>
		</h4>
		<ul>
			<li><span class="label label-info">Modified</span> The method 
				<code>org.eclipse.sirius.ui.editor.api.pages.PageProvider.provides()</code> now takes the 
				<code>SessionEditor</code> as an additional parameter to allow implementation to decide if it should provide an additional page or not.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.sequence">Changes in 
			<code>org.eclipse.sirius.diagram.sequence</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> A new translatable message 
				<code>org.eclipse.sirius.diagram.sequence.Messages.VerticalSpaceReduction_operationName</code> has been added. It&#8217;s key is 
				<code>VerticalSpaceReduction_operationName</code> and its default value is 
				<code>Auto-reduction of {0}</code>. It is used when reducing spaces in sequence diagram.
			</li>
			<li><span class="label label-success">Added</span> A new translatable message 
				<code>org.eclipse.sirius.diagram.ui.provider.Messages.RemoveBlankSpace_cmdName</code> has been added. It&#8217;s key is 
				<code>RemoveBlankSpace_cmdName</code> and its default value is 
				<code>Remove blank space</code>. It is used when removing spaces in sequence diagram.
			</li>
			<li><span class="label label-success">Added</span>  The methods 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.dragWithKeys(int, int, int, int, AtomicBoolean, int...)</code>, 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer.dragWithKeys(int, int, int, int, AtomicBoolean, int...)</code>, 
				<code>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas.mouseDragWithKeys(int, int, int, int, AtomicBoolean, int...)</code>, have been added to make a drag an drop with more than one key modifier.
			</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> In 
				<code>org.eclipse.sirius.ecore.extender.business.internal.accessor.ModelAccessorAdapter</code>, the methods 
				<code>getAdapter(ResourceSet resourceSet)</code> and 
				<code>removeAdapter(ResourceSet resourceSet)</code> now return 
				<code>java.util.Optional&lt;T&gt;</code> instead of instance of Sirius&#8217;s custom 
				<code>org.eclipse.sirius.ext.base.Option&lt;T&gt;</code>.
			</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-info">Modified</span> In 
				<code>org.eclipse.sirius.ext.gmf.runtime.editparts.GraphicalHelper</code>, all the methods which used to take or return an 
				<code>org.eclipse.sirius.ext.base.Option&lt;T&gt;</code> not take or return a standard 
				<code>java.util.Optional&lt;T&gt;</code> 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 methods 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.dragWithKeys(int, int, int, int, AtomicBoolean, int...)</code>, 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer.dragWithKeys(int, int, int, int, AtomicBoolean, int...)</code> and 
				<code>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas.mouseDragWithKeys(int, int, int, int, AtomicBoolean, int...)</code> have been added and allows to do a drag and drop with any key modifier you want.
			</li>
			<li><span class="label label-info">Modified</span> The methods 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.dragWithKey(int, int, int, int, int, AtomicBoolean)</code>, 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer.dragWithKey(int, int, int, int, int, AtomicBoolean)</code> and 
				<code>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas.mouseDragWithKey(int, int, int, int, int, AtomicBoolean)</code> have been marked as deprecated. The method 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.dragWithKeys(int, int, int, int, AtomicBoolean, int...)</code>, 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer.dragWithKeys(int, int, int, int, AtomicBoolean, int...)</code> and 
				<code>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas.mouseDragWithKeys(int, int, int, int, AtomicBoolean, int...)</code> should be used instead.C
			</li>
		</ul>
		<h2 id="sirius6.1.2">Changes in Sirius 6.1.2</h2>
		<h3 id="UserVisibleChanges3">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-info">Modified</span> Invalid representations, that are either representations which semantic target does not exist anymore or representations that can not be retrieved anymore, are grayed in the Model Explorer and the only available action is 
				<em>Delete</em>. It was previously the case only for representations which semantic target does not exist anymore.
			</li>
		</ul>
		<h3 id="DeveloperVisibleChanges4">Developer-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> If the 
				<code>org.eclipse.sirius.diagam.ui.hidePrintingOfPermissionAuthorityDecoration</code> system property is set to true and if there is no other printable decoration provided at the same location (South-West), the permission authority decorations displayed on diagrams are not printed nor exported in images (export as image actions).
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius3">Changes in  
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The methods 
				<code>org.eclipse.sirius.business.api.query.DRepresentationDescriptorQuery.isRepresentationReachable()</code> and 
				<code>org.eclipse.sirius.business.api.query.DRepresentationDescriptorQuery.isRepresentationValid()</code> have been added. The former allows to know if the 
				<code>DRepresentation</code> can be retrieved from the 
				<code>DRepresentationDescriptor.repPath</code>: the repPath is correctly set and the representation effectively exists. The latter returns true if the 
				<code>DRepresentationDescriptor</code> is either dangling (
				<code>DRepresentationDescriptor.repPath</code> can not be found) or can not by retrieved.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in  
			<code>org.eclipse.sirius.diagram.ui</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span>  A new field 
				<code>CustomLayoutConfiguration layoutConfiguration</code> has been added to 
				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.provider.DefaultLayoutProvider</code> and its setter method 
			</li>
		</ul>
		<p>
			<code>setLayoutConfiguration(CustomLayoutConfiguration)</code>. It allows any layout provider to be aware of any VSM layout configuration that should be used.
		</p>
		<ul>
			<li><span class="label label-info">Modified</span> The method 
				<code>getDiagramLayoutProvider(DiagramEditPart, IAdaptable)</code> in package  
				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.provider.AbstractLayoutProvider</code> has been made protected to allow to provide layout provider from other mechanism than LayoutService.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in  
			<code>org.eclipse.sirius.diagram</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The getter and setter methods have been added for the new attribute 
				<code>org.eclipse.sirius.diagram.ui.tools.api.decoration.DecorationDescriptor.isPrintable</code>. This attribute is used to know if the decoration should be hidden when printing or exporting the diagram. The behavior is applied only if there is no printable decoration in its diagram element location (South, West, South-West etc).
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.common3">Changes in  
			<code>org.eclipse.sirius.common</code>
		</h4>
		<ul>
			<li><span class="label label-danger">Removed</span> The class 
				<code>org.eclipse.sirius.common.tools.api.util.SiriusCopier</code> has been replaced by the internal class 
				<code>org.eclipse.sirius.tools.internal.SiriusCopierHelper</code>. 
				<code>SiriusCopier.Helper.copy(T)</code> and 
				<code>SiriusCopier.Helper.copyAll(Collection&lt;? extends T&gt;)</code> have been replaced by 
				<code>SiriusCopierHelper.copyWithNoUidDuplication(T)</code>, 
				<code>SiriusCopierHelper.copyAllWithNoUidDuplication(Collection&lt;? extends T&gt;)</code> and 
				<code>SiriusCopierHelper.copyAllWithNoUidDuplication(Collection&lt;? extends EObject&gt;, boolean, boolean, boolean)</code>. It provides the ability to copy an object without copying the EAttribute 
				<code>IDENTIFIED_ELEMENT__UID</code>. For all these methods, this id is not set by the factory or during object creation, it is set during the copy using 
				<code>org.eclipse.emf.ecore.util.EcoreUtil.generateUUID()</code>.
			</li>
		</ul>
		<h2 id="sirius6.1.1">Changes in Sirius 6.1.1</h2>
		<h4 id="Changesinorg.eclipse.sirius.diagram4">Changes in  
			<code>org.eclipse.sirius.diagram</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> Add method 
				<code>allowsVisibilityModeActivation()</code> in 
				<code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider</code> This method is used to know if the visibility mode is supported by a specific diagram description.
			</li>
		</ul>
		<h2 id="sirius6.1.0">Changes in Sirius 6.1.0</h2>
		<ul>
			<li><span class="label label-info">IMPORTANT</span>  The new (and still experimental) 
				<em>Workflow</em> and 
				<em>Server</em> features depend on a specific version of Eclipse Jetty which is available in the main Eclipse Photon repository. They can not be used under Oxygen (which include older and incompatible versions of Jetty).
			</li>
			<li><span class="label label-info">IMPORTANT</span> Please note that starting from version 6.1, Sirius is now licensed under 
				<a href="https://www.eclipse.org/legal/epl-2.0/">version 2.0 of the Eclipse Public License</a>, which updates some wording and clarifies some points but neither changes the open-source nature of Sirius nor the implications of using or embedding it. See 
				<a href="https://www.eclipse.org/legal/epl-2.0/faq.php">the official FAQ</a> for details about the difference between EPL v1.0 (which was used before) and v2.0.
			</li>
		</ul>
		<h3 id="UserVisibleChanges4">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> A new preference has been added in the Sirius preference panel. It allows Sirius to ask the user if he wants to save session resources after an automatic migration. If the new preference is ticked, the pop-up will only appear for session opening caused by a direct action of the user (i.e. opening a diagram or unfolding the resources in the model explorer). You can refer to the 
				<a href="user/general/Modeling%20Project.html#Migration">user documentation </a> for more details.
			</li>
			<li><span class="label label-success">Added</span> On sequence diagrams, it is now possible to add vertical blank spaces on standard edition mode by dragging the mouse anywhere in the canvas with the Ctrl+Shift keys pressed.  This 
				<a href="user/sequences/Sequence%20Diagrams.html#insert_vertical_blank_space">feature:</a> was here since version 6.0.0 but was only accessible through the ruler.
			</li>
			<li><span class="label label-success">Added</span> The preference 
				<code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys.PREF_DISPLAY_VSM_USER_FIXED_COLOR_IN_PALETTE</code> has been added and can be managed in Preferences/Sirius/Sirius Diagram/Appearance/Display viewpoint colors. It allows to display, in the color palette, the user fixed color(defined in the activated viewpoints) in addition to standard colors. The color palette is available in Appearance tab of the Properties view.
			</li>
			<li><span class="label label-success">Added</span> A new visibility diagram edit 
				<a href="user/diagrams/Diagrams.html#edit_modes">mode</a> is available. It allows to see diagram elements hidden manually with some transparency. In this mode the visibility can be changed by a double click on the target diagram element.
			</li>
		</ul>
		<p>
			<img border="0" src="user/diagrams/images/show_hide_mode_example.png"/>
		</p>
		<ul>
			<li><span class="label label-success">Added</span> A new dropdown menu gathering the layouting, visibility and standard mode is now available in the tabbar of diagram editors to activate the chosen edit mode. The standard mode corresponds to a diagram editor without the layouting and visibility mode activated.</li>
		</ul>
		<p>
			<img border="0" src="user/diagrams/images/show_hide_mode_tabbar_activate.png"/>
		</p>
		<ul>
			<li><span class="label label-success">Added</span> A quick fix is now available on the error marker signaling a modeling project without a representations file. Processing this quick fix will create a new empty representation file.</li>
			<li><span class="label label-info">Modified</span> The tool &#8220;Link Note&#8221;, introduced in Sirius 6.0.0, has been renamed into &#8220;Representation Link&#8221;.</li>
			<li><span class="label label-info">Modified</span> A &#8220;Representation Link&#8221; is no longer deleted automatically when the targeted representation is deleted. Instead, the note header changes to &#8220;Broken Representation Link&#8221; and the note icon changes to a small red diagonal cross. You can refer to the 
				<a href="user/diagrams/Diagrams.html#notes">user documentation</a> for more details.
			</li>
		</ul>
		<h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> 
				<a href="specifier/workflows/Workflows.html">Initial documentation</a> has been added for the &#8220;Workflow&#8221; feature introduced in 6.0.0 (which is still experimental).
			</li>
			<li><span class="label label-success">Added</span> The contribution of 
				<code>PopupMenu</code> in diagram has been improved. It is now possible to define 
				<code>Group</code> in 
				<code>PopupMenu</code>. A group allows to group several actions. It appears like a separator between groups of actions. It is also possible to reuse existing menu or group.
			</li>
		</ul>
		<p>Previously, it was possible to add new menus and actions at the end of the contextual menu:
			<br/>
			<img border="0" src="images/popupMenuBefore.png"/>
			<br/>Now, it is possible to:
		</p>
		<ul>
			<li>group actions (actions in MySpecificPopupMenu2 for example),</li>
			<li>add new menus and actions in a new group of an existing menu (action MyActionF1 and menu MySpecificPopupMenu2 for example)</li>
			<li>add new menus and actions in an existing group of an existing menu (action MyActionH1 and menu MySpecificPopupMenu3 for example):</li>
		</ul>
		<p>
			<img border="0" src="images/popupMenuAfter.png"/>
		</p>
		<ul>
			<li>add new actions in the &#8220;Select All&#8221; menu of the 
				<a href="user/diagrams/Diagrams.html#ref_tabbar">tab-bar</a>. Some services have been directly provided in Sirius in class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.interpreter.StandardDiagramServices</code>: see 
				<a href="#DeveloperVisibleChanges">org.eclipse.sirius.diagram.ui developer visible changes</a> for the list of services or chapter 
				<a href="specifier/general/ToolsSpecification.html#selectionAfterToolExecution">Selection after tool execution</a> of documentation to see how to use them.
			</li>
		</ul>
		<p>Refer to the 
			<a href="specifier/diagrams/Diagrams.html#group">specifier documentation</a> for details.
		</p>
		<ul>
			<li><span class="label label-info">Modified</span> Specifier can now hide header column of Edition Table (the left-most column of the table). It is possible by specifying value -1 in the 
				<em>Initial Header Column Width</em> field of Edition table representation. See 
				<a href="specifier/tables/Tables.html#edition_tables">the documentation</a> for details.
			</li>
		</ul>
		<h3 id="DeveloperVisibleChanges5">Developer-Visible Changes</h3>
		<p><span class="label label-info">IMPORTANT</span> Note that all plug-ins in the 
			<em>Sirius Server</em> feature (
			<code>org.eclipse.sirius.server.*</code> and 
			<code>org.eclipse.sirius.services.*</code>) are still considered experimental in this version. In particular, all APIs (Java, HTTP, WebSocket) they provide should be treated as provisional even if they are exposed publicly in 
			<code>*.api.*</code> packages. We reserve the right to modify them in incompatible ways even in future maintenance versions.
		</p>
		<ul>
			<li><span class="label label-success">Added</span> Mechanism to ask user input on opening of a session with migrated resources if the session opening comes from a direct user action
				<ul>
					<li>New available UI callback (
						<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askUserAndSaveMigratedSession(session)</code>) used to ask user if he wants to save the resources after migration and save them if necessary.
					</li>
					<li>New method to open session when this is due to a direct user action (
						<code>org.eclipse.sirius.business.api.session.SessionManager.openSession(sessionResourceURI, monitor, uiCallback, isDirectUserActionLoading)</code>). Previous version calls this new version with the value false for 
						<code>isDirectUserActionLoading</code> parameter
					</li>
					<li>New system preference to know if user want to be asked to save resources after automatic migration 
						<code>org.eclipse.sirius.common.tools.api.constant.CommonPreferencesConstants.PREF_ASK_TO_SAVE_RESOURCE_AFTER_MIGRATION</code>
					</li>
				</ul>
			</li>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.migrationHandler</code> extension point has been added. It allows to contribute migration process, mainly handle migration options.
			</li>
			<li><span class="label label-info">Modified</span> Upgraded ELK version from 0.3.0 to 0.4.0, see the 
				<a href="https://projects.eclipse.org/projects/modeling.elk/releases/0.4.0">ELK documentation</a> for the list of changes in that version.
			</li>
			<li><span class="label label-info">Modified</span> The Acceleo version has been changed from 3.7.2 to 3.7.4.</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>SiriusFormatDataManagerForSemanticElements</code> has been moved from package 
				<code>org.eclipse.sirius.diagram.ui.tools.internal.format.semantic</code> to 
				<code>org.eclipse.sirius.diagram.ui.tools.api.format.semantic</code>.
			</li>
			<li><span class="label label-danger">Removed</span> 
				<em>EOperations</em> 
				<code>checkRule</code> and 
				<code>getMessage</code> of 
				<code>ValidationRule</code> 
				<em>EClass</em> have been removed from 
				<code>viewpoint</code> metamodel. These operations were deprecated and useless since we used method of 
				<code>org.eclipse.sirius.business.internal.metamodel.description.validation.operations.ValidationRuleOperations</code> class.
			</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.preferences.SiriusUIPreferencesKeys.PREF_DISPLAY_VSM_USER_FIXED_COLOR_IN_PALETTE</code> has been added. Its default value is true. It allows to display, in the color palette, the user fixed color(defined in the activated viewpoints) in addition to standard colors. The color palette is available in Appearance tab of the Properties view.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in 
			<code>org.eclipse.sirius.diagram.ui</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> Some specific services exist natively in Sirius and can be used to contribute new select all actions. Theses services are all in the class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.interpreter.StandardDiagramServices</code>:
				<ul>
					<li>
						<code>stdGetViewsRepresentingSameEType(DSemanticDiagram, List&lt;DSemanticDecorator&gt;)</code>: Return the list of 
						<code>DSemanticDecorator</code> representing semantic element with same EType as the current selected diagram elements.
					</li>
					<li>
						<code>stdGetViewsWithSameMapping(DSemanticDiagram, List&lt;DSemanticDecorator&gt;)</code>: Return the list of 
						<code>DSemanticDecorator</code> having the same mappings as the current selected diagram elements.
					</li>
					<li>
						<code>stdGetViewsRepresentingSelectedType(DSemanticDiagram)</code>: Return the list of 
						<code>DSemanticDecorator</code> in the current diagram representing semantic element having the EType provided by the end-user through a dialog box. This dialog box can be improved. There is currently no completion, neither validation.
					</li>
					<li>
						<code>stdGetViewsOfExpression(DSemanticDiagram)</code>: Return the list of 
						<code>DSemanticDecorator</code> corresponding to the evaluation of an expression written by the end-user in a dialog box. This dialog box can be improved. There is currently no completion, neither validation.
					</li>
				</ul>
			</li>
			<li><span class="label label-success">Added</span> The query 
				<code>isRepresentationLink()</code> has been added in 
				<code>org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery</code> to know if the view is a representation link or a normal note.
			</li>
			<li><span class="label label-success">Added</span> The query 
				<code>isRepresentationLinkBroken()</code> has been added in 
				<code>org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery</code> to know, for a representation link, if it refers to a deleted representation descriptor. Invocations should be guarded by 
				<code>isRepresentationLink()</code>.
			</li>
			<li><span class="label label-info">Modified</span> The interface 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerFigureDesc</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The interface 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.StyledFigure</code> has been moved to 
				<code>org.eclipse.sirius.ext.draw2d.figure</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The interface 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.ITransparentFigure</code> has been moved to 
				<code>org.eclipse.sirius.ext.draw2d.figure</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The interface 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.IRoundedCorner</code> has been moved to 
				<code>org.eclipse.sirius.ext.draw2d.figure</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The interface 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.ImageFigureWithAlpha</code> has been moved to 
				<code>org.eclipse.sirius.ext.draw2d.figure</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The interface 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.anchor.ZoomDependantAnchor</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures.util</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The interface 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.anchor.AnchorProvider</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures.util</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.ViewGradientFigureDesc</code> has been moved to 
				<code>org.eclipse.sirius.ext.draw2d.figure</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.TransparentFigureGraphicsModifier</code> has been moved to 
				<code>org.eclipse.sirius.ext.draw2d.figure</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SiriusWrapLabel</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.PolygoneAndPolylineDecoraction</code> has been moved to 
				<code>org.eclipse.sirius.ext.draw2d.figure</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.ParallelogramFigure</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.OneLineMarginBorder</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.ODesignEllipseFigure</code> has been moved to 
				<code>org.eclipse.sirius.ext.draw2d.figure</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.GaugeSectionFigure</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.GaugeCompositeFigure</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.anchor.AirSlidableImageAnchor</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures.util</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AlphaDropShadowBorder</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AirStyleDefaultSizeNodeFigure</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AirNoteFigure</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AirDefaultSizeNodeFigure</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractTransparentRectangle</code> has been moved to 
				<code>org.eclipse.sirius.ext.draw2d.figure</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractTransparentRectangle</code> has been moved to 
				<code>org.eclipse.sirius.ext.draw2d.figure</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractTransparentNode</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractTransparentImage</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractTransparentEllipse</code> has been moved to 
				<code>org.eclipse.sirius.ext.draw2d.figure</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractGeoShapePolygonFigure</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> An int parameter replace now the BackgroundStyle parameter into the class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.GradientRoundedRectangle</code>. This parameter represents still the backgroundStyle in int format.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.sequence.ui">Changes in 
			<code>org.eclipse.sirius.diagram.sequence.ui</code>
		</h4>
		<ul>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.sequence.ui.tool.internal.figure.HorizontalGuide</code> has been moved to 
				<code>org.eclipse.sirius.ext.draw2d.figure</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.sequence.ui.tool.internal.figure.CombinedFragmentInvisibleResizableCompartmentFigure</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.diagram.sequence.ui.tool.internal.figure.SequenceSlidableAnchor</code> has been moved to 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures</code> package.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.common4">Changes in  
			<code>org.eclipse.sirius.common</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The new preference 
				<code>PREF_ASK_TO_SAVE_RESOURCE_AFTER_MIGRATION</code> has been added in 
				<code>CommonPreferencesConstants</code>. If true users will be asked to save the VSM or aird if it has been automatically migrated after a user action.
			</li>
			<li><span class="label label-success">Added</span> The new 
				<code>org.eclipse.sirius.common.tools.api.util.SiriusCopier</code> has been added to provide the ability to copy an object without copying the attribute seen as id by EMF. If this id is not set by the factory or during object creation and if its concrete expected type is 
				<code>String</code>, it is set during the copy using 
				<code>org.eclipse.emf.ecore.util.EcoreUtil.generateUUID()</code>.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support3">Changes in 
			<code>org.eclipse.sirius.tests.swtbot.support</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The new method 
				<code>AbstractSiriusSwtBotGefTestCase.changeSiriusCommonPreference(String, Boolean)</code> has been added. It allows to change a preference defined in 
				<code>oes.common</code> plugin.
			</li>
		</ul>
		<h4 id="Migrations2">Migrations</h4>
		<ul>
			<li><span class="label label-success">Added</span> A migration participant has been added to convert the serialized xmi:id to the technical id (uid attribut) for Sirius model elements of the .aird files (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=525261">bugzilla #525261</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>14.1.0.201808300808</em>.
			</li>
			<li><span class="label label-success">Added</span> A migration participant has been added to fix diagrams with corrupted Note, Text or Note Attachment (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=539550">bugzilla #539550</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>14.1.0.201809271200</em>.
			</li>
			<li><span class="label label-success">Added</span> A migration participant has been added to update existing representation link. (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=535648">bugzilla #533175</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>14.1.0.201810111800</em>.
			</li>
			<li><span class="label label-success">Added</span> A migration participant has been added to fix edge with multiple connector style (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=539944">bugzilla #539944</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>14.1.0.201810161215</em>.
			</li>
		</ul>
		<h2 id="sirius6.0.0">Changes in Sirius 6.0.0</h2>
		<h3 id="UserVisibleChanges5">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> A new feature allows user to insert vertical blank space in sequence diagram. You can refer to the 
				<a href="user/sequences/Sequence%20Diagrams.html#insert_vertical_blank_space">user documentation </a> for more details. 
			</li>
			<li><span class="label label-success">Added</span> A new feature called &#8220;Generic Edge Creation Tool&#8221; allows to create an edge by starting to select the source and the target before choosing the concrete edge creation tool. That allows to restrict the list of possible edge creation tools (possibly only one edge or no one) according to the selected source and target.</li>
		</ul>
		<p>
			<img border="0" src="images/genericEdgeCreationTool.png"/>
		</p>
		<ul>
			<li> <span class="label label-success">Added</span> A new feature called &#8220;Link Note&#8221; has been added. It is a special kind of note which references any existing representation in the project. It is possible to navigate to the target representation by double clicking on a link note. You can refer to the 
				<a href="user/diagrams/Diagrams.html#notes">user documentation</a> for more details.
			</li>
			<li><span class="label label-success">Added</span> The color palette for text, line and fill buttons, in appearance tab in properties view, has been enhanced. Before, when clicking on text, line or fill buttons, the available colors were only 12 arbitrary colors. Now, there are 50 maximum colors distributed in 10 columns. The displayed colors are
				<ul>
					<li>a shading of black to white then,</li>
					<li>all fixed colors defined in VSM of all selected viewpoints and </li>
					<li>the Sirius fixed colors following the colors of the rainbow.</li>
				</ul>
			</li>
		</ul>
		<p>
			<img border="0" src="images/color_palette.png"/>
		</p>
		<h3 id="SpecifierVisibleChanges4">Specifier-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> An action is added in main toolbar to reload the VSM of installed plug-ins that may have changed. Refer to the 
				<a href="specifier/general/Specifying_Viewpoints.html#reloadVSM">specifier documentation</a> for details.
			</li>
			<li><span class="label label-success">Added</span> In the VSM editor, when the cursor is inside an interpreted expression at a location which corresponds to a Java service invocation, hitting 
				<strong>F3</strong> will navigate to the service implementation in a Java editor. See 
				<a href="specifier/general/Writing_Queries.html#service_navigation">the documentation</a> for more details.
			</li>
			<li><span class="label label-success">Added</span> Specifier can now define a background color for a diagram representation. It is possible by specifying color in the 
				<em>Background</em> property section of the 
				<em>Diagram Description</em>. Pre-defined system colors and colors from the 
				<em>User Color Palette</em> are supported. See 
				<a href="specifier/diagrams/Diagrams.html#diagram_description">the documentation</a> for details.
			</li>
			<li><span class="label label-success">Added</span> A new experimental feature regarding layouting is available. It brings you the capabilities of ELK layouting framework. If installed you can specify in your VSM the layout algorithm triggered by arrange all button among the ELK algorithms. To get an overview of what is possible with ELK you can read this 
				<a href="https://blog.obeo.fr/a-picture-is-worth-a-thousand-words">article</a>. To know how to use the ELK algorithms, read the 
				<a href="specifier/diagrams/Diagrams.html#useElk">documentation</a>
			</li>
			<li><span class="label label-info">Modified</span> Warning: Java service throwing an 
				<code>OperationCanceledException</code> with a message containing the specific key word "
				<code>-RT-</code>" has now a specific behavior. In this case, the 
				<code>OperationCanceledException</code> is rethrown to rollback the command if this Java service is called from an AQL expression or through the service interpreter. You can refer to 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=531487">bugzilla 531487</a> for more details.
			</li>
		</ul>
		<h3 id="DeveloperVisibleChanges6">Developer-Visible Changes</h3>
		<ul>
			<li><span class="label label-info">Modified</span> The SWTBot test framework version has been upgraded toward SWTBot 2.6. The main impacts are described below:
				<ul>
					<li>The way we retrieved some views by using 
						<code>bot.viewByTitle</code> (like &#8220;Problems&#8221; or &#8220;Error Log&#8221;) may not work anymore. Use 
						<code>bot.viewByPartName</code> instead.
					</li>
					<li>
						<code>org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot.contextMenu(String)</code> raise a 
						<code>WidgetNotFoundException</code> instead of a 
						<code>TimeoutException</code>.
					</li>
					<li>The 
						<code>org.eclipse.sirius.tests.swtbot.support.utils.dnd.DndUtil</code> has been updated to be compatible with Oxygen and Photon platforms. Some methods may not work anymore on Neon platform.
					</li>
				</ul>
			</li>
			<li><span class="label label-info">Modified</span> Some changes have been done in the image export tooling. Main impacts are described below:
				<ul>
					<li>The export of images, methods 
						<code>org.eclipse.sirius.ui.tools.api.actions.export.ExportAction.execute</code> and 
						<code>org.eclipse.sirius.ui.tools.api.actions.export.ExportAction.createImageFiles</code>, do not open UI Dialogs anymore. It throws an 
						<code>java.lang.reflect.InvocationTargetException</code> that wraps the real cause of the error (
						<code>org.eclipse.sirius.ui.tools.api.actions.export.SizeTooLargeException</code> or 
						<code>java.lang.OutOfMemoryError</code>). Callers have to handle properly the exception.
					</li>
					<li>The mechanism allowing to authorize or forbid the export of an image, method 
						<code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService.isTooBig</code>, can now handle very large images that previously leads to incorrect exports.
					</li>
				</ul>
			</li>
			<li><span class="label label-danger">Removed</span> Since Sirius 5.0.0, 
				<code>org.eclipse.sirius.ext.jface.viewers.IToolTipProvider</code> is not used anymore to provide a tooltip on diagram element decorations defined in the VSM. The tooltip is defined directly with an interpreted expression on 
				<code>GenericDecorationDescription</code>, 
				<code>MappingBasedDecoration</code> and 
				<code>SemanticBasedDecoration</code>.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.common5">Changes in 
			<code>org.eclipse.sirius.common</code>
		</h4>
		<ul>
			<li><span class="label label-danger">Removed</span> The interface 
				<code>org.eclipse.sirius.common.tools.api.interpreter.IExpressionProposal</code> and its only implementation 
				<code>DefaultExpressionProposal</code> (in the same package) have been removed. They were not used anywhere, expression completion API is actually defined in package 
				<code>org.eclipse.sirius.common.tools.api.contentassist</code> which has its own types.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius4">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.business.api.componentization.ViewpointRegistry.reloadAllFromPlugins()</code> has been added to reload, from the runtime, all the VSMs of installed plug-ins and have the effect dynamically in the runtime.
			</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryImpl()</code> has been moved to 
				<code>org.eclipse.sirius.business.internal.componentization</code> package.
			</li>
			<li><span class="label label-danger">Removed</span> The whole 
				<code>contribution</code> metamodel, which lived in package 
				<code>org.eclipse.sirius.description.contribution</code>, has been removed. It corresponded to an experimental feature which has been abandonned long ago.
			</li>
			<li><span class="label label-danger">Removed</span> The whole 
				<code>DRefreshable.refresh()</code> EOperation has been removed from the metamodel, along with all its implementations. Client code that needs the functionality can use either 
				<code>DialectManager.refresh()</code> for 
				<code>DRepesentations</code> or the new 
				<code>org.eclipse.sirius.diagram.tools.api.command.view.RefreshSiriusElement.refresh(DRefreshable)</code> static method for diagram elements (
				<code>DRefreshable.refresh()</code> was a no-op for elements of other dialects). 
			</li>
			<li><span class="label label-danger">Removed</span> The 
				<code>org.eclipse.sirius.viewpointSpecificationModel</code> extension point has been removed. It was part of the same experimental feauture and not actually used in practice.
			</li>
			<li><span class="label label-danger">Removed</span> In 
				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper</code>, the method 
				<code>getViewpointSelection()</code> has been removed. It used an internal type as argument which has also been removed.
			</li>
			<li><span class="label label-danger">Removed</span> In 
				<code>org.eclipse.sirius.business.api.helper.SiriusResourceHelper</code>, the method 
				<code>getCorrespondingViewpoint(Session session, URI, boolean)</code> has been removed. It was not used anywhere, the real one is 
				<code>getCorrespondingViewpoint(Session, Viewpoint)</code> in the same class.
			</li>
			<li><span class="label label-danger">Removed</span> In 
				<code>org.eclipse.sirius.business.api.dialect.DialectServices</code> (and all its implementations), the method 
				<code>refreshEffectiveRepresentationDescription(DRepresentation, IProgressMonitor)</code> has been removed. It corresponded to an experimental feature which has been abandonned long ago. 
			</li>
			<li><span class="label label-success">Added</span> A new 
				<code>ToolSection</code>, 
				<code>ToolGroup</code>  and 
				<code>ToolInstance</code> model element have been added in 
				<code>viewpoint</code> metamodel. These elements are used to represent tools available for a 
				<code>DDiagram</code> with their visibility, enabling and filtering status. 
				<code>ToolSectionInstance</code> are available in the 
				<code>UIState</code> of a 
				<code>DDiagram</code> by using the 
				<code>toolSections</code> reference. 
			</li>
			<li><span class="label label-danger">Removed</span> the class 
				<code>ToolFilterDescriptionListener</code> has been removed because of the new 
				<code>ToolMangament</code> mechanism used to handle tools and layer changes.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram5">Changes in 
			<code>org.eclipse.sirius.diagram</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.diagram.tools.api.preferences.SiriusDiagramPreferencesKeys.PREF_DISPLAY_GENERIC_EDGE_CREATION_TOOL</code> has been added to make to possible to hide the new generic edge creation tool. See the 
				<em>User-Visible Changes</em> or the user documentation for more details.
			</li>
			<li><span class="label label-success">Added</span> A component 
				<code>ToolManagement</code> has been created to manage tool availability and status for a given 
				<code>DDiagram</code>. It comes with the listener interface 
				<code>ToolChangeListener</code> that can be used to be warned about tool changes.
			</li>
			<li><span class="label label-success">Added</span>  An interface 
				<code>ToolConstants</code> has been created to gather constants relative to tool management.
			</li>
			<li><span class="label label-info">Modified</span> The constants 
				<code>SiriusDiagramPaletteFactory#GENERIC_CONNECTION_CREATION_TOOL</code> and 
				<code>SiriusDiagramPaletteFactory#TOOL_NOTEATTACHMENT</code> have been moved in 
				<code>ToolConstants</code>
			</li>
			<li><span class="label label-info">Modified</span> The classes 
				<code>ToolFilter</code> and 
				<code>ToolFilterFromDescription</code> have been moved from the plugin 
				<code>oes.diagram.ui</code> to 
				<code>oes.diagram</code> in package 
				<code>org.eclipse.sirius.diagram.tools.api.managment</code>
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.ui5">Changes in 
			<code>org.eclipse.sirius.diagram.ui</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor.createStraightenContribution()</code> has been added to make accessible the creation of the Straighten To tabbar contribution item.
			</li>
		</ul>
		<ul>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.diagram.ui.customLayoutAlgorithmProvider</code> extension point has been added. It allows to contribute layout algorithms that can be configured directly in the VSM. This extension point comes with the following classes as API: 
				<code>org.eclipse.sirius.diagram.ui.api.layout.CustomLayoutAlgorithmProvider</code>, 
				<code>org.eclipse.sirius.diagram.ui.api.layout.CustomLayoutAlgorithm</code>, 
				<code>org.eclipse.sirius.diagram.ui.api.layout.EnumChoice</code> and 
				<code>org.eclipse.sirius.diagram.ui.api.layout.LayoutOptionFactory</code>.
			</li>
		</ul>
		<ul>
			<li><span class="label label-info">Modified</span> The methods 
				<code>hideLayer(Layer)</code>, 
				<code>showLayer(Layer)</code>, 
				<code>addToolFilter(ToolFilter)</code> and 
				<code>removeToolFilter(ToolFilter)</code> of 
				<code>org.eclipse.sirius.diagram.ui.tools.api.graphical.edit.palette.PaletteManager</code> have been made deprecated. They are not used anymore. The API 
				<code>ToolManagement</code> is now the entry point to make palette update regarding tools and layer changes.
			</li>
		</ul>
		<ul>
			<li><span class="label label-info">Modified</span> The 
				<code>Diagram</code> parameter of the methods 
				<code>oes.update(Diagram)</code> and 
				<code>oes.update(Diagram,boolean)</code> has been changed to 
				<code>DDiagram</code>.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ui2">Changes in 
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li><span class="label label-danger">Removed</span> The class 
				<code>org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelectionDialog</code> has been removed.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in 
			<code>org.eclipse.sirius.tests.junit.support</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.tests.support.api.TestsUtil.isBeforeOxygenPlatform()</code> has been added to detect if the current platform corresponds to a version before Oxygen.
			</li>
			<li><span class="label label-info">Modified</span> A 
				<code>String</code> parameter has been added to the method 
				<code>org.eclipse.sirius.tests.support.api.TestsUtil.setTargetPlatform()</code>. This new parameter corresponds to the plug-in name from where the tests are currently launched (for example 
				<code>org.eclipse.sirius.tests.swtbot.Activator.PLUGIN_ID</code>). It avoids to build a wrong target platform containing each Sirius plug-ins twice. 
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support4">Changes in 
			<code>org.eclipse.sirius.tests.swtbot.support</code>
		</h4>
		<ul>
			<li><span class="label label-danger">Removed</span> The method 
				<code>org.eclipse.sirius.tests.swtbot.support.utils.dnd.DndUtil#dragAndDrop(AbstractSWTBot&lt;? extends Widget&gt;, AbstractSWTBot&lt;? extends Widget&gt;)</code> has been removed. When explicit drop coordinates are not needed, use the standard SWTbot 
				<code>org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot.dragAndDrop(AbstractSWTBot&lt;? extends Widget&gt;)</code> method instead. 
			</li>
		</ul>
		<h4 id="Migrations3">Migrations</h4>
		<ul>
			<li><span class="label label-success">Added</span> A migration participant has been added to fix diagram with note attachment corrupted (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=533177">bugzilla #533177</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>13.0.0.201804031646</em>.
			</li>
		</ul>
		<h4 id="TranslationKeysChanges">Translation Keys Changes</h4>
		<h2 id="sirius5.1.1">Changes in Sirius 5.1.1</h2>
		<h3 id="UserVisibleChanges6">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-info">Modified</span> When exporting a diagram as an image, it is now possible to choose an image size level. Before this, a preference called 
				<em>AutoScale</em> was available and when it was enable, the diagram was scaled to the maximum size safely allowed by the system. Now, a new preference named 
				<em>Size of exported images</em> is available in the 
				<em>Sirius &gt; Sirius Diagram</em> preference page and offer this possibility. Setting size to 
				<em>Max</em> generates same diagrams as by using the previous preference 
				<em>AutoScale</em>. This can produce image with big size in long generation time. If 
				<em>Size of exported images</em> is set to level 
				<em>Nominal</em>, diagram will be exported with nominal size (quality will be lower but export time will be shorter). This new preference allows you to choose the tradeoff you want. The 
				<a href="user/diagrams/Diagrams.html#Exportingimages">user documentation </a> details this change with an example. 
			</li>
			<li><span class="label label-info">Modified</span> The "
				<em>Auto Size</em>" action can now be applied on region container. Before that, the action was available only for regions.
			</li>
			<li><span class="label label-info">Modified</span> The "
				<em>Make Same Size</em>" action can now be applied on region container. If selected region containers have the same number of regions, the regions will have the same size. If the region container used for reference has more regions than the other(s), the last region of others will have the size of all remaining regions in the one used for reference.
			</li>
			<li><span class="label label-info">Modified</span> In diagrams, the selection by drawing a rectangle on container (using ALT key) now has the same behaviors than selection by drawing a rectangle on the diagram&#8217;s background. You can refer to 
				<em>Selection</em> section of the 
				<a href="user/diagrams/Diagrams.html#standardToolId">Standard Tools</a> chapter for more details on this tool.
			</li>
		</ul>
		<h3 id="DeveloperVisibleChanges7">Developer-Visible Changes</h3>
		<h4 id="Changesinorg.eclipse.sirius5">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder.of(EObject)</code> has been added to provide an easy way to get the 
				<code>SiriusReferenceFinder</code> from an 
				<code>EObject</code> in the Sirius 
				<code>Session</code>. 
			</li>
			<li><span class="label label-info">Modified</span> (experimental) The method 
				<code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder.getReferencingSiriusElements(Collection&lt;EObject&gt;, SearchScope)</code>. The SearchScope.LOADED_REPRESENTATIONS_SCOPE scope covers the search and result scope. Then, no additional resource will be loaded using this scope.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.ui6">Changes in 
			<code>org.eclipse.sirius.diagram.ui</code>
		</h4>
		<ul>
			<li><span class="label label-warning">Deprecated</span> Preference 
				<code>PREF_SCALE_DIAGRAMS_ON_EXPORT</code> from 
				<code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code> is now deprecated. User should use new preference 
				<code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys</code>: 
				<code>PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT</code>.
			</li>
			<li><span class="label label-success">Added</span> A new attribute 
				<code>margin</code> has been added in 
				<code>org.eclipse.sirius.diagram.ui.business.api.DiagramExportResult</code>. This attribute indicates what margin has been used to produce a white frame during diagram export. This attribute is available from the getter 
				<code>getMargin()</code>. A new constructor is also available to pass on the margin 
				<code>org.eclipse.sirius.diagram.ui.business.api.DiagramExportResult.DiagramExportResult(DDiagram, double, int, Collection&lt;IPath&gt;)</code>. 
			</li>
			<li><span class="label label-info">Modified</span> If you previously override the default Sirius value for 
				<code>SiriusDiagramUiPreferencesKeys.PREF_SCALE_DIAGRAMS_ON_EXPORT</code>, you must replace this override by an override of the new preference 
				<code>SiriusUIPreferencesKeys.PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT</code>. Example: 
			</li>
		</ul>
		<pre>SiriusEditPlugin.getPlugin().getPreferenceStore().setDefault(SiriusUIPreferencesKeys.PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT.name(),0); 

</pre>
		<h4 id="Changesinorg.eclipse.sirius.ui3">Changes in 
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> A new preference has been added to 
				<code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys</code>: 
				<code>PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT</code>. It is used to control the scaling level behavior when exporting diagrams. Refer to the JavaDoc for the details. 
			</li>
			<li><span class="label label-success">Added</span> The type 
				<code>org.eclipse.sirius.ui.business.api.dialect.ExportFormat</code> has a new attribute representing the scaling level to use for diagram export. It is defined by an integer type. Refer to the JavaDoc for details on its meaning.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in 
			<code>org.eclipse.sirius.tests.junit.support</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The method 
				<code>SiriusTestCase.loadModeler(URI, EditingDomain)</code> allows to load the VSM at the specified URI and register all its Viewpoints in the current testcase. There is a new method, 
				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase.loadModeler(URI, EditingDomain, boolean)</code>, to allow to load the VSM at the specified URI without registering its viewpoints. It can be useful to load a VSM for an editing domain of another session than the current session of the
			</li>
		</ul>
		<p>testcase.</p>
		<h2 id="sirius5.1.0">Changes in Sirius 5.1.0</h2>
		<h3 id="UserVisibleChanges7">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> When exporting a diagram as an image, it is now possible to choose whether or not the diagram should be scaled. If disabled, the diagram will be exported with its normal size (equivalent to a 100% zoom level). If auto-scaling is enabled, the diagram will be scaled to the maximum size safely allowed by the system (this can be different on different OSes). Note that when auto-scaling is enabled, the image files produced may be larger than without. When exporting very large diagrams it is also possible that the diagram will be scaled 
				<em>down</em> (i.e. with a zoom level smaller than 100%). Enabling auto-scaling can be chosen on a case by case basis from the export dialog; the initial value in the dialog can be controlled by a new preference available in the 
				<em>Sirius &gt; Sirius Diagram</em> preference page.
			</li>
			<li><span class="label label-success">Added</span> The end user can now 
				<a href="user/diagrams/Diagrams.html#RemoveBendpoints">remove all bend-points</a> on rectilinear edges. It was only possible on oblique edges before. This action is available on edge context menu &#8220;Remove Bend-points&#8221; or by using the shortcut &#8220;Ctrl&#8221; + &#8220;Shift&#8221; + &#8220;-&#8221;. If number of bend-points can not be reduced, remove action will be inefficient.
			</li>
			<li><span class="label label-success">Added</span> The status Synchronized/Unsynchronized of the diagram is now displayed in the status bar when the diagram editor has the focus or can be directly displayed 
				<a href="user/diagrams/Diagrams.html#synchronized_diagram">in the diagram</a> with a decorator.
			</li>
			<li><span class="label label-success">Added</span> The user now have a drop down menu in the tabbar with all available straighten to edge actions. </li>
			<li><span class="label label-success">Added</span> Straighten to actions on edge are now available even if the selection contains incompatible elements (edge labels for example). Their execution affects only compatible edges.</li>
			<li><span class="label label-success">Added</span> Four new straighten actions are available (with top pinned, with bottom pinned, with left pinned, with right pinned) and allow to straighten edges from the opposed straightening axis point of view.</li>
			<li><span class="label label-info">Modified</span> In a diagram, when selecting an edge or a node that are not fully displayed in the editor, now, the reveal is not done anymore, that is, the displayed content of the editor is not moved anymore. If the user want to fully see the selected element, he may drag the editor content using center mouse button. </li>
			<li><span class="label label-info">Modified</span> In a diagram with 
				<em>snapToGrid</em> enabled:
				<ul>
					<li>When performing a drag and drop from the model explorer or a palette tool to the diagram, the new created element is now snapped to the grid.</li>
					<li>When performing an 
						<em>Arrange all</em> or an 
						<em>Arrange Linked Border Node</em> action, all diagram elements are now snapped to the grid.
					</li>
					<li>When performing a drag and drop or a tool that will create multiple elements, all created elements are still visible but now snapped to the grid. </li>
					<li>When creating an edge with a tool that also create the associated border nodes, the border nodes are now snapped near the click location. Before, they were created to respect a shortest path.</li>
				</ul>
			</li>
		</ul>
		<p>
			<img border="0" src="./images/borderNodesWithSnapToGrid.png"/> 
		</p>
		<ul>
			<li><span class="label label-info">Modified</span> In a sequence diagram, it is now possible to resize the combined fragment when the first or the last operand is selected (increase the size of the first operand to the top, or increase the size of the last operand to the bottom). Before, it was necessary to select the combined fragment itself to resize it. </li>
			<li><span class="label label-info">Modified</span> In a sequence diagram, it is now possible to resize an 
				<em>Execution</em> contained in an 
				<em>Operand</em> without previously resize its 
				<em>Operand</em> if more space is needed. The 
				<em>Operand</em>, and if necessary the 
				<em>Combined Fragment</em>, is resized too.
			</li>
			<li><span class="label label-info">Modified</span> In a diagram, the action 
				<em>Show/Hide label</em> is now visible even if the selection contains invalid elements (ie elements without label). The action is applied only on valid elements of the selection.
			</li>
			<li><span class="label label-info">Modified</span> In a diagram, the Line Style actions (Tree, Oblique or Rectilinear Routing Style) is now visible in the contextual menu even if the selection contains invalid elements (other elements than edges). The action is applied only on valid elements of the selection.</li>
			<li><span class="label label-info">Modified</span> When an user defines a custom bundled image shape for a figure (
				<a href="developer/extensions-provide_custom_bundled_image_shape.html#bundleImageShape">bundleImageShape</a> ), opening or refreshing a diagram will not display exception anymore when the bundleImageShape extension is not valid. A warning is now displayed in the Error Log view to inform user of which attribute of the extension is not correct.
			</li>
		</ul>
		<h3 id="SpecifierVisibleChanges5">Specifier-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> An 
				<a href="./user/general/Modeling%20Project.html#Migration">automatic migration</a> has been added in this version to fix diagram with edge labels corrupted (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=518870">bugzilla #518870</a> for more details). Contrary to all previous migrations, this one logs an information in the 
				<em>Error Log</em> view to inform how many labels have been fixed in concerned diagrams. If detected as &#8220;corrupted label&#8221;, the label is reset to its default location (as if you launch the &#8220;Snap Back&#8221; action of it). If at least one label is detected as &#8220;corrupted label&#8221;, the layout is also potentially corrupted (nodes, children of the diagram, with x or y coordinate very big). In this case, the concerned nodes are moved near 5000 (or -5000) as new coordinate. A message is added in this case: 
				<em>Some nodes have also been moved as the layout of this diagram is corrupted. A Reset Origin and/or manual layout is probably needed for this diagram.</em> The rules applied to detect a corrupted label are the following:
				<ul>
					<li>If the label is less than 250 pixels away from the reference point on its corresponding edge, the label is not considered as distant.</li>
					<li>If the label is more than 1000 pixels away from the reference point on its corresponding edge, the label is considered as distant.</li>
					<li>Between these 2 limits, the label is considered as distant if the distance between the center of the label and the edge is higher than &#8220;four times the size of the nearest segment&#8221;.</li>
				</ul>
			</li>
			<li><span class="label label-info">Modified</span> In manual refresh mode (
				<em>Automatic Refresh</em> Sirius preference disabled), when the 
				<em>Force Refresh</em> option of a tool is enabled in your VSM, only the current representation is refreshed when the tool is applied. Before this version, all open representations were refreshed.
			</li>
			<li><span class="label label-info">Modified</span> The filtering expression variables available in the properties view definition in the &#8216;Extends&#8217; tab were renamed to match the following pattern: featureName+&#8216;Description&#8217;.</li>
			<li><span class="label label-info">Modified</span> The 
				<em>Reference Name</em> field of 
				<em>Create instance</em> completion will display only features with a consistent type with the one specified in 
				<em>Type Name</em> field (if a type has been specified).
			</li>
			<li><span class="label label-info">Modified</span> The 
				<em>Type Name</em> field of 
				<em>Create instance</em> completion will display only types consistent with the feature type specified in 
				<em>Reference Name</em> field (if a valid feature has been specified).
			</li>
		</ul>
		<h3 id="DeveloperVisibleChanges8">Developer-Visible Changes</h3>
		<h4 id="Migrations4">Migrations</h4>
		<ul>
			<li><span class="label label-success">Added</span> A migration has been added to fix diagram with edge labels corrupted (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=518870">bugzilla #518870</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>12.1.0.201706291600</em>.
			</li>
			<li><span class="label label-success">Added</span> A new class 
				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures.SiriusDefaultSizeNodeFigure</code> has been added in plugin 
				<code>org.eclipse.sirius.ext.gmf.runtime</code>. The goal of the class is to workaround a 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=519250">GMF bug</a>. So if you have created class which inherits from 
				<code>org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure</code>, you must now use the new 
				<code>SiriusDefaultSizeNodeFigure</code> instead.
			</li>
			<li><span class="label label-success">Added</span> A migration has been added to add an 
				<code>uid</code> to all instances of type DRepresentation. This 
				<code>uid</code> is used to reference the DRepresentation from the DRepresentationDescriptor. 
				<code>DRepresentationDescriptor.repPath</code> has been changed to have 
				<code>uid</code> as fragment. The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>12.1.0.201707281200</em>.
			</li>
			<li><span class="label label-success">Added</span> A migration has been added to fix diagram with edge bend-points corrupted (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=519044">bugzilla #519044</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>12.1.0.201708031200</em>.
			</li>
		</ul>
		<h4 id="TranslationKeysChanges2">Translation Keys Changes</h4>
		<p>See 
			<a href="i18n_changes.html#sirius51">this document</a> for the complete list of message keys added or removed in Sirius 5.0.
		</p>
		<h4 id="replazyloading">Representations lazy loading (experimental).</h4>
		<p>A new mode (currently experimental) is available to load representations on demand and not during session opening. This feature implies to serialize Sirius representations in separate resources. This mode can be activated by setting the system property 
			<code>createLocalRepresentationInSeparateResource</code> at true. For more detail, see the developer documentation: 
			<a href="./developer/representations_lazy_loading.html">Representations lazy loading (experimental)</a>.
		</p>
		<h4 id="Changesinorg.eclipse.sirius6">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> A new convenience static method has been added on the 
				<code>org.eclipse.sirius.business.api.session.Session</code> interface to retrieve the session an arbitrary 
				<code>EObject</code> is part of: 
				<code>Optional&lt;Session&gt; s = Session.of(myObject);</code>. It returns a 
				<code>java.util.Optional&lt;Session&gt;</code> so all the usual patterns apply, e.g. 
				<code>Session.of(obj).ifPresent(s -&gt; doSomething(s));</code>.
			</li>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor.isLoadedRepresentation()</code> has been added to know if the representation linked with this {@link DRepresentationDescriptor} is loaded. By default, all representations are held in the same resource than the DRepresentationDescriptor, in that case the method will always return true.
			</li>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSession.allAnalyses()</code> has been added in the interface to reflect the already existing 
				<code>org.eclipse.sirius.business.internal.session.danalysis.DAnalysisSessionImpl.allAnalyses()</code> implementation.
			</li>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.business.api.dialect.DialectManager.getLoadedRepresentations(EObject, Session)</code> has been added to get all loaded representations in the given session with the given EObject as target.
			</li>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getAllLoadedRepresentations(Session)</code> has been added to get all loaded representations in the given session.
			</li>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.business.api.helper.SiriusUtil.REPRESENTATIONS_FOLDER_NAME</code> constant has been added. This is the default folder where representations file (*.srm) are located if the system property &#8220;createLocalRepresentationInSeparateResource&#8221; is set at true.
			</li>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.shouldDeleteRepresentation(Set&lt;DRepresentationDescriptor&gt;)</code> has been added to be called when the user interface should prompt for a choice about the representation deletion.
			</li>
			<li><span class="label label-success">Added</span> (experimental) The new API 
				<code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder</code> and 
				<code>org.eclipse.sirius.business.api.query.EObjectQuery.getSiriusReferenceFinder()</code> method to get it have been added. This API allows getting the DRepresentations or DRepresentationElements that reference the provided semantic object. It also allows getting the DRepresentationDescriptor which associated DRepresentation is or contains elements that reference the provided semantic object. This API will be useful for 
				<a href="#replazyloading">representation lazy loading</a> as it may, in the future, not need to load all not yet loaded representations. For now, the use of this API will load all not loaded representations.
			</li>
			<li><span class="label label-danger">Removed</span> 
				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getRepresentationDescriptors(EObject, Session)</code> has been moved to 
				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>.
			</li>
			<li><span class="label label-danger">Removed</span> 
				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getAllRepresentationDescriptors(Session)</code> has been moved to 
				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>.
			</li>
			<li><span class="label label-danger">Removed</span> 
				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getRepresentationDescriptors(RepresentationDescription, Session)</code> has been moved to 
				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>.
			</li>
			<li><span class="label label-danger">Removed</span> The implementations of 
				<code>getRepresentationDescriptors(EObject, Session)</code>, 
				<code>getAllRepresentationDescriptors(Session)</code> and 
				<code>getRepresentationDescriptors(RepresentationDescription, Session)</code> have been removed from 
				<code>AbstractRepresentationDialectServices</code>. They are implemented in 
				<code>DialectManagerImpl</code>.
			</li>
			<li><span class="label label-danger">Removed</span> 
				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getRepresentations(EObject, Session)</code> has been moved to 
				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>
			</li>
			<li><span class="label label-danger">Removed</span> 
				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getAllRepresentations(Session)</code> has been moved to 
				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>
			</li>
			<li><span class="label label-danger">Removed</span> 
				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getRepresentations(RepresentationDescription, Session)</code> has been moved to 
				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>
			</li>
			<li><span class="label label-danger">Removed</span> The implementations of 
				<code>getRepresentations(EObject, Session)</code>, 
				<code>getAllRepresentations(Session)</code> and 
				<code>getRepresentations(RepresentationDescription, Session)</code> have been removed from 
				<code>AbstractRepresentationDialectServices</code>. They are implemented in 
				<code>DialectManagerImpl</code>.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.common6">Changes in 
			<code>org.eclipse.sirius.common</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.common.tools.api.util.LazyCrossReferencer.setEObjectToBeIgnored(Predicate&lt;EObject&gt;)</code> has  been added to filter inverse references to prevent some references resolution.
			</li>
			<li><span class="label label-info">Modified</span> 
				<code>org.eclipse.sirius.common.tools.api.util.WorkspaceUtil.getFilesFromWorkspace(Collection&lt;IProject&gt;, String)</code> signature has been modified in 
				<code>getFilesFromWorkspace(Collection&lt;IContainer&gt;, String)</code> to be more generic.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram6">Changes in 
			<code>org.eclipse.sirius.diagram</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> A new query has been added in 
				<code>org.eclipse.sirius.diagram.business.api.query.DDiagramQuery</code>. This query, 
				<code>getAllActivatedLayers</code>, returns all the activated layers (transient or not) of the given diagram. It should replace 
				<code>DDiagram.getActivatedLayers</code> in several cases if you directly use it.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.ui7">Changes in 
			<code>org.eclipse.sirius.diagram.ui</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> Three new preferences have been added to 
				<code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>: 
				<code>PREF_SCALE_DIAGRAMS_ON_EXPORT</code>, 
				<code>PREF_MAXIMUM_EXPORT_BUFFER_SIZE</code>, 
				<code>PREF_MAXIMUM_EXPORT_BUFFER_SIZE_WINDOWS</code>. They are used to control the auto-scaling behavior when exporting diagrams. Refer to the JavaDoc for the details.
			</li>
			<li><span class="label label-success">Added</span> In 
				<code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService</code>, two new methods have been added:
				<ul>
					<li>
						<code>setAllowDownScaling(boolean)</code>: when auto-scaling is enabled (which is controlled by the already existing 
						<code>setAutoScalingEnabled()</code>), this is used to control if down-scaling is allowed or not. 
					</li>
					<li>
						<code>getScalingFactor()</code>: after the export has been performed, this can be used to obtain the scaling factor that was effectively used.
					</li>
				</ul>
			</li>
			<li><span class="label label-success">Added</span> The class 
				<code>org.eclipse.sirius.diagram.ui.business.api.DiagramExportResult</code> has been added, which inherits from 
				<code>ExportResult</code>. It is returned by the 
				<code>DialectManager.exportWithResult()</code> methods when the representation exported is a diagram, and in addition to the information provided by 
				<code>ExportResult</code> gives access to the scaling factor that was used when exporting the diagram.
			</li>
			<li><span class="label label-success">Added</span> The new preference 
				<code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys.PREF_SHOW_SYNCHRONIZE_STATUS_DECORATOR</code> has been added to say if the 
				<a href="user/diagrams/Diagrams.html#synchronized_diagram">synchronize status</a> decorator must be shown or not.
			</li>
			<li><span class="label label-success">Added</span> A new method 
				<code>checkShapesIntersect()</code> has been added in 
				<code>org.eclipse.sirius.diagram.ui.business.api.query.ConnectionEditPartQuery</code> to check if source and target of the connection intersect (only intersect &#8211; not one contained in another).
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ext.emf.edit">Changes in 
			<code>org.eclipse.sirius.ext.emf.edit</code>
		</h4>
		<ul>
			<li><span class="label label-info">Modified</span> 
				<code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices</code> does not use 
				<code>Collection</code> anymore as return type or parameter type in its services. 
				<code>java.util.Collection</code> has been replaced by 
				<code>java.util.List</code>. As mentioned in the 
				<a href="./specifier/general/Writing_Queries.html#service_methods">specifier documentation</a>, it is recommended to use List or Set instead of Collection in java services signature.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ui4">Changes in 
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> In 
				<code>org.eclipse.sirius.ui.tools.api.dialogs.AbstractExportRepresentationsAsImagesDialog</code> a new method 
				<code>isAutoScaleDiagram()</code> has been added to indicate (once the dialog has been closed) if the user has requested to enable auto-scaling on diagram export. 
			</li>
			<li><span class="label label-success">Added</span> In 
				<code>org.eclipse.sirius.ui.tools.api.actions.export.ExportAction</code>, a new method 
				<code>setAutoScaleDiagram(boolean)</code> to ask for automatic scaling of diagrams on export.
			</li>
			<li><span class="label label-success">Added</span> In 
				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices</code>, two new methods 
				<code>exportWithResult()</code> have been added. They are equivalent to the existing 
				<code>export()</code> methods (which return 
				<code>void</code>) except that they return an instance of the new type 
				<code>org.eclipse.sirius.ui.business.api.dialect.ExportResult</code>. This gives access to the list of all the actual files produced by the export operation. Note that in the case of the diagram dialect, 
				<code>exportWithResult()</code> actually returns a more specific 
				<code>DiagramExportResult</code> with additional diagram-specific information.
			</li>
			<li><span class="label label-success">Added</span> The type 
				<code>org.eclipse.sirius.ui.business.api.dialect.ExportFormat</code> has a new attribute representing the scaling policy to use for diagram. It is defined by a new enumerated type 
				<code>ExportFormat.ScalingPolicy</code> which can have four different values: 
				<code>WORKSPACE_DEFAULT</code>, 
				<code>AUTO_SCALING</code>, 
				<code>NO_SCALING</code>, 
				<code>AUTO_SCALING_IF_LARGER</code>. Refer to the JavaDoc for details on their meanings.
			</li>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.ui.tools.api.wizards.CreateEMFModelWizard</code> is a new wizard that can be invoked to create instances of any metamodel. It will ask the end-user for a metamodel (
				<code>EPackage</code>), a concrete type to instanciate as root element, and finally the local path of the file to create. See the class Javadoc for sample usage. Note that the first two pages of the wizard (EPackage and root type selection) can be customized through the 
				<code>org.eclipse.sirius.common.package_meta_data</code> extension point to provide user-oriented name and documentation for an EPackage, and to suggest specific EClasses as good root candidates.
			</li>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback.shouldDeleteRepresentation(Set&lt;DRepresentationDescriptor&gt;)</code> default implementation has been added to prompt the confirm dialog.
			</li>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.SessionEditorInput(URI, URI, String, Session)</code> has been added to provide the 
				<code>DRepresentationDescriptor</code> URI to retrieve the 
				<code>DRepresentation</code> from the 
				<code>DRepresentationDescriptor.getRepresentation()</code> method instead of performing a direct load.
			</li>
			<li><span class="label label-info">Modified</span> The org.eclipse.sirius.ui.tools.api.assist.TextContentProposalProvider.getSelectedElement() method is now protected instead of private to let sub-classes retrieving the selected element.</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ui.editor2">Changes in 
			<code>org.eclipse.sirius.ui.editor</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> New classes have been added in package 
				<code>org.eclipse.sirius.ui.editor.api.pages</code>. They are the following: 
				<code>AbstractSessionEditorPage</code>, 
				<code>PageProvider</code>, 
				<code>PageUpdateCOmmand</code>, 
				<code>PositioningKind</code>, 
				<code>PageUpdateCommandFactory</code>. These classes allow to provide custom pages to session editor instances.
			</li>
			<li><span class="label label-success">Added</span> An extension point 
				<code>org.eclipse.sirius.ui.editor.sessionEditorPageProvider</code> has been added to allow custom page providing for session editor instances.
			</li>
		</ul>
	</body>
</html>