<?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.4.0">Changes in Sirius 6.4.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.3.2">Changes in Sirius 6.3.2</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges2">User-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges2">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius6.3.1">Changes in Sirius 6.3.1</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges3">User-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges3">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius6.3.0">Changes in Sirius 6.3.0</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges4">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges2">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges4">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#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="#DeveloperVisibleChanges5">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="#UserVisibleChanges5">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges6">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius6.1.2">Changes in Sirius 6.1.2</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="#sirius6.1.1">Changes in Sirius 6.1.1</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#Changesinorg.eclipse.sirius.diagram5">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="#UserVisibleChanges7">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges8">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="#UserVisibleChanges8">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges5">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges9">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.4.0">Changes in Sirius 6.4.0</h2>
		<h3 id="UserVisibleChanges">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> With a non modeling project (a.k.a. legacy project), a &#8220;Invalid representations&#8221; section is displayed under the aird node. It is displayed only if a representation is invalid in the Sirius Session.</li>
		</ul>
		<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
		<p>Several improvements have been done concerning ELK integration. This feature is always considered as experimental (because several bugs remain). Additional documentation is available 
			<a href="specifier/diagrams/Diagrams.html#useElk">here</a> .
		</p>
		<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.ui.tools.api.dialogs.AnalysisSelectorFilteredItemsSelectionDialog</code> has been created in order to have custom analysis selector provider able to modify the analysis selector dialog.
			</li>
			<li><span class="label label-info">Modified</span> Upgraded ELK version from 0.6.1 to 0.7.0, see the 
				<a href="https://projects.eclipse.org/projects/modeling.elk/releases/0.7.0">ELK documentation</a> for the list of changes in that version (and previous).
			</li>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askUserToRefreshTheDiagram()</code> has been added. It is used to ask the user to refresh the representation when something wrong happens when opening the editor. This method allows to skip the UI part.
			</li>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.ui.business.api.dialect.DialectEditor.isLastRepresentationRefreshSucceeded()</code> to know if the last refresh done in the editor has succeeded.
			</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 new method, 
				<code>org.eclipse.sirius.common.tools.api.util.CommandStackUtil.flushOperations(CommandStack)</code> has been added to flush the command stack. By default the 
				<code>CommandStack.flush()</code> &#8220;disposes all the commands in the stack&#8221;. Concretely, it removes the default context from the list of contexts of all operations. And operations without context, after this, are removed from history. In several cases, it is not enough. The 
				<code>ResourceUndoContext</code> must also be removed. This is what this method done to really removed operations from IOperationHistory. This method was already used in 
				<code>org.eclipse.sirius.business.internal.session.danalysis.DAnalysisSessionImpl</code>, it has been extracted from here.
			</li>
			<li><span class="label label-success">Added</span> A new query, 
				<code>org.eclipse.sirius.common.tools.api.query.IllegalStateExceptionQuery.isAConnectionLostException()</code>, has been added to detect a specific kind of 
				<code>IllegalStateException</code>. In a collaborative environment, Obeo Designer Team Edition or Team For Capella for example, when the data is hosted on a server, the connection with the server can be lost. Sirius is not ready to handle this context. If Sirius tries to access to data, for example with an async refresh of the UI that needs information from data to be refreshed, a 
				<code>org.eclipse.net4j.util.lifecycle.LifecycleException</code> is thrown with the message 
				<code>"Not active: CDOTransactionImpl"</code>. This kind of errors is showed to the end-user instead of silently be caught. Indeed, in this situation, the UI should be refreshed with &#8220;blank data&#8221; instead of displaying an &#8220;incomprehensible&#8221; popup to the end-user. This new query allows to detect this specific case. The template to use it is:
			</li>
		</ul>
		<pre><code>try {
    //code to protect
} catch (IllegalStateException e) {
	if (new IllegalStateExceptionQuery(e).isAConnectionLostException()) {
	    // Generally catch silently the exception
	} else {
	    throw e;
	}
}

</code></pre>
		<h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in  
			<code>org.eclipse.sirius.diagram.ui</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> A new method, 
				<code>getDefaultDimension()</code> has been added in 
				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart()</code>. This method was already used previously in Sirius but was private. It is now public and is used for example for having information during ELK layout.
			</li>
			<li><span class="label label-success">Added</span> A new method, 
				<code>layoutEditParts(List, IAdaptable, boolean)</code> has been added in 
				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.provider.AbstractLayoutProvider</code>. It allows for implementations to do specific code according to the arrangeAll or arrangeSelection aspect when layoutEditParts is called. By default, the code called is the same than the 
				<code>org.eclipse.gmf.runtime.diagram.ui.services.layout.AbstractLayoutEditPartProvider.layoutEditParts(List, IAdaptable)</code> implementation.
			</li>
			<li><span class="label label-success">Added</span> A new method, 
				<code>useStandardArrangeSelectionMechanism()</code> has been added in 
				<code>org.eclipse.sirius.diagram.ui.api.layout.CustomLayoutAlgorithm</code> to know if a specific layout algorithm relies on the behavior of 
				<code>org.eclipse.sirius.diagram.ui.tools.internal.layout.provider.ArrangeSelectionLayoutProvider</code>. Previously, this was the case for all layout algorithm but it can be useful to disable it (for ELK layout for example). This method is associated with 
				<code>org.eclipse.sirius.diagram.ui.api.layout.CustomLayoutAlgorithm.CustomLayoutAlgorithmBuilder.setStandardArrangeSelectionMechanism(boolean)</code>
			</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> A new method, 
				<code>preClose()</code> has been added in 
				<code>org.eclipse.sirius.ui.business.api.dialect.DialectEditor</code>. This method is called in sync when the editor is asking to be closed (the real closure is done in async). This allows to dispose actions, for example, as soon as the closure is requested. There is a default implementation, that does nothing, for all dialect editors.
			</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> New methods have been added to 
				<code>org.eclipse.sirius.tests.support.api.TestsUtil</code> to check the current Java runtime version. The parameter is the expected version of Java, i.e: ...7, 8, 9, ..., 13, 14, ...
				<ul>
					<li>
						<code>isJavaVersion(int)</code>
					</li>
					<li>
						<code>isJavaVersionOrOlder(int)</code>
					</li>
					<li>
						<code>isJavaVersionOrNewer(int)</code>
					</li>
				</ul>
			</li>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase.waitSaveSessionJob()</code> has been added to ensure that the SaveSessionJob, potentially triggered by 
				<code>org.eclipse.sirius.ui.business.internal.session.SaveSessionWhenNoDialectEditorsListener.statusChangedInternal(Collection&lt;ResourceStatusChange&gt;)</code> is finished before continue. It can be call, for example, after changing the list of selected viewpoints, without any editor opened.
			</li>
		</ul>
		<h2 id="sirius6.3.2">Changes in Sirius 6.3.2</h2>
		<h3 id="UserVisibleChanges2">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-info">Modified</span> In diagrams, the display of the label of the compartments has been improved. When there is not enough space to display the label of the compartment container or the contained compartments, it is displayed on multiple lines. Refer to 
				<a href="user/diagrams/Diagrams.html#Compartments">Compartment section</a> for more information.
			</li>
		</ul>
		<p>A consequence is that the display of existing compartments in diagrams may be changed. When refreshing the existing diagram, the project may become dirty.</p>
		<ul>
			<li><span class="label label-info">Modified</span> In Sirius 6.3.1, the behavior for the labels of operands, in sequence diagrams, has been changed. Since Sirius 6.3.1, they are drawn on top of the rest of the diagram elements so that they are always completely visible. Since Sirius 6.3.2, this is now the same for labels of combined fragment. Indeed, the problem was the same:</li>
		</ul> 
		<img border="0" src="images/combined_fragment_label_before.png"/> With Sirius 6.3.2, the label is now on the top of execution: 
		<img border="0" src="images/combined_fragment_label_after.png"/>
		<h3 id="DeveloperVisibleChanges2">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> In the 
				<code>org.eclipse.sirius.common.package_meta_data</code> extension point, it is now possible for a given metamodel (nsURI) to declare some EClasses as potential DocumentRoots. This is needed with some XSD-derived metamodels which normally declare some of their containment references as transient to make sure Sirius will properly consider these classes (and their contents) as needing to be serialized. 
			</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 class 
				<code>org.eclipse.sirius.diagram.ui.graphical.figures.OverlayLabelsDrawerFigure</code> is a &#8220;virtual&#8221; figure that should be added to the 
				<code>DDiagramRootEditPart#OVERLAY_LAYER</code> and which paints all the overlay labels (instance of 
				<code>OverlayLabel</code>) on top of the rest of the diagram to make sure they are always readable. This figure is currently only used by sequence diagrams for operand labels(
				<code>org.eclipse.sirius.diagram.sequence.ui.tool.internal.edit.part.OperandEditPart</code>) and combined fragment labels (
				<code>org.eclipse.sirius.diagram.sequence.ui.tool.internal.edit.part.CombinedFragmentEditPart</code>). 
			</li>
			<li><span class="label label-success">Added</span> The class 
				<code>org.eclipse.sirius.diagram.ui.graphical.figures.OverlayLabel</code> is a special label that can be painted or not, on the OVERLAY layer, depending on the current context/layer.
			</li>
			<li><span class="label label-success">Added</span> A new field, 
				<code>useOverlayLabel</code>, has been added in 
				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart</code>. Its value can be changed with 
				<code>setUseOverlayLabel(boolean)</code> and accessed through 
				<code>useOverlayLabel()</code>. This new field allows to use an 
				<code>OverlayLabel</code> for the figure of this edit part.
			</li>
			<li><span class="label label-success">Added</span> A new constructor has been added for class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.GradientRoundedRectangle</code> to allow the use of 
				<code>OverlayLabel</code> for this kind of figure (
				<code>GradientRoundedRectangle(Dimension, int, View, boolean)</code>).
			</li>
		</ul>
		<h2 id="sirius6.3.1">Changes in Sirius 6.3.1</h2>
		<h3 id="UserVisibleChanges3">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-success">Added</span> A new type of jump link has been added in Sirius 6.3.1. As reminder, a jump link is a way to graphically improve the way how 2 edges intersect. This new type is graphically represented by a blank line instead of the classical &#8220;jump&#8221;. This new type is documented in the 
				<a href="user/diagrams/Diagrams.html#Appearance">Appearance</a> section of edge Properties view.
			</li>
			<li><span class="label label-success">Added</span> New preferences have been added to allow to override the default values of jump links properties. They are documented in the 
				<a href="user/diagrams/Diagrams.html#Connections">Connections</a> section of the Preferences.
			</li>
			<li><span class="label label-info">Modified</span> When the end-user changes the routing style of an edge into Oblique style (from a different style), the edge is now transformed into an oblique line without intermediate bendpoints.</li>
			<li><span class="label label-info">Modified</span> In sequence diagrams, the labels of operands (sections inside combined fragments) could be partially hidden by other diagram elements, for exemple executions:</li>
		</ul> 
		<img border="0" src="images/operand_label_before.png"/> They are now drawn on top of the rest of the diagram elements so that they are always completely visible: 
		<img border="0" src="images/operand_label_after.png"/>
		<ul>
			<li><span class="label label-danger">Removed</span> The feature concerning the capability to move labels on border of node, or border node, all around the node, added in 6.3.0, has been reverted. There are unexpected side effects (wrong location after a rename of a label for example).</li>
		</ul>
		<h3 id="DeveloperVisibleChanges3">Developer-Visible Changes</h3>
		<ul>
			<li><span class="label label-info">Modified</span> Upgraded ELK version from 0.5.0 to 0.6.1, see the 
				<a href="https://projects.eclipse.org/projects/modeling.elk/releases/0.6.1">ELK documentation</a> for the list of changes in that version (and previous).
			</li>
			<li><span class="label label-info">Modified</span> Sirius now requires GMF Notation &amp; Runtime 1.13.0.</li>
			<li><span class="label label-info">Modified</span> 
				<code>org.eclipse.sirius.diagram.ui.tools.api.graphical.edit.styles.SimpleStyleConfiguration.isShowIcon(DDiagramElement, IGraphicalEditPart)</code> is now protected instead of private.
			</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> New preferences key have been added in 
				<code>org.eclipse.sirius.diagram.tools.api.preferences.SiriusDiagramCorePreferences</code>:
				<ul>
					<li>
						<code>PREF_JUMP_LINK_ENABLE_OVERRIDE</code>: Id of the preference that says if the override of jump links preferences is enabled or not.
					</li>
					<li>
						<code>PREF_JUMP_LINK_ENABLE_OVERRIDE_DEFAULT_VALUE</code>: Default value for override of jump link preference, equals to 
						<code>false</code>.
					</li>
					<li>
						<code>PREF_JUMP_LINK_STATUS</code>: Id of the preference used to know the default jump link status if the override of connection jump links preferences is enabled.
					</li>
					<li>
						<code>PREF_JUMP_LINK_STATUS_DEFAULT_VALUE</code>: Default value of above preference, equals to 
						<code>JumpLinkStatus#NONE</code>.
					</li>
					<li>
						<code>PREF_JUMP_LINK_TYPE</code>:  Id of the preference used to know the default jump link type if the override of connection jump links preferences is enabled.
					</li>
					<li>
						<code>PREF_JUMP_LINK_TYPE_DEFAULT_VALUE</code>: Default value of above preference, equals to 
						<code>JumpLinkType#SEMICIRCLE</code>.
					</li>
					<li>
						<code>PREF_REVERSE_JUMP_LINK</code>: Id of the preference used to know if reverse of the jump link is enabled or not,  if the override of connection jump links preferences is enabled.
					</li>
					<li>
						<code>PREF_REVERSE_JUMP_LINK_DEFAULT_VALUE</code>: Default value for reverse jump link preference, equals to 
						<code>false</code>.
					</li>
				</ul>
			</li>
		</ul>
		<h4 id="Migrations">Migrations</h4>
		<ul>
			<li><span class="label label-success">Added</span> A migration participant has been added only to change the version of the model. Indeed, if the new value &#8220;Tunnel&#8221; of GMF jump link type is used, see &#8220;User-Visible Changes&#8221; in 
				<a href="Release_Notes.html#sirius6.3.1">Sirius 6.1.3</a>, the model will be invalid for an older version of Sirius. The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>14.3.1.202003101500</em>.
			</li>
			<li><span class="label label-info">Modified</span> The migration participant 
				<code>LabelOnBorderMigrationParticipant</code> has been updated to revert the effect of itself. This migration participant has been added in Sirius 6.3.0 according to buzgilla 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=550382">550382</a>. The new feature added in this bugzilla was imperfect so it is decided to revert it. The new corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>14.3.1.202003261200</em>.
			</li>
		</ul>
		<h4 id="TranslationKeysChanges">Translation Keys Changes</h4>
		<p>See 
			<a href="i18n_changes.html#sirius631">this document</a> for the complete list of message keys added or removed in Sirius 6.3.1.
		</p>
		<h2 id="sirius6.3.0">Changes in Sirius 6.3.0</h2>
		<h3 id="UserVisibleChanges4">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="SpecifierVisibleChanges2">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="DeveloperVisibleChanges4">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" target="_blank">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" target="_blank">#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.common3">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.diagram2">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="Migrations2">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="DeveloperVisibleChanges5">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.ui3">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="UserVisibleChanges5">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="SpecifierVisibleChanges3">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="DeveloperVisibleChanges6">Developer-Visible Changes</h3>
		<h4 id="Changesinorg.eclipse.sirius.common4">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.diagram3">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.ui4">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="UserVisibleChanges6">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="DeveloperVisibleChanges7">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.ui5">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.diagram4">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.common5">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.diagram5">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/" target="_blank">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" target="_blank">the official FAQ</a> for details about the difference between EPL v1.0 (which was used before) and v2.0.</li>
		</ul>
		<h3 id="UserVisibleChanges7">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="SpecifierVisibleChanges4">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="DeveloperVisibleChanges8">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.ui2">Changes in 
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.ui.business.api.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.ui6">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.common6">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="Migrations3">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>
		<h4 id="TranslationKeysChanges2">Translation Keys Changes</h4>
		<p>See 
			<a href="i18n_changes.html#sirius61">this document</a> for the complete list of message keys added or removed in Sirius 6.1.0.
		</p>
		<h2 id="sirius6.0.0">Changes in Sirius 6.0.0</h2>
		<h3 id="UserVisibleChanges8">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="SpecifierVisibleChanges5">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="DeveloperVisibleChanges9">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.common7">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.diagram6">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.ui7">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.ui3">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.support2">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="Migrations4">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="TranslationKeysChanges3">Translation Keys Changes</h4>
		<p>See 
			<a href="i18n_changes.html#sirius60">this document</a> for the complete list of message keys added or removed in Sirius 6.0.
		</p>
	</body>
</html>