Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAxel Richard2015-09-14 15:08:44 +0000
committerAxel RICHARD2015-09-24 14:39:10 +0000
commit22248a081fcb594d7a8730cc0438540e092dc97e (patch)
treeee86cb86f3e6feaa4ead08371953d7a2ce9eea3a
parent3410ddeb2a72e45ae68e8f705a5d38669b5f2f97 (diff)
downloadorg.eclipse.emf.compare-22248a081fcb594d7a8730cc0438540e092dc97e.tar.gz
org.eclipse.emf.compare-22248a081fcb594d7a8730cc0438540e092dc97e.tar.xz
org.eclipse.emf.compare-22248a081fcb594d7a8730cc0438540e092dc97e.zip
[464739] ResourceLocationChanges become ResourceattachmentChanges.MOVE
ResourceLocationChanges are now deprecated. They are replaced by ResourceAttachmentChanges of kind Move instead. Change-Id: Ic66d5551a08b45a508d27038f264a8412fff4ed7 Signed-off-by: Axel Richard <axel.richard@obeo.fr>
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.ide.ui.papyrus/src/org/eclipse/emf/compare/diagram/ide/ui/papyrus/internal/postprocessor/AddEquivalencesBetweenPapyrusRenames.java35
-rw-r--r--plugins/org.eclipse.emf.compare.egit/src/org/eclipse/emf/compare/egit/internal/postprocessor/EgitPostProcessor.java26
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui.tests.git/src/org/eclipse/emf/compare/ide/ui/tests/merge/RenamedControlledResourceTests.java31
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/contentmergeviewer/accessor/factory/impl/ResourceLocationChangeAccessorFactory.java4
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/contentmergeviewer/accessor/impl/ResourceLocationChangeAccessorImpl.java4
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/BasicDifferenceGroupImpl.java5
-rw-r--r--plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/structuremergeviewer/groups/impl/ThreeWayComparisonGroupProvider.java22
-rw-r--r--plugins/org.eclipse.emf.compare.rcp/plugin.xml4
-rw-r--r--plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/conflict/DefaultConflictDetector.java26
-rw-r--r--plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/diff/DefaultDiffEngine.java44
-rw-r--r--plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/diff/DiffBuilder.java11
-rw-r--r--plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/IMerger.java2
-rw-r--r--plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/ResourceAttachmentChangeMerger.java64
-rw-r--r--plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/ResourceLocationChangeMerger.java6
14 files changed, 140 insertions, 144 deletions
diff --git a/plugins/org.eclipse.emf.compare.diagram.ide.ui.papyrus/src/org/eclipse/emf/compare/diagram/ide/ui/papyrus/internal/postprocessor/AddEquivalencesBetweenPapyrusRenames.java b/plugins/org.eclipse.emf.compare.diagram.ide.ui.papyrus/src/org/eclipse/emf/compare/diagram/ide/ui/papyrus/internal/postprocessor/AddEquivalencesBetweenPapyrusRenames.java
index 6afadeacc..5b3d3509e 100644
--- a/plugins/org.eclipse.emf.compare.diagram.ide.ui.papyrus/src/org/eclipse/emf/compare/diagram/ide/ui/papyrus/internal/postprocessor/AddEquivalencesBetweenPapyrusRenames.java
+++ b/plugins/org.eclipse.emf.compare.diagram.ide.ui.papyrus/src/org/eclipse/emf/compare/diagram/ide/ui/papyrus/internal/postprocessor/AddEquivalencesBetweenPapyrusRenames.java
@@ -11,14 +11,19 @@
package org.eclipse.emf.compare.diagram.ide.ui.papyrus.internal.postprocessor;
import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Predicates.and;
+import static com.google.common.base.Predicates.instanceOf;
+import static com.google.common.collect.Iterables.filter;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.ofKind;
import com.google.common.collect.LinkedHashMultimap;
import com.google.common.collect.Multimap;
import org.eclipse.emf.common.util.Monitor;
import org.eclipse.emf.compare.Comparison;
-import org.eclipse.emf.compare.MatchResource;
-import org.eclipse.emf.compare.ResourceLocationChange;
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.DifferenceKind;
+import org.eclipse.emf.compare.ResourceAttachmentChange;
import org.eclipse.emf.compare.diagram.ide.ui.papyrus.internal.CompareUIPapyrusMessages;
import org.eclipse.papyrus.uml.tools.model.UmlModel;
@@ -40,7 +45,7 @@ public class AddEquivalencesBetweenPapyrusRenames {
private final Monitor monitor;
/** Index used to easily find changes. */
- private final Multimap<String, ResourceLocationChange> changesByTrimmedURI = LinkedHashMultimap.create(
+ private final Multimap<String, ResourceAttachmentChange> changesByTrimmedURI = LinkedHashMultimap.create(
10, 4);
/**
@@ -60,20 +65,20 @@ public class AddEquivalencesBetweenPapyrusRenames {
public void run() {
monitor.subTask(CompareUIPapyrusMessages.getString("AddEquivalencesBetweenPapyrusRenames.TaskLabel")); //$NON-NLS-1$
indexLocationChanges();
- for (ResourceLocationChange resourceLocationChange : changesByTrimmedURI.values()) {
- final String baseLocation = resourceLocationChange.getBaseLocation();
- if (baseLocation.endsWith(UML_EXTENSION)) {
- addEquivalences(resourceLocationChange);
+ for (ResourceAttachmentChange resourceAttachmentChange : changesByTrimmedURI.values()) {
+ final String resourceURI = resourceAttachmentChange.getResourceURI();
+ if (resourceURI.endsWith(UML_EXTENSION)) {
+ addEquivalences(resourceAttachmentChange);
}
}
}
/** Index the location changes in the model. */
private void indexLocationChanges() {
- for (MatchResource matchResource : comparison.getMatchedResources()) {
- for (ResourceLocationChange change : matchResource.getLocationChanges()) {
- changesByTrimmedURI.put(getIndexKey(change), change);
- }
+ for (Diff change : filter(comparison.getDifferences(), and(
+ instanceOf(ResourceAttachmentChange.class), ofKind(DifferenceKind.MOVE)))) {
+ changesByTrimmedURI.put(getIndexKey((ResourceAttachmentChange)change),
+ (ResourceAttachmentChange)change);
}
}
@@ -83,8 +88,8 @@ public class AddEquivalencesBetweenPapyrusRenames {
* @param umlLocationChange
* The change
*/
- private void addEquivalences(ResourceLocationChange umlLocationChange) {
- for (ResourceLocationChange relatedChange : changesByTrimmedURI.get(getIndexKey(umlLocationChange))) {
+ private void addEquivalences(ResourceAttachmentChange umlLocationChange) {
+ for (ResourceAttachmentChange relatedChange : changesByTrimmedURI.get(getIndexKey(umlLocationChange))) {
if (relatedChange != umlLocationChange
&& relatedChange.getSource() == umlLocationChange.getSource()) {
umlLocationChange.getRequires().add(relatedChange);
@@ -100,8 +105,8 @@ public class AddEquivalencesBetweenPapyrusRenames {
* The change
* @return the key that should identify the given change in the index.
*/
- private String getIndexKey(ResourceLocationChange change) {
- String uri = change.getBaseLocation();
+ private String getIndexKey(ResourceAttachmentChange change) {
+ String uri = change.getResourceURI();
int dot = uri.lastIndexOf("."); //$NON-NLS-1$
if (dot >= 0) {
return uri.substring(0, dot);
diff --git a/plugins/org.eclipse.emf.compare.egit/src/org/eclipse/emf/compare/egit/internal/postprocessor/EgitPostProcessor.java b/plugins/org.eclipse.emf.compare.egit/src/org/eclipse/emf/compare/egit/internal/postprocessor/EgitPostProcessor.java
index 3faf9267d..3d003b814 100644
--- a/plugins/org.eclipse.emf.compare.egit/src/org/eclipse/emf/compare/egit/internal/postprocessor/EgitPostProcessor.java
+++ b/plugins/org.eclipse.emf.compare.egit/src/org/eclipse/emf/compare/egit/internal/postprocessor/EgitPostProcessor.java
@@ -23,6 +23,7 @@ import org.eclipse.emf.compare.diff.IDiffProcessor;
import org.eclipse.emf.compare.ide.internal.utils.StoragePathAdapter;
import org.eclipse.emf.compare.postprocessor.IPostProcessor;
import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
@@ -76,7 +77,7 @@ public class EgitPostProcessor implements IPostProcessor {
*/
public void postDiff(Comparison comparison, Monitor monitor) {
for (Match rootMatch : comparison.getMatches()) {
- checkResourceAttachment(rootMatch, monitor);
+ checkForDifferences(rootMatch, monitor);
}
}
@@ -135,6 +136,21 @@ public class EgitPostProcessor implements IPostProcessor {
}
/**
+ * Check all matches.
+ *
+ * @param match
+ * The match that is to be checked.
+ * @param monitor
+ * The monitor to report progress or to check for cancellation.
+ */
+ protected void checkForDifferences(Match match, Monitor monitor) {
+ checkResourceAttachment(match, monitor);
+ for (Match subMatch : match.getSubmatches()) {
+ checkForDifferences(subMatch, monitor);
+ }
+ }
+
+ /**
* Checks whether the given {@link Match}'s sides have changed resources of kind Move. This will only be
* called for {@link Match} elements referencing the root(s) of an EMF Resource. We also create resource
* attachment of kind Move only for non-local comparison. This is why this check is made in the EMf
@@ -244,13 +260,13 @@ public class EgitPostProcessor implements IPostProcessor {
final String leftURI;
final String rightURI;
- if (left != null) {
- leftResource = left.eResource();
+ if (left instanceof InternalEObject) {
+ leftResource = ((InternalEObject)left).eDirectResource();
} else {
leftResource = null;
}
- if (right != null) {
- rightResource = right.eResource();
+ if (right instanceof InternalEObject) {
+ rightResource = ((InternalEObject)right).eDirectResource();
} else {
rightResource = null;
}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui.tests.git/src/org/eclipse/emf/compare/ide/ui/tests/merge/RenamedControlledResourceTests.java b/plugins/org.eclipse.emf.compare.ide.ui.tests.git/src/org/eclipse/emf/compare/ide/ui/tests/merge/RenamedControlledResourceTests.java
index 380192e91..406b0677f 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui.tests.git/src/org/eclipse/emf/compare/ide/ui/tests/merge/RenamedControlledResourceTests.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui.tests.git/src/org/eclipse/emf/compare/ide/ui/tests/merge/RenamedControlledResourceTests.java
@@ -8,9 +8,11 @@
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.tests.merge;
+import static com.google.common.base.Predicates.and;
import static com.google.common.base.Predicates.instanceOf;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.size;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.ofKind;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertSame;
@@ -27,8 +29,9 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.compare.Comparison;
+import org.eclipse.emf.compare.DifferenceKind;
import org.eclipse.emf.compare.ReferenceChange;
-import org.eclipse.emf.compare.ResourceLocationChange;
+import org.eclipse.emf.compare.ResourceAttachmentChange;
import org.eclipse.emf.compare.ide.ui.tests.egit.CompareGitTestCase;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
@@ -39,7 +42,6 @@ import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.jgit.api.ResetCommand.ResetType;
import org.eclipse.jgit.lib.Constants;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
/**
@@ -85,7 +87,6 @@ public class RenamedControlledResourceTests extends CompareGitTestCase {
resource2 = connectResource(iFile2, resourceSet);
}
- @Ignore("Due to Bug 464379, this test no longer works. It needs management of resource renaming via ResourceAttachmentChange.MOVE")
@Test
public void testMergeNoConflictRemoteRename() throws Exception {
setUpRenameNoConflict();
@@ -146,7 +147,6 @@ public class RenamedControlledResourceTests extends CompareGitTestCase {
assertEquals("C1", testC1.getName());
}
- @Ignore("Due to Bug 464379, this test no longer works. It needs management of resource renaming via ResourceAttachmentChange.MOVE")
@Test
public void testMergeNoConflictRemoteRenameLocalChanges() throws Exception {
setUpRenameNoConflictLocalChanges();
@@ -178,7 +178,6 @@ public class RenamedControlledResourceTests extends CompareGitTestCase {
assertEquals("NewClassInRemotelyRenamedPackage", testNewClass.getName());
}
- @Ignore("Due to Bug 464379, this test no longer works. It needs management of resource renaming via ResourceAttachmentChange.MOVE")
@Test
public void testComparisonNoConflictRemoteRename() throws Exception {
setUpRenameNoConflict();
@@ -187,17 +186,17 @@ public class RenamedControlledResourceTests extends CompareGitTestCase {
assertTrue(comparison.getConflicts().isEmpty());
assertEquals(0, comparison.getDiagnostic().getCode());
- // 2 resource matches
- assertEquals(2, comparison.getMatchedResources().size());
+ // 3 resource matches
+ assertEquals(3, comparison.getMatchedResources().size());
// 2 diffs:
// 1- added class "NotConflicting" in MASTER
// 2- renamed file2 to file2_new
assertEquals(2, comparison.getDifferences().size());
assertEquals(1, size(filter(comparison.getDifferences(), instanceOf(ReferenceChange.class))));
- assertEquals(1, size(filter(comparison.getDifferences(), instanceOf(ResourceLocationChange.class))));
+ assertEquals(1, size(filter(comparison.getDifferences(), and(
+ instanceOf(ResourceAttachmentChange.class), ofKind(DifferenceKind.MOVE)))));
}
- @Ignore("Due to Bug 464379, this test no longer works. It needs management of resource renaming via ResourceAttachmentChange.MOVE")
@Test
public void testComparisonNoConflictLocalRename() throws Exception {
setUpRenameNoConflict();
@@ -206,14 +205,15 @@ public class RenamedControlledResourceTests extends CompareGitTestCase {
assertTrue(comparison.getConflicts().isEmpty());
assertEquals(0, comparison.getDiagnostic().getCode());
- // 2 resource matches
- assertEquals(2, comparison.getMatchedResources().size());
+ // 3 resource matches
+ assertEquals(3, comparison.getMatchedResources().size());
// 2 diffs:
// 1- added class "NotConflicting" in MASTER
// 2- renamed file2 to file2_new
assertEquals(2, comparison.getDifferences().size());
assertEquals(1, size(filter(comparison.getDifferences(), instanceOf(ReferenceChange.class))));
- assertEquals(1, size(filter(comparison.getDifferences(), instanceOf(ResourceLocationChange.class))));
+ assertEquals(1, size(filter(comparison.getDifferences(), and(
+ instanceOf(ResourceAttachmentChange.class), ofKind(DifferenceKind.MOVE)))));
}
@Test
@@ -248,12 +248,13 @@ public class RenamedControlledResourceTests extends CompareGitTestCase {
// 2 diffs:
// 2- renamed file2 to file2_new (remote) and to file_other (local)
assertEquals(2, comparison.getDifferences().size());
- assertEquals(2, size(filter(comparison.getDifferences(), instanceOf(ResourceLocationChange.class))));
+ assertEquals(2, size(filter(comparison.getDifferences(), and(
+ instanceOf(ResourceAttachmentChange.class), ofKind(DifferenceKind.MOVE)))));
// 2 diffs in conflict
assertEquals(2, comparison.getConflicts().get(0).getDifferences().size());
// Both a re resource location changes
- assertEquals(2, size(filter(comparison.getConflicts().get(0).getDifferences(),
- instanceOf(ResourceLocationChange.class))));
+ assertEquals(2, size(filter(comparison.getConflicts().get(0).getDifferences(), and(
+ instanceOf(ResourceAttachmentChange.class), ofKind(DifferenceKind.MOVE)))));
}
protected void setUpRenameNoConflict() throws Exception {
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/contentmergeviewer/accessor/factory/impl/ResourceLocationChangeAccessorFactory.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/contentmergeviewer/accessor/factory/impl/ResourceLocationChangeAccessorFactory.java
index cf66e5528..3500f577d 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/contentmergeviewer/accessor/factory/impl/ResourceLocationChangeAccessorFactory.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/contentmergeviewer/accessor/factory/impl/ResourceLocationChangeAccessorFactory.java
@@ -11,6 +11,7 @@
package org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.factory.impl;
import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.compare.ResourceAttachmentChange;
import org.eclipse.emf.compare.ResourceLocationChange;
import org.eclipse.emf.compare.rcp.ui.contentmergeviewer.accessor.legacy.ITypedElement;
import org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.impl.ResourceLocationChangeAccessorImpl;
@@ -22,7 +23,10 @@ import org.eclipse.emf.compare.rcp.ui.mergeviewer.IMergeViewer.MergeViewerSide;
*
* @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
* @since 4.1
+ * @deprecated {@link org.eclipse.emf.compare.ResourceLocationChange}s have been replaced by
+ * {@link ResourceAttachmentChange}s of kind Move.
*/
+@Deprecated
public class ResourceLocationChangeAccessorFactory extends AbstractAccessorFactory {
/**
diff --git a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/contentmergeviewer/accessor/impl/ResourceLocationChangeAccessorImpl.java b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/contentmergeviewer/accessor/impl/ResourceLocationChangeAccessorImpl.java
index 81633859c..81d40f4c4 100644
--- a/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/contentmergeviewer/accessor/impl/ResourceLocationChangeAccessorImpl.java
+++ b/plugins/org.eclipse.emf.compare.rcp.ui/src/org/eclipse/emf/compare/rcp/ui/internal/contentmergeviewer/accessor/impl/ResourceLocationChangeAccessorImpl.java
@@ -15,6 +15,7 @@ import com.google.common.collect.ImmutableList;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.MatchResource;
+import org.eclipse.emf.compare.ResourceAttachmentChange;
import org.eclipse.emf.compare.ResourceLocationChange;
import org.eclipse.emf.compare.rcp.ui.contentmergeviewer.accessor.ICompareAccessor;
import org.eclipse.emf.compare.rcp.ui.contentmergeviewer.accessor.IResourceContentsAccessor;
@@ -32,7 +33,10 @@ import org.eclipse.swt.graphics.Image;
*
* @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
* @since 4.0
+ * @deprecated {@link org.eclipse.emf.compare.ResourceLocationChange}s have been replaced by
+ * {@link ResourceAttachmentChange}s of kind Move.
*/
+@Deprecated
public class ResourceLocationChangeAccessorImpl extends AbstractTypedElementAdapter implements ICompareAccessor {
/** The difference performed. */
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 b7af47ac8..d241354cf 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
@@ -56,7 +56,6 @@ import org.eclipse.emf.compare.Match;
import org.eclipse.emf.compare.MatchResource;
import org.eclipse.emf.compare.ReferenceChange;
import org.eclipse.emf.compare.ResourceAttachmentChange;
-import org.eclipse.emf.compare.ResourceLocationChange;
import org.eclipse.emf.compare.match.impl.NotLoadedFragmentMatch;
import org.eclipse.emf.compare.provider.utils.ComposedStyledString;
import org.eclipse.emf.compare.provider.utils.IStyledString;
@@ -624,10 +623,6 @@ public class BasicDifferenceGroupImpl extends AdapterImpl implements IDifference
TreeNode buildSubTree = buildSubTree(matchResource, racForMatchResource);
if (buildSubTree != null) {
matchResourceSubTrees.add(buildSubTree);
- // Add ResourceLocationChanges
- for (ResourceLocationChange rlc : filter(matchResource.getLocationChanges(), filter)) {
- buildSubTree.getChildren().add(wrap(rlc));
- }
}
}
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 4e1d6fd76..5798a7084 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
@@ -12,8 +12,6 @@ package org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl
import static com.google.common.base.Predicates.and;
import static com.google.common.collect.Iterables.any;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.size;
import static com.google.common.collect.Iterators.concat;
import static com.google.common.collect.Iterators.filter;
import static com.google.common.collect.Iterators.transform;
@@ -42,7 +40,6 @@ import org.eclipse.emf.compare.DifferenceSource;
import org.eclipse.emf.compare.DifferenceState;
import org.eclipse.emf.compare.Match;
import org.eclipse.emf.compare.ReferenceChange;
-import org.eclipse.emf.compare.ResourceLocationChange;
import org.eclipse.emf.compare.internal.utils.ComparisonUtil;
import org.eclipse.emf.compare.provider.utils.ComposedStyledString;
import org.eclipse.emf.compare.provider.utils.IStyledString;
@@ -149,14 +146,8 @@ public class ThreeWayComparisonGroupProvider extends AbstractDifferenceGroupProv
protected TreeNode buildSubTree(Conflict conflict) {
TreeNode ret = wrap(conflict);
- if (isResourceLocationConflict(conflict)) {
- for (Diff diff : conflict.getDifferences()) {
- ret.getChildren().add(wrap(diff));
- }
- } else {
- for (Match match : getComparison().getMatches()) {
- buildSubTree(ret, conflict, match);
- }
+ for (Match match : getComparison().getMatches()) {
+ buildSubTree(ret, conflict, match);
}
return ret;
@@ -164,15 +155,6 @@ public class ThreeWayComparisonGroupProvider extends AbstractDifferenceGroupProv
}
/**
- * @param conflict
- * @return
- */
- private boolean isResourceLocationConflict(Conflict conflict) {
- return conflict != null
- && size(filter(conflict.getDifferences(), ResourceLocationChange.class)) > 0;
- }
-
- /**
* Build sub tree for the given Match.
*
* @param parentNode
diff --git a/plugins/org.eclipse.emf.compare.rcp/plugin.xml b/plugins/org.eclipse.emf.compare.rcp/plugin.xml
index e69340679..c2756d4eb 100644
--- a/plugins/org.eclipse.emf.compare.rcp/plugin.xml
+++ b/plugins/org.eclipse.emf.compare.rcp/plugin.xml
@@ -57,10 +57,6 @@
class="org.eclipse.emf.compare.merge.ConflictMerger"
ranking="100">
</merger>
- <merger
- class="org.eclipse.emf.compare.merge.ResourceLocationChangeMerger"
- ranking="10">
- </merger>
</extension>
<extension
point="org.eclipse.core.contenttype.contentTypes">
diff --git a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/conflict/DefaultConflictDetector.java b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/conflict/DefaultConflictDetector.java
index 7d5323292..cda18e7bc 100644
--- a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/conflict/DefaultConflictDetector.java
+++ b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/conflict/DefaultConflictDetector.java
@@ -113,32 +113,6 @@ public class DefaultConflictDetector implements IConflictDetector {
handlePseudoUnderRealAdd(comparison);
- handleResourceLocationChangesConflicts(comparison);
- }
-
- /**
- * Handles conflicts on resource location changes.
- *
- * @param comparison
- * The originating comparison of those diffs.
- */
- private void handleResourceLocationChangesConflicts(Comparison comparison) {
- for (MatchResource matchResource : comparison.getMatchedResources()) {
- List<ResourceLocationChange> changes = matchResource.getLocationChanges();
- if (changes.size() == 2) {
- Conflict conflict = CompareFactory.eINSTANCE.createConflict();
- conflict.getDifferences().addAll(changes);
- comparison.getConflicts().add(conflict);
- final String origin = matchResource.getOriginURI();
- final String left = matchResource.getLeftURI();
- final String right = matchResource.getRightURI();
- if (origin != null && !origin.equals(left) && !origin.equals(right)) {
- conflict.setKind(ConflictKind.REAL);
- } else {
- conflict.setKind(ConflictKind.PSEUDO);
- }
- }
- }
}
/**
diff --git a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/diff/DefaultDiffEngine.java b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/diff/DefaultDiffEngine.java
index 8adbd62d7..24e853391 100644
--- a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/diff/DefaultDiffEngine.java
+++ b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/diff/DefaultDiffEngine.java
@@ -27,6 +27,7 @@ import org.eclipse.emf.compare.DifferenceSource;
import org.eclipse.emf.compare.EMFCompareMessages;
import org.eclipse.emf.compare.Match;
import org.eclipse.emf.compare.MatchResource;
+import org.eclipse.emf.compare.ResourceAttachmentChange;
import org.eclipse.emf.compare.internal.utils.ComparisonUtil;
import org.eclipse.emf.compare.internal.utils.DiffUtil;
import org.eclipse.emf.compare.utils.IEqualityHelper;
@@ -115,9 +116,6 @@ public class DefaultDiffEngine implements IDiffEngine {
for (Match rootMatch : comparison.getMatches()) {
checkForDifferences(rootMatch, monitor);
}
- for (MatchResource matchResource : comparison.getMatchedResources()) {
- checkResourceLocationChange(matchResource, monitor);
- }
}
/**
@@ -230,44 +228,12 @@ public class DefaultDiffEngine implements IDiffEngine {
* The matchResource that is to be checked.
* @param monitor
* The monitor to report progress or to check for cancellation.
+ * @deprecated {@link org.eclipse.emf.compare.ResourceLocationChange}s have been replaced by
+ * {@link ResourceAttachmentChange}s of kind Move.
*/
+ @Deprecated
protected void checkResourceLocationChange(MatchResource matchResource, Monitor monitor) {
- final String left = matchResource.getLeftURI();
- final String right = matchResource.getRightURI();
-
- // It is a local comparison, we don't handle it for now.
- final Resource leftResource = matchResource.getLeft();
- final Resource rightResource = matchResource.getRight();
- if (!ComparisonUtil.bothResourceHaveResourceSet(leftResource, rightResource)
- || !ComparisonUtil.bothArePlatformResourcesAndOnlyOneExists(leftResource, rightResource)) {
- return;
- }
-
- if (matchResource.getComparison().isThreeWay()) {
- final String origin = matchResource.getOriginURI();
- // If a side of the comparison is null, then it is not a renaming, it is a deletion of a resource.
- if (left == null || right == null || origin == null) {
- return;
- }
- if (!left.equals(right) && left.equals(origin)) {
- // Only right location has changed
- getDiffProcessor().resourceLocationChange(matchResource, left, right, DifferenceKind.CHANGE,
- DifferenceSource.RIGHT);
- } else if (!right.equals(left) && right.equals(origin)) {
- // Only left location has changed
- getDiffProcessor().resourceLocationChange(matchResource, right, left, DifferenceKind.CHANGE,
- DifferenceSource.LEFT);
- } else if (!origin.equals(left) && !origin.equals(right)) {
- // left & right locations have changed
- getDiffProcessor().resourceLocationChange(matchResource, origin, left, DifferenceKind.CHANGE,
- DifferenceSource.LEFT);
- getDiffProcessor().resourceLocationChange(matchResource, origin, right,
- DifferenceKind.CHANGE, DifferenceSource.RIGHT);
- }
- } else if (left != null && right != null && !left.equals(right)) {
- getDiffProcessor().resourceLocationChange(matchResource, left, right, DifferenceKind.CHANGE,
- DifferenceSource.LEFT);
- }
+ // Nothing to do here.
}
/**
diff --git a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/diff/DiffBuilder.java b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/diff/DiffBuilder.java
index c97be21d7..6cadec727 100644
--- a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/diff/DiffBuilder.java
+++ b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/diff/DiffBuilder.java
@@ -19,7 +19,6 @@ import org.eclipse.emf.compare.Match;
import org.eclipse.emf.compare.MatchResource;
import org.eclipse.emf.compare.ReferenceChange;
import org.eclipse.emf.compare.ResourceAttachmentChange;
-import org.eclipse.emf.compare.ResourceLocationChange;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
@@ -104,14 +103,12 @@ public class DiffBuilder implements IDiffProcessor {
* @see org.eclipse.emf.compare.diff.IDiffProcessor#resourceLocationChange(org.eclipse.emf.compare.
* MatchResource, java.lang.String, java.lang.String org.eclipse.emf.compare.DifferenceKind,
* org.eclipse.emf.compare.DifferenceSource)
+ * @deprecated {@link org.eclipse.emf.compare.ResourceLocationChange}s have been replaced by
+ * {@link ResourceAttachmentChange}s of kind Move.
*/
+ @Deprecated
public void resourceLocationChange(MatchResource matchResource, String baseLocation,
String changedLocation, DifferenceKind kind, DifferenceSource source) {
- final ResourceLocationChange change = CompareFactory.eINSTANCE.createResourceLocationChange();
- change.setBaseLocation(baseLocation);
- change.setChangedLocation(changedLocation);
- change.setKind(kind);
- change.setSource(source);
- matchResource.getLocationChanges().add(change);
+ // Nothing to do here.
}
}
diff --git a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/IMerger.java b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/IMerger.java
index 383eb04ae..1fd6cb4d8 100644
--- a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/IMerger.java
+++ b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/IMerger.java
@@ -193,8 +193,6 @@ public interface IMerger {
featureMapMerger.setRanking(defaultRanking);
final IMerger resourceAttachmentMerger = new ResourceAttachmentChangeMerger();
resourceAttachmentMerger.setRanking(defaultRanking);
- final IMerger resourceLocationMerger = new ResourceLocationChangeMerger();
- resourceLocationMerger.setRanking(defaultRanking);
final IMerger pseudoConflictMerger = new PseudoConflictMerger();
pseudoConflictMerger.setRanking(pseudoConflictRanking);
final IMerger conflictMerger = new ConflictMerger();
diff --git a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/ResourceAttachmentChangeMerger.java b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/ResourceAttachmentChangeMerger.java
index 26b3511cf..3e5809030 100644
--- a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/ResourceAttachmentChangeMerger.java
+++ b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/ResourceAttachmentChangeMerger.java
@@ -11,9 +11,11 @@
*******************************************************************************/
package org.eclipse.emf.compare.merge;
+import java.io.IOException;
import java.util.Collections;
import java.util.List;
+import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.Diff;
@@ -113,7 +115,55 @@ public class ResourceAttachmentChangeMerger extends AbstractMerger {
* Tells us whether we are to add an object on the left or right side.
*/
protected void move(ResourceAttachmentChange diff, boolean rightToLeft) {
- addInTarget(diff, rightToLeft);
+ final Match match = diff.getMatch();
+ final Comparison comparison = match.getComparison();
+ final Resource expectedContainer = findOrCreateTargetResource(match, rightToLeft);
+
+ if (expectedContainer == null) {
+ // TODO log
+ diff.setState(DifferenceState.UNRESOLVED);
+ return;
+ }
+
+ // This is a move, match.getRight() & match.getLeft() can't be null
+ final EObject sourceValue;
+ if (rightToLeft) {
+ sourceValue = match.getRight();
+ } else {
+ sourceValue = match.getLeft();
+ }
+
+ final EObject expectedValue;
+ if (rightToLeft) {
+ expectedValue = match.getLeft();
+ } else {
+ expectedValue = match.getRight();
+ }
+
+ // We have the container, reference and value. We need to know the insertion index.
+ final Resource initialResource = sourceValue.eResource();
+ final Resource oldResource = expectedValue.eResource();
+ final List<EObject> sourceList = initialResource.getContents();
+ final List<EObject> targetList = expectedContainer.getContents();
+ final int insertionIndex = findInsertionIndex(comparison, sourceList, targetList, expectedValue);
+ addAt(targetList, expectedValue, insertionIndex);
+
+ // Copy XMI ID when applicable.
+ if (initialResource instanceof XMIResource && expectedContainer instanceof XMIResource) {
+ ((XMIResource)expectedContainer).setID(expectedValue, ((XMIResource)initialResource)
+ .getID(sourceValue));
+ }
+
+ // If after a move of a {@link ResourceAttachmentChange} the initial resource is empty, we have to
+ // delete this resource
+ EList<EObject> contents = oldResource.getContents();
+ if (contents == null || contents.isEmpty()) {
+ try {
+ oldResource.delete(Collections.emptyMap());
+ } catch (IOException e) {
+ // FIXME log exception.
+ }
+ }
}
/**
@@ -320,10 +370,14 @@ public class ResourceAttachmentChangeMerger extends AbstractMerger {
currentFromSourceSide = matchCurrent.getLeft();
}
- // Case of control/uncontrol
- final URI relativeTargetURI = sourceResource.getURI().deresolve(currentFromSourceSide.getURI());
-
- return relativeTargetURI.resolve(currentResource.getURI());
+ if (currentFromSourceSide != null) {
+ // Case of control/uncontrol
+ final URI relativeTargetURI = sourceResource.getURI().deresolve(currentFromSourceSide.getURI());
+ return relativeTargetURI.resolve(currentResource.getURI());
+ } else {
+ // Case of move
+ return sourceResource.getURI();
+ }
}
/**
diff --git a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/ResourceLocationChangeMerger.java b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/ResourceLocationChangeMerger.java
index bee630e1e..5e5e332cd 100644
--- a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/ResourceLocationChangeMerger.java
+++ b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/merge/ResourceLocationChangeMerger.java
@@ -19,6 +19,7 @@ import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.DifferenceSource;
import org.eclipse.emf.compare.MatchResource;
+import org.eclipse.emf.compare.ResourceAttachmentChange;
import org.eclipse.emf.compare.ResourceLocationChange;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
@@ -28,7 +29,10 @@ import org.eclipse.emf.ecore.resource.ResourceSet;
* This specific implementation of {@link AbstractMerger} will be used to merge resource location changes.
*
* @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
+ * @deprecated {@link org.eclipse.emf.compare.ResourceLocationChange}s have been replaced by
+ * {@link ResourceAttachmentChange}s of kind Move.
*/
+@Deprecated
public class ResourceLocationChangeMerger extends AbstractMerger {
/**
@@ -37,7 +41,7 @@ public class ResourceLocationChangeMerger extends AbstractMerger {
* @see org.eclipse.emf.compare.merge.IMerger#isMergerFor(org.eclipse.emf.compare.Diff)
*/
public boolean isMergerFor(Diff target) {
- return target instanceof ResourceLocationChange;
+ return false;
}
@Override

Back to the top