Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCedric Notot2013-04-02 08:04:17 +0000
committerCedric Notot2013-04-02 08:04:17 +0000
commitf17507be794ad1bcae541856edc4c2168d4189c7 (patch)
treecf32c64ad60f924732c59f18baa1ced5980bf3f5
parente44d19f5333a9fcde48fe20a739144bb158e8f7d (diff)
downloadorg.eclipse.emf.compare-cno/multiDiag.tar.gz
org.eclipse.emf.compare-cno/multiDiag.tar.xz
org.eclipse.emf.compare-cno/multiDiag.zip
GMF Engine : ResourceAttachmentChange managementcno/multiDiag
- No resource control case for GMF - Multi-diagram case -> DiagramChange ADD/DELETE
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.edit/icons/full/obj16/DiagramChange.gifbin0 -> 129 bytes
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.edit/plugin.properties1
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/DiagramChangeItemProvider.java125
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/DiagramDiffItemProvider.java75
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/ExtensionsItemProviderAdapterFactory.java24
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/DiagramChangeItemProviderSpec.java91
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/ExtensionsItemProviderAdapterFactorySpec.java17
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/ForwardingDiagramDiffItemProvider.java2
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.ide.ui/src/org/eclipse/emf/compare/diagram/ide/ui/internal/contentmergeviewer/diagram/DiagramContentMergeViewer.java219
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.ecore1
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.genmodel1
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/DiagramChange.java25
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/ExtensionsFactory.java9
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/ExtensionsPackage.java148
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/DiagramChangeImpl.java47
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/ExtensionsFactoryImpl.java11
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/ExtensionsPackageImpl.java22
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/util/ExtensionsAdapterFactory.java18
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/util/ExtensionsSwitch.java23
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/AbstractDiagramChangeFactory.java38
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/DiagramExtensionFactoryRegistry.java2
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/DiagramChangeFactory.java156
-rw-r--r--plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/NodeChangeFactory.java4
-rw-r--r--plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/provider/spec/MatchResourceItemProviderSpec.java77
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/impl/EmptyMatchedResourcesFilter.java13
-rw-r--r--plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/internal/postprocessor/factories/AbstractChangeFactory.java65
26 files changed, 1044 insertions, 170 deletions
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/icons/full/obj16/DiagramChange.gif b/plugins/org.eclipse.emf.compare.diagram.edit/icons/full/obj16/DiagramChange.gif
new file mode 100644
index 000000000..d3dc5a9ad
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/icons/full/obj16/DiagramChange.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 0d8259b3c..29db58ced 100644
--- a/plugins/org.eclipse.emf.compare.diagram.edit/plugin.properties
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/plugin.properties
@@ -38,3 +38,4 @@ _UI_DiagramDiff_view_feature = View
_UI_Unknown_feature = Unspecified
_UI_CoordinatesChange_type = Coordinates Change
+_UI_DiagramChange_type = Diagram Change
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/DiagramChangeItemProvider.java b/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/DiagramChangeItemProvider.java
new file mode 100644
index 000000000..2bd7949ee
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/DiagramChangeItemProvider.java
@@ -0,0 +1,125 @@
+/**
+ * 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.DiagramChange;
+
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemColorProvider;
+import org.eclipse.emf.edit.provider.IItemFontProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.emf.compare.diagram.internal.extensions.DiagramChange} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class DiagramChangeItemProvider
+ extends DiagramDiffItemProvider
+ implements
+ IEditingDomainItemProvider,
+ IStructuredItemContentProvider,
+ ITreeItemContentProvider,
+ IItemLabelProvider,
+ IItemPropertySource,
+ IItemColorProvider,
+ IItemFontProvider {
+ /**
+ * This constructs an instance from a factory and a notifier.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ public DiagramChangeItemProvider(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 DiagramChange.gif.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Object getImage(Object object) {
+ return overlayImage(object, getResourceLocator().getImage("full/obj16/DiagramChange"));
+ }
+
+ /**
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public String getText(Object object) {
+ DifferenceKind labelValue = ((DiagramChange)object).getKind();
+ String label = labelValue == null ? null : labelValue.toString();
+ return label == null || label.length() == 0 ?
+ getString("_UI_DiagramChange_type") :
+ getString("_UI_DiagramChange_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-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/DiagramDiffItemProvider.java b/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/DiagramDiffItemProvider.java
index dd6012c8f..9b2f10221 100644
--- a/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/DiagramDiffItemProvider.java
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/provider/DiagramDiffItemProvider.java
@@ -31,10 +31,9 @@ import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
/**
- * This is the item provider adapter for a
- * {@link org.eclipse.emf.compare.diagram.internal.extensions.DiagramDiff} object. <!-- begin-user-doc -->
+ * This is the item provider adapter for a {@link org.eclipse.emf.compare.diagram.internal.extensions.DiagramDiff} object.
+ * <!-- begin-user-doc -->
* <!-- end-user-doc -->
- *
* @generated
*/
public class DiagramDiffItemProvider extends DiffItemProvider implements IEditingDomainItemProvider, IStructuredItemContentProvider, ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource, IItemColorProvider, IItemFontProvider {
@@ -66,51 +65,67 @@ public class DiagramDiffItemProvider extends DiffItemProvider implements IEditin
}
/**
- * This adds a property descriptor for the Semantic Diff feature. <!-- begin-user-doc --> <!--
+ * This adds a property descriptor for the Semantic Diff feature.
+ * <!-- begin-user-doc --> <!--
* end-user-doc -->
- *
* @generated
*/
protected void addSemanticDiffPropertyDescriptor(Object object) {
- itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory)
- .getRootAdapterFactory(), getResourceLocator(),
- getString("_UI_DiagramDiff_semanticDiff_feature"), getString(
- "_UI_PropertyDescriptor_description", "_UI_DiagramDiff_semanticDiff_feature",
- "_UI_DiagramDiff_type"), ExtensionsPackage.Literals.DIAGRAM_DIFF__SEMANTIC_DIFF,
- true, false, true, null, null, null));
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_DiagramDiff_semanticDiff_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_DiagramDiff_semanticDiff_feature", "_UI_DiagramDiff_type"),
+ ExtensionsPackage.Literals.DIAGRAM_DIFF__SEMANTIC_DIFF,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
}
/**
- * This adds a property descriptor for the View feature. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * This adds a property descriptor for the View feature.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
protected void addViewPropertyDescriptor(Object object) {
- itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory)adapterFactory)
- .getRootAdapterFactory(), getResourceLocator(), getString("_UI_DiagramDiff_view_feature"),
- getString("_UI_PropertyDescriptor_description", "_UI_DiagramDiff_view_feature",
- "_UI_DiagramDiff_type"), ExtensionsPackage.Literals.DIAGRAM_DIFF__VIEW, true, false,
- true, null, null, null));
+ itemPropertyDescriptors.add
+ (createItemPropertyDescriptor
+ (((ComposeableAdapterFactory)adapterFactory).getRootAdapterFactory(),
+ getResourceLocator(),
+ getString("_UI_DiagramDiff_view_feature"),
+ getString("_UI_PropertyDescriptor_description", "_UI_DiagramDiff_view_feature", "_UI_DiagramDiff_type"),
+ ExtensionsPackage.Literals.DIAGRAM_DIFF__VIEW,
+ true,
+ false,
+ true,
+ null,
+ null,
+ null));
}
/**
- * This returns the label text for the adapted class. <!-- begin-user-doc --> <!-- end-user-doc -->
- *
+ * This returns the label text for the adapted class.
+ * <!-- begin-user-doc --> <!-- end-user-doc -->
* @generated
*/
@Override
public String getText(Object object) {
DifferenceKind labelValue = ((DiagramDiff)object).getKind();
String label = labelValue == null ? null : labelValue.toString();
- return label == null || label.length() == 0 ? getString("_UI_DiagramDiff_type")
- : getString("_UI_DiagramDiff_type") + " " + label;
+ return label == null || label.length() == 0 ?
+ getString("_UI_DiagramDiff_type") :
+ getString("_UI_DiagramDiff_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
+ * 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
@@ -120,9 +135,9 @@ public class DiagramDiffItemProvider extends DiffItemProvider implements IEditin
}
/**
- * 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 -->
- *
+ * 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
@@ -131,9 +146,9 @@ public class DiagramDiffItemProvider extends DiffItemProvider implements IEditin
}
/**
- * Return the resource locator for this item provider's resources. <!-- begin-user-doc --> <!--
+ * Return the resource locator for this item provider's resources.
+ * <!-- begin-user-doc --> <!--
* end-user-doc -->
- *
* @generated
*/
@Override
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 40dfd0719..f07c7dccf 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
@@ -199,6 +199,29 @@ public class ExtensionsItemProviderAdapterFactory extends ExtensionsAdapterFacto
}
/**
+ * This keeps track of the one adapter used for all {@link org.eclipse.emf.compare.diagram.internal.extensions.DiagramChange} instances.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected DiagramChangeItemProvider diagramChangeItemProvider;
+
+ /**
+ * This creates an adapter for a {@link org.eclipse.emf.compare.diagram.internal.extensions.DiagramChange}.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ public Adapter createDiagramChangeAdapter() {
+ if (diagramChangeItemProvider == null) {
+ diagramChangeItemProvider = new DiagramChangeItemProvider(this);
+ }
+
+ return diagramChangeItemProvider;
+ }
+
+ /**
* This returns the root adapter factory that contains this factory.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -302,6 +325,7 @@ public class ExtensionsItemProviderAdapterFactory extends ExtensionsAdapterFacto
if (nodeChangeItemProvider != null) nodeChangeItemProvider.dispose();
if (coordinatesChangeItemProvider != null) coordinatesChangeItemProvider.dispose();
if (edgeChangeItemProvider != null) edgeChangeItemProvider.dispose();
+ if (diagramChangeItemProvider != null) diagramChangeItemProvider.dispose();
}
}
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/DiagramChangeItemProviderSpec.java b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/DiagramChangeItemProviderSpec.java
new file mode 100644
index 000000000..69726fb6c
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/DiagramChangeItemProviderSpec.java
@@ -0,0 +1,91 @@
+/**
+ * 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.spec;
+
+import com.google.common.collect.Iterators;
+
+import java.util.Collection;
+
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.DifferenceKind;
+import org.eclipse.emf.compare.ResourceAttachmentChange;
+import org.eclipse.emf.compare.diagram.internal.extensions.DiagramChange;
+import org.eclipse.emf.compare.diagram.internal.extensions.DiagramDiff;
+import org.eclipse.emf.compare.diagram.internal.factories.extensions.DiagramChangeFactory;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+
+/**
+ * Item provider for node changes.
+ *
+ * @author <a href="mailto:cedric.notot@obeo.fr">Cedric Notot</a>
+ */
+public class DiagramChangeItemProviderSpec extends ForwardingDiagramDiffItemProvider {
+
+ /**
+ * Constructor.
+ *
+ * @param delegate
+ * The origin item provider adapter.
+ */
+ public DiagramChangeItemProviderSpec(ItemProviderAdapter delegate) {
+ super(delegate);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.diagram.internal.extensions.provider.spec.ForwardingDiagramDiffItemProvider#getReferenceText(org.eclipse.emf.compare.diagram.internal.extensions.DiagramDiff)
+ */
+ @Override
+ protected String getReferenceText(DiagramDiff diagramDiff) {
+ String result = ""; //$NON-NLS-1$
+ Diff diff = null;
+ DifferenceKind kind = diagramDiff.getKind();
+ switch (kind) {
+ case ADD:
+ case DELETE:
+ diff = Iterators.find(diagramDiff.getRefinedBy().iterator(), DiagramChangeFactory
+ .isMainDiffForAddOrDeleteDiagram(), null);
+ break;
+ default:
+ }
+ if (diff instanceof ResourceAttachmentChange) {
+ result = "contents";
+ }
+ return result;
+
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.diagram.internal.extensions.provider.spec.ForwardingDiagramDiffItemProvider#isCandidateToAddChildren(java.lang.Object)
+ */
+ @Override
+ protected boolean isCandidateToAddChildren(Object object) {
+ return object instanceof DiagramChange
+ && (((DiagramChange)object).getKind() == DifferenceKind.ADD || ((DiagramChange)object)
+ .getKind() == DifferenceKind.DELETE);
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.eclipse.emf.compare.diagram.internal.extensions.provider.spec.ForwardingDiagramDiffItemProvider#getChildren(java.lang.Object)
+ */
+ @Override
+ public Collection<?> getChildren(Object object) {
+ Collection<?> result = super.getChildren(object);
+ if (isCandidateToAddChildren(object)) {
+ result.remove(object);
+ }
+ return result;
+ }
+}
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 8cf075799..c2f358240 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
@@ -38,6 +38,9 @@ public class ExtensionsItemProviderAdapterFactorySpec extends ExtensionsItemProv
/** Item provider used for the coordinates change. */
CoordinatesChangeItemProviderSpec fCoordinatesChangeItemProvider;
+ /** Item provider used for the diagram change. */
+ DiagramChangeItemProviderSpec fDiagramChangeItemProvider;
+
/**
* Constructor.
*/
@@ -115,4 +118,18 @@ public class ExtensionsItemProviderAdapterFactorySpec extends ExtensionsItemProv
}
return fCoordinatesChangeItemProvider;
}
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.diagram.internal.extensions.provider.ExtensionsItemProviderAdapterFactory#createDiagramChangeAdapter()
+ */
+ @Override
+ public Adapter createDiagramChangeAdapter() {
+ if (fDiagramChangeItemProvider == null) {
+ fDiagramChangeItemProvider = new DiagramChangeItemProviderSpec((ItemProviderAdapter)super
+ .createDiagramChangeAdapter());
+ }
+ return fDiagramChangeItemProvider;
+ }
}
diff --git a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/ForwardingDiagramDiffItemProvider.java b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/ForwardingDiagramDiffItemProvider.java
index 07e94064b..5c609dec0 100644
--- a/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/ForwardingDiagramDiffItemProvider.java
+++ b/plugins/org.eclipse.emf.compare.diagram.edit/src/org/eclipse/emf/compare/diagram/internal/extensions/provider/spec/ForwardingDiagramDiffItemProvider.java
@@ -88,8 +88,6 @@ public class ForwardingDiagramDiffItemProvider extends ForwardingItemProvider im
Comparison comparison = diagramDiff.getMatch().getComparison();
match = comparison.getMatch(view);
ret.addAll(match.getSubmatches());
- }
- if (match != null) {
ITreeItemContentProvider contentProvider = (ITreeItemContentProvider)getRootAdapterFactory()
.adapt(match, ITreeItemContentProvider.class);
if (contentProvider != null) {
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 b9e88ff20..da91b9c62 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
@@ -381,8 +381,11 @@ public class DiagramContentMergeViewer extends EMFCompareContentMergeViewer {
decorators = new ArrayList();
}
- decorators.add(createAndRegisterDecorator(difference, referenceView, referenceFigure,
- targetSide));
+ AbstractDecorator decorator = createAndRegisterDecorator(difference, referenceView,
+ referenceFigure, targetSide);
+ if (decorator != null) {
+ decorators.add(decorator);
+ }
}
}
@@ -542,15 +545,17 @@ public class DiagramContentMergeViewer extends EMFCompareContentMergeViewer {
* The reference view.
* @param side
* The side where the layer has to be found.
- * @return The layer figure.
+ * @return The layer figure or null if the edit part of the diagram is not found.
*/
protected IFigure getLayer(View referenceView, MergeViewerSide side) {
Diagram referenceDiagram = referenceView.getDiagram();
Diagram targetDiagram = (Diagram)getMatchView(referenceDiagram, side);
DiagramMergeViewer targetViewer = getViewer(side);
- IFigure targetLayer = LayerManager.Helper.find(targetViewer.getEditPart(targetDiagram)).getLayer(
- getIDLayer(referenceView));
- return targetLayer;
+ EditPart editPart = targetViewer.getEditPart(targetDiagram);
+ if (editPart != null) {
+ return LayerManager.Helper.find(editPart).getLayer(getIDLayer(referenceView));
+ }
+ return null;
}
/**
@@ -560,7 +565,7 @@ public class DiagramContentMergeViewer extends EMFCompareContentMergeViewer {
*
* @param referenceView
* The reference view.
- * @return The ID of te layer.
+ * @return The ID of the layer.
*/
protected Object getIDLayer(View referenceView) {
if (referenceView instanceof Edge) {
@@ -840,7 +845,9 @@ public class DiagramContentMergeViewer extends EMFCompareContentMergeViewer {
protected Phantom createAndRegisterDecorator(Diff diff, View referenceView, IFigure referenceFigure,
MergeViewerSide targetSide) {
Phantom phantom = createPhantom(diff, referenceView, referenceFigure, targetSide);
- fPhantomRegistry.put(diff, phantom);
+ if (phantom != null) {
+ fPhantomRegistry.put(diff, phantom);
+ }
return phantom;
}
@@ -964,89 +971,98 @@ public class DiagramContentMergeViewer extends EMFCompareContentMergeViewer {
* The reference figure as base for creation of the phantom.
* @param side
* The side where the phantom has to be created.
- * @return The phantom.
+ * @return The phantom or null if the target layer is not found.
*/
private Phantom createPhantom(Diff diff, View referenceView, IFigure referenceFigure,
MergeViewerSide side) {
- MergeViewerSide referenceSide = getSide(referenceView);
+ IFigure targetLayer = getLayer(referenceView, side);
+ if (targetLayer != null) {
+ MergeViewerSide referenceSide = getSide(referenceView);
- Rectangle rect = referenceFigure.getBounds().getCopy();
+ Rectangle rect = referenceFigure.getBounds().getCopy();
- IFigure referenceLayer = getLayer(referenceView, referenceSide);
- translateCoordinates(referenceFigure, referenceLayer, rect);
+ IFigure referenceLayer = getLayer(referenceView, referenceSide);
+ translateCoordinates(referenceFigure, referenceLayer, rect);
- DecoratorFigure ghost = null;
+ DecoratorFigure ghost = null;
- IFigure targetLayer = getLayer(referenceView, side);
- Phantom phantom = new Phantom(targetLayer, side, referenceView, referenceFigure, diff);
-
- // Container "list" case
- if (isNodeList(referenceView)) {
- Diff refiningDiff = Iterators.find(diff.getRefinedBy().iterator(), and(
- valueIs(referenceView), onFeature(NotationPackage.Literals.VIEW__PERSISTED_CHILDREN
- .getName())));
-
- // FIXME: It has to manage visible views.
- int index = DiffUtil.findInsertionIndex(getComparison(), refiningDiff,
- side == MergeViewerSide.LEFT);
-
- IFigure referenceParentFigure = referenceFigure.getParent();
- Rectangle referenceParentBounds = referenceParentFigure.getBounds().getCopy();
- translateCoordinates(referenceParentFigure, referenceLayer, referenceParentBounds);
-
- View parentView = (View)getMatchView(referenceView.eContainer(), side);
- if (parentView != null) {
- int nbElements = getVisibleViews(parentView).size();
- if (index > nbElements) {
- index = nbElements;
- }
- }
+ Phantom phantom = new Phantom(targetLayer, side, referenceView, referenceFigure, diff);
+
+ // Container "list" case
+ if (isNodeList(referenceView)) {
+ Diff refiningDiff = Iterators.find(diff.getRefinedBy().iterator(), and(
+ valueIs(referenceView),
+ onFeature(NotationPackage.Literals.VIEW__PERSISTED_CHILDREN.getName())));
- // FIXME: The add of decorators modifies the physical coordinates of elements
- // FIXME: Compute position from the y position of the first child + sum of height of the
- // children.
- int pos = rect.height * index + referenceParentBounds.y + 1;
- Map<String, Object> parameters = new HashMap<String, Object>();
- parameters.put(NodeListFigure.PARAM_Y_POS, Integer.valueOf(pos));
-
- ghost = new NodeListFigure(diff, isThreeWay(), getCompareColor(), referenceFigure, rect,
- true, parameters);
-
- // Edge case
- } else if (referenceView instanceof Edge) {
- // If the edge phantom ties shapes where their coordinates changed
- if (hasAnExtremityChange((Edge)referenceView, side)) {
- EditPart edgeEditPart = createEdgeEditPart((Edge)referenceView, referenceSide, side);
- if (edgeEditPart instanceof GraphicalEditPart) {
- phantom.setEditPart(edgeEditPart);
-
- IFigure fig = ((GraphicalEditPart)edgeEditPart).getFigure();
- fig.getChildren().clear();
- ghost = new DecoratorFigure(diff, isThreeWay(), getCompareColor(), referenceFigure,
- fig, true);
+ // FIXME: It has to manage visible views.
+ int index = DiffUtil.findInsertionIndex(getComparison(), refiningDiff,
+ side == MergeViewerSide.LEFT);
+ IFigure referenceParentFigure = referenceFigure.getParent();
+ Rectangle referenceParentBounds = referenceParentFigure.getBounds().getCopy();
+ translateCoordinates(referenceParentFigure, referenceLayer, referenceParentBounds);
+
+ View parentView = (View)getMatchView(referenceView.eContainer(), side);
+ if (parentView != null) {
+ int nbElements = getVisibleViews(parentView).size();
+ // CHECKSTYLE:OFF
+ if (index > nbElements) {
+ // CHECKSTYLE:ON
+ index = nbElements;
+ }
}
- // Else, it creates only a polyline connection figure with the same properties as the
- // reference
- } else {
- if (referenceFigure instanceof PolylineConnection) {
- ghost = new EdgeFigure(diff, isThreeWay(), getCompareColor(), referenceFigure, rect,
- true);
+
+ // FIXME: The add of decorators modifies the physical coordinates of elements
+ // FIXME: Compute position from the y position of the first child + sum of height of the
+ // children.
+ int pos = rect.height * index + referenceParentBounds.y + 1;
+ Map<String, Object> parameters = new HashMap<String, Object>();
+ parameters.put(NodeListFigure.PARAM_Y_POS, Integer.valueOf(pos));
+
+ ghost = new NodeListFigure(diff, isThreeWay(), getCompareColor(), referenceFigure, rect,
+ true, parameters);
+
+ // Edge case
+ } else if (referenceView instanceof Edge) {
+ // If the edge phantom ties shapes where their coordinates changed
+ if (hasAnExtremityChange((Edge)referenceView, side)) {
+ EditPart edgeEditPart = createEdgeEditPart((Edge)referenceView, referenceSide, side);
+ // CHECKSTYLE:OFF
+ if (edgeEditPart instanceof GraphicalEditPart) {
+ // CHECKSTYLE:ON
+ phantom.setEditPart(edgeEditPart);
+
+ IFigure fig = ((GraphicalEditPart)edgeEditPart).getFigure();
+ fig.getChildren().clear();
+ ghost = new DecoratorFigure(diff, isThreeWay(), getCompareColor(),
+ referenceFigure, fig, true);
+
+ }
+ // Else, it creates only a polyline connection figure with the same properties as the
+ // reference
+ } else {
+ if (referenceFigure instanceof PolylineConnection) {
+ ghost = new EdgeFigure(diff, isThreeWay(), getCompareColor(), referenceFigure,
+ rect, true);
+ }
}
}
- }
- // Default case: Nodes
- if (ghost == null) {
- ghost = new NodeFigure(diff, isThreeWay(), getCompareColor(), referenceFigure, rect, true);
- }
+ // Default case: Nodes
+ if (ghost == null) {
+ ghost = new NodeFigure(diff, isThreeWay(), getCompareColor(), referenceFigure, rect, true);
+ }
- phantom.setDecoratorFigure(ghost);
+ phantom.setDecoratorFigure(ghost);
- translateWhenInsideContainerChange(phantom);
+ translateWhenInsideContainerChange(phantom);
+
+ return phantom;
+ }
+
+ return null;
- return phantom;
}
/**
@@ -1420,12 +1436,14 @@ public class DiagramContentMergeViewer extends EMFCompareContentMergeViewer {
protected Marker createAndRegisterDecorator(Diff diff, View referenceView, IFigure referenceFigure,
MergeViewerSide targetSide) {
Marker marker = createMarker(diff, referenceView, referenceFigure, targetSide);
- List<Marker> markers = fMarkerRegistry.get(diff);
- if (markers == null) {
- markers = new ArrayList<Marker>();
- fMarkerRegistry.put(diff, markers);
+ if (marker != null) {
+ List<Marker> markers = fMarkerRegistry.get(diff);
+ if (markers == null) {
+ markers = new ArrayList<Marker>();
+ fMarkerRegistry.put(diff, markers);
+ }
+ markers.add(marker);
}
- markers.add(marker);
return marker;
}
@@ -1496,44 +1514,47 @@ public class DiagramContentMergeViewer extends EMFCompareContentMergeViewer {
* The reference figure as base for creation of the marker.
* @param side
* The side where the marker has to be created.
- * @return The phantom.
+ * @return The phantom or null if the target layer is not found.
*/
private Marker createMarker(Diff diff, View referenceView, IFigure referenceFigure,
MergeViewerSide side) {
- Rectangle referenceBounds = referenceFigure.getBounds().getCopy();
IFigure referenceLayer = getLayer(referenceView, side);
- translateCoordinates(referenceFigure, referenceLayer, referenceBounds);
+ if (referenceLayer != null) {
+ Rectangle referenceBounds = referenceFigure.getBounds().getCopy();
+ translateCoordinates(referenceFigure, referenceLayer, referenceBounds);
- DecoratorFigure markerFigure = null;
+ DecoratorFigure markerFigure = null;
- IFigure targetLayer = getLayer(referenceView, side);
- Marker marker = new Marker(targetLayer, side, referenceView, referenceFigure, diff);
+ Marker marker = new Marker(referenceLayer, side, referenceView, referenceFigure, diff);
- if (isNodeList(referenceView)) {
+ if (isNodeList(referenceView)) {
- markerFigure = new NodeListFigure(diff, isThreeWay(), getCompareColor(), referenceFigure,
- referenceBounds, false);
+ markerFigure = new NodeListFigure(diff, isThreeWay(), getCompareColor(), referenceFigure,
+ referenceBounds, false);
- } else if (referenceView instanceof Edge) {
+ } else if (referenceView instanceof Edge) {
+
+ if (referenceFigure instanceof PolylineConnection) {
+ markerFigure = new EdgeFigure(diff, isThreeWay(), getCompareColor(), referenceFigure,
+ referenceBounds, false);
+ }
- if (referenceFigure instanceof PolylineConnection) {
- markerFigure = new EdgeFigure(diff, isThreeWay(), getCompareColor(), referenceFigure,
- referenceBounds, false);
}
- }
+ // Default case: Nodes
+ if (markerFigure == null) {
- // Default case: Nodes
- if (markerFigure == null) {
+ markerFigure = new NodeFigure(diff, isThreeWay(), getCompareColor(), referenceFigure,
+ referenceBounds, false);
+ }
- markerFigure = new NodeFigure(diff, isThreeWay(), getCompareColor(), referenceFigure,
- referenceBounds, false);
+ marker.setDecoratorFigure(markerFigure);
+ return marker;
}
- marker.setDecoratorFigure(markerFigure);
+ return null;
- return marker;
}
/**
diff --git a/plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.ecore b/plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.ecore
index bb9b74f66..58873b48f 100644
--- a/plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.ecore
+++ b/plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.ecore
@@ -11,4 +11,5 @@
<eStructuralFeatures xsi:type="ecore:EReference" name="semanticDiff" eType="ecore:EClass ../../org.eclipse.emf.compare/model/compare.ecore#//Diff"/>
<eStructuralFeatures xsi:type="ecore:EReference" name="view" eType="ecore:EClass platform:/plugin/org.eclipse.emf.ecore/model/Ecore.ecore#//EObject"/>
</eClassifiers>
+ <eClassifiers xsi:type="ecore:EClass" name="DiagramChange" eSuperTypes="#//DiagramDiff"/>
</ecore:EPackage>
diff --git a/plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.genmodel b/plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.genmodel
index b29c5635e..e1cf1b06e 100644
--- a/plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.genmodel
+++ b/plugins/org.eclipse.emf.compare.diagram/model/diagramCompare.genmodel
@@ -17,5 +17,6 @@
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference diagramCompare.ecore#//DiagramDiff/semanticDiff"/>
<genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference diagramCompare.ecore#//DiagramDiff/view"/>
</genClasses>
+ <genClasses ecoreClass="diagramCompare.ecore#//DiagramChange"/>
</genPackages>
</genmodel:GenModel>
diff --git a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/DiagramChange.java b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/DiagramChange.java
new file mode 100644
index 000000000..382313dd9
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/DiagramChange.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>Diagram Change</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.emf.compare.diagram.internal.extensions.ExtensionsPackage#getDiagramChange()
+ * @model
+ * @generated
+ */
+public interface DiagramChange extends DiagramDiff {
+} // DiagramChange
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 884a1abd5..d2f637fa8 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
@@ -75,6 +75,15 @@ public interface ExtensionsFactory extends EFactory {
EdgeChange createEdgeChange();
/**
+ * Returns a new object of class '<em>Diagram Change</em>'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return a new object of class '<em>Diagram Change</em>'.
+ * @generated
+ */
+ DiagramChange createDiagramChange();
+
+ /**
* Returns the package supported by this factory.
* <!-- 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 659c058e2..da8ed845e 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
@@ -828,6 +828,134 @@ public interface ExtensionsPackage extends EPackage {
/**
+ * The meta object id for the '{@link org.eclipse.emf.compare.diagram.internal.extensions.impl.DiagramChangeImpl <em>Diagram Change</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.compare.diagram.internal.extensions.impl.DiagramChangeImpl
+ * @see org.eclipse.emf.compare.diagram.internal.extensions.impl.ExtensionsPackageImpl#getDiagramChange()
+ * @generated
+ */
+ int DIAGRAM_CHANGE = 6;
+
+ /**
+ * The feature id for the '<em><b>Match</b></em>' container reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE__MATCH = DIAGRAM_DIFF__MATCH;
+
+ /**
+ * The feature id for the '<em><b>Requires</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE__REQUIRES = DIAGRAM_DIFF__REQUIRES;
+
+ /**
+ * The feature id for the '<em><b>Required By</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE__REQUIRED_BY = DIAGRAM_DIFF__REQUIRED_BY;
+
+ /**
+ * The feature id for the '<em><b>Refines</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE__REFINES = DIAGRAM_DIFF__REFINES;
+
+ /**
+ * The feature id for the '<em><b>Refined By</b></em>' reference list.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE__REFINED_BY = DIAGRAM_DIFF__REFINED_BY;
+
+ /**
+ * The feature id for the '<em><b>Kind</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE__KIND = DIAGRAM_DIFF__KIND;
+
+ /**
+ * The feature id for the '<em><b>Source</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE__SOURCE = DIAGRAM_DIFF__SOURCE;
+
+ /**
+ * The feature id for the '<em><b>State</b></em>' attribute.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE__STATE = DIAGRAM_DIFF__STATE;
+
+ /**
+ * The feature id for the '<em><b>Equivalence</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE__EQUIVALENCE = DIAGRAM_DIFF__EQUIVALENCE;
+
+ /**
+ * The feature id for the '<em><b>Conflict</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE__CONFLICT = DIAGRAM_DIFF__CONFLICT;
+
+ /**
+ * The feature id for the '<em><b>Semantic Diff</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE__SEMANTIC_DIFF = DIAGRAM_DIFF__SEMANTIC_DIFF;
+
+ /**
+ * The feature id for the '<em><b>View</b></em>' reference.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE__VIEW = DIAGRAM_DIFF__VIEW;
+
+ /**
+ * The number of structural features of the '<em>Diagram Change</em>' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ * @ordered
+ */
+ int DIAGRAM_CHANGE_FEATURE_COUNT = DIAGRAM_DIFF_FEATURE_COUNT + 0;
+
+
+ /**
* Returns the meta object for class '{@link org.eclipse.emf.compare.diagram.internal.extensions.Show <em>Show</em>}'.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -910,6 +1038,16 @@ public interface ExtensionsPackage extends EPackage {
EReference getDiagramDiff_View();
/**
+ * Returns the meta object for class '{@link org.eclipse.emf.compare.diagram.internal.extensions.DiagramChange <em>Diagram Change</em>}'.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @return the meta object for class '<em>Diagram Change</em>'.
+ * @see org.eclipse.emf.compare.diagram.internal.extensions.DiagramChange
+ * @generated
+ */
+ EClass getDiagramChange();
+
+ /**
* Returns the factory that creates the instances of the model.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
@@ -1007,6 +1145,16 @@ public interface ExtensionsPackage extends EPackage {
*/
EReference DIAGRAM_DIFF__VIEW = eINSTANCE.getDiagramDiff_View();
+ /**
+ * The meta object literal for the '{@link org.eclipse.emf.compare.diagram.internal.extensions.impl.DiagramChangeImpl <em>Diagram Change</em>}' class.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @see org.eclipse.emf.compare.diagram.internal.extensions.impl.DiagramChangeImpl
+ * @see org.eclipse.emf.compare.diagram.internal.extensions.impl.ExtensionsPackageImpl#getDiagramChange()
+ * @generated
+ */
+ EClass DIAGRAM_CHANGE = eINSTANCE.getDiagramChange();
+
}
} //ExtensionsPackage
diff --git a/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/DiagramChangeImpl.java b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/DiagramChangeImpl.java
new file mode 100644
index 000000000..123b5e939
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram/src-gen/org/eclipse/emf/compare/diagram/internal/extensions/impl/DiagramChangeImpl.java
@@ -0,0 +1,47 @@
+/**
+ * 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.DiagramChange;
+import org.eclipse.emf.compare.diagram.internal.extensions.ExtensionsPackage;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Diagram Change</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class DiagramChangeImpl extends DiagramDiffImpl implements DiagramChange {
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ protected DiagramChangeImpl() {
+ super();
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ @Override
+ protected EClass eStaticClass() {
+ return ExtensionsPackage.Literals.DIAGRAM_CHANGE;
+ }
+
+} //DiagramChangeImpl
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 609ff8851..1272455c8 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
@@ -69,6 +69,7 @@ public class ExtensionsFactoryImpl extends EFactoryImpl implements ExtensionsFac
case ExtensionsPackage.NODE_CHANGE: return createNodeChange();
case ExtensionsPackage.COORDINATES_CHANGE: return createCoordinatesChange();
case ExtensionsPackage.EDGE_CHANGE: return createEdgeChange();
+ case ExtensionsPackage.DIAGRAM_CHANGE: return createDiagramChange();
default:
throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
}
@@ -129,6 +130,16 @@ public class ExtensionsFactoryImpl extends EFactoryImpl implements ExtensionsFac
* <!-- end-user-doc -->
* @generated
*/
+ public DiagramChange createDiagramChange() {
+ DiagramChangeImpl diagramChange = new DiagramChangeImpl();
+ return diagramChange;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
public ExtensionsPackage getExtensionsPackage() {
return (ExtensionsPackage)getEPackage();
}
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 93848212f..f7ffa7158 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
@@ -13,6 +13,7 @@ package org.eclipse.emf.compare.diagram.internal.extensions.impl;
import org.eclipse.emf.compare.ComparePackage;
import org.eclipse.emf.compare.diagram.internal.extensions.CoordinatesChange;
+import org.eclipse.emf.compare.diagram.internal.extensions.DiagramChange;
import org.eclipse.emf.compare.diagram.internal.extensions.DiagramDiff;
import org.eclipse.emf.compare.diagram.internal.extensions.EdgeChange;
import org.eclipse.emf.compare.diagram.internal.extensions.ExtensionsFactory;
@@ -78,6 +79,13 @@ public class ExtensionsPackageImpl extends EPackageImpl implements ExtensionsPac
private EClass diagramDiffEClass = null;
/**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
+ private EClass diagramChangeEClass = null;
+
+ /**
* Creates an instance of the model <b>Package</b>, registered with
* {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
* package URI value.
@@ -218,6 +226,15 @@ public class ExtensionsPackageImpl extends EPackageImpl implements ExtensionsPac
* <!-- end-user-doc -->
* @generated
*/
+ public EClass getDiagramChange() {
+ return diagramChangeEClass;
+ }
+
+ /**
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ * @generated
+ */
public ExtensionsFactory getExtensionsFactory() {
return (ExtensionsFactory)getEFactoryInstance();
}
@@ -254,6 +271,8 @@ public class ExtensionsPackageImpl extends EPackageImpl implements ExtensionsPac
diagramDiffEClass = createEClass(DIAGRAM_DIFF);
createEReference(diagramDiffEClass, DIAGRAM_DIFF__SEMANTIC_DIFF);
createEReference(diagramDiffEClass, DIAGRAM_DIFF__VIEW);
+
+ diagramChangeEClass = createEClass(DIAGRAM_CHANGE);
}
/**
@@ -294,6 +313,7 @@ public class ExtensionsPackageImpl extends EPackageImpl implements ExtensionsPac
coordinatesChangeEClass.getESuperTypes().add(this.getNodeChange());
edgeChangeEClass.getESuperTypes().add(this.getDiagramDiff());
diagramDiffEClass.getESuperTypes().add(theComparePackage.getDiff());
+ diagramChangeEClass.getESuperTypes().add(this.getDiagramDiff());
// Initialize classes and features; add operations and parameters
initEClass(showEClass, Show.class, "Show", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -310,6 +330,8 @@ public class ExtensionsPackageImpl extends EPackageImpl implements ExtensionsPac
initEReference(getDiagramDiff_SemanticDiff(), theComparePackage.getDiff(), null, "semanticDiff", null, 0, 1, DiagramDiff.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
initEReference(getDiagramDiff_View(), theEcorePackage.getEObject(), null, "view", null, 0, 1, DiagramDiff.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+ initEClass(diagramChangeEClass, DiagramChange.class, "DiagramChange", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
// Create resource
createResource(eNS_URI);
}
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 b8335f68f..9e53bda70 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
@@ -102,6 +102,10 @@ public class ExtensionsAdapterFactory extends AdapterFactoryImpl {
return createDiagramDiffAdapter();
}
@Override
+ public Adapter caseDiagramChange(DiagramChange object) {
+ return createDiagramChangeAdapter();
+ }
+ @Override
public Adapter caseDiff(Diff object) {
return createDiffAdapter();
}
@@ -210,6 +214,20 @@ public class ExtensionsAdapterFactory extends AdapterFactoryImpl {
}
/**
+ * Creates a new adapter for an object of class '{@link org.eclipse.emf.compare.diagram.internal.extensions.DiagramChange <em>Diagram 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.DiagramChange
+ * @generated
+ */
+ public Adapter createDiagramChangeAdapter() {
+ return null;
+ }
+
+ /**
* Creates a new adapter for an object of class '{@link org.eclipse.emf.compare.Diff <em>Diff</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 c30e09664..28a6f9c9b 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
@@ -124,6 +124,14 @@ public class ExtensionsSwitch<T> extends Switch<T> {
if (result == null) result = defaultCase(theEObject);
return result;
}
+ case ExtensionsPackage.DIAGRAM_CHANGE: {
+ DiagramChange diagramChange = (DiagramChange)theEObject;
+ T result = caseDiagramChange(diagramChange);
+ if (result == null) result = caseDiagramDiff(diagramChange);
+ if (result == null) result = caseDiff(diagramChange);
+ if (result == null) result = defaultCase(theEObject);
+ return result;
+ }
default: return defaultCase(theEObject);
}
}
@@ -219,6 +227,21 @@ public class ExtensionsSwitch<T> extends Switch<T> {
}
/**
+ * Returns the result of interpreting the object as an instance of '<em>Diagram 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>Diagram Change</em>'.
+ * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+ * @generated
+ */
+ public T caseDiagramChange(DiagramChange object) {
+ return null;
+ }
+
+ /**
* Returns the result of interpreting the object as an instance of '<em>Diff</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/AbstractDiagramChangeFactory.java b/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/AbstractDiagramChangeFactory.java
index da65053ff..7d3426519 100644
--- a/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/AbstractDiagramChangeFactory.java
+++ b/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/AbstractDiagramChangeFactory.java
@@ -22,6 +22,7 @@ import org.eclipse.emf.compare.Match;
import org.eclipse.emf.compare.ReferenceChange;
import org.eclipse.emf.compare.diagram.internal.extensions.DiagramDiff;
import org.eclipse.emf.compare.internal.postprocessor.factories.AbstractChangeFactory;
+import org.eclipse.emf.compare.util.CompareSwitch;
import org.eclipse.emf.compare.utils.MatchUtil;
import org.eclipse.emf.compare.utils.ReferenceUtil;
import org.eclipse.emf.ecore.EObject;
@@ -60,18 +61,35 @@ public abstract class AbstractDiagramChangeFactory extends AbstractChangeFactory
* @return The view.
*/
public EObject setView(DiagramDiff extension, Diff refiningDiff) {
- EObject view = null;
- if (refiningDiff instanceof ReferenceChange) {
- view = ((ReferenceChange)refiningDiff).getValue();
- } else if (refiningDiff instanceof AttributeChange) {
- Comparison comparison = refiningDiff.getMatch().getComparison();
- view = MatchUtil.getContainer(comparison, refiningDiff);
- while (view != null && !(view instanceof View)) {
- view = view.eContainer();
+
+ CompareSwitch<EObject> getterValue = new CompareSwitch<EObject>() {
+
+ @Override
+ public EObject caseReferenceChange(ReferenceChange object) {
+ return object.getValue();
}
- }
+
+ @Override
+ public EObject caseAttributeChange(AttributeChange object) {
+ Comparison comparison = object.getMatch().getComparison();
+ EObject view = MatchUtil.getContainer(comparison, object);
+ while (view != null && !(view instanceof View)) {
+ view = view.eContainer();
+ }
+ return view;
+ }
+
+ @Override
+ public EObject caseResourceAttachmentChange(
+ org.eclipse.emf.compare.ResourceAttachmentChange object) {
+ Comparison comparison = object.getMatch().getComparison();
+ return MatchUtil.getContainer(comparison, object);
+ }
+
+ };
+
+ EObject view = getterValue.doSwitch(refiningDiff);
extension.setView(view);
- // FIXME: ResourceAttachmentChange ?
return view;
}
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 f524849f0..e93f0cabb 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
@@ -19,6 +19,7 @@ import java.util.Map;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.diagram.internal.CompareDiagramConfiguration;
import org.eclipse.emf.compare.diagram.internal.factories.extensions.CoordinatesChangeFactory;
+import org.eclipse.emf.compare.diagram.internal.factories.extensions.DiagramChangeFactory;
import org.eclipse.emf.compare.diagram.internal.factories.extensions.EdgeChangeFactory;
import org.eclipse.emf.compare.diagram.internal.factories.extensions.HideFactory;
import org.eclipse.emf.compare.diagram.internal.factories.extensions.NodeChangeFactory;
@@ -56,6 +57,7 @@ public final class DiagramExtensionFactoryRegistry {
factories.add(new NodeChangeFactory());
factories.add(new CoordinatesChangeFactory(configuration));
factories.add(new EdgeChangeFactory());
+ factories.add(new DiagramChangeFactory());
for (IChangeFactory iDiffExtensionFactory : factories) {
dataset.put(iDiffExtensionFactory.getExtensionKind(), iDiffExtensionFactory);
diff --git a/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/DiagramChangeFactory.java b/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/DiagramChangeFactory.java
new file mode 100644
index 000000000..d7e8799da
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.diagram/src/org/eclipse/emf/compare/diagram/internal/factories/extensions/DiagramChangeFactory.java
@@ -0,0 +1,156 @@
+/*******************************************************************************
+ * 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.factories.extensions;
+
+import com.google.common.base.Predicate;
+
+import org.eclipse.emf.compare.Comparison;
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.DifferenceKind;
+import org.eclipse.emf.compare.ResourceAttachmentChange;
+import org.eclipse.emf.compare.diagram.internal.extensions.DiagramChange;
+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.factories.AbstractDiagramChangeFactory;
+import org.eclipse.emf.compare.utils.MatchUtil;
+import org.eclipse.emf.compare.utils.ReferenceUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+
+/**
+ * Factory of diagram changes.
+ *
+ * @author <a href="mailto:cedric.notot@obeo.fr">Cedric Notot</a>
+ */
+public class DiagramChangeFactory extends AbstractDiagramChangeFactory {
+
+ /**
+ * Constructor.
+ */
+ public DiagramChangeFactory() {
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.internal.postprocessor.factories.AbstractChangeFactory#getExtensionKind()
+ */
+ @Override
+ public Class<? extends Diff> getExtensionKind() {
+ return DiagramChange.class;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.internal.postprocessor.factories.AbstractChangeFactory#createExtension()
+ */
+ @Override
+ public DiagramDiff createExtension() {
+ return ExtensionsFactory.eINSTANCE.createDiagramChange();
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.internal.postprocessor.factories.AbstractChangeFactory#setRefiningChanges(org.eclipse.emf.compare.diagram.internal.extensions.DiagramDiff,
+ * org.eclipse.emf.compare.DifferenceKind, org.eclipse.emf.compare.Diff)
+ */
+ @Override
+ public void setRefiningChanges(Diff extension, DifferenceKind extensionKind, Diff refiningDiff) {
+ // Macroscopic change on a diagram is refined by the unit main change and all unit children related
+ // changes.
+ extension.getRefinedBy().add(refiningDiff);
+ extension.getRefinedBy().addAll(getAllContainedDifferences(refiningDiff));
+ }
+
+ /**
+ * {@inheritDoc}
+ * @see org.eclipse.emf.compare.internal.postprocessor.factories.AbstractChangeFactory#fillRequiredDifferences(org.eclipse.emf.compare.Comparison, org.eclipse.emf.compare.Diff)
+ */
+ @Override
+ public void fillRequiredDifferences(Comparison comparison, Diff extension) {
+ // nothing
+ }
+
+ /**
+ * Predicate to check that the given difference is the main unit difference for this macroscopic add or
+ * delete of diagram.
+ *
+ * @return The predicate.
+ */
+ public static Predicate<Diff> isMainDiffForAddOrDeleteDiagram() {
+ return new Predicate<Diff>() {
+ public boolean apply(Diff difference) {
+ return difference instanceof ResourceAttachmentChange
+ && (isRelatedToAnAddDiagram((ResourceAttachmentChange)difference) || isRelatedToADeleteDiagram((ResourceAttachmentChange)difference));
+ }
+ };
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.internal.postprocessor.factories.AbstractChangeFactory#isRelatedToAnExtensionAdd(org.eclipse.emf.compare.ResourceAttachmentChange)
+ */
+ @Override
+ protected boolean isRelatedToAnExtensionAdd(ResourceAttachmentChange input) {
+ return isRelatedToAnAddDiagram(input);
+ }
+
+ /**
+ * It checks that the given resource attachment change concerns the add of a diagram.
+ *
+ * @param input
+ * The reference change.
+ * @return True if it concerns the add of a node, False otherwise.
+ */
+ protected static boolean isRelatedToAnAddDiagram(ResourceAttachmentChange input) {
+ return isContainmentOnSemanticDiagram(input) && input.getKind() == DifferenceKind.ADD;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.compare.internal.postprocessor.factories.AbstractChangeFactory#isRelatedToAnExtensionDelete(org.eclipse.emf.compare.ResourceAttachmentChange)
+ */
+ @Override
+ protected boolean isRelatedToAnExtensionDelete(ResourceAttachmentChange input) {
+ return isRelatedToADeleteDiagram(input);
+ }
+
+ /**
+ * It checks that the given resource attachment change concerns the delete of a diagram.
+ *
+ * @param input
+ * The reference change.
+ * @return True if it concerns the delete of a node, False otherwise.
+ */
+ protected static boolean isRelatedToADeleteDiagram(ResourceAttachmentChange input) {
+ return isContainmentOnSemanticDiagram(input) && input.getKind() == DifferenceKind.DELETE;
+ }
+
+ /**
+ * It checks that the given difference is on a containment link to a Diagram attached to a semantic
+ * object.
+ *
+ * @param input
+ * The difference.
+ * @return True if the difference matches with the predicate.
+ */
+ private static boolean isContainmentOnSemanticDiagram(ResourceAttachmentChange input) {
+ EObject value = MatchUtil.getContainer(input.getMatch().getComparison(), input);
+ return value instanceof Diagram
+ && ReferenceUtil.safeEGet(value, NotationPackage.Literals.VIEW__ELEMENT) != null;
+ }
+
+}
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 8b5187cce..4f3910c58 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
@@ -69,9 +69,7 @@ public class NodeChangeFactory extends AbstractDiagramChangeFactory {
// Macroscopic change on a node is refined by the unit main change and unit children related changes.
extension.getRefinedBy().add(refiningDiff);
if (extensionKind != DifferenceKind.MOVE) {
- if (refiningDiff instanceof ReferenceChange) {
- extension.getRefinedBy().addAll(getAllContainedDifferences((ReferenceChange)refiningDiff));
- }
+ extension.getRefinedBy().addAll(getAllContainedDifferences(refiningDiff));
}
}
diff --git a/plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/provider/spec/MatchResourceItemProviderSpec.java b/plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/provider/spec/MatchResourceItemProviderSpec.java
index 79643b0a0..c0adf72de 100644
--- a/plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/provider/spec/MatchResourceItemProviderSpec.java
+++ b/plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/provider/spec/MatchResourceItemProviderSpec.java
@@ -10,13 +10,18 @@
*******************************************************************************/
package org.eclipse.emf.compare.provider.spec;
-import static com.google.common.collect.Iterables.filter;
+import static com.google.common.base.Predicates.not;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.Iterators;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.compare.Comparison;
+import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.MatchResource;
import org.eclipse.emf.compare.ResourceAttachmentChange;
import org.eclipse.emf.compare.provider.IItemDescriptionProvider;
@@ -45,25 +50,77 @@ public class MatchResourceItemProviderSpec extends MatchResourceItemProvider imp
super(adapterFactory);
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getChildren(java.lang.Object)
+ */
@Override
public Collection<?> getChildren(Object object) {
Collection<Object> children = new ArrayList<Object>();
MatchResource matchResource = (MatchResource)object;
Comparison comparison = matchResource.getComparison();
- for (ResourceAttachmentChange rac : filter(comparison.getDifferences(),
- ResourceAttachmentChange.class)) {
- final String diffResourceURI = rac.getResourceURI();
- if (diffResourceURI != null
- && (diffResourceURI.equals(matchResource.getLeftURI())
- || diffResourceURI.equals(matchResource.getRightURI()) || diffResourceURI
- .equals(matchResource.getOriginURI()))) {
- children.add(rac);
- }
+ for (Diff diff : Collections2.filter(comparison.getDifferences(), isCandidate(matchResource))) {
+ children.add(diff);
}
return children;
}
/**
+ * Predicate to check that the current difference is candidate to be added under the given
+ * <code>MatchResource</code>.
+ *
+ * @param matchResource
+ * The match resource.
+ * @return The predicate.
+ */
+ private Predicate<Diff> isCandidate(final MatchResource matchResource) {
+ return new Predicate<Diff>() {
+ public boolean apply(Diff input) {
+ if (input instanceof ResourceAttachmentChange) {
+ return uriEqualToOneAtLeast(matchResource).apply((ResourceAttachmentChange)input);
+ } else {
+ return Iterators.any(input.getRefinedBy().iterator(), isCandidate(matchResource));
+ }
+ }
+ };
+ }
+
+ /**
+ * Predicate to check if the URI of the current attachment change is equal to one (at least) of the URIs
+ * of the resources matched by the given <code>MatchResource</code>.
+ *
+ * @param matchResource
+ * The match resource.
+ * @return The predicate.
+ */
+ private static Predicate<ResourceAttachmentChange> uriEqualToOneAtLeast(final MatchResource matchResource) {
+ return new Predicate<ResourceAttachmentChange>() {
+ public boolean apply(ResourceAttachmentChange difference) {
+ final String diffResourceURI = difference.getResourceURI();
+ return diffResourceURI != null
+ && (diffResourceURI.equals(matchResource.getLeftURI())
+ || diffResourceURI.equals(matchResource.getRightURI()) || diffResourceURI
+ .equals(matchResource.getOriginURI()));
+ }
+ };
+ }
+
+ /**
+ * Predicate to check if the URI of the current attachment change is different from all the URIs of the
+ * resources matched by the given <code>MatchResource</code>.
+ *
+ * @param matchResource
+ * The match resource.
+ * @return The predicate.
+ * @since 3.0
+ */
+ public static final Predicate<ResourceAttachmentChange> uriDifferentFromAll(
+ final MatchResource matchResource) {
+ return not(uriEqualToOneAtLeast(matchResource));
+ }
+
+ /**
* {@inheritDoc}
*
* @see org.eclipse.emf.compare.provider.MatchResourceItemProvider#getText(java.lang.Object)
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/impl/EmptyMatchedResourcesFilter.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/impl/EmptyMatchedResourcesFilter.java
index 657237a23..acd374e64 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/impl/EmptyMatchedResourcesFilter.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/filters/impl/EmptyMatchedResourcesFilter.java
@@ -14,12 +14,13 @@ import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.isEmpty;
import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.MatchResource;
import org.eclipse.emf.compare.ResourceAttachmentChange;
-import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.IDifferenceFilter;
+import org.eclipse.emf.compare.provider.spec.MatchResourceItemProviderSpec;
import org.eclipse.emf.ecore.EObject;
/**
@@ -40,14 +41,8 @@ public class EmptyMatchedResourcesFilter extends AbstractDifferenceFilter {
Iterable<ResourceAttachmentChange> resourceAttachmentchanges = filter(differences,
ResourceAttachmentChange.class);
if (!isEmpty(resourceAttachmentchanges)) {
- for (ResourceAttachmentChange rac : resourceAttachmentchanges) {
- final String diffResourceURI = rac.getResourceURI();
- if (!diffResourceURI.equals(((MatchResource)input).getLeftURI())
- && !diffResourceURI.equals(((MatchResource)input).getRightURI())
- && !diffResourceURI.equals(((MatchResource)input).getOriginURI())) {
- return true;
- }
- }
+ return Iterables.all(resourceAttachmentchanges, MatchResourceItemProviderSpec
+ .uriDifferentFromAll((MatchResource)input));
} else {
return true;
}
diff --git a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/internal/postprocessor/factories/AbstractChangeFactory.java b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/internal/postprocessor/factories/AbstractChangeFactory.java
index 5a9fc15ec..da3cdd94f 100644
--- a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/internal/postprocessor/factories/AbstractChangeFactory.java
+++ b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/internal/postprocessor/factories/AbstractChangeFactory.java
@@ -28,6 +28,7 @@ import org.eclipse.emf.compare.Match;
import org.eclipse.emf.compare.ReferenceChange;
import org.eclipse.emf.compare.ResourceAttachmentChange;
import org.eclipse.emf.compare.util.CompareSwitch;
+import org.eclipse.emf.compare.utils.MatchUtil;
import org.eclipse.emf.ecore.EObject;
/**
@@ -370,17 +371,40 @@ public abstract class AbstractChangeFactory implements IChangeFactory {
}
/**
- * Get all the add and delete changes on the objects contained in the one concerned by the given reference
- * change.
+ * Get all the add and delete changes on the objects contained in the one concerned by the given
+ * difference.
*
* @param input
- * The given reference change.
+ * The given difference.
* @return The found differences.
*/
- protected Set<Diff> getAllContainedDifferences(ReferenceChange input) {
+ protected Set<Diff> getAllContainedDifferences(Diff input) {
+ final Set<Diff> result = new HashSet<Diff>();
+
final Comparison comparison = input.getMatch().getComparison();
- final Match match = comparison.getMatch(input.getValue());
- final Set<Diff> result = getAllContainedDifferences(comparison, match);
+
+ CompareSwitch<EObject> valueGetter = new CompareSwitch<EObject>() {
+ @Override
+ public EObject caseReferenceChange(ReferenceChange object) {
+ return object.getValue();
+ }
+
+ @Override
+ public EObject caseResourceAttachmentChange(ResourceAttachmentChange object) {
+ return MatchUtil.getContainer(object.getMatch().getComparison(), object);
+ }
+
+ @Override
+ public EObject defaultCase(EObject object) {
+ return null;
+ }
+ };
+ EObject value = valueGetter.doSwitch(input);
+
+ if (value != null) {
+ final Match match = comparison.getMatch(value);
+ result.addAll(getAllContainedDifferences(comparison, match));
+ }
return result;
}
@@ -423,7 +447,7 @@ public abstract class AbstractChangeFactory implements IChangeFactory {
// Keep only unit changes...
if (!getExtensionKind().isInstance(candidate)) {
// ... which are not related to an other macroscopic ADD or DELETE of a graphical object.
- if (!(candidate instanceof ReferenceChange && (isRelatedToAnExtensionAdd((ReferenceChange)candidate) || isRelatedToAnExtensionDelete((ReferenceChange)candidate)))) {
+ if (!isAMainRefiningDifference(candidate)) {
result.add(candidate);
} else if (candidate instanceof ReferenceChange
&& ((ReferenceChange)candidate).getReference().isContainment()) {
@@ -444,6 +468,33 @@ public abstract class AbstractChangeFactory implements IChangeFactory {
}
/**
+ * It checks that the given difference is the main difference of a macroscopic change.
+ *
+ * @param difference
+ * the difference to check.
+ * @return True if the given difference is the main difference of a macroscopic change.
+ */
+ private boolean isAMainRefiningDifference(Diff difference) {
+ CompareSwitch<Boolean> compareSwitch = new CompareSwitch<Boolean>() {
+ @Override
+ public Boolean caseReferenceChange(ReferenceChange object) {
+ return isRelatedToAnExtensionAdd(object) || isRelatedToAnExtensionDelete(object);
+ }
+
+ @Override
+ public Boolean caseResourceAttachmentChange(ResourceAttachmentChange object) {
+ return isRelatedToAnExtensionAdd(object) || isRelatedToAnExtensionDelete(object);
+ }
+
+ @Override
+ public Boolean defaultCase(EObject object) {
+ return Boolean.FALSE;
+ }
+ };
+ return compareSwitch.doSwitch(difference).booleanValue();
+ }
+
+ /**
* Get the distinct differences refined by the given differences.
*
* @param refiningDifferences

Back to the top