[509748] Introduce SizeChange for changes of a diagram node's size

Bug: 509748
Change-Id: I805125e1108fc470d76f459c6af95af7a417faab
Signed-off-by: Philip Langer <planger@eclipsesource.com>
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/icons/full/obj16/SizeChange.gif b/plugins/org.eclipse.emf.compare.diagram.edit/icons/full/obj16/SizeChange.gif
new file mode 100644
index 0000000..f8041d2
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/icons/full/obj16/SizeChange.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/plugin.properties b/plugins/org.eclipse.emf.compare.diagram.edit/plugin.properties
index bc2b4cd..624cfdb 100644
--- a/plugins/org.eclipse.emf.compare.diagram.edit/plugin.properties
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/plugin.properties
@@ -39,3 +39,4 @@
 
 _UI_CoordinatesChange_type = Coordinates Change
 _UI_DiagramChange_type = Diagram Change
+_UI_SizeChange_type = Size Change
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/ExtensionsItemProviderAdapterFactory.java b/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/ExtensionsItemProviderAdapterFactory.java
index a328c74..35b692b 100644
--- a/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/ExtensionsItemProviderAdapterFactory.java
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/ExtensionsItemProviderAdapterFactory.java
@@ -135,6 +135,29 @@
 	}
 
 	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.emf.compare.diagram.internal.extensions.SizeChange} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SizeChangeItemProvider sizeChangeItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.emf.compare.diagram.internal.extensions.SizeChange}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Adapter createSizeChangeAdapter() {
+		if (sizeChangeItemProvider == null) {
+			sizeChangeItemProvider = new SizeChangeItemProvider(this);
+		}
+
+		return sizeChangeItemProvider;
+	}
+
+	/**
 	 * This creates an adapter for a {@link org.eclipse.emf.compare.diagram.internal.extensions.EdgeChange}.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/SizeChangeItemProvider.java b/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/SizeChangeItemProvider.java
new file mode 100644
index 0000000..f2d9d90
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/SizeChangeItemProvider.java
@@ -0,0 +1,110 @@
+/**
+ * Copyright (c) 2013 Obeo.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Obeo - initial API and implementation
+ */
+package org.eclipse.emf.compare.diagram.internal.extensions.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.compare.DifferenceKind;
+
+import org.eclipse.emf.compare.diagram.internal.extensions.SizeChange;
+
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.compare.diagram.internal.extensions.SizeChange} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class SizeChangeItemProvider extends NodeChangeItemProvider {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	public SizeChangeItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This returns SizeChange.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/SizeChange"));
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		DifferenceKind labelValue = ((SizeChange)object).getKind();
+		String label = labelValue == null ? null : labelValue.toString();
+		return label == null || label.length() == 0 ?
+			getString("_UI_SizeChange_type") :
+			getString("_UI_SizeChange_type") + " " + label;
+	}
+	
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+}
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/ExtensionsItemProviderAdapterFactorySpec.java b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/ExtensionsItemProviderAdapterFactorySpec.java
index c73c6e0..90e36c8 100644
--- a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/ExtensionsItemProviderAdapterFactorySpec.java
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/ExtensionsItemProviderAdapterFactorySpec.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013, 2015 Obeo.
+ * Copyright (c) 2013, 2016 Obeo and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     Obeo - initial API and implementation
+ *     Philip Langer - add SizeChangeItemProviderSpec
  *******************************************************************************/
 package org.eclipse.emf.compare.diagram.internal.extensions.provider.spec;
 
@@ -39,6 +40,9 @@
 	/** Item provider used for the coordinates change. */
 	CoordinatesChangeItemProviderSpec fCoordinatesChangeItemProvider;
 
+	/** Item provider used for the size change. */
+	SizeChangeItemProviderSpec fSizeChangeItemProvider;
+
 	/** Item provider used for the diagram change. */
 	DiagramChangeItemProviderSpec fDiagramChangeItemProvider;
 
@@ -124,6 +128,20 @@
 	/**
 	 * {@inheritDoc}
 	 * 
+	 * @see org.eclipse.emf.compare.diagram.internal.extensions.provider.ExtensionsItemProviderAdapterFactory#createSizeChangeAdapter()
+	 */
+	@Override
+	public Adapter createSizeChangeAdapter() {
+		if (fSizeChangeItemProvider == null) {
+			fSizeChangeItemProvider = new SizeChangeItemProviderSpec(
+					(ItemProviderAdapter)super.createSizeChangeAdapter());
+		}
+		return fSizeChangeItemProvider;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
 	 * @see org.eclipse.emf.compare.diagram.internal.extensions.provider.ExtensionsItemProviderAdapterFactory#createDiagramChangeAdapter()
 	 */
 	@Override
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/SizeChangeItemProviderSpec.java b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/SizeChangeItemProviderSpec.java
new file mode 100644
index 0000000..da96ebc
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/SizeChangeItemProviderSpec.java
@@ -0,0 +1,38 @@
+/**
+ * Copyright (c) 2016 EclipseSource Services GmbH.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Philip Langer - initial API and implementation
+ */
+package org.eclipse.emf.compare.diagram.internal.extensions.provider.spec;
+
+import org.eclipse.emf.compare.diagram.internal.extensions.DiagramDiff;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+
+/**
+ * Item provider for size changes.
+ * 
+ * @author Philip Langer <planger@eclipsesource.com>
+ */
+public class SizeChangeItemProviderSpec extends ForwardingDiagramDiffItemProvider {
+
+	/**
+	 * Constructor.
+	 * 
+	 * @param delegate
+	 *            The origin item provider adapter.
+	 */
+	public SizeChangeItemProviderSpec(ItemProviderAdapter delegate) {
+		super(delegate);
+	}
+
+	@Override
+	protected String getReferenceText(DiagramDiff diagramDiff) {
+		return "size"; //$NON-NLS-1$
+	}
+
+}
diff --git a/plugins/org.eclipse.emf.compare.diagram.ide.ui/src/org/eclipse/emf/compare/diagram/ide/ui/internal/contentmergeviewer/diagram/DiagramContentMergeViewer.java b/plugins/org.eclipse.emf.compare.diagram.ide.ui/src/org/eclipse/emf/compare/diagram/ide/ui/internal/contentmergeviewer/diagram/DiagramContentMergeViewer.java
index b16b74b..8f799ff 100644
--- a/plugins/org.eclipse.emf.compare.diagram.ide.ui/src/org/eclipse/emf/compare/diagram/ide/ui/internal/contentmergeviewer/diagram/DiagramContentMergeViewer.java
+++ b/plugins/org.eclipse.emf.compare.diagram.ide.ui/src/org/eclipse/emf/compare/diagram/ide/ui/internal/contentmergeviewer/diagram/DiagramContentMergeViewer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013, 2015 Obeo.
+ * Copyright (c) 2013, 2016 Obeo and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     Obeo - initial API and implementation
+ *     Philip Langer - adaptation for refactoring regarding SizeChange
  *******************************************************************************/
 package org.eclipse.emf.compare.diagram.ide.ui.internal.contentmergeviewer.diagram;
 
@@ -57,7 +58,6 @@
 import org.eclipse.emf.compare.diagram.internal.extensions.DiagramDiff;
 import org.eclipse.emf.compare.diagram.internal.extensions.Hide;
 import org.eclipse.emf.compare.diagram.internal.extensions.Show;
-import org.eclipse.emf.compare.diagram.internal.factories.extensions.CoordinatesChangeFactory;
 import org.eclipse.emf.compare.ide.ui.internal.configuration.EMFCompareConfiguration;
 import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.EMFCompareContentMergeViewer;
 import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.tree.TreeContentMergeViewerContentProvider;
@@ -1258,13 +1258,13 @@
 			// Look for a related change coordinates on the extremity of the edge reference.
 			Collection<Diff> diffs = Collections2.filter(
 					getCompareConfiguration().getComparison().getDifferences(referenceView),
-					CoordinatesChangeFactory.isCoordinatesChangeExtension());
+					instanceOf(CoordinatesChange.class));
 			if (diffs.isEmpty()) {
 				// Look for a related change coordinates on the matching extremity (other side) of the edge
 				// reference.
 				diffs = Collections2.filter(
 						getCompareConfiguration().getComparison().getDifferences(extremity),
-						CoordinatesChangeFactory.isCoordinatesChangeExtension());
+						instanceOf(CoordinatesChange.class));
 			}
 			return !diffs.isEmpty();
 		}
diff --git a/plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.ecore b/plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.ecore
index 654befd..c484343 100644
--- a/plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.ecore
+++ b/plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.ecore
@@ -6,6 +6,7 @@
   <eClassifiers xsi:type="ecore:EClass" name="Hide" eSuperTypes="#//DiagramDiff"/>
   <eClassifiers xsi:type="ecore:EClass" name="NodeChange" eSuperTypes="#//DiagramDiff"/>
   <eClassifiers xsi:type="ecore:EClass" name="CoordinatesChange" eSuperTypes="#//NodeChange"/>
+  <eClassifiers xsi:type="ecore:EClass" name="SizeChange" eSuperTypes="#//NodeChange"/>
   <eClassifiers xsi:type="ecore:EClass" name="EdgeChange" eSuperTypes="#//DiagramDiff"/>
   <eClassifiers xsi:type="ecore:EClass" name="DiagramDiff" abstract="true" eSuperTypes="../../org.eclipse.emf.compare/model/compare.ecore#//Diff">
     <eStructuralFeatures xsi:type="ecore:EReference" name="semanticDiff" eType="ecore:EClass ../../org.eclipse.emf.compare/model/compare.ecore#//Diff"/>
diff --git a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/ExtensionsFactory.java b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/ExtensionsFactory.java
index 61578b7..44dfd3e 100644
--- a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/ExtensionsFactory.java
+++ b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/ExtensionsFactory.java
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2013 Obeo.
+ * Copyright (c) 2013, 2016 Obeo and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     Obeo - initial API and implementation
+ *     Philip Langer - add SizeChange
  */
 package org.eclipse.emf.compare.diagram.internal.extensions;
 
@@ -66,6 +67,15 @@
 	CoordinatesChange createCoordinatesChange();
 
 	/**
+	 * Returns a new object of class '<em>Size Change</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Size Change</em>'.
+	 * @generated
+	 */
+	SizeChange createSizeChange();
+
+	/**
 	 * Returns a new object of class '<em>Edge Change</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/ExtensionsPackage.java b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/ExtensionsPackage.java
index b6f034b..ef9b918 100644
--- a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/ExtensionsPackage.java
+++ b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/ExtensionsPackage.java
@@ -72,7 +72,7 @@
 	 * @see org.eclipse.emf.compare.diagram.internal.extensions.impl.ExtensionsPackageImpl#getDiagramDiff()
 	 * @generated
 	 */
-	int DIAGRAM_DIFF = 5;
+	int DIAGRAM_DIFF = 6;
 
 	/**
 	 * The feature id for the '<em><b>Match</b></em>' container reference.
@@ -835,6 +835,160 @@
 	int COORDINATES_CHANGE_FEATURE_COUNT = NODE_CHANGE_FEATURE_COUNT + 0;
 
 	/**
+	 * The meta object id for the '{@link org.eclipse.emf.compare.diagram.internal.extensions.impl.SizeChangeImpl <em>Size Change</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.emf.compare.diagram.internal.extensions.impl.SizeChangeImpl
+	 * @see org.eclipse.emf.compare.diagram.internal.extensions.impl.ExtensionsPackageImpl#getSizeChange()
+	 * @generated
+	 */
+	int SIZE_CHANGE = 4;
+
+	/**
+	 * The feature id for the '<em><b>Match</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__MATCH = NODE_CHANGE__MATCH;
+
+	/**
+	 * The feature id for the '<em><b>Requires</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__REQUIRES = NODE_CHANGE__REQUIRES;
+
+	/**
+	 * The feature id for the '<em><b>Required By</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__REQUIRED_BY = NODE_CHANGE__REQUIRED_BY;
+
+	/**
+	 * The feature id for the '<em><b>Implies</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__IMPLIES = NODE_CHANGE__IMPLIES;
+
+	/**
+	 * The feature id for the '<em><b>Implied By</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__IMPLIED_BY = NODE_CHANGE__IMPLIED_BY;
+
+	/**
+	 * The feature id for the '<em><b>Refines</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__REFINES = NODE_CHANGE__REFINES;
+
+	/**
+	 * The feature id for the '<em><b>Refined By</b></em>' reference list.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__REFINED_BY = NODE_CHANGE__REFINED_BY;
+
+	/**
+	 * The feature id for the '<em><b>Prime Refining</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__PRIME_REFINING = NODE_CHANGE__PRIME_REFINING;
+
+	/**
+	 * The feature id for the '<em><b>Kind</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__KIND = NODE_CHANGE__KIND;
+
+	/**
+	 * The feature id for the '<em><b>Source</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__SOURCE = NODE_CHANGE__SOURCE;
+
+	/**
+	 * The feature id for the '<em><b>State</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__STATE = NODE_CHANGE__STATE;
+
+	/**
+	 * The feature id for the '<em><b>Equivalence</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__EQUIVALENCE = NODE_CHANGE__EQUIVALENCE;
+
+	/**
+	 * The feature id for the '<em><b>Conflict</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__CONFLICT = NODE_CHANGE__CONFLICT;
+
+	/**
+	 * The feature id for the '<em><b>Semantic Diff</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__SEMANTIC_DIFF = NODE_CHANGE__SEMANTIC_DIFF;
+
+	/**
+	 * The feature id for the '<em><b>View</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE__VIEW = NODE_CHANGE__VIEW;
+
+	/**
+	 * The number of structural features of the '<em>Size Change</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SIZE_CHANGE_FEATURE_COUNT = NODE_CHANGE_FEATURE_COUNT + 0;
+
+	/**
 	 * The meta object id for the '{@link org.eclipse.emf.compare.diagram.internal.extensions.impl.EdgeChangeImpl <em>Edge Change</em>}' class.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -842,7 +996,7 @@
 	 * @see org.eclipse.emf.compare.diagram.internal.extensions.impl.ExtensionsPackageImpl#getEdgeChange()
 	 * @generated
 	 */
-	int EDGE_CHANGE = 4;
+	int EDGE_CHANGE = 5;
 
 	/**
 	 * The feature id for the '<em><b>Match</b></em>' container reference.
@@ -997,7 +1151,7 @@
 	 * @see org.eclipse.emf.compare.diagram.internal.extensions.impl.ExtensionsPackageImpl#getDiagramChange()
 	 * @generated
 	 */
-	int DIAGRAM_CHANGE = 6;
+	int DIAGRAM_CHANGE = 7;
 
 	/**
 	 * The feature id for the '<em><b>Match</b></em>' container reference.
@@ -1185,6 +1339,16 @@
 	EClass getCoordinatesChange();
 
 	/**
+	 * Returns the meta object for class '{@link org.eclipse.emf.compare.diagram.internal.extensions.SizeChange <em>Size Change</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Size Change</em>'.
+	 * @see org.eclipse.emf.compare.diagram.internal.extensions.SizeChange
+	 * @generated
+	 */
+	EClass getSizeChange();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.emf.compare.diagram.internal.extensions.EdgeChange <em>Edge Change</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -1299,6 +1463,16 @@
 		EClass COORDINATES_CHANGE = eINSTANCE.getCoordinatesChange();
 
 		/**
+		 * The meta object literal for the '{@link org.eclipse.emf.compare.diagram.internal.extensions.impl.SizeChangeImpl <em>Size Change</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.emf.compare.diagram.internal.extensions.impl.SizeChangeImpl
+		 * @see org.eclipse.emf.compare.diagram.internal.extensions.impl.ExtensionsPackageImpl#getSizeChange()
+		 * @generated
+		 */
+		EClass SIZE_CHANGE = eINSTANCE.getSizeChange();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.emf.compare.diagram.internal.extensions.impl.EdgeChangeImpl <em>Edge Change</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/SizeChange.java b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/SizeChange.java
new file mode 100644
index 0000000..5461553
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/SizeChange.java
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2013 Obeo.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Obeo - initial API and implementation
+ */
+package org.eclipse.emf.compare.diagram.internal.extensions;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Size Change</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.emf.compare.diagram.internal.extensions.ExtensionsPackage#getSizeChange()
+ * @model
+ * @generated
+ */
+public interface SizeChange extends NodeChange {
+} // SizeChange
diff --git a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/ExtensionsFactoryImpl.java b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/ExtensionsFactoryImpl.java
index 9e12199..31596d3 100644
--- a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/ExtensionsFactoryImpl.java
+++ b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/ExtensionsFactoryImpl.java
@@ -35,7 +35,7 @@
 	 */
 	public static ExtensionsFactory init() {
 		try {
-			ExtensionsFactory theExtensionsFactory = (ExtensionsFactory)EPackage.Registry.INSTANCE.getEFactory("http://www.eclipse.org/emf/compare/diagram/2.0"); 
+			ExtensionsFactory theExtensionsFactory = (ExtensionsFactory)EPackage.Registry.INSTANCE.getEFactory(ExtensionsPackage.eNS_URI);
 			if (theExtensionsFactory != null) {
 				return theExtensionsFactory;
 			}
@@ -68,6 +68,7 @@
 			case ExtensionsPackage.HIDE: return createHide();
 			case ExtensionsPackage.NODE_CHANGE: return createNodeChange();
 			case ExtensionsPackage.COORDINATES_CHANGE: return createCoordinatesChange();
+			case ExtensionsPackage.SIZE_CHANGE: return createSizeChange();
 			case ExtensionsPackage.EDGE_CHANGE: return createEdgeChange();
 			case ExtensionsPackage.DIAGRAM_CHANGE: return createDiagramChange();
 			default:
@@ -120,6 +121,16 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public SizeChange createSizeChange() {
+		SizeChangeImpl sizeChange = new SizeChangeImpl();
+		return sizeChange;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EdgeChange createEdgeChange() {
 		EdgeChangeImpl edgeChange = new EdgeChangeImpl();
 		return edgeChange;
diff --git a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/ExtensionsPackageImpl.java b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/ExtensionsPackageImpl.java
index c690f43..666db8a 100644
--- a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/ExtensionsPackageImpl.java
+++ b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/ExtensionsPackageImpl.java
@@ -22,6 +22,7 @@
 import org.eclipse.emf.compare.diagram.internal.extensions.NodeChange;
 import org.eclipse.emf.compare.diagram.internal.extensions.Show;
 
+import org.eclipse.emf.compare.diagram.internal.extensions.SizeChange;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
@@ -69,6 +70,13 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	private EClass sizeChangeEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	private EClass edgeChangeEClass = null;
 
 	/**
@@ -190,6 +198,15 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	public EClass getSizeChange() {
+		return sizeChangeEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	public EClass getEdgeChange() {
 		return edgeChangeEClass;
 	}
@@ -266,6 +283,8 @@
 
 		coordinatesChangeEClass = createEClass(COORDINATES_CHANGE);
 
+		sizeChangeEClass = createEClass(SIZE_CHANGE);
+
 		edgeChangeEClass = createEClass(EDGE_CHANGE);
 
 		diagramDiffEClass = createEClass(DIAGRAM_DIFF);
@@ -311,6 +330,7 @@
 		hideEClass.getESuperTypes().add(this.getDiagramDiff());
 		nodeChangeEClass.getESuperTypes().add(this.getDiagramDiff());
 		coordinatesChangeEClass.getESuperTypes().add(this.getNodeChange());
+		sizeChangeEClass.getESuperTypes().add(this.getNodeChange());
 		edgeChangeEClass.getESuperTypes().add(this.getDiagramDiff());
 		diagramDiffEClass.getESuperTypes().add(theComparePackage.getDiff());
 		diagramChangeEClass.getESuperTypes().add(this.getDiagramDiff());
@@ -324,6 +344,8 @@
 
 		initEClass(coordinatesChangeEClass, CoordinatesChange.class, "CoordinatesChange", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
+		initEClass(sizeChangeEClass, SizeChange.class, "SizeChange", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
 		initEClass(edgeChangeEClass, EdgeChange.class, "EdgeChange", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
 		initEClass(diagramDiffEClass, DiagramDiff.class, "DiagramDiff", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
diff --git a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/SizeChangeImpl.java b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/SizeChangeImpl.java
new file mode 100644
index 0000000..e650457
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/SizeChangeImpl.java
@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2013 Obeo.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Obeo - initial API and implementation
+ */
+package org.eclipse.emf.compare.diagram.internal.extensions.impl;
+
+import org.eclipse.emf.compare.diagram.internal.extensions.ExtensionsPackage;
+import org.eclipse.emf.compare.diagram.internal.extensions.SizeChange;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Size Change</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class SizeChangeImpl extends NodeChangeImpl implements SizeChange {
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected SizeChangeImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return ExtensionsPackage.Literals.SIZE_CHANGE;
+	}
+
+} //SizeChangeImpl
diff --git a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/util/ExtensionsAdapterFactory.java b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/util/ExtensionsAdapterFactory.java
index 7abd4ac..8bc9236 100644
--- a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/util/ExtensionsAdapterFactory.java
+++ b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/util/ExtensionsAdapterFactory.java
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2013 Obeo.
+ * Copyright (c) 2013, 2016 Obeo and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     Obeo - initial API and implementation
+ *     Philip Langer - add SizeChange
  */
 package org.eclipse.emf.compare.diagram.internal.extensions.util;
 
@@ -94,6 +95,10 @@
 				return createCoordinatesChangeAdapter();
 			}
 			@Override
+			public Adapter caseSizeChange(SizeChange object) {
+				return createSizeChangeAdapter();
+			}
+			@Override
 			public Adapter caseEdgeChange(EdgeChange object) {
 				return createEdgeChangeAdapter();
 			}
@@ -186,6 +191,20 @@
 	}
 
 	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.compare.diagram.internal.extensions.SizeChange <em>Size Change</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.emf.compare.diagram.internal.extensions.SizeChange
+	 * @generated
+	 */
+	public Adapter createSizeChangeAdapter() {
+		return null;
+	}
+
+	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.emf.compare.diagram.internal.extensions.EdgeChange <em>Edge Change</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
diff --git a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/util/ExtensionsSwitch.java b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/util/ExtensionsSwitch.java
index 4bc7a72..2017bb1 100644
--- a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/util/ExtensionsSwitch.java
+++ b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/util/ExtensionsSwitch.java
@@ -57,7 +57,7 @@
 	 * Checks whether this is a switch for the given package.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @parameter ePackage the package in question.
+	 * @param ePackage the package in question.
 	 * @return whether this is a switch for the given package.
 	 * @generated
 	 */
@@ -109,6 +109,15 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case ExtensionsPackage.SIZE_CHANGE: {
+				SizeChange sizeChange = (SizeChange)theEObject;
+				T result = caseSizeChange(sizeChange);
+				if (result == null) result = caseNodeChange(sizeChange);
+				if (result == null) result = caseDiagramDiff(sizeChange);
+				if (result == null) result = caseDiff(sizeChange);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case ExtensionsPackage.EDGE_CHANGE: {
 				EdgeChange edgeChange = (EdgeChange)theEObject;
 				T result = caseEdgeChange(edgeChange);
@@ -197,6 +206,21 @@
 	}
 
 	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Size Change</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Size Change</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseSizeChange(SizeChange object) {
+		return null;
+	}
+
+	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Edge Change</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
diff --git a/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/DiagramExtensionFactoryRegistry.java b/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/DiagramExtensionFactoryRegistry.java
index e93f0ca..6f59e8e 100644
--- a/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/DiagramExtensionFactoryRegistry.java
+++ b/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/DiagramExtensionFactoryRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 Obeo.
+ * Copyright (c) 2013, 2016 Obeo and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,6 +7,7 @@
  * 
  * Contributors:
  *     Obeo - initial API and implementation
+ *     Philip Langer - add SizeChange
  *******************************************************************************/
 package org.eclipse.emf.compare.diagram.internal.factories;
 
@@ -24,6 +25,7 @@
 import org.eclipse.emf.compare.diagram.internal.factories.extensions.HideFactory;
 import org.eclipse.emf.compare.diagram.internal.factories.extensions.NodeChangeFactory;
 import org.eclipse.emf.compare.diagram.internal.factories.extensions.ShowFactory;
+import org.eclipse.emf.compare.diagram.internal.factories.extensions.SizeChangeFactory;
 import org.eclipse.emf.compare.internal.postprocessor.factories.IChangeFactory;
 
 /**
@@ -56,6 +58,7 @@
 		factories.add(new ShowFactory());
 		factories.add(new NodeChangeFactory());
 		factories.add(new CoordinatesChangeFactory(configuration));
+		factories.add(new SizeChangeFactory());
 		factories.add(new EdgeChangeFactory());
 		factories.add(new DiagramChangeFactory());
 
diff --git a/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/CoordinatesChangeFactory.java b/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/CoordinatesChangeFactory.java
index b44ca26..1e1d994 100644
--- a/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/CoordinatesChangeFactory.java
+++ b/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/CoordinatesChangeFactory.java
@@ -11,13 +11,11 @@
  *******************************************************************************/
 package org.eclipse.emf.compare.diagram.internal.factories.extensions;
 
-import static com.google.common.base.Predicates.and;
-import static com.google.common.base.Predicates.instanceOf;
+import static com.google.common.collect.Collections2.filter;
+import static org.eclipse.emf.compare.DifferenceKind.CHANGE;
 import static org.eclipse.emf.compare.utils.EMFComparePredicates.fromSide;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.ofKind;
 
 import com.google.common.base.Predicate;
-import com.google.common.collect.Collections2;
 import com.google.common.collect.Iterators;
 
 import java.util.ArrayList;
@@ -89,8 +87,8 @@
 	@Override
 	public void setRefiningChanges(Diff extension, DifferenceKind extensionKind, Diff refiningDiff) {
 		if (extensionKind == DifferenceKind.CHANGE) {
-			extension.getRefinedBy().addAll(Collections2.filter(getAllDifferencesForChange(refiningDiff),
-					fromSide(extension.getSource())));
+			extension.getRefinedBy().addAll(
+					filter(getAllDifferencesForChange(refiningDiff), fromSide(extension.getSource())));
 		}
 	}
 
@@ -102,7 +100,7 @@
 	@Override
 	protected Collection<Diff> getAllDifferencesForChange(final Diff input) {
 		final Collection<Diff> diffs = super.getAllDifferencesForChange(input);
-		return Collections2.filter(diffs, new Predicate<Diff>() {
+		return filter(diffs, new Predicate<Diff>() {
 			public boolean apply(Diff diff) {
 				return diff instanceof AttributeChange && isCoordinatesChange((AttributeChange)diff)
 						&& fromSide(input.getSource()).apply(diff);
@@ -111,23 +109,13 @@
 	}
 
 	/**
-	 * It returns the predicate to check that the given difference is a macroscopic coordinates change.
-	 * 
-	 * @return The predicate.
-	 */
-	public static Predicate<? super Diff> isCoordinatesChangeExtension() {
-		return and(instanceOf(CoordinatesChange.class), ofKind(DifferenceKind.CHANGE));
-	}
-
-	/**
 	 * {@inheritDoc}
 	 * 
 	 * @see org.eclipse.emf.compare.internal.postprocessor.factories.AbstractChangeFactory#isRelatedToAnExtensionMove(org.eclipse.emf.compare.AttributeChange)
 	 */
 	@Override
 	protected boolean isRelatedToAnExtensionChange(AttributeChange input) {
-		return isCoordinatesChange(input)
-				&& Collections2.filter(input.getRefines(), isCoordinatesChangeExtension()).isEmpty()
+		return isCoordinatesChange(input) && filter(input.getRefines(), isExtensionKind(CHANGE)).isEmpty()
 				&& isOverThreshold(input) && !isLeadedByMoveNode(input);
 	}
 
diff --git a/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/NodeChangeFactory.java b/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/NodeChangeFactory.java
index ffe98a1..6f16bbf 100644
--- a/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/NodeChangeFactory.java
+++ b/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/NodeChangeFactory.java
@@ -256,4 +256,16 @@
 				&& ReferenceUtil.safeEGet(input.getValue(), NotationPackage.Literals.VIEW__ELEMENT) != null;
 	}
 
+	/**
+	 * It returns the predicate to check that the given difference is an instance of this
+	 * {@link #getExtensionKind()} and of the specified <code>diffKind</code>.
+	 * 
+	 * @param diffKind
+	 *            The difference kind.
+	 * @return The predicate.
+	 */
+	public Predicate<? super Diff> isExtensionKind(DifferenceKind diffKind) {
+		return and(instanceOf(getExtensionKind()), ofKind(diffKind));
+	}
+
 }
diff --git a/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/SizeChangeFactory.java b/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/SizeChangeFactory.java
new file mode 100644
index 0000000..d4a2f21
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/SizeChangeFactory.java
@@ -0,0 +1,108 @@
+/*******************************************************************************
+ * Copyright (c) 2016 EclipseSource Services GmbH and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     Philip Langer - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.emf.compare.diagram.internal.factories.extensions;
+
+import static com.google.common.collect.Collections2.filter;
+import static org.eclipse.emf.compare.DifferenceKind.CHANGE;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.fromSide;
+
+import com.google.common.base.Predicate;
+
+import java.util.Collection;
+
+import org.eclipse.emf.compare.AttributeChange;
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.DifferenceKind;
+import org.eclipse.emf.compare.diagram.internal.extensions.DiagramDiff;
+import org.eclipse.emf.compare.diagram.internal.extensions.ExtensionsFactory;
+import org.eclipse.emf.compare.diagram.internal.extensions.SizeChange;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+
+/**
+ * Factory of size changes.
+ * 
+ * @author Philip Langer <planger@eclipsesource.com>
+ */
+public class SizeChangeFactory extends NodeChangeFactory {
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.compare.internal.postprocessor.factories.AbstractChangeFactory#getExtensionKind()
+	 */
+	@Override
+	public Class<? extends Diff> getExtensionKind() {
+		return SizeChange.class;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.compare.internal.postprocessor.factories.AbstractChangeFactory#createExtension()
+	 */
+	@Override
+	public DiagramDiff createExtension() {
+		return ExtensionsFactory.eINSTANCE.createSizeChange();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.compare.diagram.internal.factories.extensions.NodeChangeFactory#setRefiningChanges(org.eclipse.emf.compare.Diff,
+	 *      org.eclipse.emf.compare.DifferenceKind, org.eclipse.emf.compare.Diff)
+	 */
+	@Override
+	public void setRefiningChanges(Diff extension, DifferenceKind extensionKind, Diff refiningDiff) {
+		if (extensionKind == CHANGE) {
+			extension.getRefinedBy().addAll(
+					filter(getAllDifferencesForChange(refiningDiff), fromSide(extension.getSource())));
+		}
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.compare.diagram.internal.factories.extensions.NodeChangeFactory#getAllDifferencesForChange(org.eclipse.emf.compare.Diff)
+	 */
+	@Override
+	protected Collection<Diff> getAllDifferencesForChange(final Diff input) {
+		final Collection<Diff> diffs = super.getAllDifferencesForChange(input);
+		return filter(diffs, new Predicate<Diff>() {
+			public boolean apply(Diff diff) {
+				return diff instanceof AttributeChange && isSizeChange((AttributeChange)diff)
+						&& fromSide(input.getSource()).apply(diff);
+			}
+		});
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.emf.compare.internal.postprocessor.factories.AbstractChangeFactory#isRelatedToAnExtensionMove(org.eclipse.emf.compare.AttributeChange)
+	 */
+	@Override
+	protected boolean isRelatedToAnExtensionChange(AttributeChange input) {
+		return isSizeChange(input) && filter(input.getRefines(), isExtensionKind(CHANGE)).isEmpty();
+	}
+
+	/**
+	 * It checks that the given attribute change concerns a change of coordinates.
+	 * 
+	 * @param input
+	 *            The difference.
+	 * @return True if it is a change of coordinates.
+	 */
+	private static boolean isSizeChange(AttributeChange input) {
+		return input.getAttribute() == NotationPackage.Literals.SIZE__HEIGHT
+				|| input.getAttribute() == NotationPackage.Literals.SIZE__WIDTH;
+	}
+
+}