diff options
author | Axel Richard | 2016-11-30 10:14:25 +0000 |
---|---|---|
committer | Laurent Delaigue | 2017-02-13 15:16:54 +0000 |
commit | 77a56b658d12cf1ac145c152a21b22d70c55a028 (patch) | |
tree | c01141fa05e2bbe8d713a5446816fe1c47d759c3 | |
parent | c4bcdde85294dc19ef83d06bced17bc4b19f8230 (diff) | |
download | org.eclipse.emf.compare-77a56b658d12cf1ac145c152a21b22d70c55a028.tar.gz org.eclipse.emf.compare-77a56b658d12cf1ac145c152a21b22d70c55a028.tar.xz org.eclipse.emf.compare-77a56b658d12cf1ac145c152a21b22d70c55a028.zip |
[508294] ResourceAttachmentChange is displayed twice
With the new way to display differences and matches in the structure
merge viewer, the ResourceAttachmentChanges were displayed twice in each
GroupProvider (ThreeWayGroupProvider, DefaultGroupProvider,
ResourceGroupProvider, KindGroupProvider).
Change-Id: I0c659b832fb32aa2f29f9722e61601c46a7c77d2
Signed-off-by: Axel Richard <axel.richard@obeo.fr>
12 files changed, 346 insertions, 7 deletions
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/ResourceAttachmentChangeInGroupsTest.java b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/ResourceAttachmentChangeInGroupsTest.java new file mode 100644 index 000000000..deda1a299 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/ResourceAttachmentChangeInGroupsTest.java @@ -0,0 +1,222 @@ +/******************************************************************************* + * Copyright (c) 2017 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups; + +import static com.google.common.collect.Iterables.filter; +import static com.google.common.collect.Iterables.size; +import static com.google.common.collect.Iterables.transform; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.Collection; +import java.util.List; + +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.compare.Comparison; +import org.eclipse.emf.compare.ResourceAttachmentChange; +import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareRCPUIMessages; +import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.ByResourceGroupProvider; +import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.DefaultGroupProvider; +import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.KindGroupProvider; +import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.ThreeWayComparisonGroupProvider; +import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.nodes.DiffNode; +import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.nodes.MatchResourceNode; +import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroup; +import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups.data.nodes.resourceattachmentchange.ResourceAttachmentChangeInGroupsInputData; +import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups.provider.AbstractTestTreeNodeItemProviderAdapter; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.edit.tree.TreeNode; +import org.junit.Before; +import org.junit.Test; + +import com.google.common.collect.Iterables; + +@SuppressWarnings("restriction") +public class ResourceAttachmentChangeInGroupsTest extends AbstractTestTreeNodeItemProviderAdapter { + + private Comparison comp; + + @Before + public void setUp() throws Exception { + comp = getComparison(new ResourceAttachmentChangeInGroupsInputData()); + } + + /** + * Test that a {@link ResourceAttachmentChange} is only display once in + * {@link ThreeWayComparisonGroupProvider}. This test is related to <a + * href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=508294"</a> + */ + @Test + public void testResourceAttachmentChangeInThreeWayComparisonGroupProvider() { + ThreeWayComparisonGroupProvider threeWayComparisonGroup = new ThreeWayComparisonGroupProvider(); + Collection<? extends IDifferenceGroup> groups = threeWayComparisonGroup.getGroups(comp); + assertNotNull(groups); + assertEquals(3, groups.size()); + IDifferenceGroup[] groupsArray = groups.toArray(new IDifferenceGroup[3]); + + // Conflicts group + IDifferenceGroup conflictsGroup = groupsArray[0]; + assertEquals(EMFCompareRCPUIMessages.getString("ThreeWayComparisonGroupProvider.conflicts.label"), //$NON-NLS-1$ + conflictsGroup.getName()); + List<? extends TreeNode> children = conflictsGroup.getChildren(); + assertEquals(0, children.size()); + + // Left group + IDifferenceGroup leftGroup = groupsArray[1]; + assertEquals(EMFCompareRCPUIMessages.getString("ThreeWayComparisonGroupProvider.left.label"), //$NON-NLS-1$ + leftGroup.getName()); + children = leftGroup.getChildren(); + assertEquals(2, children.size()); + assertEquals(2, size(filter(children, MatchResourceNode.class))); + TreeNode fragmentMatchResourceNode = children.get(0); + EList<TreeNode> fragmentMatchResourceNodeChildren = fragmentMatchResourceNode.getChildren(); + assertEquals(1, fragmentMatchResourceNodeChildren.size()); + assertEquals(1, size(filter(fragmentMatchResourceNodeChildren, DiffNode.class))); + Iterable<EObject> fragmentMatchResourceNodeData = transform(fragmentMatchResourceNodeChildren, + TREE_NODE_DATA); + assertEquals(1, Iterables.size(fragmentMatchResourceNodeData)); + assertEquals(1, size(filter(fragmentMatchResourceNodeData, ResourceAttachmentChange.class))); + TreeNode rootMatchResourceNode = children.get(1); + assertEquals(0, rootMatchResourceNode.getChildren().size()); + + // Right group + IDifferenceGroup rightGroup = groupsArray[2]; + assertEquals(EMFCompareRCPUIMessages.getString("ThreeWayComparisonGroupProvider.right.label"), //$NON-NLS-1$ + rightGroup.getName()); + children = rightGroup.getChildren(); + assertEquals(2, children.size()); + assertEquals(2, size(filter(children, MatchResourceNode.class))); + for (TreeNode treeNode : children) { + children = treeNode.getChildren(); + assertEquals(0, children.size()); + } + } + + /** + * Test that a {@link ResourceAttachmentChange} is only display once in {@link DefaultGroupProvider}. This + * test is related to <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=508294"</a> + */ + @Test + public void testResourceAttachmentChangeInDefaultComparisonGroupProvider() { + DefaultGroupProvider defaultComparisonGroup = new DefaultGroupProvider(); + Collection<? extends IDifferenceGroup> groups = defaultComparisonGroup.getGroups(comp); + assertNotNull(groups); + assertEquals(1, groups.size()); + IDifferenceGroup defaultGroup = groups.iterator().next(); + List<? extends TreeNode> children = defaultGroup.getChildren(); + assertEquals(2, children.size()); + assertEquals(2, size(filter(children, MatchResourceNode.class))); + TreeNode fragmentMatchResourceNode = children.get(0); + EList<TreeNode> fragmentMatchResourceNodeChildren = fragmentMatchResourceNode.getChildren(); + assertEquals(1, fragmentMatchResourceNodeChildren.size()); + assertEquals(1, size(filter(fragmentMatchResourceNodeChildren, DiffNode.class))); + Iterable<EObject> fragmentMatchResourceNodeData = transform(fragmentMatchResourceNodeChildren, + TREE_NODE_DATA); + assertEquals(1, Iterables.size(fragmentMatchResourceNodeData)); + assertEquals(1, size(filter(fragmentMatchResourceNodeData, ResourceAttachmentChange.class))); + TreeNode rootMatchResourceNode = children.get(1); + assertEquals(0, rootMatchResourceNode.getChildren().size()); + } + + /** + * Test that a {@link ResourceAttachmentChange} is only display once in {@link KindGroupProvider}. This + * test is related to <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=508294"</a> + */ + @Test + public void testResourceAttachmentChangeInByKindComparisonGroupProvider() { + KindGroupProvider kindComparisonGroup = new KindGroupProvider(); + Collection<? extends IDifferenceGroup> groups = kindComparisonGroup.getGroups(comp); + assertNotNull(groups); + assertEquals(4, groups.size()); + IDifferenceGroup[] groupsArray = groups.toArray(new IDifferenceGroup[4]); + + // Addition group + IDifferenceGroup additionGroup = groupsArray[0]; + assertEquals(EMFCompareRCPUIMessages.getString("KindGroupProvider.addition.label"), //$NON-NLS-1$ + additionGroup.getName()); + List<? extends TreeNode> children = additionGroup.getChildren(); + assertEquals(2, children.size()); + assertEquals(2, size(filter(children, MatchResourceNode.class))); + for (TreeNode treeNode : children) { + children = treeNode.getChildren(); + assertEquals(0, children.size()); + } + + // Deletion group + IDifferenceGroup deletionGroup = groupsArray[1]; + assertEquals(EMFCompareRCPUIMessages.getString("KindGroupProvider.deletion.label"), //$NON-NLS-1$ + deletionGroup.getName()); + children = deletionGroup.getChildren(); + assertEquals(2, children.size()); + assertEquals(2, size(filter(children, MatchResourceNode.class))); + TreeNode fragmentMatchResourceNode = children.get(0); + EList<TreeNode> fragmentMatchResourceNodeChildren = fragmentMatchResourceNode.getChildren(); + assertEquals(1, fragmentMatchResourceNodeChildren.size()); + assertEquals(1, size(filter(fragmentMatchResourceNodeChildren, DiffNode.class))); + Iterable<EObject> fragmentMatchResourceNodeData = transform(fragmentMatchResourceNodeChildren, + TREE_NODE_DATA); + assertEquals(1, Iterables.size(fragmentMatchResourceNodeData)); + assertEquals(1, size(filter(fragmentMatchResourceNodeData, ResourceAttachmentChange.class))); + TreeNode rootMatchResourceNode = children.get(1); + assertEquals(0, rootMatchResourceNode.getChildren().size()); + + // Change group + IDifferenceGroup changeGroup = groupsArray[2]; + assertEquals(EMFCompareRCPUIMessages.getString("KindGroupProvider.change.label"), //$NON-NLS-1$ + changeGroup.getName()); + children = changeGroup.getChildren(); + assertEquals(2, children.size()); + assertEquals(2, size(filter(children, MatchResourceNode.class))); + for (TreeNode treeNode : children) { + children = treeNode.getChildren(); + assertEquals(0, children.size()); + } + + // Move group + IDifferenceGroup moveGroup = groupsArray[3]; + assertEquals(EMFCompareRCPUIMessages.getString("KindGroupProvider.move.label"), //$NON-NLS-1$ + moveGroup.getName()); + children = moveGroup.getChildren(); + assertEquals(2, children.size()); + assertEquals(2, size(filter(children, MatchResourceNode.class))); + for (TreeNode treeNode : children) { + children = treeNode.getChildren(); + assertEquals(0, children.size()); + } + } + + /** + * Test that a {@link ResourceAttachmentChange} is only display once in {@link ByResourceGroupProvider}. + * This test is related to <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=508294"</a> + */ + @Test + public void testResourceAttachmentChangeInByResourceComparisonGroupProvider() { + ByResourceGroupProvider resourceComparisonGroup = new ByResourceGroupProvider(); + Collection<? extends IDifferenceGroup> groups = resourceComparisonGroup.getGroups(comp); + assertNotNull(groups); + assertEquals(1, groups.size()); + IDifferenceGroup byResourceGroup = groups.iterator().next(); + List<? extends TreeNode> children = byResourceGroup.getChildren(); + assertEquals(2, children.size()); + assertEquals(2, size(filter(children, MatchResourceNode.class))); + TreeNode fragmentMatchResourceNode = children.get(0); + EList<TreeNode> fragmentMatchResourceNodeChildren = fragmentMatchResourceNode.getChildren(); + assertEquals(1, fragmentMatchResourceNodeChildren.size()); + assertEquals(1, size(filter(fragmentMatchResourceNodeChildren, DiffNode.class))); + Iterable<EObject> fragmentMatchResourceNodeData = transform(fragmentMatchResourceNodeChildren, + TREE_NODE_DATA); + assertEquals(1, Iterables.size(fragmentMatchResourceNodeData)); + assertEquals(1, size(filter(fragmentMatchResourceNodeData, ResourceAttachmentChange.class))); + TreeNode rootMatchResourceNode = children.get(1); + assertEquals(0, rootMatchResourceNode.getChildren().size()); + } + +} diff --git a/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/ResourceAttachmentChangeInGroupsInputData.java b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/ResourceAttachmentChangeInGroupsInputData.java new file mode 100644 index 000000000..5ba333431 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/ResourceAttachmentChangeInGroupsInputData.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2016 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.rcp.ui.tests.structuremergeviewer.groups.data.nodes.resourceattachmentchange; + +import java.io.IOException; + +import org.eclipse.emf.compare.tests.edit.data.ResourceScopeProvider; +import org.eclipse.emf.compare.tests.framework.AbstractInputData; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; + +public class ResourceAttachmentChangeInGroupsInputData extends AbstractInputData implements ResourceScopeProvider { + + public Resource getLeft() throws IOException { + ResourceSet rSet = new ResourceSetImpl(); + Resource resource = loadFromClassLoader("left/left.nodes"); + rSet.getResources().add(resource); + return resource; + } + + public Resource getRight() throws IOException { + ResourceSet rSet = new ResourceSetImpl(); + Resource resource = loadFromClassLoader("right/right.nodes"); + rSet.getResources().add(resource); + Resource fragment = loadFromClassLoader("right/fragment.nodes"); + rSet.getResources().add(fragment); + return resource; + } + + public Resource getOrigin() throws IOException { + ResourceSet rSet = new ResourceSetImpl(); + Resource resource = loadFromClassLoader("origin/origin.nodes"); + rSet.getResources().add(resource); + Resource fragment = loadFromClassLoader("origin/fragment.nodes"); + rSet.getResources().add(fragment); + return resource; + } +} diff --git a/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/left/left.nodes b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/left/left.nodes new file mode 100644 index 000000000..3a9424aa9 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/left/left.nodes @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_ORexoLlNEeGmS9ESxeCLvg" name="root">
+ <containmentRef1 xmi:id="_QE6YYAcQEeKTxJtDIb3mMw" name="fragmented"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/origin/fragment.nodes b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/origin/fragment.nodes new file mode 100644 index 000000000..27bbfc1a5 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/origin/fragment.nodes @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_QE6YYAcQEeKTxJtDIb3mMw" name="fragmented"/>
\ No newline at end of file diff --git a/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/origin/origin.nodes b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/origin/origin.nodes new file mode 100644 index 000000000..b75ab1666 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/origin/origin.nodes @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_ORexoLlNEeGmS9ESxeCLvg" name="root">
+ <containmentRef1 href="fragment.nodes#_QE6YYAcQEeKTxJtDIb3mMw"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/right/fragment.nodes b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/right/fragment.nodes new file mode 100644 index 000000000..27bbfc1a5 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/right/fragment.nodes @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_QE6YYAcQEeKTxJtDIb3mMw" name="fragmented"/>
\ No newline at end of file diff --git a/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/right/right.nodes b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/right/right.nodes new file mode 100644 index 000000000..b75ab1666 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/data/nodes/resourceattachmentchange/right/right.nodes @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<nodes:Node xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:nodes="http://www.eclipse.org/emf/compare/tests/nodes" xmi:id="_ORexoLlNEeGmS9ESxeCLvg" name="root">
+ <containmentRef1 href="fragment.nodes#_QE6YYAcQEeKTxJtDIb3mMw"/>
+</nodes:Node>
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/provider/AbstractTestTreeNodeItemProviderAdapter.java b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/provider/AbstractTestTreeNodeItemProviderAdapter.java index b204c8e0e..b7967c0c5 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/provider/AbstractTestTreeNodeItemProviderAdapter.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/structuremergeviewer/groups/provider/AbstractTestTreeNodeItemProviderAdapter.java @@ -31,6 +31,9 @@ import org.eclipse.emf.compare.scope.IComparisonScope; import org.eclipse.emf.compare.tests.edit.data.ResourceScopeProvider; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.resource.ResourceSet; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.edit.provider.ITreeItemContentProvider; import org.eclipse.emf.edit.tree.TreeNode; import org.junit.Before; @@ -62,8 +65,37 @@ public class AbstractTestTreeNodeItemProviderAdapter { * @throws IOException */ public static Comparison getComparison(ResourceScopeProvider scopeProvider) throws IOException { - final IComparisonScope scope = new DefaultComparisonScope(scopeProvider.getLeft(), - scopeProvider.getRight(), scopeProvider.getOrigin()); + Resource left = scopeProvider.getLeft(); + ResourceSet leftResourceSet = null; + if (left != null) { + leftResourceSet = left.getResourceSet(); + if (leftResourceSet != null) { + EcoreUtil.resolveAll(leftResourceSet); + } + } + Resource right = scopeProvider.getRight(); + ResourceSet rightResourceSet = null; + if (right != null) { + rightResourceSet = right.getResourceSet(); + if (rightResourceSet != null) { + EcoreUtil.resolveAll(rightResourceSet); + } + } + Resource origin = scopeProvider.getOrigin(); + ResourceSet originResourceSet = null; + if (origin != null) { + originResourceSet = origin.getResourceSet(); + if (originResourceSet != null) { + EcoreUtil.resolveAll(originResourceSet); + } + } + + final IComparisonScope scope; + if (leftResourceSet != null && rightResourceSet != null) { + scope = new DefaultComparisonScope(leftResourceSet, rightResourceSet, originResourceSet); + } else { + scope = new DefaultComparisonScope(left, right, origin); + } final Builder builder = EMFCompare.builder(); EMFCompareBuilderConfigurator.createDefault().configure(builder); return builder.build().compare(scope); diff --git a/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/suite/AllTests.java b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/suite/AllTests.java index 65a6da209..e8f865081 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/suite/AllTests.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui.tests/src/org/eclipse/emf/compare/rcp/ui/tests/suite/AllTests.java @@ -21,6 +21,7 @@ import org.eclipse.emf.compare.rcp.ui.tests.mergeviewer.item.MergeViewerItemTest import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.filters.TechnicalitiesFilterTests; import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.filters.TestFeatureMapDifferencesFilter; import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups.ConflictsGroupTest; +import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups.ResourceAttachmentChangeInGroupsTest; import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups.TestBasicDifferenceGroupImpl; import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups.provider.TestComparisonTreeNodeItemProviderSpec; import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups.provider.TestMatchTreeNodeItemProviderSpec; @@ -47,7 +48,7 @@ import junit.textui.TestRunner; TestBasicDifferenceGroupImpl.class, BugsTestSuite.class, TestFeatureMapDifferencesFilter.class, RCPMatchEngineFactoryRegistryTest.class, ThreeWayComparisonGroupProviderTest.class, ConflictsGroupTest.class, MatchAccessorTest.class, TechnicalitiesFilterTests.class, - MatchOfContainmentReferenceChangeAdapterTest.class }) + MatchOfContainmentReferenceChangeAdapterTest.class, ResourceAttachmentChangeInGroupsTest.class }) public class AllTests { /** * Launches the test with the given arguments. diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/BasicDifferenceGroupImpl.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/BasicDifferenceGroupImpl.java index ff5af1fdc..12a0c9c4b 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/BasicDifferenceGroupImpl.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/BasicDifferenceGroupImpl.java @@ -477,9 +477,11 @@ public class BasicDifferenceGroupImpl extends AdapterImpl implements IDifference * The diff to add */ protected void addDiffNode(MatchNode matchNode, Diff diff) { - DiffNode diffNode = createDiffNode(diff); - handleRefiningDiffs(diffNode); - matchNode.addDiffNode(diffNode); + if (!(diff instanceof ResourceAttachmentChange)) { + DiffNode diffNode = createDiffNode(diff); + handleRefiningDiffs(diffNode); + matchNode.addDiffNode(diffNode); + } } /** diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java index a08a901d8..f26ed2fde 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ByResourceGroupProvider.java @@ -128,7 +128,9 @@ public class ByResourceGroupProvider extends AbstractDifferenceGroupProvider { || isUnderResourceWithURI(match.getOrigin(), matchResource.getOriginURI())) { MatchNode matchNode = createMatchNode(match); populateMatchNode(matchNode); - matchResourceNode.addMatchNode(matchNode); + if (!matchNode.getChildren().isEmpty()) { + matchResourceNode.addMatchNode(matchNode); + } } } diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java index 60664fa94..1e3fc07d2 100644 --- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java +++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java @@ -65,6 +65,8 @@ import org.eclipse.emf.compare.provider.utils.IStyledString.Style; import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareRCPUIMessages; import org.eclipse.emf.compare.rcp.ui.internal.configuration.SideLabelProvider; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.nodes.ConflictNode; +import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.nodes.DiffNode; +import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.nodes.MatchNode; import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.AbstractDifferenceGroupProvider; import org.eclipse.emf.compare.rcp.ui.structuremergeviewer.groups.IDifferenceGroup; import org.eclipse.emf.compare.scope.IComparisonScope; @@ -277,6 +279,21 @@ public class ThreeWayComparisonGroupProvider extends AbstractDifferenceGroupProv ret.append(getName()); return ret; } + + /** + * In the conflicts group, we want to be able to see the ResourceAttachmentChanges. + * + * @param matchNode + * The given match node + * @param diff + * The diff to add + */ + @Override + protected void addDiffNode(MatchNode matchNode, Diff diff) { + DiffNode diffNode = createDiffNode(diff); + handleRefiningDiffs(diffNode); + matchNode.addDiffNode(diffNode); + } } /** |