/******************************************************************************* * Copyright (c) 2011, 2014 Ericsson * * 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: * Francois Chouinard - Initial API and implementation * Patrick Tasse - Add support for unknown trace type icon *******************************************************************************/ package fr.inria.linuxtools.tmf.ui.project.model; import java.net.URL; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.StyledString; import org.eclipse.jface.viewers.StyledString.Styler; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.IMemento; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.navigator.ICommonContentExtensionSite; import org.eclipse.ui.navigator.ICommonLabelProvider; import org.osgi.framework.Bundle; import fr.inria.linuxtools.internal.tmf.ui.Activator; import fr.inria.linuxtools.tmf.core.TmfCommonConstants; import fr.inria.linuxtools.tmf.core.project.model.TmfTraceType; import fr.inria.linuxtools.tmf.core.project.model.TmfTraceType.TraceElementType; /** * The TMF project label provider for the tree viewer in the project explorer view. * <p> * @version 1.0 * @author Francois Chouinard */ public class TmfNavigatorLabelProvider implements ICommonLabelProvider, IStyledLabelProvider { // ------------------------------------------------------------------------ // Constants // ------------------------------------------------------------------------ private static final Image fFolderIcon = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER); private static final String fTraceIconFile = "icons/elcl16/trace.gif"; //$NON-NLS-1$ private static final String fUnknownIconFile = "icons/elcl16/unknown_parser.gif"; //$NON-NLS-1$ private static final String fExperimentIconFile = "icons/elcl16/experiment.gif"; //$NON-NLS-1$ private static final String fAnalysisIconFile = "icons/ovr16/experiment_folder_ovr.png"; //$NON-NLS-1$ private static final String fViewIconFile = "icons/obj16/node_obj.gif"; //$NON-NLS-1$ // ------------------------------------------------------------------------ // Attributes // ------------------------------------------------------------------------ private final Image fTraceFolderIcon = fFolderIcon; private final Image fExperimentFolderIcon = fFolderIcon; private final Image fDefaultTraceIcon; private final Image fUnknownTraceIcon; private final Image fExperimentIcon; private final Image fDefaultAnalysisIcon; private final Image fDefaultViewIcon; // ------------------------------------------------------------------------ // Constructors // ------------------------------------------------------------------------ /** * Constructor. * * Creates the TMF navigator content provider. */ public TmfNavigatorLabelProvider() { Bundle bundle = Activator.getDefault().getBundle(); fDefaultTraceIcon = loadIcon(bundle, fTraceIconFile); fUnknownTraceIcon = loadIcon(bundle, fUnknownIconFile); fExperimentIcon = loadIcon(bundle, fExperimentIconFile); fDefaultAnalysisIcon = loadIcon(bundle, fAnalysisIconFile); fDefaultViewIcon = loadIcon(bundle, fViewIconFile); } private static Image loadIcon(Bundle bundle, String url) { Activator plugin = Activator.getDefault(); String key = bundle.getSymbolicName() + "/" + url; //$NON-NLS-1$ Image icon = plugin.getImageRegistry().get(key); if (icon == null) { URL imageURL = bundle.getResource(url); ImageDescriptor descriptor = ImageDescriptor.createFromURL(imageURL); if (descriptor != null) { icon = descriptor.createImage(); plugin.getImageRegistry().put(key, icon); } } return icon; } // ------------------------------------------------------------------------ // ICommonLabelProvider // ------------------------------------------------------------------------ @Override public Image getImage(Object element) { if (element instanceof TmfCommonProjectElement) { TmfCommonProjectElement trace = (TmfCommonProjectElement) element; try { String traceType = trace.getResource().getPersistentProperty(TmfCommonConstants.TRACETYPE); if (traceType == null || TmfTraceType.getTraceType(traceType) == null) { return fUnknownTraceIcon; } IConfigurationElement traceUIAttributes = TmfTraceTypeUIUtils.getTraceUIAttributes(traceType, (element instanceof TmfTraceElement) ? TraceElementType.TRACE : TraceElementType.EXPERIMENT); if (traceUIAttributes != null) { String iconAttr = traceUIAttributes.getAttribute(TmfTraceTypeUIUtils.ICON_ATTR); if (iconAttr != null) { String name = traceUIAttributes.getContributor().getName(); if (name != null) { Bundle bundle = Platform.getBundle(name); if (bundle != null) { Image image = loadIcon(bundle, iconAttr); if (image != null) { return image; } } } } } } catch (CoreException e) { } if (element instanceof TmfTraceElement) { return fDefaultTraceIcon; } return fExperimentIcon; } if (element instanceof TmfExperimentFolder) { return fExperimentFolderIcon; } if (element instanceof TmfTraceFolder) { return fTraceFolderIcon; } if (element instanceof TmfAnalysisOutputElement) { TmfAnalysisOutputElement output = (TmfAnalysisOutputElement) element; Image icon = output.getIcon(); if (icon == null) { return fDefaultViewIcon; } return icon; } if (element instanceof TmfAnalysisElement) { TmfAnalysisElement analysis = (TmfAnalysisElement) element; String iconFile = analysis.getIconFile(); if (iconFile != null) { Bundle bundle = analysis.getBundle(); if (bundle != null) { Image icon = loadIcon(bundle, iconFile); return icon; } } return fDefaultAnalysisIcon; } return null; } @Override public String getText(Object element) { if (element instanceof TmfTracesFolder) { TmfTracesFolder folder = (TmfTracesFolder) element; return folder.getName() + " [" + folder.getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ } if (element instanceof TmfTraceFolder) { TmfTraceFolder folder = (TmfTraceFolder) element; int nbTraces = folder.getTraces().size(); if (nbTraces > 0) { return folder.getName() + " [" + folder.getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ } return folder.getName(); } if (element instanceof TmfTraceElement) { TmfTraceElement trace = (TmfTraceElement) element; if (trace.getParent() instanceof TmfExperimentElement) { return trace.getElementPath(); } return trace.getName(); } if (element instanceof TmfExperimentElement) { TmfExperimentElement folder = (TmfExperimentElement) element; return folder.getName() + " [" + folder.getTraces().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ } if (element instanceof TmfExperimentFolder) { TmfExperimentFolder folder = (TmfExperimentFolder) element; return folder.getName() + " [" + folder.getChildren().size() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ } // Catch all if (element instanceof ITmfProjectModelElement) { return ((ITmfProjectModelElement) element).getName(); } return null; } @Override public void addListener(ILabelProviderListener listener) { } @Override public void dispose() { } @Override public boolean isLabelProperty(Object element, String property) { return false; } @Override public void removeListener(ILabelProviderListener listener) { } @Override public void restoreState(IMemento aMemento) { } @Override public void saveState(IMemento aMemento) { } @Override public String getDescription(Object anElement) { return getText(anElement); } @Override public void init(ICommonContentExtensionSite aConfig) { } /** * @since 3.0 */ @Override public StyledString getStyledText(Object element) { String text = getText(element); if (text != null) { if (element instanceof ITmfStyledProjectModelElement) { Styler styler = ((ITmfStyledProjectModelElement) element).getStyler(); if (styler != null) { return new StyledString(text, styler); } } return new StyledString(text); } return null; } }