eu.numberfour.n4js.ui.workingsets.WorkingSetLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for eu.numberfour.n4js.ui.workingsets.WorkingSetLabelProvider.java

Source

/**
 * Copyright (c) 2016 NumberFour AG.
 * 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:
 *   NumberFour AG - Initial API and implementation
 */
package eu.numberfour.n4js.ui.workingsets;

import static eu.numberfour.n4js.utils.Arrays2.transform;
import static org.eclipse.jface.viewers.StyledString.COUNTER_STYLER;

import java.util.List;

import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.IStyledLabelProvider;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.swt.graphics.Image;

import eu.numberfour.n4js.ui.ImageDescriptorCache.ImageRef;

/**
 * Label provider for working sets.
 */
public class WorkingSetLabelProvider extends LabelProvider implements IStyledLabelProvider, ILabelDecorator {

    /**
     * Shared label provider instance for working sets.
     */
    public static WorkingSetLabelProvider INSTANCE = new WorkingSetLabelProvider();

    private WorkingSetLabelProvider() {
        // Singleton.
    }

    @Override
    public Image getImage(final Object element) {
        if (element instanceof WorkingSet) {
            return ImageRef.WORKING_SET.asImage().orNull();
        }
        return super.getImage(element);
    }

    @Override
    public String getText(final Object element) {
        if (element instanceof WorkingSet) {
            return ((WorkingSet) element).getName();
        }
        return super.getText(element);
    }

    @Override
    public StyledString getStyledText(Object element) {
        if (element instanceof WorkingSet) {
            final WorkingSet workingSet = (WorkingSet) element;
            final WorkingSetManager manager = workingSet.getWorkingSetManager();

            final String name = workingSet.getName();
            final List<String> allNames = transform(manager.getAllWorkingSets(), ws -> ws.getName());
            if (containsDuplicates(name, allNames)) {
                final String suffix = " [" + workingSet.getId() + "]";
                final StyledString string = new StyledString(name);
                string.append(suffix, COUNTER_STYLER);
                return string;
            }
        }
        return new StyledString(getText(element));
    }

    private boolean containsDuplicates(String toCheck, Iterable<String> elements) {
        int counter = 0;
        for (String element : elements) {
            if (counter > 1) {
                return true;
            }
            if (toCheck.equals(element)) {
                counter++;
            }
        }
        return false;
    }

    @Override
    public Image decorateImage(Image image, Object element) {
        return image;
    }

    @Override
    public String decorateText(String text, Object element) {
        return text;
    }

}