org.springframework.ide.eclipse.aop.ui.matcher.internal.WrappingBeansAndJavaModelLabelProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.springframework.ide.eclipse.aop.ui.matcher.internal.WrappingBeansAndJavaModelLabelProvider.java

Source

/*******************************************************************************
 * Copyright (c) 2007 Spring IDE Developers
 * 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:
 *     Spring IDE Developers - initial API and implementation
 *******************************************************************************/
package org.springframework.ide.eclipse.aop.ui.matcher.internal;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.ListenerList;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.ui.JavaElementLabelProvider;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.springframework.ide.eclipse.aop.core.model.IAopReference;
import org.springframework.ide.eclipse.beans.core.model.IBeansModelElement;
import org.springframework.ide.eclipse.beans.ui.model.BeansModelLabelProvider;

/**
 * Simple wrapper for a {@link JavaElementLabelProvider} and a
 * {@link BeansModelLabelProvider}.
 * @author Christian Dupuis
 * @since 2.0.2
 */
public class WrappingBeansAndJavaModelLabelProvider extends LabelProvider {

    private JavaElementLabelProvider javaLabelProvider = new JavaElementLabelProvider(
            JavaElementLabelProvider.SHOW_OVERLAY_ICONS | JavaElementLabelProvider.SHOW_SMALL_ICONS
                    | JavaElementLabelProvider.SHOW_PARAMETERS | JavaElementLabelProvider.SHOW_RETURN_TYPE
                    | JavaElementLabelProvider.SHOW_TYPE);

    private BeansModelLabelProvider beansLabelProvider = new BeansModelLabelProvider();

    private List<ILabelDecorator> labelDecorators;

    protected ListenerList listeners = new ListenerList();

    public void addLabelDecorator(ILabelDecorator decorator) {
        if (labelDecorators == null) {
            labelDecorators = new ArrayList<ILabelDecorator>(2);
        }
        labelDecorators.add(decorator);
    }

    public void addListener(ILabelProviderListener listener) {
        if (labelDecorators != null) {
            for (ILabelDecorator decorator : labelDecorators) {
                decorator.addListener(listener);
            }
        }
        listeners.add(listener);
    }

    protected Image decorateImage(Image image, Object element) {
        if (labelDecorators != null && image != null) {
            for (ILabelDecorator decorator : labelDecorators) {
                image = decorator.decorateImage(image, element);
            }
        }
        return image;
    }

    protected String decorateText(String text, Object element) {
        if (labelDecorators != null && text.length() > 0) {
            for (ILabelDecorator decorator : labelDecorators) {
                String decorated = decorator.decorateText(text, element);
                if (decorated != null) {
                    text = decorated;
                }
            }
        }
        return text;
    }

    public void dispose() {
        javaLabelProvider.dispose();
        beansLabelProvider.dispose();
        if (labelDecorators != null) {
            for (int i = 0; i < labelDecorators.size(); i++) {
                ILabelDecorator decorator = (ILabelDecorator) labelDecorators.get(i);
                decorator.dispose();
            }
            labelDecorators = null;
        }
        super.dispose();
    }

    @Override
    public Image getImage(Object element) {
        Image image = null;
        if (element instanceof IAopReference) {
            image = javaLabelProvider.getImage(((IAopReference) element).getTarget());
        } else if (element instanceof IBeansModelElement) {
            image = beansLabelProvider.getImage(element);
        } else if (element instanceof IResource) {
            image = beansLabelProvider.getImage(element);
        }
        if (image != null) {
            return decorateImage(image, element);
        }
        return super.getImage(element);
    }

    @Override
    public String getText(Object element) {
        String text = null;
        if (element instanceof IAopReference) {
            text = javaLabelProvider.getText(((IAopReference) element).getTarget());
        } else if (element instanceof IMethod) {
            text = javaLabelProvider.getText(element);
        } else if (element instanceof IBeansModelElement) {
            text = beansLabelProvider.getText(element);
        } else if (element instanceof IResource) {
            text = ((IResource) element).getProjectRelativePath().toString();
        }
        if (text != null) {
            return decorateText(text, element);
        }
        return super.getText(element);
    }

    public void removeListener(ILabelProviderListener listener) {
        if (labelDecorators != null) {
            for (ILabelDecorator decorator : labelDecorators) {
                decorator.removeListener(listener);
            }
        }
        listeners.remove(listener);
    }
}