Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMikaƫl Barbero2013-06-23 21:16:25 +0000
committerAxel Richard2013-07-16 08:56:24 +0000
commit51c49e147dbd1113ac4c9ec22a4d735a4cb0f580 (patch)
treef4b035fdc0cb2bb5ea17b7d8415c8dddf62d51b8 /plugins/org.eclipse.emf.compare.ide.ui/src
parentba590393675ff110a533ebd23eef897b6b23b7e0 (diff)
downloadorg.eclipse.emf.compare-51c49e147dbd1113ac4c9ec22a4d735a4cb0f580.tar.gz
org.eclipse.emf.compare-51c49e147dbd1113ac4c9ec22a4d735a4cb0f580.tar.xz
org.eclipse.emf.compare-51c49e147dbd1113ac4c9ec22a4d735a4cb0f580.zip
Refactor Groups.
-IDifferenceGroup are now Adapters. -Use TreeNode as new ItemProviders instead of EDiffNodes. -Add a new Group: By Resource. Change-Id: I26b451997ce42ce37cee266bb0d9e80c07287984
Diffstat (limited to 'plugins/org.eclipse.emf.compare.ide.ui/src')
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/contentmergeviewer/text/EMFCompareTextMergeViewer.java13
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareInputAdapter.java (renamed from plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/AbstractEDiffNode.java)82
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareInputComparer.java (renamed from plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/DiffNodeComparer.java)190
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeRuler.java34
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeViewer.java134
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java45
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerContentProvider.java439
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerLabelProvider.java64
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/AbstractMergeAllHandler.java (renamed from plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/AbstractMergedAllTo.java)2
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/AbstractMergeHandler.java (renamed from plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/AbstractMergedTo.java)17
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergeAllToLeftHandler.java (renamed from plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergedAllToLeft.java)2
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergeAllToRightHandler.java (renamed from plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergedAllToRight.java)2
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergeToLeftHandler.java (renamed from plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergedToLeft.java)2
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergeToRightHandler.java (renamed from plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergedToRight.java)2
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/AcceptRejectChangePropertyTester.java2
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/DiffSelectedPropertyTester.java11
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/MergedToPropertyTester.java2
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/AttributeChangeNode.java42
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ComparisonNode.java44
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/DiffNode.java127
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/EquivalenceNode.java43
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/MatchNode.java122
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/MatchResourceNode.java43
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ReferenceChangeNode.java42
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ResourceAttachmentChangeNode.java42
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/TreeCompareInputAdapterFactory.java (renamed from plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/CompareNodeAdapterFactory.java)147
-rw-r--r--plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/TreeNodeCompareInput.java (renamed from plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ConflictNode.java)74
27 files changed, 416 insertions, 1353 deletions
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 ce0816fef..890b8acc5 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
@@ -60,7 +60,7 @@ import org.eclipse.emf.compare.ide.ui.internal.EMFCompareIDEUIPlugin;
import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.util.DynamicObject;
import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.util.RedoAction;
import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.util.UndoAction;
-import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.provider.AttributeChangeNode;
+import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.CompareInputAdapter;
import org.eclipse.emf.compare.ide.ui.internal.util.SWTUtil;
import org.eclipse.emf.compare.rcp.EMFCompareRCPPlugin;
import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareConstants;
@@ -278,8 +278,10 @@ public class EMFCompareTextMergeViewer extends TextMergeViewer implements IPrope
protected void copyDiff(boolean leftToRight) {
Object input = getInput();
- if (input instanceof AttributeChangeNode) {
- final AttributeChange attributeChange = ((AttributeChangeNode)input).getTarget();
+ if (input instanceof CompareInputAdapter
+ && ((CompareInputAdapter)input).getComparisonObject() instanceof AttributeChange) {
+ final AttributeChange attributeChange = (AttributeChange)((CompareInputAdapter)input)
+ .getComparisonObject();
final Command copyCommand = getEditingDomain().createCopyCommand(
Collections.singletonList(attributeChange), leftToRight,
@@ -404,8 +406,9 @@ public class EMFCompareTextMergeViewer extends TextMergeViewer implements IPrope
public void run() {
// When we leave the current input
Object oldInput = getInput();
- if (oldInput instanceof AttributeChangeNode) {
- final AttributeChange diff = ((AttributeChangeNode)oldInput).getTarget();
+ if (oldInput instanceof CompareInputAdapter) {
+ final AttributeChange diff = (AttributeChange)((CompareInputAdapter)oldInput)
+ .getComparisonObject();
final EAttribute eAttribute = diff.getAttribute();
final Match match = diff.getMatch();
final IEqualityHelper equalityHelper = match.getComparison().getEqualityHelper();
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/AbstractEDiffNode.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareInputAdapter.java
index a9a448ecc..6f995bdb2 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/AbstractEDiffNode.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareInputAdapter.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012 Obeo.
+ * 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
@@ -16,7 +16,6 @@ import org.eclipse.compare.structuremergeviewer.ICompareInput;
import org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.SafeRunner;
-import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
@@ -25,9 +24,11 @@ import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.Match;
import org.eclipse.emf.compare.MatchResource;
import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.accessor.AccessorAdapter;
+import org.eclipse.emf.compare.provider.AdapterFactoryUtil;
import org.eclipse.emf.compare.rcp.ui.EMFCompareRCPUIPlugin;
import org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.factory.IAccessorFactory;
-import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.tree.TreeNode;
import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.swt.graphics.Image;
@@ -35,10 +36,10 @@ import org.eclipse.swt.graphics.Image;
/**
* @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
*/
-public abstract class AbstractEDiffNode extends AdapterImpl implements ICompareInput {
+public abstract class CompareInputAdapter extends AdapterImpl implements ICompareInput {
/**
- *
+ * Store the listeners for notifications.
*/
private final ListenerList fListener;
@@ -53,11 +54,16 @@ public abstract class AbstractEDiffNode extends AdapterImpl implements ICompareI
* @param adapterFactory
* the factory.
*/
- public AbstractEDiffNode(AdapterFactory adapterFactory) {
+ public CompareInputAdapter(AdapterFactory adapterFactory) {
fAdapterFactory = adapterFactory;
fListener = new ListenerList();
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.notify.impl.AdapterImpl#isAdapterForType(java.lang.Object)
+ */
@Override
public boolean isAdapterForType(Object type) {
return type == fAdapterFactory;
@@ -100,7 +106,7 @@ public abstract class AbstractEDiffNode extends AdapterImpl implements ICompareI
final ICompareInputChangeListener listener = (ICompareInputChangeListener)listeners[i];
SafeRunnable runnable = new SafeRunnable() {
public void run() throws Exception {
- listener.compareInputChanged(AbstractEDiffNode.this);
+ listener.compareInputChanged(CompareInputAdapter.this);
}
};
SafeRunner.run(runnable);
@@ -110,6 +116,13 @@ public abstract class AbstractEDiffNode extends AdapterImpl implements ICompareI
/**
* {@inheritDoc}
+ */
+ public EObject getComparisonObject() {
+ return ((TreeNode)getTarget()).getData();
+ }
+
+ /**
+ * {@inheritDoc}
*
* @see org.eclipse.compare.structuremergeviewer.ICompareInput#copy(boolean)
*/
@@ -117,10 +130,15 @@ public abstract class AbstractEDiffNode extends AdapterImpl implements ICompareI
}
+ /**
+ * Returns the appropriate {@link IAccessorFactory} from the accessor factory registry.
+ *
+ * @return the appropriate {@link IAccessorFactory}.
+ */
protected IAccessorFactory getAccessorFactoryForTarget() {
IAccessorFactory.Registry factoryRegistry = EMFCompareRCPUIPlugin.getDefault()
.getAccessorFactoryRegistry();
- return factoryRegistry.getHighestRankingFactory(getTarget());
+ return factoryRegistry.getHighestRankingFactory(getComparisonObject());
}
/**
@@ -129,26 +147,40 @@ public abstract class AbstractEDiffNode extends AdapterImpl implements ICompareI
* @see org.eclipse.compare.ITypedElement#getImage()
*/
public Image getImage() {
- Image ret = null;
- Adapter adapter = getAdapterFactory().adapt(target, IItemLabelProvider.class);
- if (adapter instanceof IItemLabelProvider) {
- Object imageObject = ((IItemLabelProvider)adapter).getImage(target);
- ret = ExtendedImageRegistry.getInstance().getImage(imageObject);
- }
- return ret;
+ Object imageObject = AdapterFactoryUtil.getImage(getAdapterFactory(), getComparisonObject());
+ return ExtendedImageRegistry.getInstance().getImage(imageObject);
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getKind()
+ */
public int getKind() {
+ Notifier notifier = getComparisonObject();
+ boolean isThreeWay = false;
+ if (notifier instanceof Diff) {
+ isThreeWay = ((Diff)notifier).getMatch().getComparison().isThreeWay();
+ } else if (notifier instanceof Match) {
+ isThreeWay = ((Match)notifier).getComparison().isThreeWay();
+ } else if (notifier instanceof Conflict) {
+ isThreeWay = true;
+ } else if (notifier instanceof MatchResource) {
+ isThreeWay = ((MatchResource)notifier).getComparison().isThreeWay();
+ }
+ if (isThreeWay) {
+ return Differencer.CONFLICTING;
+ }
return Differencer.NO_CHANGE;
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getName()
+ */
public String getName() {
- String ret = null;
- Adapter adapter = getAdapterFactory().adapt(target, IItemLabelProvider.class);
- if (adapter instanceof IItemLabelProvider) {
- ret = ((IItemLabelProvider)adapter).getText(target);
- }
- return ret;
+ return AdapterFactoryUtil.getText(getAdapterFactory(), getComparisonObject());
}
/**
@@ -158,7 +190,7 @@ public abstract class AbstractEDiffNode extends AdapterImpl implements ICompareI
*/
public ITypedElement getAncestor() {
final ITypedElement ret;
- Notifier notifier = getTarget();
+ Notifier notifier = getComparisonObject();
boolean isThreeWay = false;
if (notifier instanceof Diff) {
isThreeWay = ((Diff)notifier).getMatch().getComparison().isThreeWay();
@@ -173,7 +205,7 @@ public abstract class AbstractEDiffNode extends AdapterImpl implements ICompareI
IAccessorFactory accessorFactory = getAccessorFactoryForTarget();
if (accessorFactory != null) {
org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.legacy.ITypedElement typedElement = accessorFactory
- .createAncestor(getAdapterFactory(), getTarget());
+ .createAncestor(getAdapterFactory(), getComparisonObject());
if (typedElement != null) {
ret = AccessorAdapter.adapt(typedElement);
} else {
@@ -198,7 +230,7 @@ public abstract class AbstractEDiffNode extends AdapterImpl implements ICompareI
IAccessorFactory accessorFactory = getAccessorFactoryForTarget();
if (accessorFactory != null) {
org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.legacy.ITypedElement typedElement = accessorFactory
- .createLeft(getAdapterFactory(), getTarget());
+ .createLeft(getAdapterFactory(), getComparisonObject());
if (typedElement != null) {
ret = AccessorAdapter.adapt(typedElement);
} else {
@@ -220,7 +252,7 @@ public abstract class AbstractEDiffNode extends AdapterImpl implements ICompareI
IAccessorFactory accessorFactory = getAccessorFactoryForTarget();
if (accessorFactory != null) {
org.eclipse.emf.compare.rcp.ui.internal.contentmergeviewer.accessor.legacy.ITypedElement typedElement = accessorFactory
- .createRight(getAdapterFactory(), getTarget());
+ .createRight(getAdapterFactory(), getComparisonObject());
if (typedElement != null) {
ret = AccessorAdapter.adapt(typedElement);
} else {
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/DiffNodeComparer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareInputComparer.java
index cbb779b68..320fc4048 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/DiffNodeComparer.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/CompareInputComparer.java
@@ -1,95 +1,95 @@
-/*******************************************************************************
- * Copyright (c) 2012 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.ide.ui.internal.structuremergeviewer;
-
-import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.jface.viewers.IElementComparer;
-
-/**
- * We'll use this in order to compare our diff nodes through their target's {@link Object#equals(Object)}
- * instead of the nodes' own equals (which only resorts to instance equality).
- * <p>
- * Note that this will fall back to the default behavior for anything that is not an
- * {@link AbstractEDiffElement}.
- * </p>
- * <p>
- * This class most likely breaks the implicit contract of equals() since we are comparing AbstractEDiffElement
- * through two different means : if we have a target, use it... otherwise fall back to instance equality. Both
- * equals() and hashCode() follow this same rule.
- * </p>
- *
- * @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a>
- */
-public class DiffNodeComparer implements IElementComparer {
- /** Our delegate comparer. May be {@code null}. */
- private IElementComparer delegate;
-
- /**
- * Constructs this comparer given the previous one that was installed on this viewer.
- *
- * @param delegate
- * The comparer to which we should delegate our default behavior. May be {@code null}.
- */
- public DiffNodeComparer(IElementComparer delegate) {
- this.delegate = delegate;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.jface.viewers.IElementComparer#equals(java.lang.Object, java.lang.Object)
- */
- public boolean equals(Object a, Object b) {
- final boolean equal;
- if (a instanceof Adapter && b instanceof Adapter) {
- final Notifier targetA = ((Adapter)a).getTarget();
- if (targetA == null) {
- // Fall back to default behavior
- equal = a.equals(b);
- } else {
- equal = targetA.equals(((Adapter)b).getTarget());
- }
- } else if (delegate != null) {
- equal = delegate.equals(a, b);
- } else if (a != null) {
- equal = a.equals(b);
- } else {
- equal = b == null;
- }
- return equal;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.jface.viewers.IElementComparer#hashCode(java.lang.Object)
- */
- public int hashCode(Object element) {
- final int hashCode;
- if (element instanceof Adapter) {
- final Notifier target = ((Adapter)element).getTarget();
- if (target == null) {
- // Fall back to default behavior
- hashCode = element.hashCode();
- } else {
- hashCode = target.hashCode();
- }
- } else if (delegate != null) {
- hashCode = delegate.hashCode(element);
- } else if (element != null) {
- hashCode = element.hashCode();
- } else {
- hashCode = 0;
- }
- return hashCode;
- }
-}
+/*******************************************************************************
+ * 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.ide.ui.internal.structuremergeviewer;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.jface.viewers.IElementComparer;
+
+/**
+ * We'll use this in order to compare our diff nodes through their target's {@link Object#equals(Object)}
+ * instead of the nodes' own equals (which only resorts to instance equality).
+ * <p>
+ * Note that this will fall back to the default behavior for anything that is not an
+ * {@link AbstractEDiffElement}.
+ * </p>
+ * <p>
+ * This class most likely breaks the implicit contract of equals() since we are comparing AbstractEDiffElement
+ * through two different means : if we have a target, use it... otherwise fall back to instance equality. Both
+ * equals() and hashCode() follow this same rule.
+ * </p>
+ *
+ * @author <a href="mailto:laurent.goubet@obeo.fr">Laurent Goubet</a>
+ */
+public class CompareInputComparer implements IElementComparer {
+ /** Our delegate comparer. May be {@code null}. */
+ private IElementComparer delegate;
+
+ /**
+ * Constructs this comparer given the previous one that was installed on this viewer.
+ *
+ * @param delegate
+ * The comparer to which we should delegate our default behavior. May be {@code null}.
+ */
+ public CompareInputComparer(IElementComparer delegate) {
+ this.delegate = delegate;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.IElementComparer#equals(java.lang.Object, java.lang.Object)
+ */
+ public boolean equals(Object a, Object b) {
+ final boolean equal;
+ if (a instanceof Adapter && b instanceof Adapter) {
+ final Notifier targetA = ((Adapter)a).getTarget();
+ if (targetA == null) {
+ // Fall back to default behavior
+ equal = a.equals(b);
+ } else {
+ equal = targetA.equals(((Adapter)b).getTarget());
+ }
+ } else if (delegate != null) {
+ equal = delegate.equals(a, b);
+ } else if (a != null) {
+ equal = a.equals(b);
+ } else {
+ equal = b == null;
+ }
+ return equal;
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.viewers.IElementComparer#hashCode(java.lang.Object)
+ */
+ public int hashCode(Object element) {
+ final int hashCode;
+ if (element instanceof Adapter) {
+ final Notifier target = ((Adapter)element).getTarget();
+ if (target == null) {
+ // Fall back to default behavior
+ hashCode = element.hashCode();
+ } else {
+ hashCode = target.hashCode();
+ }
+ } else if (delegate != null) {
+ hashCode = delegate.hashCode(element);
+ } else if (element != null) {
+ hashCode = element.hashCode();
+ } else {
+ hashCode = 0;
+ }
+ return hashCode;
+ }
+}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeRuler.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeRuler.java
index 7cefbdb91..5b3c78ecf 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeRuler.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeRuler.java
@@ -31,6 +31,8 @@ import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.internal.utils.DiffUtil;
import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareConstants;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.IDifferenceFilter;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.tree.TreeNode;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
@@ -216,9 +218,12 @@ public class EMFCompareDiffTreeRuler extends Canvas {
Object element = ((IStructuredSelection)selection).getFirstElement();
if (element instanceof Adapter) {
Object target = ((Adapter)element).getTarget();
- if (target instanceof Diff) {
- selectedDiff = (Diff)target;
- computeConsequences();
+ if (target instanceof TreeNode) {
+ EObject data = ((TreeNode)target).getData();
+ if (data instanceof Diff) {
+ selectedDiff = (Diff)data;
+ computeConsequences();
+ }
}
}
}
@@ -274,8 +279,11 @@ public class EMFCompareDiffTreeRuler extends Canvas {
Object data = item.getData();
if (data instanceof Adapter) {
Notifier target = ((Adapter)data).getTarget();
- if (diffs.contains(target)) {
- diffItems.put((Diff)target, item);
+ if (target instanceof TreeNode) {
+ EObject treeNodeData = ((TreeNode)target).getData();
+ if (diffs.contains(treeNodeData)) {
+ diffItems.put((Diff)treeNodeData, item);
+ }
}
}
for (TreeItem child : item.getItems()) {
@@ -496,13 +504,15 @@ public class EMFCompareDiffTreeRuler extends Canvas {
*/
private TreeItem getDeepestVisibleTreeItem(final TreeItem currentItem, final TreeItem deepestVisibleItem) {
TreeItem item = null;
- TreeItem parent = currentItem.getParentItem();
- if (parent == null) {
- item = deepestVisibleItem;
- } else if (parent.getExpanded()) {
- item = getDeepestVisibleTreeItem(parent, deepestVisibleItem);
- } else {
- item = getDeepestVisibleTreeItem(parent, parent);
+ if (!currentItem.isDisposed()) {
+ TreeItem parent = currentItem.getParentItem();
+ if (parent == null) {
+ item = deepestVisibleItem;
+ } else if (parent.getExpanded()) {
+ item = getDeepestVisibleTreeItem(parent, deepestVisibleItem);
+ } else {
+ item = getDeepestVisibleTreeItem(parent, parent);
+ }
}
return item;
}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeViewer.java
index d5171601d..fde2f0e1a 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeViewer.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareDiffTreeViewer.java
@@ -28,6 +28,7 @@ import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.common.notify.Notifier;
+import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.compare.Conflict;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.DifferenceSource;
@@ -44,6 +45,9 @@ import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.Stru
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.IDifferenceGroupProvider;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.StructureMergeViewerGrouper;
import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.DefaultGroupProvider;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.emf.edit.tree.TreeNode;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.MenuManager;
@@ -156,8 +160,7 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer {
setLabelProvider(new DelegatingStyledCellLabelProvider(
new EMFCompareStructureMergeViewerLabelProvider(adapterFactory, this)));
- setContentProvider(new EMFCompareStructureMergeViewerContentProvider(adapterFactory,
- getStructureMergeViewerGrouper(), getStructureMergeViewerFilter(), configuration));
+ setContentProvider(new EMFCompareStructureMergeViewerContentProvider(adapterFactory));
if (parent instanceof CompareViewerSwitchingPane) {
fParent = (CompareViewerSwitchingPane)parent;
@@ -187,7 +190,7 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer {
getControl().addListener(SWT.EraseItem, fEraseItemListener);
// Wrap the defined comparer in our own.
- setComparer(new DiffNodeComparer(super.getComparer()));
+ setComparer(new CompareInputComparer(super.getComparer()));
if (eventBus == null) {
eventBus = new EventBus();
@@ -239,6 +242,13 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer {
@Subscribe
public void recordGroupProviderSelectionChange(IDifferenceGroupProvider differenceGroupProvider) {
+ EList<Adapter> eAdapters = ((Adapter)fRoot).getTarget().eAdapters();
+ IDifferenceGroupProvider oldDifferenceGroupProvider = (IDifferenceGroupProvider)EcoreUtil.getAdapter(
+ eAdapters, IDifferenceGroupProvider.class);
+ if (oldDifferenceGroupProvider != null) {
+ eAdapters.remove(oldDifferenceGroupProvider);
+ }
+ eAdapters.add(differenceGroupProvider);
getCompareConfiguration().setProperty(EMFCompareConstants.SELECTED_GROUP, differenceGroupProvider);
}
@@ -367,7 +377,7 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer {
@Override
public void setComparer(IElementComparer comparer) {
// Wrap this new comparer in our own
- super.setComparer(new DiffNodeComparer(comparer));
+ super.setComparer(new CompareInputComparer(comparer));
}
/**
@@ -522,10 +532,7 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer {
* @return The default group provider that is to be applied on the structure viewer.
*/
public DefaultGroupProvider getDefaultGroupProvider() {
- if (defaultGroupProvider == null) {
- defaultGroupProvider = new DefaultGroupProvider();
- }
- return defaultGroupProvider;
+ return new DefaultGroupProvider();
}
/**
@@ -548,28 +555,38 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer {
@Override
protected Object[] getSortedChildren(Object parentElementOrTreePath) {
Object[] result = super.getSortedChildren(parentElementOrTreePath);
- if (parentElementOrTreePath instanceof Adapter
- && ((Adapter)parentElementOrTreePath).getTarget() instanceof Conflict) {
-
- Collections.sort(Arrays.asList(result), new Comparator<Object>() {
- public int compare(Object o1, Object o2) {
- return getValue(o1) - getValue(o2);
- }
+ if (parentElementOrTreePath instanceof Adapter) {
+ Notifier target = ((Adapter)parentElementOrTreePath).getTarget();
+ if (target instanceof TreeNode) {
+ EObject data = ((TreeNode)target).getData();
+ if (data instanceof Conflict) {
+ Collections.sort(Arrays.asList(result), new Comparator<Object>() {
+ public int compare(Object o1, Object o2) {
+ return getValue(o1) - getValue(o2);
+ }
- public int getValue(Object o) {
- int value = 0;
- if (o instanceof Adapter && ((Adapter)o).getTarget() instanceof Diff) {
- if (((Diff)((Adapter)o).getTarget()).getSource() == DifferenceSource.LEFT) {
- value = 1;
- } else {
- value = 2;
+ public int getValue(Object o) {
+ int value = 0;
+ if (o instanceof Adapter) {
+ Notifier n = ((Adapter)o).getTarget();
+ if (n instanceof TreeNode) {
+ EObject d = ((TreeNode)n).getData();
+ if (d instanceof Diff) {
+ if (((Diff)d).getSource() == DifferenceSource.LEFT) {
+ value = 1;
+ } else {
+ value = 2;
+ }
+ }
+ }
+ }
+ return value;
}
- }
- return value;
+ });
}
- });
-
+ }
}
+
return result;
}
@@ -585,35 +602,42 @@ public class EMFCompareDiffTreeViewer extends DiffTreeViewer {
Object firstElement = ((IStructuredSelection)selection).getFirstElement();
if (firstElement instanceof Adapter) {
Notifier target = ((Adapter)firstElement).getTarget();
- if (target instanceof Diff) {
- TreeItem item = (TreeItem)event.item;
- Object dataTreeItem = item.getData();
- if (dataTreeItem instanceof Adapter) {
- final Set<Diff> unmergeables;
- final Set<Diff> requires;
- Boolean leftToRight = (Boolean)getCompareConfiguration().getProperty(
- EMFCompareConstants.MERGE_WAY);
- boolean ltr = false;
- if (leftToRight == null || leftToRight.booleanValue()) {
- ltr = true;
- }
- boolean leftEditable = getCompareConfiguration().isLeftEditable();
- boolean rightEditable = getCompareConfiguration().isRightEditable();
- boolean bothSidesEditable = leftEditable && rightEditable;
- Diff diff = (Diff)target;
- if ((ltr && (leftEditable || bothSidesEditable))
- || (!ltr && (rightEditable && !leftEditable))) {
- requires = DiffUtil.getRequires(diff, true, diff.getSource());
- unmergeables = DiffUtil.getUnmergeables(diff, true);
- } else {
- requires = DiffUtil.getRequires(diff, false, diff.getSource());
- unmergeables = DiffUtil.getUnmergeables(diff, false);
- }
- final GC g = event.gc;
- if (requires.contains(((Adapter)dataTreeItem).getTarget())) {
- paintItemBackground(g, item, requiredDiffColor);
- } else if (unmergeables.contains(((Adapter)dataTreeItem).getTarget())) {
- paintItemBackground(g, item, unmergeableDiffColor);
+ if (target instanceof TreeNode) {
+ EObject selectionData = ((TreeNode)target).getData();
+ if (selectionData instanceof Diff) {
+ TreeItem item = (TreeItem)event.item;
+ Object dataTreeItem = item.getData();
+ if (dataTreeItem instanceof Adapter) {
+ Notifier targetItem = ((Adapter)dataTreeItem).getTarget();
+ if (targetItem instanceof TreeNode) {
+ EObject dataItem = ((TreeNode)targetItem).getData();
+ final Set<Diff> unmergeables;
+ final Set<Diff> requires;
+ Boolean leftToRight = (Boolean)getCompareConfiguration().getProperty(
+ EMFCompareConstants.MERGE_WAY);
+ boolean ltr = false;
+ if (leftToRight == null || leftToRight.booleanValue()) {
+ ltr = true;
+ }
+ boolean leftEditable = getCompareConfiguration().isLeftEditable();
+ boolean rightEditable = getCompareConfiguration().isRightEditable();
+ boolean bothSidesEditable = leftEditable && rightEditable;
+ Diff diff = (Diff)selectionData;
+ if ((ltr && (leftEditable || bothSidesEditable))
+ || (!ltr && (rightEditable && !leftEditable))) {
+ requires = DiffUtil.getRequires(diff, true, diff.getSource());
+ unmergeables = DiffUtil.getUnmergeables(diff, true);
+ } else {
+ requires = DiffUtil.getRequires(diff, false, diff.getSource());
+ unmergeables = DiffUtil.getUnmergeables(diff, false);
+ }
+ final GC g = event.gc;
+ if (requires.contains(dataItem)) {
+ paintItemBackground(g, item, requiredDiffColor);
+ } else if (unmergeables.contains(dataItem)) {
+ paintItemBackground(g, item, unmergeableDiffColor);
+ }
+ }
}
}
}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java
index a9968c40e..f6c9b4494 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewer.java
@@ -35,7 +35,6 @@ import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CommandStack;
import org.eclipse.emf.common.command.CommandStackListener;
-import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.util.BasicMonitor;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.EMFCompare;
@@ -51,7 +50,6 @@ import org.eclipse.emf.compare.ide.ui.internal.logical.ComparisonScopeBuilder;
import org.eclipse.emf.compare.ide.ui.internal.logical.IdenticalResourceMinimizer;
import org.eclipse.emf.compare.ide.ui.internal.logical.StreamAccessorStorage;
import org.eclipse.emf.compare.ide.ui.internal.logical.SubscriberStorageAccessor;
-import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.provider.ComparisonNode;
import org.eclipse.emf.compare.ide.ui.internal.util.PlatformElementUtil;
import org.eclipse.emf.compare.ide.ui.internal.util.SWTUtil;
import org.eclipse.emf.compare.ide.ui.logical.IModelResolver;
@@ -65,6 +63,8 @@ import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
import org.eclipse.emf.edit.provider.resource.ResourceItemProviderAdapterFactory;
+import org.eclipse.emf.edit.tree.TreeFactory;
+import org.eclipse.emf.edit.tree.TreeNode;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.ITreeViewerListener;
@@ -92,8 +92,10 @@ import org.eclipse.ui.actions.ActionFactory;
*/
public class EMFCompareStructureMergeViewer extends AbstractViewerWrapper implements CommandStackListener {
+ /** The width of the tree ruler. */
private static final int TREE_RULER_WIDTH = 17;
+ /** The adapter factory. */
private ComposedAdapterFactory fAdapterFactory;
/** The tree ruler associated with this viewer. */
@@ -110,10 +112,13 @@ public class EMFCompareStructureMergeViewer extends AbstractViewerWrapper implem
/** The tree viewer. */
private EMFCompareDiffTreeViewer diffTreeViewer;
+ /** The undo action. */
private UndoAction undoAction;
+ /** The redo action. */
private RedoAction redoAction;
+ /** The compare handler service. */
private CompareHandlerService fHandlerService;
/**
@@ -251,6 +256,7 @@ public class EMFCompareStructureMergeViewer extends AbstractViewerWrapper implem
compareInputChanged(ci);
}
+ getViewer().setInput(input);
}
/**
@@ -304,13 +310,17 @@ public class EMFCompareStructureMergeViewer extends AbstractViewerWrapper implem
if (!affectedObjects.isEmpty()) {
// MUST NOT call a setSelection with a list, o.e.compare does not handle it (cf
// org.eclipse.compare.CompareEditorInput#getElement(ISelection))
- final Object adaptedAffectedObject = fAdapterFactory.adapt(getFirst(affectedObjects, null),
- ICompareInput.class);
- SWTUtil.safeAsyncExec(new Runnable() {
- public void run() {
- setSelectionToWidget(new StructuredSelection(adaptedAffectedObject), true);
- }
- });
+ Object first = getFirst(affectedObjects, null);
+ if (first instanceof EObject) {
+ TreeNode treeNode = TreeFactory.eINSTANCE.createTreeNode();
+ treeNode.setData((EObject)first);
+ final Object adaptedAffectedObject = fAdapterFactory.adapt(treeNode, ICompareInput.class);
+ SWTUtil.safeAsyncExec(new Runnable() {
+ public void run() {
+ setSelectionToWidget(new StructuredSelection(adaptedAffectedObject), true);
+ }
+ });
+ }
}
} else {
// FIXME, should recompute the difference, something happened outside of this compare editor
@@ -343,12 +353,12 @@ public class EMFCompareStructureMergeViewer extends AbstractViewerWrapper implem
}
}
- void compareInputChanged(ComparisonNode input, IProgressMonitor monitor) {
+ void compareInputChanged(CompareInputAdapter input, IProgressMonitor monitor) {
ICompareEditingDomain editingDomain = (ICompareEditingDomain)getCompareConfiguration().getProperty(
EMFCompareConstants.EDITING_DOMAIN);
editingDomain.getCommandStack().addCommandStackListener(this);
- compareInputChanged(null, input.getTarget());
+ compareInputChanged(null, (Comparison)input.getComparisonObject());
}
void compareInputChanged(ComparisonScopeInput input, IProgressMonitor monitor) {
@@ -366,7 +376,11 @@ public class EMFCompareStructureMergeViewer extends AbstractViewerWrapper implem
void compareInputChanged(final IComparisonScope scope, final Comparison comparison) {
if (!getControl().isDisposed()) { // guard against disposal
- diffTreeViewer.setRoot(fAdapterFactory.adapt(comparison, ICompareInput.class));
+ TreeNode treeNode = TreeFactory.eINSTANCE.createTreeNode();
+ treeNode.setData(comparison);
+ treeNode.eAdapters().add(diffTreeViewer.getDefaultGroupProvider());
+
+ diffTreeViewer.setRoot(fAdapterFactory.adapt(treeNode, ICompareInput.class));
getCompareConfiguration().setProperty(EMFCompareConstants.COMPARE_RESULT, comparison);
String message = null;
@@ -403,9 +417,9 @@ public class EMFCompareStructureMergeViewer extends AbstractViewerWrapper implem
void compareInputChanged(ICompareInput input, IProgressMonitor monitor) {
if (input != null) {
- if (input instanceof ComparisonNode) {
+ if (input instanceof CompareInputAdapter) {
resourcesShouldBeUnload = false;
- compareInputChanged((ComparisonNode)input, monitor);
+ compareInputChanged((CompareInputAdapter)input, monitor);
} else if (input instanceof ComparisonScopeInput) {
resourcesShouldBeUnload = false;
compareInputChanged((ComparisonScopeInput)input, monitor);
@@ -452,7 +466,8 @@ public class EMFCompareStructureMergeViewer extends AbstractViewerWrapper implem
ResourceSet originResourceSet = null;
if (diffTreeViewer.getRoot() != null) {
- Comparison comparison = (Comparison)((Adapter)diffTreeViewer.getRoot()).getTarget();
+ Comparison comparison = (Comparison)((CompareInputAdapter)diffTreeViewer.getRoot())
+ .getComparisonObject();
Iterator<Match> matchIt = comparison.getMatches().iterator();
if (comparison.isThreeWay()) {
while (matchIt.hasNext()
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerContentProvider.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerContentProvider.java
index 901488d5b..93656cbc7 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerContentProvider.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerContentProvider.java
@@ -10,46 +10,17 @@
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer;
-import static com.google.common.base.Predicates.not;
-import static com.google.common.base.Predicates.or;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.isEmpty;
import static com.google.common.collect.Iterables.toArray;
import static com.google.common.collect.Iterables.transform;
import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
-import java.util.Collection;
-import java.util.LinkedHashSet;
-import java.util.List;
-
-import org.eclipse.compare.CompareConfiguration;
-import org.eclipse.compare.ITypedElement;
import org.eclipse.compare.structuremergeviewer.ICompareInput;
-import org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener;
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notification;
-import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.compare.Comparison;
-import org.eclipse.emf.compare.Conflict;
-import org.eclipse.emf.compare.Diff;
-import org.eclipse.emf.compare.Match;
-import org.eclipse.emf.compare.ReferenceChange;
-import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.provider.ComparisonNode;
-import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareConstants;
-import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.filters.StructureMergeViewerFilter;
-import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.IDifferenceGroup;
-import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.IDifferenceGroupProvider;
-import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.StructureMergeViewerGrouper;
-import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.ThreeWayComparisonGroupProvider;
-import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
-import org.eclipse.swt.graphics.Image;
/**
* Specialized AdapterFactoryContentProvider for the emf compare structure merge viewer.
@@ -58,34 +29,14 @@ import org.eclipse.swt.graphics.Image;
*/
class EMFCompareStructureMergeViewerContentProvider extends AdapterFactoryContentProvider {
- /** The viewer grouper associated with this content provider. */
- private final StructureMergeViewerGrouper fViewerGrouper;
-
- /** The viewer filter associated with this content provider. */
- private final StructureMergeViewerFilter fViewerFilter;
-
- /** The configuration associated with this content provider. */
- private final CompareConfiguration configuration;
-
/**
* Constructs the content provider with the appropriate adapter factory.
*
* @param adapterFactory
* The adapter factory used to construct the content provider.
- * @param structureMergeViewerGrouper
- * The viewer grouper associated with this content provider.
- * @param structureMergeViewerFilter
- * The viewer filter associated with this content provider.
- * @param configuration
- * The configuration associated with this content provider.
*/
- public EMFCompareStructureMergeViewerContentProvider(AdapterFactory adapterFactory,
- StructureMergeViewerGrouper structureMergeViewerGrouper,
- StructureMergeViewerFilter structureMergeViewerFilter, CompareConfiguration configuration) {
+ public EMFCompareStructureMergeViewerContentProvider(AdapterFactory adapterFactory) {
super(adapterFactory);
- this.fViewerGrouper = structureMergeViewerGrouper;
- this.fViewerFilter = structureMergeViewerFilter;
- this.configuration = configuration;
}
/**
@@ -95,25 +46,13 @@ class EMFCompareStructureMergeViewerContentProvider extends AdapterFactoryConten
*/
@Override
public Object getParent(Object element) {
- Object ret;
- if (element instanceof Adapter) {
- ret = getAdapterFactory().adapt(super.getParent(((Adapter)element).getTarget()),
- ICompareInput.class);
- if (ret instanceof ComparisonNode) {
- Comparison root = ((ComparisonNode)ret).getTarget();
- final Iterable<? extends IDifferenceGroup> groups = fViewerGrouper.getGroups(root);
- Collection<IDifferenceGroup> parentGroups = new LinkedHashSet<IDifferenceGroup>();
- for (IDifferenceGroup iDifferenceGroup : groups) {
- parentGroups.add(iDifferenceGroup);
- }
- if (!parentGroups.isEmpty()) {
- ret = parentGroups;
- }
- }
- } else if (element instanceof IDifferenceGroup) {
- ret = getAdapterFactory().adapt(((IDifferenceGroup)element).getComparison(), ICompareInput.class);
+ final Object ret;
+ if (element instanceof ItemProviderAdapter) {
+ ret = super.getParent(element);
+ } else if (element instanceof Adapter) {
+ ret = super.getParent(((Adapter)element).getTarget());
} else {
- ret = null;
+ ret = super.getParent(element);
}
return ret;
}
@@ -126,16 +65,8 @@ class EMFCompareStructureMergeViewerContentProvider extends AdapterFactoryConten
@Override
public final boolean hasChildren(Object element) {
final boolean ret;
- if (element instanceof ComparisonNode) {
- Comparison target = ((ComparisonNode)element).getTarget();
- final Iterable<? extends IDifferenceGroup> groups = fViewerGrouper.getGroups(target);
- if (isEmpty(groups)) {
- ret = super.hasChildren(((Adapter)element).getTarget());
- } else {
- ret = true;
- }
- } else if (element instanceof IDifferenceGroup) {
- ret = !isEmpty(((IDifferenceGroup)element).getDifferences());
+ if (element instanceof ItemProviderAdapter) {
+ ret = super.hasChildren(element);
} else if (element instanceof Adapter) {
ret = super.hasChildren(((Adapter)element).getTarget());
} else {
@@ -151,46 +82,17 @@ class EMFCompareStructureMergeViewerContentProvider extends AdapterFactoryConten
*/
@Override
public final Object[] getChildren(Object element) {
- final Object[] ret;
- if (element instanceof ComparisonNode) {
- Comparison target = ((ComparisonNode)element).getTarget();
- final Iterable<? extends IDifferenceGroup> groups = fViewerGrouper.getGroups(target);
- if (!isEmpty(groups)) {
- ret = toArray(groups, IDifferenceGroup.class);
- } else {
- Iterable<ICompareInput> compareInputs = adapt(super.getChildren(((Adapter)element)
- .getTarget()), getAdapterFactory(), ICompareInput.class);
- ret = toArray(compareInputs, ICompareInput.class);
- }
- } else if (element instanceof IDifferenceGroup) {
- final Comparison target = ((IDifferenceGroup)element).getComparison();
- Iterable<ICompareInput> compareInputs = null;
- if (isThreeWayComparisonGroupProviderEnabled()
- && ("Conflicts".equals(((IDifferenceGroup)element).getName()))) {
- compareInputs = adapt(target.getConflicts(), getAdapterFactory(), ICompareInput.class);
- } else {
- compareInputs = adapt(super.getChildren(target), getAdapterFactory(), ICompareInput.class);
- }
- Iterable<FilteredEDiffNode> filteredCompareInputs = filteredEDiffNodes(filter(compareInputs,
- AbstractEDiffNode.class), ((IDifferenceGroup)element).getDifferences());
- ret = toArray(filteredCompareInputs, FilteredEDiffNode.class);
- } else if (element instanceof FilteredEDiffNode) {
- Notifier target = ((Adapter)element).getTarget();
- final Iterable<Object> children = filteredElements(super.getChildren(target),
- ((FilteredEDiffNode)element).getDifferences());
- Iterable<ICompareInput> compareInputs = adapt(children, getAdapterFactory(), ICompareInput.class);
- Iterable<FilteredEDiffNode> filteredCompareInputs = filteredEDiffNodes(filter(compareInputs,
- AbstractEDiffNode.class), ((FilteredEDiffNode)element).getDifferences());
- ret = toArray(filteredCompareInputs, FilteredEDiffNode.class);
+ final Object[] children;
+ if (element instanceof ItemProviderAdapter) {
+ children = super.getChildren(element);
} else if (element instanceof Adapter) {
- final Iterable<Object> children = Lists.newArrayList(super.getChildren(((Adapter)element)
- .getTarget()));
- Iterable<ICompareInput> compareInputs = adapt(children, getAdapterFactory(), ICompareInput.class);
- ret = toArray(compareInputs, ICompareInput.class);
+ children = super.getChildren(((Adapter)element).getTarget());
} else {
- ret = new Object[0];
+ children = super.getChildren(element);
}
- return ret;
+
+ Iterable<?> compareInputs = adapt(children, getAdapterFactory(), ICompareInput.class);
+ return toArray(compareInputs, Object.class);
}
/**
@@ -204,25 +106,6 @@ class EMFCompareStructureMergeViewerContentProvider extends AdapterFactoryConten
}
/**
- * Checks the state of the three way comparison group provider.
- *
- * @return true, if the three way comparison group provider is enabled, false otherwise.
- */
- private boolean isThreeWayComparisonGroupProviderEnabled() {
- Object property = configuration.getProperty(EMFCompareConstants.SELECTED_GROUP);
- final IDifferenceGroupProvider selectedGroup;
- if (property == null) {
- return false;
- } else {
- selectedGroup = (IDifferenceGroupProvider)property;
- if (selectedGroup instanceof ThreeWayComparisonGroupProvider) {
- return true;
- }
- }
- return false;
- }
-
- /**
* Adapts each elements of the the given <code>iterable</code> to the given <code>type</code> by using the
* given <code>adapterFactory</code>.
*
@@ -236,14 +119,18 @@ class EMFCompareStructureMergeViewerContentProvider extends AdapterFactoryConten
* the target type of adapted elements.
* @return an iterable with element of type <code>type</code>.
*/
- static <T> Iterable<T> adapt(Iterable<?> iterable, final AdapterFactory adapterFactory,
- final Class<T> type) {
+ private static Iterable<?> adapt(Iterable<?> iterable, final AdapterFactory adapterFactory,
+ final Class<?> type) {
Function<Object, Object> adaptFunction = new Function<Object, Object>() {
public Object apply(Object input) {
- return adapterFactory.adapt(input, type);
+ Object ret = adapterFactory.adapt(input, type);
+ if (ret == null) {
+ return input;
+ }
+ return ret;
}
};
- return filter(transform(iterable, adaptFunction), type);
+ return transform(iterable, adaptFunction);
}
/**
@@ -260,278 +147,8 @@ class EMFCompareStructureMergeViewerContentProvider extends AdapterFactoryConten
* the target type of adapted elements
* @return an iterable with element of type <code>type</code>.
*/
- static <T> Iterable<T> adapt(Object[] iterable, final AdapterFactory adapterFactory, final Class<T> type) {
+ private static Iterable<?> adapt(Object[] iterable, final AdapterFactory adapterFactory,
+ final Class<?> type) {
return adapt(Lists.newArrayList(iterable), adapterFactory, type);
}
-
- /**
- * Filter out each element of the given <code>array</code> that should not be contained in the given
- * differences.
- *
- * @param unfiltered
- * the array to filter.
- * @param differences
- * the given iterable of {@link Diff}.
- * @return an iterable of elements that should be contained in the given differences.
- */
- private Iterable<Object> filteredElements(Object[] unfiltered, final Iterable<? extends Diff> differences) {
- return filteredElements(Lists.newArrayList(unfiltered), differences);
- }
-
- /**
- * Filter out each element of the given unflitered iterable that is not part of the given group of
- * differences.
- *
- * @param unfiltered
- * the iterable to filter.
- * @param differences
- * the given iterable of {@link Diff}.
- * @return an iterable of elements that should be contained in the given differences.
- */
- private Iterable<Object> filteredElements(Iterable<Object> unfiltered,
- final Iterable<? extends Diff> differences) {
- final List<? extends Diff> filteredDiffs = ImmutableList.copyOf(filter(differences,
- not(or(fViewerFilter.getPredicates()))));
-
- final Predicate<? super Object> isPartOfTree = new Predicate<Object>() {
- public boolean apply(Object input) {
- return isPartOfGroup(input, filteredDiffs);
- }
- };
-
- return filter(unfiltered, isPartOfTree);
- }
-
- /**
- * Returns whether this object should be contained in the given differences.
- *
- * @param object
- * the object to filter.
- * @param diffGroup
- * the given differences.
- * @return true if the object should be contained in the given differences, false otherwise.
- */
- public static boolean isPartOfGroup(Object object, final Iterable<? extends Diff> differences) {
- final Predicate<? super EObject> isPartOfTree = new Predicate<EObject>() {
- public boolean apply(EObject input) {
- return Iterables.contains(differences, input);
- }
- };
- boolean ret = false;
- if (object instanceof Match) {
- ret = Iterables.any(((Match)object).getAllDifferences(), isPartOfTree);
- } else if (object instanceof Diff) {
- if (!isPartOfTree.apply((Diff)object)) {
- if (object instanceof ReferenceChange
- && ((ReferenceChange)object).getReference().isContainment()) {
- Match match = ((Diff)object).getMatch().getComparison().getMatch(
- ((ReferenceChange)object).getValue());
- if (match != null) {
- ret = Iterables.any(match.getAllDifferences(), isPartOfTree);
- } else {
- ret = false;
- }
- }
- } else {
- ret = true;
- }
- }
- return ret;
- }
-
- /**
- * Creates an iterable of {@link FilteredEDiffNode} from an iterable of {@link AbstractEDiffNode} and an
- * iterable of {@link Diff}.
- *
- * @param iterable
- * the iterable of {@link AbstractEDiffNode} to transform.
- * @param differences
- * the iterable of {@link Diff} to associate with the FilteredEDiffNodes.
- * @return an iterable of {@link FilteredEDiffNode}.
- */
- private Iterable<FilteredEDiffNode> filteredEDiffNodes(Iterable<AbstractEDiffNode> iterable,
- final Iterable<? extends Diff> differences) {
- Function<AbstractEDiffNode, FilteredEDiffNode> adaptFunction = new Function<AbstractEDiffNode, FilteredEDiffNode>() {
- public FilteredEDiffNode apply(AbstractEDiffNode input) {
- return new FilteredEDiffNode(input, differences);
- }
- };
- return transform(iterable, adaptFunction);
- }
-
- /**
- * AbstractEDiffNodes that know a list of differences (from a {@link IDifferenceGroup} or a
- * {@link Conflict}). This class wraps an AbstractEDiffNode and it delegates its interfaces to
- * corresponding AbstractEDiffNode implemented interfaces.
- *
- * @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
- */
- public class FilteredEDiffNode implements ICompareInput, Adapter {
-
- /** The AbstractEDiffNode wrapped. */
- private AbstractEDiffNode fDelegate;
-
- /** The differences associated with the node. */
- private Iterable<? extends Diff> differences;
-
- /**
- * This constructs an instance that wraps this {@link AbstractEDiffNode} and associate it with the
- * given differences.
- *
- * @param delegate
- * the given AbstractEDiffNode.
- * @param differences
- * the given differences (from a {@link IDifferenceGroup} or a {@link Conflict}).
- */
- public FilteredEDiffNode(AbstractEDiffNode delegate, Iterable<? extends Diff> differences) {
- fDelegate = delegate;
- this.differences = differences;
- }
-
- /**
- * Returns the backing delegate instance that methods are forwarded to.
- *
- * @return the wrapped AbstractEDiffNode.
- */
- public AbstractEDiffNode delegate() {
- return fDelegate;
- }
-
- /**
- * Returns the differences associated with the wrapped {@link AbstractEDiffNode}.
- *
- * @return the difference group.
- */
- public Iterable<? extends Diff> getDifferences() {
- return differences;
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getName()
- */
- public String getName() {
- return delegate().getName();
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getImage()
- */
- public Image getImage() {
- return delegate().getImage();
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getKind()
- */
- public int getKind() {
- return delegate().getKind();
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getAncestor()
- */
- public ITypedElement getAncestor() {
- return delegate().getAncestor();
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getLeft()
- */
- public ITypedElement getLeft() {
- return delegate().getLeft();
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.compare.structuremergeviewer.ICompareInput#getRight()
- */
- public ITypedElement getRight() {
- return delegate().getRight();
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.compare.structuremergeviewer.ICompareInput#addCompareInputChangeListener(org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener)
- */
- public void addCompareInputChangeListener(ICompareInputChangeListener listener) {
- delegate().addCompareInputChangeListener(listener);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.compare.structuremergeviewer.ICompareInput#removeCompareInputChangeListener(org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener)
- */
- public void removeCompareInputChangeListener(ICompareInputChangeListener listener) {
- delegate().removeCompareInputChangeListener(listener);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.compare.structuremergeviewer.ICompareInput#copy(boolean)
- */
- public void copy(boolean leftToRight) {
- delegate().copy(leftToRight);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.common.notify.Adapter#notifyChanged(org.eclipse.emf.common.notify.Notification)
- */
- public void notifyChanged(Notification notification) {
- delegate().notifyChanged(notification);
-
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.common.notify.Adapter#getTarget()
- */
- public Notifier getTarget() {
- return delegate().getTarget();
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.common.notify.Adapter#setTarget(org.eclipse.emf.common.notify.Notifier)
- */
- public void setTarget(Notifier newTarget) {
- delegate().setTarget(newTarget);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.common.notify.Adapter#isAdapterForType(Object)
- */
- public boolean isAdapterForType(Object type) {
- return delegate().isAdapterForType(type);
- }
-
- @Override
- public boolean equals(Object obj) {
- return delegate().equals(obj);
- }
-
- @Override
- public int hashCode() {
- return delegate().hashCode();
- }
- }
}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerLabelProvider.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerLabelProvider.java
index 3d96ab33c..b0e7b474a 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerLabelProvider.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/EMFCompareStructureMergeViewerLabelProvider.java
@@ -10,15 +10,11 @@
*******************************************************************************/
package org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer;
-import com.google.common.base.Preconditions;
-
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.compare.ide.ui.internal.util.StyledStringConverter;
import org.eclipse.emf.compare.provider.IItemStyledLabelProvider;
-import org.eclipse.emf.compare.rcp.ui.EMFCompareRCPUIPlugin;
-import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.IDifferenceGroup;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.StyledString;
@@ -34,6 +30,8 @@ import org.eclipse.swt.graphics.Image;
*/
class EMFCompareStructureMergeViewerLabelProvider extends AdapterFactoryLabelProvider.FontAndColorProvider implements IStyledLabelProvider {
+ protected StyledStringConverter styledStringConverter;
+
/**
* Constructor calling super {@link #FontAndColorProvider(AdapterFactory, Viewer)}.
*
@@ -103,15 +101,10 @@ class EMFCompareStructureMergeViewerLabelProvider extends AdapterFactoryLabelPro
@Override
public Image getImage(Object element) {
final Image ret;
- if (element instanceof Adapter) {
+ if (element instanceof ItemProviderAdapter) {
+ ret = super.getImage(element);
+ } else if (element instanceof Adapter) {
ret = super.getImage(((Adapter)element).getTarget());
- } else if (element instanceof IDifferenceGroup) {
- final Image groupImage = ((IDifferenceGroup)element).getImage();
- if (groupImage != null) {
- ret = groupImage;
- } else {
- ret = EMFCompareRCPUIPlugin.getImage("icons/full/toolb16/group.gif"); //$NON-NLS-1$
- }
} else {
ret = super.getImage(element);
}
@@ -128,23 +121,14 @@ class EMFCompareStructureMergeViewerLabelProvider extends AdapterFactoryLabelPro
*/
public StyledString getStyledText(Object element) {
final StyledString ret;
- if (element instanceof Adapter) {
- Notifier target = ((Adapter)element).getTarget();
- StyledString styledText = getStyledText(getAdapterFactory(), target);
- if (styledText == null) {
- ret = new StyledString(super.getText(target));
- } else {
- ret = styledText;
- }
- } else if (element instanceof IDifferenceGroup) {
- StyledStringConverter stringConverter = new StyledStringConverter(getDefaultFont(),
- getDefaultForeground(), getDefaultBackground());
- return stringConverter.toJFaceStyledString(((IDifferenceGroup)element).getStyledName());
+ if (element instanceof ItemProviderAdapter) {
+ ret = getStyledTextFromObject(element);
+ } else if (element instanceof Adapter) {
+ ret = getStyledTextFromObject(((Adapter)element).getTarget());
} else {
- ret = new StyledString(super.getText(element));
+ ret = getStyledTextFromObject(element);
}
return ret;
-
}
/**
@@ -153,27 +137,35 @@ class EMFCompareStructureMergeViewerLabelProvider extends AdapterFactoryLabelPro
* {@link IItemStyledLabelProvider#getStyledText(Object) text}. Returns null if <code>object</code> is
* null.
*
- * @param adapterFactory
- * the adapter factory to adapt from
* @param object
* the object from which we want a text
* @return the text, or null if object is null.
* @throws NullPointerException
* if <code>adapterFactory</code> is null.
*/
- private StyledString getStyledText(final AdapterFactory adapterFactory, final Object object) {
- Preconditions.checkNotNull(adapterFactory);
+ private StyledString getStyledTextFromObject(final Object object) {
if (object == null) {
return null;
}
StyledString ret = null;
- Object itemStyledLabelProvider = adapterFactory.adapt(object, IItemStyledLabelProvider.class);
+ Object itemStyledLabelProvider = getAdapterFactory().adapt(object, IItemStyledLabelProvider.class);
if (itemStyledLabelProvider instanceof IItemStyledLabelProvider) {
- StyledStringConverter stringConverter = new StyledStringConverter(getDefaultFont(),
- getDefaultForeground(), getDefaultBackground());
- ret = stringConverter.toJFaceStyledString(((IItemStyledLabelProvider)itemStyledLabelProvider)
- .getStyledText(object));
+ ret = getStyledStringConverter().toJFaceStyledString(
+ ((IItemStyledLabelProvider)itemStyledLabelProvider).getStyledText(object));
}
return ret;
}
+
+ /**
+ * Returns the StyledStringConverter used to convert emf compare styled strings to jface styled strings.
+ *
+ * @return the styledStringConverter.
+ */
+ protected StyledStringConverter getStyledStringConverter() {
+ if (styledStringConverter == null) {
+ styledStringConverter = new StyledStringConverter(getDefaultFont(), getDefaultForeground(),
+ getDefaultBackground());
+ }
+ return styledStringConverter;
+ }
}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/AbstractMergedAllTo.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/AbstractMergeAllHandler.java
index 0cc28123a..1c9b059b3 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/AbstractMergedAllTo.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/AbstractMergeAllHandler.java
@@ -25,7 +25,7 @@ import org.eclipse.ui.handlers.HandlerUtil;
* @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
* @since 3.0
*/
-public abstract class AbstractMergedAllTo extends AbstractHandler {
+public abstract class AbstractMergeAllHandler extends AbstractHandler {
/** The compare configuration object used to get the compare model. */
private CompareConfiguration configuration;
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/AbstractMergedTo.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/AbstractMergeHandler.java
index ddb017340..50286e710 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/AbstractMergedTo.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/AbstractMergeHandler.java
@@ -19,6 +19,8 @@ import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.handler.util.EMFCompareUIHandlerUtil;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.tree.TreeNode;
import org.eclipse.ui.ISources;
import org.eclipse.ui.handlers.HandlerUtil;
@@ -28,7 +30,7 @@ import org.eclipse.ui.handlers.HandlerUtil;
* @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
* @since 3.0
*/
-public abstract class AbstractMergedTo extends AbstractHandler {
+public abstract class AbstractMergeHandler extends AbstractHandler {
/** The compare configuration object used to get the compare model. */
private CompareConfiguration configuration;
@@ -44,11 +46,14 @@ public abstract class AbstractMergedTo extends AbstractHandler {
setConfiguration(((CompareEditorInput)editorInput).getCompareConfiguration());
Object diffNode = ((CompareEditorInput)editorInput).getSelectedEdition();
if (diffNode instanceof Adapter) {
- Notifier diff = ((Adapter)diffNode).getTarget();
- if (diff instanceof Diff) {
- copyDiff((Diff)diff);
- // Select next diff
- EMFCompareUIHandlerUtil.navigate(true, configuration);
+ Notifier target = ((Adapter)diffNode).getTarget();
+ if (target instanceof TreeNode) {
+ EObject data = ((TreeNode)target).getData();
+ if (data instanceof Diff) {
+ copyDiff((Diff)data);
+ // Select next diff
+ EMFCompareUIHandlerUtil.navigate(true, configuration);
+ }
}
}
}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergedAllToLeft.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergeAllToLeftHandler.java
index 543f4c945..2055cdb88 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergedAllToLeft.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergeAllToLeftHandler.java
@@ -19,7 +19,7 @@ import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.handler.util
* @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
* @since 3.0
*/
-public class MergedAllToLeft extends AbstractMergedAllTo {
+public class MergeAllToLeftHandler extends AbstractMergeAllHandler {
@Override
protected void copyAllDiffs() {
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergedAllToRight.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergeAllToRightHandler.java
index eab8d32f0..b7e83ab97 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergedAllToRight.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergeAllToRightHandler.java
@@ -19,7 +19,7 @@ import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.handler.util
* @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
* @since 3.0
*/
-public class MergedAllToRight extends AbstractMergedAllTo {
+public class MergeAllToRightHandler extends AbstractMergeAllHandler {
@Override
protected void copyAllDiffs() {
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergedToLeft.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergeToLeftHandler.java
index dde61ec92..d20101008 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergedToLeft.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergeToLeftHandler.java
@@ -20,7 +20,7 @@ import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.handler.util
* @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
* @since 3.0
*/
-public class MergedToLeft extends AbstractMergedTo {
+public class MergeToLeftHandler extends AbstractMergeHandler {
@Override
protected void copyDiff(Diff diff) {
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergedToRight.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergeToRightHandler.java
index 5e754f386..660c2335d 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergedToRight.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/MergeToRightHandler.java
@@ -20,7 +20,7 @@ import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.handler.util
* @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
* @since 3.0
*/
-public class MergedToRight extends AbstractMergedTo {
+public class MergeToRightHandler extends AbstractMergeHandler {
@Override
protected void copyDiff(Diff diff) {
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/AcceptRejectChangePropertyTester.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/AcceptRejectChangePropertyTester.java
index a79978c13..da011a225 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/AcceptRejectChangePropertyTester.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/AcceptRejectChangePropertyTester.java
@@ -18,7 +18,7 @@ import org.eclipse.ui.IEditorPart;
/**
* A property tester linked with
- * {@link org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.handler.AbstractMergedTo}. It returns
+ * {@link org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.AbstractMergeHandler.AbstractMergedTo}. It returns
* true when only one model side is editable.
*
* @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/DiffSelectedPropertyTester.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/DiffSelectedPropertyTester.java
index ebad5be65..196385c31 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/DiffSelectedPropertyTester.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/DiffSelectedPropertyTester.java
@@ -17,6 +17,8 @@ import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notifier;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareConstants;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.tree.TreeNode;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorInput;
@@ -46,9 +48,12 @@ public class DiffSelectedPropertyTester extends PropertyTester {
if (selection instanceof IStructuredSelection) {
Object element = ((IStructuredSelection)selection).getFirstElement();
if (element instanceof Adapter) {
- Notifier diffNode = ((Adapter)element).getTarget();
- if (diffNode instanceof Diff) {
- return true;
+ Notifier target = ((Adapter)element).getTarget();
+ if (target instanceof TreeNode) {
+ EObject data = ((TreeNode)target).getData();
+ if (data instanceof Diff) {
+ return true;
+ }
}
}
}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/MergedToPropertyTester.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/MergedToPropertyTester.java
index 75447c35f..3de306ca6 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/MergedToPropertyTester.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/handler/propertytester/MergedToPropertyTester.java
@@ -18,7 +18,7 @@ import org.eclipse.ui.IEditorPart;
/**
* A property tester linked with
- * {@link org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.handler.AbstractMergedTo}. It returns
+ * {@link org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.AbstractMergeHandler.AbstractMergedTo}. It returns
* true when both model sides are editable.
*
* @author <a href="mailto:axel.richard@obeo.fr">Axel Richard</a>
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/AttributeChangeNode.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/AttributeChangeNode.java
deleted file mode 100644
index 8e2e01d19..000000000
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/AttributeChangeNode.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 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.ide.ui.internal.structuremergeviewer.provider;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.compare.AttributeChange;
-
-/**
- * Specific AbstractEDiffNode for {@link AttributeChange} objects.
- *
- * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
- */
-public class AttributeChangeNode extends DiffNode {
-
- /**
- * Creates a node with the given factory.
- *
- * @param adapterFactory
- * the factory given to the super constructor.
- */
- public AttributeChangeNode(AdapterFactory adapterFactory) {
- super(adapterFactory);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.provider.DiffNode#getTarget()
- */
- @Override
- public AttributeChange getTarget() {
- return (AttributeChange)super.getTarget();
- }
-}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ComparisonNode.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ComparisonNode.java
deleted file mode 100644
index 17d94879f..000000000
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ComparisonNode.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 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.ide.ui.internal.structuremergeviewer.provider;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.compare.Comparison;
-import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.AbstractEDiffNode;
-
-/**
- * Specific AbstractEDiffNode for {@link Comparison} objects.
- *
- * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
- */
-public class ComparisonNode extends AbstractEDiffNode {
-
- /**
- * Creates a node with the given factory.
- *
- * @param adapterFactory
- * the factory given to the super constructor.
- */
- public ComparisonNode(AdapterFactory adapterFactory) {
- super(adapterFactory);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.common.notify.impl.AdapterImpl#getTarget()
- */
- @Override
- public Comparison getTarget() {
- return (Comparison)super.getTarget();
- }
-
-}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/DiffNode.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/DiffNode.java
deleted file mode 100644
index 2b3eb1ac5..000000000
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/DiffNode.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 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.ide.ui.internal.structuremergeviewer.provider;
-
-import static com.google.common.collect.Iterables.any;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.hasConflict;
-
-import org.eclipse.compare.structuremergeviewer.Differencer;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.compare.Comparison;
-import org.eclipse.emf.compare.Conflict;
-import org.eclipse.emf.compare.ConflictKind;
-import org.eclipse.emf.compare.Diff;
-import org.eclipse.emf.compare.DifferenceKind;
-import org.eclipse.emf.compare.DifferenceSource;
-import org.eclipse.emf.compare.Match;
-import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.AbstractEDiffNode;
-
-/**
- * Specific {@link AbstractEDiffNode} for {@link Diff} objects.
- *
- * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
- */
-public class DiffNode extends AbstractEDiffNode {
- /**
- * Call {@link AbstractEDiffNode super} constructor.
- *
- * @param adapterFactory
- * the adapter factory
- */
- public DiffNode(AdapterFactory adapterFactory) {
- super(adapterFactory);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.common.notify.impl.AdapterImpl#getTarget()
- */
- @Override
- public Diff getTarget() {
- return (Diff)super.getTarget();
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.AbstractEDiffElement#getKind()
- */
- @Override
- public int getKind() {
- int ret = Differencer.NO_CHANGE;
- final Diff diff = getTarget();
- final DifferenceSource source = diff.getSource();
- final Match match = diff.getMatch();
- final Conflict conflict = diff.getConflict();
- final DifferenceKind diffKind = diff.getKind();
- final Comparison c = match.getComparison();
- if (c.isThreeWay()) {
- switch (source) {
- case LEFT:
- ret |= Differencer.LEFT;
- break;
- case RIGHT:
- ret |= Differencer.RIGHT;
- break;
- default:
- // Cannot happen ... for now.
- break;
- }
- if (conflict != null) {
- ret |= Differencer.CONFLICTING;
- if (conflict.getKind() == ConflictKind.PSEUDO) {
- ret |= Differencer.PSEUDO_CONFLICT;
- }
- } else if (any(diff.getRequiredBy(), hasConflict(ConflictKind.REAL))) {
- ret |= Differencer.CONFLICTING;
- } else if (any(diff.getRequiredBy(), hasConflict(ConflictKind.PSEUDO))) {
- // We know there is no real conflict as that would have been handled above
- ret |= Differencer.CONFLICTING | Differencer.PSEUDO_CONFLICT;
- }
-
- switch (diffKind) {
- case ADD:
- ret |= Differencer.ADDITION;
- break;
- case DELETE:
- ret |= Differencer.DELETION;
- break;
- case CHANGE:
- // fallthrough
- case MOVE:
- ret |= Differencer.CHANGE;
- break;
- default:
- // Cannot happen ... for now
- break;
- }
- } else {
- switch (diffKind) {
- case ADD:
- ret |= Differencer.DELETION;
- break;
- case DELETE:
- ret |= Differencer.ADDITION;
- break;
- case CHANGE:
- // fallthrough
- case MOVE:
- ret |= Differencer.CHANGE;
- break;
- default:
- // Cannot happen ... for now
- break;
- }
- }
- return ret;
- }
-}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/EquivalenceNode.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/EquivalenceNode.java
deleted file mode 100644
index a0f284abe..000000000
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/EquivalenceNode.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 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.ide.ui.internal.structuremergeviewer.provider;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.compare.Equivalence;
-import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.AbstractEDiffNode;
-
-/**
- * Specific AbstractEDiffNode for {@link Equivalence} objects.
- *
- * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
- */
-public class EquivalenceNode extends AbstractEDiffNode {
-
- /**
- * Creates a node with the given factory.
- *
- * @param adapterFactory
- * the factory given to the super constructor.
- */
- public EquivalenceNode(AdapterFactory adapterFactory) {
- super(adapterFactory);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.common.notify.impl.AdapterImpl#getTarget()
- */
- @Override
- public Equivalence getTarget() {
- return (Equivalence)super.getTarget();
- }
-}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/MatchNode.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/MatchNode.java
deleted file mode 100644
index 1ebdefce6..000000000
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/MatchNode.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 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.ide.ui.internal.structuremergeviewer.provider;
-
-import static com.google.common.collect.Iterables.any;
-import static com.google.common.collect.Iterables.isEmpty;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.fromSide;
-import static org.eclipse.emf.compare.utils.EMFComparePredicates.hasConflict;
-
-import com.google.common.base.Predicate;
-
-import org.eclipse.compare.structuremergeviewer.Differencer;
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.compare.ConflictKind;
-import org.eclipse.emf.compare.Diff;
-import org.eclipse.emf.compare.DifferenceSource;
-import org.eclipse.emf.compare.Match;
-import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.AbstractEDiffNode;
-import org.eclipse.emf.ecore.EObject;
-
-/**
- * Specific AbstractEDiffNode for {@link Match} objects.
- *
- * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
- */
-public class MatchNode extends AbstractEDiffNode {
-
- /**
- *
- */
- private static final Predicate<Diff> CONFLICTUAL_DIFF = new Predicate<Diff>() {
- public boolean apply(Diff input) {
- return input != null && input.getConflict() != null;
- }
- };
-
- /**
- * Creates a node with the given factory.
- *
- * @param adapterFactory
- * the factory given to the super constructor.
- */
- public MatchNode(AdapterFactory adapterFactory) {
- super(adapterFactory);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.common.notify.impl.AdapterImpl#getTarget()
- */
- @Override
- public Match getTarget() {
- return (Match)super.getTarget();
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.AbstractEDiffNode#getKind()
- */
- @Override
- public int getKind() {
- int ret = super.getKind();
-
- final EObject ancestor = getTarget().getOrigin();
- final EObject left = getTarget().getLeft();
- final EObject right = getTarget().getRight();
-
- final Iterable<Diff> differences = getTarget().getAllDifferences();
-
- if (getTarget().getComparison().isThreeWay()) {
- /*
- * Differencer.CONFLICTING == Differencer.LEFT | Differencer.RIGHT. With that in mind, all we need
- * to check is whether this is a pseudo conflict, and the kind of diff (deletion, addition).
- */
- if (any(differences, hasConflict(ConflictKind.REAL))) {
- ret |= Differencer.CONFLICTING;
- } else if (any(differences, hasConflict(ConflictKind.PSEUDO))) {
- // "pseudo" does not include the direction bits, we add them both through "CONFLITING"
- ret |= Differencer.CONFLICTING | Differencer.PSEUDO_CONFLICT;
- } else {
- if (any(differences, fromSide(DifferenceSource.LEFT))) {
- ret |= Differencer.LEFT;
- }
- if (any(differences, fromSide(DifferenceSource.RIGHT))) {
- ret |= Differencer.RIGHT;
- }
- }
-
- if (ancestor == null) {
- if (left == null || right == null) {
- ret |= Differencer.ADDITION;
- } else {
- // Can't have all three sides null.
- }
- } else if (left == null || right == null) {
- ret |= Differencer.DELETION;
- } else if (!isEmpty(differences)) {
- ret |= Differencer.CHANGE;
- }
- } else {
- // no direction bit in two-way
- if (left == null) {
- ret |= Differencer.DELETION;
- } else if (right == null) {
- ret |= Differencer.ADDITION;
- } else if (!isEmpty(differences)) {
- ret |= Differencer.CHANGE;
- }
- }
- return ret;
- }
-}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/MatchResourceNode.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/MatchResourceNode.java
deleted file mode 100644
index 6f99dc91d..000000000
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/MatchResourceNode.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 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.ide.ui.internal.structuremergeviewer.provider;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.compare.MatchResource;
-import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.AbstractEDiffNode;
-
-/**
- * Specific AbstractEDiffNode for {@link MatchResource} objects.
- *
- * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
- */
-public class MatchResourceNode extends AbstractEDiffNode {
-
- /**
- * Creates a node with the given factory.
- *
- * @param adapterFactory
- * the factory given to the super constructor.
- */
- public MatchResourceNode(AdapterFactory adapterFactory) {
- super(adapterFactory);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.common.notify.impl.AdapterImpl#getTarget()
- */
- @Override
- public MatchResource getTarget() {
- return (MatchResource)super.getTarget();
- }
-}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ReferenceChangeNode.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ReferenceChangeNode.java
deleted file mode 100644
index 1f91e8a13..000000000
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ReferenceChangeNode.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 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.ide.ui.internal.structuremergeviewer.provider;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.compare.ReferenceChange;
-
-/**
- * Specific AbstractEDiffNode for {@link ReferenceChange} objects.
- *
- * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
- */
-public class ReferenceChangeNode extends DiffNode {
-
- /**
- * Creates a node with the given factory.
- *
- * @param adapterFactory
- * the factory given to the super constructor.
- */
- public ReferenceChangeNode(AdapterFactory adapterFactory) {
- super(adapterFactory);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.provider.DiffNode#getTarget()
- */
- @Override
- public ReferenceChange getTarget() {
- return (ReferenceChange)super.getTarget();
- }
-}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ResourceAttachmentChangeNode.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ResourceAttachmentChangeNode.java
deleted file mode 100644
index b7fab9e89..000000000
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ResourceAttachmentChangeNode.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2012 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.ide.ui.internal.structuremergeviewer.provider;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.compare.ResourceAttachmentChange;
-
-/**
- * Specific AbstractEDiffNode for {@link ResourceAttachmentChange} objects.
- *
- * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
- */
-public class ResourceAttachmentChangeNode extends DiffNode {
-
- /**
- * Creates a node with the given factory.
- *
- * @param adapterFactory
- * the factory given to the super constructor.
- */
- public ResourceAttachmentChangeNode(AdapterFactory adapterFactory) {
- super(adapterFactory);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.provider.DiffNode#getTarget()
- */
- @Override
- public ResourceAttachmentChange getTarget() {
- return (ResourceAttachmentChange)super.getTarget();
- }
-}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/CompareNodeAdapterFactory.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/TreeCompareInputAdapterFactory.java
index 1ed9c125c..fcd156715 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/CompareNodeAdapterFactory.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/TreeCompareInputAdapterFactory.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012 Obeo.
+ * 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
@@ -16,22 +16,17 @@ import java.util.Collection;
import org.eclipse.compare.structuremergeviewer.ICompareInput;
import org.eclipse.emf.common.notify.Adapter;
-import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.Notifier;
-import org.eclipse.emf.compare.util.CompareAdapterFactory;
import org.eclipse.emf.edit.provider.ChangeNotifier;
import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.IChangeNotifier;
-import org.eclipse.emf.edit.provider.IDisposable;
-import org.eclipse.emf.edit.provider.INotifyChangedListener;
+import org.eclipse.emf.edit.tree.util.TreeAdapterFactory;
/**
- * Adapter factory that creates structures for Compare framework.
- *
* @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
*/
-public class CompareNodeAdapterFactory extends CompareAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable {
+public class TreeCompareInputAdapterFactory extends TreeAdapterFactory implements ComposeableAdapterFactory {
/**
* This keeps track of the root adapter factory that delegates to this adapter factory.
@@ -57,10 +52,15 @@ public class CompareNodeAdapterFactory extends CompareAdapterFactory implements
* @param grouper
* This will be used by the comparison adapter to group differences together.
*/
- public CompareNodeAdapterFactory() {
+ public TreeCompareInputAdapterFactory() {
supportedTypes.add(ICompareInput.class);
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.emf.common.notify.AdapterFactory#isFactoryForType(java.lang.Object)
+ */
@Override
public boolean isFactoryForType(Object type) {
return supportedTypes.contains(type) || super.isFactoryForType(type);
@@ -124,133 +124,10 @@ public class CompareNodeAdapterFactory extends CompareAdapterFactory implements
/**
* {@inheritDoc}
*
- * @see org.eclipse.emf.compare.util.CompareAdapterFactory#createComparisonAdapter()
- */
- @Override
- public Adapter createComparisonAdapter() {
- return new ComparisonNode(getRootAdapterFactory());
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.util.CompareAdapterFactory#createMatchResourceAdapter()
- */
- @Override
- public Adapter createMatchResourceAdapter() {
- return new MatchResourceNode(getRootAdapterFactory());
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.util.CompareAdapterFactory#createMatchAdapter()
- */
- @Override
- public Adapter createMatchAdapter() {
- return new MatchNode(getRootAdapterFactory());
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.util.CompareAdapterFactory#createDiffAdapter()
- */
- @Override
- public Adapter createDiffAdapter() {
- return new DiffNode(getRootAdapterFactory());
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.util.CompareAdapterFactory#createResourceAttachmentChangeAdapter()
- */
- @Override
- public Adapter createResourceAttachmentChangeAdapter() {
- return new ResourceAttachmentChangeNode(getRootAdapterFactory());
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.util.CompareAdapterFactory#createReferenceChangeAdapter()
- */
- @Override
- public Adapter createReferenceChangeAdapter() {
- return new ReferenceChangeNode(getRootAdapterFactory());
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.util.CompareAdapterFactory#createAttributeChangeAdapter()
- */
- @Override
- public Adapter createAttributeChangeAdapter() {
- return new AttributeChangeNode(getRootAdapterFactory());
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.util.CompareAdapterFactory#createConflictAdapter()
+ * @see org.eclipse.emf.edit.tree.util.TreeAdapterFactory#createTreeNodeAdapter()
*/
@Override
- public Adapter createConflictAdapter() {
- return new ConflictNode(getRootAdapterFactory());
+ public Adapter createTreeNodeAdapter() {
+ return new TreeNodeCompareInput(getRootAdapterFactory());
}
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.compare.util.CompareAdapterFactory#createEquivalenceAdapter()
- */
- @Override
- public Adapter createEquivalenceAdapter() {
- return new EquivalenceNode(getRootAdapterFactory());
- }
-
- /**
- * This adds a listener.
- *
- * @param notifyChangedListener
- * the listener to add.
- */
- public void addListener(INotifyChangedListener notifyChangedListener) {
- changeNotifier.addListener(notifyChangedListener);
- }
-
- /**
- * This removes a listener.
- *
- * @param notifyChangedListener
- * the listener to remove.
- */
- public void removeListener(INotifyChangedListener notifyChangedListener) {
- changeNotifier.removeListener(notifyChangedListener);
- }
-
- /**
- * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}.
- *
- * @param notification
- * the notification to fire.
- */
- public void fireNotifyChanged(Notification notification) {
- changeNotifier.fireNotifyChanged(notification);
-
- if (parentAdapterFactory != null) {
- parentAdapterFactory.fireNotifyChanged(notification);
- }
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.edit.provider.IDisposable#dispose()
- */
- public void dispose() {
- }
-
}
diff --git a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ConflictNode.java b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/TreeNodeCompareInput.java
index e9fcb0457..b59cdf89e 100644
--- a/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/ConflictNode.java
+++ b/plugins/org.eclipse.emf.compare.ide.ui/src/org/eclipse/emf/compare/ide/ui/internal/structuremergeviewer/provider/TreeNodeCompareInput.java
@@ -1,43 +1,31 @@
-/*******************************************************************************
- * Copyright (c) 2012 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.ide.ui.internal.structuremergeviewer.provider;
-
-import org.eclipse.emf.common.notify.AdapterFactory;
-import org.eclipse.emf.compare.Conflict;
-import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.AbstractEDiffNode;
-
-/**
- * Specific AbstractEDiffNode for {@link Conflict} objects.
- *
- * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
- */
-public class ConflictNode extends AbstractEDiffNode {
-
- /**
- * Creates a node with the given factory.
- *
- * @param adapterFactory
- * the factory given to the super constructor.
- */
- public ConflictNode(AdapterFactory adapterFactory) {
- super(adapterFactory);
- }
-
- /**
- * {@inheritDoc}
- *
- * @see org.eclipse.emf.common.notify.impl.AdapterImpl#getTarget()
- */
- @Override
- public Conflict getTarget() {
- return (Conflict)super.getTarget();
- }
-}
+/*******************************************************************************
+ * 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.ide.ui.internal.structuremergeviewer.provider;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.compare.ide.ui.internal.structuremergeviewer.CompareInputAdapter;
+
+/**
+ * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a>
+ */
+public class TreeNodeCompareInput extends CompareInputAdapter {
+
+ /**
+ * Constructor.
+ *
+ * @param adapterFactory
+ * the given adapter factory.
+ */
+ public TreeNodeCompareInput(AdapterFactory adapterFactory) {
+ super(adapterFactory);
+ }
+
+}

Back to the top