org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsProvidersLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.cdt.internal.ui.language.settings.providers.LanguageSettingsProvidersLabelProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2010, 2012 Andrew Gvozdev 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:
 *     Andrew Gvozdev - Initial API and implementation
 *******************************************************************************/
package org.eclipse.cdt.internal.ui.language.settings.providers;

import java.net.URL;

import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.graphics.Image;

import org.eclipse.cdt.core.language.settings.providers.ILanguageSettingsProvider;
import org.eclipse.cdt.core.language.settings.providers.LanguageSettingsManager;
import org.eclipse.cdt.ui.CDTSharedImages;

import org.eclipse.cdt.internal.ui.newui.Messages;

/**
 * Label provider for language settings providers.
 *
 */
public class LanguageSettingsProvidersLabelProvider extends LabelProvider {
    private static final String TEST_PLUGIN_ID_PATTERN = "org.eclipse.cdt.*.tests.*"; //$NON-NLS-1$
    private static final String OOPS = "OOPS"; //$NON-NLS-1$

    /**
     * Returns base image key (for image without overlay).
     */
    protected String getBaseKey(ILanguageSettingsProvider provider) {
        String imageKey = null;
        // try id-association
        String id = provider.getId();
        URL url = LanguageSettingsProviderAssociationManager.getImageUrl(id);
        // try class-association
        if (url == null) {
            ILanguageSettingsProvider rawProvider = LanguageSettingsManager.getRawProvider(provider);
            if (rawProvider != null) {
                url = LanguageSettingsProviderAssociationManager.getImage(rawProvider.getClass());
            }
        }
        if (url != null) {
            imageKey = url.toString();
        }

        if (imageKey == null) {
            if (id.matches(TEST_PLUGIN_ID_PATTERN)) {
                imageKey = CDTSharedImages.IMG_OBJS_CDT_TESTING;
            } else {
                imageKey = CDTSharedImages.IMG_OBJS_EXTENSION;
            }
        }
        return imageKey;
    }

    /**
     * Returns keys for image overlays. Returning {@code null} is not allowed.
     */
    protected String[] getOverlayKeys(ILanguageSettingsProvider provider) {
        String[] overlayKeys = new String[5];
        if (provider.getName() == null) {
            overlayKeys[IDecoration.BOTTOM_LEFT] = CDTSharedImages.IMG_OVR_ERROR;
        }
        return overlayKeys;
    }

    @Override
    public Image getImage(Object element) {
        if (element instanceof ILanguageSettingsProvider) {
            ILanguageSettingsProvider provider = (ILanguageSettingsProvider) element;
            String imageKey = getBaseKey(provider);
            String[] overlayKeys = getOverlayKeys(provider);
            return CDTSharedImages.getImageOverlaid(imageKey, overlayKeys);
        }
        return null;
    }

    @Override
    public String getText(Object element) {
        if (element instanceof ILanguageSettingsProvider) {
            ILanguageSettingsProvider provider = (ILanguageSettingsProvider) element;
            String name = provider.getName();
            if (name != null) {
                if (LanguageSettingsManager.isWorkspaceProvider(provider)) {
                    name = name + Messages.LanguageSettingsProvidersLabelProvider_TextDecorator_Shared;
                }
                return name;
            }
            return NLS.bind(Messages.GeneralMessages_NonAccessibleID, provider.getId());
        }
        return OOPS;
    }

}