com.synflow.cx.ui.labeling.ProblemsLabelDecorator.java Source code

Java tutorial

Introduction

Here is the source code for com.synflow.cx.ui.labeling.ProblemsLabelDecorator.java

Source

/*******************************************************************************
 * Copyright (c) 2014-2015 Synflow SAS.
 * 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:
 *    Matthieu Wipliez - initial API and implementation and/or initial documentation
 *******************************************************************************/
package com.synflow.cx.ui.labeling;

import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.jface.viewers.IDecoration;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ILightweightLabelDecorator;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;

import com.synflow.core.SynflowCore;
import com.synflow.core.layout.ITreeElement;

/**
 * This class defines a label decorator that doesn't do much at the moment.
 * 
 * @author Matthieu Wipliez
 *
 */
public class ProblemsLabelDecorator implements ILabelDecorator, ILightweightLabelDecorator {

    private ListenerList fListeners;

    @Override
    public void addListener(ILabelProviderListener listener) {
        if (fListeners == null) {
            fListeners = new ListenerList();
        }
        fListeners.add(listener);
    }

    @Override
    public void decorate(Object element, IDecoration decoration) {
    }

    @Override
    public Image decorateImage(Image image, Object obj) {
        int severity = findSeverity(obj);
        if (severity > 0) {
            Rectangle bounds = image.getBounds();
            Point size = new Point(bounds.width, bounds.height);
            return new CxImageDescriptor(image, severity, size).createImage();
        }
        return image;
    }

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

    @Override
    public void dispose() {
    }

    private int findSeverity(Object obj) {
        int severity = -1;

        IResource resource;
        if (obj instanceof IResource) {
            resource = (IResource) obj;
        } else if (obj instanceof ITreeElement) {
            ITreeElement element = (ITreeElement) obj;
            resource = element.getResource();
        } else {
            return severity;
        }

        if (!resource.isAccessible()) {
            return severity;
        }

        try {
            severity = resource.findMaxProblemSeverity(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE);
        } catch (CoreException e) {
            SynflowCore.log(e);
        }
        return severity;
    }

    @Override
    public boolean isLabelProperty(Object element, String property) {
        return false;
    }

    @Override
    public void removeListener(ILabelProviderListener listener) {
        if (fListeners != null) {
            fListeners.remove(listener);
        }
    }

}