<?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>
		<p><span class="label label-info">Important</span> In order to reduce the maintenance burden of Sirius, we have decided to deprecate some older mechanisms for which there exist better alternatives. In Sirius 6.4.x all of these are still available, but they may be removed in future versions
			<br/>(6.5 or 7.0) without further notice. If any of these planned removals are an issue for you, please 
			<a href="https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Sirius">open a ticket</a> so we can discuss options.
		</p>
		<p>The features which are deprecated starting from 6.4.0 are:</p>
		<ul>
			<li>
				<b>Exporting diagrams as GIF, BMP or PDF</b>. We will focus on PNG and JPG support for raster formats, and SVG for vector formats. If you need another image format, use an external tool to do the conversion.
			</li>
			<li>
				<b>OCL expressions in VSMs (
					<code>odesign</code> files)
				</b>, as supported by the 
				<code>org.eclipse.sirius.common.ocl</code> plug-in. Use AQL expressions instead.
			</li>
			<li>
				<b>The &#8220;Workflow&#8221; feature</b>. Workflow was experimental and to our knowledge not used in practice. This corresponds to the 
				<code>org.eclipse.sirius.workflow.*</code> and 
				<code>org.eclipse.sirius.editor.workflow</code> plug-ins.
			</li>
			<li>
				<b>The server parts which supported the Workflow feature</b>. It was our first experiment in moving Sirius to the web, but this is now replaced by the newly published 
				<a href="https://www.eclipse.org/sirius/sirius-web.html">Sirius Web</a>. This corresponds to all the 
				<code>org.eclipse.sirius.server.*</code> plug-ins.
			</li>
		</ul>
		<p>Also note that Sirius 6.4 is still compatible with Java 8, but we may move to Java 11 (LTS) in 2021. Eclipse 2020-09 already requires Java 11 to start, and Java 8 is quite old at this point. When we move to Java 11 we will drop support for Eclipse versions older than 2020-09. Again, if that is an issue for you, please open a ticket so we can discuss it.</p>
		<p>Sirius 6.4 is officially supported on Eclipse 2020-03 to 2020-12, with Eclipse 2020-06 being the reference platform (where the tests are run and verified). It most likely works fine with any Eclipse from 2019-06 onward, but this is not guaranteed.</p>
		<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-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>
			<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>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius">Changes in  
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-info">Modified</span> The method  
				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSelectorProvider.getPriority()</code> has been added. It is used in 
				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSelectorService.getSelector(DAnalysisSession)</code> to ensure that the right DAnalysisSelector is used. The DAnalysisSelector is searched first with the DAnalysisSelectorProvider with higher priority.
			</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>
		<ul>
			<li><span class="label label-success">Added</span> A new API in 
				<code>org.eclipse.sirius.diagram.ui.tools.api.format.MappingBasedSiriusFormatManagerFactory</code> has been added to make it possible to apply a copy-paste format to an existing or a new diagram with different semantic targets. This API receives a mapping between the source and target semantic elements to retrieve which graphical element in the target diagram corresponds to the one in source diagram. See the 
				<a href="developer/copy_paste_format_new_semantic.html">developer</a> documentation for more details.
			</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>
		<p>
			<strong>IMPORTANT NOTE:</strong> Sirius 6.3.1 includes a change in internal data structures used to store diagrams which is not backward-compatible with previous versions, including Sirius 6.3.0. In practice this means that once opened and saved with Sirius 6.3.1, 
			<code>aird</code> files can no longer be opened with Sirius 6.3.0 or earlier.
		</p>
		<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.sirius2">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.sirius3">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.sirius4">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.sirius5">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.business.api.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>