Java tutorial
/***************************************************************************** * Copyright (c) 2006, 2007 g-Eclipse Consortium * 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 * * Initial development of the original code was made for the * g-Eclipse project founded by European Union * project number: FP6-IST-034327 http://www.geclipse.eu/ * * Contributors: * Mathias Stuempert - initial API and implementation *****************************************************************************/ package eu.geclipse.ui.decorators; import java.net.URL; import java.util.Hashtable; import java.util.List; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IContributor; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IDecoration; import org.eclipse.jface.viewers.ILightweightLabelDecorator; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.LabelProviderChangedEvent; import org.eclipse.ui.IDecoratorManager; import org.eclipse.ui.PlatformUI; import org.osgi.framework.Bundle; import eu.geclipse.core.ExtensionManager; import eu.geclipse.core.Extensions; import eu.geclipse.core.model.IGridContainer; import eu.geclipse.core.model.IGridElement; import eu.geclipse.core.model.IGridProject; import eu.geclipse.ui.internal.Activator; public class GridProjectFolderDecorator extends LabelProvider implements ILightweightLabelDecorator { private static final String ID = "eu.geclipse.ui.gridProjectFolderDecorator"; //$NON-NLS-1$ private Hashtable<String, ImageDescriptor> images = new Hashtable<String, ImageDescriptor>(); public static GridProjectFolderDecorator getDecorator() { GridProjectFolderDecorator result = null; IDecoratorManager decoratorManager = PlatformUI.getWorkbench().getDecoratorManager(); if (decoratorManager.getEnabled(ID)) { result = (GridProjectFolderDecorator) decoratorManager.getBaseLabelProvider(ID); } return result; } public GridProjectFolderDecorator() { ImageDescriptor standardImage = null; ImageDescriptor image = null; ExtensionManager extm = new ExtensionManager(); List<IConfigurationElement> configurationElements = extm .getConfigurationElements(Extensions.PROJECT_FOLDER_POINT, Extensions.PROJECT_FOLDER_ELEMENT); for (IConfigurationElement element : configurationElements) { String id = element.getAttribute(Extensions.PROJECT_FOLDER_ID_ATTRIBUTE); String icon = element.getAttribute(Extensions.PROJECT_FOLDER_ICON_ATTRIBUTE); if (icon != null) { IExtension extension = element.getDeclaringExtension(); IContributor contributor = extension.getContributor(); String name = contributor.getName(); Bundle bundle = Platform.getBundle(name); URL url = FileLocator.find(bundle, new Path(icon), null); image = ImageDescriptor.createFromURL(url); } else { if (standardImage == null) { URL url = Activator.getDefault().getBundle().getEntry("icons/ovr16/project_ovr.gif"); //$NON-NLS-1$ standardImage = ImageDescriptor.createFromURL(url); } image = standardImage; } this.images.put(id, image); } } public void decorate(final Object element, final IDecoration decoration) { if (element instanceof IGridContainer) { decorate((IGridContainer) element, decoration); } } public void refresh(final IGridElement toUpdate) { LabelProviderChangedEvent event = new LabelProviderChangedEvent(getDecorator(), toUpdate); fireLabelProviderChanged(event); } public void refresh(final IGridElement[] toUpdate) { LabelProviderChangedEvent event = new LabelProviderChangedEvent(getDecorator(), toUpdate); fireLabelProviderChanged(event); } private void decorate(final IGridContainer container, final IDecoration decoration) { IGridContainer parent = container.getParent(); if (parent instanceof IGridProject) { String id = ((IGridProject) parent).getProjectFolderID(container); if (id != null) { ImageDescriptor image = this.images.get(id); if (image != null) { decoration.addOverlay(image, IDecoration.TOP_RIGHT); } } } } }