package org.eclipse.dltk.tcl.internal.ui.navigation; import java.util.HashMap; import java.util.Map; import org.eclipse.dltk.core.IScriptFolder; import org.eclipse.dltk.core.environment.EnvironmentManager; import org.eclipse.dltk.core.environment.EnvironmentPathUtils; import org.eclipse.dltk.core.environment.IEnvironment; import org.eclipse.dltk.core.environment.IFileHandle; import org.eclipse.dltk.tcl.internal.core.packages.TclPackageElement; import org.eclipse.dltk.tcl.internal.core.packages.TclPackageFragment; import org.eclipse.dltk.tcl.internal.core.packages.TclPackageSourceModule; import org.eclipse.dltk.tcl.internal.core.sources.TclSourcesFragment; import org.eclipse.dltk.tcl.internal.core.sources.TclSourcesSourceModule; import org.eclipse.dltk.tcl.internal.ui.TclImages; import org.eclipse.dltk.ui.DLTKPluginImages; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image; public class TclModelLabelProvider extends LabelProvider { @Override public String getText(Object element) { if (element instanceof TclPackageFragment) { return ((TclPackageFragment) element).getPackageName(); } else if (element instanceof TclSourcesFragment) { return "Sources"; } else if (element instanceof TclPackageElement) { TclPackageElement pkg = (TclPackageElement) element; String result = pkg.getPackageName(); if (pkg.getVersion() != null) { result += " " + pkg.getVersion(); } return result; } else if (element instanceof TclPackageSourceModule) { final TclPackageSourceModule module = (TclPackageSourceModule) element; return module.getElementName() + " (" + module.getStorage().getFullPath().toString() + ")"; } else if (element instanceof TclSourcesSourceModule) { TclSourcesSourceModule module = (TclSourcesSourceModule) element; IEnvironment environment = EnvironmentManager .getEnvironment(module.getScriptProject()); String originalName = module.getOriginalName(); String convertedPath = environment .convertPathToString(module.getFullPath()); IFileHandle file = EnvironmentPathUtils.getFile(module); boolean exists = file != null && file.exists(); String postFix = exists ? "" : " [Not available]"; if (originalName != null && !originalName.equals(convertedPath)) { return originalName + " (" + convertedPath + ")" + postFix; } return convertedPath + postFix; } return null; } @Override public Image getImage(Object element) { if (element instanceof TclSourcesFragment) { return DLTKPluginImages.get(DLTKPluginImages.IMG_OBJS_LIBRARY_SRC); } else if (element instanceof IScriptFolder) { if (element instanceof TclPackageElement || element instanceof TclSourcesFragment) { return null; } return getScriptFolderIcon(); } return null; } /** * @return */ private Image getScriptFolderIcon() { return getImageFor(TclImages.DESC_OBJS_FOLDER); // return PlatformUI.getWorkbench().getSharedImages().getImage( // ISharedImages.IMG_OBJ_FOLDER); } private Image getImageFor(ImageDescriptor descriptor) { Image image = registry.get(descriptor); if (image == null) { image = descriptor.createImage(); registry.put(descriptor, image); } return image; } private Map<ImageDescriptor, Image> registry = new HashMap<>(); }