/******************************************************************************* * Copyright (c) 2012, 2016 Obeo and others. * 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 * Stefan Dirix - extracted into own class *******************************************************************************/ package org.eclipse.emf.compare.ide.ui.internal.contentmergeviewer.tree.provider; import java.util.ResourceBundle; import org.eclipse.emf.common.notify.AdapterFactory; 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.InternalEObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; import org.eclipse.swt.graphics.Image; /** * Label Provider for {@link IMergeViewerItem}s. */ public class TreeContentMergeViewerItemLabelProvider extends AdapterFactoryLabelProvider { private final MergeViewerSide side; private ResourceBundle resourceBundle; /** * Constructor. * * @param resourceBundle * the {@link ResourceBundle}. Used for error messages. * @param adapterFactory * the {@link AdapterFactory}. * @param side * the {@link MergeViewerSide}. */ public TreeContentMergeViewerItemLabelProvider(ResourceBundle resourceBundle, AdapterFactory adapterFactory, MergeViewerSide side) { super(adapterFactory); this.side = side; this.resourceBundle = resourceBundle; } @Override public String getText(Object object) { if (object instanceof IMergeViewerItem) { final String text; IMergeViewerItem mergeViewerItem = (IMergeViewerItem)object; final Object value = mergeViewerItem.getSideValue(side); if (value instanceof EObject && ((EObject)value).eIsProxy()) { text = "proxy : " + ((InternalEObject)value).eProxyURI().toString(); //$NON-NLS-1$ } else if (mergeViewerItem.isInsertionPoint()) { // workaround for 406513: Windows specific issue. Only labels of (Tree/Table)Item are // selectable on Windows platform. The labels of placeholders in (Tree/Table)Viewer // are one whitespace. Placeholder are then selectable at the very left of itself. // Add a 42 whitespaces label to workaround. text = " "; //$NON-NLS-1$ } else if (value == null && mergeViewerItem.getSideValue(side.opposite()) instanceof Resource) { text = resourceBundle.getString("UnkownResource"); //$NON-NLS-1$ } else if (value == null && mergeViewerItem.getLeft() == null && mergeViewerItem.getRight() == null && mergeViewerItem.getAncestor() instanceof Resource) { text = resourceBundle.getString("UnkownResource"); //$NON-NLS-1$ } else { text = super.getText(value); } return text; } return super.getText(object); } @Override public Image getImage(Object object) { if (object instanceof IMergeViewerItem) { IMergeViewerItem mergeViewerItem = (IMergeViewerItem)object; if (mergeViewerItem.isInsertionPoint()) { return null; } else if (mergeViewerItem.getSideValue(side) == null && mergeViewerItem.getSideValue(side.opposite()) instanceof Resource) { return super.getImage(mergeViewerItem.getSideValue(side.opposite())); } else if (mergeViewerItem.getLeft() == null && mergeViewerItem.getRight() == null && mergeViewerItem.getAncestor() instanceof Resource) { return super.getImage(mergeViewerItem.getAncestor()); } else { return super.getImage(mergeViewerItem.getSideValue(side)); } } return super.getImage(object); } }