| /***************************************************************************** |
| * Copyright (c) 2019 CEA LIST, and others. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Nicolas FAUVERGUE (CEA LIST) nicolas.fauvergue@cea.fr - Initial API and implementation |
| * |
| *****************************************************************************/ |
| package org.eclipse.papyrus.gitlight.compare.ui.contentmergeviewer.provider; |
| |
| import java.util.ResourceBundle; |
| |
| import org.eclipse.emf.common.notify.AdapterFactory; |
| import org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.tree.provider.TreeContentMergeViewerItemLabelProvider; |
| import org.eclipse.emf.compare.rcp.ui.mergeviewer.IMergeViewer.MergeViewerSide; |
| import org.eclipse.emf.compare.rcp.ui.mergeviewer.item.IMergeViewerItem; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.papyrus.emf.facet.custom.metamodel.v0_2_0.internal.treeproxy.EObjectTreeElement; |
| import org.eclipse.papyrus.emf.facet.custom.metamodel.v0_2_0.internal.treeproxy.TreeproxyFactory; |
| import org.eclipse.papyrus.gitlight.compare.ui.PapyrusCompareUIPlugin; |
| import org.eclipse.papyrus.infra.gmfdiag.css.notation.CSSDiagram; |
| import org.eclipse.papyrus.infra.services.labelprovider.service.LabelProviderService; |
| import org.eclipse.swt.graphics.Image; |
| import org.eclipse.uml2.uml.UMLPackage; |
| |
| /** |
| * The label provider for the {@link PyprusTreeContentMergeViewer}. |
| */ |
| @SuppressWarnings("restriction") |
| public class PapyrusTreeContentMergeViewerItemLabelProvider extends TreeContentMergeViewerItemLabelProvider { |
| /** |
| * The {@link MergeViewerSide}. |
| */ |
| private MergeViewerSide side; |
| |
| /** |
| * Constructor. |
| * |
| * @param resourceBundle |
| * the {@link ResourceBundle}. |
| * @param adapterFactory |
| * the {@link AdapterFactory}. |
| * @param side |
| * the {@link MergeViewerSide}. |
| */ |
| public PapyrusTreeContentMergeViewerItemLabelProvider(ResourceBundle resourceBundle, |
| AdapterFactory adapterFactory, MergeViewerSide side) { |
| super(resourceBundle, adapterFactory, side); |
| this.side = side; |
| } |
| |
| @Override |
| public Image getImage(Object object) { |
| if (!IMergeViewerItem.class.isInstance(object)) { |
| return super.getImage(object); |
| } |
| |
| final Image image; |
| final IMergeViewerItem mergeViewerItem = IMergeViewerItem.class.cast(object); |
| |
| // For all special cases fall back to parent to keep consistency |
| if (mergeViewerItem.isInsertionPoint()) { |
| image = super.getImage(object); |
| } else if (mergeViewerItem.getSideValue(side) == null |
| && mergeViewerItem.getSideValue(side.opposite()) instanceof Resource) { |
| image = super.getImage(mergeViewerItem.getSideValue(side.opposite())); |
| } else if (mergeViewerItem.getLeft() == null && mergeViewerItem.getRight() == null |
| && mergeViewerItem.getAncestor() instanceof Resource) { |
| image = super.getImage(mergeViewerItem.getAncestor()); |
| } else { |
| final Object value = mergeViewerItem.getSideValue(side); |
| if (hasModelExplorerLabel(value)) { |
| final LabelProviderService labelProviderService = PapyrusCompareUIPlugin |
| .getDefault().getLabelProviderService(); |
| if (value instanceof EObject) { |
| EObjectTreeElement treeElement = TreeproxyFactory.eINSTANCE.createEObjectTreeElement(); |
| treeElement.setEObject(EObject.class.cast(value)); |
| image = labelProviderService.getLabelProvider().getImage(treeElement); |
| } else { |
| image = labelProviderService.getLabelProvider().getImage(value); |
| } |
| } else { |
| image = super.getImage(object); |
| } |
| } |
| return image; |
| } |
| |
| @Override |
| public String getText(Object object) { |
| if (!IMergeViewerItem.class.isInstance(object)) { |
| return super.getText(object); |
| } |
| |
| final String text; |
| final IMergeViewerItem mergeViewerItem = (IMergeViewerItem)object; |
| final Object value = mergeViewerItem.getSideValue(side); |
| |
| // For all special cases fall back to parent to keep consistency |
| if (value instanceof EObject && ((EObject)value).eIsProxy()) { |
| text = super.getText(object); |
| } else if (mergeViewerItem.isInsertionPoint()) { |
| text = super.getText(object); |
| } else if (value == null && mergeViewerItem.getSideValue(side.opposite()) instanceof Resource) { |
| text = super.getText(object); |
| } else if (value == null && mergeViewerItem.getLeft() == null && mergeViewerItem.getRight() == null |
| && mergeViewerItem.getAncestor() instanceof Resource) { |
| text = super.getText(object); |
| } else { |
| if (hasModelExplorerLabel(value)) { |
| final LabelProviderService labelProviderService = PapyrusCompareUIPlugin |
| .getDefault().getLabelProviderService(); |
| if (value instanceof EObject) { |
| EObjectTreeElement treeElement = TreeproxyFactory.eINSTANCE.createEObjectTreeElement(); |
| treeElement.setEObject(EObject.class.cast(value)); |
| text = labelProviderService.getLabelProvider().getText(treeElement); |
| } else { |
| text = labelProviderService.getLabelProvider().getText(value); |
| } |
| } else { |
| text = super.getText(object); |
| } |
| } |
| return text; |
| } |
| |
| /** |
| * Determines if a given object has a label within the Papyrus ModelExplorer. |
| * |
| * @param object |
| * the object to check |
| * @return {@code true} if the {@code object} has a Papyrus ModelExplorer label, {@code false} otherwise. |
| */ |
| protected boolean hasModelExplorerLabel(Object object) { |
| if (EObject.class.isInstance(object)) { |
| final EObject eObject = EObject.class.cast(object); |
| if (UMLPackage.class.isInstance(eObject.eClass().getEPackage())) { |
| return true; |
| } |
| if (CSSDiagram.class.isInstance(eObject)) { |
| return true; |
| } |
| } |
| return false; |
| } |
| } |