com.collabnet.subversion.merge.views.MergeResultsViewLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for com.collabnet.subversion.merge.views.MergeResultsViewLabelProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2009 CollabNet.
 * 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:
 *     CollabNet - initial API and implementation
 ******************************************************************************/
package com.collabnet.subversion.merge.views;

import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.structuremergeviewer.Differencer;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.model.WorkbenchLabelProvider;

import com.collabnet.subversion.merge.Activator;
import com.collabnet.subversion.merge.MergeOutput;
import com.collabnet.subversion.merge.MergeResult;
import com.collabnet.subversion.merge.MergeResultsFolder;

public class MergeResultsViewLabelProvider extends LabelProvider implements IColorProvider {
    private IPreferenceStore store = Activator.getDefault().getPreferenceStore();
    private WorkbenchLabelProvider workbenchLabelProvider = new WorkbenchLabelProvider();
    private CompareConfiguration compareConfiguration = new CompareConfiguration();
    private MergeResultsDecorator mergeResultsDecorator = new MergeResultsDecorator();

    public Image getImage(Object element) {
        if (element instanceof MergeOutput) {
            Image image = null;
            if (((MergeOutput) element).isIncomplete())
                image = Activator.getImage(Activator.IMAGE_MERGE_OUTPUT_ABORTED);
            else {
                if (((MergeOutput) element).isAbnormalEnd())
                    image = Activator.getImage(Activator.IMAGE_MERGE_OUTPUT_ABNORMAL);
                else if (((MergeOutput) element).isInProgress())
                    image = Activator.getImage(Activator.IMAGE_MERGE_OUTPUT_IN_PROGRESS);
                else
                    image = Activator.getImage(Activator.IMAGE_MERGE_OUTPUT);
            }
            return compareConfiguration.getImage(image, Differencer.NO_CHANGE);
        }
        if (element instanceof MergeResult) {
            MergeResult mergeResult = (MergeResult) element;
            if (mergeResult.getResource() == null || mergeResult.getResource().getName() == null) {
                return super.getImage(element);
            }
            return getImage(mergeResult);
        }
        if (element instanceof MergeResultsFolder) {
            MergeResultsFolder mergeResultsFolder = (MergeResultsFolder) element;
            Image image;
            if (mergeResultsFolder.getFolder().getFullPath().makeRelative().toString().length() > mergeResultsFolder
                    .getRootFolderLength())
                image = workbenchLabelProvider.getImage(mergeResultsFolder.getFolder());
            else
                image = workbenchLabelProvider.getImage(mergeResultsFolder.getMergeOutput().getResource());
            MergeResult mergeResult = mergeResultsFolder.getMergeResult();
            if (mergeResult != null)
                return getImage(mergeResult);
            return compareConfiguration.getImage(image, Differencer.NO_CHANGE);
        }
        return super.getImage(element);
    }

    private Image getImage(MergeResult mergeResult) {
        Image image = null;
        if (!mergeResult.getResource().exists() && mergeResult.getResource().getName().indexOf(".") == -1) { //$NON-NLS-1$
            image = workbenchLabelProvider
                    .getImage(ResourcesPlugin.getWorkspace().getRoot().getFolder(new Path(mergeResult.getPath())));
        } else {
            image = workbenchLabelProvider.getImage(mergeResult.getResource());
        }

        if (mergeResult.getAction() != null && mergeResult.getAction().trim().length() > 0) {
            if (mergeResult.getAction().equals(MergeResult.ACTION_CHANGE))
                image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.CHANGE);
            else if (mergeResult.getAction().equals(MergeResult.ACTION_ADD))
                image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.ADD);
            else if (mergeResult.getAction().equals(MergeResult.ACTION_DELETE))
                image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.DELETE);
            else if (mergeResult.getAction().equals(MergeResult.ACTION_CONFLICT)) {
                if (mergeResult.isResolved())
                    image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.MERGE);
                else
                    image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.CONFLICTED_CHANGE);
            } else if (mergeResult.getAction().equals(MergeResult.ACTION_MERGE))
                image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.CHANGE);
            else if (mergeResult.getAction().equals(MergeResult.ACTION_SKIP))
                image = compareConfiguration.getImage(image, Differencer.NO_CHANGE);
        }

        if (mergeResult.getPropertyAction() != null && mergeResult.getPropertyAction().trim().length() > 0) {
            if (mergeResult.getPropertyAction().equals(MergeResult.ACTION_CHANGE))
                image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.PROPERTY_CHANGE);
            else if (mergeResult.getPropertyAction().equals(MergeResult.ACTION_ADD))
                image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.PROPERTY_ADD);
            else if (mergeResult.getPropertyAction().equals(MergeResult.ACTION_DELETE))
                image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.PROPERTY_DELETE);
            else if (mergeResult.getPropertyAction().equals(MergeResult.ACTION_CONFLICT)) {
                if (mergeResult.isPropertyResolved())
                    image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.MERGE);
                else
                    image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.PROPERTY_CONFLICTED_CHANGE);
            } else if (mergeResult.getPropertyAction().equals(MergeResult.ACTION_MERGE))
                image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.PROPERTY_CHANGE);
        }

        if (mergeResult.hasTreeConflict()) {
            if (mergeResult.isTreeConflictResolved())
                image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.MERGE);
            else
                image = mergeResultsDecorator.getImage(image, MergeResultsDecorator.TREE_CONFLICTED);
        }

        return image;
    }

    public String getText(Object element) {
        int mode = store.getInt(MergeResultsView.LAYOUT_PREFERENCE);
        if (element instanceof MergeOutput) {
            MergeOutput mergeOutput = (MergeOutput) element;
            if (mergeOutput.getDescription() == null) {
                if (mergeOutput.getResource() == null)
                    return ""; //$NON-NLS-1$
                else
                    return mergeOutput.getResource().getFullPath().makeRelative().toOSString();
            } else
                return mergeOutput.getDescription();
        }
        if (element instanceof MergeResultsFolder) {
            MergeResultsFolder folder = (MergeResultsFolder) element;
            return folder.toString();
        }
        if (element instanceof MergeResult) {
            MergeResult mergeResult = (MergeResult) element;
            if (mergeResult.getResource() != null && mergeResult.getResource().getName() != null) {
                if (mode == MergeResultsView.MODE_FLAT && mergeResult.getResource().getFullPath() != null)
                    return mergeResult.getResource().getName() + " - " //$NON-NLS-1$
                            + mergeResult.getResource().getFullPath().toString();
                else
                    return mergeResult.getResource().getName();
            }
        }
        return super.getText(element);
    }

    public Color getBackground(Object element) {
        return null;
    }

    public Color getForeground(Object element) {
        if (element instanceof MergeResult) {
            MergeResult mergeResult = (MergeResult) element;
            if (mergeResult.getAction().equals(MergeResult.ACTION_SKIP))
                return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
        }
        if (element instanceof MergeResultsFolder) {
            MergeResultsFolder mergeResultsFolder = (MergeResultsFolder) element;
            MergeResult mergeResult = mergeResultsFolder.getMergeResult();
            if (mergeResult != null && mergeResult.getAction().equals(MergeResult.ACTION_SKIP))
                return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
        }
        return null;
    }

}