diff options
author | Mikaƫl Barbero | 2013-06-23 21:16:25 +0000 |
---|---|---|
committer | Axel Richard | 2013-07-16 08:56:24 +0000 |
commit | 51c49e147dbd1113ac4c9ec22a4d735a4cb0f580 (patch) | |
tree | f4b035fdc0cb2bb5ea17b7d8415c8dddf62d51b8 /plugins/org.eclipse.emf.compare.ide.ui/src | |
parent | ba590393675ff110a533ebd23eef897b6b23b7e0 (diff) | |
download | org.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')
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); + } + +} |