fr.inria.linuxtools.tmf.ui.project.model.TmfNavigatorLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for fr.inria.linuxtools.tmf.ui.project.model.TmfNavigatorLabelProvider.java

Source

/*******************************************************************************
 * 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;
    }

}