/******************************************************************************* * Copyright (c) 2007, 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.navigator; import org.eclipse.core.resources.IFile; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IMemento; import org.eclipse.ui.navigator.ICommonContentExtensionSite; import org.eclipse.ui.navigator.ICommonLabelProvider; import org.eclipse.ui.navigator.IDescriptionProvider; import org.springframework.ide.eclipse.beans.core.BeansCorePlugin; import org.springframework.ide.eclipse.beans.core.metadata.model.IBeanMetadata; import org.springframework.ide.eclipse.beans.core.model.IBeansConfig; import org.springframework.ide.eclipse.beans.core.model.IBeansProject; import org.springframework.ide.eclipse.beans.ui.BeansUIImages; import org.springframework.ide.eclipse.beans.ui.BeansUILabels; import org.springframework.ide.eclipse.beans.ui.model.BeansModelLabelProvider; import org.springframework.ide.eclipse.beans.ui.model.BeansModelLabels; 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.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.ILazyInitializedModelElement; import org.springframework.ide.eclipse.core.model.IModelElement; import org.springframework.ide.eclipse.core.model.ISourceModelElement; import org.springframework.ide.eclipse.core.model.ISpringProject; /** * {@link ICommonLabelProvider} which knows about the beans core model's {@link IModelElement elements}. * @author Torsten Juergeleit * @author Christian Dupuis */ public class BeansNavigatorLabelProvider extends BeansModelLabelProvider implements ICommonLabelProvider, IFontProvider, IColorProvider { private Color grayColor = new Color(Display.getDefault(), 150, 150, 150); private String providerID; public BeansNavigatorLabelProvider() { super(true); } public BeansNavigatorLabelProvider(boolean isDecorating) { super(isDecorating); } public void init(ICommonContentExtensionSite config) { providerID = config.getExtension().getId(); } public void restoreState(IMemento memento) { } public void saveState(IMemento memento) { } public String getDescription(Object element) { if (element instanceof IBeanMetadata) { IBeanMetadataLabelProvider labelProvider = BeanMetadataUtils.getLabelProvider((IBeanMetadata) element); if (labelProvider != null) { labelProvider.getDescription(element); } } if (element instanceof IBeansProject) { return "Beans" // TODO Externalize string + " - " + ((IBeansProject) element).getProject().getName(); } else if (element instanceof ISourceModelElement) { INamespaceLabelProvider provider = NamespaceUtils.getLabelProvider((ISourceModelElement) element); if (provider != null && provider instanceof IDescriptionProvider) { return ((IDescriptionProvider) provider).getDescription(element); } else { return DEFAULT_NAMESPACE_LABEL_PROVIDER.getDescription(element); } } else if (element instanceof IModelElement) { return BeansModelLabels.getElementLabel((IModelElement) element, BeansUILabels.APPEND_PATH | BeansUILabels.DESCRIPTION); } if (element instanceof IFile) { IBeansConfig config = BeansCorePlugin.getModel().getConfig((IFile) element); if (config != null) { return BeansModelLabels.getElementLabel(config, BeansUILabels.APPEND_PATH | BeansUILabels.DESCRIPTION); } } else if (element instanceof ZipEntryStorage) { // Create label of zip entry 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.getFullPath().removeLastSegments(1).toString()); builder.append(" - "); builder.append(storage.getFile().getFullPath().toString()); return builder.toString(); } else if (element instanceof BeanMetadataReference && BeanMetadataUtils.getLabelProvider((BeanMetadataReference) element) != null) { return BeanMetadataUtils.getLabelProvider((BeanMetadataReference) element).getDescription(element); } return null; } @Override public String toString() { return providerID; } protected String getProviderID() { return providerID; } @Override public void dispose() { super.dispose(); if (grayColor != null) { grayColor.dispose(); } } @Override protected Image getImage(Object element, Object parentElement) { if (element instanceof IBeansProject) { Image image = BeansUIImages.getImage(BeansUIImages.IMG_OBJS_VIRTUAL_FOLDER); return image; } return super.getImage(element, parentElement); } @Override protected String getText(Object element, Object parentElement) { if (element instanceof ILazyInitializedModelElement && !((ILazyInitializedModelElement) element).isInitialized()) { return "initializing..."; // TODO CD Externalize string } else if (element instanceof IBeansProject) { return "Beans"; // TODO CD Externalize string } else if (element instanceof IBeansConfig && (parentElement instanceof ISpringProject || parentElement instanceof IBeansProject)) { return ((IBeansConfig) element).getElementName(); } else if (element instanceof IFile && parentElement instanceof IModelElement) { return ((IFile) element).getName() + " - " + ((IFile) element).getProjectRelativePath().removeLastSegments(1).toString(); } return super.getText(element, parentElement); } public Font getFont(Object element) { if (element instanceof ILazyInitializedModelElement && !((ILazyInitializedModelElement) element).isInitialized()) { return JFaceResources.getFontRegistry().getItalic(JFaceResources.DIALOG_FONT); } return null; } public Color getBackground(Object element) { return null; } public Color getForeground(Object element) { if (element instanceof ILazyInitializedModelElement && !((ILazyInitializedModelElement) element).isInitialized()) { return grayColor; } return null; } }