Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikaël Barbero2013-04-26 13:56:33 +0000
committerMikaël Barbero2013-04-26 13:56:33 +0000
commit99272ad25efb56e19fe65eb9dd58026582475876 (patch)
tree984a9f2df952974f9be951621a7973bb1a626490
parent3d5a02981db7b589ba91b9dec91efeda9aa03e69 (diff)
downloadorg.eclipse.emf.compare-99272ad25efb56e19fe65eb9dd58026582475876.tar.gz
org.eclipse.emf.compare-99272ad25efb56e19fe65eb9dd58026582475876.tar.xz
org.eclipse.emf.compare-99272ad25efb56e19fe65eb9dd58026582475876.zip
[406445] copy all should also work in 2 ways
Previously, it was only able to do its work on 3 ways, or on 2 ways from left to right. The CopyAllNonConflictingCommand has been deprecated as long as it was containing a broken filter that should be done externally. Without this filter the Command become unnecessary.
-rw-r--r--plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/command/impl/CopyAllNonConflictingCommand.java2
-rw-r--r--plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/domain/ICompareEditingDomain.java1
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/EMFCompareContentMergeViewer.java42
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/text/EMFCompareTextMergeViewer.java45
4 files changed, 75 insertions, 15 deletions
diff --git a/plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/command/impl/CopyAllNonConflictingCommand.java b/plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/command/impl/CopyAllNonConflictingCommand.java
index 1c8cfebee..1c989c99b 100644
--- a/plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/command/impl/CopyAllNonConflictingCommand.java
+++ b/plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/command/impl/CopyAllNonConflictingCommand.java
@@ -31,8 +31,10 @@ import org.eclipse.emf.ecore.change.util.ChangeRecorder;
* LEFT if copying from left to right) and <b>not</b> in a conflicting state.
* </p>
*
+ * @deprecated should use {@link CopyCommand} instead and give already filtered differences.
* @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a>
*/
+@Deprecated
public class CopyAllNonConflictingCommand extends AbstractCopyCommand {
/**
diff --git a/plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/domain/ICompareEditingDomain.java b/plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/domain/ICompareEditingDomain.java
index 649d9e833..d798272ed 100644
--- a/plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/domain/ICompareEditingDomain.java
+++ b/plugins/org.eclipse.emf.compare.edit/src/org/eclipse/emf/compare/domain/ICompareEditingDomain.java
@@ -41,6 +41,7 @@ public interface ICompareEditingDomain {
/**
* @since 3.0
*/
+ @Deprecated
Command createCopyAllNonConflictingCommand(List<? extends Diff> differences, boolean leftToRight,
IMerger.Registry mergerRegistry);
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/EMFCompareContentMergeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/EMFCompareContentMergeViewer.java
index a2b9b2e1c..56d49d20b 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/EMFCompareContentMergeViewer.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/EMFCompareContentMergeViewer.java
@@ -10,9 +10,15 @@
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer;
+import static com.google.common.collect.Iterables.filter;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
+
import java.util.Collection;
import java.util.EventObject;
import java.util.Iterator;
+import java.util.List;
import java.util.ResourceBundle;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -25,9 +31,10 @@ import org.eclipse.compare.internal.Utilities;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CommandStackListener;
-import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.DifferenceSource;
+import org.eclipse.emf.compare.DifferenceState;
import org.eclipse.emf.compare.domain.ICompareEditingDomain;
import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.util.DynamicObject;
import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.util.EMFCompareColor;
@@ -42,6 +49,7 @@ import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.IMergeViewer.MergeVie
import org.eclipse.emf.compare.rcp.ui.internal.mergeviewer.item.IMergeViewerItem;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.IDifferenceFilter;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.impl.SubDiffElementsFilter;
+import org.eclipse.emf.compare.utils.EMFComparePredicates;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.ToolBarManager;
@@ -361,14 +369,34 @@ public abstract class EMFCompareContentMergeViewer extends ContentMergeViewer im
* @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer#copy(boolean)
*/
@Override
- protected void copy(boolean leftToRight) {
- EList<Diff> differences = getComparison().getDifferences();
+ protected void copy(final boolean leftToRight) {
+ final List<Diff> differences;
+
+ if (getComparison().isThreeWay()) {
+ differences = ImmutableList.copyOf(filter(getComparison().getDifferences(),
+ new Predicate<Diff>() {
+ public boolean apply(Diff diff) {
+ final boolean unresolved = diff.getState() == DifferenceState.UNRESOLVED;
+ final boolean nonConflictual = diff.getConflict() == null;
+ final boolean fromLeftToRight = leftToRight
+ && diff.getSource() == DifferenceSource.LEFT;
+ final boolean fromRightToLeft = !leftToRight
+ && diff.getSource() == DifferenceSource.RIGHT;
+ return unresolved && nonConflictual && (fromLeftToRight || fromRightToLeft);
+ }
+ }));
+ } else {
+ differences = ImmutableList.copyOf(filter(getComparison().getDifferences(), EMFComparePredicates
+ .hasState(DifferenceState.UNRESOLVED)));
+ }
- final Command copyCommand = getEditingDomain().createCopyAllNonConflictingCommand(differences,
- leftToRight, EMFCompareRCPPlugin.getDefault().getMergerRegistry());
+ if (differences.size() > 0) {
+ final Command copyCommand = getEditingDomain().createCopyCommand(differences, leftToRight,
+ EMFCompareRCPPlugin.getDefault().getMergerRegistry());
- getEditingDomain().getCommandStack().execute(copyCommand);
- refresh();
+ getEditingDomain().getCommandStack().execute(copyCommand);
+ refresh();
+ }
}
/**
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/text/EMFCompareTextMergeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/text/EMFCompareTextMergeViewer.java
index 55a381550..668e7f144 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/text/EMFCompareTextMergeViewer.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/text/EMFCompareTextMergeViewer.java
@@ -10,10 +10,15 @@
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.text;
+import static com.google.common.collect.Iterables.filter;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import java.util.Collections;
import java.util.EventObject;
+import java.util.List;
import java.util.ResourceBundle;
import java.util.Set;
@@ -32,6 +37,7 @@ import org.eclipse.emf.compare.AttributeChange;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.Conflict;
import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.DifferenceSource;
import org.eclipse.emf.compare.DifferenceState;
import org.eclipse.emf.compare.Match;
import org.eclipse.emf.compare.command.ICompareCopyCommand;
@@ -40,6 +46,7 @@ import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.util.DynamicOb
import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.provider.AttributeChangeNode;
import org.eclipse.emf.compare.rcp.EMFCompareRCPPlugin;
import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareConstants;
+import org.eclipse.emf.compare.utils.EMFComparePredicates;
import org.eclipse.emf.compare.utils.IEqualityHelper;
import org.eclipse.emf.compare.utils.ReferenceUtil;
import org.eclipse.emf.ecore.EAttribute;
@@ -125,22 +132,44 @@ public class EMFCompareTextMergeViewer extends TextMergeViewer implements IPrope
}
/**
+ * @return the fComparison
+ */
+ protected final Comparison getComparison() {
+ return (Comparison)getCompareConfiguration().getProperty(EMFCompareConstants.COMPARE_RESULT);
+ }
+
+ /**
* {@inheritDoc}
*
* @see org.eclipse.compare.contentmergeviewer.TextMergeViewer#copy(boolean)
*/
@Override
- protected void copy(boolean leftToRight) {
- Object input = getInput();
- if (input instanceof AttributeChangeNode) {
- final AttributeChange attributeChange = ((AttributeChangeNode)input).getTarget();
- final Comparison comparison = attributeChange.getMatch().getComparison();
+ protected void copy(final boolean leftToRight) {
+ final List<Diff> differences;
+
+ if (getComparison().isThreeWay()) {
+ differences = ImmutableList.copyOf(filter(getComparison().getDifferences(),
+ new Predicate<Diff>() {
+ public boolean apply(Diff diff) {
+ final boolean unresolved = diff.getState() == DifferenceState.UNRESOLVED;
+ final boolean nonConflictual = diff.getConflict() == null;
+ final boolean fromLeftToRight = leftToRight
+ && diff.getSource() == DifferenceSource.LEFT;
+ final boolean fromRightToLeft = !leftToRight
+ && diff.getSource() == DifferenceSource.RIGHT;
+ return unresolved && nonConflictual && (fromLeftToRight || fromRightToLeft);
+ }
+ }));
+ } else {
+ differences = ImmutableList.copyOf(filter(getComparison().getDifferences(), EMFComparePredicates
+ .hasState(DifferenceState.UNRESOLVED)));
+ }
- final Command copyCommand = getEditingDomain().createCopyAllNonConflictingCommand(
- comparison.getDifferences(), leftToRight,
+ if (differences.size() > 0) {
+ final Command copyCommand = getEditingDomain().createCopyCommand(differences, leftToRight,
EMFCompareRCPPlugin.getDefault().getMergerRegistry());
- getEditingDomain().getCommandStack().execute(copyCommand);
+ getEditingDomain().getCommandStack().execute(copyCommand);
refresh();
}
}

Back to the top