diff options
| author | pguilet | 2017-09-28 14:35:58 +0000 |
|---|---|---|
| committer | Pierre-Charles David | 2017-09-29 07:05:10 +0000 |
| commit | 5d5cc181ad44773d959e72d6a236bc01b2793775 (patch) | |
| tree | f5fcca1b416ceaa3483135c956399cd34c8e7a06 | |
| parent | efd3b9696ba32572b6494bacfb51899cb2b2408a (diff) | |
| download | org.eclipse.sirius-5d5cc181ad44773d959e72d6a236bc01b2793775.tar.gz org.eclipse.sirius-5d5cc181ad44773d959e72d6a236bc01b2793775.tar.xz org.eclipse.sirius-5d5cc181ad44773d959e72d6a236bc01b2793775.zip | |
[522478] fix regression with link to editor functionality
Fix regression with the link to editor functionality introduced by
previous fix and visible with the test
LinkWithEditorFeatureWithModelExplorerViewTest.
Bug: 522478
Change-Id: I9c155fb2bf44433165a0797d81eeea19aeef352f
Signed-off-by: pguilet <pierre.guilet@obeo.fr>
2 files changed, 72 insertions, 0 deletions
diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/ModelExplorerItemComparer.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/ModelExplorerItemComparer.java new file mode 100644 index 0000000000..8faf06302a --- /dev/null +++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/ModelExplorerItemComparer.java @@ -0,0 +1,71 @@ +/******************************************************************************* + * Copyright (c) 2013, 2017 THALES GLOBAL SERVICES. + * 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.sirius.ui.tools.internal.views.modelexplorer; + +import org.eclipse.jface.viewers.IElementComparer; +import org.eclipse.sirius.ui.tools.api.views.common.item.ItemWrapper; +import org.eclipse.sirius.ui.tools.internal.views.common.item.RepresentationItemImpl; +import org.eclipse.sirius.viewpoint.DRepresentationDescriptor; + +/** + * A {@link IElementComparer} to have {@link ItemWrapper} considered equals to {@link ItemWrapper#getWrappedObject()}. + * This comparer is created to allow link to editor functionality to select {@link RepresentationItemImpl} corresponding + * to opened {@link DRepresentationDescriptor} of an opened diagram. + * + * @author <a href="mailto:esteban.dugueperoux@obeo.fr">Esteban Dugueperoux</a> + */ +public class ModelExplorerItemComparer implements IElementComparer { + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object a, Object b) { + boolean equals = false; + // We compare wrapped object of RepresentationItemImpl only when other object is a DRepresentationDescriptor. In + // every other cases we use standard equality. It allows to link with editor RepresentationItemImpl in + // ModelExplorerView with DRepresentationDescriptor of the opened diagram. + if ((a instanceof DRepresentationDescriptor && b instanceof RepresentationItemImpl) || (b instanceof DRepresentationDescriptor && a instanceof RepresentationItemImpl)) { + Object realAObject = a; + if (realAObject instanceof ItemWrapper) { + ItemWrapper itemWrapper = (ItemWrapper) realAObject; + realAObject = itemWrapper.getWrappedObject(); + } + Object realBObject = b; + if (realBObject instanceof ItemWrapper) { + ItemWrapper itemWrapper = (ItemWrapper) realBObject; + realBObject = itemWrapper.getWrappedObject(); + } + equals = realAObject != null && realAObject.equals(realBObject); + } else { + equals = a.equals(b); + } + return equals; + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode(Object element) { + int hashCode = 0; + Object realElementObject = element; + if (realElementObject instanceof ItemWrapper) { + ItemWrapper itemWrapper = (ItemWrapper) realElementObject; + realElementObject = itemWrapper.getWrappedObject(); + } + if (realElementObject != null) { + hashCode = realElementObject.hashCode(); + } + return hashCode; + } + +} diff --git a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/ModelExplorerView.java b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/ModelExplorerView.java index a5a98eb029..4d9c229b2c 100644 --- a/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/ModelExplorerView.java +++ b/plugins/org.eclipse.sirius.ui/src/org/eclipse/sirius/ui/tools/internal/views/modelexplorer/ModelExplorerView.java @@ -143,6 +143,7 @@ public class ModelExplorerView extends CommonNavigator implements IModelExplorer createTabs(tabDescriptors); } + getCommonViewer().setComparer(new ModelExplorerItemComparer()); } /** |
