<?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_Previous</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="ReleaseNotesforOlderVersionofSirius">Release Notes for Older Version of Sirius</h1>
		<ol class="toc" style="list-style: disc;">
			<li>
				<a href="#ReleaseNotesforOlderVersionofSirius">Release Notes for Older Version of Sirius</a>
				<ol style="list-style: disc;">
					<li>
						<a href="#sirius1.0.0">Changes in Sirius 1.0.0 (from Sirius 1.0.0M7)</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="#APIChanges">API Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius1.0M7">Changes in Sirius 1.0.0M7 (from Sirius 1.0M6)</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#SpecifierVisibleChanges2">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#APIChanges2">API Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius1.0M6">Changes in Sirius 1.0.0M6 (from Sirius 1.0M5)</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#APIChanges3">API Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius1.0M5">Changes in Sirius 1.0.0M5 (from Sirius 1.0M4)</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges2">User-Visible Changes</a>
							</li>
							<li>
								<a href="#APIChanges4">API Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius1.0M4">Changes in Sirius 1.0.0M4 (from Sirius 0.9)</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#UserVisibleChanges3">User-Visible Changes</a>
							</li>
							<li>
								<a href="#APIChanges5">API Changes</a>
							</li>
						</ol>
					</li>
					<li>
						<a href="#sirius0.9">Changes in Sirius 0.9.0</a>
						<ol style="list-style: disc;">
							<li>
								<a href="#MigratingfromObeoDesignerorViewpointtoSirius">Migrating from Obeo Designer or Viewpoint to Sirius</a>
							</li>
							<li>
								<a href="#Pluginsversionnumbers.">Plug-ins version numbers.</a>
							</li>
							<li>
								<a href="#Majornamespacechanges">Major namespace changes</a>
							</li>
							<li>
								<a href="#NatureID">Nature ID</a>
							</li>
							<li>
								<a href="#OtherAPIChanges">Other API Changes</a>
							</li>
							<li>
								<a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
							</li>
							<li>
								<a href="#UserVisibleChanges4">User-Visible Changes</a>
							</li>
						</ol>
					</li>
				</ol>
			</li>
		</ol>
		<p>This document contains the release notes for older versions of of Sirius.</p>
		<h2 id="sirius1.0.0">Changes in Sirius 1.0.0 (from Sirius 1.0.0M7)</h2>
		<h3 id="UserVisibleChanges">User-Visible Changes</h3>
		<ul>
			<li>The ability to print table representations has been disabled for the 1.0.0 release due to an external dependency issue (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=435204" target="_blank">bug #435204</a> for the details).</li>
		</ul>
		<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
		<ul>
			<li>
				<em>Node</em>, 
				<em>Container</em> and 
				<em>Edge</em> mappings can not be created as direct children of a 
				<em>Diagram Description</em> anymore, the first level mappings must be created as direct children of a 
				<em>Layer</em>.
			</li>
			<li>Mapping (resp. tools) can not be added as reused mapping (resp. tools) of a 
				<em>Diagram Description</em>, they must be added to the reused mappings (resp. tools) of a 
				<em>Layer</em>. The corresponding property sections will be shown only for old VSM with reused elements.
			</li>
		</ul>
		<h3 id="APIChanges">API Changes</h3>
		<h4 id="Changesinorg.eclipse.sirius">Changes in 
			<code>org.eclipse.sirius</code>
		</h4>
		<ul>
			<li>In package 
				<code>org.eclipse.sirius.business.api.control</code>,  the constructors of 
				<code>SiriusControlCommand</code> and 
				<code>SiriusUncontrolCommand</code> which assume implicitly that the session should be saved as part of the command are now deprecated. Use the alternative constructors (a new one has been added to 
				<code>SiriusUncontrolCommand</code>) to say explicitly if the command should save the session. Most code should do the save themselves outside of the command, and thus pass 
				<code>false</code>  to the 
				<code>shouldEndBySaving</code> argument of these constructors.
			</li>
			<li>In package 
				<code>org.eclipse.sirius.business.api.session</code>, class 
				<code>SavingPolicyImpl</code> (the default session saving policy) now inherits from the new 
				<code>AbstractSavingPolicy</code> class. The new abstract class can be used as a base to implement different policies by simply overriding the 
				<code>computeResourcesToSave()</code> method.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in 
			<code>org.eclipse.sirius.diagram.ui</code>
		</h4>
		<ul>
			<li>To enable the resize of border nodes whose parent is a list, the 
				<code>createLayoutEditPolicy</code> and 
				<code>getResizeBorderItemCommand</code> methods have been extracted from  
				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramContainerPart</code> and placed into 
				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart</code>. The 
				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramListEditPart.createLayoutEditPolicy</code> implementation has been removed.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in 
			<code>org.eclipse.sirius.diagram.ui</code>
		</h4>
		<ul>
			<li>
				<code>org.eclipse.sirius.editor.tools.api.menu.AbstractMenuBuilder.getLabel()</code> visibility has been changed from protected to public.
			</li>
			<li>
				<code>org.eclipse.sirius.editor.tools.api.menu.CompositeMenuBuilder</code> has been introduced to avoid duplicated menu. A 
				<code>CompositeMenuBuilder</code> is created to encapsulate 
				<code>AbstractMenuBuilder</code> with the same label.
			</li>
		</ul>
		<h2 id="sirius1.0M7">Changes in Sirius 1.0.0M7 (from Sirius 1.0M6)</h2>
		<h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
		<ul>
			<li>The default value of the 
				<em>Semantic Candidates Expression</em> for Tree Items has changed from an empty string (meaning &#171;any compatible element in the session&#187;) to 
				<code>feature:eAllContents</code> which only looks for compatible candidates inside the current element (recursively). The new behavior is more efficient on large models and consistent with what happens for diagrams. The change does not affect existing VSMs which continue to work as before whatever was the expression they used. Users who want the old behavior on specific mappings can simply remove the expression in the properties view.
			</li>
			<li>In the 
				<em>Time Profiler</em> view, the 
				<em>Time (hh:mm:ss,ms)</em> has been removed. It was redundant with the existing 
				<em>Time (ms)</em> column, harder to read/sort, and showed wrongly formatted results.
			</li>
		</ul>
		<h3 id="APIChanges2">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" target="_blank">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>
			<li>Ids
				<ul>
					<li>The Sirius diagram editor id is now 
						<code>org.eclipse.sirius.diagram.ui.part.SiriusDiagramEditorID</code>
					</li>
					<li>Its property contributor is now 
						<code>org.eclipse.sirius.diagram.ui</code>. This id has to be changed in plugins providing additional property sections to the Sirius diagram editor (created with EEF for example).
					</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.common">Changes in 
			<code>org.eclipse.sirius.common</code>
		</h4>
		<ul>
			<li>In class 
				<code>org.eclipse.sirius.common.tools.api.util.EclipseUtil</code>, the method 
				<code>getExtensionPlugins(Class&lt;T&gt;, String, String, String, Predicate&lt;String&gt;)</code> has been removed from API to avoid exposing a Guava-specific 
				<code>Predicate</code>. Instead, use the new method 
				<code>getExtensionPluginsByKey()</code> which returns all the extensions organized by the specified key, and filter the result according to whatever critera the 
				<code>Predicate</code> tested on the key.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius2">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>
			<li>The method 
				<code>org.eclipse.sirius.business.api.query.EObjectQuery.getInverseReferences(Predicate&lt;Setting&gt;)</code> has been removed from API to avoid exposing a the Guava-specific 
				<code>Predicate</code> type.
			</li>
			<li>In class 
				<code>org.eclipse.sirius.business.api.dialect.description.AbstractInterpretedExpressionQuery</code>, the protected methods 
				<code>appendAllLocalVariableDefinitions()</code> and 
				<code>appendEditMaskVariables()</code> now take a 
				<code>Map&lt;String, Collection&lt;String&gt;&gt;</code> instead of a Guava-specific 
				<code>Multimap</code>. The new protected method 
				<code>addDefinition()</code> can be used to make it easier to add entries to the map. Subclasses in Sirius have been updated to match the new signature.
			</li>
			<li>The message 
				<code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.ZERO_REPRESENTATIONS_FILE_FOUND_IN</code> has been removed without replacement. It was not really an API constant.
			</li>
			<li>The behavior of method 
				<code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.getMainRepresentationsFileURI()</code> has changed. It now marks this project as invalid and adds a marker on it, if it is considered as invalid (no or many representations files).
			</li>
			<li>A new query 
				<code>org.eclipse.sirius.business.api.query.IFileQuery</code> has been added with a method to check if file is handled by an opened session, ie:
				<ul>
					<li>a semantic resource of this session,</li>
					<li>a referenced sub representations file,</li>
					<li>a controlled resource.</li>
				</ul>
			</li>
			<li>The 
				<code>EObjectLink</code> class has been removed from the metamodel. It was not used anywhere.
			</li>
			<li>In interface 
				<code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionTargetSwitch</code>, the 
				<code>getFirstRelevantContainerFinder()</code> method which returned a Guava 
				<code>Function&lt;EObject, EObject&gt;</code> has been replaced with the new method 
				<code>getFirstRelevantContainer(EObject)</code> which directly returns the result of applying the previously returned function. All implementers in Sirius itself have been updated.
			</li>
			<li>The constructor 
				<code>org.eclipse.sirius.business.api.dialect.description.DefaultInterpretedExpressionTargetSwitch(EStructuralFeature, IInterpretedExpressionTargetSwitch, Function&lt;EObject, EObject&gt;)</code> has been removed to avoid exposing a the Guava-specific 
				<code>Predicate</code> type. Sub-classes which used it with a non-null 
				<code>Function</code> should override the 
				<code>getFirstRelevantContainer(EObject)</code> method to return the result of that function instead.
			</li>
			<li>The 
				<code>org.eclipse.sirius.business.api.helper.task.AbstractDeleteDRepresentationElementTask</code> constructor which took a Guava 
				<code>Predicate&lt;EReference&gt;</code> now takes an equivalent 
				<code>EReferencePredicate</code> (from 
				<code>org.eclipse.sirius.ext.emf</code>).
			</li>
			<li>The constants 
				<code>DSEMANTICDECORATOR_REFERENCE_TO_IGNORE_PREDICATE</code> and 
				<code>NOTATION_VIEW_ELEMENT_REFERENCE_TO_IGNORE_PREDICATE</code> from 
				<code>org.eclipse.sirius.business.internal.session.danalysis.DanglingRefRemovalTrigger</code> are now instances of 
				<code>EReferencePredicate</code> instead of Guava&#8217;s 
				<code>Predicate&lt;EReference&gt;</code>.
			</li>
			<li>In class 
				<code>org.eclipse.sirius.business.api.session.SessionEventBroker</code>, the method 
				<code>addlLocalTrigger()</code> now takes a 
				<code>org.eclipse.emf.transaction.NotificationFilter</code> instead of a Guava-specific 
				<code>Predicate&lt;Notification&gt;</code> as first argument.
			</li>
			<li>The constant 
				<code>org.eclipse.sirius.tools.api.ui.RefreshEditorsPrecommitListener.IS_IMPACTING</code> is now a 
				<code>NotificationFilter</code> instead of a 
				<code>Predicate</code>, to match the API change in 
				<code>SessionEventBroker.addLocalTrigger()</code>.
			</li>
			<li>The 
				<code>org.eclipse.sirius.business.api.session.Session</code> interface has a new 
				<code>getSavingPolicy()</code> method which gives access to the currently configured saving policy.
			</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>
			<li>In the 
				<code>ContainerMapping</code> type, the following EOperations have been removed: 
				<code>createContainer()</code>, 
				<code>updateContainer()</code>, and 
				<code>getNodesCandidate()</code>. Although their usage is highly discouraged, if you really need to you can currently use the corresponding methods in the internal 
				<code>ContainerMappingHelper</code> instead (use 
				<code>SiriusPlugin.getDefault().getInterpreterRegistry().getInterpreter(semanticElement)</code> to obtain the 
				<code>IInterpreter</code> those methods need). As with all internal code, there is no guarantee these methods will still exist in future versions.
			</li>
			<li>The 
				<code>AbstractNodeMapping.getDNodesDone()</code> EOperation has been removed. It was not used anywhere.
			</li>
			<li>In the 
				<code>NodeMapping</code> type, the 
				<code>getBestStyle()</code> and 
				<code>createListElement()</code> EOperations have been removed. Although their usage is highly discouraged, if you really need to you can currently use the corresponding methods in the internal 
				<code>MappingHelper</code> instead (use 
				<code>SiriusPlugin.getDefault().getInterpreterRegistry().getInterpreter(semanticElement)</code> to obtain the 
				<code>IInterpreter</code> these methods need). As with all internal code, there is no guarantee these methods will still exist in future versions.
			</li>
			<li>In interface 
				<code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider</code>, the methods 
				<code>allowsPinUnpin()</code>, 
				<code>allowsHideReveal</code>, and 
				<code>allowsCopyPasteLayout()</code>  have been modified to take directly the 
				<code>DDiagramElement</code> to test (and return a 
				<code>boolean</code>) instead of returning a Guava-specific 
				<code>Predicate</code> which then had to be invoked.
			</li>
			<li>In class 
				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.PinHelper</code>, .the method 
				<code>allowsPinUnpin()</code> has been modified to take a 
				<code>DDiagramElement</code> directly and return a 
				<code>boolean</code>, instead of taking a 
				<code>DDiagram</code> and return a Guava-specific 
				<code>Predicate</code> which then had to be invoked on actual 
				<code>DDiagramElements</code>..
			</li>
			<li>The interface 
				<code>org.eclipse.sirius.diagram.ui.edit.api.part.ISiriusEditPart</code> has been added and is now part of all the type hierarchy of any EditPart provided by Sirius. This allows a simple 
				<code>instanceof ISiriusEditPart</code> to discriminate the edit part instances coming from Sirius.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.diagram.sequence">Changes in 
			<code>org.eclipse.sirius.diagram.sequence</code>
		</h4>
		<ul>
			<li>The 
				<code>org.eclipse.sirius.diagram.sequence.util.SiriusFunctions</code> class has been removed. It was not used anywhere.
			</li>
			<li>The 
				<code>org.eclipse.sirius.diagram.sequence.util.NotificationQuery</code> class has been removed. It had been exposed by mistake.
			</li>
			<li>The 
				<code>org.eclipse.sirius.diagram.sequence.business.internal.util.NotationPredicate</code> class has been removed from API, to reduce Sirius&#8217;s exposure of Guava&#8217;specific types.
			</li>
			<li>All the static methods in 
				<code>org.eclipse.sirius.diagram.sequence.util.Range</code> which returned Guava-specific types (
				<code>Function</code> or 
				<code>Ordering</code>) have been removed from API.
			</li>
			<li>
				<code>org.eclipse.sirius.diagram.sequence.template.AbstractRule</code> no longer inherits from Guava&#8217;s 
				<code>Function</code> interface, but from the news ad-hoc 
				<code>org.eclipse.sirius.diagram.sequence.template.Transformer</code> interface instead, which is functionally equivalent.
			</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>
			<li>Methods 
				<code>getMissingDependencies()</code> and 
				<code>getMissingDependenciesErrorMessage()</code> from 
				<code>org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelection</code> now use 
				<code>Map&lt;String, Collection&lt;String&gt;&gt;</code> instead of Guava&#8217;s 
				<code>Multimap</code>.
			</li>
			<li>
				<code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.initializeAfterLoad()</code> method has been removed. There is no replacement for this method documented as &#171;Not intended to be used by client&#187;.
			</li>
		</ul>
		<h4 id="Changesinorg.eclipse.sirius.ecore.extender">Changes in 
			<code>org.eclipse.sirius.ecore.extender</code>
		</h4>
		<ul>
			<li>All variants of 
				<code>eDelete()</code> methods which took a 
				<code>Predicate&lt;EReference&gt;</code> in types 
				<code>ModelAccessore</code>, 
				<code>IMetamodelExtender</code> and 
				<code>CompositeMetamodelExtender</code> now take an equivalent 
				<code>EReferencePredicate</code> (from 
				<code>org.eclipse.sirius.ext.emf</code>).
			</li>
			<li>The 
				<code>ModelUtils.resolveAll(ResourceSet set, EReferencePredicate)</code> now takes an 
				<code>EReferencePredicate</code> instead of a Guava-specific 
				<code>Predicate&lt;EReference&gt;</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>
			<li>The 
				<code>Maybe</code> and 
				<code>MaybeFactory</code> types have been removed, and all their uses in 
				<code>org.eclipse.sirius.synchronizer</code> converted to the equivalent 
				<code>Option</code> and 
				<code>Options</code> types from 
				<code>org.eclipse.sirius.ext.base</code>.
			</li>
			<li>The internal class 
				<code>MappingHiearchy.HiearchyIterator</code> has been removed from API.
			</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="APIChanges3">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.sirius3">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="UserVisibleChanges2">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="APIChanges4">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.sirius4">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>
			<li>The method 
				<code>org.eclipse.sirius.common.ui.tools.api.dialog.RenameDialog.setText()</code> has been removed. You can now directly call  
				<code>org.eclipse.sirius.common.ui.tools.api.dialog.RenameDialog.setDefaultNewName()</code> which has been added to set the default new name to display. Note that this method must be called before Dialog.create().
			</li>
			<li>The overriden method 
				<code>org.eclipse.sirius.common.ui.tools.api.dialog.RenameDialog.setTitle()</code> has been removed. Note that the inherited 
				<code>setTile()</code> method is still available but must be called before Dialog.create().
			</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="UserVisibleChanges3">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="APIChanges5">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.common2">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 behavior 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.sirius5">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.extender2">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="SpecifierVisibleChanges3">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="UserVisibleChanges4">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" target="_blank">bug #422223</a>: for the details). It should be re-introduced in 1.0.</li>
		</ul>
	</body>
</html>