<?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.2.1">Changes in Sirius 6.2.1</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#DeveloperVisibleChanges">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="#UserVisibleChanges">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges2">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="#UserVisibleChanges2">User-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges3">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.diagram3">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="#UserVisibleChanges3">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.0.0">Changes in Sirius 6.0.0</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges4">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges5">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius5.1.1">Changes in Sirius 5.1.1</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges5">User-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges6">Developer-Visible Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius5.1.0">Changes in Sirius 5.1.0</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges6">User-Visible Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#DeveloperVisibleChanges7">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.2.1">Changes in Sirius 6.2.1</h2>
		<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
		<h4 id="Changesinorg.eclipse.sirius">Changes in  
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> 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.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>
		<h2 id="sirius6.2.0">Changes in Sirius 6.2.0</h2>
		<h3 id="UserVisibleChanges">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="SpecifierVisibleChanges">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="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
		<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 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.diagram">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.ui">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="UserVisibleChanges2">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="DeveloperVisibleChanges3">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.sirius2">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.ui2">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.diagram2">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.common2">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.diagram3">Changes in  
			<code>org.eclipse.sirius.diagram</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> Add method 
				<code>allowsVisibilityModeActivation()</code> in 
				<code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider</code> This method is used to know if the visibility mode is supported by a specific diagram description.
			</li>
		</ul>
		<h2 id="sirius6.1.0">Changes in Sirius 6.1.0</h2>
		<ul>
			<li><span class="label label-info">IMPORTANT</span>  The new (and still experimental) 
				<em>Workflow</em> and 
				<em>Server</em> features depend on a specific version of Eclipse Jetty which is available in the main Eclipse Photon repository. They can not be used under Oxygen (which include older and incompatible versions of Jetty).
			</li>
			<li><span class="label label-info">IMPORTANT</span> Please note that starting from version 6.1, Sirius is now licensed under 
				<a href="https://www.eclipse.org/legal/epl-2.0/">version 2.0 of the Eclipse Public License</a>, which updates some wording and clarifies some points but neither changes the open-source nature of Sirius nor the implications of using or embedding it. See 
				<a href="https://www.eclipse.org/legal/epl-2.0/faq.php">the official FAQ</a> for details about the difference between EPL v1.0 (which was used before) and v2.0.
			</li>
		</ul>
		<h3 id="UserVisibleChanges3">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="SpecifierVisibleChanges2">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="DeveloperVisibleChanges4">Developer-Visible Changes</h3>
		<p><span class="label label-info">IMPORTANT</span> Note that all plug-ins in the 
			<em>Sirius Server</em> feature (
			<code>org.eclipse.sirius.server.*</code> and 
			<code>org.eclipse.sirius.services.*</code>) are still considered experimental in this version. In particular, all APIs (Java, HTTP, WebSocket) they provide should be treated as provisional even if they are exposed publicly in 
			<code>*.api.*</code> packages. We reserve the right to modify them in incompatible ways even in future maintenance versions.
		</p>
		<ul>
			<li><span class="label label-success">Added</span> Mechanism to ask user input on opening of a session with migrated resources if the session opening comes from a direct user action
				<ul>
					<li>New available UI callback (
						<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askUserAndSaveMigratedSession(session)</code>) used to ask user if he wants to save the resources after migration and save them if necessary.
					</li>
					<li>New method to open session when this is due to a direct user action (
						<code>org.eclipse.sirius.business.api.session.SessionManager.openSession(sessionResourceURI, monitor, uiCallback, isDirectUserActionLoading)</code>). Previous version calls this new version with the value false for 
						<code>isDirectUserActionLoading</code> parameter
					</li>
					<li>New system preference to know if user want to be asked to save resources after automatic migration 
						<code>org.eclipse.sirius.common.tools.api.constant.CommonPreferencesConstants.PREF_ASK_TO_SAVE_RESOURCE_AFTER_MIGRATION</code>
					</li>
				</ul>
			</li>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.migrationHandler</code> extension point has been added. It allows to contribute migration process, mainly handle migration options.
			</li>
			<li><span class="label label-info">Modified</span> Upgraded ELK version from 0.3.0 to 0.4.0, see the 
				<a href="https://projects.eclipse.org/projects/modeling.elk/releases/0.4.0">ELK documentation</a> for the list of changes in that version.
			</li>
			<li><span class="label label-info">Modified</span> The Acceleo version has been changed from 3.7.2 to 3.7.4.</li>
			<li><span class="label label-info">Modified</span> The class 
				<code>SiriusFormatDataManagerForSemanticElements</code> has been moved from package 
				<code>org.eclipse.sirius.diagram.ui.tools.internal.format.semantic</code> to 
				<code>org.eclipse.sirius.diagram.ui.tools.api.format.semantic</code>.
			</li>
			<li><span class="label label-danger">Removed</span> 
				<em>EOperations</em> 
				<code>checkRule</code> and 
				<code>getMessage</code> of 
				<code>ValidationRule</code> 
				<em>EClass</em> have been removed from 
				<code>viewpoint</code> metamodel. These operations were deprecated and useless since we used method of 
				<code>org.eclipse.sirius.business.internal.metamodel.description.validation.operations.ValidationRuleOperations</code> class.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ui">Changes in 
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys.PREF_DISPLAY_VSM_USER_FIXED_COLOR_IN_PALETTE</code> has been added. Its default value is true. It allows to display, in the color palette, the user fixed color(defined in the activated viewpoints) in addition to standard colors. The color palette is available in Appearance tab of the Properties view.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.ui3">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.common3">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="Migrations">Migrations</h4>
		<ul>
			<li><span class="label label-success">Added</span> A migration participant has been added to convert the serialized xmi:id to the technical id (uid attribut) for Sirius model elements of the .aird files (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=525261">bugzilla #525261</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>14.1.0.201808300808</em>.
			</li>
			<li><span class="label label-success">Added</span> A migration participant has been added to fix diagrams with corrupted Note, Text or Note Attachment (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=539550">bugzilla #539550</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>14.1.0.201809271200</em>.
			</li>
			<li><span class="label label-success">Added</span> A migration participant has been added to update existing representation link. (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=535648">bugzilla #533175</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>14.1.0.201810111800</em>.
			</li>
			<li><span class="label label-success">Added</span> A migration participant has been added to fix edge with multiple connector style (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=539944">bugzilla #539944</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>14.1.0.201810161215</em>.
			</li>
		</ul>
		<h2 id="sirius6.0.0">Changes in Sirius 6.0.0</h2>
		<h3 id="UserVisibleChanges4">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="SpecifierVisibleChanges3">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-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="DeveloperVisibleChanges5">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.common4">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.sirius3">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.business.api.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.diagram4">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.ui4">Changes in 
			<code>org.eclipse.sirius.diagram.ui</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor.createStraightenContribution()</code> has been added to make accessible the creation of the Straighten To tabbar contribution item.
			</li>
		</ul>
		<ul>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.diagram.ui.customLayoutAlgorithmProvider</code> extension point has been added. It allows to contribute layout algorithms that can be configured directly in the VSM. This extension point comes with the following classes as API: 
				<code>org.eclipse.sirius.diagram.ui.api.layout.CustomLayoutAlgorithmProvider</code>, 
				<code>org.eclipse.sirius.diagram.ui.api.layout.CustomLayoutAlgorithm</code>, 
				<code>org.eclipse.sirius.diagram.ui.api.layout.EnumChoice</code> and 
				<code>org.eclipse.sirius.diagram.ui.api.layout.LayoutOptionFactory</code>.
			</li>
		</ul>
		<ul>
			<li><span class="label label-info">Modified</span> The methods 
				<code>hideLayer(Layer)</code>, 
				<code>showLayer(Layer)</code>, 
				<code>addToolFilter(ToolFilter)</code> and 
				<code>removeToolFilter(ToolFilter)</code> of 
				<code>org.eclipse.sirius.diagram.ui.tools.api.graphical.edit.palette.PaletteManager</code> have been made deprecated. They are not used anymore. The API 
				<code>ToolManagement</code> is now the entry point to make palette update regarding tools and layer changes.
			</li>
		</ul>
		<ul>
			<li><span class="label label-info">Modified</span> The 
				<code>Diagram</code> parameter of the methods 
				<code>oes.update(Diagram)</code> and 
				<code>oes.update(Diagram,boolean)</code> has been changed to 
				<code>DDiagram</code>.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ui2">Changes in 
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li><span class="label label-danger">Removed</span> The class 
				<code>org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelectionDialog</code> has been removed.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in 
			<code>org.eclipse.sirius.tests.junit.support</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> 
				<code>org.eclipse.sirius.tests.support.api.TestsUtil.isBeforeOxygenPlatform()</code> has been added to detect if the current platform corresponds to a version before Oxygen.
			</li>
			<li><span class="label label-info">Modified</span> A 
				<code>String</code> parameter has been added to the method 
				<code>org.eclipse.sirius.tests.support.api.TestsUtil.setTargetPlatform()</code>. This new parameter corresponds to the plug-in name from where the tests are currently launched (for example 
				<code>org.eclipse.sirius.tests.swtbot.Activator.PLUGIN_ID</code>). It avoids to build a wrong target platform containing each Sirius plug-ins twice. 
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support4">Changes in 
			<code>org.eclipse.sirius.tests.swtbot.support</code>
		</h4>
		<ul>
			<li><span class="label label-danger">Removed</span> The method 
				<code>org.eclipse.sirius.tests.swtbot.support.utils.dnd.DndUtil#dragAndDrop(AbstractSWTBot&lt;? extends Widget&gt;, AbstractSWTBot&lt;? extends Widget&gt;)</code> has been removed. When explicit drop coordinates are not needed, use the standard SWTbot 
				<code>org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot.dragAndDrop(AbstractSWTBot&lt;? extends Widget&gt;)</code> method instead. 
			</li>
		</ul>
		<h4 id="Migrations2">Migrations</h4>
		<ul>
			<li><span class="label label-success">Added</span> A migration participant has been added to fix diagram with note attachment corrupted (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=533177">bugzilla #533177</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
				<em>13.0.0.201804031646</em>.
			</li>
		</ul>
		<h4 id="TranslationKeysChanges">Translation Keys Changes</h4>
		<h2 id="sirius5.1.1">Changes in Sirius 5.1.1</h2>
		<h3 id="UserVisibleChanges5">User-Visible Changes</h3>
		<ul>
			<li><span class="label label-info">Modified</span> When exporting a diagram as an image, it is now possible to choose an image size level. Before this, a preference called 
				<em>AutoScale</em> was available and when it was enable, the diagram was scaled to the maximum size safely allowed by the system. Now, a new preference named 
				<em>Size of exported images</em> is available in the 
				<em>Sirius &gt; Sirius Diagram</em> preference page and offer this possibility. Setting size to 
				<em>Max</em> generates same diagrams as by using the previous preference 
				<em>AutoScale</em>. This can produce image with big size in long generation time. If 
				<em>Size of exported images</em> is set to level 
				<em>Nominal</em>, diagram will be exported with nominal size (quality will be lower but export time will be shorter). This new preference allows you to choose the tradeoff you want. The 
				<a href="user/diagrams/Diagrams.html#Exportingimages">user documentation </a> details this change with an example. 
			</li>
			<li><span class="label label-info">Modified</span> The "
				<em>Auto Size</em>" action can now be applied on region container. Before that, the action was available only for regions.
			</li>
			<li><span class="label label-info">Modified</span> The "
				<em>Make Same Size</em>" action can now be applied on region container. If selected region containers have the same number of regions, the regions will have the same size. If the region container used for reference has more regions than the other(s), the last region of others will have the size of all remaining regions in the one used for reference.
			</li>
			<li><span class="label label-info">Modified</span> In diagrams, the selection by drawing a rectangle on container (using ALT key) now has the same behaviors than selection by drawing a rectangle on the diagram&#8217;s background. You can refer to 
				<em>Selection</em> section of the 
				<a href="user/diagrams/Diagrams.html#standardToolId">Standard Tools</a> chapter for more details on this tool.
			</li>
		</ul>
		<h3 id="DeveloperVisibleChanges6">Developer-Visible Changes</h3>
		<h4 id="Changesinorg.eclipse.sirius4">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li><span class="label label-success">Added</span> The method 
				<code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder.of(EObject)</code> has been added to provide an easy way to get the 
				<code>SiriusReferenceFinder</code> from an 
				<code>EObject</code> in the Sirius 
				<code>Session</code>. 
			</li>
			<li><span class="label label-info">Modified</span> (experimental) The method 
				<code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder.getReferencingSiriusElements(Collection&lt;EObject&gt;, SearchScope)</code>. The SearchScope.LOADED_REPRESENTATIONS_SCOPE scope covers the search and result scope. Then, no additional resource will be loaded using this scope.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.ui5">Changes in 
			<code>org.eclipse.sirius.diagram.ui</code>
		</h4>
		<ul>
			<li><span class="label label-warning">Deprecated</span> Preference 
				<code>PREF_SCALE_DIAGRAMS_ON_EXPORT</code> from 
				<code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code> is now deprecated. User should use new preference 
				<code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys</code>: 
				<code>PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT</code>.
			</li>
			<li><span class="label label-success">Added</span> A new attribute 
				<code>margin</code> has been added in 
				<code>org.eclipse.sirius.diagram.ui.business.api.DiagramExportResult</code>. This attribute indicates what margin has been used to produce a white frame during diagram export. This attribute is available from the getter 
				<code>getMargin()</code>. A new constructor is also available to pass on the margin 
				<code>org.eclipse.sirius.diagram.ui.business.api.DiagramExportResult.DiagramExportResult(DDiagram, double, int, Collection&lt;IPath&gt;)</code>. 
			</li>
			<li><span class="label label-info">Modified</span> If you previously override the default Sirius value for 
				<code>SiriusDiagramUiPreferencesKeys.PREF_SCALE_DIAGRAMS_ON_EXPORT</code>, you must replace this override by an override of the new preference 
				<code>SiriusUIPreferencesKeys.PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT</code>. Example: 
			</li>
		</ul>
		<pre>SiriusEditPlugin.getPlugin().getPreferenceStore().setDefault(SiriusUIPreferencesKeys.PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT.name(),0); 

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