/******************************************************************************* * 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); } }