org.eclipse.mylyn.internal.builds.ui.view.BuildLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.mylyn.internal.builds.ui.view.BuildLabelProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2010 Tasktop Technologies 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:
 *     Tasktop Technologies - initial API and implementation
 *     Itema AS - bug 330908 removed build server URL from label
 *******************************************************************************/

package org.eclipse.mylyn.internal.builds.ui.view;

import java.util.List;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DecorationOverlayIcon;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.IFontProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.StyledString.Styler;
import org.eclipse.mylyn.builds.core.BuildState;
import org.eclipse.mylyn.builds.core.BuildStatus;
import org.eclipse.mylyn.builds.core.IBuild;
import org.eclipse.mylyn.builds.core.IBuildElement;
import org.eclipse.mylyn.builds.core.IBuildPlan;
import org.eclipse.mylyn.builds.core.IBuildServer;
import org.eclipse.mylyn.commons.ui.CommonImages;
import org.eclipse.mylyn.commons.ui.compatibility.CommonFonts;
import org.eclipse.mylyn.internal.builds.ui.BuildImages;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.TextStyle;

/**
 * @author Steffen Pingel
 * @author Torkild U. Resheim
 */
public class BuildLabelProvider extends LabelProvider implements IStyledLabelProvider, IFontProvider {

    final Styler NO_STYLE = new Styler() {
        @Override
        public void applyStyles(TextStyle textStyle) {
        }
    };

    private final boolean decorateOperations;

    public BuildLabelProvider(boolean decorateOperations) {
        this.decorateOperations = decorateOperations;
    }

    public BuildLabelProvider() {
        this(false);
    }

    public Font getFont(Object element) {
        if (!decorateOperations) {
            return null;
        }

        if (element instanceof IBuildElement) {
            if (((IBuildElement) element).getOperations().size() > 0) {
                return CommonFonts.ITALIC;
            }
        }
        return null;
    }

    @Override
    public Image getImage(Object element) {
        ImageDescriptor descriptor = null;
        ImageDescriptor bottomLeftDecoration = null;
        ImageDescriptor bottomRightDecoration = null;
        ImageDescriptor topRightDecoration = null;

        // bottom left decoration
        if (element instanceof IBuildElement) {
            bottomLeftDecoration = getBottomLeftDecoration((IBuildElement) element);
        }

        // main image
        if (element instanceof IBuildServer) {
            if (((IBuildServer) element).getLocation().isOffline()) {
                descriptor = BuildImages.SERVER_DISABLED;
            } else {
                descriptor = BuildImages.SERVER;
            }
        } else if (element instanceof IBuildPlan) {
            descriptor = getImageDescriptor(((IBuildPlan) element).getStatus());
            bottomRightDecoration = getBottomRightDecoration(((IBuildPlan) element).getState());
            topRightDecoration = getTopRightDecoration(((IBuildPlan) element).getFlags());
        } else if (element instanceof IBuild) {
            descriptor = BuildLabelProvider.getImageDescriptor(((IBuild) element).getStatus());
            bottomRightDecoration = getBottomRightDecoration(((IBuild) element).getState());
        }

        if (descriptor != null) {
            if (bottomRightDecoration != null || bottomLeftDecoration != null || topRightDecoration != null) {
                descriptor = new DecorationOverlayIcon(CommonImages.getImage(descriptor), new ImageDescriptor[] {
                        null, topRightDecoration, bottomLeftDecoration, bottomRightDecoration });
            }
            return CommonImages.getImage(descriptor);
        }
        return null;
    }

    public static ImageDescriptor getImageDescriptor(BuildStatus status) {
        if (status == BuildStatus.SUCCESS) {
            return BuildImages.STATUS_PASSED;
        } else if (status == BuildStatus.UNSTABLE) {
            return BuildImages.STATUS_UNSTABLE;
        } else if (status == BuildStatus.FAILED) {
            return BuildImages.STATUS_FAILED;
        } else if (status == BuildStatus.DISABLED || status == BuildStatus.ABORTED) {
            return BuildImages.STATUS_DISABLED;
        }
        return CommonImages.QUESTION;
    }

    private ImageDescriptor getBottomLeftDecoration(IBuildElement element) {
        if (element.getElementStatus() != null) {
            return CommonImages.OVERLAY_WARNING;
        }
        return null;
    }

    private ImageDescriptor getBottomRightDecoration(BuildState state) {
        if (state == BuildState.RUNNING) {
            return BuildImages.DECORATION_RUNNING;
        }
        return null;
    }

    private ImageDescriptor getTopRightDecoration(List<BuildState> flags) {
        if (flags.contains(BuildState.QUEUED)) {
            return CommonImages.OVERLAY_DATE_DUE;
        }
        return null;
    }

    public StyledString getStyledText(Object element) {
        String text = getText(element);
        if (text != null) {
            StyledString styledString = new StyledString(text);
            // Append styled text here
            return styledString;
        }
        return new StyledString();
    }

    @Override
    public String getText(Object element) {
        if (element instanceof IBuildElement) {
            return ((IBuildElement) element).getLabel();
        }
        return null;
    }

}