com.vectrace.MercurialEclipse.synchronize.cs.SyncViewLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for com.vectrace.MercurialEclipse.synchronize.cs.SyncViewLabelProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2005-2009 VecTrace (Zingo Andersen) 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:
 *     Andrei Loskutov - implementation
 *******************************************************************************/
package com.vectrace.MercurialEclipse.synchronize.cs;

import org.eclipse.compare.structuremergeviewer.Differencer;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.team.internal.ui.mapping.ResourceModelLabelProvider;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;

import com.vectrace.MercurialEclipse.MercurialEclipsePlugin;
import com.vectrace.MercurialEclipse.model.ChangeSet;
import com.vectrace.MercurialEclipse.model.ChangeSet.Direction;
import com.vectrace.MercurialEclipse.model.FileFromChangeSet;
import com.vectrace.MercurialEclipse.model.GroupedUncommittedChangeSet;
import com.vectrace.MercurialEclipse.model.PathFromChangeSet;
import com.vectrace.MercurialEclipse.model.WorkingChangeSet;
import com.vectrace.MercurialEclipse.synchronize.cs.HgChangeSetContentProvider.FilteredPlaceholder;
import com.vectrace.MercurialEclipse.utils.BranchUtils;
import com.vectrace.MercurialEclipse.utils.StringUtils;

@SuppressWarnings("restriction")
public class SyncViewLabelProvider extends ResourceModelLabelProvider {

    @Override
    public Image getImage(Object element) {
        // we MUST call super, to get the nice in/outgoing decorations...
        return super.getImage(element);
    }

    @Override
    protected Image getDelegateImage(Object element) {
        Image image = null;
        if (element instanceof ChangeSet) {
            image = MercurialEclipsePlugin.getImage("elcl16/changeset_obj.gif");
        } else if (element instanceof ChangesetGroup) {
            ChangesetGroup group = (ChangesetGroup) element;
            if (group.getDirection() == Direction.OUTGOING) {
                image = MercurialEclipsePlugin.getImage("actions/commit.gif");
            } else {
                image = MercurialEclipsePlugin.getImage("actions/update.gif");
            }
        } else if (element instanceof FileFromChangeSet) {
            FileFromChangeSet file = (FileFromChangeSet) element;
            if (file.getFile() != null) {
                image = getDelegateLabelProvider().getImage(file.getFile());
            } else {
                image = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FILE);
            }
        } else if (element instanceof PathFromChangeSet) {
            PathFromChangeSet path = (PathFromChangeSet) element;
            if (path.isProjectClosed()) {
                image = PlatformUI.getWorkbench().getSharedImages()
                        .getImage(IDE.SharedImages.IMG_OBJ_PROJECT_CLOSED);
            } else {
                image = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_FOLDER);
            }
        } else if (element instanceof RepositoryChangesetGroup) {
            image = PlatformUI.getWorkbench().getSharedImages()
                    .getImage(org.eclipse.ui.ide.IDE.SharedImages.IMG_OBJ_PROJECT);
        } else {
            try {
                image = super.getDelegateImage(element);
            } catch (NullPointerException npex) {
                // if element is invalid or not yet fully handled
                // NPE is possible
                MercurialEclipsePlugin.logError(npex);
            }
        }
        return image;
    }

    @Override
    protected Image decorateImage(Image base, Object element) {
        Image decoratedImage;
        if (element instanceof FileFromChangeSet) {
            FileFromChangeSet ffc = (FileFromChangeSet) element;
            int kind = ffc.getDiffKind();
            decoratedImage = getImageManager().getImage(base, kind);
        } else if (element instanceof ChangesetGroup) {
            ChangesetGroup group = (ChangesetGroup) element;
            if (group.getDirection() == Direction.LOCAL) {
                decoratedImage = getImageManager().getImage(base, Differencer.CHANGE);
            } else {
                decoratedImage = getImageManager().getImage(base, Differencer.NO_CHANGE);
            }
        } else if (element instanceof WorkingChangeSet) {
            WorkingChangeSet cs = (WorkingChangeSet) element;
            if (cs instanceof GroupedUncommittedChangeSet && ((GroupedUncommittedChangeSet) cs).isDefault()) {
                decoratedImage = getDefaultChangesetIcon();
            } else {
                decoratedImage = getWorkingChangesetIcon();
            }
        } else {
            decoratedImage = getImageManager().getImage(base, Differencer.NO_CHANGE);
        }
        return decoratedImage;
    }

    public static Image getDefaultChangesetIcon() {
        return MercurialEclipsePlugin.getImage("elcl16/uncommitted_cs.gif", "ovr/pinned_ovr.gif",
                IDecoration.TOP_RIGHT);
    }

    public static Image getWorkingChangesetIcon() {
        return MercurialEclipsePlugin.getImage("elcl16/uncommitted_cs.gif", "ovr/edited_ovr.gif",
                IDecoration.TOP_RIGHT);
    }

    @Override
    protected String getDelegateText(Object elementOrPath) {
        if (elementOrPath instanceof ChangeSet) {
            ChangeSet cset = (ChangeSet) elementOrPath;
            StringBuilder sb = new StringBuilder();
            if (!(cset instanceof WorkingChangeSet)) {
                sb.append(cset.getIndex());

                if (cset.isCurrentOutgoing()) {
                    sb.append('*');
                }

                sb.append(" [").append(cset.getPerson()).append(']');
                sb.append(" (").append(cset.getAgeDate()).append(')');
            } else {
                sb.append(cset.getName());
                sb.append(" (").append(cset.getChangesetFiles().length).append(')');
            }
            if (!BranchUtils.isDefault(cset.getBranch())) {
                sb.append(' ').append(cset.getBranch());
            }
            sb.append(':').append(' ').append(getShortComment(cset));
            return StringUtils.removeLineBreaks(sb.toString());
        }
        if (elementOrPath instanceof ChangesetGroup) {
            ChangesetGroup group = (ChangesetGroup) elementOrPath;
            String name = group.getName();
            if (group.getChangesets().isEmpty()) {
                return name + " (empty)";
            }
            if (group.getDirection() == Direction.LOCAL) {
                int files = 0;
                for (ChangeSet cs : group.getChangesets()) {
                    files += cs.getChangesetFiles().length;
                }
                if (files == 0) {
                    return name + " (empty)";
                }
                return name + " (" + files + ')';
            }
            return name + " (" + group.getChangesets().size() + ')';
        }
        if (elementOrPath instanceof RepositoryChangesetGroup) {
            return ((RepositoryChangesetGroup) elementOrPath).getName();
        }
        if (elementOrPath instanceof FileFromChangeSet) {
            FileFromChangeSet file = (FileFromChangeSet) elementOrPath;

            String delegateText;
            if (file.getFile() != null) {
                delegateText = super.getDelegateText(file.getFile());
                IProject project = file.getFile().getProject();
                if (!project.isOpen()) {
                    delegateText += " (closed!)";
                }
            } else {
                delegateText = file.toString();
            }

            if (file.getCopySourceFile() != null) {
                delegateText += " (" + super.getDelegateText(file.getCopySourceFile()) + ")";
            }

            if (delegateText != null && delegateText.length() > 0) {
                delegateText = " " + delegateText;
            }
            return delegateText;
        } else if (elementOrPath instanceof PathFromChangeSet) {
            return elementOrPath.toString();
        } else if (elementOrPath instanceof FilteredPlaceholder) {
            return elementOrPath.toString();
        }
        String delegateText = super.getDelegateText(elementOrPath);
        if (delegateText != null && delegateText.length() > 0) {
            delegateText = " " + delegateText;
        }
        return delegateText;
    }

    /**
     * TODO: The entire comment should be shown in a tool tip
     */
    private static String getShortComment(ChangeSet cset) {
        String comment = cset.getComment();
        if (comment.length() > 100) {
            comment = comment.substring(0, 100) + "...";
        }
        return comment;
    }

    /**
     * @see org.eclipse.team.ui.synchronize.AbstractSynchronizeLabelProvider#getFont(java.lang.Object)
     */
    @Override
    public Font getFont(Object element) {
        if (element instanceof GroupedUncommittedChangeSet) {
            if (((GroupedUncommittedChangeSet) element).isDefault()) {
                return JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT);
            }
        }
        return super.getFont(element);
    }
}