<?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="/help/topic/org.eclipse.sirius.doc/doc/resources/bootstrap.css"/>
		<link type="text/css" rel="stylesheet" href="/help/topic/org.eclipse.sirius.doc/doc/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="#sirius1.0M7">Changes in Sirius 1.0.0M7 (from Sirius 1.0M6)</a>
					</li>
					<li>
						<a href="#sirius1.0M6">Changes in Sirius 1.0.0M6 (from Sirius 1.0M5)</a>
					</li>
					<li>
						<a href="#sirius1.0M5">Changes in Sirius 1.0.0M5 (from Sirius 1.0M4)</a>
					</li>
					<li>
						<a href="#sirius1.0M4">Changes in Sirius 1.0.0M4 (from Sirius 0.9)</a>
					</li>
					<li>
						<a href="#sirius0.9">Changes in Sirius 0.9.0</a>
					</li>
				</ol>
			</li>
		</ol>
		<p>This document contains the release notes for all major releases of Sirius.</p>
		<h2 id="sirius1.0M7">Changes in Sirius 1.0.0M7 (from Sirius 1.0M6)</h2>
		<h3 id="APIChanges">API Changes</h3>
		<h4 id="separationOfDiagramSpecificConcept-step3">Move diagram.ecore in its own plugin</h4>
		<p>This milestone (Sirius 1.0M7) includes the third, and final, step towards a full separation of the diagram-specific stuff out of the core of Sirius (see 
			<a href="#separationOfDiagramSpecificConcept-step1">Step1</a> and 
			<a href="#separationOfDiagramSpecificConcept-step2">Step2</a> for more details).
		</p>
		<p>All classes related to diagrams in 
			<code>org.eclipse.sirius</code> have been moved to 
			<code>org.eclipse.sirius.diagram</code>.
			<br/>All classes related to diagrams in 
			<code>org.eclipse.sirius.ui</code> have been moved to 
			<code>org.eclipse.sirius.diagram.ui</code>.
			<br/>All classes related to diagrams in 
			<code>org.eclipse.sirius.editor</code> have been moved to 
			<code>org.eclipse.sirius.editor.diagram</code>.
			<br/>In the same way, all classes related to UI in 
			<code>org.eclipse.diagram</code> have been moved to 
			<code>org.eclipse.sirius.diagram.ui</code>. To simplify this step almost all classes of 
			<code>org.eclipse.diagram</code> have been moved in 
			<code>org.eclipse.sirius.diagram.ui</code> (and probably not only UI classes). These classes have been moved in 
			<code>src-diag</code> source folder to facilitate future work about moving some of these classes in 
			<code>org.eclipse.diagram</code> again.
		</p>
		<p>Unlike, the 
			<a href="#separationOfDiagramSpecificConcept-step1">Step1</a>, a simple &#171;Organize Imports&#187; operation is not enough. First, you will probably need to add dependencies to 
			<code>org.eclipse.sirius.diagram</code>, 
			<code>org.eclipse.sirius.diagram.ui</code> or 
			<code>org.eclipse.sirius.editor.diagram</code> in the MANIFEST.MF of your projects that depend on Sirius diagram classes. The dependencies to add depend on what you really use.
		</p>
		<ul>
			<li>
				<code>ViewpointRegistry.getDiagramDescriptionMappingsRegistry()</code> has been removed. You can now directly call 
				<code>org.eclipse.sirius.diagram.business.api.componentization.DiagramDescriptionMappingsRegistry.INSTANCE.DialectServices</code>.
			</li>
			<li>New methods have been added to 
				<code>IRepairParticipant</code> to isolate specific diagram repair steps.
				<ul>
					<li>
						<code>removeElements(DView, TransactionalEditingDomain, IProgressMonitor)</code>: Removes elements from the 
						<code>DView</code> that will be recreated by the refresh (called later).
					</li>
					<li>
						<code>cleanRepresentations(EList&lt;DRepresentation&gt;)</code>: Cleans representations (specific representation states like filters) and eventually returns some of them if they need to be removed.
					</li>
					<li>
						<code>refreshRepresentations(DAnalysis, DView)</code>: This method is only implemented by the diagram participant. To simplify work for this step, this method manages core and diagram elements. It should be clean up once the split will be done.
					</li>
				</ul>
			</li>
			<li>To break the dependencies from Core to Diagram, several services have been added to:
				<ul>
					<li>
						<code>DialectServices</code>, with default implementations in 
						<code>AbstractRepresentationDialectServices</code>:
						<ul>
							<li>
								<code>createTask(CommandContext, ModelAccessor, ModelOperation, Session, UICallBack)</code>: Creates a new task corresponding to the ModelOperation. Only needed for ModelOperation specific to one dialect.
							</li>
							<li>
								<code>handles(RepresentationExtensionDescription)</code>: Tells if the current dialect handles the given 
								<code>RepresentationExtensionDescription</code>.
							</li>
							<li>
								<code>invalidateMappingCache()</code>: Allows each dialect to clean and compute again its proper mapping cache.
							</li>
							<li>
								<code>allowsEStructuralFeatureCustomization(EObject)</code>: allows dialects to indicate if they allow EStrucuralFeaturesCustomization for the given VSM element. It is currently supported for style descriptions in diagrams only.
							</li>
						</ul>
					</li>
					<li>
						<code>DialectUIServices</code>
						<ul>
							<li>
								<code>canHandle(RepresentationDescription)</code> and 
								<code>canHandle(RepresentationExtensionDescription)</code>: tell whether the dialect is able to handle the given representation description or extension description.
							</li>
							<li>
								<code>completeToolTipText(String, EObject)</code> allows the dialect to customize the tooltip displayed in a property section of a given VSM element.
							</li>
						</ul>
					</li>
					<li>
						<code>DialectUIManager</code>
						<ul>
							<li>
								<code>canExport(DRepresentation, ExportFormat)</code>: New method returning true if at least one dialect is able to export this representation to this format, false otherwise.
							</li>
						</ul>
					</li>
					<li>
						<code>IDiagramDescriptionProvider</code>
						<ul>
							<li>
								<code>completeToolTipText(String, EObject)</code> allows the diagram type to customize the tooltip displayed in a property section of a given VSM element. 
								<code>SequenceDiagramTypeProvider</code> implements this method to  mention some Sequence specific variable available in core and diagram tool preconditions in the context of a Sequence diagram.
							</li>
						</ul>
					</li>
				</ul>
			</li>
			<li>All methods of 
				<code>SiriusHelper</code> concerning diagrams have been moved to 
				<code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramHelper</code>.
			</li>
			<li>All methods of 
				<code>SiriusUtil</code> concerning diagrams have been moved to 
				<code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil</code>.
			</li>
			<li>All methods of 
				<code>org.eclipse.sirius.business.api.query.EObjectQuery</code> concerning diagrams have been moved to 
				<code>org.eclipse.sirius.diagram.business.api.query.EObjectQuery</code>.
			</li>
			<li>
				<a href="https://wiki.eclipse.org/Sirius/Modularization#Library_Extensions">Library Extensions</a>:
				<ul>
					<li>All methods depending only on draw2d of 
						<code>org.eclipse.sirius.diagram.ui.tools.api.draw2d.ui.figures.FigureUtilities</code> have been moved in 
						<code>org.eclipse.sirius.ext.draw2d.figure.FigureUtilities</code>
					</li>
					<li>
						<code>fr.obeo.dsl.viewpoint.diagram.ui.tools.api.layout.GraphicalHelper</code> has been moved to 
						<code>org.eclipse.sirius.ext.gmf.runtime.editparts.GraphicalHelper</code>.
					</li>
					<li>
						<code>org.eclipse.sirius.diagram.part.SiriusDiagramEditorPlugin</code> has been renamed into 
						<code>org.eclipse.sirius.diagram.DiagramPlugin</code>. This plugin is not a UI plugin any more, 
						<code>org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin.getPlugin()</code> should be used instead for UI related aspects. For example 
						<code>DiagramUIPlugin.getPlugin().getPreferenceStore()</code> should be used instead of  
						<code>DiagramPlugin.getDefault().getPreferenceStore()</code> or 
						<code>SiriusDiagramEditorPlugin.getInstance().getPreferenceStore()</code>.
					</li>
				</ul>
			</li>
			<li>
				<code>DeleteFromDiagramContributionItem</code> and 
				<code>SetStyleToWorkspaceImageContributionItem</code> have been merged into 
				<code>SiriusActionBarActionContributionItem</code>
			</li>
			<li>Images
				<ul>
					<li>Images of 
						<code>org.eclipse.sirius.diagram</code> have been moved to 
						<code>org.eclipse.sirius.diagram.ui</code>. In your code, you should replace 
						<code>SiriusDiagramEditorPlugin.getInstance().getImage()</code> and 
						<code>DiagramPlugin.getInstance().getImage()</code> by 
						<code>DiagramUIPlugin.getPlugin().getImage()</code>. That is the case for all methods concerning images in 
						<code>DiagramPlugin</code> (previously named 
						<code>SiriusDiagramEditorPlugin</code>).
					</li>
					<li>Some images of 
						<code>org.eclipse.sirius.ui</code> have been moved to 
						<code>org.eclipse.sirius.diagram.ui</code>, the corresponding constants in 
						<code>org.eclipse.sirius.ui.tools.api.image.ImagesPath</code> have been moved in 
						<code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath</code>.
					</li>
				</ul>
			</li>
			<li>The method 
				<code>static void refreshSelection(DiagramElementMapping)</code> from 
				<code>org.eclipse.sirius.editor.tools.api.menu.AbstractEObjectRefactoringAction</code> is not available anymore.
			</li>
			<li>Preferences
				<ul>
					<li>
						<code>org.eclipse.sirius.business.api.preferences.SiriusPreferencesKeys.PREF_AUTO_PIN_ON_CREATE</code> has been moved to 
						<code>org.eclipse.sirius.diagram.tools.api.preferences.SiriusDiagramPreferencesKeys</code>.
					</li>
				</ul>
			</li>
		</ul>
		<h5 id="Movedextensionpoints">Moved extension points</h5>
		<p>Several extension points have been moved:</p>
		<ul>
			<li>from 
				<code>org.eclipse.sirius</code> to 
				<code>org.eclipse.sirius.diagram</code>. You should change the id of the following extension point in your plugin.xml (
				<code>org.eclipse.sirius.xxxx</code> replaced by 
				<code>org.eclipse.sirius.diagram.xxxx</code>):
				<ul>
					<li>diagramTypeProvider</li>
				</ul>
			</li>
			<li>from 
				<code>org.eclipse.sirius.diagram</code> to 
				<code>org.eclipse.sirius.diagram.ui</code>. You should change the id of the following extension points in your plugin.xml (
				<code>org.eclipse.sirius.diagram.xxxx</code> replaced by 
				<code>org.eclipse.sirius.diagram.ui.xxxx</code>):
				<ul>
					<li>diagramIdentifierProvider</li>
					<li>imageSelector</li>
					<li>layoutDataManager</li>
					<li>layoutProvider</li>
					<li>styleConfigurationProvider</li>
					<li>viewOrderingProvider</li>
				</ul>
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li>
				<code>org.eclipse.sirius.business.api.query.URIQuery.isSiriusEnvironmentURI</code> has been replaced by 
				<ul>
					<li>
						<code>isSiriusCoreEnvironmentURI</code> which checks that the given resource is the Sirius core Environment.xmi file. 
					</li>
					<li>and 
						<code>isEnvironmentURI</code> which checks that the given resource has an 
						<code>environment</code> uri scheme. 
					</li>
				</ul>
			</li>
			<li>In 
				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>
				<ul>
					<li>the setter 
						<code>setRefreshActivatedOnRepresentationOpening(boolean)</code> has been removed as the refresh on opening should be managed from the corresponding preference 
						<code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys.PREF_REFRESH_ON_REPRESENTATION_OPENING</code>.
					</li>
					<li>
						<code>isRefreshActivatedOnRepresentationOpening()</code> has been moved into 
						<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIManager</code> as it refers to an UI behavior.
					</li>
				</ul>
			</li>
			<li>The 
				<code>DRepresentation.createContents()</code> (both variants) and 
				<code>DRepresentation.updateContents()</code> EOperations have been removed. They were not used anywhere.
			</li>
			<li>The 
				<code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.MODELING_PROJECT_PREDICATE</code> constant has been removed to reduce Sirius&#8217;s exposure of Guava&#8217;specific types. Use the equivalent 
				<code>ModelingProject.hasModelingProjectNature()</code> method instead.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram">Changes in 
			<code>org.eclipse.sirius.diagram</code>
		</h4>
		<ul>
			<li>The references 
				<code>DNode.ownedDetails</code> and 
				<code>DDiagramElementContainerImpl.ownedDetails</code> have been removed from the metamodel, along with the corresponding implementation methods. They were not used in practice.
			</li>
			<li>The 
				<code>DDiagramLink</code> EClass has been removed from the meta-model, along with the corresponding generated Java code. It was not used in practice.
			</li>
			<li>The 
				<code>DDiagram.clean()</code> EOperation has been removed. It was deprecated and not used anymore. All the Java code which existed only to help in the implementation of that operation has also been removed. This includes:
				<ul>
					<li>The 
						<code>org.eclipse.sirius.diagram.tools.api.validation.constraint.AbstractDDiagramConstraint.activate()</code> and 
						<code>deactivate()</code> methods.
					</li>
					<li>The 
						<code>org.eclipse.sirius.business.api.helper.SiriusHelper.unSetHarmlessDanglingReferences()</code> method.
					</li>
					<li>The 
						<code>org.eclipse.sirius.tools.api.profiler.SiriusTasksKey.CLEANING_NODES_KEY</code> constant.
					</li>
				</ul>
			</li>
			<li>The 
				<code>DSemanticDiagram.getRootContents()</code> method (which was deprecated) has been removed.
			</li>
			<li>The 
				<code>DDiagram.findDiagramElements()</code> EOperation has been removed. It was deprecated and always returned an empty list if called.
			</li>
			<li>The 
				<code>DDiagram.info</code> attribute has been removed. It was not used anywhere.
			</li>
			<li>The 
				<code>DDiagram.subDiagram</code> reference has been removed. It was not used anywhere.
			</li>
			<li>The 
				<code>DDiagramElement.isFold()</code>] EOperation has been removed. It was deprecated and edge folding has long been implemented using different mechanisms.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ui">Changes in 
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li>
				<code>org.eclipse.sirius.ui.business.api.preferences.DesignerUIPreferencesKeys</code> has been renamed into 
				<code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys</code>
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ext.base">Changes in 
			<code>org.eclipse.sirius.ext.base</code>
		</h4>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.ext.base.Options.isSome()</code> method has been removed to reduce Sirius&#8217;s exposure of Guava&#8217;specific types. Use 
				<code>Option.some()</code> directly instead.
			</li>
			<li>
				<code>org.eclipse.sirius.ext.base.relations.Relation</code> no longer inherits from 
				<code>com.google.common.base.Function</code>, but keeps the same API otherwise.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.synchronizer">Changes in 
			<code>org.eclipse.sirius.synchronizer</code>
		</h4>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.synchronizer.Mapping.IS_CHECK_ONLY</code> constant has been removed to reduce Sirius&#8217;s exposure of Guava&#8217;specific types. Use 
				<code>!Mapping.getCreator().some()</code> instead.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.tests.support">Changes in 
			<code>org.eclipse.sirius.tests.support</code>
		</h4>
		<ul>
			<li>The 
				<code>shouldReloadSession</code> boolean parameter has been removed from 
				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase.disableUICallBackOnDialectEditor(DialectEditor)</code>, it was not used and could let the tester think he can change the reload behavior from the dialog factory.
			</li>
			<li>
				<code>org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase.refreshDiagram()</code> has been removed. This method did not handle the non dynamic tabbar and was a duplicate of manualRefresh(). Callers must select the diagram before the call,the click(0,0) instruction was not sufficient in several cases (for example if there is a node/container in (0,0)).
			</li>
			<li>
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotDesignerEditor</code> has been renamed into 
				<code>SWTBotSiriusDiagramEditor</code>.
			</li>
			<li>
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotDesignerGefViewer</code> has been renamed into 
				<code>SWTBotSiriusGefViewer</code>.
			</li>
			<li>
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotDesignerHelper</code> has been renamed into 
				<code>SWTBotSiriusHelper</code>.
			</li>
			<li>Methods 
				<code>AbstractSiriusSwtBotGefTestCase.openRepresentation</code> with 
				<code>SWTBotDesignerEditor</code> as returned type have been renamed into 
				<code>openDiagram</code>, marked as deprecated and replaced with methods returning a 
				<code>SWTBotEditor</code>. You can now use methods 
				<code>openRepresentation</code> for DTree or DTable. If the 
				<code>expectedRepresentationClass</code> is 
				<code>DDiagram.class</code>, the returned type will be a 
				<code>SWTBotSiriusDiagramEditor</code>.
			</li>
			<li>Method 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusHelper.getDesignerEditor(String)</code> has been renamed into 
				<code>getSiriusDiagramEditor</code>.
			</li>
			<li>Add 
				<code>SWTBotSiriusHelper.getSiriusEditor(String)</code> to return the 
				<code>SWTBotEditor</code> (diagram, tree or table editor) with the given name. The name is the name as displayed on the editor&#8217;s tab in Eclipse. In case of multiple editors with the same fileName, the same method with an additional parameter, the index, has been added 
				<code>SWTBotSiriusHelper.getSiriusEditor(String, int)</code>.
			</li>
			<li>Change the behavior of 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.zoom(ZoomLevel)</code> to directly change the zoom level of the current diagram editor without trying to change it from the zoom combo in the tabbar.
			</li>
			<li>Add 
				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.zoomFromToolbar(ZoomLevel)</code> to add possibility to explicitly change the zoom level from the tabbar.
			</li>
		</ul>
		<h2 id="sirius1.0M6">Changes in Sirius 1.0.0M6 (from Sirius 1.0M5)</h2>
		<h3 id="APIChanges2">API Changes</h3>
		<h4 id="tests">High-level API for Automated Tests Using JUnit and SWTBot</h4>
		<p>Starting from version 1.0.0M6, Sirius includes high-level APIs to help creating automated tests using JUnit and/or SWTBot. These can be used either to test Sirius itself or to test Sirius-based modelers. These APIs are provided by two plug-ins:</p>
		<ul>
			<li>
				<code>org.eclipse.sirius.tests.support</code>: support code for JUnit (plug-in) tests using Sirius.
			</li>
			<li>
				<code>org.eclipse.sirius.tests.swtbot.support</code>: support code for SWTBot tests using Sirius.
			</li>
		</ul>
		<p>Both plug-ins are only available if you install the new 
			<code>org.eclipse.sirius.tests</code> feature.
		</p>
		<h4 id="separationOfDiagramSpecificConcept-step2">Move diagram-specific EPackages into their own diagram.ecore model</h4>
		<p>This milestone (Sirius 1.0M6) includes the second step towards a full separation of the diagram-specific stuff out of the core of Sirius (see 
			<a href="#separationOfDiagramSpecificConcept-step1">Step1</a> for more details).
		</p>
		<p>This step is less impactful on your code than the first step. Nevertheless, some missed classes during first step have moved during this step:</p>
		<ul>
			<li>Remove 
				<code>DDiagramSet</code> and its corresponding reference from 
				<code>DRepresentationContainer</code>: No longer needed
			</li>
			<li>
				<code>DragAndDropTarget</code>, 
				<code>DragAndDropTargetDescription</code> and 
				<code>ContainerDropDescription</code> have been moved to diagram EPackage.
			</li>
			<li>
				<code>viewpoint/diagram/description/validation</code> EPackage has been moved to 
				<code>viewpoint/description/validation</code>: revert what was done in step 1 by mistake.
			</li>
		</ul>
		<p>The existing VSM (
			<code>*.odesign</code>) and representations file (
			<code>*.aird</code>) are automatically migrated.
		</p>
		<p>Warning: If you have some code based on the root EPackage of an EClass, it may be necessary to adapt it. Example:</p>
		<pre>EPackage rootPackage = (EPackage) EcoreUtil.getRootContainer(element.eClass());
if (rootPackage != null &amp;&amp; rootPackage.getNsURI().equals(ViewpointPackage.eINSTANCE.getNsURI())) {
</pre>
		<p>should be adapted in</p>
		<pre>EPackage rootPackage = (EPackage) EcoreUtil.getRootContainer(element.eClass());
if (rootPackage != null &amp;&amp; rootPackage.getNsURI().equals(DiagramPackage.eINSTANCE.getNsURI())) {
</pre>
		<p>if 
			<code>element</code> is a Diagram concept.
		</p>
		<h4 id="Changesinorg.eclipse.sirius2">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.tools.api.command.IDiagramCommandFactory.setAutoRefreshDView()</code> method was removed. It had no effect, any code which called it can simply be removed.
			</li>
			<li>The deprecated interface 
				<code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryListener</code> has been removed. Use  
				<code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryListener2</code> instead.
			</li>
			<li>
				<code>org.eclipse.sirius.business.api.session.SessionManagerListener2</code> and 
				<code>org.eclipse.sirius.business.api.session.SessionManagerListener</code> have been merged into 
				<code>org.eclipse.sirius.business.api.session.SessionManagerListener</code> which is not deprecated any more.
			</li>
			<li>The deprecated method 
				<code>org.eclipse.sirius.business.api.session.SessionManagerListener.notifyUpdatedSession(Session)</code> has been removed. Use 
				<code>org.eclipse.sirius.business.api.session.SessionManagerListener.notify(Session, int)</code> instead.
			</li>
			<li>
				<code>org.eclipse.sirius.business.api.helper.task.RemoveDanglingReferencesTask</code> and 
				<code>org.eclipse.sirius.business.api.helper.task.RemoveSemanticDanglingReferenceTask</code> and 
				<code>org.eclipse.sirius.tools.api.command.AbstractCommandFactory.addRemoveDanglingReferencesTask()</code> have been removed. These tasks were added to in several commands to remove dangling references at the end. They are now replaced by a specific 
				<code>ModelChangeTrigger</code> to detect the detachment of 
				<code>EObject</code> and remove the dangling references. It is added to the 
				<code>SessionEventBroker</code> during the session opening.
			</li>
			<li>
				<code>org.eclipse.sirius.tools.api.ui.RefreshEditorsPrecommitListener</code> was a precommit 
				<code>ResourceSetListener</code>, it became a 
				<code>ModelChangeTrigger</code> and is now added to the SessionEventBroker during the session opening. This modification allows to correctly manage the order of our different precommit commands. It is triggered after the dangling reference remover.
			</li>
			<li>
				<code>org.eclipse.sirius.tools.api.command.semantic.RemoveDanglingReferences</code> is no more used in Sirius commands. It can still be used to clean a resourceSet or a resource (repair tool, import/export, ..). It also has a new static method 
				<code>removeDanglingReferences(Resource)</code> to remove dangling references as an entry point.
			</li>
			<li>The protected predicate 
				<code>org.eclipse.sirius.business.api.helper.task.AbstractDeleteDRepresentationElementTask.DSEMANTICDECORATOR_REFERENCE_T0_IGNORE_PREDICATE</code> has been removed, the internal predicate 
				<code>DanglingRefRemovalTrigger.DSEMANTICDECORATOR_REFERENCE_T0_IGNORE_PREDICATE</code> is used instead.
			</li>
			<li>The 
				<code>org.eclipse.sirius.business.api.helper.SiriusUtil.findDiagram(EObject)</code> method has been removed. Use the equivalent 
				<code>new org.eclipse.sirius.business.api.query.EObjectQuery(element).getParentDiagram()</code> instead.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ui2">Changes in 
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.ui.tools.api.perspectives.DesignPerspective</code> interface has been moved to 
				<code>org.eclipse.sirius.editor.tools.api.perspectives</code> package in 
				<code>org.eclipse.sirius.editor</code> plugin. This perspective is now provided through the 
				<code>org.eclipse.sirius.editor</code> plugin. The perspective ID is kept unchanged for a compatibility reason.
			</li>
			<li>The deprecated class 
				<code>org.eclipse.sirius.ui.tools.api.dialogs.ExportRepresentationsAsImagesDialog</code> has been removed. Use 
				<code>org.eclipse.sirius.ui.tools.api.dialogs.ExportSeveralRepresentationsAsImagesDialog</code> instead.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in 
			<code>org.eclipse.sirius.diagram</code>
		</h4>
		<ul>
			<li>
				<code>org.sirius.diagram.graphical.edit.policies.AirNoteAttachmentEditPolicy</code> has been removed, with the new dangling reference management, it became identical to its superclass, use 
				<code>org.eclipse.gmf.runtime.diagram.ui.internal.editpolicies.ConnectionEditPolicy</code> instead. Its provider 
				<code>org.sirius.diagram.graphicalou .edit.policies.AirNoteAttachmentEditPolicyProvider</code> and declaration in plugin.xml have been removed too.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.table">Changes in 
			<code>org.eclipse.sirius.table</code>
		</h4>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.table.tools.api.command.ITableCommandFactory.setAutoRefreshDTable()</code> method was removed. It had no effect, any code which called it can simply be removed.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.tree">Changes in 
			<code>org.eclipse.sirius.tree</code>
		</h4>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.tree.business.api.command.ITreeCommandFactory.setAutoRefreshDTree()</code> method was removed. It had no effect, any code which called it can simply be removed.
			</li>
		</ul>
		<h2 id="sirius1.0M5">Changes in Sirius 1.0.0M5 (from Sirius 1.0M4)</h2>
		<h3 id="UserVisibleChanges">User-Visible Changes</h3>
		<ul>
			<li>The table csv export has been improved to handle cropped label. In some specific cases, the cell label is automatically cropped and &#8249;...&#8250; is concatenated to the resulting value. This cropped displayed label was previously exported, now the complete semantic value is exported.</li>
		</ul>
		<h3 id="APIChanges3">API Changes</h3>
		<h4 id="LibraryExtensions">Library Extensions</h4>
		<p>This milestone (Sirius 1.0M5) introduces several new plug-ins, collectively called &#171;library extensions&#187;. They are all named 
			<code>org.eclipse.sirius.ext.LIB</code>, where 
			<code>LIB</code> is the name of a library or component Sirius depends on. These plug-ins are used to isolate generic code which extends existing libraries with features and helpers needed for Sirius, but which do not depend on Sirius themselves. A relatively large part of the code in Sirius is of this kind: things that could/should be in EMF, GMF, Eclipse itself, etc. and which are not Sirius-specific but which make it easier to build Sirius itself. Sirius 1.0M5 introduces several of these library extensions and starts to fill them with existing classes which were &#171;hidden&#187; inside Sirius and are now exposed in library extensions. Most of the time, existing code which used the Sirius API will only need to:
		</p>
		<ol>
			<li>Add the necessary 
				<code>Import-Package</code> (recommended) or 
				<code>Require-Bundle</code> to depend on the library extension(s) where the code they use now lives;
			</li>
			<li>Perform a simple &#171;Organize Imports&#187; operation, which should find the classes and interfaces in their new locations.</li>
		</ol>
		<h4 id="separationOfDiagramSpecificConcept-step1">Move diagram-specific EClasses into a separate EPackage</h4>
		<p>For historical reasons, the core Sirius metamodels defined in viewpoint.ecore contain both generic (dialect-independant like Viewpoint, RepresentationDescription, DAnalysis...) concepts and diagram-specific ones (e.g. DNode, EdgeStyle, ContainerCreationDescription...). The table and tree metamodels are more cleanly separated.
			<br/>This milestone (Sirius 1.0M5) includes the first step towards a full separation of the diagram-specific stuff out of the core of Sirius. So many EClasses have been moved. 
		</p>
		<p>Most of the time, existing code which used these Sirius EClasses will only need to perform a simple &#171;Organize Imports&#187; operation, which should find the classes and interfaces in their new locations.
			<br/>The &#171;Organize imports&#187; is not sufficient in case of imported classes existing several time in different packages (
			<code>EFactory</code> classes for example with 
			<code>DescriptionFactory</code>, or 
			<code>EPackage</code> classes for example with 
			<code>DescriptionPackage</code>). And in some cases 
			<code>ViewpointFactory</code> (and 
			<code>ViewpointPackage</code>) will have to be replaced by 
			<code>DiagramFactory</code> (and 
			<code>DiagramPackage</code>). 
		</p>
		<p>The 
			<code>Switch</code> classes if overridden also require a particular attention.
		</p>
		<p>The existing VSM (
			<code>*.odesign</code>) and representations file (
			<code>*.aird</code>) are automatically migrated.
			<br/>Warning: Nevertheless, if you reference these Sirius concepts with the EPackage qualifier in your VSM (
			<code>*.odesign</code>), in interpreted expressions for example, you must change 
			<code>viewpoint</code> in 
			<code>diagram</code>. For example 
			<code>viewpoint::DDiagramElement</code> becomes 
			<code>diagram::DDiagramElement</code>.
		</p>
		<p>The impacted EPackages are : </p>
		<ul>
			<li>
				<code>viewpoint</code> : some of its EClasses have been moved to 
				<code>viewpoint/diagram</code>
			</li>
			<li>
				<code>viewpoint/description</code> : some of its EClasses have been moved to 
				<code>viewpoint/diagram/description</code>
			</li>
			<li>
				<code>viewpoint/description/style</code> : some of its EClasses have been moved to 
				<code>viewpoint/diagram/description/style</code>
			</li>
			<li>
				<code>viewpoint/description/tool</code> : some of its EClasses have been moved to 
				<code>viewpoint/diagram/description/tool</code>
			</li>
			<li>
				<code>viewpoint/description/filter</code> : this EPackage has been moved to 
				<code>viewpoint/diagram/description/filter</code>
			</li>
			<li>
				<code>viewpoint/description/validation</code> : this EPackage has been moved to 
				<code>viewpoint/diagram/description/validation</code>
			</li>
			<li>
				<code>viewpoint/description/concern</code> : this EPackage has been moved to 
				<code>viewpoint/diagram/description/concern</code> 
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius3">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.business.api.migration.resource.StringCouple</code> class has been removed.
			</li>
			<li>The 
				<code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionTargetSwitch.getFirstRelevantContainerFinder</code> method has been added to let each dialect use its own 
				<code>Function</code> to retrieve the first relevant container of a given 
				<code>EObject</code>, i.e. the first container from which a domain class can be determined.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.common.ui">Changes in 
			<code>org.eclipse.sirius.common.ui</code>
		</h4>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.common.ui.business.api.interpreter.VariableContentProvider</code> class has been removed.
			</li>
			<li>The 
				<code>org.eclipse.sirius.common.ui.tools.api.util.ISimpleAction</code> interface has been removed.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.table2">Changes in 
			<code>org.eclipse.sirius.table</code>
		</h4>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.table.business.api.query.DCellQuery.getExportableLabel()</code> method has been added to compute the label to export when the label is cropped by the 
				<code>org.eclipse.emf.edit.provider.ItemPropertyDescriptor.ItemDelegator</code>.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.table.ui">Changes in 
			<code>org.eclipse.sirius.table.ui</code>
		</h4>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.table.ui.business.api.helper.TableUIHelper</code> now uses 
				<code>DCellQuery.getExportableLabel()</code> to compute the cell labels used in HTML export.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ui3">Changes in 
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li>The long-deprecated 
				<code>org.eclipse.sirius.ui.business.api.session.DeprecatedIEditingSession</code> interface has been removed. Use the corresponding methods from 
				<code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code> instead.
			</li>
		</ul>
		<h2 id="sirius1.0M4">Changes in Sirius 1.0.0M4 (from Sirius 0.9)</h2>
		<h3 id="UserVisibleChanges2">User-Visible Changes</h3>
		<ul>
			<li>The ability to print table representations, which had been disabled for the 0.9 release, has been re-enabled.</li>
		</ul>
		<h3 id="APIChanges4">API Changes</h3>
		<p>Sirius 1.0.0M4 includes a lots of API-breaking changes, as part of a global effort to improve the quality of the Sirius internals. In this milestone in particular, most of the APIs which were marked as deprecated in previous versions of Sirius (and before that of Viewpoint) have been either removed (if a replacement exists) or marked as non-deprecated (if no replacement exists yet).</p>
		<h4 id="Changesinorg.eclipse.sirius.common">Changes in  
			<code>org.eclipse.sirius.common</code>
		</h4>
		<ul>
			<li>Two deprecated constructors have been removed in 
				<code>FeatureEditorDialog</code>. Use the remaining constructor instead, which provides proper behaviour for both unique and non-unique features.
			</li>
			<li>The deprecated method 
				<code>IEditingDomainFactory.createEditingDomain()</code> has been removed. Use the (inherited) 
				<code>createEditingDomain(ResourceSet)</code> instead, which ensures correct behavior for all kinds of models (Xtext for example).
			</li>
			<li>The deprecated field 
				<code>org.eclipse.sirius.common.tools.api.listener.Notification.FOLD</code> has been removed. It was never used by Sirius itself, so if your code tried to listen to this kind of notification it was never actually called and can be safely removed.
			</li>
			<li>The deprecated methods 
				<code>getExtensionPlugins()</code> and 
				<code>getElementsProvidedByPlugin</code> from 
				<code>EcliseUtil</code> have been removed. If you need this kind of functionality, use the Eclipse APIs directly instead.
			</li>
			<li>The deprecated fields 
				<code>COLUMN_SEMANTIC</code> and 
				<code>LINE_SEMANTIC</code> of 
				<code>IInterpreterSiriusVariables</code> have been removed. Use the constants of 
				<code>org.eclipse.sirius.table.tools.api.interpreter.IInterpreterSiriusTableVariables</code> instead. 
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius4">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li>The deprecated method 
				<code>DialectServices.initRepresentations(Viewpoint, EObject)</code> has been removed. Use the version which takes an additional 
				<code>IProgressMonitor</code> instead. 
			</li>
			<li>The deprecated constructor in 
				<code>CreateRepresentationCommand</code> has been removed. Use the alternative constructor which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The two deprecated constructors in 
				<code>RefreshRepresentationCommand</code> have been removed. Use the alternative constructors which take an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The deprecated method 
				<code>DisplayService.computeVisibility(Session, DDiagram, DDiagramElement)</code> has been removed. Use the variant 
				<code>computeVisibility()</code> which takes a 
				<code>DiagramMappingsManager</code> instead of a 
				<code>Session</code>.
			</li>
			<li>The following deprecated methods in 
				<code>FilterService</code> have been removed:
				<ul>
					<li>
						<code>activateCache()</code>: use 
						<code>DisplayService.activateCache()</code> instead.
					</li>
					<li>
						<code>deactivateCache()</code>: use 
						<code>DisplayService.deactivateCache()</code> instead.
					</li>
					<li>
						<code>activate()</code>: use 
						<code>DisplayService.activate()</code> instead.
					</li>
					<li>
						<code>deactivate()</code>: use 
						<code>DisplayService.deactivate()</code> instead.
					</li>
					<li>
						<code>isActivated()</code>: use 
						<code>DisplayServiceManager.INSTANCE.getMode() == DisplayMode.NORMAL</code> instead.
					</li>
					<li>
						<code>isCollapse()</code>: use 
						<code>isCollapsed()</code> instead.
					</li>
					<li>
						<code>isVisibleForFilters()</code>: use 
						<code>getAppliedFilters()</code> instead.
					</li>
					<li>
						<code>isVisible()</code>: use 
						<code>DisplayService.isDisplayed()</code> instead.
					</li>
					<li>
						<code>isFiltered()</code>, 
						<code>isNotFiltered()</code>, 
						<code>isVisibleForActivatedFilters(), @checkFilters()</code>: use 
						<code>getAppliedFilters()</code> and 
						<code>DDiagram.getActivatedFilters()</code> instead.
					</li>
				</ul>
			</li>
			<li>The deprecated methods 
				<code>isDirectlyHidden()</code> and 
				<code>isIndirectlyHidden()</code> in 
				<code>HideFilterHelper</code> have been removed. Use the corresponding methods in 
				<code>DDiagramElementQuery</code> instead.
			</li>
			<li>The deprecated method 
				<code>SavingPolicy.save(Iterable, Map)</code> has been removed. Use the variant which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The deprecated constructor 
				<code>AbstractCommandFactory(TransactionalEditingDomain, ModelAccessor)</code> has been removed. Use the variant without the 
				<code>ModelAccessor</code> argument instead.
			</li>
			<li>The deprecated constructor 
				<code>CommandContext(EObject)</code> has been removed. Use the variant which takes an additional 
				<code>DRepresentation</code> instead.
			</li>
			<li>The deprecated methods 
				<code>activate(TransactionalEditingDomain)</code> and 
				<code>deactivate(TransactionalEditingDomain)</code> in 
				<code>IChangeListener</code> have been removed. Use the variants with no argument instead.
			</li>
			<li>The deprecated constructor 
				<code>AddSemanticResourceCommand(Session, URI)</code> has been removed. Use the variant which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The deprecated constructors of 
				<code>RemoveSemanticResourceCommand</code> have been removed. Use the variants which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The deprecated constructor in 
				<code>CreateDiagramWithInitialOperation</code> has been removed. Use the variant which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The deprecated method 
				<code>SessionManager.addResource(Session, Resource)</code> has been removed. Use the 
				<code>Session.addSemanticResource(URI, IProgressMonitor)</code> instead. In code, 
				<code>mySessionManager.addResource(mySession, myResource)</code> should be replaced by 
				<code>mySession.addSemanticResource(myResource.getURI(), new NullProgressMonitor())</code>. Notice that this replacement has not the exact same behavior. The notifications 
				<code>SessionListener.ABOUT_TO_BE_REPLACED</code> and 
				<code>SessionListener.REPLACED</code> are not thrown with 
				<code>addSemanticResource</code> contrary to 
				<code>addResource</code>. But this kind of notifications is more for reloading of resource.
			</li>
			<li>The deprecated constructor of 
				<code>DefaultLocalSessionCreationOperation</code> have been removed. Use the variant which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The deprecated method 
				<code>SessionManager.getSession(URI)</code> has been removed. Use the variant which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The deprecated method 
				<code>SessionFactory.createSession(URI)</code> has been removed. Use the variant which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>Deprecated class 
				<code>RefreshRepresentationCommand</code> has been removed. Use the class 
				<code>RefreshRepresentationsCommand</code> instead.
			</li>
			<li>Deprecated classes 
				<code>RevealSiriusElement</code> and  
				<code>RevealDDiagramElement</code> have been removed. Use the class 
				<code>RevealDDiagramElements</code> instead.
			</li>
			<li>The deprecated method 
				<code>DAnalysisSession.save(Map&lt;?, ?&gt;)</code> has been removed. Use the variant which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The deprecated method 
				<code>MappingTableEntry.getImporter()</code> has been updated. It now returns an optional (
				<code>org.eclipse.sirius.common.tools.api.util.Option</code>) of 
				<code>MappingTableEntry</code>.
			</li>
			<li>The deprecated class 
				<code>IEMFCommandFactory</code> has been removed. It is not used in Sirius code anymore.
			</li>
			<li>The deprecated method 
				<code>IDiagramCommandFactory.buildCreateDiagramFromDescription(DiagramDescription, EObject)</code> has been removed. Use the variant which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The deprecated methods 
				<code>dispose()</code> and 
				<code>disposeInterpreterRegistry(EObject)</code> have been removed from 
				<code>InterpreterRegistry</code>. They corresponded to dead code.
			</li>
			<li>The deprecated method 
				<code>InterpreterRegistry.prepareImportsFromModelElement(IInterpreter, EObject)</code> has been removed. Use 
				<code>InterpreterRegistry.prepareImportsFromSession(IInterpreter, Session)</code> instead. To get 
				<code>Session</code> from 
				<code>EObject</code>, you can use 
				<code>SessionManager.INSTANCE.getSession(EObject)</code>.
			</li>
			<li>The deprecated method 
				<code>SiriusHelper.createDAnalysis()</code> has been removed. Use 
				<code>ViewpointFactory.eINSTANCE.createDAnalysis()</code> instead.
			</li>
			<li>The deprecated method 
				<code>SessionFactory.createSession(DAnalysis)</code> has been removed. It is not intended to be used, but it can be replaced by 
				<code>SessionFactory.INSTANCE.createSession(analysis.eResource().getURI(), new NullProgressMonitor())</code>.
			</li>
			<li>The method 
				<code>buildDoExecuteDetailsOperation(DSemanticDecorator, RepresentationCreationDescription, String) has been pull up from @ITableCommandFactory</code>, 
				<code>ITreeCommandFactory</code> and 
				<code>IDiagramCommandFactory</code> to 
				<code>ICommandFactory</code>.
			</li>
			<li>The method 
				<code>getUserInterfaceCallBack()</code> has been pull up from 
				<code>ITableCommandFactory</code> and 
				<code>ITreeCommandFactory</code> to 
				<code>ICommandFactory</code>. And 
				<code>AbstractCommandFactory</code> now implements this method.
			</li>
			<li>The unused reference 
				<code>allActivatedEdgeMappings</code> from 
				<code>Layer</code> and 
				<code>DiagramDescription</code> has been removed from the viewpoint.ecore meta-model. This reference always returns empty list.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in  
			<code>org.eclipse.sirius.diagram</code>
		</h4>
		<ul>
			<li>The deprecated methods 
				<code>IDiagramEdgeEditPart.refreshPath()</code> and 
				<code>AbstractDiagramEdgeEditPart.refreshPath()</code> have been removed. It is not called in Sirius code anymore
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ecore.extender">Changes in  
			<code>org.eclipse.sirius.ecore.extender</code>
		</h4>
		<ul>
			<li>The deprecated methods 
				<code>IMetamodelExtender.eDelete(EObject)</code>, 
				<code>CompositeMetamodelExtender.eDelete(EObject)</code> and 
				<code>ModelAccessor.eDelete(EObject)</code> have been removed. Use the variants which takes an additional 
				<code>ECrossReferenceAdapter</code> instead. This 
				<code>ECrossReferenceAdapter</code> can be null.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ui4">Changes in  
			<code>org.eclipse.sirius.ui</code>
		</h4>
		<ul>
			<li>All deprecated methods in 
				<code>ModelingProjectManager</code> have been removed. Use the corresponding versions which take an additional 
				<code>IProgressMonitor</code> parameter instead.
			</li>
			<li>All deprecated methods in 
				<code>ViewpointSelection</code> have been removed. Use the corresponding versions which take an additional 
				<code>IProgressMonitor</code> parameter instead.
			</li>
			<li>Deprecated class 
				<code>org.eclipse.sirius.ui.business.api.control.SiriusControlCommand</code> has been removed. Use the class 
				<code>org.eclipse.sirius.business.api.control.SiriusControlCommand</code> instead (same constructor but with an additional 
				<code>IProgressMonitor</code> parameter).
				<ul>
					<li>Ditto for 
						<code>SiriusUnControlCommand</code>
					</li>
				</ul>
			</li>
			<li>The deprecated method 
				<code>DialectUIServices.openEditor(Session, DRepresentation)</code> has been removed. Use the variant which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The deprecated method 
				<code>SessionHelper.openStartupRepresentations(Session)</code> has been removed. Use the variant which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The deprecated method 
				<code>SiriusControlHandler.performControl(Shell, EObject)</code> has been removed. Use the variant which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>The deprecated method 
				<code>SiriusUncontrolHandler.performUncontrol(Shell, EObject)</code> has been removed. Use the variant which takes an additional 
				<code>IProgressMonitor</code> instead.
			</li>
			<li>New class 
				<code>AbstractCreateRepresentationFromRepresentationCreationDescription</code>: Generalization of all 
				<code>CreateRepresentationFromRepresentationCreationDescription</code> classes (iof plug-ins sirius.diagram, sirius.table.ui, sirius.tree.ui).
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.table3">Changes in 
			<code>org.eclipse.sirius.table</code>
		</h4>
		<ul>
			<li>The deprecated method 
				<code>TableHelper.getCell(DLine, String)</code> has been removed. Use the variant which take a DLine and a DColumn as parameters.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.tree2">Changes in 
			<code>org.eclipse.sirius.tree</code>
		</h4>
		<ul>
			<li>The deprecated method 
				<code>DTreeUserInteraction.refreshContent()</code> has been removed. Use the variant which take an additional 
				<code>IProgressMonitor</code> parameter instead.
			</li>
		</ul>
		<h2 id="sirius0.9">Changes in Sirius 0.9.0</h2>
		<p>Version 0.9.0 is the first release under the Sirius name and under the Eclipse Foundation umbrella. Except for the few cases mentioned below (in the &#171;Other API Changes&#187;, &#171;Specifier-Visible Changes&#187; and &#171;User-Visible Changes&#187; sections), Sirius 0.9.0 is functionally equivalent to the latest version of Viewpoint (version 6.10), which was the name of the project before it was open sourced at Eclipse. See the rest of the documentation for the complete list of feature of the Sirius platform.</p>
		<h3 id="MigratingfromObeoDesignerorViewpointtoSirius">Migrating from Obeo Designer or Viewpoint to Sirius</h3>
		<p>If you have existing projects which used this technology before it became Eclipse Sirius and want to migrate to Sirius, you must:</p>
		<ol>
			<li>first migrate your projects and models to the latest pre-Sirius version of Viewpoint or Obeo Designer available to you (Viewpoint is the previous name of Sirius);</li>
			<li>then migrate those to Sirius 0.9.</li>
		</ol>
		<p>The latest version of Viewpoint which was available in an Obeo Designer release is Viewpoint 6.8, released in Obeo Designer 6.2. Sirius 0.9 is based on Viewpoint 6.10, which was not released publicly.</p>
		<p>If you were using Obeo Designer, you must thus first migrate your projects and models to Obeo Designer 6.2, and then consult the 
			<a href="release_notes_vp.html">release notes for Viewpoint 6.9 and 6.10</a>, which lists the API changes from Viewpoint 6.8 to 6.10.
		</p>
		<p>Once your projects are compatible with the latest Viewpoint available to you, you can migrate to Sirius, first by updating your Viewpoint Specification Projects and plug-ins which use the Viewpoint APIs, then by updating any Modeling Project and representation files (
			<code>*.aird</code>). 
		</p>
		<h4 id="MigratingViewpointSpecificationProjects">Migrating Viewpoint Specification Projects</h4>
		<ul>
			<li>Any plug-in dependencies towards Viewpoint plug-ins must be updated to the corresponding Sirius plug-in and version number. See the  correspondence table below for the plug-in names to use.</li>
			<li>If your plug-ins used any of the extension points defined in Viewpoint, you will need to update your 
				<code>plugin.xml</code> files to reference the correct extension points identifiers. In particular, all Viewpoint Specification Projects created using Viewpoint use the 
				<code>fr.obeo.dsl.viewpoint.componentization</code> in their 
				<code>plugin.xml</code> to register the VSMs they define. This should be changed to use the equivalent 
				<code>org.eclipse.sirius.componentization</code> extension point id. The identifier changes for the other extension points follow the same rules as the name changes of the plug-ins they are defined in.
			</li>
			<li>The migration of your VSMs (
				<code>*.odesign</code> files) is automatic: simply open your files once in the VSM editor, perform some no-op change to make the editor &#171;dirty&#187; and save it. The saved version will have been migrated to Sirius.
			</li>
			<li>If you had Java code which used the Viewpoint APIs, you will need to update it to use the Sirius APIs. A simple &#171;Source &gt; Organize Imports&#187; on your source folders should find most classes you used in their new namespace. The Viewpoint code base and APIs used the term &#171;Viewpoint&#187; both for the name of the product and for the name of the concept. When it refered to the name of the product, the names were changed to use &#171;Sirius&#187; instead, so you may need to adjust some names in your code beyond just updating the imports (for example, 
				<code>ViewpointControlCommand</code> is now 
				<code>SiriusControlCommand</code>).
			</li>
		</ul>
		<p>Note that if you used Obeo Designer, you may have used the legacy Acceleo 2.x language for the computed expressions inside the 
			<code>*.odesign</code> files (if your expressions are of the form 
			<code>&lt;%something%&gt;</code> then you used the legacy language). That language is not supported anymore in Sirius 0.9, so you must migrate your expressions to use Acceleo 3 and/or the specialized interpreters (
			<code>var:</code>, 
			<code>feature:</code> and 
			<code>service:</code>, see the documentation). 
		</p>
		<h4 id="MigratingModelingProjectsandRepresentationFiles">Migrating Modeling Projects and Representation Files</h4>
		<ul>
			<li>First migrate any modeler definitions used by your modeling projects and representation files (see the section above).</li>
			<li>Modeling projects created using Viewpoint will not be recognized directly by Sirius, because the nature identfier has changed. You must use the &#171;Configure/Convert to Modeling Project&#187; action in the project&#8217;s context menu to make it a Sirius-compatible modeling project (see the section below for the technical details of the change).</li>
			<li>The migration of you representation files (
				<code>*.aird</code>) is performed automatically when they are loaded in memory. It will become permanent the first time you save it (you can force this by opening a representation, making some arbitrary change and saving the session).
			</li>
		</ul>
		<h3 id="Pluginsversionnumbers.">Plug-ins version numbers.</h3>
		<p>As of Sirius 0.9, and probably at least until Sirius 1.0 when the APIs will be more stable, all the bundles share the same version, which is also the version for the feature. If you used versioned dependencies to the old Viewpoint code (e.g. dependencies towards Viewpoint 6.8), you need to adjust the versions in your 
			<code>MANIFEST.MF</code>  files in addition to the namespaces.
		</p>
		<h3 id="Majornamespacechanges">Major namespace changes</h3>
		<p>In the context of the move as an official Eclipse project named Sirius, all the namespaces used in the code have changed.</p>
		<h4 id="Pluginandfeaturesidentifiers">Plug-in and features identifiers</h4>
		<p>All identifiers have changed to start with the 
			<code>org.eclipse.sirius</code> namespace prefix. The tables below give the mapping between the Viewpoint plug-in and features identifiers and their Sirius equivalent.
		</p>
		<table>
			<tr>
				<th>Viewpoint 6.x plug-in                     </th>
				<th>Sirius 0.9 plug-in                      </th>
			</tr>
			<tr>
				<td>fr.obeo.dsl.common                          </td>
				<td>org.eclipse.sirius.common                 </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.common.acceleo.mtl              </td>
				<td>org.eclipse.sirius.common.acceleo.mtl     </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.common.acceleo.mtl.ide          </td>
				<td>org.eclipse.sirius.common.acceleo.mtl.ide </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.common.ocl                      </td>
				<td>org.eclipse.sirius.common.ocl             </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.common.ui                       </td>
				<td>org.eclipse.sirius.common.ui              </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.common.xtext                    </td>
				<td>org.eclipse.sirius.common.xtext           </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint                       </td>
				<td>org.eclipse.sirius                        </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.diagram               </td>
				<td>org.eclipse.sirius.diagram                </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.diagram.layoutdata    </td>
				<td>org.eclipse.sirius.layoutdata             </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.diagram.sequence      </td>
				<td>org.eclipse.sirius.sequence               </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.diagram.sequence.edit </td>
				<td>org.eclipse.sirius.sequence.edit          </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.diagram.sequence.ui   </td>
				<td>org.eclipse.sirius.sequence.edit.ui       </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.doc                   </td>
				<td>org.eclipse.sirius.doc                    </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.editor                </td>
				<td>org.eclipse.sirius.editor                 </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.editor.sequence       </td>
				<td>org.eclipse.sirius.editor.sequence        </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.editor.table          </td>
				<td>org.eclipse.sirius.editor.table           </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.editor.tree           </td>
				<td>org.eclipse.sirius.editor.tree            </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.eef.adapters          </td>
				<td>org.eclipse.sirius.eef.adapters           </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.interpreter           </td>
				<td>org.eclipse.sirius.interpreter            </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.table                 </td>
				<td>org.eclipse.sirius.table                  </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.table.ui              </td>
				<td>org.eclipse.sirius.table.ui               </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.tree                  </td>
				<td>org.eclipse.sirius.tree                   </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.tree.ui               </td>
				<td>org.eclipse.sirius.tree.ui                </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.ui                    </td>
				<td>org.eclipse.sirius.ui                     </td>
			</tr>
			<tr>
				<td>fr.obeo.mda.ecore.extender                  </td>
				<td>org.eclipse.sirius.ecore.extender         </td>
			</tr>
			<tr>
				<td>fr.obeo.mda.pim.ecore.design                </td>
				<td>org.eclipse.sirius.sample.ecore.design       </td>
			</tr>
			<tr>
				<td>org.eclipselab.emf.synchronizer             </td>
				<td>org.eclipse.sirius.synchronizer           </td>
			</tr>
		</table>
		<table>
			<tr>
				<th>Viewpoint 6.x feature                        </th>
				<th>Sirius 0.9 feature                        </th>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.runtime                  </td>
				<td>org.eclipse.sirius.runtime                  </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.runtime.acceleo          </td>
				<td>org.eclipse.sirius.runtime.acceleo          </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.runtime.ide.eef          </td>
				<td>org.eclipse.sirius.runtime.ide.eef          </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.runtime.ide.ui           </td>
				<td>org.eclipse.sirius.runtime.ide.ui           </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.runtime.ide.ui.acceleo   </td>
				<td>org.eclipse.sirius.runtime.ide.ui.acceleo   </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.runtime.ide.xtext        </td>
				<td>org.eclipse.sirius.runtime.ide.xtext        </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.runtime.ocl              </td>
				<td>org.eclipse.sirius.runtime.ocl              </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.specifier.ide.ui         </td>
				<td>org.eclipse.sirius.specifier.ide.ui         </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.specifier.ide.ui.acceleo </td>
				<td>org.eclipse.sirius.specifier.ide.ui.acceleo </td>
			</tr>
			<tr>
				<td>fr.obeo.dsl.viewpoint.doc.feature              </td>
				<td>org.eclipse.sirius.doc.feature              </td>
			</tr>
		</table>
		<h4 id="JavaPackagesandClassesNames">Java Packages and Classes Names</h4>
		<p>The Java package names have changed to start with the identifier of the plug-in they are defined in (which has changed).  A simple &#171;Source &gt; Organize Imports&#187; on your source folders should find most classes you used in their new namespace.</p>
		<p>The Viewpoint code base and APIs used the term &#171;Viewpoint&#187; both for the name of the product and for the name of the concept. When it refered to the name of the product, the names where changed to use &#171;Sirius&#187; instead (for example, 
			<code>ViewpointControlCommand</code> is now 
			<code>SiriusControlCommand</code>).
		</p>
		<h4 id="ModelsnamespaceURIs">Models namespace URIs</h4>
		<p>All namespace URIs have also been changed from &#171;http://www.obeo.fr/dsl/viewpoint*&#187; to &#171;http://www.eclipse.org/sirius/&#187;.</p>
		<p>If you have created VSM file (.odesign) or representations file (.aird) with Viewpoint, the changes of the namespace URIs will be automatically migrated during the loading of your VSM or your representations file. These new nsURIs will be stored physically in the file during the first save. If the file is not saved, the automatic migration will be replayed at the next opening.</p>
		<h3 id="NatureID">Nature ID </h3>
		<p>The modeling project has a specific nature (
			<code>org.eclipse.sirius.nature.modelingproject</code>). 
			<br/>If you have modeling project created with Viewpoint, you must launch the action &#171;Configure/Convert to Modeling Project&#187; to replace old nature id (
			<code>fr.obeo.dsl.viewpoint.nature.modelingproject</code>) by the new one.
			<br/>If you have many modeling projects to &#171;migrate&#187;, you can easily make a script to replace 
			<code>fr.obeo.dsl.viewpoint.nature.modelingproject</code> by 
			<code>org.eclipse.sirius.nature.modelingproject</code> in all 
			<code>.project</code> file of each modeling projects.
		</p>
		<h3 id="OtherAPIChanges">Other API Changes</h3>
		<p>This section only lists API changes in Sirius 0.9.0 compared to the latest version of Viewpoint it is based on, i.e. Viewpoint 6.10.</p>
		<h4 id="APIAdded">API Added</h4>
		<ul>
			<li>Add 
				<code>IMigrationParticipant.getPackage()</code> to return the EPackage to use for the given namespace. This change concerns our internal migration framework. This is useful to handle our namespace changes (from Viewpoint to Sirius).
			</li>
		</ul>
		<h4 id="APIRemoval">API Removal</h4>
		<ul>
			<li>Removed 
				<code>org.eclipse.sirius.common.tools.api.interpreter.IAcceleoInterpreterVariables</code>: This interface only defined a single constant, which refered to the syntax of an obsolete version of the Acceleo language.
			</li>
			<li>Removed 
				<code>org.eclipse.sirius.common.tools.api.resource.IFileContributorExtension</code>: This interface only defined a few constants relative to an extension point which does not exist anymore.
			</li>
			<li>Removed the 
				<code>org.eclipse.sirius.reconciler</code> extension point definition (which used to be defined in the 
				<code>org.eclipse.sirius</code> plug-in): This extension point is not supported anymore (and has not been for a long time).
			</li>
			<li>Removed all the deprecated methods from 
				<code>Session</code> and replaced the internal calls with the equivalent versions with 
				<code>IProgressMonitors</code>. The removed methods are:
			</li>
		</ul>
		<pre>void open();
void addSemanticResource(Resource newResource, boolean addCrossReferencedResources);
void addSemanticResource(URI semanticModelURI, boolean addCrossReferencedResources);
void addSemanticResource(URI semanticModelURI, boolean addCrossReferencedResources, IProgressMonitor monitor);
void removeSemanticResource(Resource resource, boolean removeCrossReferencedResources);
void removeSemanticResource(Resource semanticResource);
void save();
void close();
Collection&lt;Viewpoint&gt; getSelectedViewpoints();
void createView(Viewpoint viewpoint, Collection&lt;EObject&gt; semantics);
void createView(Viewpoint viewpoint, Collection&lt;EObject&gt; semantics, boolean createNewRepresentations);
void addSelectedView(DView view) throws IllegalArgumentException;
void removeSelectedView(DView view);

</pre>
		<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
		<p>New variables are available for 
			<code>sizeComputationExpression</code> to compute the size of edges on 
			<code>EdgeStyleDescription</code> and 
			<code>BracketEdgeStyleDescription</code>:
		</p>
		<ul>
			<li>
				<em>diagram</em>: the current 
				<code>DDiagram</code>
			</li>
			<li>
				<em>view</em>: the current 
				<code>DEdge</code>
			</li>
			<li>
				<em>sourceView</em>: the source view of the current edge.
			</li>
			<li>
				<em>targetView</em>: the target view of the current edge.
			</li>
		</ul>
		<h3 id="UserVisibleChanges3">User-Visible Changes</h3>
		<ul>
			<li>The ability to print table representations has been disabled for the 0.9 release due to an external dependency issue (see 
				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=422223">bug #422223</a> for the details). It should be re-introduced in 1.0.
			</li>
		</ul>
	</body>
</html>