/*
* Copyright (c) 2011, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.eclipse.org/legal/epl-v10.html
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.dart.tools.ui.internal.viewsupport;
import com.google.dart.tools.ui.DartX;
import org.eclipse.core.resources.IStorage;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IEditorRegistry;
import org.eclipse.ui.IFileEditorMapping;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* Standard label provider for IStorage objects. Use this class when you want to present IStorage
* objects in a viewer.
*/
public class StorageLabelProvider extends LabelProvider {
private IEditorRegistry fEditorRegistry = null;
private Map<String, Image> fJarImageMap = new HashMap<String, Image>(10);
private Image fDefaultImage;
/*
* (non-Javadoc)
*
* @see IBaseLabelProvider#dispose
*/
@Override
public void dispose() {
if (fJarImageMap != null) {
Iterator<Image> each = fJarImageMap.values().iterator();
while (each.hasNext()) {
Image image = each.next();
image.dispose();
}
fJarImageMap = null;
}
fDefaultImage = null;
}
/*
* (non-Javadoc)
*
* @see ILabelProvider#getImage
*/
@Override
public Image getImage(Object element) {
if (element instanceof IStorage) {
return getImageForJarEntry((IStorage) element);
}
return super.getImage(element);
}
/*
* (non-Javadoc)
*
* @see ILabelProvider#getText
*/
@Override
public String getText(Object element) {
if (element instanceof IStorage) {
return ((IStorage) element).getName();
}
return super.getText(element);
}
private Image getDefaultImage() {
if (fDefaultImage == null) {
fDefaultImage = PlatformUI.getWorkbench().getSharedImages().getImage(
ISharedImages.IMG_OBJ_FILE);
}
return fDefaultImage;
}
private IEditorRegistry getEditorRegistry() {
if (fEditorRegistry == null) {
fEditorRegistry = PlatformUI.getWorkbench().getEditorRegistry();
}
return fEditorRegistry;
}
/*
* Gets and caches an image for a JarEntryFile. The image for a JarEntryFile is retrieved from the
* EditorRegistry.
*/
private Image getImageForJarEntry(IStorage element) {
DartX.todo();
// if (element instanceof IJarEntryResource
// && !((IJarEntryResource) element).isFile()) {
// return PlatformUI.getWorkbench().getSharedImages().getImage(
// ISharedImages.IMG_OBJ_FOLDER);
// }
if (fJarImageMap == null) {
return getDefaultImage();
}
if (element == null || element.getName() == null) {
return getDefaultImage();
}
// Try to find icon for full name
String name = element.getName();
Image image = fJarImageMap.get(name);
if (image != null) {
return image;
}
IFileEditorMapping[] mappings = getEditorRegistry().getFileEditorMappings();
int i = 0;
while (i < mappings.length) {
if (mappings[i].getLabel().equals(name)) {
break;
}
i++;
}
String key = name;
if (i == mappings.length) {
// Try to find icon for extension
IPath path = element.getFullPath();
if (path == null) {
return getDefaultImage();
}
key = path.getFileExtension();
if (key == null) {
return getDefaultImage();
}
image = fJarImageMap.get(key);
if (image != null) {
return image;
}
}
// Get the image from the editor registry
ImageDescriptor desc = getEditorRegistry().getImageDescriptor(name);
image = desc.createImage();
fJarImageMap.put(key, image);
return image;
}
}