org.eclipse.pde.api.tools.ui.internal.ApiToolsLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.pde.api.tools.ui.internal.ApiToolsLabelProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2007, 2013 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.pde.api.tools.ui.internal;

import java.io.File;
import java.io.IOException;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.BaseLabelProvider;
import org.eclipse.jface.viewers.IFontProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.api.tools.internal.provisional.ApiPlugin;
import org.eclipse.pde.api.tools.internal.provisional.comparator.IDelta;
import org.eclipse.pde.api.tools.internal.provisional.descriptors.IElementDescriptor;
import org.eclipse.pde.api.tools.internal.provisional.model.IApiBaseline;
import org.eclipse.pde.api.tools.internal.provisional.model.IApiComponent;
import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblem;
import org.eclipse.pde.api.tools.internal.provisional.problems.IApiProblemFilter;
import org.eclipse.pde.api.tools.ui.internal.wizards.ApiBaselineWizardPage.EEEntry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE.SharedImages;

import com.ibm.icu.text.MessageFormat;

/**
 * Label provider for API tools objects.
 * 
 * @since 1.0.0
 */
public class ApiToolsLabelProvider extends BaseLabelProvider implements ILabelProvider, IFontProvider {

    /**
     * Font for the default {@link IApiProfile}
     */
    private Font font = null;

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.viewers.BaseLabelProvider#dispose()
     */
    @Override
    public void dispose() {
        if (font != null) {
            font.dispose();
        }
        super.dispose();
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object)
     */
    @Override
    public Image getImage(Object element) {
        if (element instanceof IApiComponent) {
            IApiComponent comp = (IApiComponent) element;
            return getApiComponentImage(comp);
        }
        if (element instanceof IResource) {
            IResource resource = (IResource) element;
            switch (resource.getType()) {
            case IResource.FILE:
                return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE);
            case IResource.FOLDER:
                return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
            case IResource.PROJECT:
                return PlatformUI.getWorkbench().getSharedImages().getImage(SharedImages.IMG_OBJ_PROJECT);
            default:
                break;
            }
        }
        if (element instanceof File) {
            return PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
        }
        if (element instanceof IApiBaseline) {
            return getBaselineImage();
        }
        if (element instanceof EEEntry) {
            return ApiUIPlugin.getSharedImage(IApiToolsConstants.IMG_OBJ_API_SYSTEM_LIBRARY);
        }
        if (element instanceof IApiProblemFilter) {
            IApiProblemFilter filter = (IApiProblemFilter) element;
            IApiProblem problem = filter.getUnderlyingProblem();
            /*
             * int flags = (problem.getSeverity() == ApiPlugin.SEVERITY_ERROR ?
             * CompositeApiImageDescriptor.ERROR :
             * CompositeApiImageDescriptor.WARNING); CompositeApiImageDescriptor
             * desc = new CompositeApiImageDescriptor(image, flags);
             */
            return getApiProblemElementImage(problem);/*
                                                      * ApiUIPlugin.getImage(desc)
                                                      * ;
                                                      */
        }
        return null;
    }

    /**
     * Returns the image to use for the given {@link IApiProblem}
     * 
     * @param problem
     * @return the image to use for the given {@link IApiProblem
        
     */
    private Image getApiProblemElementImage(IApiProblem problem) {
        if (problem.getCategory() != IApiProblem.CATEGORY_USAGE) {
            switch (problem.getElementKind()) {
            case IDelta.ANNOTATION_ELEMENT_TYPE:
                return JavaUI.getSharedImages().getImage(org.eclipse.jdt.ui.ISharedImages.IMG_OBJS_ANNOTATION);
            case IDelta.ENUM_ELEMENT_TYPE:
                return JavaUI.getSharedImages().getImage(org.eclipse.jdt.ui.ISharedImages.IMG_OBJS_ENUM);
            case IDelta.CLASS_ELEMENT_TYPE:
                return JavaUI.getSharedImages().getImage(org.eclipse.jdt.ui.ISharedImages.IMG_OBJS_CLASS);
            case IDelta.INTERFACE_ELEMENT_TYPE:
                return JavaUI.getSharedImages().getImage(org.eclipse.jdt.ui.ISharedImages.IMG_OBJS_INTERFACE);
            case IDelta.FIELD_ELEMENT_TYPE:
                return JavaUI.getSharedImages().getImage(org.eclipse.jdt.ui.ISharedImages.IMG_FIELD_PUBLIC);
            case IDelta.METHOD_ELEMENT_TYPE:
                return JavaUI.getSharedImages().getImage(org.eclipse.jdt.ui.ISharedImages.IMG_OBJS_PUBLIC);
            case IDelta.TYPE_PARAMETER_ELEMENT_TYPE:
                return JavaUI.getSharedImages().getImage(org.eclipse.jdt.ui.ISharedImages.IMG_OBJS_CUNIT);
            case IDelta.API_BASELINE_ELEMENT_TYPE:
                return getBaselineImage();
            case IDelta.API_COMPONENT_ELEMENT_TYPE: {
                IPath path = new Path(problem.getResourcePath());
                // try to find the component via the resource handle
                IResource res = ResourcesPlugin.getWorkspace().getRoot().findMember(path);
                if (res != null) {
                    IApiComponent comp = ApiPlugin.getDefault().getApiBaselineManager().getWorkspaceBaseline()
                            .getApiComponent(res.getProject().getName());
                    if (comp != null) {
                        return getApiComponentImage(comp);
                    }
                }
                return ApiUIPlugin.getSharedImage(IApiToolsConstants.IMG_OBJ_BUNDLE);
            }
            default:
                break;
            }
        } else {
            switch (problem.getElementKind()) {
            case IElementDescriptor.TYPE:
                return JavaUI.getSharedImages().getImage(org.eclipse.jdt.ui.ISharedImages.IMG_OBJS_CLASS);
            case IElementDescriptor.METHOD:
                return JavaUI.getSharedImages().getImage(org.eclipse.jdt.ui.ISharedImages.IMG_OBJS_PUBLIC);
            case IElementDescriptor.FIELD:
                return JavaUI.getSharedImages().getImage(org.eclipse.jdt.ui.ISharedImages.IMG_FIELD_PUBLIC);
            default: {
                System.out.println();
            }
            }
        }
        return null;
    }

    /**
     * @return the image to use for an {@link IApiBaseline}
     */
    private Image getBaselineImage() {
        return ApiUIPlugin.getSharedImage(IApiToolsConstants.IMG_OBJ_ECLIPSE_PROFILE);
    }

    /**
     * Returns the image to use for the given {@link IApiComponent}
     * 
     * @param component
     * @return the image to use for the given {@link IApiComponent}
     */
    private Image getApiComponentImage(IApiComponent component) {
        if (component.isSystemComponent()) {
            return ApiUIPlugin.getSharedImage(IApiToolsConstants.IMG_OBJ_API_SYSTEM_LIBRARY);
        }
        try {
            if (component.isFragment()) {
                return ApiUIPlugin.getSharedImage(IApiToolsConstants.IMG_OBJ_FRAGMENT);
            }
        } catch (CoreException e) {
            ApiPlugin.log(e);
        }
        return ApiUIPlugin.getSharedImage(IApiToolsConstants.IMG_OBJ_BUNDLE);
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
     */
    @Override
    public String getText(Object element) {
        if (element instanceof IApiComponent) {
            IApiComponent comp = (IApiComponent) element;
            return MessageFormat.format(Messages.ApiToolsLabelProvider_0,
                    new Object[] { comp.getSymbolicName(), comp.getVersion() });
        }
        if (element instanceof File) {
            try {
                return ((File) element).getCanonicalPath();
            } catch (IOException e) {
                return ((File) element).getName();
            }
        }
        if (element instanceof IApiBaseline) {
            IApiBaseline baseline = (IApiBaseline) element;
            StringBuffer buffer = new StringBuffer();
            buffer.append(baseline.getName());
            if (isDefaultBaseline(baseline)) {
                buffer.append(NLS.bind(Messages.ApiToolsLabelProvider_default_baseline_place_holder,
                        Messages.ApiToolsLabelProvider_default_baseline));
            }
            return buffer.toString();
        }
        if (element instanceof EEEntry) {
            return ((EEEntry) element).toString();
        }
        if (element instanceof IApiProblemFilter) {
            IApiProblemFilter filter = (IApiProblemFilter) element;
            return filter.getUnderlyingProblem().getMessage();
        }
        if (element instanceof IResource) {
            IResource resource = (IResource) element;
            IPath path = resource.getProjectRelativePath();
            StringBuffer buffer = new StringBuffer();
            buffer.append(path.removeFileExtension().lastSegment());
            buffer.append(" ("); //$NON-NLS-1$
            buffer.append(path.removeLastSegments(1));
            buffer.append(")"); //$NON-NLS-1$
            return buffer.toString();
        }
        if (element instanceof String) {
            return (String) element;
        }
        return "<unknown>"; //$NON-NLS-1$
    }

    /**
     * Returns if the specified {@link IApiProfile} is the default profile or
     * not
     * 
     * @param element
     * @return if the profile is the default or not
     */
    protected boolean isDefaultBaseline(Object element) {
        if (element instanceof IApiBaseline) {
            IApiBaseline profile = (IApiBaseline) element;
            IApiBaseline def = ApiPlugin.getDefault().getApiBaselineManager().getDefaultApiBaseline();
            if (def != null) {
                return profile.getName().equals(def.getName());
            }
        }
        return false;
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
     */
    @Override
    public Font getFont(Object element) {
        if (isDefaultBaseline(element)) {
            if (font == null) {
                Font dialogFont = JFaceResources.getDialogFont();
                FontData[] fontData = dialogFont.getFontData();
                for (int i = 0; i < fontData.length; i++) {
                    FontData data = fontData[i];
                    data.setStyle(SWT.BOLD);
                }
                Display display = ApiUIPlugin.getShell().getDisplay();
                font = new Font(display, fontData);
            }
            return font;
        }
        return null;
    }

}