/******************************************************************************* * Copyright (c) 2006, 2010 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.beans.ui.model; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.PlatformUI; import org.springframework.ide.eclipse.beans.core.internal.model.BeanClassReferences; import org.springframework.ide.eclipse.beans.core.metadata.model.IBeanMetadata; import org.springframework.ide.eclipse.beans.ui.BeansUIImages; import org.springframework.ide.eclipse.beans.ui.BeansUIPlugin; import org.springframework.ide.eclipse.beans.ui.model.metadata.BeanMetadataNode; import org.springframework.ide.eclipse.beans.ui.model.metadata.BeanMetadataReference; import org.springframework.ide.eclipse.beans.ui.model.metadata.BeanMetadataUtils; import org.springframework.ide.eclipse.beans.ui.model.metadata.IBeanMetadataLabelProvider; import org.springframework.ide.eclipse.beans.ui.namespaces.DefaultNamespaceLabelProvider; import org.springframework.ide.eclipse.beans.ui.namespaces.INamespaceLabelProvider; import org.springframework.ide.eclipse.beans.ui.namespaces.NamespaceUtils; import org.springframework.ide.eclipse.core.io.ZipEntryStorage; import org.springframework.ide.eclipse.core.model.IModelElement; import org.springframework.ide.eclipse.core.model.ISourceModelElement; import org.springframework.ide.eclipse.ui.viewers.DecoratingWorkbenchTreePathLabelProvider; /** * This {@link ILabelProvider} knows about the beans core model's {@link IModelElement}s. * @author Torsten Juergeleit * @author Christian Dupuis */ public class BeansModelLabelProvider extends DecoratingWorkbenchTreePathLabelProvider { public static final DefaultNamespaceLabelProvider DEFAULT_NAMESPACE_LABEL_PROVIDER = new DefaultNamespaceLabelProvider(); public BeansModelLabelProvider() { super(false); } public BeansModelLabelProvider(boolean isDecorating) { super(isDecorating); } @Override protected Image getImage(Object element, Object parentElement) { Image image = null; if (element instanceof IBeanMetadata) { IBeanMetadataLabelProvider labelProvider = BeanMetadataUtils.getLabelProvider((IBeanMetadata) element); if (labelProvider != null) { image = labelProvider.getImage(element); } } if (element instanceof BeanMetadataNode) { return ((BeanMetadataNode) element).getImage(); } else if (element instanceof ISourceModelElement) { INamespaceLabelProvider provider = NamespaceUtils.getLabelProvider((ISourceModelElement) element); IModelElement context = (parentElement instanceof IModelElement ? (IModelElement) parentElement : null); if (provider != null) { image = provider.getImage((ISourceModelElement) element, context, isDecorating()); } else { image = DEFAULT_NAMESPACE_LABEL_PROVIDER.getImage((ISourceModelElement) element, context, isDecorating()); } } else if (element instanceof IModelElement) { if (parentElement instanceof IModelElement) { image = BeansModelImages.getImage((IModelElement) element, (IModelElement) parentElement, isDecorating()); } else { image = BeansModelImages.getImage((IModelElement) element); } } else if (element instanceof ZipEntryStorage) { return super.getImage(((ZipEntryStorage) element).getFile(), parentElement); } else if (element instanceof BeanClassReferences) { image = BeansUIImages.getImage(BeansUIImages.IMG_OBJS_REFERENCE); } else if (element instanceof BeanMetadataReference && BeanMetadataUtils.getLabelProvider((BeanMetadataReference) element) != null) { image = BeanMetadataUtils.getLabelProvider((BeanMetadataReference) element).getImage(element); } // Add decorations if required if (image != null) { if (isDecorating()) { image = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator().decorateImage(image, element); } return image; } return super.getImage(element, parentElement); } @Override protected String getText(Object element, Object parentElement) { if (element instanceof IBeanMetadata) { IBeanMetadataLabelProvider labelProvider = BeanMetadataUtils.getLabelProvider((IBeanMetadata) element); if (labelProvider != null) { return labelProvider.getText(element); } } if (element instanceof BeanMetadataNode) { return ((BeanMetadataNode) element).getLabel(); } else if (element instanceof ISourceModelElement) { INamespaceLabelProvider provider = NamespaceUtils.getLabelProvider((ISourceModelElement) element); IModelElement context = (parentElement instanceof IModelElement ? (IModelElement) parentElement : null); if (provider != null) { return provider.getText((ISourceModelElement) element, context, isDecorating()); } else { return DEFAULT_NAMESPACE_LABEL_PROVIDER.getText((ISourceModelElement) element, context, isDecorating()); } } else if (element instanceof IModelElement) { return BeansModelLabels.getElementLabel((IModelElement) element, 0); } else if (element instanceof ZipEntryStorage) { // create zip entry label right here as it is not a core model // element ZipEntryStorage storage = (ZipEntryStorage) element; StringBuilder builder = new StringBuilder(); builder.append(storage.getFullPath().lastSegment()); builder.append(" - "); builder.append(storage.getFile().getProjectRelativePath().toString()); builder.append("!"); builder.append(storage.getFullPath().removeLastSegments(1).toString()); return builder.toString(); } else if (element instanceof BeanClassReferences) { return BeansUIPlugin.getResourceString("BeanClassReferences.label"); } else if (element instanceof BeanMetadataReference) { IBeanMetadataLabelProvider labelProvider = BeanMetadataUtils.getLabelProvider((BeanMetadataReference) element); if (labelProvider != null) { return labelProvider.getText(element); } } return super.getText(element, parentElement); } }